Name: series-workflowmrdxc Phase: Running StartedAt: 2026-09-07 20:19:16 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmrdxc[0] Phase: Succeeded StartedAt: 2026-09-07 20:19:16 +0000 UTC FinishedAt: 2026-09-07 20:22:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmrdxc[0].run-triage Phase: Succeeded StartedAt: 2026-09-07 20:19:16 +0000 UTC FinishedAt: 2026-09-07 20:22:10 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "1b7415bf70be95b9a1e7e87d544867881065613f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "DEBUG_INFO_BTF", "BPF_LSM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "1b7415bf70be95b9a1e7e87d544867881065613f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "DEBUG_INFO_BTF", "BPF_LSM" ], "series_id": "4e99b38f-3352-4c93-9dea-5d0b879102c5" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "bpf_copy_from_user_mm", "bpf_copy_from_user_mm_str", "bpf_copy_from_user_task", "bpf_copy_from_user_task_str", "copy_remote_mm_str", "copy_remote_vm_str", "__copy_remote_mm_str", "check_ptr_to_btf_access", "type_is_trusted_or_null", "check_mem_access", "bpf_convert_ctx_accesses", "free_bprm" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjIwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0RFQlVHX0lORk9fQlRGJiMzNDssCiAgICAmIzM0O0JQRl9MU00mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfY29weV9mcm9tX3VzZXJfbW0mIzM0OywKICAgICYjMzQ7YnBmX2NvcHlfZnJvbV91c2VyX21tX3N0ciYjMzQ7LAogICAgJiMzNDticGZfY29weV9mcm9tX3VzZXJfdGFzayYjMzQ7LAogICAgJiMzNDticGZfY29weV9mcm9tX3VzZXJfdGFza19zdHImIzM0OywKICAgICYjMzQ7Y29weV9yZW1vdGVfbW1fc3RyJiMzNDssCiAgICAmIzM0O2NvcHlfcmVtb3RlX3ZtX3N0ciYjMzQ7LAogICAgJiMzNDtfX2NvcHlfcmVtb3RlX21tX3N0ciYjMzQ7LAogICAgJiMzNDtjaGVja19wdHJfdG9fYnRmX2FjY2VzcyYjMzQ7LAogICAgJiMzNDt0eXBlX2lzX3RydXN0ZWRfb3JfbnVsbCYjMzQ7LAogICAgJiMzNDtjaGVja19tZW1fYWNjZXNzJiMzNDssCiAgICAmIzM0O2JwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcyYjMzQ7LAogICAgJiMzNDtmcmVlX2Jwcm0mIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBCUEYga2Z1bmNzIGZvciBjb3B5aW5nIG1lbW9yeSBmcm9tIGFuIGFyYml0cmFyeSBgc3RydWN0IG1tX3N0cnVjdGAgKGBicGZfY29weV9mcm9tX3VzZXJfbW1gIGFuZCBgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cmApLCByZWZhY3RvcnMgZXhpc3RpbmcgdGFzay1iYXNlZCBoZWxwZXJzIHRvIHVzZSB0aGVzZSBmdW5jdGlvbnMsIGNsZWFycyBgYnBybS1cdTAwM2VtbWAgYmVmb3JlIGRyb3BwaW5nIHRoZSByZWZlcmVuY2UgaW4gYGZyZWVfYnBybSgpYCwgYW5kIHVwZGF0ZXMgdGhlIEJQRiB2ZXJpZmllciB0byBhbGxvdyBmYXVsdC1wcm90ZWN0ZWQgbG9hZHMgdGhyb3VnaCB0cnVzdGVkLW9yLW51bGwgQlRGIHBvaW50ZXJzIChgYnBmX2lzX3RydXN0ZWRfb3JfbnVsbF9idGZfcHRyYCkuXG5cbktNU0FOIHZzIEtBU0FOIEFwcGxpY2FiaWxpdHk6XG4tIEtNU0FOIGRldGVjdHMgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwL3BhZ2UgbWVtb3J5IGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgZGlzY2xvc3VyZSAoaW5mby1sZWFrcykuXG4tIEtBU0FOIC8gTE9DS0RFUCBkZXRlY3QgbWVtb3J5IGNvcnJ1cHRpb25zLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLCBhbmQgbG9ja2luZyBlcnJvcnMuXG4tIFRoZSBuZXcgQlBGIGNvcHkga2Z1bmNzIHByb3Blcmx5IGhhbmRsZSBtZW1vcnkgaW5pdGlhbGl6YXRpb246IGFueSBkZXN0aW5hdGlvbiBidWZmZXJzIGFyZSBlaXRoZXIgZnVsbHkgd3JpdHRlbiBvciBleHBsaWNpdGx5IHplcm9lZCB2aWEgYG1lbXNldCgpYCB1cG9uIGZhaWx1cmUsIHBhcnRpYWwgcmVhZHMsIG9yIHdoZW4gYEJQRl9GX1BBRF9aRVJPU2AgaXMgcmVxdWVzdGVkLlxuLSBObyB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIHN0YWNrIGFsbG9jYXRpb25zLCBvciBrZXJuZWwtdG8tdXNlciBsZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLlxuLSBWZXJpZmllciB0eXBlIHRyYWNraW5nIGFuZCByZWZlcmVuY2UgY291bnRpbmcgY2hhbmdlcyByZWxhdGUgdG8gcG9pbnRlciB2YWxpZGl0eSBhbmQgZmF1bHQgaGFuZGxpbmcsIGFyZWFzIHdoZXJlIEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMgYXJlIGFwcGxpY2FibGUsIG5vdCBLTVNBTi5cblxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IHNsZWVwYWJsZSBCUEYga2Z1bmNzIChicGZfY29weV9mcm9tX3VzZXJfbW0gYW5kIGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIpLCByZWZhY3RvcnMgcmVtb3RlIE1NIHN0cmluZyBjb3B5aW5nIGhlbHBlcnMgYWNyb3NzIG1tLyBhbmQga2VybmVsL2JwZi8sIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gYWxsb3cgZmF1bHQtcHJvdGVjdGVkIGxvYWRzIHRocm91Z2ggdHJ1c3RlZC1vci1udWxsIHBvaW50ZXJzLCBhbmQgYWx0ZXJzIG1tIGNsZWFudXAgaW4gZnJlZV9icHJtKCkuIFRoZXNlIGNoYW5nZXMgdG91Y2ggY29yZSBCUEYgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IGV4ZWN1dGlvbiBwYXRocyByZWFjaGFibGUgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMgdmlhIEJQRiBhbmQgZXhlYyBzeXNjYWxscy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMDoyMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGRiNzdhZjY2YjNhYTA3YjEzZGM4M2FhZmNhMWI4YjBhMDI5MWExZmJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDIwOjIwOjUzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4ZWMuYyBiL2ZzL2V4ZWMuY1xuaW5kZXggNzQ1ZjZlYjUyNzllNi4uNGRkZDQwM2ZkOTFjNyAxMDA2NDRcbi0tLSBhL2ZzL2V4ZWMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXhlYy5jXG5AQCAtMTQ1Niw5ICYjNDM7MTQ1NiwxMiBAQCB2b2lkIGJwcm1fZHJvcF9sb2FkZXIoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbiBcbiBzdGF0aWMgdm9pZCBmcmVlX2Jwcm0oc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbiB7XG4tXHRpZiAoYnBybS1cdTAwM2VtbSkge1xuJiM0MztcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gYnBybS1cdTAwM2VtbTtcbiYjNDM7XG4mIzQzO1x0aWYgKG1tKSB7XG4gXHRcdGFjY3RfYXJnX3NpemUoYnBybSwgMCk7XG4tXHRcdG1tcHV0KGJwcm0tXHUwMDNlbW0pO1xuJiM0MztcdFx0YnBybS1cdTAwM2VtbSA9IE5VTEw7XG4mIzQzO1x0XHRtbXB1dChtbSk7XG4gXHR9XG4gXHRpZiAoYnBybS1cdTAwM2V1c2VyX25zKVxuIFx0XHRwdXRfdXNlcl9ucyhicHJtLVx1MDAzZXVzZXJfbnMpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmggYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG5pbmRleCA5NzI3ZGY1YWY4M2FiLi40ZjAzMmFkODNjNjc1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuQEAgLTEzMzksNiAmIzQzOzEzMzksMTEgQEAgc3RhdGljIGlubGluZSBib29sIGJwZl9pc19wdHJfdG9fbWVtX29yX2J0Zl9pZChlbnVtIGJwZl9yZWdfdHlwZSB0eXBlKVxuIFx0fVxuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGJwZl9pc190cnVzdGVkX29yX251bGxfYnRmX3B0cihlbnVtIGJwZl9yZWdfdHlwZSB0eXBlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHR5cGUgPT0gKFBUUl9UT19CVEZfSUQgfCBQVFJfVFJVU1RFRCB8IFBUUl9NQVlCRV9OVUxMKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIGJvb2wgYnBmX21heV9mYXVsdF9vbl9kZXJlZihlbnVtIGJwZl9yZWdfdHlwZSB0eXBlKVxuIHtcbiBcdC8qXG5AQCAtMTM0Niw3ICYjNDM7MTM1MSw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBicGZfbWF5X2ZhdWx0X29uX2RlcmVmKGVudW0gYnBmX3JlZ190eXBlIHR5cGUpXG4gXHQgKiBwcm90ZWN0aW9uLCB0aGF0IGlzLCB0aGUgb25lcyBicGZfY29udmVydF9jdHhfYWNjZXNzZXMoKSBoYXMgdG9cbiBcdCAqIHR1cm4gYSBCUEZfTERYIGludG8gYSBCUEZfUFJPQkVfTUVNIG9uZSBmb3IuXG4gXHQgKi9cbi1cdHJldHVybiB0eXBlID09IFBUUl9UT19CVEZfSUQgfHwgKHR5cGVfZmxhZyh0eXBlKSBcdTAwMjYgUFRSX1VOVFJVU1RFRCk7XG4mIzQzO1x0cmV0dXJuIHR5cGUgPT0gUFRSX1RPX0JURl9JRCB8fFxuJiM0MztcdCAgICAgICAodHlwZV9mbGFnKHR5cGUpIFx1MDAyNiBQVFJfVU5UUlVTVEVEKSB8fFxuJiM0MztcdCAgICAgICBicGZfaXNfdHJ1c3RlZF9vcl9udWxsX2J0Zl9wdHIodHlwZSk7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBicGZfcHJvZ19oYXNfYXJlbmFfY3R4X2FyZyhjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oXG5pbmRleCBkZDA5YzQzOGZhMjNlLi5kNWJkZTFmNzFhOTdlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tLmhcbkBAIC0zMzI2LDYgJiM0MzszMzI2LDggQEAgZXh0ZXJuIGludCBhY2Nlc3NfcmVtb3RlX3ZtKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncyk7XG4gXG4gI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxuJiM0MztleHRlcm4gaW50IGNvcHlfcmVtb3RlX21tX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuJiM0MztcdFx0XHQgICAgICB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpO1xuIGV4dGVybiBpbnQgY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdFx0ICAgICAgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKTtcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2hlbHBlcnMuYyBiL2tlcm5lbC9icGYvaGVscGVycy5jXG5pbmRleCBiM2NjNWM4ZmM4NzU2Li5kM2M1NjQ0MzdhZDA2IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9oZWxwZXJzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvaGVscGVycy5jXG5AQCAtMzIsNiAmIzQzOzMyLDEwIEBAXG4gXG4gI2luY2x1ZGUgXCYjMzQ7Li4vLi4vbGliL2tzdHJ0b3guaFwmIzM0O1xuIFxuJiM0MztfX2JwZl9rZnVuYyBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX21tKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osXG4mIzQzO1x0XHRcdFx0ICAgICAgY29uc3Qgdm9pZCBfX3VzZXIgKnVuc2FmZV9wdHJfX2lnbixcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdTY0IGZsYWdzKTtcbiYjNDM7XG4gLyogSWYga2VybmVsIHN1YnN5c3RlbSBpcyBhbGxvd2luZyBlQlBGIHByb2dyYW1zIHRvIGNhbGwgdGhpcyBmdW5jdGlvbixcbiAgKiBpbnNpZGUgaXRzIG93biB2ZXJpZmllcl9vcHMtXHUwMDNlZ2V0X2Z1bmNfcHJvdG8oKSBjYWxsYmFjayBpdCBzaG91bGQgcmV0dXJuXG4gICogYnBmX21hcF9sb29rdXBfZWxlbV9wcm90bywgc28gdGhhdCB2ZXJpZmllciBjYW4gcHJvcGVybHkgY2hlY2sgdGhlIGFyZ3VtZW50c1xuQEAgLTY4MiwyMiAmIzQzOzY4NiwxNSBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2NvcHlfZnJvbV91c2VyX3Byb3RvID0ge1xuIEJQRl9DQUxMXzUoYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2ssIHZvaWQgKiwgZHN0LCB1MzIsIHNpemUsXG4gXHQgICBjb25zdCB2b2lkIF9fdXNlciAqLCB1c2VyX3B0ciwgc3RydWN0IHRhc2tfc3RydWN0ICosIHRzaywgdTY0LCBmbGFncylcbiB7XG4mIzQzO1x0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4gXHRpbnQgcmV0O1xuIFxuLVx0LyogZmxhZ3MgaXMgbm90IHVzZWQgeWV0ICovXG4tXHRpZiAodW5saWtlbHkoZmxhZ3MpKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cbi1cdGlmICh1bmxpa2VseSghc2l6ZSkpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0cmV0ID0gYWNjZXNzX3Byb2Nlc3Nfdm0odHNrLCAodW5zaWduZWQgbG9uZyl1c2VyX3B0ciwgZHN0LCBzaXplLCAwKTtcbi1cdGlmIChyZXQgPT0gc2l6ZSlcbi1cdFx0cmV0dXJuIDA7XG4mIzQzO1x0bW0gPSBnZXRfdGFza19tbSh0c2spO1xuJiM0MztcdHJldCA9IGJwZl9jb3B5X2Zyb21fdXNlcl9tbShkc3QsIHNpemUsIHVzZXJfcHRyLCBtbSwgZmxhZ3MpO1xuJiM0MztcdGlmIChtbSlcbiYjNDM7XHRcdG1tcHV0KG1tKTtcbiBcbi1cdG1lbXNldChkc3QsIDAsIHNpemUpO1xuLVx0LyogUmV0dXJuIC1FRkFVTFQgZm9yIHBhcnRpYWwgcmVhZCAqL1xuLVx0cmV0dXJuIHJldCBcdTAwM2MgMCA/IHJldCA6IC1FRkFVTFQ7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3Byb3RvID0ge1xuQEAgLTM2NTgsNiAmIzQzOzM2NTUsMTAwIEBAIF9fYnBmX2tmdW5jIGludCBicGZfY29weV9mcm9tX3VzZXJfc3RyKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osIGNvbnN0IHZvaWQgX191c2VyXG4gXHRyZXR1cm4gcmV0ICYjNDM7IDE7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogYnBmX2NvcHlfZnJvbV91c2VyX21tKCkgLSBDb3B5IGRhdGEgZnJvbSBhbiBhZGRyZXNzIHNwYWNlXG4mIzQzOyAqIEBkc3Q6ICAgICAgICAgICAgIERlc3RpbmF0aW9uIGFkZHJlc3MsIGluIGtlcm5lbCBzcGFjZVxuJiM0MzsgKiBAZHN0X19zejogICAgICAgICBOdW1iZXIgb2YgYnl0ZXMgdG8gY29weVxuJiM0MzsgKiBAdW5zYWZlX3B0cl9faWduOiBTb3VyY2UgYWRkcmVzcyBpbiB0aGUgYWRkcmVzcyBzcGFjZVxuJiM0MzsgKiBAbW06ICAgICAgICAgICAgICBBZGRyZXNzIHNwYWNlIHRvIGNvcHkgZnJvbVxuJiM0MzsgKiBAZmxhZ3M6ICAgICAgICAgICBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZTsgbXVzdCBiZSB6ZXJvXG4mIzQzOyAqXG4mIzQzOyAqIENvcGllcyBkYXRhIGZyb20gdGhlIHVzZXIgYWRkcmVzcyBzcGFjZSBhc3NvY2lhdGVkIHdpdGggQG1tLiBUaGUgZGVzdGluYXRpb25cbiYjNDM7ICogaXMgemVyb2VkIGlmIGFuIGF0dGVtcHRlZCBjb3B5IGNhbm5vdCBiZSBjb21wbGV0ZWQgaW4gZnVsbC4gVW5zdXBwb3J0ZWRcbiYjNDM7ICogZmxhZ3MgcmV0dXJuIC1FSU5WQUwgd2l0aG91dCBtb2RpZnlpbmcgQGRzdC5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FSU5WQUwgaWYgQGZsYWdzIGlzIG5vbi16ZXJvLCBvciAtRUZBVUxUIGlmIHRoZSBjb3B5XG4mIzQzOyAqIGZhaWxzIG9yIGlzIHBhcnRpYWwuXG4mIzQzOyAqL1xuJiM0MztfX2JwZl9rZnVuYyBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX21tKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osXG4mIzQzO1x0XHRcdFx0ICAgICAgY29uc3Qgdm9pZCBfX3VzZXIgKnVuc2FmZV9wdHJfX2lnbixcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdTY0IGZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHVubGlrZWx5KGZsYWdzKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAodW5saWtlbHkoIWRzdF9fc3opKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmICh1bmxpa2VseSghbW0pKSB7XG4mIzQzO1x0XHRtZW1zZXQoZHN0LCAwLCBkc3RfX3N6KTtcbiYjNDM7XHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWNjZXNzX3JlbW90ZV92bShtbSwgKHVuc2lnbmVkIGxvbmcpdW5zYWZlX3B0cl9faWduLFxuJiM0MztcdFx0XHQgICAgICAgZHN0LCBkc3RfX3N6LCAwKTtcbiYjNDM7XHRpZiAocmV0ID09IGRzdF9fc3opXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0bWVtc2V0KGRzdCwgMCwgZHN0X19zeik7XG4mIzQzO1x0cmV0dXJuIHJldCBcdTAwM2MgMCA/IHJldCA6IC1FRkFVTFQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKCkgLSBDb3B5IGEgc3RyaW5nIGZyb20gYW4gYWRkcmVzcyBzcGFjZVxuJiM0MzsgKiBAZHN0OiAgICAgICAgICAgICBEZXN0aW5hdGlvbiBhZGRyZXNzLCBpbiBrZXJuZWwgc3BhY2UuIFRoaXMgYnVmZmVyIG11c3QgYmVcbiYjNDM7ICogICAgICAgICAgICAgICAgICAgYXQgbGVhc3QgQGRzdF9fc3ogYnl0ZXMgbG9uZ1xuJiM0MzsgKiBAZHN0X19zejogICAgICAgICBNYXhpbXVtIG51bWJlciBvZiBieXRlcyB0byBjb3B5LCBpbmNsdWRpbmcgdGhlIHRyYWlsaW5nIE5VTFxuJiM0MzsgKiBAdW5zYWZlX3B0cl9faWduOiBTb3VyY2UgYWRkcmVzcyBpbiB0aGUgYWRkcmVzcyBzcGFjZVxuJiM0MzsgKiBAbW06ICAgICAgICAgICAgICBBZGRyZXNzIHNwYWNlIHRvIGNvcHkgZnJvbVxuJiM0MzsgKiBAZmxhZ3M6ICAgICAgICAgICBUaGUgb25seSBzdXBwb3J0ZWQgZmxhZyBpcyBCUEZfRl9QQURfWkVST1NcbiYjNDM7ICpcbiYjNDM7ICogQ29waWVzIGEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIGZyb20gdGhlIHVzZXIgYWRkcmVzcyBzcGFjZSBhc3NvY2lhdGVkIHdpdGhcbiYjNDM7ICogQG1tLiBJZiB0aGUgc3RyaW5nIGlzIHRvbyBsb25nLCBAZHN0IGlzIHN0aWxsIE5VTC10ZXJtaW5hdGVkIHVubGVzcyBAZHN0X19zelxuJiM0MzsgKiBpcyB6ZXJvLlxuJiM0MzsgKlxuJiM0MzsgKiBJZiB0aGUgZmxhZ3MgYXJlIHZhbGlkIGFuZCBCUEZfRl9QQURfWkVST1MgaXMgc2V0LCB0aGUgdW51c2VkIHBvcnRpb24gb2ZcbiYjNDM7ICogQGRzdCBpcyBjbGVhcmVkIG9uIHN1Y2Nlc3MgYW5kIGFsbCBvZiBAZHN0IGlzIGNsZWFyZWQgb24gYSBjb3B5IGZhaWx1cmUuXG4mIzQzOyAqIFVuc3VwcG9ydGVkIGZsYWdzIHJldHVybiAtRUlOVkFMIHdpdGhvdXQgbW9kaWZ5aW5nIEBkc3QuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogVGhlIG51bWJlciBvZiBjb3BpZWQgYnl0ZXMgaW5jbHVkaW5nIHRoZSBOVUwgdGVybWluYXRvciBvbiBzdWNjZXNzLFxuJiM0MzsgKiBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cbiYjNDM7ICovXG4mIzQzO19fYnBmX2tmdW5jIGludCBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osXG4mIzQzO1x0XHRcdFx0XHQgIGNvbnN0IHZvaWQgX191c2VyICp1bnNhZmVfcHRyX19pZ24sXG4mIzQzO1x0XHRcdFx0XHQgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1NjQgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAodW5saWtlbHkoZmxhZ3MgXHUwMDI2IH5CUEZfRl9QQURfWkVST1MpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGlmICh1bmxpa2VseShkc3RfX3N6ID09IDApKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmICh1bmxpa2VseSghbW0pKSB7XG4mIzQzO1x0XHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9GX1BBRF9aRVJPUylcbiYjNDM7XHRcdFx0bWVtc2V0KGRzdCwgMCwgZHN0X19zeik7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdCooY2hhciAqKWRzdCA9ICYjMzk7XFwwJiMzOTs7XG4mIzQzO1x0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IGNvcHlfcmVtb3RlX21tX3N0cihtbSwgKHVuc2lnbmVkIGxvbmcpdW5zYWZlX3B0cl9faWduLCBkc3QsIGRzdF9fc3osIDApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApIHtcbiYjNDM7XHRcdGlmIChmbGFncyBcdTAwMjYgQlBGX0ZfUEFEX1pFUk9TKVxuJiM0MztcdFx0XHRtZW1zZXQoZHN0LCAwLCBkc3RfX3N6KTtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9GX1BBRF9aRVJPUylcbiYjNDM7XHRcdG1lbXNldChkc3QgJiM0MzsgcmV0LCAwLCBkc3RfX3N6IC0gcmV0KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldCAmIzQzOyAxO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3N0cigpIC0gQ29weSBhIHN0cmluZyBmcm9tIGFuIHRhc2smIzM5O3MgYWRkcmVzcyBzcGFjZVxuICAqIEBkc3Q6ICAgICAgICAgICAgIERlc3RpbmF0aW9uIGFkZHJlc3MsIGluIGtlcm5lbCBzcGFjZS4gIFRoaXMgYnVmZmVyIG11c3QgYmVcbkBAIC0zNjgxLDI1ICYjNDM7Mzc3MiwxNiBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osXG4gXHRcdFx0XHRcdCAgICBjb25zdCB2b2lkIF9fdXNlciAqdW5zYWZlX3B0cl9faWduLFxuIFx0XHRcdFx0XHQgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHU2NCBmbGFncylcbiB7XG4mIzQzO1x0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4gXHRpbnQgcmV0O1xuIFxuLVx0aWYgKHVubGlrZWx5KGZsYWdzIFx1MDAyNiB+QlBGX0ZfUEFEX1pFUk9TKSlcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXG4tXHRpZiAodW5saWtlbHkoZHN0X19zeiA9PSAwKSlcbi1cdFx0cmV0dXJuIDA7XG4mIzQzO1x0bW0gPSBnZXRfdGFza19tbSh0c2spO1xuJiM0MztcdHJldCA9IGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIoZHN0LCBkc3RfX3N6LCB1bnNhZmVfcHRyX19pZ24sXG4mIzQzO1x0XHRcdFx0XHRtbSwgZmxhZ3MpO1xuJiM0MztcdGlmIChtbSlcbiYjNDM7XHRcdG1tcHV0KG1tKTtcbiBcbi1cdHJldCA9IGNvcHlfcmVtb3RlX3ZtX3N0cih0c2ssICh1bnNpZ25lZCBsb25nKXVuc2FmZV9wdHJfX2lnbiwgZHN0LCBkc3RfX3N6LCAwKTtcbi1cdGlmIChyZXQgXHUwMDNjIDApIHtcbi1cdFx0aWYgKGZsYWdzIFx1MDAyNiBCUEZfRl9QQURfWkVST1MpXG4tXHRcdFx0bWVtc2V0KGRzdCwgMCwgZHN0X19zeik7XG4tXHRcdHJldHVybiByZXQ7XG4tXHR9XG4tXG4tXHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9GX1BBRF9aRVJPUylcbi1cdFx0bWVtc2V0KGRzdCAmIzQzOyByZXQsIDAsIGRzdF9fc3ogLSByZXQpO1xuLVxuLVx0cmV0dXJuIHJldCAmIzQzOyAxO1xuJiM0MztcdHJldHVybiByZXQ7XG4gfVxuIFxuIC8qIEtlZXAgdW5zaWduZWQgbG9uZyBpbiBwcm90b3R5cGUgc28gdGhhdCBrZnVuYyBpcyB1c2FibGUgd2hlbiBlbWl0dGVkIHRvXG5AQCAtNDkyNCw2ICYjNDM7NTAwNiw4IEBAIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfaXRlcl9iaXRzX25ldywgS0ZfSVRFUl9ORVcpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX2JpdHNfbmV4dCwgS0ZfSVRFUl9ORVhUIHwgS0ZfUkVUX05VTEwpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX2JpdHNfZGVzdHJveSwgS0ZfSVRFUl9ERVNUUk9ZKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfY29weV9mcm9tX3VzZXJfc3RyLCBLRl9TTEVFUEFCTEUpXG4mIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfY29weV9mcm9tX3VzZXJfbW0sIEtGX1NMRUVQQUJMRSlcbiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIsIEtGX1NMRUVQQUJMRSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyLCBLRl9TTEVFUEFCTEUpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9nZXRfa21lbV9jYWNoZSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfa21lbV9jYWNoZV9uZXcsIEtGX0lURVJfTkVXIHwgS0ZfU0xFRVBBQkxFKVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggOWU3OTc1MGUyNDgwOC4uNjc5OWQ5ZTA4MGZjNSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtNjAwNCw2ICYjNDM7NjAwNCwxMCBAQCBCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTChzdHJ1Y3QgZGVudHJ5KSB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmRfaW5vZGU7XG4gfTtcbiBcbiYjNDM7QlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IGxpbnV4X2JpbnBybSkge1xuJiM0MztcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuJiM0Mzt9O1xuJiM0MztcbiBCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTChzdHJ1Y3Qgc29ja2V0KSB7XG4gXHRzdHJ1Y3Qgc29jayAqc2s7XG4gfTtcbkBAIC02MDU4LDYgJiM0Mzs2MDYyLDcgQEAgc3RhdGljIGJvb2wgdHlwZV9pc190cnVzdGVkX29yX251bGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiB7XG4gXHRCVEZfVFlQRV9FTUlUKEJURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMKHN0cnVjdCBzb2NrZXQpKTtcbiBcdEJURl9UWVBFX0VNSVQoQlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IGRlbnRyeSkpO1xuJiM0MztcdEJURl9UWVBFX0VNSVQoQlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IGxpbnV4X2JpbnBybSkpO1xuIFx0QlRGX1RZUEVfRU1JVChCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QpKTtcbiBcbiBcdHJldHVybiBidGZfbmVzdGVkX3R5cGVfaXNfdHJ1c3RlZChcdTAwMjZlbnYtXHUwMDNlbG9nLCByZWcsIGZpZWxkX25hbWUsIGJ0Zl9pZCxcbkBAIC02MTY4LDYgJiM0Mzs2MTczLDE1IEBAIHN0YXRpYyBpbnQgY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdGlmIChyZXQgIT0gUFRSX1RPX0JURl9JRCkge1xuIFx0XHQvKiBqdXN0IG1hcms7ICovXG4gXG4mIzQzO1x0fSBlbHNlIGlmIChicGZfaXNfdHJ1c3RlZF9vcl9udWxsX2J0Zl9wdHIocmVnLVx1MDAzZXR5cGUpKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogQW4gdW5jaGVja2VkIGxvYWQgdGhyb3VnaCBhIHRydXN0ZWQtb3ItTlVMTCBwb2ludGVyIGlzXG4mIzQzO1x0XHQgKiBmYXVsdC1wcm90ZWN0ZWQuIEFueSBwb2ludGVyIGRlcml2ZWQgZnJvbSB0aGF0IGxvYWQgbXVzdCBiZVxuJiM0MztcdFx0ICogdW50cnVzdGVkLCBhcyBhIGZhdWx0IHByb2R1Y2VzIGEgTlVMTCB2YWx1ZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0Y2xlYXJfdHJ1c3RlZF9mbGFncyhcdTAwMjZmbGFnKTtcbiYjNDM7XHRcdGZsYWcgfD0gUFRSX1VOVFJVU1RFRDtcbiYjNDM7XG4gXHR9IGVsc2UgaWYgKHR5cGVfZmxhZyhyZWctXHUwMDNldHlwZSkgXHUwMDI2IFBUUl9VTlRSVVNURUQpIHtcbiBcdFx0LyogSWYgdGhpcyBpcyBhbiB1bnRydXN0ZWQgcG9pbnRlciwgYWxsIHBvaW50ZXJzIGZvcm1lZCBieSB3YWxraW5nIGl0XG4gXHRcdCAqIGFsc28gaW5oZXJpdCB0aGUgdW50cnVzdGVkIGZsYWcuXG5AQCAtNjY0NCw3ICYjNDM7NjY1OCw4IEBAIHN0YXRpYyBpbnQgY2hlY2tfbWVtX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgsIHN0cnVjdCBiXG4gXHRcdGlmICghZXJyIFx1MDAyNlx1MDAyNiB0ID09IEJQRl9SRUFEIFx1MDAyNlx1MDAyNiB2YWx1ZV9yZWdubyBcdTAwM2U9IDApXG4gXHRcdFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIHZhbHVlX3JlZ25vKTtcbiBcdH0gZWxzZSBpZiAoYmFzZV90eXBlKHJlZy1cdTAwM2V0eXBlKSA9PSBQVFJfVE9fQlRGX0lEIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAhdHlwZV9tYXlfYmVfbnVsbChyZWctXHUwMDNldHlwZSkpIHtcbiYjNDM7XHRcdCAgICghdHlwZV9tYXlfYmVfbnVsbChyZWctXHUwMDNldHlwZSkgfHxcbiYjNDM7XHRcdCAgICAodCA9PSBCUEZfUkVBRCBcdTAwMjZcdTAwMjYgYnBmX2lzX3RydXN0ZWRfb3JfbnVsbF9idGZfcHRyKHJlZy1cdTAwM2V0eXBlKSkpKSB7XG4gXHRcdGVyciA9IGNoZWNrX3B0cl90b19idGZfYWNjZXNzKGVudiwgcmVncywgcmVnLCBhcmdubywgb2ZmLCBzaXplLCB0LFxuIFx0XHRcdFx0XHQgICAgICB2YWx1ZV9yZWdubyk7XG4gXHR9IGVsc2UgaWYgKHJlZy1cdTAwM2V0eXBlID09IENPTlNUX1BUUl9UT19NQVApIHtcbmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaFxuaW5kZXggMzhiMTE2NTIxMmM5NC4uODI2NGEzNDZkMThhZiAxMDA2NDRcbi0tLSBhL21tL2ludGVybmFsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2ludGVybmFsLmhcbkBAIC0yNSw2ICYjNDM7MjUsMTEgQEBcbiBzdHJ1Y3QgZm9saW9fYmF0Y2g7XG4gc3RydWN0IGhzdGF0ZTtcbiBcbiYjNDM7I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxuJiM0MztpbnQgX19jb3B5X3JlbW90ZV9tbV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbiYjNDM7XHRcdFx0IHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncyk7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiBzdHJ1Y3QgaHVnZV9ib290bWVtX3BhZ2Uge1xuIFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuIFx0c3RydWN0IGhzdGF0ZSAqaHN0YXRlO1xuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcbmluZGV4IDhiMGMyYzczNWQzZGUuLmZlMmY1ZTk4OGZiOTAgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LmNcbkBAIC03MzMxLDggJiM0Mzs3MzMxLDggQEAgRVhQT1JUX1NZTUJPTF9HUEwoYWNjZXNzX3Byb2Nlc3Nfdm0pO1xuICAqIENvcHkgYSBzdHJpbmcgZnJvbSBhbm90aGVyIHByb2Nlc3MmIzM5O3MgYWRkcmVzcyBzcGFjZSBhcyBnaXZlbiBpbiBtbS5cbiAgKiBJZiB0aGVyZSBpcyBhbnkgZXJyb3IgcmV0dXJuIC1FRkFVTFQuXG4gICovXG4tc3RhdGljIGludCBfX2NvcHlfcmVtb3RlX3ZtX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLVx0XHRcdFx0dm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKVxuJiM0MztpbnQgX19jb3B5X3JlbW90ZV9tbV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbiYjNDM7XHRcdFx0IHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncylcbiB7XG4gXHR2b2lkICpvbGRfYnVmID0gYnVmO1xuIFx0aW50IGVyciA9IDA7XG5AQCAtNzQwNyw0MyAmIzQzOzc0MDcsNiBAQCBzdGF0aWMgaW50IF9fY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdHJldHVybiBlcnI7XG4gXHRyZXR1cm4gYnVmIC0gb2xkX2J1ZjtcbiB9XG4tXG4tLyoqXG4tICogY29weV9yZW1vdGVfdm1fc3RyIC0gY29weSBhIHN0cmluZyBmcm9tIGFub3RoZXIgcHJvY2VzcyYjMzk7cyBhZGRyZXNzIHNwYWNlLlxuLSAqIEB0c2s6XHR0aGUgdGFzayBvZiB0aGUgdGFyZ2V0IGFkZHJlc3Mgc3BhY2Vcbi0gKiBAYWRkcjpcdHN0YXJ0IGFkZHJlc3MgdG8gcmVhZCBmcm9tXG4tICogQGJ1ZjpcdGRlc3RpbmF0aW9uIGJ1ZmZlclxuLSAqIEBsZW46XHRudW1iZXIgb2YgYnl0ZXMgdG8gY29weVxuLSAqIEBndXBfZmxhZ3M6XHRmbGFncyBtb2RpZnlpbmcgbG9va3VwIGJlaGF2aW91clxuLSAqXG4tICogVGhlIGNhbGxlciBtdXN0IGhvbGQgYSByZWZlcmVuY2Ugb24gQG1tLlxuLSAqXG4tICogUmV0dXJuOiBudW1iZXIgb2YgYnl0ZXMgY29waWVkIGZyb20gQGFkZHIgKHNvdXJjZSkgdG8gQGJ1ZiAoZGVzdGluYXRpb24pO1xuLSAqIG5vdCBpbmNsdWRpbmcgdGhlIHRyYWlsaW5nIE5VTC4gQWx3YXlzIGd1YXJhbnRlZWQgdG8gbGVhdmUgTlVMLXRlcm1pbmF0ZWRcbi0gKiBidWZmZXIuIE9uIGFueSBlcnJvciwgcmV0dXJuIC1FRkFVTFQuXG4tICovXG4taW50IGNvcHlfcmVtb3RlX3ZtX3N0cihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdW5zaWduZWQgbG9uZyBhZGRyLFxuLVx0XHQgICAgICAgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKVxuLXtcbi1cdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuLVx0aW50IHJldDtcbi1cbi1cdGlmICh1bmxpa2VseShsZW4gPT0gMCkpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0bW0gPSBnZXRfdGFza19tbSh0c2spO1xuLVx0aWYgKCFtbSkge1xuLVx0XHQqKGNoYXIgKilidWYgPSAmIzM5O1xcMCYjMzk7O1xuLVx0XHRyZXR1cm4gLUVGQVVMVDtcbi1cdH1cbi1cbi1cdHJldCA9IF9fY29weV9yZW1vdGVfdm1fc3RyKG1tLCBhZGRyLCBidWYsIGxlbiwgZ3VwX2ZsYWdzKTtcbi1cbi1cdG1tcHV0KG1tKTtcbi1cbi1cdHJldHVybiByZXQ7XG4tfVxuLUVYUE9SVF9TWU1CT0xfR1BMKGNvcHlfcmVtb3RlX3ZtX3N0cik7XG4gI2VuZGlmIC8qIENPTkZJR19CUEZfU1lTQ0FMTCAqL1xuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvbW0vbm9tbXUuYyBiL21tL25vbW11LmNcbmluZGV4IDQ5OGUwMWVlNDBiMDUuLjk4NTk2ZTYwMzExZjMgMTAwNjQ0XG4tLS0gYS9tbS9ub21tdS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9ub21tdS5jXG5AQCAtMTc0Niw4ICYjNDM7MTc0Niw4IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGFjY2Vzc19wcm9jZXNzX3ZtKTtcbiAgKiBDb3B5IGEgc3RyaW5nIGZyb20gYW5vdGhlciBwcm9jZXNzJiMzOTtzIGFkZHJlc3Mgc3BhY2UgYXMgZ2l2ZW4gaW4gbW0uXG4gICogSWYgdGhlcmUgaXMgYW55IGVycm9yIHJldHVybiAtRUZBVUxULlxuICAqL1xuLXN0YXRpYyBpbnQgX19jb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbi1cdFx0XHRcdHZvaWQgKmJ1ZiwgaW50IGxlbilcbiYjNDM7aW50IF9fY29weV9yZW1vdGVfbW1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4mIzQzO1x0XHRcdCB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBhZGRyX2VuZDtcbiBcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xuQEAgLTE3ODEsNDMgJiM0MzsxNzgxLDYgQEAgc3RhdGljIGludCBfX2NvcHlfcmVtb3RlX3ZtX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbi1cbi0vKipcbi0gKiBjb3B5X3JlbW90ZV92bV9zdHIgLSBjb3B5IGEgc3RyaW5nIGZyb20gYW5vdGhlciBwcm9jZXNzJiMzOTtzIGFkZHJlc3Mgc3BhY2UuXG4tICogQHRzazpcdHRoZSB0YXNrIG9mIHRoZSB0YXJnZXQgYWRkcmVzcyBzcGFjZVxuLSAqIEBhZGRyOlx0c3RhcnQgYWRkcmVzcyB0byByZWFkIGZyb21cbi0gKiBAYnVmOlx0ZGVzdGluYXRpb24gYnVmZmVyXG4tICogQGxlbjpcdG51bWJlciBvZiBieXRlcyB0byBjb3B5XG4tICogQGd1cF9mbGFnczpcdGZsYWdzIG1vZGlmeWluZyBsb29rdXAgYmVoYXZpb3VyICh1bnVzZWQpXG4tICpcbi0gKiBUaGUgY2FsbGVyIG11c3QgaG9sZCBhIHJlZmVyZW5jZSBvbiBAbW0uXG4tICpcbi0gKiBSZXR1cm46IG51bWJlciBvZiBieXRlcyBjb3BpZWQgZnJvbSBAYWRkciAoc291cmNlKSB0byBAYnVmIChkZXN0aW5hdGlvbik7XG4tICogbm90IGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMLiBBbHdheXMgZ3VhcmFudGVlZCB0byBsZWF2ZSBOVUwtdGVybWluYXRlZFxuLSAqIGJ1ZmZlci4gT24gYW55IGVycm9yLCByZXR1cm4gLUVGQVVMVC5cbi0gKi9cbi1pbnQgY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tXHRcdCAgICAgICB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXG4te1xuLVx0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4tXHRpbnQgcmV0O1xuLVxuLVx0aWYgKHVubGlrZWx5KGxlbiA9PSAwKSlcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRtbSA9IGdldF90YXNrX21tKHRzayk7XG4tXHRpZiAoIW1tKSB7XG4tXHRcdCooY2hhciAqKWJ1ZiA9ICYjMzk7XFwwJiMzOTs7XG4tXHRcdHJldHVybiAtRUZBVUxUO1xuLVx0fVxuLVxuLVx0cmV0ID0gX19jb3B5X3JlbW90ZV92bV9zdHIobW0sIGFkZHIsIGJ1ZiwgbGVuKTtcbi1cbi1cdG1tcHV0KG1tKTtcbi1cbi1cdHJldHVybiByZXQ7XG4tfVxuLUVYUE9SVF9TWU1CT0xfR1BMKGNvcHlfcmVtb3RlX3ZtX3N0cik7XG4gI2VuZGlmIC8qIENPTkZJR19CUEZfU1lTQ0FMTCAqL1xuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL21tL3V0aWwuYyBiL21tL3V0aWwuY1xuaW5kZXggYmYwNTEzZDFkM2QwOC4uMmVjYTI3YjAyNzkxZiAxMDA2NDRcbi0tLSBhL21tL3V0aWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vdXRpbC5jXG5AQCAtMTA2MSw2ICYjNDM7MTA2MSw2OCBAQCBpbnQgZ2V0X2NtZGxpbmUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBjaGFyICpidWZmZXIsIGludCBidWZsZW4pXG4gXHRyZXR1cm4gcmVzO1xuIH1cbiBcbiYjNDM7I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxuJiM0MzsvKipcbiYjNDM7ICogY29weV9yZW1vdGVfbW1fc3RyIC0gY29weSBhIHN0cmluZyBmcm9tIGEgcmVtb3RlIGFkZHJlc3Mgc3BhY2UuXG4mIzQzOyAqIEBtbTogICAgICAgICB0aGUgcmVtb3RlIGFkZHJlc3Mgc3BhY2VcbiYjNDM7ICogQGFkZHI6ICAgICAgIHN0YXJ0IGFkZHJlc3MgdG8gcmVhZCBmcm9tXG4mIzQzOyAqIEBidWY6ICAgICAgICBkZXN0aW5hdGlvbiBidWZmZXJcbiYjNDM7ICogQGxlbjogICAgICAgIG51bWJlciBvZiBieXRlcyB0byBjb3B5XG4mIzQzOyAqIEBndXBfZmxhZ3M6ICBmbGFncyBtb2RpZnlpbmcgbG9va3VwIGJlaGF2aW91clxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgY2FsbGVyIG11c3QgaG9sZCBhIHJlZmVyZW5jZSBvbiBAbW0uXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCBmcm9tIEBhZGRyIChzb3VyY2UpIHRvIEBidWYgKGRlc3RpbmF0aW9uKSxcbiYjNDM7ICogbm90IGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMLiBJZiBAbGVuIGlzIHplcm8sIHJldHVybiAwIHdpdGhvdXQgYWNjZXNzaW5nXG4mIzQzOyAqIEBidWYuIE90aGVyd2lzZSwgQGJ1ZiBpcyBhbHdheXMgTlVMLXRlcm1pbmF0ZWQuIE9uIGFueSBlcnJvciwgcmV0dXJuXG4mIzQzOyAqIC1FRkFVTFQuXG4mIzQzOyAqL1xuJiM0MztpbnQgY29weV9yZW1vdGVfbW1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4mIzQzO1x0XHQgICAgICAgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHVubGlrZWx5KGxlbiA9PSAwKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gX19jb3B5X3JlbW90ZV9tbV9zdHIobW0sIGFkZHIsIGJ1ZiwgbGVuLCBndXBfZmxhZ3MpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogY29weV9yZW1vdGVfdm1fc3RyIC0gY29weSBhIHN0cmluZyBmcm9tIGFub3RoZXIgcHJvY2VzcyYjMzk7cyBhZGRyZXNzIHNwYWNlLlxuJiM0MzsgKiBAdHNrOlx0dGhlIHRhc2sgb2YgdGhlIHRhcmdldCBhZGRyZXNzIHNwYWNlXG4mIzQzOyAqIEBhZGRyOlx0c3RhcnQgYWRkcmVzcyB0byByZWFkIGZyb21cbiYjNDM7ICogQGJ1ZjpcdGRlc3RpbmF0aW9uIGJ1ZmZlclxuJiM0MzsgKiBAbGVuOlx0bnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHlcbiYjNDM7ICogQGd1cF9mbGFnczpcdGZsYWdzIG1vZGlmeWluZyBsb29rdXAgYmVoYXZpb3VyXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCBmcm9tIEBhZGRyIChzb3VyY2UpIHRvIEBidWYgKGRlc3RpbmF0aW9uKSxcbiYjNDM7ICogbm90IGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMLiBJZiBAbGVuIGlzIHplcm8sIHJldHVybiAwIHdpdGhvdXQgYWNjZXNzaW5nXG4mIzQzOyAqIEBidWYuIE90aGVyd2lzZSwgQGJ1ZiBpcyBhbHdheXMgTlVMLXRlcm1pbmF0ZWQuIE9uIGFueSBlcnJvciwgcmV0dXJuXG4mIzQzOyAqIC1FRkFVTFQuXG4mIzQzOyAqL1xuJiM0MztpbnQgY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4mIzQzO1x0XHQgICAgICAgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHVubGlrZWx5KGxlbiA9PSAwKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRtbSA9IGdldF90YXNrX21tKHRzayk7XG4mIzQzO1x0aWYgKCFtbSkge1xuJiM0MztcdFx0KihjaGFyICopYnVmID0gJiMzOTtcXDAmIzM5OztcbiYjNDM7XHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gX19jb3B5X3JlbW90ZV9tbV9zdHIobW0sIGFkZHIsIGJ1ZiwgbGVuLCBndXBfZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRtbXB1dChtbSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoY29weV9yZW1vdGVfdm1fc3RyKTtcbiYjNDM7I2VuZGlmIC8qIENPTkZJR19CUEZfU1lTQ0FMTCAqL1xuJiM0MztcbiBpbnQgX193ZWFrIG1lbWNtcF9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZTEsIHN0cnVjdCBwYWdlICpwYWdlMilcbiB7XG4gXHRjaGFyICphZGRyMSwgKmFkZHIyO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9pdGVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfaXRlci5jXG5pbmRleCBjNjkwODBjYTE0ZjVhLi45OWExNmExYWRkNzBlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2l0ZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2l0ZXIuY1xuQEAgLTM5LDEwICYjNDM7MzksMTAgQEAgc3RhdGljIHZvaWQgdGVzdF9idGZfaWRfb3JfbnVsbCh2b2lkKVxuIFx0c3RydWN0IGJwZl9pdGVyX3Rlc3Rfa2VybjMgKnNrZWw7XG4gXG4gXHRza2VsID0gYnBmX2l0ZXJfdGVzdF9rZXJuM19fb3Blbl9hbmRfbG9hZCgpO1xuLVx0aWYgKCFBU1NFUlRfRVJSX1BUUihza2VsLCBcJiMzNDticGZfaXRlcl90ZXN0X2tlcm4zX19vcGVuX2FuZF9sb2FkXCYjMzQ7KSkge1xuLVx0XHRicGZfaXRlcl90ZXN0X2tlcm4zX19kZXN0cm95KHNrZWwpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcJiMzNDticGZfaXRlcl90ZXN0X2tlcm4zX19vcGVuX2FuZF9sb2FkXCYjMzQ7KSlcbiBcdFx0cmV0dXJuO1xuLVx0fVxuJiM0MztcbiYjNDM7XHRicGZfaXRlcl90ZXN0X2tlcm4zX19kZXN0cm95KHNrZWwpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBkb19kdW1teV9yZWFkX29wdHMoc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBzdHJ1Y3QgYnBmX2l0ZXJfYXR0YWNoX29wdHMgKm9wdHMpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY29weV9mcm9tX3VzZXJfYnBybS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY29weV9mcm9tX3VzZXJfYnBybS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYjIzMjViMTkzNTc2MVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY29weV9mcm9tX3VzZXJfYnBybS5jXG5AQCAtMCwwICYjNDM7MSw3MiBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvd2FpdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2NvcHlfZnJvbV91c2VyX2Jwcm0uc2tlbC5oXCYjMzQ7XG4mIzQzO1xuJiM0Mzt2b2lkIHRlc3RfY29weV9mcm9tX3VzZXJfYnBybSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBhcmcwW10gPSBcJiMzNDtmaXJzdFwmIzM0OztcbiYjNDM7XHRjaGFyIGFyZzFbXSA9IFwmIzM0O3NlY29uZC1hcmd1bWVudFwmIzM0OztcbiYjNDM7XHRjaGFyIGVudjBbXSA9IFwmIzM0O1NPTUVfRU5WPWFcJiMzNDs7XG4mIzQzO1x0Y2hhciBlbnYxW10gPSBcJiMzNDtPVEhFUl9FTlY9c29tZXRoaW5nXCYjMzQ7O1xuJiM0MztcdHN0cnVjdCBjb3B5X2Zyb21fdXNlcl9icHJtICpza2VsO1xuJiM0MztcdHBpZF90IGNoaWxkO1xuJiM0MztcdGludCBzdGF0dXM7XG4mIzQzO1xuJiM0MztcdHNrZWwgPSBjb3B5X2Zyb21fdXNlcl9icHJtX19vcGVuX2FuZF9sb2FkKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O29wZW5fYW5kX2xvYWRcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE9uICFDT05GSUdfTU1VLCBleGVjIHN0cmluZ3MgYXJlIGhlbGQgaW4gYnBybS1cdTAwM2VwYWdlW10gcmF0aGVyIHRoYW5cbiYjNDM7XHQgKiBiZWluZyBtYXBwZWQgaW4gYnBybS1cdTAwM2VtbS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIXNrZWwtXHUwMDNla2NvbmZpZy1cdTAwM2VDT05GSUdfTU1VKSB7XG4mIzQzO1x0XHRwcmludGYoXCYjMzQ7JXM6U0tJUDogdGVzdCByZXF1aXJlcyBDT05GSUdfTU1VXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4mIzQzO1x0XHR0ZXN0X19za2lwKCk7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGNvcHlfZnJvbV91c2VyX2Jwcm1fX2F0dGFjaChza2VsKSwgXCYjMzQ7YXR0YWNoXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRjaGlsZCA9IGZvcmsoKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HRShjaGlsZCwgMCwgXCYjMzQ7Zm9ya1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFjaGlsZCkge1xuJiM0MztcdFx0Y2hhciAqY29uc3QgYXJndltdID0geyBhcmcwLCBhcmcxLCBOVUxMIH07XG4mIzQzO1x0XHRjaGFyICpjb25zdCBlbnZwW10gPSB7IGVudjAsIGVudjEsIE5VTEwgfTtcbiYjNDM7XG4mIzQzO1x0XHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vtb25pdG9yZWRfcGlkID0gZ2V0cGlkKCk7XG4mIzQzO1x0XHRleGVjdmUoXCYjMzQ7L2Jpbi90cnVlXCYjMzQ7LCBhcmd2LCBlbnZwKTtcbiYjNDM7XHRcdF9leGl0KGVycm5vKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghQVNTRVJUX0VRKHdhaXRwaWQoY2hpbGQsIFx1MDAyNnN0YXR1cywgMCksIGNoaWxkLCBcJiMzNDt3YWl0cGlkXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRpZiAoQVNTRVJUX1RSVUUoV0lGRVhJVEVEKHN0YXR1cyksIFwmIzM0O2NoaWxkX2V4aXRlZFwmIzM0OykpXG4mIzQzO1x0XHRBU1NFUlRfRVEoV0VYSVRTVEFUVVMoc3RhdHVzKSwgRVBFUk0sIFwmIzM0O2V4ZWNfZXJybm9cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlYnBybV9hcmdjLCAyLCBcJiMzNDticHJtX2FyZ2NcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VicHJtX2VudmMsIDIsIFwmIzM0O2Jwcm1fZW52Y1wmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWRhdGFfbGVuX21hdGNoLCAxLCBcJiMzNDtkYXRhX2xlbl9tYXRjaFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWludmFsaWRfZmxhZ3NfcmV0LCAtRUlOVkFMLCBcJiMzNDtpbnZhbGlkX2ZsYWdzX3JldFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWNvcHlfcmV0LCAwLCBcJiMzNDtjb3B5X3JldFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXN0cl9hcmcwX3JldCwgc2l6ZW9mKGFyZzApLCBcJiMzNDtzdHJfYXJnMF9yZXRcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VzdHJfYXJnMV9yZXQsIHNpemVvZihhcmcxKSwgXCYjMzQ7c3RyX2FyZzFfcmV0XCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlc3RyX2VudjBfcmV0LCBzaXplb2YoZW52MCksIFwmIzM0O3N0cl9lbnYwX3JldFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXN0cl9lbnYxX3JldCwgc2l6ZW9mKGVudjEpLCBcJiMzNDtzdHJfZW52MV9yZXRcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VkYXRhX21hdGNoLCAxLCBcJiMzNDtkYXRhX21hdGNoXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlc3RyX2FyZ3NfbWF0Y2gsIDEsIFwmIzM0O3N0cl9hcmdzX21hdGNoXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlc3RyX2VudnNfbWF0Y2gsIDEsIFwmIzM0O3N0cl9lbnZzX21hdGNoXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHRjb3B5X2Zyb21fdXNlcl9icHJtX19kZXN0cm95KHNrZWwpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX21heWJlX251bGwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19tYXliZV9udWxsLmNcbmluZGV4IDAxZGMyNjEzYzhhNTEuLjQ1YWY2ZjAwYWQ5MDggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfbWF5YmVfbnVsbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfbWF5YmVfbnVsbC5jXG5AQCAtMTksMTUgJiM0MzsxOSwxNiBAQCBzdGF0aWMgdm9pZCBtYXliZV9udWxsKHZvaWQpXG4gXHRzdHJ1Y3Rfb3BzX21heWJlX251bGxfX2Rlc3Ryb3koc2tlbCk7XG4gfVxuIFxuLS8qIFRlc3QgdGhhdCB0aGUgdmVyaWZpZXIgcmVqZWN0cyBhIHByb2dyYW0gdGhhdCBhY2Nlc3MgYSBudWxsYWJsZSBwb2ludGVyXG4tICogd2l0aG91dCBhIGNoZWNrIGJlZm9yZWhhbmQuXG4mIzQzOy8qXG4mIzQzOyAqIFRlc3QgdGhhdCB0aGUgdmVyaWZpZXIgYWNjZXB0cyBhIGZhdWx0LXByb3RlY3RlZCByZWFkIHRocm91Z2ggYSBudWxsYWJsZVxuJiM0MzsgKiB0cnVzdGVkIHBvaW50ZXIgd2l0aG91dCBhbiBleHBsaWNpdCBOVUxMIGNoZWNrLlxuICAqL1xuLXN0YXRpYyB2b2lkIG1heWJlX251bGxfZmFpbCh2b2lkKVxuJiM0MztzdGF0aWMgdm9pZCBtYXliZV9udWxsX25vX2NoZWNrKHZvaWQpXG4ge1xuIFx0c3RydWN0IHN0cnVjdF9vcHNfbWF5YmVfbnVsbF9mYWlsICpza2VsO1xuIFxuIFx0c2tlbCA9IHN0cnVjdF9vcHNfbWF5YmVfbnVsbF9mYWlsX19vcGVuX2FuZF9sb2FkKCk7XG4tXHRpZiAoQVNTRVJUX0VSUl9QVFIoc2tlbCwgXCYjMzQ7c3RydWN0X29wc19tb2R1bGVfZmFpbF9fb3Blbl9hbmRfbG9hZFwmIzM0OykpXG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O3N0cnVjdF9vcHNfbWF5YmVfbnVsbF9mYWlsX19vcGVuX2FuZF9sb2FkXCYjMzQ7KSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0c3RydWN0X29wc19tYXliZV9udWxsX2ZhaWxfX2Rlc3Ryb3koc2tlbCk7XG5AQCAtNDEsNiAmIzQzOzQyLDYgQEAgdm9pZCB0ZXN0X3N0cnVjdF9vcHNfbWF5YmVfbnVsbCh2b2lkKVxuIFx0ICovXG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDttYXliZV9udWxsXCYjMzQ7KSlcbiBcdFx0bWF5YmVfbnVsbCgpO1xuLVx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7bWF5YmVfbnVsbF9mYWlsXCYjMzQ7KSlcbi1cdFx0bWF5YmVfbnVsbF9mYWlsKCk7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7bWF5YmVfbnVsbF9ub19jaGVja1wmIzM0OykpXG4mIzQzO1x0XHRtYXliZV9udWxsX25vX2NoZWNrKCk7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RwX2J0Zl9udWxsYWJsZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHBfYnRmX251bGxhYmxlLmNcbmluZGV4IGFjY2M0MmUwMWY4YTguLjgyNWZlN2E5MmQ3NGYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90cF9idGZfbnVsbGFibGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHBfYnRmX251bGxhYmxlLmNcbkBAIC0yLDYgJiM0MzsyLDMxIEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7dGVzdF90cF9idGZfbnVsbGFibGUuc2tlbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3Rlc3RfdHBfYnRmX251bGxhYmxlX3J1bnRpbWUuc2tlbC5oXCYjMzQ7XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB0ZXN0X251bGxhYmxlX3J1bnRpbWUodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0ZXN0X3RwX2J0Zl9udWxsYWJsZV9ydW50aW1lICpza2VsO1xuJiM0MztcbiYjNDM7XHRza2VsID0gdGVzdF90cF9idGZfbnVsbGFibGVfcnVudGltZV9fb3Blbl9hbmRfbG9hZCgpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcJiMzNDtvcGVuX2FuZF9sb2FkXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlbW9uaXRvcmVkX3RpZCA9IHN5c19nZXR0aWQoKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0sodGVzdF90cF9idGZfbnVsbGFibGVfcnVudGltZV9fYXR0YWNoKHNrZWwpLCBcJiMzNDthdHRhY2hcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdGlmICghQVNTRVJUX09LKHRyaWdnZXJfbW9kdWxlX3Rlc3RfcmVhZCgyKSwgXCYjMzQ7dHJpZ2dlclwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWNhbGxzLCAyLCBcJiMzNDtjYWxsc1wmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZW5vbm51bGxfbGVuLCAyLCBcJiMzNDtub25udWxsX2xlblwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZW51bGxfbGVuLCAwLCBcJiMzNDtudWxsX2xlblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztvdXQ6XG4mIzQzO1x0dGVzdF90cF9idGZfbnVsbGFibGVfcnVudGltZV9fZGVzdHJveShza2VsKTtcbiYjNDM7fVxuIFxuIHZvaWQgdGVzdF90cF9idGZfbnVsbGFibGUodm9pZClcbiB7XG5AQCAtMTEsNCAmIzQzOzM2LDcgQEAgdm9pZCB0ZXN0X3RwX2J0Zl9udWxsYWJsZSh2b2lkKVxuIFx0fVxuIFxuIFx0UlVOX1RFU1RTKHRlc3RfdHBfYnRmX251bGxhYmxlKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7cnVudGltZVwmIzM0OykpXG4mIzQzO1x0XHR0ZXN0X251bGxhYmxlX3J1bnRpbWUoKTtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2NvcHlfZnJvbV91c2VyX2Jwcm0uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9jb3B5X2Zyb21fdXNlcl9icHJtLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5iMzM0YTE1NzQxOWU1XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvY29weV9mcm9tX3VzZXJfYnBybS5jXG5AQCAtMCwwICYjNDM7MSwxMjMgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3ZtbGludXguaFwmIzM0O1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl90cmFjaW5nLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDticGZfbWlzYy5oXCYjMzQ7XG4mIzQzO1xuJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgZXhwZWN0ZWRfZGF0YVtdID0gXCYjMzQ7Zmlyc3RcXDBzZWNvbmQtYXJndW1lbnRcXDBcJiMzNDtcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7U09NRV9FTlY9YVxcME9USEVSX0VOVj1zb21ldGhpbmdcJiMzNDs7XG4mIzQzO3N0YXRpYyBjb25zdCBjaGFyIGV4cGVjdGVkX2FyZzBbXSA9IFwmIzM0O2ZpcnN0XCYjMzQ7O1xuJiM0MztzdGF0aWMgY29uc3QgY2hhciBleHBlY3RlZF9hcmcxW10gPSBcJiMzNDtzZWNvbmQtYXJndW1lbnRcJiMzNDs7XG4mIzQzO3N0YXRpYyBjb25zdCBjaGFyIGV4cGVjdGVkX2VudjBbXSA9IFwmIzM0O1NPTUVfRU5WPWFcJiMzNDs7XG4mIzQzO3N0YXRpYyBjb25zdCBjaGFyIGV4cGVjdGVkX2VudjFbXSA9IFwmIzM0O09USEVSX0VOVj1zb21ldGhpbmdcJiMzNDs7XG4mIzQzO1xuJiM0MztpbnQgbW9uaXRvcmVkX3BpZDtcbiYjNDM7aW50IGJwcm1fYXJnYztcbiYjNDM7aW50IGJwcm1fZW52YztcbiYjNDM7aW50IGRhdGFfbGVuX21hdGNoO1xuJiM0MztpbnQgaW52YWxpZF9mbGFnc19yZXQ7XG4mIzQzO2ludCBjb3B5X3JldDtcbiYjNDM7aW50IHN0cl9hcmcwX3JldDtcbiYjNDM7aW50IHN0cl9hcmcxX3JldDtcbiYjNDM7aW50IHN0cl9lbnYwX3JldDtcbiYjNDM7aW50IHN0cl9lbnYxX3JldDtcbiYjNDM7aW50IGRhdGFfbWF0Y2g7XG4mIzQzO2ludCBzdHJfYXJnc19tYXRjaDtcbiYjNDM7aW50IHN0cl9lbnZzX21hdGNoO1xuJiM0MztcbiYjNDM7ZXh0ZXJuIGJvb2wgQ09ORklHX01NVSBfX2tjb25maWcgX193ZWFrO1xuJiM0MztcbiYjNDM7ZXh0ZXJuIGludCBicGZfY29weV9mcm9tX3VzZXJfbW0odm9pZCAqZHN0LCB1MzIgZHN0X19zeixcbiYjNDM7XHRcdFx0XHQgY29uc3Qgdm9pZCAqdW5zYWZlX3B0cl9faWduLFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdTY0IGZsYWdzKSBfX2tzeW07XG4mIzQzO1xuJiM0MztleHRlcm4gaW50IGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIodm9pZCAqZHN0LCB1MzIgZHN0X19zeixcbiYjNDM7XHRcdFx0XHQgICAgIGNvbnN0IHZvaWQgKnVuc2FmZV9wdHJfX2lnbixcbiYjNDM7XHRcdFx0XHQgICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1NjQgZmxhZ3MpIF9fa3N5bTtcbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtsc20ucy9icHJtX2NoZWNrX3NlY3VyaXR5XCYjMzQ7KVxuJiM0MztpbnQgQlBGX1BST0coY2hlY2tfZXhlY19hcmdzLCBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIHBpZCA9IGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpIFx1MDAzZVx1MDAzZSAzMjtcbiYjNDM7XHRjaGFyIGRhdGFbc2l6ZW9mKGV4cGVjdGVkX2RhdGEpXSA9IHt9O1xuJiM0MztcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuJiM0MztcdGNoYXIgYXJnMFszMl0gPSB7fTtcbiYjNDM7XHRjaGFyIGFyZzFbMzJdID0ge307XG4mIzQzO1x0Y2hhciBlbnYwWzMyXSA9IHt9O1xuJiM0MztcdGNoYXIgZW52MVszMl0gPSB7fTtcbiYjNDM7XHR1NjQgb2Zmc2V0ID0gMDtcbiYjNDM7XHR1NjQgZGF0YV9sZW47XG4mIzQzO1xuJiM0MztcdGlmICghQ09ORklHX01NVSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAocGlkICE9IG1vbml0b3JlZF9waWQpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0bW0gPSBicHJtLVx1MDAzZW1tO1xuJiM0MztcdGlmICghbW0pXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0YnBybV9hcmdjID0gYnBybS1cdTAwM2VhcmdjO1xuJiM0MztcdGJwcm1fZW52YyA9IGJwcm0tXHUwMDNlZW52YztcbiYjNDM7XG4mIzQzO1x0LyogdGhpcyBpcyB0aGUgdG90YWwgc2l6ZSBvZiBhcmdzIGFuZCBlbnZzIHN0YXJ0aW5nIGZyb20gYnBybS1cdTAwM2VwICovXG4mIzQzO1x0ZGF0YV9sZW4gPSBicHJtLVx1MDAzZWV4ZWMgLSBicHJtLVx1MDAzZXA7XG4mIzQzO1x0ZGF0YV9sZW5fbWF0Y2ggPSBkYXRhX2xlbiA9PSBzaXplb2YoZXhwZWN0ZWRfZGF0YSk7XG4mIzQzO1xuJiM0MztcdGludmFsaWRfZmxhZ3NfcmV0ID0gYnBmX2NvcHlfZnJvbV91c2VyX21tKGRhdGEsXG4mIzQzO1x0XHRcdFx0XHRcdCAgc2l6ZW9mKGRhdGEpLCAodm9pZCAqKWJwcm0tXHUwMDNlcCwgbW0sIH4wVUxMKTtcbiYjNDM7XG4mIzQzO1x0Y29weV9yZXQgPSBicGZfY29weV9mcm9tX3VzZXJfbW0oZGF0YSwgc2l6ZW9mKGRhdGEpLCAodm9pZCAqKWJwcm0tXHUwMDNlcCxcbiYjNDM7XHRcdFx0XHRcdCBtbSwgMCk7XG4mIzQzO1x0aWYgKGNvcHlfcmV0KVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGRhdGFfbWF0Y2ggPVxuJiM0MztcdFx0IV9fYnVpbHRpbl9tZW1jbXAoZGF0YSwgZXhwZWN0ZWRfZGF0YSwgc2l6ZW9mKGV4cGVjdGVkX2RhdGEpKTtcbiYjNDM7XG4mIzQzO1x0LyogYXJnMCBpcyBhdCBicHJtLVx1MDAzZXAgKi9cbiYjNDM7XHRzdHJfYXJnMF9yZXQgPSBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKGFyZzAsIHNpemVvZihhcmcwKSxcbiYjNDM7XHRcdFx0XHRcdFx0ICh2b2lkICopKGJwcm0tXHUwMDNlcCAmIzQzOyBvZmZzZXQpLFxuJiM0MztcdFx0XHRcdFx0XHQgbW0sIEJQRl9GX1BBRF9aRVJPUyk7XG4mIzQzO1x0aWYgKHN0cl9hcmcwX3JldCAhPSBzaXplb2YoZXhwZWN0ZWRfYXJnMCkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRvZmZzZXQgJiM0Mzs9IHN0cl9hcmcwX3JldDtcbiYjNDM7XG4mIzQzO1x0LyogYXJnMSBpcyBhdCBicHJtLVx1MDAzZXAgJiM0Mzsgc2l6ZW9mKGFyZzApICovXG4mIzQzO1x0c3RyX2FyZzFfcmV0ID0gYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cihhcmcxLCBzaXplb2YoYXJnMSksXG4mIzQzO1x0XHRcdFx0XHRcdCAodm9pZCAqKShicHJtLVx1MDAzZXAgJiM0Mzsgb2Zmc2V0KSxcbiYjNDM7XHRcdFx0XHRcdFx0IG1tLCBCUEZfRl9QQURfWkVST1MpO1xuJiM0MztcdGlmIChzdHJfYXJnMV9yZXQgIT0gc2l6ZW9mKGV4cGVjdGVkX2FyZzEpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0b2Zmc2V0ICYjNDM7PSBzdHJfYXJnMV9yZXQ7XG4mIzQzO1xuJiM0MztcdC8qIGVudjAgaXMgYXQgYnBybS1cdTAwM2VwICYjNDM7IHNpemVvZihhcmcwKSAmIzQzOyBzaXplb2YoYXJnMSkgKi9cbiYjNDM7XHRzdHJfZW52MF9yZXQgPSBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKGVudjAsIHNpemVvZihlbnYwKSxcbiYjNDM7XHRcdFx0XHRcdFx0ICh2b2lkICopKGJwcm0tXHUwMDNlcCAmIzQzOyBvZmZzZXQpLFxuJiM0MztcdFx0XHRcdFx0XHQgbW0sIEJQRl9GX1BBRF9aRVJPUyk7XG4mIzQzO1x0aWYgKHN0cl9lbnYwX3JldCAhPSBzaXplb2YoZXhwZWN0ZWRfZW52MCkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRvZmZzZXQgJiM0Mzs9IHN0cl9lbnYwX3JldDtcbiYjNDM7XG4mIzQzO1x0LyogZW52MSBpcyBhdCBicHJtLVx1MDAzZXAgJiM0Mzsgc2l6ZW9mKGFyZzApICYjNDM7IHNpemVvZihhcmcxKSAmIzQzOyBzaXplb2YoZW52MCkgKi9cbiYjNDM7XHRzdHJfZW52MV9yZXQgPSBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKGVudjEsIHNpemVvZihlbnYxKSxcbiYjNDM7XHRcdFx0XHRcdFx0ICh2b2lkICopKGJwcm0tXHUwMDNlcCAmIzQzOyBvZmZzZXQpLFxuJiM0MztcdFx0XHRcdFx0XHQgbW0sIEJQRl9GX1BBRF9aRVJPUyk7XG4mIzQzO1x0aWYgKHN0cl9lbnYxX3JldCAhPSBzaXplb2YoZXhwZWN0ZWRfZW52MSkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0c3RyX2FyZ3NfbWF0Y2ggPVxuJiM0MztcdFx0IV9fYnVpbHRpbl9tZW1jbXAoYXJnMCwgZXhwZWN0ZWRfYXJnMCwgc2l6ZW9mKGV4cGVjdGVkX2FyZzApKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCFfX2J1aWx0aW5fbWVtY21wKGFyZzEsIGV4cGVjdGVkX2FyZzEsIHNpemVvZihleHBlY3RlZF9hcmcxKSk7XG4mIzQzO1x0c3RyX2VudnNfbWF0Y2ggPVxuJiM0MztcdFx0IV9fYnVpbHRpbl9tZW1jbXAoZW52MCwgZXhwZWN0ZWRfZW52MCwgc2l6ZW9mKGV4cGVjdGVkX2VudjApKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCFfX2J1aWx0aW5fbWVtY21wKGVudjEsIGV4cGVjdGVkX2VudjEsIHNpemVvZihleHBlY3RlZF9lbnYxKSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBkYXRhX21hdGNoIFx1MDAyNlx1MDAyNiBzdHJfYXJnc19tYXRjaCBcdTAwMjZcdTAwMjYgc3RyX2VudnNfbWF0Y2ggPyAtRVBFUk0gOiAwO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Jhd190cF9udWxsX2ZhaWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yYXdfdHBfbnVsbF9mYWlsLmNcbmluZGV4IDcyNWQ3M2M5ZmZlMTMuLjE2MzEyNDc5M2QwYTYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmF3X3RwX251bGxfZmFpbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmF3X3RwX251bGxfZmFpbC5jXG5AQCAtMiwyMiAmIzQzOzIsMzQgQEBcbiAvKiBDb3B5cmlnaHQgKGMpIDIwMjQgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjdm1saW51eC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl90cmFjaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDticGZfbWlzYy5oXCYjMzQ7XG4gXG4gY2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbiBcbi0vKiBFbnN1cmUgbW9kdWxlIHBhcmFtZXRlciBoYXMgUFRSX01BWUJFX05VTEwgKi9cbiYjNDM7ZXh0ZXJuIHN0cnVjdCB0YXNrX3N0cnVjdCAqYnBmX3Rhc2tfYWNxdWlyZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIF9fa3N5bTtcbiYjNDM7ZXh0ZXJuIHZvaWQgYnBmX3Rhc2tfcmVsZWFzZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIF9fa3N5bTtcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEVuc3VyZSB0aGUgbW9kdWxlIHRyYWNlcG9pbnQgYXJndW1lbnQgaXMgdHJ1c3RlZC1vci1OVUxMIHdoaWxlIGFsbG93aW5nXG4mIzQzOyAqIGEgZmF1bHQtcHJvdGVjdGVkIHJlYWQgd2l0aG91dCBhbiBleHBsaWNpdCBOVUxMIGNoZWNrLlxuJiM0MzsgKi9cbiBTRUMoXCYjMzQ7dHBfYnRmL2JwZl90ZXN0bW9kX3Rlc3RfcmF3X3RwX251bGxfdHBcJiMzNDspXG4tX19mYWlsdXJlIF9fbXNnKFwmIzM0O1IxIGludmFsaWQgbWVtIGFjY2VzcyAmIzM5O3RydXN0ZWRfcHRyX29yX251bGxfJiMzOTtcJiMzNDspXG4mIzQzO19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxuJiM0MztfX21zZyhcJiMzNDtSMT10cnVzdGVkX3B0cl9vcl9udWxsX3NrX2J1ZmZcJiMzNDspXG4gaW50IHRlc3RfcmF3X3RwX251bGxfYnBmX3Rlc3Rtb2RfdGVzdF9yYXdfdHBfbnVsbF9hcmdfMSh2b2lkICpjdHgpIHtcbiAgICAgYXNtIHZvbGF0aWxlKFwmIzM0O3IxID0gKih1NjQgKikocjEgJiM0MzswKTsgcjEgPSAqKHU2NCAqKShyMSAmIzQzOzApO1wmIzM0OyA6OjogX19jbG9iYmVyX2FsbCk7XG4gICAgIHJldHVybiAwO1xuIH1cbiBcbi0vKiBDaGVjayBOVUxMIG1hcmtpbmcgKi9cbiYjNDM7LypcbiYjNDM7ICogRW5zdXJlIHNjaGVkX3BpX3NldHByaW8mIzM5O3Mgc2Vjb25kIGFyZ3VtZW50IGlzIHRydXN0ZWQtb3ItTlVMTCB3aGlsZSBhbGxvd2luZ1xuJiM0MzsgKiBhIGZhdWx0LXByb3RlY3RlZCByZWFkIHdpdGhvdXQgYW4gZXhwbGljaXQgTlVMTCBjaGVjay5cbiYjNDM7ICovXG4gU0VDKFwmIzM0O3RwX2J0Zi9zY2hlZF9waV9zZXRwcmlvXCYjMzQ7KVxuLV9fZmFpbHVyZSBfX21zZyhcJiMzNDtSMSBpbnZhbGlkIG1lbSBhY2Nlc3MgJiMzOTt0cnVzdGVkX3B0cl9vcl9udWxsXyYjMzk7XCYjMzQ7KVxuJiM0MztfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcbiYjNDM7X19tc2coXCYjMzQ7UjE9dHJ1c3RlZF9wdHJfb3JfbnVsbF90YXNrX3N0cnVjdFwmIzM0OylcbiBpbnQgdGVzdF9yYXdfdHBfbnVsbF9zY2hlZF9waV9zZXRwcmlvX2FyZ18yKHZvaWQgKmN0eCkge1xuICAgICBhc20gdm9sYXRpbGUoXCYjMzQ7cjEgPSAqKHU2NCAqKShyMSAmIzQzOzgpOyByMSA9ICoodTY0ICopKHIxICYjNDM7MCk7XCYjMzQ7IDo6OiBfX2Nsb2JiZXJfYWxsKTtcbiAgICAgcmV0dXJuIDA7XG5AQCAtNjAsNyAmIzQzOzcyLDggQEAgaW50IHRlc3RfdHBfYnRmX3NpZ25hbF9kZWxpdmVyX2luZm9fbm9fZGVyZWYodm9pZCAqY3R4KVxuIH1cbiBcbiBTRUMoXCYjMzQ7dHBfYnRmL3NjaGVkX3Byb2Nlc3Nfd2FpdFwmIzM0Oylcbi1fX2ZhaWx1cmUgX19tc2coXCYjMzQ7UjEgaW52YWxpZCBtZW0gYWNjZXNzICYjMzk7dHJ1c3RlZF9wdHJfb3JfbnVsbF8mIzM5O1wmIzM0OylcbiYjNDM7X19zdWNjZXNzIF9fbG9nX2xldmVsKDIpXG4mIzQzO19fbXNnKFwmIzM0O1IxPXRydXN0ZWRfcHRyX29yX251bGxfcGlkXCYjMzQ7KVxuIGludCB0ZXN0X3Jhd190cF9udWxsX3NjaGVkX3Byb2Nlc3Nfd2FpdF9hcmdfMSh2b2lkICpjdHgpXG4ge1xuIFx0YXNtIHZvbGF0aWxlKFwmIzM0O3IxID0gKih1NjQgKikocjEgJiM0MzswKTsgcjEgPSAqKHUzMiAqKShyMSAmIzQzOzApO1wmIzM0OyA6OjogX19jbG9iYmVyX2FsbCk7XG5AQCAtNzUsMyAmIzQzOzg4LDU4IEBAIGludCB0ZXN0X3Jhd190cF9udWxsX3NjaGVkX3Byb2Nlc3Nfd2FpdF9hcmdfMV9jaGVja2VkKHZvaWQgKmN0eClcbiBcdFx0ICAgICBcJiMzNDtyMSA9ICoodTMyICopKHIxICYjNDM7MCk7XCYjMzQ7IDo6OiBfX2Nsb2JiZXJfYWxsKTtcbiBcdHJldHVybiAwO1xuIH1cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDt0cF9idGYvc2NoZWRfcGlfc2V0cHJpb1wmIzM0OylcbiYjNDM7X19mYWlsdXJlIF9fbG9nX2xldmVsKDIpXG4mIzQzO19fbXNnKFwmIzM0O1IxPXVudHJ1c3RlZF9wdHJfdGFza19zdHJ1Y3RcJiMzNDspXG4mIzQzO19fbXNnKFwmIzM0O1IxIG11c3QgYmUgYSByY3UgcG9pbnRlclwmIzM0OylcbiYjNDM7aW50IEJQRl9QUk9HKHRydXN0ZWRfb3JfbnVsbF93YWxrX2lzX3VudHJ1c3RlZCwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLFxuJiM0MztcdCAgICAgc3RydWN0IHRhc2tfc3RydWN0ICpwaV90YXNrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRhc2tfc3RydWN0ICpwYXJlbnQsICphY3F1aXJlZDtcbiYjNDM7XG4mIzQzO1x0cGFyZW50ID0gcGlfdGFzay1cdTAwM2VyZWFsX3BhcmVudDtcbiYjNDM7XHRhY3F1aXJlZCA9IGJwZl90YXNrX2FjcXVpcmUocGFyZW50KTtcbiYjNDM7XHRpZiAoYWNxdWlyZWQpXG4mIzQzO1x0XHRicGZfdGFza19yZWxlYXNlKGFjcXVpcmVkKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3RwX2J0Zi9zY2hlZF9waV9zZXRwcmlvXCYjMzQ7KVxuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7UjEgbXVzdCBiZSBhIHJjdSBwb2ludGVyXCYjMzQ7KVxuJiM0MztpbnQgQlBGX1BST0coZGVyaXZlZF9wdHJfbnVsbF9jaGVja19kb2VzX25vdF9yZXN0b3JlX3RydXN0LFxuJiM0MztcdCAgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBpX3Rhc2spXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudCwgKmFjcXVpcmVkO1xuJiM0MztcbiYjNDM7XHRwYXJlbnQgPSBwaV90YXNrLVx1MDAzZXJlYWxfcGFyZW50O1xuJiM0MztcdGlmICghcGFyZW50KVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGFjcXVpcmVkID0gYnBmX3Rhc2tfYWNxdWlyZShwYXJlbnQpO1xuJiM0MztcdGlmIChhY3F1aXJlZClcbiYjNDM7XHRcdGJwZl90YXNrX3JlbGVhc2UoYWNxdWlyZWQpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogSW4gY29udHJhc3QsIGNoZWNraW5nIHRoZSBvcmlnaW5hbCB0cnVzdGVkLW9yLU5VTEwgcG9pbnRlciByZW1vdmVzXG4mIzQzOyAqIFBUUl9NQVlCRV9OVUxMIHdoaWxlIHJldGFpbmluZyBQVFJfVFJVU1RFRC5cbiYjNDM7ICovXG4mIzQzO1NFQyhcJiMzNDt0cF9idGYvc2NoZWRfcGlfc2V0cHJpb1wmIzM0OylcbiYjNDM7X19zdWNjZXNzXG4mIzQzO2ludCBCUEZfUFJPRyhvcmlnaW5hbF9wdHJfbnVsbF9jaGVja19yZXRhaW5zX3RydXN0LFxuJiM0MztcdCAgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBpX3Rhc2spXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmFjcXVpcmVkO1xuJiM0MztcbiYjNDM7XHRpZiAoIXBpX3Rhc2spXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0YWNxdWlyZWQgPSBicGZfdGFza19hY3F1aXJlKHBpX3Rhc2spO1xuJiM0MztcdGlmIChhY3F1aXJlZClcbiYjNDM7XHRcdGJwZl90YXNrX3JlbGVhc2UoYWNxdWlyZWQpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RwX2J0Zl9udWxsYWJsZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdHBfYnRmX251bGxhYmxlLmNcbmluZGV4IGNmMDU0N2E2MTNmZmMuLmI3OTE0MjI0YmExOTQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90cF9idGZfbnVsbGFibGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdHBfYnRmX251bGxhYmxlLmNcbkBAIC03LDcgJiM0Mzs3LDcgQEBcbiAjaW5jbHVkZSBcJiMzNDticGZfbWlzYy5oXCYjMzQ7XG4gXG4gU0VDKFwmIzM0O3RwX2J0Zi9icGZfdGVzdG1vZF90ZXN0X251bGxhYmxlX2JhcmVfdHBcJiMzNDspXG4tX19mYWlsdXJlIF9fbXNnKFwmIzM0O1IxIGludmFsaWQgbWVtIGFjY2VzcyAmIzM5O3RydXN0ZWRfcHRyX29yX251bGxfJiMzOTtcJiMzNDspXG4mIzQzO19fc3VjY2Vzc1xuIGludCBCUEZfUFJPRyhoYW5kbGVfdHBfYnRmX251bGxhYmxlX2JhcmUxLCBzdHJ1Y3QgYnBmX3Rlc3Rtb2RfdGVzdF9yZWFkX2N0eCAqbnVsbGFibGVfY3R4KVxuIHtcbiBcdHJldHVybiBudWxsYWJsZV9jdHgtXHUwMDNlbGVuO1xuQEAgLTIxLDQgJiM0MzsyMSw0NyBAQCBpbnQgQlBGX1BST0coaGFuZGxlX3RwX2J0Zl9udWxsYWJsZV9iYXJlMiwgc3RydWN0IGJwZl90ZXN0bW9kX3Rlc3RfcmVhZF9jdHggKm51bFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztTRUMoXCYjMzQ7dHBfYnRmL2JwZl90ZXN0bW9kX3Rlc3RfbnVsbGFibGVfYmFyZV90cFwmIzM0OylcbiYjNDM7X19zdWNjZXNzXG4mIzQzO2ludCBCUEZfUFJPRyhoYW5kbGVfdHBfYnRmX251bGxhYmxlX21lbSwgc3RydWN0IGJwZl90ZXN0bW9kX3Rlc3RfcmVhZF9jdHggKm51bGxhYmxlX2N0eClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBudWxsYWJsZV9jdHgtXHUwMDNlYnVmWzBdO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7dHBfYnRmL2JwZl90ZXN0bW9kX3Rlc3RfbnVsbGFibGVfYmFyZV90cFwmIzM0OylcbiYjNDM7X19mYWlsdXJlIF9fbXNnKFwmIzM0O3BvaW50ZXIgYXJpdGhtZXRpYyBvbiB0cnVzdGVkX3B0cl9vcl9udWxsXyBwcm9oaWJpdGVkXCYjMzQ7KVxuJiM0MztpbnQgQlBGX1BST0coaGFuZGxlX3RwX2J0Zl9udWxsYWJsZV9hcml0aCwgc3RydWN0IGJwZl90ZXN0bW9kX3Rlc3RfcmVhZF9jdHggKm51bGxhYmxlX2N0eClcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZShcJiMzNDslW2N0eF0gJiM0Mzs9IDFcJiMzNDsgOiBbY3R4XSBcJiMzNDsmIzQzO3JcJiMzNDsobnVsbGFibGVfY3R4KSk7XG4mIzQzO1x0cmV0dXJuIG51bGxhYmxlX2N0eC1cdTAwM2VsZW47XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDt0cF9idGYvYnBmX3Rlc3Rtb2RfdGVzdF9udWxsYWJsZV9iYXJlX3RwXCYjMzQ7KVxuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7aW52YWxpZCBtZW0gYWNjZXNzICYjMzk7dHJ1c3RlZF9wdHJfb3JfbnVsbF8mIzM5O1wmIzM0OylcbiYjNDM7aW50IEJQRl9QUk9HKGhhbmRsZV90cF9idGZfbnVsbGFibGVfYXRvbWljX3JtdyxcbiYjNDM7XHQgICAgIHN0cnVjdCBicGZfdGVzdG1vZF90ZXN0X3JlYWRfY3R4ICpudWxsYWJsZV9jdHgpXG4mIzQzO3tcbiYjNDM7XHRhc20gdm9sYXRpbGUgKFwmIzM0O3IxID0gJVtjdHhdO1wmIzM0O1xuJiM0MztcdFx0ICAgICAgXCYjMzQ7dzIgPSAxO1wmIzM0O1xuJiM0MztcdFx0ICAgICAgXCYjMzQ7bG9jayAqKHUzMiAqKShyMSAmIzQzOyAlW2xlbl0pICYjNDM7PSB3MjtcJiMzNDtcbiYjNDM7XHRcdCAgICAgIDpcbiYjNDM7XHRcdCAgICAgIDogW2N0eF0gXCYjMzQ7clwmIzM0OyhudWxsYWJsZV9jdHgpLFxuJiM0MztcdFx0XHRfX2ltbV9jb25zdChsZW4sXG4mIzQzO1x0XHRcdFx0ICAgIG9mZnNldG9mKHN0cnVjdCBicGZfdGVzdG1vZF90ZXN0X3JlYWRfY3R4LFxuJiM0MztcdFx0XHRcdFx0ICAgICBsZW4pKVxuJiM0MztcdFx0ICAgICAgOiBcJiMzNDtyMVwmIzM0OywgXCYjMzQ7cjJcJiMzNDssIFwmIzM0O21lbW9yeVwmIzM0Oyk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOyNpZmRlZiBfX0JQRl9GRUFUVVJFX0xPQURfQUNRX1NUT1JFX1JFTFxuJiM0MztTRUMoXCYjMzQ7dHBfYnRmL2JwZl90ZXN0bW9kX3Rlc3RfbnVsbGFibGVfYmFyZV90cFwmIzM0OylcbiYjNDM7X19mYWlsdXJlXG4mIzQzO19fbXNnKFwmIzM0O0JQRl9BVE9NSUMgbG9hZHMgZnJvbSBSe3tbMC05XSYjNDM7fX0gdHJ1c3RlZF9wdHJfb3JfbnVsbF9cJiMzNDspXG4mIzQzO2ludCBCUEZfUFJPRyhoYW5kbGVfdHBfYnRmX251bGxhYmxlX2xvYWRfYWNxdWlyZSxcbiYjNDM7XHQgICAgIHN0cnVjdCBicGZfdGVzdG1vZF90ZXN0X3JlYWRfY3R4ICpudWxsYWJsZV9jdHgpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gX19hdG9taWNfbG9hZF9uKFx1MDAyNm51bGxhYmxlX2N0eC1cdTAwM2VsZW4sIF9fQVRPTUlDX0FDUVVJUkUpO1xuJiM0Mzt9XG4mIzQzOyNlbmRpZlxuJiM0MztcbiBjaGFyIF9saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RwX2J0Zl9udWxsYWJsZV9ydW50aW1lLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90cF9idGZfbnVsbGFibGVfcnVudGltZS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNWM5YzdmOTQwNDBkY1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdHBfYnRmX251bGxhYmxlX3J1bnRpbWUuY1xuQEAgLTAsMCAmIzQzOzEsMzUgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3ZtbGludXguaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDsuLi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmhcJiMzNDtcbiYjNDM7XG4mIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG4mIzQzO1xuJiM0MztpbnQgbW9uaXRvcmVkX3RpZDtcbiYjNDM7aW50IGNhbGxzO1xuJiM0MztfX3U2NCBub25udWxsX2xlbjtcbiYjNDM7X191NjQgbnVsbF9sZW47XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7dHBfYnRmL2JwZl90ZXN0bW9kX3Rlc3RfbnVsbGFibGVfYmFyZV90cFwmIzM0OylcbiYjNDM7aW50IEJQRl9QUk9HKGhhbmRsZV9udWxsYWJsZV9ydW50aW1lLFxuJiM0MztcdCAgICAgc3RydWN0IGJwZl90ZXN0bW9kX3Rlc3RfcmVhZF9jdHggKm51bGxhYmxlX2N0eClcbiYjNDM7e1xuJiM0MztcdF9fdTMyIHRpZCA9IGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpO1xuJiM0MztcdF9fdTY0IGxlbjtcbiYjNDM7XHRpbnQgY2FsbDtcbiYjNDM7XG4mIzQzO1x0aWYgKHRpZCAhPSBtb25pdG9yZWRfdGlkKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGxlbiA9IG51bGxhYmxlX2N0eC1cdTAwM2VsZW47XG4mIzQzO1x0Y2FsbCA9IGNhbGxzJiM0MzsmIzQzOztcbiYjNDM7XG4mIzQzO1x0aWYgKGNhbGwgPT0gMClcbiYjNDM7XHRcdG5vbm51bGxfbGVuID0gbGVuO1xuJiM0MztcdGVsc2UgaWYgKGNhbGwgPT0gMSlcbiYjNDM7XHRcdG51bGxfbGVuID0gbGVuO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sc20uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sc20uY1xuaW5kZXggYzcyNGJmMzg5ZjVjNi4uZmFjMTMzZDkwZjVlNiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sc20uY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xzbS5jXG5AQCAtMTYyLDEzICYjNDM7MTYyLDEzIEBAIF9fbmFrZWQgaW50IGRpc2FibGVkX2hvb2tfdGVzdDModm9pZCAqY3R4KVxuIFxuIFNFQyhcJiMzNDtsc20vbW1hcF9maWxlXCYjMzQ7KVxuIF9fZGVzY3JpcHRpb24oXCYjMzQ7bm90IG51bGwgY2hlY2tpbmcgbnVsbGFibGUgcG9pbnRlciBpbiBicGZfbHNtX21tYXBfZmlsZVwmIzM0Oylcbi1fX2ZhaWx1cmUgX19tc2coXCYjMzQ7UjEgaW52YWxpZCBtZW0gYWNjZXNzICYjMzk7dHJ1c3RlZF9wdHJfb3JfbnVsbF8mIzM5O1wmIzM0OylcbiYjNDM7X19zdWNjZXNzXG4gaW50IEJQRl9QUk9HKG5vX251bGxfY2hlY2ssIHN0cnVjdCBmaWxlICpmaWxlKVxuIHtcbi1cdHN0cnVjdCBpbm9kZSAqaW5vZGU7XG4mIzQzO1x0aW5vX3QgaW5vO1xuIFxuLVx0aW5vZGUgPSBmaWxlLVx1MDAzZWZfaW5vZGU7XG4tXHRfX3NpbmsoaW5vZGUpO1xuJiM0MztcdGlubyA9IGZpbGUtXHUwMDNlZl9pbm9kZS1cdTAwM2VpX2lubztcbiYjNDM7XHRfX3NpbmsoaW5vKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0xODgsNiAmIzQzOzE4OCwxNiBAQCBpbnQgQlBGX1BST0cobnVsbF9jaGVjaywgc3RydWN0IGZpbGUgKmZpbGUpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO1NFQyhcJiMzNDtsc20vbW1hcF9maWxlXCYjMzQ7KVxuJiM0MztfX2Rlc2NyaXB0aW9uKFwmIzM0O3N0b3JlIHRocm91Z2ggdHJ1c3RlZC1vci1udWxsIGZpbGUgaXMgcmVqZWN0ZWRcJiMzNDspXG4mIzQzO19fZmFpbHVyZVxuJiM0MztfX21zZyhcJiMzNDtSe3tbMC05XSYjNDM7fX0gaW52YWxpZCBtZW0gYWNjZXNzICYjMzk7dHJ1c3RlZF9wdHJfb3JfbnVsbF8mIzM5O1wmIzM0OylcbiYjNDM7aW50IEJQRl9QUk9HKHN0b3JlX3Rocm91Z2hfdHJ1c3RlZF9vcl9udWxsX2ZpbGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuJiM0Mzt7XG4mIzQzO1x0ZmlsZS1cdTAwM2VmX2ZsYWdzID0gMDtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBTRUMoXCYjMzQ7bHNtX2Nncm91cC9maWxlX29wZW5cJiMzNDspXG4gX19kZXNjcmlwdGlvbihcJiMzNDtzbGVlcGFibGUgbHNtX2Nncm91cCBwcm9ncmFtIGlzIHJlamVjdGVkXCYjMzQ7KVxuIF9fZmFpbHVyZSBfX21zZyhcJiMzNDtQcm9ncmFtIG9mIHRoaXMgdHlwZSBjYW5ub3QgYmUgc2xlZXBhYmxlXCYjMzQ7KVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl92ZnNfYWNjZXB0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdmZzX2FjY2VwdC5jXG5pbmRleCA1NTM5OGMwNDI5MGE4Li4xN2MxNTQyY2M3ZTE3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3Zmc19hY2NlcHQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3Zmc19hY2NlcHQuY1xuQEAgLTEwMCw0ICYjNDM7MTAwLDE4IEBAIGludCBCUEZfUFJPRyhpbm9kZV9yZW5hbWUsIHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7U0VDKFwmIzM0O2xzbS5zL2lub2RlX3JlbmFtZVwmIzM0OylcbiYjNDM7X19zdWNjZXNzIF9fbG9nX2xldmVsKDIpXG4mIzQzO19fbXNnKFwmIzM0O1J7e1swLTldJiM0Mzt9fT10cnVzdGVkX3B0cl9vcl9udWxsX2lub2RlXCYjMzQ7KVxuJiM0MztpbnQgQlBGX1BST0coaW5vZGVfcmVuYW1lX25vX251bGxfY2hlY2ssIHN0cnVjdCBpbm9kZSAqb2xkX2RpcixcbiYjNDM7XHQgICAgIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqbmV3X2RpcixcbiYjNDM7XHQgICAgIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnksIHVuc2lnbmVkIGludCBmbGFncylcbiYjNDM7e1xuJiM0MztcdGlub190IGlubyA9IG5ld19kZW50cnktXHUwMDNlZF9pbm9kZS1cdTAwM2VpX2lubztcbiYjNDM7XG4mIzQzO1x0aWYgKGlubyA9PSAwKVxuJiM0MztcdFx0cmV0dXJuIC1FQUNDRVM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gY2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdmZzX3JlamVjdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3Zmc19yZWplY3QuY1xuaW5kZXggOGYwYzQ1NDIxZjg5My4uMmEwODEzMjU4MTgzZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl92ZnNfcmVqZWN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl92ZnNfcmVqZWN0LmNcbkBAIC0xNTksMTggJiM0MzsxNTksNCBAQCBpbnQgQlBGX1BST0cocGF0aF9kX3BhdGhfa2Z1bmNfbm9uX2xzbSwgc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBmaWxlICpmKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLVNFQyhcJiMzNDtsc20ucy9pbm9kZV9yZW5hbWVcJiMzNDspXG4tX19mYWlsdXJlIF9fbXNnKFwmIzM0O2ludmFsaWQgbWVtIGFjY2VzcyAmIzM5O3RydXN0ZWRfcHRyX29yX251bGxfJiMzOTtcJiMzNDspXG4taW50IEJQRl9QUk9HKGlub2RlX3JlbmFtZSwgc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxuLVx0ICAgICBzdHJ1Y3QgaW5vZGUgKm5ld19kaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnksXG4tXHQgICAgIHVuc2lnbmVkIGludCBmbGFncylcbi17XG4tXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbmV3X2RlbnRyeS1cdTAwM2VkX2lub2RlO1xuLVx0aW5vX3QgaW5vO1xuLVxuLVx0aW5vID0gaW5vZGUtXHUwMDNlaV9pbm87XG4tXHRpZiAoaW5vID09IDApXG4tXHRcdHJldHVybiAtRUFDQ0VTO1xuLVx0cmV0dXJuIDA7XG4tfVxuIGNoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcbmluZGV4IGY3OThiYmJiNGQxM2MuLjJiYTZhODNkMjQzZjUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jXG5AQCAtNzAyLDYgJiM0Mzs3MDIsNyBAQCBicGZfdGVzdG1vZF90ZXN0X3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuIFx0aWYgKGJwZl90ZXN0bW9kX2xvb3BfdGVzdCgxMDEpIFx1MDAzZSAxMDApXG4gXHRcdHRyYWNlX2JwZl90ZXN0bW9kX3Rlc3RfcmVhZChjdXJyZW50LCBcdTAwMjZjdHgpO1xuIFxuJiM0MztcdHRyYWNlX2JwZl90ZXN0bW9kX3Rlc3RfbnVsbGFibGVfYmFyZV90cChcdTAwMjZjdHgpO1xuIFx0dHJhY2VfYnBmX3Rlc3Rtb2RfdGVzdF9udWxsYWJsZV9iYXJlX3RwKE5VTEwpO1xuIFxuIFx0LyogTWFnaWMgbnVtYmVyIHRvIGVuYWJsZSB3cml0YWJsZSB0cCAqL1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NjaGVkX2V4dC9tYXliZV9udWxsX2ZhaWxfZHNwLmJwZi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2NoZWRfZXh0L21heWJlX251bGxfZmFpbF9kc3AuYnBmLmNcbmluZGV4IGVjNzI0ZDdiMzNkMTguLmVjYWEzNjM1NWNhZWMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zY2hlZF9leHQvbWF5YmVfbnVsbF9mYWlsX2RzcC5icGYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2NoZWRfZXh0L21heWJlX251bGxfZmFpbF9kc3AuYnBmLmNcbkBAIC03LDE0ICYjNDM7NywxMyBAQFxuIFxuIGNoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG4gXG4tdTY0IHZ0aW1lX3Rlc3Q7XG4tXG4gdm9pZCBCUEZfU1RSVUNUX09QUyhtYXliZV9udWxsX3J1bm5pbmcsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiB7fVxuIFxuIHZvaWQgQlBGX1NUUlVDVF9PUFMobWF5YmVfbnVsbF9mYWlsX2Rpc3BhdGNoLCBzMzIgY3B1LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4ge1xuLVx0dnRpbWVfdGVzdCA9IHAtXHUwMDNlc2N4LmRzcV92dGltZTtcbiYjNDM7XHQvKiBQb2ludGVyIGFyaXRobWV0aWMgb24gYSB0cnVzdGVkLW9yLU5VTEwgcG9pbnRlciBtdXN0IGJlIHJlamVjdGVkLiAqL1xuJiM0MztcdGFzbSB2b2xhdGlsZShcJiMzNDslW3BdICYjNDM7PSAwXCYjMzQ7IDogW3BdIFwmIzM0OyYjNDM7clwmIzM0OyhwKSk7XG4gfVxuIFxuIFNFQyhcJiMzNDsuc3RydWN0X29wcy5saW5rXCYjMzQ7KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjIwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0RFQlVHX0lORk9fQlRGJiMzNDssCiAgICAmIzM0O0JQRl9MU00mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfY29weV9mcm9tX3VzZXJfbW0mIzM0OywKICAgICYjMzQ7YnBmX2NvcHlfZnJvbV91c2VyX21tX3N0ciYjMzQ7LAogICAgJiMzNDticGZfY29weV9mcm9tX3VzZXJfdGFzayYjMzQ7LAogICAgJiMzNDticGZfY29weV9mcm9tX3VzZXJfdGFza19zdHImIzM0OywKICAgICYjMzQ7Y29weV9yZW1vdGVfbW1fc3RyJiMzNDssCiAgICAmIzM0O2NvcHlfcmVtb3RlX3ZtX3N0ciYjMzQ7LAogICAgJiMzNDtfX2NvcHlfcmVtb3RlX21tX3N0ciYjMzQ7LAogICAgJiMzNDtjaGVja19wdHJfdG9fYnRmX2FjY2VzcyYjMzQ7LAogICAgJiMzNDt0eXBlX2lzX3RydXN0ZWRfb3JfbnVsbCYjMzQ7LAogICAgJiMzNDtjaGVja19tZW1fYWNjZXNzJiMzNDssCiAgICAmIzM0O2JwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcyYjMzQ7LAogICAgJiMzNDtmcmVlX2Jwcm0mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgc2xlZXBhYmxlIEJQRiBrZnVuY3MgKGJwZl9jb3B5X2Zyb21fdXNlcl9tbSBhbmQgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0ciksIHJlZmFjdG9ycyByZW1vdGUgTU0gc3RyaW5nIGNvcHlpbmcgaGVscGVycyBhY3Jvc3MgbW0vIGFuZCBrZXJuZWwvYnBmLywgbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byBhbGxvdyBmYXVsdC1wcm90ZWN0ZWQgbG9hZHMgdGhyb3VnaCB0cnVzdGVkLW9yLW51bGwgcG9pbnRlcnMsIGFuZCBhbHRlcnMgbW0gY2xlYW51cCBpbiBmcmVlX2Jwcm0oKS4gVGhlc2UgY2hhbmdlcyB0b3VjaCBjb3JlIEJQRiBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgZXhlY3V0aW9uIHBhdGhzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cyB2aWEgQlBGIGFuZCBleGVjIHN5c2NhbGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZGI3N2FmNjZiM2FhMDdiMTNkYzgzYWFmY2ExYjhiMGEwMjkxYTFmYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDcgMjA6MjA6NTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9leGVjLmMgYi9mcy9leGVjLmMKaW5kZXggNzQ1ZjZlYjUyNzllNi4uNGRkZDQwM2ZkOTFjNyAxMDA2NDQKLS0tIGEvZnMvZXhlYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4ZWMuYwpAQCAtMTQ1Niw5ICYjNDM7MTQ1NiwxMiBAQCB2b2lkIGJwcm1fZHJvcF9sb2FkZXIoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKIAogc3RhdGljIHZvaWQgZnJlZV9icHJtKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pCiB7Ci0JaWYgKGJwcm0tJmd0O21tKSB7CiYjNDM7CXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gYnBybS0mZ3Q7bW07CiYjNDM7CiYjNDM7CWlmIChtbSkgewogCQlhY2N0X2FyZ19zaXplKGJwcm0sIDApOwotCQltbXB1dChicHJtLSZndDttbSk7CiYjNDM7CQlicHJtLSZndDttbSA9IE5VTEw7CiYjNDM7CQltbXB1dChtbSk7CiAJfQogCWlmIChicHJtLSZndDt1c2VyX25zKQogCQlwdXRfdXNlcl9ucyhicHJtLSZndDt1c2VyX25zKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmggYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oCmluZGV4IDk3MjdkZjVhZjgzYWIuLjRmMDMyYWQ4M2M2NzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaApAQCAtMTMzOSw2ICYjNDM7MTMzOSwxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYnBmX2lzX3B0cl90b19tZW1fb3JfYnRmX2lkKGVudW0gYnBmX3JlZ190eXBlIHR5cGUpCiAJfQogfQogCiYjNDM7c3RhdGljIGlubGluZSBib29sIGJwZl9pc190cnVzdGVkX29yX251bGxfYnRmX3B0cihlbnVtIGJwZl9yZWdfdHlwZSB0eXBlKQomIzQzO3sKJiM0MzsJcmV0dXJuIHR5cGUgPT0gKFBUUl9UT19CVEZfSUQgfCBQVFJfVFJVU1RFRCB8IFBUUl9NQVlCRV9OVUxMKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIGJvb2wgYnBmX21heV9mYXVsdF9vbl9kZXJlZihlbnVtIGJwZl9yZWdfdHlwZSB0eXBlKQogewogCS8qCkBAIC0xMzQ2LDcgJiM0MzsxMzUxLDkgQEAgc3RhdGljIGlubGluZSBib29sIGJwZl9tYXlfZmF1bHRfb25fZGVyZWYoZW51bSBicGZfcmVnX3R5cGUgdHlwZSkKIAkgKiBwcm90ZWN0aW9uLCB0aGF0IGlzLCB0aGUgb25lcyBicGZfY29udmVydF9jdHhfYWNjZXNzZXMoKSBoYXMgdG8KIAkgKiB0dXJuIGEgQlBGX0xEWCBpbnRvIGEgQlBGX1BST0JFX01FTSBvbmUgZm9yLgogCSAqLwotCXJldHVybiB0eXBlID09IFBUUl9UT19CVEZfSUQgfHwgKHR5cGVfZmxhZyh0eXBlKSAmYW1wOyBQVFJfVU5UUlVTVEVEKTsKJiM0MzsJcmV0dXJuIHR5cGUgPT0gUFRSX1RPX0JURl9JRCB8fAomIzQzOwkgICAgICAgKHR5cGVfZmxhZyh0eXBlKSAmYW1wOyBQVFJfVU5UUlVTVEVEKSB8fAomIzQzOwkgICAgICAgYnBmX2lzX3RydXN0ZWRfb3JfbnVsbF9idGZfcHRyKHR5cGUpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgYnBmX3Byb2dfaGFzX2FyZW5hX2N0eF9hcmcoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oCmluZGV4IGRkMDljNDM4ZmEyM2UuLmQ1YmRlMWY3MWE5N2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW0uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tLmgKQEAgLTMzMjYsNiAmIzQzOzMzMjYsOCBAQCBleHRlcm4gaW50IGFjY2Vzc19yZW1vdGVfdm0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKTsKIAogI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTAomIzQzO2V4dGVybiBpbnQgY29weV9yZW1vdGVfbW1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiYjNDM7CQkJICAgICAgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKTsKIGV4dGVybiBpbnQgY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQkgICAgICB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2hlbHBlcnMuYyBiL2tlcm5lbC9icGYvaGVscGVycy5jCmluZGV4IGIzY2M1YzhmYzg3NTYuLmQzYzU2NDQzN2FkMDYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvaGVscGVycy5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvaGVscGVycy5jCkBAIC0zMiw2ICYjNDM7MzIsMTAgQEAKIAogI2luY2x1ZGUgJiMzNDsuLi8uLi9saWIva3N0cnRveC5oJiMzNDsKIAomIzQzO19fYnBmX2tmdW5jIGludCBicGZfY29weV9mcm9tX3VzZXJfbW0odm9pZCAqZHN0LCB1MzIgZHN0X19zeiwKJiM0MzsJCQkJICAgICAgY29uc3Qgdm9pZCBfX3VzZXIgKnVuc2FmZV9wdHJfX2lnbiwKJiM0MzsJCQkJICAgICAgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHU2NCBmbGFncyk7CiYjNDM7CiAvKiBJZiBrZXJuZWwgc3Vic3lzdGVtIGlzIGFsbG93aW5nIGVCUEYgcHJvZ3JhbXMgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uLAogICogaW5zaWRlIGl0cyBvd24gdmVyaWZpZXJfb3BzLSZndDtnZXRfZnVuY19wcm90bygpIGNhbGxiYWNrIGl0IHNob3VsZCByZXR1cm4KICAqIGJwZl9tYXBfbG9va3VwX2VsZW1fcHJvdG8sIHNvIHRoYXQgdmVyaWZpZXIgY2FuIHByb3Blcmx5IGNoZWNrIHRoZSBhcmd1bWVudHMKQEAgLTY4MiwyMiAmIzQzOzY4NiwxNSBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2NvcHlfZnJvbV91c2VyX3Byb3RvID0gewogQlBGX0NBTExfNShicGZfY29weV9mcm9tX3VzZXJfdGFzaywgdm9pZCAqLCBkc3QsIHUzMiwgc2l6ZSwKIAkgICBjb25zdCB2b2lkIF9fdXNlciAqLCB1c2VyX3B0ciwgc3RydWN0IHRhc2tfc3RydWN0ICosIHRzaywgdTY0LCBmbGFncykKIHsKJiM0MzsJc3RydWN0IG1tX3N0cnVjdCAqbW07CiAJaW50IHJldDsKIAotCS8qIGZsYWdzIGlzIG5vdCB1c2VkIHlldCAqLwotCWlmICh1bmxpa2VseShmbGFncykpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKHVubGlrZWx5KCFzaXplKSkKLQkJcmV0dXJuIDA7Ci0KLQlyZXQgPSBhY2Nlc3NfcHJvY2Vzc192bSh0c2ssICh1bnNpZ25lZCBsb25nKXVzZXJfcHRyLCBkc3QsIHNpemUsIDApOwotCWlmIChyZXQgPT0gc2l6ZSkKLQkJcmV0dXJuIDA7CiYjNDM7CW1tID0gZ2V0X3Rhc2tfbW0odHNrKTsKJiM0MzsJcmV0ID0gYnBmX2NvcHlfZnJvbV91c2VyX21tKGRzdCwgc2l6ZSwgdXNlcl9wdHIsIG1tLCBmbGFncyk7CiYjNDM7CWlmIChtbSkKJiM0MzsJCW1tcHV0KG1tKTsKIAotCW1lbXNldChkc3QsIDAsIHNpemUpOwotCS8qIFJldHVybiAtRUZBVUxUIGZvciBwYXJ0aWFsIHJlYWQgKi8KLQlyZXR1cm4gcmV0ICZsdDsgMCA/IHJldCA6IC1FRkFVTFQ7CiYjNDM7CXJldHVybiByZXQ7CiB9CiAKIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfY29weV9mcm9tX3VzZXJfdGFza19wcm90byA9IHsKQEAgLTM2NTgsNiAmIzQzOzM2NTUsMTAwIEBAIF9fYnBmX2tmdW5jIGludCBicGZfY29weV9mcm9tX3VzZXJfc3RyKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osIGNvbnN0IHZvaWQgX191c2VyCiAJcmV0dXJuIHJldCAmIzQzOyAxOwogfQogCiYjNDM7LyoqCiYjNDM7ICogYnBmX2NvcHlfZnJvbV91c2VyX21tKCkgLSBDb3B5IGRhdGEgZnJvbSBhbiBhZGRyZXNzIHNwYWNlCiYjNDM7ICogQGRzdDogICAgICAgICAgICAgRGVzdGluYXRpb24gYWRkcmVzcywgaW4ga2VybmVsIHNwYWNlCiYjNDM7ICogQGRzdF9fc3o6ICAgICAgICAgTnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkKJiM0MzsgKiBAdW5zYWZlX3B0cl9faWduOiBTb3VyY2UgYWRkcmVzcyBpbiB0aGUgYWRkcmVzcyBzcGFjZQomIzQzOyAqIEBtbTogICAgICAgICAgICAgIEFkZHJlc3Mgc3BhY2UgdG8gY29weSBmcm9tCiYjNDM7ICogQGZsYWdzOiAgICAgICAgICAgUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2U7IG11c3QgYmUgemVybwomIzQzOyAqCiYjNDM7ICogQ29waWVzIGRhdGEgZnJvbSB0aGUgdXNlciBhZGRyZXNzIHNwYWNlIGFzc29jaWF0ZWQgd2l0aCBAbW0uIFRoZSBkZXN0aW5hdGlvbgomIzQzOyAqIGlzIHplcm9lZCBpZiBhbiBhdHRlbXB0ZWQgY29weSBjYW5ub3QgYmUgY29tcGxldGVkIGluIGZ1bGwuIFVuc3VwcG9ydGVkCiYjNDM7ICogZmxhZ3MgcmV0dXJuIC1FSU5WQUwgd2l0aG91dCBtb2RpZnlpbmcgQGRzdC4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRUlOVkFMIGlmIEBmbGFncyBpcyBub24temVybywgb3IgLUVGQVVMVCBpZiB0aGUgY29weQomIzQzOyAqIGZhaWxzIG9yIGlzIHBhcnRpYWwuCiYjNDM7ICovCiYjNDM7X19icGZfa2Z1bmMgaW50IGJwZl9jb3B5X2Zyb21fdXNlcl9tbSh2b2lkICpkc3QsIHUzMiBkc3RfX3N6LAomIzQzOwkJCQkgICAgICBjb25zdCB2b2lkIF9fdXNlciAqdW5zYWZlX3B0cl9faWduLAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdTY0IGZsYWdzKQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKHVubGlrZWx5KGZsYWdzKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAodW5saWtlbHkoIWRzdF9fc3opKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmICh1bmxpa2VseSghbW0pKSB7CiYjNDM7CQltZW1zZXQoZHN0LCAwLCBkc3RfX3N6KTsKJiM0MzsJCXJldHVybiAtRUZBVUxUOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IGFjY2Vzc19yZW1vdGVfdm0obW0sICh1bnNpZ25lZCBsb25nKXVuc2FmZV9wdHJfX2lnbiwKJiM0MzsJCQkgICAgICAgZHN0LCBkc3RfX3N6LCAwKTsKJiM0MzsJaWYgKHJldCA9PSBkc3RfX3N6KQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CW1lbXNldChkc3QsIDAsIGRzdF9fc3opOwomIzQzOwlyZXR1cm4gcmV0ICZsdDsgMCA/IHJldCA6IC1FRkFVTFQ7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIoKSAtIENvcHkgYSBzdHJpbmcgZnJvbSBhbiBhZGRyZXNzIHNwYWNlCiYjNDM7ICogQGRzdDogICAgICAgICAgICAgRGVzdGluYXRpb24gYWRkcmVzcywgaW4ga2VybmVsIHNwYWNlLiBUaGlzIGJ1ZmZlciBtdXN0IGJlCiYjNDM7ICogICAgICAgICAgICAgICAgICAgYXQgbGVhc3QgQGRzdF9fc3ogYnl0ZXMgbG9uZwomIzQzOyAqIEBkc3RfX3N6OiAgICAgICAgIE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHksIGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMCiYjNDM7ICogQHVuc2FmZV9wdHJfX2lnbjogU291cmNlIGFkZHJlc3MgaW4gdGhlIGFkZHJlc3Mgc3BhY2UKJiM0MzsgKiBAbW06ICAgICAgICAgICAgICBBZGRyZXNzIHNwYWNlIHRvIGNvcHkgZnJvbQomIzQzOyAqIEBmbGFnczogICAgICAgICAgIFRoZSBvbmx5IHN1cHBvcnRlZCBmbGFnIGlzIEJQRl9GX1BBRF9aRVJPUwomIzQzOyAqCiYjNDM7ICogQ29waWVzIGEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIGZyb20gdGhlIHVzZXIgYWRkcmVzcyBzcGFjZSBhc3NvY2lhdGVkIHdpdGgKJiM0MzsgKiBAbW0uIElmIHRoZSBzdHJpbmcgaXMgdG9vIGxvbmcsIEBkc3QgaXMgc3RpbGwgTlVMLXRlcm1pbmF0ZWQgdW5sZXNzIEBkc3RfX3N6CiYjNDM7ICogaXMgemVyby4KJiM0MzsgKgomIzQzOyAqIElmIHRoZSBmbGFncyBhcmUgdmFsaWQgYW5kIEJQRl9GX1BBRF9aRVJPUyBpcyBzZXQsIHRoZSB1bnVzZWQgcG9ydGlvbiBvZgomIzQzOyAqIEBkc3QgaXMgY2xlYXJlZCBvbiBzdWNjZXNzIGFuZCBhbGwgb2YgQGRzdCBpcyBjbGVhcmVkIG9uIGEgY29weSBmYWlsdXJlLgomIzQzOyAqIFVuc3VwcG9ydGVkIGZsYWdzIHJldHVybiAtRUlOVkFMIHdpdGhvdXQgbW9kaWZ5aW5nIEBkc3QuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IFRoZSBudW1iZXIgb2YgY29waWVkIGJ5dGVzIGluY2x1ZGluZyB0aGUgTlVMIHRlcm1pbmF0b3Igb24gc3VjY2VzcywKJiM0MzsgKiBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KJiM0MzsgKi8KJiM0MztfX2JwZl9rZnVuYyBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cih2b2lkICpkc3QsIHUzMiBkc3RfX3N6LAomIzQzOwkJCQkJICBjb25zdCB2b2lkIF9fdXNlciAqdW5zYWZlX3B0cl9faWduLAomIzQzOwkJCQkJICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdTY0IGZsYWdzKQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKHVubGlrZWx5KGZsYWdzICZhbXA7IH5CUEZfRl9QQURfWkVST1MpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWlmICh1bmxpa2VseShkc3RfX3N6ID09IDApKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmICh1bmxpa2VseSghbW0pKSB7CiYjNDM7CQlpZiAoZmxhZ3MgJmFtcDsgQlBGX0ZfUEFEX1pFUk9TKQomIzQzOwkJCW1lbXNldChkc3QsIDAsIGRzdF9fc3opOwomIzQzOwkJZWxzZQomIzQzOwkJCSooY2hhciAqKWRzdCA9ICYjMzk7XDAmIzM5OzsKJiM0MzsJCXJldHVybiAtRUZBVUxUOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IGNvcHlfcmVtb3RlX21tX3N0cihtbSwgKHVuc2lnbmVkIGxvbmcpdW5zYWZlX3B0cl9faWduLCBkc3QsIGRzdF9fc3osIDApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkgewomIzQzOwkJaWYgKGZsYWdzICZhbXA7IEJQRl9GX1BBRF9aRVJPUykKJiM0MzsJCQltZW1zZXQoZHN0LCAwLCBkc3RfX3N6KTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGZsYWdzICZhbXA7IEJQRl9GX1BBRF9aRVJPUykKJiM0MzsJCW1lbXNldChkc3QgJiM0MzsgcmV0LCAwLCBkc3RfX3N6IC0gcmV0KTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldCAmIzQzOyAxOwomIzQzO30KJiM0MzsKIC8qKgogICogYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyKCkgLSBDb3B5IGEgc3RyaW5nIGZyb20gYW4gdGFzayYjMzk7cyBhZGRyZXNzIHNwYWNlCiAgKiBAZHN0OiAgICAgICAgICAgICBEZXN0aW5hdGlvbiBhZGRyZXNzLCBpbiBrZXJuZWwgc3BhY2UuICBUaGlzIGJ1ZmZlciBtdXN0IGJlCkBAIC0zNjgxLDI1ICYjNDM7Mzc3MiwxNiBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osCiAJCQkJCSAgICBjb25zdCB2b2lkIF9fdXNlciAqdW5zYWZlX3B0cl9faWduLAogCQkJCQkgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHU2NCBmbGFncykKIHsKJiM0MzsJc3RydWN0IG1tX3N0cnVjdCAqbW07CiAJaW50IHJldDsKIAotCWlmICh1bmxpa2VseShmbGFncyAmYW1wOyB+QlBGX0ZfUEFEX1pFUk9TKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAodW5saWtlbHkoZHN0X19zeiA9PSAwKSkKLQkJcmV0dXJuIDA7CiYjNDM7CW1tID0gZ2V0X3Rhc2tfbW0odHNrKTsKJiM0MzsJcmV0ID0gYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cihkc3QsIGRzdF9fc3osIHVuc2FmZV9wdHJfX2lnbiwKJiM0MzsJCQkJCW1tLCBmbGFncyk7CiYjNDM7CWlmIChtbSkKJiM0MzsJCW1tcHV0KG1tKTsKIAotCXJldCA9IGNvcHlfcmVtb3RlX3ZtX3N0cih0c2ssICh1bnNpZ25lZCBsb25nKXVuc2FmZV9wdHJfX2lnbiwgZHN0LCBkc3RfX3N6LCAwKTsKLQlpZiAocmV0ICZsdDsgMCkgewotCQlpZiAoZmxhZ3MgJmFtcDsgQlBGX0ZfUEFEX1pFUk9TKQotCQkJbWVtc2V0KGRzdCwgMCwgZHN0X19zeik7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JaWYgKGZsYWdzICZhbXA7IEJQRl9GX1BBRF9aRVJPUykKLQkJbWVtc2V0KGRzdCAmIzQzOyByZXQsIDAsIGRzdF9fc3ogLSByZXQpOwotCi0JcmV0dXJuIHJldCAmIzQzOyAxOwomIzQzOwlyZXR1cm4gcmV0OwogfQogCiAvKiBLZWVwIHVuc2lnbmVkIGxvbmcgaW4gcHJvdG90eXBlIHNvIHRoYXQga2Z1bmMgaXMgdXNhYmxlIHdoZW4gZW1pdHRlZCB0bwpAQCAtNDkyNCw2ICYjNDM7NTAwNiw4IEBAIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfaXRlcl9iaXRzX25ldywgS0ZfSVRFUl9ORVcpCiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfYml0c19uZXh0LCBLRl9JVEVSX05FWFQgfCBLRl9SRVRfTlVMTCkKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfaXRlcl9iaXRzX2Rlc3Ryb3ksIEtGX0lURVJfREVTVFJPWSkKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfY29weV9mcm9tX3VzZXJfc3RyLCBLRl9TTEVFUEFCTEUpCiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jb3B5X2Zyb21fdXNlcl9tbSwgS0ZfU0xFRVBBQkxFKQomIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyLCBLRl9TTEVFUEFCTEUpCiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyLCBLRl9TTEVFUEFCTEUpCiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2dldF9rbWVtX2NhY2hlKQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX2ttZW1fY2FjaGVfbmV3LCBLRl9JVEVSX05FVyB8IEtGX1NMRUVQQUJMRSkKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwppbmRleCA5ZTc5NzUwZTI0ODA4Li42Nzk5ZDllMDgwZmM1IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jCkBAIC02MDA0LDYgJiM0Mzs2MDA0LDEwIEBAIEJURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMKHN0cnVjdCBkZW50cnkpIHsKIAlzdHJ1Y3QgaW5vZGUgKmRfaW5vZGU7CiB9OwogCiYjNDM7QlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IGxpbnV4X2JpbnBybSkgewomIzQzOwlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKJiM0Mzt9OwomIzQzOwogQlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IHNvY2tldCkgewogCXN0cnVjdCBzb2NrICpzazsKIH07CkBAIC02MDU4LDYgJiM0Mzs2MDYyLDcgQEAgc3RhdGljIGJvb2wgdHlwZV9pc190cnVzdGVkX29yX251bGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIHsKIAlCVEZfVFlQRV9FTUlUKEJURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMKHN0cnVjdCBzb2NrZXQpKTsKIAlCVEZfVFlQRV9FTUlUKEJURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMKHN0cnVjdCBkZW50cnkpKTsKJiM0MzsJQlRGX1RZUEVfRU1JVChCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTChzdHJ1Y3QgbGludXhfYmlucHJtKSk7CiAJQlRGX1RZUEVfRU1JVChCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QpKTsKIAogCXJldHVybiBidGZfbmVzdGVkX3R5cGVfaXNfdHJ1c3RlZCgmYW1wO2Vudi0mZ3Q7bG9nLCByZWcsIGZpZWxkX25hbWUsIGJ0Zl9pZCwKQEAgLTYxNjgsNiAmIzQzOzYxNzMsMTUgQEAgc3RhdGljIGludCBjaGVja19wdHJfdG9fYnRmX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCWlmIChyZXQgIT0gUFRSX1RPX0JURl9JRCkgewogCQkvKiBqdXN0IG1hcms7ICovCiAKJiM0MzsJfSBlbHNlIGlmIChicGZfaXNfdHJ1c3RlZF9vcl9udWxsX2J0Zl9wdHIocmVnLSZndDt0eXBlKSkgewomIzQzOwkJLyoKJiM0MzsJCSAqIEFuIHVuY2hlY2tlZCBsb2FkIHRocm91Z2ggYSB0cnVzdGVkLW9yLU5VTEwgcG9pbnRlciBpcwomIzQzOwkJICogZmF1bHQtcHJvdGVjdGVkLiBBbnkgcG9pbnRlciBkZXJpdmVkIGZyb20gdGhhdCBsb2FkIG11c3QgYmUKJiM0MzsJCSAqIHVudHJ1c3RlZCwgYXMgYSBmYXVsdCBwcm9kdWNlcyBhIE5VTEwgdmFsdWUuCiYjNDM7CQkgKi8KJiM0MzsJCWNsZWFyX3RydXN0ZWRfZmxhZ3MoJmFtcDtmbGFnKTsKJiM0MzsJCWZsYWcgfD0gUFRSX1VOVFJVU1RFRDsKJiM0MzsKIAl9IGVsc2UgaWYgKHR5cGVfZmxhZyhyZWctJmd0O3R5cGUpICZhbXA7IFBUUl9VTlRSVVNURUQpIHsKIAkJLyogSWYgdGhpcyBpcyBhbiB1bnRydXN0ZWQgcG9pbnRlciwgYWxsIHBvaW50ZXJzIGZvcm1lZCBieSB3YWxraW5nIGl0CiAJCSAqIGFsc28gaW5oZXJpdCB0aGUgdW50cnVzdGVkIGZsYWcuCkBAIC02NjQ0LDcgJiM0Mzs2NjU4LDggQEAgc3RhdGljIGludCBjaGVja19tZW1fYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeCwgc3RydWN0IGIKIAkJaWYgKCFlcnIgJmFtcDsmYW1wOyB0ID09IEJQRl9SRUFEICZhbXA7JmFtcDsgdmFsdWVfcmVnbm8gJmd0Oz0gMCkKIAkJCW1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCB2YWx1ZV9yZWdubyk7CiAJfSBlbHNlIGlmIChiYXNlX3R5cGUocmVnLSZndDt0eXBlKSA9PSBQVFJfVE9fQlRGX0lEICZhbXA7JmFtcDsKLQkJICAgIXR5cGVfbWF5X2JlX251bGwocmVnLSZndDt0eXBlKSkgewomIzQzOwkJICAgKCF0eXBlX21heV9iZV9udWxsKHJlZy0mZ3Q7dHlwZSkgfHwKJiM0MzsJCSAgICAodCA9PSBCUEZfUkVBRCAmYW1wOyZhbXA7IGJwZl9pc190cnVzdGVkX29yX251bGxfYnRmX3B0cihyZWctJmd0O3R5cGUpKSkpIHsKIAkJZXJyID0gY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3MoZW52LCByZWdzLCByZWcsIGFyZ25vLCBvZmYsIHNpemUsIHQsCiAJCQkJCSAgICAgIHZhbHVlX3JlZ25vKTsKIAl9IGVsc2UgaWYgKHJlZy0mZ3Q7dHlwZSA9PSBDT05TVF9QVFJfVE9fTUFQKSB7CmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaAppbmRleCAzOGIxMTY1MjEyYzk0Li44MjY0YTM0NmQxOGFmIDEwMDY0NAotLS0gYS9tbS9pbnRlcm5hbC5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL2ludGVybmFsLmgKQEAgLTI1LDYgJiM0MzsyNSwxMSBAQAogc3RydWN0IGZvbGlvX2JhdGNoOwogc3RydWN0IGhzdGF0ZTsKIAomIzQzOyNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTEwKJiM0MztpbnQgX19jb3B5X3JlbW90ZV9tbV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKJiM0MzsJCQkgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKTsKJiM0MzsjZW5kaWYKJiM0MzsKIHN0cnVjdCBodWdlX2Jvb3RtZW1fcGFnZSB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCXN0cnVjdCBoc3RhdGUgKmhzdGF0ZTsKZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmMKaW5kZXggOGIwYzJjNzM1ZDNkZS4uZmUyZjVlOTg4ZmI5MCAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LmMKQEAgLTczMzEsOCAmIzQzOzczMzEsOCBAQCBFWFBPUlRfU1lNQk9MX0dQTChhY2Nlc3NfcHJvY2Vzc192bSk7CiAgKiBDb3B5IGEgc3RyaW5nIGZyb20gYW5vdGhlciBwcm9jZXNzJiMzOTtzIGFkZHJlc3Mgc3BhY2UgYXMgZ2l2ZW4gaW4gbW0uCiAgKiBJZiB0aGVyZSBpcyBhbnkgZXJyb3IgcmV0dXJuIC1FRkFVTFQuCiAgKi8KLXN0YXRpYyBpbnQgX19jb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCQl2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpCiYjNDM7aW50IF9fY29weV9yZW1vdGVfbW1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiYjNDM7CQkJIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncykKIHsKIAl2b2lkICpvbGRfYnVmID0gYnVmOwogCWludCBlcnIgPSAwOwpAQCAtNzQwNyw0MyAmIzQzOzc0MDcsNiBAQCBzdGF0aWMgaW50IF9fY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCXJldHVybiBlcnI7CiAJcmV0dXJuIGJ1ZiAtIG9sZF9idWY7CiB9Ci0KLS8qKgotICogY29weV9yZW1vdGVfdm1fc3RyIC0gY29weSBhIHN0cmluZyBmcm9tIGFub3RoZXIgcHJvY2VzcyYjMzk7cyBhZGRyZXNzIHNwYWNlLgotICogQHRzazoJdGhlIHRhc2sgb2YgdGhlIHRhcmdldCBhZGRyZXNzIHNwYWNlCi0gKiBAYWRkcjoJc3RhcnQgYWRkcmVzcyB0byByZWFkIGZyb20KLSAqIEBidWY6CWRlc3RpbmF0aW9uIGJ1ZmZlcgotICogQGxlbjoJbnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkKLSAqIEBndXBfZmxhZ3M6CWZsYWdzIG1vZGlmeWluZyBsb29rdXAgYmVoYXZpb3VyCi0gKgotICogVGhlIGNhbGxlciBtdXN0IGhvbGQgYSByZWZlcmVuY2Ugb24gQG1tLgotICoKLSAqIFJldHVybjogbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCBmcm9tIEBhZGRyIChzb3VyY2UpIHRvIEBidWYgKGRlc3RpbmF0aW9uKTsKLSAqIG5vdCBpbmNsdWRpbmcgdGhlIHRyYWlsaW5nIE5VTC4gQWx3YXlzIGd1YXJhbnRlZWQgdG8gbGVhdmUgTlVMLXRlcm1pbmF0ZWQKLSAqIGJ1ZmZlci4gT24gYW55IGVycm9yLCByZXR1cm4gLUVGQVVMVC4KLSAqLwotaW50IGNvcHlfcmVtb3RlX3ZtX3N0cihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkgICAgICAgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKQotewotCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwotCWludCByZXQ7Ci0KLQlpZiAodW5saWtlbHkobGVuID09IDApKQotCQlyZXR1cm4gMDsKLQotCW1tID0gZ2V0X3Rhc2tfbW0odHNrKTsKLQlpZiAoIW1tKSB7Ci0JCSooY2hhciAqKWJ1ZiA9ICYjMzk7XDAmIzM5OzsKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCi0JcmV0ID0gX19jb3B5X3JlbW90ZV92bV9zdHIobW0sIGFkZHIsIGJ1ZiwgbGVuLCBndXBfZmxhZ3MpOwotCi0JbW1wdXQobW0pOwotCi0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGNvcHlfcmVtb3RlX3ZtX3N0cik7CiAjZW5kaWYgLyogQ09ORklHX0JQRl9TWVNDQUxMICovCiAKIC8qCmRpZmYgLS1naXQgYS9tbS9ub21tdS5jIGIvbW0vbm9tbXUuYwppbmRleCA0OThlMDFlZTQwYjA1Li45ODU5NmU2MDMxMWYzIDEwMDY0NAotLS0gYS9tbS9ub21tdS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL25vbW11LmMKQEAgLTE3NDYsOCAmIzQzOzE3NDYsOCBAQCBFWFBPUlRfU1lNQk9MX0dQTChhY2Nlc3NfcHJvY2Vzc192bSk7CiAgKiBDb3B5IGEgc3RyaW5nIGZyb20gYW5vdGhlciBwcm9jZXNzJiMzOTtzIGFkZHJlc3Mgc3BhY2UgYXMgZ2l2ZW4gaW4gbW0uCiAgKiBJZiB0aGVyZSBpcyBhbnkgZXJyb3IgcmV0dXJuIC1FRkFVTFQuCiAgKi8KLXN0YXRpYyBpbnQgX19jb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCQl2b2lkICpidWYsIGludCBsZW4pCiYjNDM7aW50IF9fY29weV9yZW1vdGVfbW1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiYjNDM7CQkJIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncykKIHsKIAl1bnNpZ25lZCBsb25nIGFkZHJfZW5kOwogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwpAQCAtMTc4MSw0MyAmIzQzOzE3ODEsNiBAQCBzdGF0aWMgaW50IF9fY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJbW1hcF9yZWFkX3VubG9jayhtbSk7CiAJcmV0dXJuIHJldDsKIH0KLQotLyoqCi0gKiBjb3B5X3JlbW90ZV92bV9zdHIgLSBjb3B5IGEgc3RyaW5nIGZyb20gYW5vdGhlciBwcm9jZXNzJiMzOTtzIGFkZHJlc3Mgc3BhY2UuCi0gKiBAdHNrOgl0aGUgdGFzayBvZiB0aGUgdGFyZ2V0IGFkZHJlc3Mgc3BhY2UKLSAqIEBhZGRyOglzdGFydCBhZGRyZXNzIHRvIHJlYWQgZnJvbQotICogQGJ1ZjoJZGVzdGluYXRpb24gYnVmZmVyCi0gKiBAbGVuOgludW1iZXIgb2YgYnl0ZXMgdG8gY29weQotICogQGd1cF9mbGFnczoJZmxhZ3MgbW9kaWZ5aW5nIGxvb2t1cCBiZWhhdmlvdXIgKHVudXNlZCkKLSAqCi0gKiBUaGUgY2FsbGVyIG11c3QgaG9sZCBhIHJlZmVyZW5jZSBvbiBAbW0uCi0gKgotICogUmV0dXJuOiBudW1iZXIgb2YgYnl0ZXMgY29waWVkIGZyb20gQGFkZHIgKHNvdXJjZSkgdG8gQGJ1ZiAoZGVzdGluYXRpb24pOwotICogbm90IGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMLiBBbHdheXMgZ3VhcmFudGVlZCB0byBsZWF2ZSBOVUwtdGVybWluYXRlZAotICogYnVmZmVyLiBPbiBhbnkgZXJyb3IsIHJldHVybiAtRUZBVUxULgotICovCi1pbnQgY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCSAgICAgICB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpCi17Ci0Jc3RydWN0IG1tX3N0cnVjdCAqbW07Ci0JaW50IHJldDsKLQotCWlmICh1bmxpa2VseShsZW4gPT0gMCkpCi0JCXJldHVybiAwOwotCi0JbW0gPSBnZXRfdGFza19tbSh0c2spOwotCWlmICghbW0pIHsKLQkJKihjaGFyICopYnVmID0gJiMzOTtcMCYjMzk7OwotCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0KLQlyZXQgPSBfX2NvcHlfcmVtb3RlX3ZtX3N0cihtbSwgYWRkciwgYnVmLCBsZW4pOwotCi0JbW1wdXQobW0pOwotCi0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGNvcHlfcmVtb3RlX3ZtX3N0cik7CiAjZW5kaWYgLyogQ09ORklHX0JQRl9TWVNDQUxMICovCiAKIC8qKgpkaWZmIC0tZ2l0IGEvbW0vdXRpbC5jIGIvbW0vdXRpbC5jCmluZGV4IGJmMDUxM2QxZDNkMDguLjJlY2EyN2IwMjc5MWYgMTAwNjQ0Ci0tLSBhL21tL3V0aWwuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS91dGlsLmMKQEAgLTEwNjEsNiAmIzQzOzEwNjEsNjggQEAgaW50IGdldF9jbWRsaW5lKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgY2hhciAqYnVmZmVyLCBpbnQgYnVmbGVuKQogCXJldHVybiByZXM7CiB9CiAKJiM0MzsjaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMCiYjNDM7LyoqCiYjNDM7ICogY29weV9yZW1vdGVfbW1fc3RyIC0gY29weSBhIHN0cmluZyBmcm9tIGEgcmVtb3RlIGFkZHJlc3Mgc3BhY2UuCiYjNDM7ICogQG1tOiAgICAgICAgIHRoZSByZW1vdGUgYWRkcmVzcyBzcGFjZQomIzQzOyAqIEBhZGRyOiAgICAgICBzdGFydCBhZGRyZXNzIHRvIHJlYWQgZnJvbQomIzQzOyAqIEBidWY6ICAgICAgICBkZXN0aW5hdGlvbiBidWZmZXIKJiM0MzsgKiBAbGVuOiAgICAgICAgbnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkKJiM0MzsgKiBAZ3VwX2ZsYWdzOiAgZmxhZ3MgbW9kaWZ5aW5nIGxvb2t1cCBiZWhhdmlvdXIKJiM0MzsgKgomIzQzOyAqIFRoZSBjYWxsZXIgbXVzdCBob2xkIGEgcmVmZXJlbmNlIG9uIEBtbS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCBmcm9tIEBhZGRyIChzb3VyY2UpIHRvIEBidWYgKGRlc3RpbmF0aW9uKSwKJiM0MzsgKiBub3QgaW5jbHVkaW5nIHRoZSB0cmFpbGluZyBOVUwuIElmIEBsZW4gaXMgemVybywgcmV0dXJuIDAgd2l0aG91dCBhY2Nlc3NpbmcKJiM0MzsgKiBAYnVmLiBPdGhlcndpc2UsIEBidWYgaXMgYWx3YXlzIE5VTC10ZXJtaW5hdGVkLiBPbiBhbnkgZXJyb3IsIHJldHVybgomIzQzOyAqIC1FRkFVTFQuCiYjNDM7ICovCiYjNDM7aW50IGNvcHlfcmVtb3RlX21tX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAomIzQzOwkJICAgICAgIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncykKJiM0Mzt7CiYjNDM7CWlmICh1bmxpa2VseShsZW4gPT0gMCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIF9fY29weV9yZW1vdGVfbW1fc3RyKG1tLCBhZGRyLCBidWYsIGxlbiwgZ3VwX2ZsYWdzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogY29weV9yZW1vdGVfdm1fc3RyIC0gY29weSBhIHN0cmluZyBmcm9tIGFub3RoZXIgcHJvY2VzcyYjMzk7cyBhZGRyZXNzIHNwYWNlLgomIzQzOyAqIEB0c2s6CXRoZSB0YXNrIG9mIHRoZSB0YXJnZXQgYWRkcmVzcyBzcGFjZQomIzQzOyAqIEBhZGRyOglzdGFydCBhZGRyZXNzIHRvIHJlYWQgZnJvbQomIzQzOyAqIEBidWY6CWRlc3RpbmF0aW9uIGJ1ZmZlcgomIzQzOyAqIEBsZW46CW51bWJlciBvZiBieXRlcyB0byBjb3B5CiYjNDM7ICogQGd1cF9mbGFnczoJZmxhZ3MgbW9kaWZ5aW5nIGxvb2t1cCBiZWhhdmlvdXIKJiM0MzsgKgomIzQzOyAqIFJldHVybjogbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCBmcm9tIEBhZGRyIChzb3VyY2UpIHRvIEBidWYgKGRlc3RpbmF0aW9uKSwKJiM0MzsgKiBub3QgaW5jbHVkaW5nIHRoZSB0cmFpbGluZyBOVUwuIElmIEBsZW4gaXMgemVybywgcmV0dXJuIDAgd2l0aG91dCBhY2Nlc3NpbmcKJiM0MzsgKiBAYnVmLiBPdGhlcndpc2UsIEBidWYgaXMgYWx3YXlzIE5VTC10ZXJtaW5hdGVkLiBPbiBhbnkgZXJyb3IsIHJldHVybgomIzQzOyAqIC1FRkFVTFQuCiYjNDM7ICovCiYjNDM7aW50IGNvcHlfcmVtb3RlX3ZtX3N0cihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdW5zaWduZWQgbG9uZyBhZGRyLAomIzQzOwkJICAgICAgIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAodW5saWtlbHkobGVuID09IDApKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CW1tID0gZ2V0X3Rhc2tfbW0odHNrKTsKJiM0MzsJaWYgKCFtbSkgewomIzQzOwkJKihjaGFyICopYnVmID0gJiMzOTtcMCYjMzk7OwomIzQzOwkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gX19jb3B5X3JlbW90ZV9tbV9zdHIobW0sIGFkZHIsIGJ1ZiwgbGVuLCBndXBfZmxhZ3MpOwomIzQzOwomIzQzOwltbXB1dChtbSk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGNvcHlfcmVtb3RlX3ZtX3N0cik7CiYjNDM7I2VuZGlmIC8qIENPTkZJR19CUEZfU1lTQ0FMTCAqLwomIzQzOwogaW50IF9fd2VhayBtZW1jbXBfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UxLCBzdHJ1Y3QgcGFnZSAqcGFnZTIpCiB7CiAJY2hhciAqYWRkcjEsICphZGRyMjsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9pdGVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfaXRlci5jCmluZGV4IGM2OTA4MGNhMTRmNWEuLjk5YTE2YTFhZGQ3MGUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9pdGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2l0ZXIuYwpAQCAtMzksMTAgJiM0MzszOSwxMCBAQCBzdGF0aWMgdm9pZCB0ZXN0X2J0Zl9pZF9vcl9udWxsKHZvaWQpCiAJc3RydWN0IGJwZl9pdGVyX3Rlc3Rfa2VybjMgKnNrZWw7CiAKIAlza2VsID0gYnBmX2l0ZXJfdGVzdF9rZXJuM19fb3Blbl9hbmRfbG9hZCgpOwotCWlmICghQVNTRVJUX0VSUl9QVFIoc2tlbCwgJiMzNDticGZfaXRlcl90ZXN0X2tlcm4zX19vcGVuX2FuZF9sb2FkJiMzNDspKSB7Ci0JCWJwZl9pdGVyX3Rlc3Rfa2VybjNfX2Rlc3Ryb3koc2tlbCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O2JwZl9pdGVyX3Rlc3Rfa2VybjNfX29wZW5fYW5kX2xvYWQmIzM0OykpCiAJCXJldHVybjsKLQl9CiYjNDM7CiYjNDM7CWJwZl9pdGVyX3Rlc3Rfa2VybjNfX2Rlc3Ryb3koc2tlbCk7CiB9CiAKIHN0YXRpYyB2b2lkIGRvX2R1bW15X3JlYWRfb3B0cyhzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIHN0cnVjdCBicGZfaXRlcl9hdHRhY2hfb3B0cyAqb3B0cykKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2NvcHlfZnJvbV91c2VyX2Jwcm0uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2NvcHlfZnJvbV91c2VyX2Jwcm0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5iMjMyNWIxOTM1NzYxCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY29weV9mcm9tX3VzZXJfYnBybS5jCkBAIC0wLDAgJiM0MzsxLDcyIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7ZXJybm8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL3dhaXQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O3Rlc3RfcHJvZ3MuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O2NvcHlfZnJvbV91c2VyX2Jwcm0uc2tlbC5oJiMzNDsKJiM0MzsKJiM0Mzt2b2lkIHRlc3RfY29weV9mcm9tX3VzZXJfYnBybSh2b2lkKQomIzQzO3sKJiM0MzsJY2hhciBhcmcwW10gPSAmIzM0O2ZpcnN0JiMzNDs7CiYjNDM7CWNoYXIgYXJnMVtdID0gJiMzNDtzZWNvbmQtYXJndW1lbnQmIzM0OzsKJiM0MzsJY2hhciBlbnYwW10gPSAmIzM0O1NPTUVfRU5WPWEmIzM0OzsKJiM0MzsJY2hhciBlbnYxW10gPSAmIzM0O09USEVSX0VOVj1zb21ldGhpbmcmIzM0OzsKJiM0MzsJc3RydWN0IGNvcHlfZnJvbV91c2VyX2Jwcm0gKnNrZWw7CiYjNDM7CXBpZF90IGNoaWxkOwomIzQzOwlpbnQgc3RhdHVzOwomIzQzOwomIzQzOwlza2VsID0gY29weV9mcm9tX3VzZXJfYnBybV9fb3Blbl9hbmRfbG9hZCgpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgJiMzNDtvcGVuX2FuZF9sb2FkJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBPbiAhQ09ORklHX01NVSwgZXhlYyBzdHJpbmdzIGFyZSBoZWxkIGluIGJwcm0tJmd0O3BhZ2VbXSByYXRoZXIgdGhhbgomIzQzOwkgKiBiZWluZyBtYXBwZWQgaW4gYnBybS0mZ3Q7bW0uCiYjNDM7CSAqLwomIzQzOwlpZiAoIXNrZWwtJmd0O2tjb25maWctJmd0O0NPTkZJR19NTVUpIHsKJiM0MzsJCXByaW50ZigmIzM0OyVzOlNLSVA6IHRlc3QgcmVxdWlyZXMgQ09ORklHX01NVVxuJiMzNDssIF9fZnVuY19fKTsKJiM0MzsJCXRlc3RfX3NraXAoKTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghQVNTRVJUX09LKGNvcHlfZnJvbV91c2VyX2Jwcm1fX2F0dGFjaChza2VsKSwgJiMzNDthdHRhY2gmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJY2hpbGQgPSBmb3JrKCk7CiYjNDM7CWlmICghQVNTRVJUX0dFKGNoaWxkLCAwLCAmIzM0O2ZvcmsmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJaWYgKCFjaGlsZCkgewomIzQzOwkJY2hhciAqY29uc3QgYXJndltdID0geyBhcmcwLCBhcmcxLCBOVUxMIH07CiYjNDM7CQljaGFyICpjb25zdCBlbnZwW10gPSB7IGVudjAsIGVudjEsIE5VTEwgfTsKJiM0MzsKJiM0MzsJCXNrZWwtJmd0O2Jzcy0mZ3Q7bW9uaXRvcmVkX3BpZCA9IGdldHBpZCgpOwomIzQzOwkJZXhlY3ZlKCYjMzQ7L2Jpbi90cnVlJiMzNDssIGFyZ3YsIGVudnApOwomIzQzOwkJX2V4aXQoZXJybm8pOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghQVNTRVJUX0VRKHdhaXRwaWQoY2hpbGQsICZhbXA7c3RhdHVzLCAwKSwgY2hpbGQsICYjMzQ7d2FpdHBpZCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlpZiAoQVNTRVJUX1RSVUUoV0lGRVhJVEVEKHN0YXR1cyksICYjMzQ7Y2hpbGRfZXhpdGVkJiMzNDspKQomIzQzOwkJQVNTRVJUX0VRKFdFWElUU1RBVFVTKHN0YXR1cyksIEVQRVJNLCAmIzM0O2V4ZWNfZXJybm8mIzM0Oyk7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O2Jwcm1fYXJnYywgMiwgJiMzNDticHJtX2FyZ2MmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O2Jwcm1fZW52YywgMiwgJiMzNDticHJtX2VudmMmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O2RhdGFfbGVuX21hdGNoLCAxLCAmIzM0O2RhdGFfbGVuX21hdGNoJiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtpbnZhbGlkX2ZsYWdzX3JldCwgLUVJTlZBTCwgJiMzNDtpbnZhbGlkX2ZsYWdzX3JldCYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7Y29weV9yZXQsIDAsICYjMzQ7Y29weV9yZXQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O3N0cl9hcmcwX3JldCwgc2l6ZW9mKGFyZzApLCAmIzM0O3N0cl9hcmcwX3JldCYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7c3RyX2FyZzFfcmV0LCBzaXplb2YoYXJnMSksICYjMzQ7c3RyX2FyZzFfcmV0JiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtzdHJfZW52MF9yZXQsIHNpemVvZihlbnYwKSwgJiMzNDtzdHJfZW52MF9yZXQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O3N0cl9lbnYxX3JldCwgc2l6ZW9mKGVudjEpLCAmIzM0O3N0cl9lbnYxX3JldCYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7ZGF0YV9tYXRjaCwgMSwgJiMzNDtkYXRhX21hdGNoJiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtzdHJfYXJnc19tYXRjaCwgMSwgJiMzNDtzdHJfYXJnc19tYXRjaCYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7c3RyX2VudnNfbWF0Y2gsIDEsICYjMzQ7c3RyX2VudnNfbWF0Y2gmIzM0Oyk7CiYjNDM7CiYjNDM7b3V0OgomIzQzOwljb3B5X2Zyb21fdXNlcl9icHJtX19kZXN0cm95KHNrZWwpOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19tYXliZV9udWxsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfbWF5YmVfbnVsbC5jCmluZGV4IDAxZGMyNjEzYzhhNTEuLjQ1YWY2ZjAwYWQ5MDggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19tYXliZV9udWxsLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX21heWJlX251bGwuYwpAQCAtMTksMTUgJiM0MzsxOSwxNiBAQCBzdGF0aWMgdm9pZCBtYXliZV9udWxsKHZvaWQpCiAJc3RydWN0X29wc19tYXliZV9udWxsX19kZXN0cm95KHNrZWwpOwogfQogCi0vKiBUZXN0IHRoYXQgdGhlIHZlcmlmaWVyIHJlamVjdHMgYSBwcm9ncmFtIHRoYXQgYWNjZXNzIGEgbnVsbGFibGUgcG9pbnRlcgotICogd2l0aG91dCBhIGNoZWNrIGJlZm9yZWhhbmQuCiYjNDM7LyoKJiM0MzsgKiBUZXN0IHRoYXQgdGhlIHZlcmlmaWVyIGFjY2VwdHMgYSBmYXVsdC1wcm90ZWN0ZWQgcmVhZCB0aHJvdWdoIGEgbnVsbGFibGUKJiM0MzsgKiB0cnVzdGVkIHBvaW50ZXIgd2l0aG91dCBhbiBleHBsaWNpdCBOVUxMIGNoZWNrLgogICovCi1zdGF0aWMgdm9pZCBtYXliZV9udWxsX2ZhaWwodm9pZCkKJiM0MztzdGF0aWMgdm9pZCBtYXliZV9udWxsX25vX2NoZWNrKHZvaWQpCiB7CiAJc3RydWN0IHN0cnVjdF9vcHNfbWF5YmVfbnVsbF9mYWlsICpza2VsOwogCiAJc2tlbCA9IHN0cnVjdF9vcHNfbWF5YmVfbnVsbF9mYWlsX19vcGVuX2FuZF9sb2FkKCk7Ci0JaWYgKEFTU0VSVF9FUlJfUFRSKHNrZWwsICYjMzQ7c3RydWN0X29wc19tb2R1bGVfZmFpbF9fb3Blbl9hbmRfbG9hZCYjMzQ7KSkKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7c3RydWN0X29wc19tYXliZV9udWxsX2ZhaWxfX29wZW5fYW5kX2xvYWQmIzM0OykpCiAJCXJldHVybjsKIAogCXN0cnVjdF9vcHNfbWF5YmVfbnVsbF9mYWlsX19kZXN0cm95KHNrZWwpOwpAQCAtNDEsNiAmIzQzOzQyLDYgQEAgdm9pZCB0ZXN0X3N0cnVjdF9vcHNfbWF5YmVfbnVsbCh2b2lkKQogCSAqLwogCWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7bWF5YmVfbnVsbCYjMzQ7KSkKIAkJbWF5YmVfbnVsbCgpOwotCWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7bWF5YmVfbnVsbF9mYWlsJiMzNDspKQotCQltYXliZV9udWxsX2ZhaWwoKTsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDttYXliZV9udWxsX25vX2NoZWNrJiMzNDspKQomIzQzOwkJbWF5YmVfbnVsbF9ub19jaGVjaygpOwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHBfYnRmX251bGxhYmxlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90cF9idGZfbnVsbGFibGUuYwppbmRleCBhY2NjNDJlMDFmOGE4Li44MjVmZTdhOTJkNzRmIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90cF9idGZfbnVsbGFibGUuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90cF9idGZfbnVsbGFibGUuYwpAQCAtMiw2ICYjNDM7MiwzMSBAQAogCiAjaW5jbHVkZSAmbHQ7dGVzdF9wcm9ncy5oJmd0OwogI2luY2x1ZGUgJiMzNDt0ZXN0X3RwX2J0Zl9udWxsYWJsZS5za2VsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7dGVzdF90cF9idGZfbnVsbGFibGVfcnVudGltZS5za2VsLmgmIzM0OwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHRlc3RfbnVsbGFibGVfcnVudGltZSh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IHRlc3RfdHBfYnRmX251bGxhYmxlX3J1bnRpbWUgKnNrZWw7CiYjNDM7CiYjNDM7CXNrZWwgPSB0ZXN0X3RwX2J0Zl9udWxsYWJsZV9ydW50aW1lX19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O29wZW5fYW5kX2xvYWQmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7bW9uaXRvcmVkX3RpZCA9IHN5c19nZXR0aWQoKTsKJiM0MzsKJiM0MzsJaWYgKCFBU1NFUlRfT0sodGVzdF90cF9idGZfbnVsbGFibGVfcnVudGltZV9fYXR0YWNoKHNrZWwpLCAmIzM0O2F0dGFjaCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlpZiAoIUFTU0VSVF9PSyh0cmlnZ2VyX21vZHVsZV90ZXN0X3JlYWQoMiksICYjMzQ7dHJpZ2dlciYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtjYWxscywgMiwgJiMzNDtjYWxscyYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7bm9ubnVsbF9sZW4sIDIsICYjMzQ7bm9ubnVsbF9sZW4mIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O251bGxfbGVuLCAwLCAmIzM0O251bGxfbGVuJiMzNDspOwomIzQzOwomIzQzO291dDoKJiM0MzsJdGVzdF90cF9idGZfbnVsbGFibGVfcnVudGltZV9fZGVzdHJveShza2VsKTsKJiM0Mzt9CiAKIHZvaWQgdGVzdF90cF9idGZfbnVsbGFibGUodm9pZCkKIHsKQEAgLTExLDQgJiM0MzszNiw3IEBAIHZvaWQgdGVzdF90cF9idGZfbnVsbGFibGUodm9pZCkKIAl9CiAKIAlSVU5fVEVTVFModGVzdF90cF9idGZfbnVsbGFibGUpOwomIzQzOwomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3J1bnRpbWUmIzM0OykpCiYjNDM7CQl0ZXN0X251bGxhYmxlX3J1bnRpbWUoKTsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9jb3B5X2Zyb21fdXNlcl9icHJtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvY29weV9mcm9tX3VzZXJfYnBybS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmIzMzRhMTU3NDE5ZTUKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvY29weV9mcm9tX3VzZXJfYnBybS5jCkBAIC0wLDAgJiM0MzsxLDEyMyBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDt2bWxpbnV4LmgmIzM0OwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2hlbHBlcnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl90cmFjaW5nLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2Vycm5vLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDticGZfbWlzYy5oJiMzNDsKJiM0MzsKJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgZXhwZWN0ZWRfZGF0YVtdID0gJiMzNDtmaXJzdFwwc2Vjb25kLWFyZ3VtZW50XDAmIzM0OwomIzQzOwkJCQkgICAgJiMzNDtTT01FX0VOVj1hXDBPVEhFUl9FTlY9c29tZXRoaW5nJiMzNDs7CiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgZXhwZWN0ZWRfYXJnMFtdID0gJiMzNDtmaXJzdCYjMzQ7OwomIzQzO3N0YXRpYyBjb25zdCBjaGFyIGV4cGVjdGVkX2FyZzFbXSA9ICYjMzQ7c2Vjb25kLWFyZ3VtZW50JiMzNDs7CiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgZXhwZWN0ZWRfZW52MFtdID0gJiMzNDtTT01FX0VOVj1hJiMzNDs7CiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgZXhwZWN0ZWRfZW52MVtdID0gJiMzNDtPVEhFUl9FTlY9c29tZXRoaW5nJiMzNDs7CiYjNDM7CiYjNDM7aW50IG1vbml0b3JlZF9waWQ7CiYjNDM7aW50IGJwcm1fYXJnYzsKJiM0MztpbnQgYnBybV9lbnZjOwomIzQzO2ludCBkYXRhX2xlbl9tYXRjaDsKJiM0MztpbnQgaW52YWxpZF9mbGFnc19yZXQ7CiYjNDM7aW50IGNvcHlfcmV0OwomIzQzO2ludCBzdHJfYXJnMF9yZXQ7CiYjNDM7aW50IHN0cl9hcmcxX3JldDsKJiM0MztpbnQgc3RyX2VudjBfcmV0OwomIzQzO2ludCBzdHJfZW52MV9yZXQ7CiYjNDM7aW50IGRhdGFfbWF0Y2g7CiYjNDM7aW50IHN0cl9hcmdzX21hdGNoOwomIzQzO2ludCBzdHJfZW52c19tYXRjaDsKJiM0MzsKJiM0MztleHRlcm4gYm9vbCBDT05GSUdfTU1VIF9fa2NvbmZpZyBfX3dlYWs7CiYjNDM7CiYjNDM7ZXh0ZXJuIGludCBicGZfY29weV9mcm9tX3VzZXJfbW0odm9pZCAqZHN0LCB1MzIgZHN0X19zeiwKJiM0MzsJCQkJIGNvbnN0IHZvaWQgKnVuc2FmZV9wdHJfX2lnbiwKJiM0MzsJCQkJIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1NjQgZmxhZ3MpIF9fa3N5bTsKJiM0MzsKJiM0MztleHRlcm4gaW50IGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIodm9pZCAqZHN0LCB1MzIgZHN0X19zeiwKJiM0MzsJCQkJICAgICBjb25zdCB2b2lkICp1bnNhZmVfcHRyX19pZ24sCiYjNDM7CQkJCSAgICAgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHU2NCBmbGFncykgX19rc3ltOwomIzQzOwomIzQzO1NFQygmIzM0O2xzbS5zL2Jwcm1fY2hlY2tfc2VjdXJpdHkmIzM0OykKJiM0MztpbnQgQlBGX1BST0coY2hlY2tfZXhlY19hcmdzLCBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKQomIzQzO3sKJiM0MzsJdTMyIHBpZCA9IGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpICZndDsmZ3Q7IDMyOwomIzQzOwljaGFyIGRhdGFbc2l6ZW9mKGV4cGVjdGVkX2RhdGEpXSA9IHt9OwomIzQzOwlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKJiM0MzsJY2hhciBhcmcwWzMyXSA9IHt9OwomIzQzOwljaGFyIGFyZzFbMzJdID0ge307CiYjNDM7CWNoYXIgZW52MFszMl0gPSB7fTsKJiM0MzsJY2hhciBlbnYxWzMyXSA9IHt9OwomIzQzOwl1NjQgb2Zmc2V0ID0gMDsKJiM0MzsJdTY0IGRhdGFfbGVuOwomIzQzOwomIzQzOwlpZiAoIUNPTkZJR19NTVUpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKHBpZCAhPSBtb25pdG9yZWRfcGlkKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CW1tID0gYnBybS0mZ3Q7bW07CiYjNDM7CWlmICghbW0pCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJYnBybV9hcmdjID0gYnBybS0mZ3Q7YXJnYzsKJiM0MzsJYnBybV9lbnZjID0gYnBybS0mZ3Q7ZW52YzsKJiM0MzsKJiM0MzsJLyogdGhpcyBpcyB0aGUgdG90YWwgc2l6ZSBvZiBhcmdzIGFuZCBlbnZzIHN0YXJ0aW5nIGZyb20gYnBybS0mZ3Q7cCAqLwomIzQzOwlkYXRhX2xlbiA9IGJwcm0tJmd0O2V4ZWMgLSBicHJtLSZndDtwOwomIzQzOwlkYXRhX2xlbl9tYXRjaCA9IGRhdGFfbGVuID09IHNpemVvZihleHBlY3RlZF9kYXRhKTsKJiM0MzsKJiM0MzsJaW52YWxpZF9mbGFnc19yZXQgPSBicGZfY29weV9mcm9tX3VzZXJfbW0oZGF0YSwKJiM0MzsJCQkJCQkgIHNpemVvZihkYXRhKSwgKHZvaWQgKilicHJtLSZndDtwLCBtbSwgfjBVTEwpOwomIzQzOwomIzQzOwljb3B5X3JldCA9IGJwZl9jb3B5X2Zyb21fdXNlcl9tbShkYXRhLCBzaXplb2YoZGF0YSksICh2b2lkICopYnBybS0mZ3Q7cCwKJiM0MzsJCQkJCSBtbSwgMCk7CiYjNDM7CWlmIChjb3B5X3JldCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlkYXRhX21hdGNoID0KJiM0MzsJCSFfX2J1aWx0aW5fbWVtY21wKGRhdGEsIGV4cGVjdGVkX2RhdGEsIHNpemVvZihleHBlY3RlZF9kYXRhKSk7CiYjNDM7CiYjNDM7CS8qIGFyZzAgaXMgYXQgYnBybS0mZ3Q7cCAqLwomIzQzOwlzdHJfYXJnMF9yZXQgPSBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKGFyZzAsIHNpemVvZihhcmcwKSwKJiM0MzsJCQkJCQkgKHZvaWQgKikoYnBybS0mZ3Q7cCAmIzQzOyBvZmZzZXQpLAomIzQzOwkJCQkJCSBtbSwgQlBGX0ZfUEFEX1pFUk9TKTsKJiM0MzsJaWYgKHN0cl9hcmcwX3JldCAhPSBzaXplb2YoZXhwZWN0ZWRfYXJnMCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJb2Zmc2V0ICYjNDM7PSBzdHJfYXJnMF9yZXQ7CiYjNDM7CiYjNDM7CS8qIGFyZzEgaXMgYXQgYnBybS0mZ3Q7cCAmIzQzOyBzaXplb2YoYXJnMCkgKi8KJiM0MzsJc3RyX2FyZzFfcmV0ID0gYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cihhcmcxLCBzaXplb2YoYXJnMSksCiYjNDM7CQkJCQkJICh2b2lkICopKGJwcm0tJmd0O3AgJiM0Mzsgb2Zmc2V0KSwKJiM0MzsJCQkJCQkgbW0sIEJQRl9GX1BBRF9aRVJPUyk7CiYjNDM7CWlmIChzdHJfYXJnMV9yZXQgIT0gc2l6ZW9mKGV4cGVjdGVkX2FyZzEpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CW9mZnNldCAmIzQzOz0gc3RyX2FyZzFfcmV0OwomIzQzOwomIzQzOwkvKiBlbnYwIGlzIGF0IGJwcm0tJmd0O3AgJiM0Mzsgc2l6ZW9mKGFyZzApICYjNDM7IHNpemVvZihhcmcxKSAqLwomIzQzOwlzdHJfZW52MF9yZXQgPSBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKGVudjAsIHNpemVvZihlbnYwKSwKJiM0MzsJCQkJCQkgKHZvaWQgKikoYnBybS0mZ3Q7cCAmIzQzOyBvZmZzZXQpLAomIzQzOwkJCQkJCSBtbSwgQlBGX0ZfUEFEX1pFUk9TKTsKJiM0MzsJaWYgKHN0cl9lbnYwX3JldCAhPSBzaXplb2YoZXhwZWN0ZWRfZW52MCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJb2Zmc2V0ICYjNDM7PSBzdHJfZW52MF9yZXQ7CiYjNDM7CiYjNDM7CS8qIGVudjEgaXMgYXQgYnBybS0mZ3Q7cCAmIzQzOyBzaXplb2YoYXJnMCkgJiM0Mzsgc2l6ZW9mKGFyZzEpICYjNDM7IHNpemVvZihlbnYwKSAqLwomIzQzOwlzdHJfZW52MV9yZXQgPSBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKGVudjEsIHNpemVvZihlbnYxKSwKJiM0MzsJCQkJCQkgKHZvaWQgKikoYnBybS0mZ3Q7cCAmIzQzOyBvZmZzZXQpLAomIzQzOwkJCQkJCSBtbSwgQlBGX0ZfUEFEX1pFUk9TKTsKJiM0MzsJaWYgKHN0cl9lbnYxX3JldCAhPSBzaXplb2YoZXhwZWN0ZWRfZW52MSkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJc3RyX2FyZ3NfbWF0Y2ggPQomIzQzOwkJIV9fYnVpbHRpbl9tZW1jbXAoYXJnMCwgZXhwZWN0ZWRfYXJnMCwgc2l6ZW9mKGV4cGVjdGVkX2FyZzApKSAmYW1wOyZhbXA7CiYjNDM7CQkhX19idWlsdGluX21lbWNtcChhcmcxLCBleHBlY3RlZF9hcmcxLCBzaXplb2YoZXhwZWN0ZWRfYXJnMSkpOwomIzQzOwlzdHJfZW52c19tYXRjaCA9CiYjNDM7CQkhX19idWlsdGluX21lbWNtcChlbnYwLCBleHBlY3RlZF9lbnYwLCBzaXplb2YoZXhwZWN0ZWRfZW52MCkpICZhbXA7JmFtcDsKJiM0MzsJCSFfX2J1aWx0aW5fbWVtY21wKGVudjEsIGV4cGVjdGVkX2VudjEsIHNpemVvZihleHBlY3RlZF9lbnYxKSk7CiYjNDM7CiYjNDM7CXJldHVybiBkYXRhX21hdGNoICZhbXA7JmFtcDsgc3RyX2FyZ3NfbWF0Y2ggJmFtcDsmYW1wOyBzdHJfZW52c19tYXRjaCA/IC1FUEVSTSA6IDA7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Jhd190cF9udWxsX2ZhaWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yYXdfdHBfbnVsbF9mYWlsLmMKaW5kZXggNzI1ZDczYzlmZmUxMy4uMTYzMTI0NzkzZDBhNiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Jhd190cF9udWxsX2ZhaWwuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmF3X3RwX251bGxfZmFpbC5jCkBAIC0yLDIyICYjNDM7MiwzNCBAQAogLyogQ29weXJpZ2h0IChjKSAyMDI0IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqLwogCiAjaW5jbHVkZSAmbHQ7dm1saW51eC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2hlbHBlcnMuaCZndDsKICNpbmNsdWRlICZsdDticGYvYnBmX3RyYWNpbmcuaCZndDsKICNpbmNsdWRlICYjMzQ7YnBmX21pc2MuaCYjMzQ7CiAKIGNoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKIAotLyogRW5zdXJlIG1vZHVsZSBwYXJhbWV0ZXIgaGFzIFBUUl9NQVlCRV9OVUxMICovCiYjNDM7ZXh0ZXJuIHN0cnVjdCB0YXNrX3N0cnVjdCAqYnBmX3Rhc2tfYWNxdWlyZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIF9fa3N5bTsKJiM0MztleHRlcm4gdm9pZCBicGZfdGFza19yZWxlYXNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkgX19rc3ltOwomIzQzOwomIzQzOy8qCiYjNDM7ICogRW5zdXJlIHRoZSBtb2R1bGUgdHJhY2Vwb2ludCBhcmd1bWVudCBpcyB0cnVzdGVkLW9yLU5VTEwgd2hpbGUgYWxsb3dpbmcKJiM0MzsgKiBhIGZhdWx0LXByb3RlY3RlZCByZWFkIHdpdGhvdXQgYW4gZXhwbGljaXQgTlVMTCBjaGVjay4KJiM0MzsgKi8KIFNFQygmIzM0O3RwX2J0Zi9icGZfdGVzdG1vZF90ZXN0X3Jhd190cF9udWxsX3RwJiMzNDspCi1fX2ZhaWx1cmUgX19tc2coJiMzNDtSMSBpbnZhbGlkIG1lbSBhY2Nlc3MgJiMzOTt0cnVzdGVkX3B0cl9vcl9udWxsXyYjMzk7JiMzNDspCiYjNDM7X19zdWNjZXNzIF9fbG9nX2xldmVsKDIpCiYjNDM7X19tc2coJiMzNDtSMT10cnVzdGVkX3B0cl9vcl9udWxsX3NrX2J1ZmYmIzM0OykKIGludCB0ZXN0X3Jhd190cF9udWxsX2JwZl90ZXN0bW9kX3Rlc3RfcmF3X3RwX251bGxfYXJnXzEodm9pZCAqY3R4KSB7CiAgICAgYXNtIHZvbGF0aWxlKCYjMzQ7cjEgPSAqKHU2NCAqKShyMSAmIzQzOzApOyByMSA9ICoodTY0ICopKHIxICYjNDM7MCk7JiMzNDsgOjo6IF9fY2xvYmJlcl9hbGwpOwogICAgIHJldHVybiAwOwogfQogCi0vKiBDaGVjayBOVUxMIG1hcmtpbmcgKi8KJiM0MzsvKgomIzQzOyAqIEVuc3VyZSBzY2hlZF9waV9zZXRwcmlvJiMzOTtzIHNlY29uZCBhcmd1bWVudCBpcyB0cnVzdGVkLW9yLU5VTEwgd2hpbGUgYWxsb3dpbmcKJiM0MzsgKiBhIGZhdWx0LXByb3RlY3RlZCByZWFkIHdpdGhvdXQgYW4gZXhwbGljaXQgTlVMTCBjaGVjay4KJiM0MzsgKi8KIFNFQygmIzM0O3RwX2J0Zi9zY2hlZF9waV9zZXRwcmlvJiMzNDspCi1fX2ZhaWx1cmUgX19tc2coJiMzNDtSMSBpbnZhbGlkIG1lbSBhY2Nlc3MgJiMzOTt0cnVzdGVkX3B0cl9vcl9udWxsXyYjMzk7JiMzNDspCiYjNDM7X19zdWNjZXNzIF9fbG9nX2xldmVsKDIpCiYjNDM7X19tc2coJiMzNDtSMT10cnVzdGVkX3B0cl9vcl9udWxsX3Rhc2tfc3RydWN0JiMzNDspCiBpbnQgdGVzdF9yYXdfdHBfbnVsbF9zY2hlZF9waV9zZXRwcmlvX2FyZ18yKHZvaWQgKmN0eCkgewogICAgIGFzbSB2b2xhdGlsZSgmIzM0O3IxID0gKih1NjQgKikocjEgJiM0Mzs4KTsgcjEgPSAqKHU2NCAqKShyMSAmIzQzOzApOyYjMzQ7IDo6OiBfX2Nsb2JiZXJfYWxsKTsKICAgICByZXR1cm4gMDsKQEAgLTYwLDcgJiM0Mzs3Miw4IEBAIGludCB0ZXN0X3RwX2J0Zl9zaWduYWxfZGVsaXZlcl9pbmZvX25vX2RlcmVmKHZvaWQgKmN0eCkKIH0KIAogU0VDKCYjMzQ7dHBfYnRmL3NjaGVkX3Byb2Nlc3Nfd2FpdCYjMzQ7KQotX19mYWlsdXJlIF9fbXNnKCYjMzQ7UjEgaW52YWxpZCBtZW0gYWNjZXNzICYjMzk7dHJ1c3RlZF9wdHJfb3JfbnVsbF8mIzM5OyYjMzQ7KQomIzQzO19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKQomIzQzO19fbXNnKCYjMzQ7UjE9dHJ1c3RlZF9wdHJfb3JfbnVsbF9waWQmIzM0OykKIGludCB0ZXN0X3Jhd190cF9udWxsX3NjaGVkX3Byb2Nlc3Nfd2FpdF9hcmdfMSh2b2lkICpjdHgpCiB7CiAJYXNtIHZvbGF0aWxlKCYjMzQ7cjEgPSAqKHU2NCAqKShyMSAmIzQzOzApOyByMSA9ICoodTMyICopKHIxICYjNDM7MCk7JiMzNDsgOjo6IF9fY2xvYmJlcl9hbGwpOwpAQCAtNzUsMyAmIzQzOzg4LDU4IEBAIGludCB0ZXN0X3Jhd190cF9udWxsX3NjaGVkX3Byb2Nlc3Nfd2FpdF9hcmdfMV9jaGVja2VkKHZvaWQgKmN0eCkKIAkJICAgICAmIzM0O3IxID0gKih1MzIgKikocjEgJiM0MzswKTsmIzM0OyA6OjogX19jbG9iYmVyX2FsbCk7CiAJcmV0dXJuIDA7CiB9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7dHBfYnRmL3NjaGVkX3BpX3NldHByaW8mIzM0OykKJiM0MztfX2ZhaWx1cmUgX19sb2dfbGV2ZWwoMikKJiM0MztfX21zZygmIzM0O1IxPXVudHJ1c3RlZF9wdHJfdGFza19zdHJ1Y3QmIzM0OykKJiM0MztfX21zZygmIzM0O1IxIG11c3QgYmUgYSByY3UgcG9pbnRlciYjMzQ7KQomIzQzO2ludCBCUEZfUFJPRyh0cnVzdGVkX29yX251bGxfd2Fsa19pc191bnRydXN0ZWQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKJiM0MzsJICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBpX3Rhc2spCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudCwgKmFjcXVpcmVkOwomIzQzOwomIzQzOwlwYXJlbnQgPSBwaV90YXNrLSZndDtyZWFsX3BhcmVudDsKJiM0MzsJYWNxdWlyZWQgPSBicGZfdGFza19hY3F1aXJlKHBhcmVudCk7CiYjNDM7CWlmIChhY3F1aXJlZCkKJiM0MzsJCWJwZl90YXNrX3JlbGVhc2UoYWNxdWlyZWQpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7dHBfYnRmL3NjaGVkX3BpX3NldHByaW8mIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtSMSBtdXN0IGJlIGEgcmN1IHBvaW50ZXImIzM0OykKJiM0MztpbnQgQlBGX1BST0coZGVyaXZlZF9wdHJfbnVsbF9jaGVja19kb2VzX25vdF9yZXN0b3JlX3RydXN0LAomIzQzOwkgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHRhc2tfc3RydWN0ICpwaV90YXNrKQomIzQzO3sKJiM0MzsJc3RydWN0IHRhc2tfc3RydWN0ICpwYXJlbnQsICphY3F1aXJlZDsKJiM0MzsKJiM0MzsJcGFyZW50ID0gcGlfdGFzay0mZ3Q7cmVhbF9wYXJlbnQ7CiYjNDM7CWlmICghcGFyZW50KQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWFjcXVpcmVkID0gYnBmX3Rhc2tfYWNxdWlyZShwYXJlbnQpOwomIzQzOwlpZiAoYWNxdWlyZWQpCiYjNDM7CQlicGZfdGFza19yZWxlYXNlKGFjcXVpcmVkKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogSW4gY29udHJhc3QsIGNoZWNraW5nIHRoZSBvcmlnaW5hbCB0cnVzdGVkLW9yLU5VTEwgcG9pbnRlciByZW1vdmVzCiYjNDM7ICogUFRSX01BWUJFX05VTEwgd2hpbGUgcmV0YWluaW5nIFBUUl9UUlVTVEVELgomIzQzOyAqLwomIzQzO1NFQygmIzM0O3RwX2J0Zi9zY2hlZF9waV9zZXRwcmlvJiMzNDspCiYjNDM7X19zdWNjZXNzCiYjNDM7aW50IEJQRl9QUk9HKG9yaWdpbmFsX3B0cl9udWxsX2NoZWNrX3JldGFpbnNfdHJ1c3QsCiYjNDM7CSAgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBpX3Rhc2spCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmFjcXVpcmVkOwomIzQzOwomIzQzOwlpZiAoIXBpX3Rhc2spCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJYWNxdWlyZWQgPSBicGZfdGFza19hY3F1aXJlKHBpX3Rhc2spOwomIzQzOwlpZiAoYWNxdWlyZWQpCiYjNDM7CQlicGZfdGFza19yZWxlYXNlKGFjcXVpcmVkKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdHBfYnRmX251bGxhYmxlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90cF9idGZfbnVsbGFibGUuYwppbmRleCBjZjA1NDdhNjEzZmZjLi5iNzkxNDIyNGJhMTk0IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90cF9idGZfbnVsbGFibGUuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90cF9idGZfbnVsbGFibGUuYwpAQCAtNyw3ICYjNDM7Nyw3IEBACiAjaW5jbHVkZSAmIzM0O2JwZl9taXNjLmgmIzM0OwogCiBTRUMoJiMzNDt0cF9idGYvYnBmX3Rlc3Rtb2RfdGVzdF9udWxsYWJsZV9iYXJlX3RwJiMzNDspCi1fX2ZhaWx1cmUgX19tc2coJiMzNDtSMSBpbnZhbGlkIG1lbSBhY2Nlc3MgJiMzOTt0cnVzdGVkX3B0cl9vcl9udWxsXyYjMzk7JiMzNDspCiYjNDM7X19zdWNjZXNzCiBpbnQgQlBGX1BST0coaGFuZGxlX3RwX2J0Zl9udWxsYWJsZV9iYXJlMSwgc3RydWN0IGJwZl90ZXN0bW9kX3Rlc3RfcmVhZF9jdHggKm51bGxhYmxlX2N0eCkKIHsKIAlyZXR1cm4gbnVsbGFibGVfY3R4LSZndDtsZW47CkBAIC0yMSw0ICYjNDM7MjEsNDcgQEAgaW50IEJQRl9QUk9HKGhhbmRsZV90cF9idGZfbnVsbGFibGVfYmFyZTIsIHN0cnVjdCBicGZfdGVzdG1vZF90ZXN0X3JlYWRfY3R4ICpudWwKIAlyZXR1cm4gMDsKIH0KIAomIzQzO1NFQygmIzM0O3RwX2J0Zi9icGZfdGVzdG1vZF90ZXN0X251bGxhYmxlX2JhcmVfdHAmIzM0OykKJiM0MztfX3N1Y2Nlc3MKJiM0MztpbnQgQlBGX1BST0coaGFuZGxlX3RwX2J0Zl9udWxsYWJsZV9tZW0sIHN0cnVjdCBicGZfdGVzdG1vZF90ZXN0X3JlYWRfY3R4ICpudWxsYWJsZV9jdHgpCiYjNDM7ewomIzQzOwlyZXR1cm4gbnVsbGFibGVfY3R4LSZndDtidWZbMF07CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3RwX2J0Zi9icGZfdGVzdG1vZF90ZXN0X251bGxhYmxlX2JhcmVfdHAmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtwb2ludGVyIGFyaXRobWV0aWMgb24gdHJ1c3RlZF9wdHJfb3JfbnVsbF8gcHJvaGliaXRlZCYjMzQ7KQomIzQzO2ludCBCUEZfUFJPRyhoYW5kbGVfdHBfYnRmX251bGxhYmxlX2FyaXRoLCBzdHJ1Y3QgYnBmX3Rlc3Rtb2RfdGVzdF9yZWFkX2N0eCAqbnVsbGFibGVfY3R4KQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlKCYjMzQ7JVtjdHhdICYjNDM7PSAxJiMzNDsgOiBbY3R4XSAmIzM0OyYjNDM7ciYjMzQ7KG51bGxhYmxlX2N0eCkpOwomIzQzOwlyZXR1cm4gbnVsbGFibGVfY3R4LSZndDtsZW47CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3RwX2J0Zi9icGZfdGVzdG1vZF90ZXN0X251bGxhYmxlX2JhcmVfdHAmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtpbnZhbGlkIG1lbSBhY2Nlc3MgJiMzOTt0cnVzdGVkX3B0cl9vcl9udWxsXyYjMzk7JiMzNDspCiYjNDM7aW50IEJQRl9QUk9HKGhhbmRsZV90cF9idGZfbnVsbGFibGVfYXRvbWljX3JtdywKJiM0MzsJICAgICBzdHJ1Y3QgYnBmX3Rlc3Rtb2RfdGVzdF9yZWFkX2N0eCAqbnVsbGFibGVfY3R4KQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgmIzM0O3IxID0gJVtjdHhdOyYjMzQ7CiYjNDM7CQkgICAgICAmIzM0O3cyID0gMTsmIzM0OwomIzQzOwkJICAgICAgJiMzNDtsb2NrICoodTMyICopKHIxICYjNDM7ICVbbGVuXSkgJiM0Mzs9IHcyOyYjMzQ7CiYjNDM7CQkgICAgICA6CiYjNDM7CQkgICAgICA6IFtjdHhdICYjMzQ7ciYjMzQ7KG51bGxhYmxlX2N0eCksCiYjNDM7CQkJX19pbW1fY29uc3QobGVuLAomIzQzOwkJCQkgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl90ZXN0bW9kX3Rlc3RfcmVhZF9jdHgsCiYjNDM7CQkJCQkgICAgIGxlbikpCiYjNDM7CQkgICAgICA6ICYjMzQ7cjEmIzM0OywgJiMzNDtyMiYjMzQ7LCAmIzM0O21lbW9yeSYjMzQ7KTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOyNpZmRlZiBfX0JQRl9GRUFUVVJFX0xPQURfQUNRX1NUT1JFX1JFTAomIzQzO1NFQygmIzM0O3RwX2J0Zi9icGZfdGVzdG1vZF90ZXN0X251bGxhYmxlX2JhcmVfdHAmIzM0OykKJiM0MztfX2ZhaWx1cmUKJiM0MztfX21zZygmIzM0O0JQRl9BVE9NSUMgbG9hZHMgZnJvbSBSe3tbMC05XSYjNDM7fX0gdHJ1c3RlZF9wdHJfb3JfbnVsbF8mIzM0OykKJiM0MztpbnQgQlBGX1BST0coaGFuZGxlX3RwX2J0Zl9udWxsYWJsZV9sb2FkX2FjcXVpcmUsCiYjNDM7CSAgICAgc3RydWN0IGJwZl90ZXN0bW9kX3Rlc3RfcmVhZF9jdHggKm51bGxhYmxlX2N0eCkKJiM0Mzt7CiYjNDM7CXJldHVybiBfX2F0b21pY19sb2FkX24oJmFtcDtudWxsYWJsZV9jdHgtJmd0O2xlbiwgX19BVE9NSUNfQUNRVUlSRSk7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwogY2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdHBfYnRmX251bGxhYmxlX3J1bnRpbWUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RwX2J0Zl9udWxsYWJsZV9ydW50aW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uNWM5YzdmOTQwNDBkYwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RwX2J0Zl9udWxsYWJsZV9ydW50aW1lLmMKQEAgLTAsMCAmIzQzOzEsMzUgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7dm1saW51eC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfdHJhY2luZy5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7Li4vdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5oJiMzNDsKJiM0MzsKJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CiYjNDM7CiYjNDM7aW50IG1vbml0b3JlZF90aWQ7CiYjNDM7aW50IGNhbGxzOwomIzQzO19fdTY0IG5vbm51bGxfbGVuOwomIzQzO19fdTY0IG51bGxfbGVuOwomIzQzOwomIzQzO1NFQygmIzM0O3RwX2J0Zi9icGZfdGVzdG1vZF90ZXN0X251bGxhYmxlX2JhcmVfdHAmIzM0OykKJiM0MztpbnQgQlBGX1BST0coaGFuZGxlX251bGxhYmxlX3J1bnRpbWUsCiYjNDM7CSAgICAgc3RydWN0IGJwZl90ZXN0bW9kX3Rlc3RfcmVhZF9jdHggKm51bGxhYmxlX2N0eCkKJiM0Mzt7CiYjNDM7CV9fdTMyIHRpZCA9IGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpOwomIzQzOwlfX3U2NCBsZW47CiYjNDM7CWludCBjYWxsOwomIzQzOwomIzQzOwlpZiAodGlkICE9IG1vbml0b3JlZF90aWQpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJbGVuID0gbnVsbGFibGVfY3R4LSZndDtsZW47CiYjNDM7CWNhbGwgPSBjYWxscyYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CWlmIChjYWxsID09IDApCiYjNDM7CQlub25udWxsX2xlbiA9IGxlbjsKJiM0MzsJZWxzZSBpZiAoY2FsbCA9PSAxKQomIzQzOwkJbnVsbF9sZW4gPSBsZW47CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sc20uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sc20uYwppbmRleCBjNzI0YmYzODlmNWM2Li5mYWMxMzNkOTBmNWU2IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbHNtLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xzbS5jCkBAIC0xNjIsMTMgJiM0MzsxNjIsMTMgQEAgX19uYWtlZCBpbnQgZGlzYWJsZWRfaG9va190ZXN0Myh2b2lkICpjdHgpCiAKIFNFQygmIzM0O2xzbS9tbWFwX2ZpbGUmIzM0OykKIF9fZGVzY3JpcHRpb24oJiMzNDtub3QgbnVsbCBjaGVja2luZyBudWxsYWJsZSBwb2ludGVyIGluIGJwZl9sc21fbW1hcF9maWxlJiMzNDspCi1fX2ZhaWx1cmUgX19tc2coJiMzNDtSMSBpbnZhbGlkIG1lbSBhY2Nlc3MgJiMzOTt0cnVzdGVkX3B0cl9vcl9udWxsXyYjMzk7JiMzNDspCiYjNDM7X19zdWNjZXNzCiBpbnQgQlBGX1BST0cobm9fbnVsbF9jaGVjaywgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0Jc3RydWN0IGlub2RlICppbm9kZTsKJiM0MzsJaW5vX3QgaW5vOwogCi0JaW5vZGUgPSBmaWxlLSZndDtmX2lub2RlOwotCV9fc2luayhpbm9kZSk7CiYjNDM7CWlubyA9IGZpbGUtJmd0O2ZfaW5vZGUtJmd0O2lfaW5vOwomIzQzOwlfX3NpbmsoaW5vKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTg4LDYgJiM0MzsxODgsMTYgQEAgaW50IEJQRl9QUk9HKG51bGxfY2hlY2ssIHN0cnVjdCBmaWxlICpmaWxlKQogCXJldHVybiAwOwogfQogCiYjNDM7U0VDKCYjMzQ7bHNtL21tYXBfZmlsZSYjMzQ7KQomIzQzO19fZGVzY3JpcHRpb24oJiMzNDtzdG9yZSB0aHJvdWdoIHRydXN0ZWQtb3ItbnVsbCBmaWxlIGlzIHJlamVjdGVkJiMzNDspCiYjNDM7X19mYWlsdXJlCiYjNDM7X19tc2coJiMzNDtSe3tbMC05XSYjNDM7fX0gaW52YWxpZCBtZW0gYWNjZXNzICYjMzk7dHJ1c3RlZF9wdHJfb3JfbnVsbF8mIzM5OyYjMzQ7KQomIzQzO2ludCBCUEZfUFJPRyhzdG9yZV90aHJvdWdoX3RydXN0ZWRfb3JfbnVsbF9maWxlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKJiM0Mzt7CiYjNDM7CWZpbGUtJmd0O2ZfZmxhZ3MgPSAwOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBTRUMoJiMzNDtsc21fY2dyb3VwL2ZpbGVfb3BlbiYjMzQ7KQogX19kZXNjcmlwdGlvbigmIzM0O3NsZWVwYWJsZSBsc21fY2dyb3VwIHByb2dyYW0gaXMgcmVqZWN0ZWQmIzM0OykKIF9fZmFpbHVyZSBfX21zZygmIzM0O1Byb2dyYW0gb2YgdGhpcyB0eXBlIGNhbm5vdCBiZSBzbGVlcGFibGUmIzM0OykKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl92ZnNfYWNjZXB0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdmZzX2FjY2VwdC5jCmluZGV4IDU1Mzk4YzA0MjkwYTguLjE3YzE1NDJjYzdlMTcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl92ZnNfYWNjZXB0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3Zmc19hY2NlcHQuYwpAQCAtMTAwLDQgJiM0MzsxMDAsMTggQEAgaW50IEJQRl9QUk9HKGlub2RlX3JlbmFtZSwgc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LAogCXJldHVybiAwOwogfQogCiYjNDM7U0VDKCYjMzQ7bHNtLnMvaW5vZGVfcmVuYW1lJiMzNDspCiYjNDM7X19zdWNjZXNzIF9fbG9nX2xldmVsKDIpCiYjNDM7X19tc2coJiMzNDtSe3tbMC05XSYjNDM7fX09dHJ1c3RlZF9wdHJfb3JfbnVsbF9pbm9kZSYjMzQ7KQomIzQzO2ludCBCUEZfUFJPRyhpbm9kZV9yZW5hbWVfbm9fbnVsbF9jaGVjaywgc3RydWN0IGlub2RlICpvbGRfZGlyLAomIzQzOwkgICAgIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqbmV3X2RpciwKJiM0MzsJICAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5LCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiYjNDM7ewomIzQzOwlpbm9fdCBpbm8gPSBuZXdfZGVudHJ5LSZndDtkX2lub2RlLSZndDtpX2lubzsKJiM0MzsKJiM0MzsJaWYgKGlubyA9PSAwKQomIzQzOwkJcmV0dXJuIC1FQUNDRVM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIGNoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl92ZnNfcmVqZWN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdmZzX3JlamVjdC5jCmluZGV4IDhmMGM0NTQyMWY4OTMuLjJhMDgxMzI1ODE4M2UgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl92ZnNfcmVqZWN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3Zmc19yZWplY3QuYwpAQCAtMTU5LDE4ICYjNDM7MTU5LDQgQEAgaW50IEJQRl9QUk9HKHBhdGhfZF9wYXRoX2tmdW5jX25vbl9sc20sIHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3QgZmlsZSAqZikKIAlyZXR1cm4gMDsKIH0KIAotU0VDKCYjMzQ7bHNtLnMvaW5vZGVfcmVuYW1lJiMzNDspCi1fX2ZhaWx1cmUgX19tc2coJiMzNDtpbnZhbGlkIG1lbSBhY2Nlc3MgJiMzOTt0cnVzdGVkX3B0cl9vcl9udWxsXyYjMzk7JiMzNDspCi1pbnQgQlBGX1BST0coaW5vZGVfcmVuYW1lLCBzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCi0JICAgICBzdHJ1Y3QgaW5vZGUgKm5ld19kaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnksCi0JICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpCi17Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IG5ld19kZW50cnktJmd0O2RfaW5vZGU7Ci0JaW5vX3QgaW5vOwotCi0JaW5vID0gaW5vZGUtJmd0O2lfaW5vOwotCWlmIChpbm8gPT0gMCkKLQkJcmV0dXJuIC1FQUNDRVM7Ci0JcmV0dXJuIDA7Ci19CiBjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYwppbmRleCBmNzk4YmJiYjRkMTNjLi4yYmE2YTgzZDI0M2Y1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMKQEAgLTcwMiw2ICYjNDM7NzAyLDcgQEAgYnBmX3Rlc3Rtb2RfdGVzdF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qga29iamVjdCAqa29iaiwKIAlpZiAoYnBmX3Rlc3Rtb2RfbG9vcF90ZXN0KDEwMSkgJmd0OyAxMDApCiAJCXRyYWNlX2JwZl90ZXN0bW9kX3Rlc3RfcmVhZChjdXJyZW50LCAmYW1wO2N0eCk7CiAKJiM0MzsJdHJhY2VfYnBmX3Rlc3Rtb2RfdGVzdF9udWxsYWJsZV9iYXJlX3RwKCZhbXA7Y3R4KTsKIAl0cmFjZV9icGZfdGVzdG1vZF90ZXN0X251bGxhYmxlX2JhcmVfdHAoTlVMTCk7CiAKIAkvKiBNYWdpYyBudW1iZXIgdG8gZW5hYmxlIHdyaXRhYmxlIHRwICovCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zY2hlZF9leHQvbWF5YmVfbnVsbF9mYWlsX2RzcC5icGYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NjaGVkX2V4dC9tYXliZV9udWxsX2ZhaWxfZHNwLmJwZi5jCmluZGV4IGVjNzI0ZDdiMzNkMTguLmVjYWEzNjM1NWNhZWMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NjaGVkX2V4dC9tYXliZV9udWxsX2ZhaWxfZHNwLmJwZi5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NjaGVkX2V4dC9tYXliZV9udWxsX2ZhaWxfZHNwLmJwZi5jCkBAIC03LDE0ICYjNDM7NywxMyBAQAogCiBjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CiAKLXU2NCB2dGltZV90ZXN0OwotCiB2b2lkIEJQRl9TVFJVQ1RfT1BTKG1heWJlX251bGxfcnVubmluZywgc3RydWN0IHRhc2tfc3RydWN0ICpwKQoge30KIAogdm9pZCBCUEZfU1RSVUNUX09QUyhtYXliZV9udWxsX2ZhaWxfZGlzcGF0Y2gsIHMzMiBjcHUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKLQl2dGltZV90ZXN0ID0gcC0mZ3Q7c2N4LmRzcV92dGltZTsKJiM0MzsJLyogUG9pbnRlciBhcml0aG1ldGljIG9uIGEgdHJ1c3RlZC1vci1OVUxMIHBvaW50ZXIgbXVzdCBiZSByZWplY3RlZC4gKi8KJiM0MzsJYXNtIHZvbGF0aWxlKCYjMzQ7JVtwXSAmIzQzOz0gMCYjMzQ7IDogW3BdICYjMzQ7JiM0MztyJiMzNDsocCkpOwogfQogCiBTRUMoJiMzNDsuc3RydWN0X29wcy5saW5rJiMzNDspCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3OTk0CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTEzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgUGF0Y2ggZm9yIFN5emthbGxlciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoICpkb2VzKiB3YXJyYW50IGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiBmb3IgZnV6emluZyBwb3RlbnRpYWwgd2l0aCBzeXprYWxsZXIuIFRoZSBjb2RlIHRvdWNoZXMgc2V2ZXJhbCBrZXkgYXJlYXMgb2YgdGhlIGtlcm5lbCwgYW5kIHRoZSBjaGFuZ2VzIGFyZSBzaWduaWZpY2FudCBlbm91Z2ggdG8gd2FycmFudCBhIGZvY3VzZWQgYXBwcm9hY2guCgpGaXJzdCwgSSBzZWUgbW9kaWZpY2F0aW9ucyBpbiBgZnMvZXhlYy5jYCwgc3BlY2lmaWNhbGx5IGBmcmVlX2Jwcm1gLiBXaGlsZSBpdCBsb29rcyBsaWtlIGEgc21hbGwgY2hhbmdlLCBzZXR0aW5nIGBicHJtLSZndDttbSA9IE5VTExgIGJlZm9yZSBgbW1wdXQobW0pYCBjb3VsZCBwb3RlbnRpYWxseSBpbnRyb2R1Y2Ugc3VidGxlIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyB0aGF0IGZ1enppbmcgY291bGQgdW5jb3Zlci4KClRoZW4sIHRoZSBzZWNvbmQgc2VjdGlvbiwgZW5jb21wYXNzaW5nIGBpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oYCBhbmQgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIGlzIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZy4gVGhlIGludHJvZHVjdGlvbiBvZiBgYnBmX2lzX3RydXN0ZWRfb3JfbnVsbF9idGZfcHRyYCBhbmQgdGhlIHJlbGF0ZWQgbW9kaWZpY2F0aW9ucyB0byBgYnBmX21heV9mYXVsdF9vbl9kZXJlZmAgd2l0aGluIHRoZSBCUEYgdmVyaWZpZXIgYXJlIGhpZ2gtdmFsdWUgdGFyZ2V0cy4gVGhpcyBpbmRpY2F0ZXMgbmV3IGxvZ2ljIGZvciBoYW5kbGluZyBwb3RlbnRpYWxseSB1bnRydXN0ZWQgcG9pbnRlcnMsIHdoaWNoIGlzIGEgcHJpbWUgYXJlYSBmb3IgZnV6emluZy4gVGhlIGNoYW5nZXMgYXJvdW5kIGBCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTGAgYW5kIHRoZSBhbHRlcmF0aW9ucyBpbiBgY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3NgIGFuZCBgY2hlY2tfbWVtX2FjY2Vzc2AgcG9pbnQgdG8gcG90ZW50aWFsIG5ldyBCUEYgZmVhdHVyZXMgYW5kIHZ1bG5lcmFiaWxpdGllcy4KClRoZSBhZGRpdGlvbiBvZiBuZXcga2Z1bmNzIGxpa2UgYGJwZl9jb3B5X2Zyb21fdXNlcl9tbWAsIGBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyYCwgYW5kIHRoZSByZWZhY3RvcmluZyBvZiBleGlzdGluZyBmdW5jdGlvbnMgdG8gdXNlIHRoZW0gKGBicGZfY29weV9mcm9tX3VzZXJfdGFza2AsIGBicGZfY29weV9mcm9tX3VzZXJfdGFza19zdHJgKSBhcmUgYWxzbyBub3Rld29ydGh5LiBUaGUgZmFjdCB0aGF0IHRoZXNlIGtmdW5jcyBhcmUgcmVnaXN0ZXJlZCBhcyBgS0ZfU0xFRVBBQkxFYCBzdWdnZXN0cyBhIGxpa2VseSBuZXcgc2V0IG9mIGZlYXR1cmVzIG9yIGVuaGFuY2VtZW50cyBmb3IgYnBmIHByb2dyYW1zLiBUaGUgY2hhbmdlcyB0byBob3cgZGF0YSBpcyBjb3BpZWQgZnJvbSB1c2VyIHNwYWNlICp0aHJvdWdoKiB0aGUgbW0gbGF5ZXIsIGFuZCB0aGUgcG90ZW50aWFsIGZvciByYWNlcyBpbnRyb2R1Y2VkIGJ5IHRoZSB1c2Ugb2Ygc2xlZXBhYmxlIGtmdW5jcywgaXMgc2lnbmlmaWNhbnQgZm9yIHNlY3VyaXR5LgoKVGhlIGNoYW5nZXMgaW4gYG1tL2ludGVybmFsLmhgLCBgbW0vbWVtb3J5LmNgLCBgbW0vbm9tbXUuY2AsIGFuZCBgbW0vdXRpbC5jYCBhcmUgYWxzbyBpbXBvcnRhbnQuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYGNvcHlfcmVtb3RlX21tX3N0cmAgKHByZXZpb3VzbHkgYF9fY29weV9yZW1vdGVfdm1fc3RyYCkgYW5kIGl0cyBpbnRlcmFjdGlvbnMgd2l0aCBgZ2V0X3Rhc2tfbW0odHNrKWAgaW5kaWNhdGUgbW9kaWZpY2F0aW9ucyByZWxhdGVkIHRvIHJlbW90ZSBtZW1vcnkgbWFuaXB1bGF0aW9uLiBUaGlzIGNvdWxkIGhhdmUgaW1wbGljYXRpb25zIGZvciBtZW1vcnkgY29ycnVwdGlvbiwgcmFjZXMsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MuCgpUaGUgZXhpc3RlbmNlIG9mIHRlc3RzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy8uLi5gIGFkZHMgZnVydGhlciB3ZWlnaHQgdG8gdGhlIGlkZWEgdGhhdCB0aGlzIGlzIHNpZ25pZmljYW50IGNvZGUuIFRoZSB0ZXN0cyBtYXkgbm90IGJlIGV4aGF1c3RpdmUsIHNvIGEgY2FyZWZ1bGx5IGNyYWZ0ZWQgZnV6emluZyBjYW1wYWlnbiBpcyB3b3J0aHdoaWxlLgoKVGhlIGZhY3QgdGhhdCBhbGwgdGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBRRU1VL2FtZDY0IHNldHVwcywgdmlhIHRoZSBCUEYgc3lzY2FsbCAoZUJQRiBwcm9ncmFtcywgTFNNIGhvb2tzLCB0cmFjZXBvaW50cywgc3lzY2FsbHMsIGV0Yy4pIGFuZCBgZXhlY3ZlYCwgaXMgdGhlIGtleSBmYWN0b3IuIFRoZSBjb3JlIEJQRiB2ZXJpZmllciwgdGhlIEJQRiBoZWxwZXJzL2tmdW5jcywgdGhlIG1tIGZ1bmN0aW9ucywgYW5kIGV2ZW4gYGZyZWVfYnBybWAgYXJlIGFsbCB3aXRoaW4gdGhlIGF0dGFjayBzdXJmYWNlLgoKQmFzZWQgb24gdGhlIGNyaXRlcmlhIGZvciAmIzM0O1dvcnRoRnV6emluZz10cnVlLCYjMzQ7IHRoaXMgcGF0Y2ggZGVmaW5pdGVseSBtZWV0cyB0aGUgcmVxdWlyZW1lbnRzLiBJdCB0b3VjaGVzIGNvcmUgc3Vic3lzdGVtcyAoQlBGLCBtbSksIGluY2x1ZGVzIHJlZmFjdG9yaW5ncywgYW5kIGludHJvZHVjZXMgbmV3IGxvZ2ljIHdpdGhpbiByZWFjaGFibGUgY29kZSBwYXRocy4KCk5vdywgSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgS2NvbmZpZyBvcHRpb25zLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGZvciBCUEYgc3lzY2FsbCwgdGhlIEJQRiB2ZXJpZmllciwgdGhlIG5ldyBrZnVuY3MsIGFuZCBldmVyeXRoaW5nIGVsc2UgaW4gdGhpcyBwYXRjaC4gSSYjMzk7bGwgbmVlZCB0byB1c2UgZ3JlcHBlciBvciBzb3VyY2UgaW5zcGVjdGlvbiB0byBkZXRlcm1pbmUgYWxsIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zLiBUaGVuIEkmIzM5O2xsIGlkZW50aWZ5IHRoZSBjcml0aWNhbCBmb2N1cyBzeW1ib2xzIHRvIGZlZWQgc3l6a2FsbGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfU1lTQ0FMTCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9Mjk9bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWctMzAtXG5rZXJuZWwvYnBmL0tjb25maWc6MzE6Y29uZmlnIEJQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL0tjb25maWctMzItXHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMDE3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIEJQRl9TWVNDQUxMIERlcGVuZGVuY2llcyBpbiBLY29uZmlnKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMzEuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgY29uZGl0aW9uYWwgbG9naWMgYW5kIGRlcGVuZGVuY2llcyBmb3IgdGhlIGBCUEZfU1lTQ0FMTGAgb3B0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IG90aGVyIEtjb25maWcgc3ltYm9scywgYW5kIHRodXMgY29uZmlndXJhdGlvbnMsIG11c3QgYmUgZW5hYmxlZCBmb3IgQlBGIHN5c2NhbGwgc3VwcG9ydCB0byBiZSBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYWJvdXQgdGhlIGRpcmVjdCBkZXBlbmRlbmNpZXMsIGJ1dCBhbHNvIHRoZSBpbmRpcmVjdGx5IGltcGxpZWQgb25lcy4gSSYjMzk7bSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGluZ3MgbGlrZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgcmVxdWlyZW1lbnRzIChsaWtlIHdoZXRoZXIgdGhlIGFyY2hpdGVjdHVyZSBwcm92aWRlcyB0aGUgbmVlZGVkIGluZnJhc3RydWN0dXJlKSwgc2VjdXJpdHkgZmVhdHVyZXMsIG9yIGV2ZW4gb3RoZXIgQlBGLXJlbGF0ZWQgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBiZSBhIHByZXJlcXVpc2l0ZS4gS25vd2luZyB0aGlzIGlzIGNydWNpYWwgZm9yIGRlYnVnZ2luZyBidWlsZCBwcm9ibGVtcywgdGFpbG9yaW5nIGEgY3VzdG9tIGtlcm5lbCBjb25maWd1cmF0aW9uLCBvciBldmVuIHByZWRpY3RpbmcgcG90ZW50aWFsIGNvbXBhdGliaWxpdHkgaXNzdWVzLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMgbGlua2luZyB0aGlzIHN5bWJvbCB0byBzcGVjaWZpYyBoYXJkd2FyZSBmZWF0dXJlcyBvciBvdGhlciBtb2R1bGVzLiBUaW1lIHRvIGNvbmZpcm0gYW5kIHJlZmluZSBteSBtZW50YWwgbW9kZWwgb2Ygd2hhdCBuZWVkcyB0byBiZSBpbiBwbGFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzA6XHRcbiAgMzE6XHRjb25maWcgQlBGX1NZU0NBTExcbiAgMzI6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4gIDMzOlx0XHRzZWxlY3QgQlBGXG4gIDM0Olx0XHRzZWxlY3QgSVJRX1dPUktcbiAgMzU6XHRcdHNlbGVjdCBORUVEX1RBU0tTX1JDVVxuICAzNjpcdFx0c2VsZWN0IFRBU0tTX1RSQUNFX1JDVVxuICAzNzpcdFx0c2VsZWN0IEJJTkFSWV9QUklOVEZcbiAgMzg6XHRcdHNlbGVjdCBORVRfU09DS19NU0cgaWYgTkVUXG4gIDM5Olx0XHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcbiAgNDA6XHRcdHNlbGVjdCBQQUdFX1BPT0wgaWYgTkVUXG4gIDQxOlx0XHRkZWZhdWx0IG5cbiAgNDI6XHRcdGhlbHBcbiAgNDM6XHRcdCAgRW5hYmxlIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCB0aGF0IGFsbG93cyB0byBtYW5pcHVsYXRlIEJQRiBwcm9ncmFtc1xuICA0NDpcdFx0ICBhbmQgbWFwcyB2aWEgZmlsZSBkZXNjcmlwdG9ycy5cbiAgNDU6XHRcbiAgNDY6XHRjb25maWcgQlBGX0pJVFxuICA0NzpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclwmIzM0O1xuICA0ODpcdFx0ZGVwZW5kcyBvbiBCUEZcbiAgNDk6XHRcdGRlcGVuZHMgb24gSEFWRV9DQlBGX0pJVCB8fCBIQVZFX0VCUEZfSklUXG4gIDUwOlx0XHRzZWxlY3QgRVhFQ01FTVxuICA1MTpcdFx0aGVscFxuICA1MjpcdFx0ICBCUEYgcHJvZ3JhbXMgYXJlIG5vcm1hbGx5IGhhbmRsZWQgYnkgYSBCUEYgaW50ZXJwcmV0ZXIuIFRoaXMgb3B0aW9uXG4gIDUzOlx0XHQgIGFsbG93cyB0aGUga2VybmVsIHRvIGdlbmVyYXRlIG5hdGl2ZSBjb2RlIHdoZW4gYSBwcm9ncmFtIGlzIGxvYWRlZFxuICA1NDpcdFx0ICBpbnRvIHRoZSBrZXJuZWwuIFRoaXMgd2lsbCBzaWduaWZpY2FudGx5IHNwZWVkLXVwIHByb2Nlc3Npbmcgb2YgQlBGXG4gIDU1Olx0XHQgIHByb2dyYW1zLlxuICA1NjpcdFxuICA1NzpcdFx0ICBOb3RlLCBhbiBhZG1pbiBzaG91bGQgZW5hYmxlIHRoaXMgZmVhdHVyZSBjaGFuZ2luZzpcbiAgNTg6XHRcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfZW5hYmxlXG4gIDU5Olx0XHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2hhcmRlbiAgIChvcHRpb25hbClcbiAgNjA6XHRcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfa2FsbHN5bXMgKG9wdGlvbmFsKVxuICA2MTpcdFxuICA2MjpcdGNvbmZpZyBCUEZfSklUX0FMV0FZU19PTlxuICA2MzpcdFx0Ym9vbCBcJiMzNDtQZXJtYW5lbnRseSBlbmFibGUgQlBGIEpJVCBhbmQgcmVtb3ZlIEJQRiBpbnRlcnByZXRlclwmIzM0O1xuICA2NDpcdFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTCBcdTAwMjZcdTAwMjYgSEFWRV9FQlBGX0pJVCBcdTAwMjZcdTAwMjYgQlBGX0pJVFxuICA2NTpcdFx0aGVscFxuICA2NjpcdFx0ICBFbmFibGVzIEJQRiBKSVQgYW5kIHJlbW92ZXMgQlBGIGludGVycHJldGVyIHRvIGF2b2lkIHNwZWN1bGF0aXZlXG4gIDY3Olx0XHQgIGV4ZWN1dGlvbiBvZiBCUEYgaW5zdHJ1Y3Rpb25zIGJ5IHRoZSBpbnRlcnByZXRlci5cbiAgNjg6XHRcbiAgNjk6XHRcdCAgV2hlbiBDT05GSUdfQlBGX0pJVF9BTFdBWVNfT04gaXMgZW5hYmxlZCwgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfZW5hYmxlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA5MjgKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEZWJ1Z2dpbmcgQlRGIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgZ2l2ZW4gdGhhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGJvdGggQlRGLCBhbmQgdGhlIHBvdGVudGlhbCBmb3Iga2Z1bmNzIGFuZC9vciB0cnVzdGVkIHBvaW50ZXJzLCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGhvdyBgREVCVUdfSU5GT19CVEZgIGlzIGNvbmZpZ3VyZWQuIFdlJiMzOTtyZSBvYnZpb3VzbHkgcmVseWluZyBvbiBCVEYgZGF0YSBmb3Igc29tZSBjcml0aWNhbCBmdW5jdGlvbmFsaXR5IGhlcmUsIHdoZXRoZXIgaXQmIzM5O3Mgc3ltYm9sIHJlc29sdXRpb24sIHR5cGUgaW5mb3JtYXRpb24sIG9yIHBvdGVudGlhbGx5IHZhbGlkYXRpb24gcmVsYXRlZCB0byB0aGVzZSBtb3JlIGFkdmFuY2VkIGZlYXR1cmVzLiBTbywgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyB2ZXJpZnkgdGhlIHN0YXRlIG9mIEJURi4gRXNzZW50aWFsbHksIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7TGV0JiMzOTtzIGNoZWNrIGBERUJVR19JTkZPX0JURmAgYW5kIHZlcmlmeSBpdHMgY3VycmVudCBjb25maWd1cmF0aW9uIGZvciB0aGVzZSBCVEYgZGVwZW5kZW5jaWVzLiYjMzQ7IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYXNwZWN0cyBvZiBCVEYgYXJlIGFjdGl2ZSBhbmQgYXZhaWxhYmxlLiBUaGlzIGlzIGNydWNpYWwgZm9yIHZlcmlmeWluZyB0aGF0IHRoZSBleHBlY3RlZCBtZXRhZGF0YSBpcyBwcmVzZW50IGFuZCBmdW5jdGlvbmluZyBhcyBpbnRlbmRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgREVCVUdfSU5GT19CVEYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bGliL0tjb25maWcuZGVidWc9Mzc4PWNvbmZpZyBERUJVR19JTkZPX1NQTElUXG4tLVxubGliL0tjb25maWcuZGVidWctMzk3LVxubGliL0tjb25maWcuZGVidWc6Mzk4OmNvbmZpZyBERUJVR19JTkZPX0JURlxubGliL0tjb25maWcuZGVidWctMzk5LVx0Ym9vbCBcJiMzNDtHZW5lcmF0ZSBCVEYgdHlwZSBpbmZvcm1hdGlvblwmIzM0O1xuLS1cbmxpYi9LY29uZmlnLmRlYnVnPTQxOT1jb25maWcgUEFIT0xFX0hBU19MQU5HX0VYQ0xVREVcbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zy00MjctXG5saWIvS2NvbmZpZy5kZWJ1Zzo0Mjg6Y29uZmlnIERFQlVHX0lORk9fQlRGX01PRFVMRVNcbmxpYi9LY29uZmlnLmRlYnVnLTQyOS1cdGJvb2wgXCYjMzQ7R2VuZXJhdGUgQlRGIHR5cGUgaW5mb3JtYXRpb24gZm9yIGtlcm5lbCBtb2R1bGVzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEzMzcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWJ1Z2dpbmcgdGhlIERlYnVnZ2luZyBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBuaXR0eS1ncml0dHkuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgZGVidWdnaW5nIGNvbmZpZ3VyYXRpb24sIHNvIEkmIzM5O20gaGVhZGluZyBzdHJhaWdodCBmb3IgYGxpYi9LY29uZmlnLmRlYnVnYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIEkgbmVlZCB0byB6ZXJvIGluIG9uIGxpbmUgMzk4LiBUaGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlIG1lYXQgb2YgYSBzcGVjaWZpYyBkZWJ1Z2dpbmcgc2V0dGluZywgb3IgYSByZWxhdGVkIGdyb3VwaW5nLCB0ZW5kcyB0byBiZS4gSSYjMzk7dmUgZ290IGEgZmVlbGluZyB0aGUgc29sdXRpb24gSSYjMzk7bSBzZWVraW5nIGlzIGdvaW5nIHRvIGJlIG5lYXJieS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bGliL0tjb25maWcuZGVidWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzOTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM5NTpcdFx0ICB0byBrbm93IGFib3V0IHRoZSAuZHdvIGZpbGVzIGFuZCBpbmNsdWRlIHRoZW0uXG4gMzk2Olx0XHQgIEluY29tcGF0aWJsZSB3aXRoIG9sZGVyIHZlcnNpb25zIG9mIGNjYWNoZS5cbiAzOTc6XHRcbiAzOTg6XHRjb25maWcgREVCVUdfSU5GT19CVEZcbiAzOTk6XHRcdGJvb2wgXCYjMzQ7R2VuZXJhdGUgQlRGIHR5cGUgaW5mb3JtYXRpb25cJiMzNDtcbiA0MDA6XHRcdGRlcGVuZHMgb24gIURFQlVHX0lORk9fU1BMSVQgXHUwMDI2XHUwMDI2ICFERUJVR19JTkZPX1JFRFVDRURcbiA0MDE6XHRcdGRlcGVuZHMgb24gIUdDQ19QTFVHSU5fUkFORFNUUlVDVCB8fCBDT01QSUxFX1RFU1RcbiA0MDI6XHRcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcbiA0MDM6XHRcdGRlcGVuZHMgb24gUEFIT0xFX1ZFUlNJT04gXHUwMDNlPSAxMjJcbiA0MDQ6XHRcdCMgcGFob2xlIHVzZXMgZWxmdXRpbHMsIHdoaWNoIGRvZXMgbm90IGhhdmUgc3VwcG9ydCBmb3IgSGV4YWdvbiByZWxvY2F0aW9uc1xuIDQwNTpcdFx0ZGVwZW5kcyBvbiAhSEVYQUdPTlxuIDQwNjpcdFx0aGVscFxuIDQwNzpcdFx0ICBHZW5lcmF0ZSBkZWR1cGxpY2F0ZWQgQlRGIHR5cGUgaW5mb3JtYXRpb24gZnJvbSBEV0FSRiBkZWJ1ZyBpbmZvLlxuIDQwODpcdFx0ICBUdXJuaW5nIHRoaXMgb24gcmVxdWlyZXMgcGFob2xlIHYxLjIyIG9yIGxhdGVyLCB3aGljaCB3aWxsIGNvbnZlcnRcbiA0MDk6XHRcdCAgRFdBUkYgdHlwZSBpbmZvIGludG8gZXF1aXZhbGVudCBkZWR1cGxpY2F0ZWQgQlRGIHR5cGUgaW5mby5cbiA0MTA6XHRcbiA0MTE6XHRjb25maWcgUEFIT0xFX0hBU19CVEZfVEFHXG4gNDEyOlx0XHRkZWZfYm9vbCBQQUhPTEVfVkVSU0lPTiBcdTAwM2U9IDEyM1xuIDQxMzpcdFx0ZGVwZW5kcyBvbiBDQ19JU19DTEFOR1xuIDQxNDpcdFx0aGVscFxuIDQxNTpcdFx0ICBEZWNpZGUgd2hldGhlciBwYWhvbGUgZW1pdHMgYnRmX3RhZyBhdHRyaWJ1dGVzIChidGZfdHlwZV90YWcgYW5kXG4gNDE2Olx0XHQgIGJ0Zl9kZWNsX3RhZykgb3Igbm90LiBDdXJyZW50bHkgb25seSBjbGFuZyBjb21waWxlciBpbXBsZW1lbnRzXG4gNDE3Olx0XHQgIHRoZXNlIGF0dHJpYnV0ZXMsIHNvIG1ha2UgdGhlIGNvbmZpZyBkZXBlbmQgb24gQ0NfSVNfQ0xBTkcuXG4gNDE4Olx0XG4gNDE5Olx0Y29uZmlnIFBBSE9MRV9IQVNfTEFOR19FWENMVURFXG4gNDIwOlx0XHRkZWZfYm9vbCBQQUhPTEVfVkVSU0lPTiBcdTAwM2U9IDEyNFxuIDQyMTpcdFx0aGVscFxuIDQyMjpcdFx0ICBTdXBwb3J0IGZvciB0aGUgLS1sYW5nX2V4Y2x1ZGUgZmxhZyB3aGljaCBtYWtlcyBwYWhvbGUgZXhjbHVkZVxuIDQyMzpcdFx0ICBjb21waWxhdGlvbiB1bml0cyBmcm9tIHRoZSBzdXBwbGllZCBsYW5ndWFnZS4gVXNlZCBpbiBLYnVpbGQgdG9cbiA0MjQ6XHRcdCAgb21pdCBSdXN0IENVcyB3aGljaCBhcmUgbm90IHN1cHBvcnRlZCBpbiB2ZXJzaW9uIDEuMjQgb2YgcGFob2xlLFxuIDQyNTpcdFx0ICBvdGhlcndpc2UgaXQgd291bGQgZW1pdCBtYWxmb3JtZWQga2VybmVsIGFuZCBtb2R1bGUgYmluYXJpZXMgd2hlblxuIDQyNjpcdFx0ICB1c2luZyBERUJVR19JTkZPX0JURl9NT0RVTEVTLlxuIDQyNzpcdFxuIDQyODpcdGNvbmZpZyBERUJVR19JTkZPX0JURl9NT0RVTEVTXG4gNDI5Olx0XHRib29sIFwmIzM0O0dlbmVyYXRlIEJURiB0eXBlIGluZm9ybWF0aW9uIGZvciBrZXJuZWwgbW9kdWxlc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjEyNAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqQ2hlY2tpbmcgQlBGIGFuZCBMU00gQ29uZmlndXJhdGlvbnMqKgoKQWxyaWdodCwgYmVmb3JlIGRpdmluZyB0b28gZGVlcCwgSSBuZWVkIHRvIHRha2UgYSBzdGVwIGJhY2sgYW5kIGV4YW1pbmUgdGhlIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgY2hlY2sgdGhlIHJlbGV2YW50IExTTSBjb25maWdzLCBhbmQgcG90ZW50aWFsbHkgYW55IEJQRiBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGJlIGluZmx1ZW5jaW5nIGJlaGF2aW9yLiBJIGhhdmUgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG92ZXJsb29rIGFueSBkZXRhaWxzLiBCUEZfTFNNIGlzIHRoZSBmaXJzdCB0aGluZyB0aGF0IGNvbWVzIHRvIG1pbmQuIEdpdmVuIHRoZSBmb2N1cyBvZiB0aGlzIGlzc3VlLCBgQlBGX0xTTWAgZmVlbHMgbGlrZSBhIGxpa2VseSBzdXNwZWN0LCBzbyBJIHNob3VsZCBpbnZlc3RpZ2F0ZSB0aGF0IGZpcnN0LiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayBob3cgaXQmIzM5O3Mgc2V0IHVwIGFuZCBpZiB0aGVyZSBhcmUgYW55IGNvbmZsaWN0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9MU00mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTk0PXNvdXJjZSBcJiMzNDtrZXJuZWwvYnBmL3ByZWxvYWQvS2NvbmZpZ1wmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTk1LVxua2VybmVsL2JwZi9LY29uZmlnOjk2OmNvbmZpZyBCUEZfTFNNXG5rZXJuZWwvYnBmL0tjb25maWctOTctXHRib29sIFwmIzM0O0VuYWJsZSBCUEYgTFNNIEluc3RydW1lbnRhdGlvblwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjQxNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRXhhbWluaW5nIEtlcm5lbCBCUEYgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRvIGdldCBhIGhhbmRsZSBvbiB0aGlzLCBJIG5lZWQgdG8gc3RhcnQgd2l0aCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUaGUgYGtlcm5lbC9icGYvS2NvbmZpZ2AgZmlsZSBpcyB0aGUgb2J2aW91cyBwbGFjZSB0byBiZWdpbiwgc28gbGV0JiMzOTtzIGhlYWQgc3RyYWlnaHQgdGhlcmUuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgemVybyBpbiBhcm91bmQgbGluZSA5Ni4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZXkgc3RhcnQgdGhlIGRlZmluaXRpb25zIG9mIHRoZSBjb3JlIEJQRiBmdW5jdGlvbmFsaXR5LCB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciwgc28gSSBiZXQgdGhhdCYjMzk7cyBhIGtleSBzcG90IHRvIGdldCBzdGFydGVkIHdpdGggdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDkwOlx0XHQgIGFmZmVjdGVkIGhhcmR3YXJlLlxuICA5MTpcdFxuICA5MjpcdFx0ICBJZiB5b3UgYXJlIHVuc3VyZSBob3cgdG8gYW5zd2VyIHRoaXMgcXVlc3Rpb24sIGFuc3dlciBZLlxuICA5MzpcdFxuICA5NDpcdHNvdXJjZSBcJiMzNDtrZXJuZWwvYnBmL3ByZWxvYWQvS2NvbmZpZ1wmIzM0O1xuICA5NTpcdFxuICA5NjpcdGNvbmZpZyBCUEZfTFNNXG4gIDk3Olx0XHRib29sIFwmIzM0O0VuYWJsZSBCUEYgTFNNIEluc3RydW1lbnRhdGlvblwmIzM0O1xuICA5ODpcdFx0ZGVwZW5kcyBvbiBCUEZfRVZFTlRTXG4gIDk5Olx0XHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXG4gMTAwOlx0XHRkZXBlbmRzIG9uIFNFQ1VSSVRZXG4gMTAxOlx0XHRkZXBlbmRzIG9uIEJQRl9KSVRcbiAxMDI6XHRcdGhlbHBcbiAxMDM6XHRcdCAgRW5hYmxlcyBpbnN0cnVtZW50YXRpb24gb2YgdGhlIHNlY3VyaXR5IGhvb2tzIHdpdGggQlBGIHByb2dyYW1zIGZvclxuIDEwNDpcdFx0ICBpbXBsZW1lbnRpbmcgZHluYW1pYyBNQUMgYW5kIEF1ZGl0IFBvbGljaWVzLlxuIDEwNTpcdFxuIDEwNjpcdFx0ICBJZiB5b3UgYXJlIHVuc3VyZSBob3cgdG8gYW5zd2VyIHRoaXMgcXVlc3Rpb24sIGFuc3dlciBOLlxuIDEwNzpcdFxuIDEwODpcdGNvbmZpZyBCUEZfSklUX0tBU0FOXG4gMTA5Olx0XHRib29sXG4gMTEwOlx0XHRkZXBlbmRzIG9uIEhBVkVfRUJQRl9KSVRfS0FTQU5cbiAxMTE6XHRcdGRlcGVuZHMgb24gS0FTQU5fR0VORVJJQ1xuIDExMjpcdFx0ZGVwZW5kcyBvbiBLQVNBTl9WTUFMTE9DXG4gMTEzOlx0XHRkZXBlbmRzIG9uIEJQRl9KSVRcbiAxMTQ6XHRcdGRlZmF1bHQgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjkyOAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDQxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLZXJuZWwgRnVuY3Rpb25hbGl0eSBSZXZpZXcqKgoKT2theSwgbGV0JiMzOTtzIGRpc3NlY3QgdGhlc2Uga2VybmVsIG1vZGlmaWNhdGlvbnMuIE15IGluaXRpYWwgZm9jdXMgaXMgdG8gcGlucG9pbnQgdGhlIG5ld2x5IGludHJvZHVjZWQgb3IgYWx0ZXJlZCBmdW5jdGlvbnMuIFRoZSBsaXN0IHBvaW50cyBtZSB0b3dhcmRzIHNldmVyYWwga2V5IGFyZWFzOgoKKiAgIFRoZSBgYnBmX2NvcHlfZnJvbV91c2VyXypgIGZhbWlseSB3aXRoaW4gYGtlcm5lbC9icGYvaGVscGVycy5jYC4gV2UmIzM5O3ZlIGdvdCBgYnBmX2NvcHlfZnJvbV91c2VyX21tYCwgYGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHJgLCBgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tgLCBhbmQgYGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3N0cmAuIFRoZXNlIGFyZSBjbGVhcmx5IHJlbGF0ZWQgdG8gQlBGIHByb2dyYW1zIGludGVyYWN0aW5nIHdpdGggdXNlciBzcGFjZSBtZW1vcnksIHByb2JhYmx5IGludm9sdmluZyBkaWZmZXJlbnQgbWVtb3J5IHNwYWNlcyBhbmQgc3RyaW5nIG9wZXJhdGlvbnMuCiogICBJbiBgbW0vdXRpbC5jYCwgYGNvcHlfcmVtb3RlX21tX3N0cmAgYW5kIGBjb3B5X3JlbW90ZV92bV9zdHJgIHBvcCB1cC4gU2VlbXMgbGlrZSB0aGVzZSBoYXZlIHNvbWV0aGluZyB0byBkbyB3aXRoIHJlbW90ZSBtZW1vcnkgY29waWVzLCBzcGVjaWZpY2FsbHkgc3RyaW5ncyBhbmQgdmlydHVhbCBtZW1vcnkuCiogICBgX19jb3B5X3JlbW90ZV9tbV9zdHJgIGluIGBtbS9tZW1vcnkuY2AgaXMgYWxzbyB0aGVyZSwgd2hpY2ggaXMgbGlrZWx5IGEgbG93LWxldmVsIGhlbHBlciBmb3IgdGhlIGFib3ZlIGZ1bmN0aW9ucy4KKiAgIFRoZW4gd2UgaGF2ZSBzb21lIGNydWNpYWwgdmVyaWZpZXIgdXBkYXRlcyBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYDogYGNoZWNrX3B0cl90b19idGZfYWNjZXNzYCwgYHR5cGVfaXNfdHJ1c3RlZF9vcl9udWxsYCwgYW5kIGBjaGVja19tZW1fYWNjZXNzYC4gVGhlc2UgYXJlIGFsbCB2ZXJ5IGltcG9ydGFudCBmb3IgbWVtb3J5IHNhZmV0eSB3aXRoaW4gQlBGLiBJdCBzZWVtcyB0aGF0IHRoZXkgaGF2ZSBiZWVuIGFkZGVkIHRvIHJlc3RyaWN0IGFjY2VzcyBvZiBCUEYgcHJvZ3JhbXMgdG8gbWVtb3J5LgoqICAgQW5kIGZpbmFsbHksIGBmcmVlX2Jwcm1gIGluIGBmcy9leGVjLmNgLiBUaGF0JiMzOTtzIGFuIGludGVyZXN0aW5nIG9uZSwgbGlrZWx5IGNsZWFuaW5nIHVwIHRoZSBwcm9jZXNzIGVudmlyb25tZW50LCBwb3RlbnRpYWxseSBhZnRlciBhbiBleGVjIGNhbGwuCgpJIGFsc28gbmVlZCB0byBjaGVjayB3aGV0aGVyIGBicGZfaXNfdHJ1c3RlZF9vcl9udWxsX2J0Zl9wdHJgIGFuZCBgYnBmX21heV9mYXVsdF9vbl9kZXJlZmAgYXJlIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zLiBUaGV5IGFyZSBkZWNsYXJlZCBpbiBgaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaGAsIHNvIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBzcGVjaWZpY3MuIE5vdywgd2hlcmUgaXMgYGJwZl9tYXlfZmF1bHRfb25fZGVyZWZgIGNhbGxlZD8gSSYjMzk7bGwgZ3JlcCBmb3IgaXQgdG8gZ2V0IHRoZSBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfbWF5X2ZhdWx0X29uX2RlcmVmJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg9MTM0Mj1zdGF0aWMgaW5saW5lIGJvb2wgYnBmX2lzX3RydXN0ZWRfb3JfbnVsbF9idGZfcHRyKGVudW0gYnBmX3JlZ190eXBlIHR5cGUpXG4tLVxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0xMzQ2LVxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaDoxMzQ3OnN0YXRpYyBpbmxpbmUgYm9vbCBicGZfbWF5X2ZhdWx0X29uX2RlcmVmKGVudW0gYnBmX3JlZ190eXBlIHR5cGUpXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTEzNDgte1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmM9NzczPWludCBicGZfY29udmVydF9jdHhfYWNjZXNzZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTk3OC1cdFx0XHRpZiAoYnBmX2lzX3B0cl90b19tZW1fb3JfYnRmX2lkKHB0cl90eXBlKSBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvZml4dXBzLmM6OTc5Olx0XHRcdCAgICBicGZfbWF5X2ZhdWx0X29uX2RlcmVmKHB0cl90eXBlKSBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvZml4dXBzLmMtOTgwLVx0XHRcdCAgICB0eXBlID09IEJQRl9SRUFEKSB7XG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy05ODktXHRcdFx0fVxua2VybmVsL2JwZi9maXh1cHMuYzo5OTA6XHRcdFx0aWYgKHZlcmlmaWVyX2J1Z19pZihicGZfbWF5X2ZhdWx0X29uX2RlcmVmKHB0cl90eXBlKSwgZW52LFxua2VybmVsL2JwZi9maXh1cHMuYy05OTEtXHRcdFx0XHRcdCAgICBcJiMzNDthY2Nlc3MgdG8gYSBmYXVsdCBwcm9uZSBwb2ludGVyIGlzIG5vdCByZXdyaXR0ZW4gYXMgYSBwcm9iZWQgb25lXCYjMzQ7KSlcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NTExOT1zdGF0aWMgYm9vbCBpc19sb2FkX2FjcV91bnNhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHJlZ25vLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01MTMxLVx0ICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTEzMjpcdHJldHVybiBpbnNuLVx1MDAzZWltbSA9PSBCUEZfTE9BRF9BQ1EgXHUwMDI2XHUwMDI2IGJwZl9tYXlfZmF1bHRfb25fZGVyZWYocmVnLVx1MDAzZXR5cGUpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTUxMzMtfVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02MDcyPXN0YXRpYyBpbnQgY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjEzMC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2MTMxOlx0aWYgKGF0eXBlICE9IEJQRl9SRUFEIFx1MDAyNlx1MDAyNiBicGZfbWF5X2ZhdWx0X29uX2RlcmVmKHJlZy1cdTAwM2V0eXBlKSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTYxMzItXHRcdHZlcmJvc2UoZW52LCBcJiMzNDtvbmx5IHJlYWQgaXMgc3VwcG9ydGVkXFxuXCYjMzQ7KTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjE1OS1cdFx0ICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjE2MDpcdFx0aWYgKHR5cGVfaXNfYWxsb2MocmVnLVx1MDAzZXR5cGUpIFx1MDAyNlx1MDAyNiAhYnBmX21heV9mYXVsdF9vbl9kZXJlZihyZWctXHUwMDNldHlwZSkgXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjE2MS1cdFx0ICAgICF0eXBlX2lzX25vbl9vd25pbmdfcmVmKHJlZy1cdTAwM2V0eXBlKSBcdTAwMjZcdTAwMjZcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTgyODc9c3RhdGljIGJvb2wgcmVnX3R5cGVfbWlzbWF0Y2hfb2soZW51bSBicGZfcmVnX3R5cGUgdHlwZSlcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgyOTgtXHRjYXNlIFBUUl9UT19NRU06XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTgyOTk6XHRcdHJldHVybiAhYnBmX21heV9mYXVsdF9vbl9kZXJlZih0eXBlKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODMwMC1cdGRlZmF1bHQ6XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE4MzI4PXN0YXRpYyBlbnVtIGJwZl9yZWdfdHlwZSBtZXJnZV9wdHJfdHlwZXMoZW51bSBicGZfcmVnX3R5cGUgdHlwZV9hLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODMzMy1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODMzNDpcdGlmIChicGZfbWF5X2ZhdWx0X29uX2RlcmVmKHR5cGVfYSkgfHwgYnBmX21heV9mYXVsdF9vbl9kZXJlZih0eXBlX2IpKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MzM1LVx0XHR0eXBlX21lcmdlZCB8PSB0b19tZW0gPyBNRU1fUkRPTkxZIHwgUFRSX1VOVFJVU1RFRCA6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0ODA4CgkJCQkJCQlvdXRwdXQ6IDMwMQoJCQkJCQkJdGhvdWdodHM6IDEwMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJQRiBhbmQgTWVtb3J5IEFjY2VzcyBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgYmFzZWQgb24gYGJwZl9tYXlfZmF1bHRfb25fZGVyZWZgJiMzOTtzIHVzYWdlIGFjcm9zcyBga2VybmVsL2JwZi92ZXJpZmllci5jYCBhbmQgYGtlcm5lbC9icGYvZml4dXBzLmNg4oCUc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gYGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3Nlc2DigJR3ZSBuZWVkIHRvIHBpY2sgb3V0IHNvbWUgZm9jdXNlZCBzeW1ib2xzIGZvciB0YXJnZXRlZCBmdXp6aW5nLiBJIG5lZWQgdG8gYmUgcHJlY2lzZSBoZXJlLCBmb2N1c2luZyBvbiB0aGUgY2hhbmdlcywgYW5kIGF2b2lkaW5nIHRoZSB1YmlxdWl0b3VzLgoKVGhlIGxpc3QgdGhhdCBzZWVtcyBtb3N0IHJlbGV2YW50IGluY2x1ZGVzOiBgYnBmX2NvcHlfZnJvbV91c2VyX21tYCwgYGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHJgLCBgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tgLCBgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyYCwgYGNvcHlfcmVtb3RlX21tX3N0cmAsIGBjb3B5X3JlbW90ZV92bV9zdHJgLCBgX19jb3B5X3JlbW90ZV9tbV9zdHJgLCBgY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3NgLCBgY2hlY2tfbWVtX2FjY2Vzc2AsIGB0eXBlX2lzX3RydXN0ZWRfb3JfbnVsbGAsIGBicGZfY29udmVydF9jdHhfYWNjZXNzZXNgLCBhbmQgYGZyZWVfYnBybWAuIFRoZXNlIGFsbCBzZWVtIHRvIGJlIGRpcmVjdGx5IHRvdWNoZWQsIG9yIGFkZGVkLCBhbmQgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkgaW4gdGhlIHBhdGNoLgoKTm93LCBsZXQmIzM5O3MgdmVyaWZ5IHRoZXNlIHN5bWJvbHMuIEkmIzM5O20gY2hlY2tpbmcgdGhlIG5hbWluZyBjb252ZW50aW9ucyB0byBlbnN1cmUgdGhlIHRvb2xzIGFyZSByZWZlcmVuY2luZyB0aGVtIGNvcnJlY3RseS4gRm9yIGluc3RhbmNlLCBgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tgIGlzIGBCUEZfQ0FMTF81KGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrLCAuLi4pYCBpbiBga2VybmVsL2JwZi9oZWxwZXJzLmNgLCBzbyBgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tgIHNob3VsZCBiZSBnb29kLiAgYGJwZl9jb3B5X2Zyb21fdXNlcl9tbWAgYW5kIGBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyYCBhcmUgZGVmaW5lZCB1c2luZyBgX19icGZfa2Z1bmNgLiBgY29weV9yZW1vdGVfbW1fc3RyYCBhbmQgYGNvcHlfcmVtb3RlX3ZtX3N0cmAgYXJlIGluIG1tL3V0aWwuYywgYF9fY29weV9yZW1vdGVfbW1fc3RyYCBpcyBpbiBtbS9tZW1vcnkuYyBhbmQgZmluYWxseSBgZnJlZV9icHJtYCBpcyBpbiBgZnMvZXhlYy5jYC4gSSYjMzk7bSBhbHNvIGNvbmZpcm1pbmcgdGhhdCBgY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3NgIGFuZCBgdHlwZV9pc190cnVzdGVkX29yX251bGxgIGFyZSB3aGVyZSBJIGV4cGVjdCB0aGVtLCBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCwgYW5kIHRoYXQgYGNoZWNrX21lbV9hY2Nlc3NgIGlzIGFsc28gaW4gYHZlcmlmaWVyLmNgLgoKSSYjMzk7bSBhbHNvIGRvaW5nIGEgcXVpY2sgc2NhbiBvZiBga2VybmVsL2JwZi92ZXJpZmllci5jYCBmb3IgYW55IG90aGVyIG1vZGlmaWVkIGZ1bmN0aW9ucywganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgZW5zdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLCBjb25maXJtaW5nIGB0eXBlX2lzX3RydXN0ZWRfb3JfbnVsbGAsIGBjaGVja19wdHJfdG9fYnRmX2FjY2Vzc2AsIGFuZCBgY2hlY2tfbWVtX2FjY2Vzc2AgYXJlIHRoZSBvbmx5IHJlbGV2YW50IGZ1bmN0aW9ucy4KCk5leHQsIHRoZSBLY29uZmlnIG9wdGlvbnMsIHdoaWNoIGFyZSBnb2luZyB0byBiZSBrZXkgdG8gcmVwbGljYXRpbmcgdGhpcy4gSSBzZWUgYEJQRl9TWVNDQUxMYCwgYERFQlVHX0lORk9fQlRGYCwgYW5kIGBCUEZfTFNNYCBhcmUgdGhlIGltcG9ydGFudCBvbmVzIGhlcmUuCgpUaGUgcGF0Y2gmIzM5O3MgcmVhc29uaW5nIGlzIHNvbGlkOiBuZXcgc2xlZXBhYmxlIGtmdW5jcywgcmVmYWN0b3JpbmcgYWNyb3NzIG1tIGFuZCBCUEYgaGVscGVycywgdGhlIGFkZGl0aW9uIG9mIHRydXN0ZWQtb3ItbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNpbmcgc3VwcG9ydCBpbiB0aGUgQlBGIHZlcmlmaWVyLCBhbmQgdGhlIHVwZGF0ZSB0byBgZnJlZV9icHJtYC4gVGhlc2UgbW9kaWZpY2F0aW9ucyB0b3VjaCBtZW1vcnkgbWFuYWdlbWVudCwgQlBGIHZlcmlmaWNhdGlvbiwgYW5kIHByb2Nlc3MgZXhlY3V0aW9uLCBhbGwgb2Ygd2hpY2ggYXJlIGFjY2Vzc2libGUgdmlhIHN0YW5kYXJkIHN5emthbGxlciBzeXNjYWxscy4gVGhpcyBtYWtlcyBpdCBhIGdyZWF0IGNhbmRpZGF0ZSBmb3IgZnV6emluZy4KCk15IGNvbmNsdXNpb246IFdvcnRoRnV6emluZyA9IHRydWU7IGFuZCB0aGUgY29uZmlndXJhdGlvbnMgYW5kIHN5bWJvbHMgYXJlIHNwb3Qgb24uIEkmIzM5O20gcmVhZHkgdG8gY2FsbCB0aGUgYHNldC1yZXN1bHRzYCB0b29sIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0RFQlVHX0lORk9fQlRGJiMzNDssCiAgICAmIzM0O0JQRl9MU00mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfY29weV9mcm9tX3VzZXJfbW0mIzM0OywKICAgICYjMzQ7YnBmX2NvcHlfZnJvbV91c2VyX21tX3N0ciYjMzQ7LAogICAgJiMzNDticGZfY29weV9mcm9tX3VzZXJfdGFzayYjMzQ7LAogICAgJiMzNDticGZfY29weV9mcm9tX3VzZXJfdGFza19zdHImIzM0OywKICAgICYjMzQ7Y29weV9yZW1vdGVfbW1fc3RyJiMzNDssCiAgICAmIzM0O2NvcHlfcmVtb3RlX3ZtX3N0ciYjMzQ7LAogICAgJiMzNDtfX2NvcHlfcmVtb3RlX21tX3N0ciYjMzQ7LAogICAgJiMzNDtjaGVja19wdHJfdG9fYnRmX2FjY2VzcyYjMzQ7LAogICAgJiMzNDt0eXBlX2lzX3RydXN0ZWRfb3JfbnVsbCYjMzQ7LAogICAgJiMzNDtjaGVja19tZW1fYWNjZXNzJiMzNDssCiAgICAmIzM0O2JwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcyYjMzQ7LAogICAgJiMzNDtmcmVlX2Jwcm0mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgc2xlZXBhYmxlIEJQRiBrZnVuY3MgKGJwZl9jb3B5X2Zyb21fdXNlcl9tbSBhbmQgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0ciksIHJlZmFjdG9ycyByZW1vdGUgTU0gc3RyaW5nIGNvcHlpbmcgaGVscGVycyBhY3Jvc3MgbW0vIGFuZCBrZXJuZWwvYnBmLywgbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byBhbGxvdyBmYXVsdC1wcm90ZWN0ZWQgbG9hZHMgdGhyb3VnaCB0cnVzdGVkLW9yLW51bGwgcG9pbnRlcnMsIGFuZCBhbHRlcnMgbW0gY2xlYW51cCBpbiBmcmVlX2Jwcm0oKS4gVGhlc2UgY2hhbmdlcyB0b3VjaCBjb3JlIEJQRiBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgZXhlY3V0aW9uIHBhdGhzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cyB2aWEgQlBGIGFuZCBleGVjIHN5c2NhbGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtERUJVR19JTkZPX0JURiYjMzQ7LAogICAgJiMzNDtCUEZfTFNNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2NvcHlfZnJvbV91c2VyX21tJiMzNDssCiAgICAmIzM0O2JwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHImIzM0OywKICAgICYjMzQ7YnBmX2NvcHlfZnJvbV91c2VyX3Rhc2smIzM0OywKICAgICYjMzQ7YnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyJiMzNDssCiAgICAmIzM0O2NvcHlfcmVtb3RlX21tX3N0ciYjMzQ7LAogICAgJiMzNDtjb3B5X3JlbW90ZV92bV9zdHImIzM0OywKICAgICYjMzQ7X19jb3B5X3JlbW90ZV9tbV9zdHImIzM0OywKICAgICYjMzQ7Y2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3MmIzM0OywKICAgICYjMzQ7dHlwZV9pc190cnVzdGVkX29yX251bGwmIzM0OywKICAgICYjMzQ7Y2hlY2tfbWVtX2FjY2VzcyYjMzQ7LAogICAgJiMzNDticGZfY29udmVydF9jdHhfYWNjZXNzZXMmIzM0OywKICAgICYjMzQ7ZnJlZV9icHJtJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IHNsZWVwYWJsZSBCUEYga2Z1bmNzIChicGZfY29weV9mcm9tX3VzZXJfbW0gYW5kIGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIpLCByZWZhY3RvcnMgcmVtb3RlIE1NIHN0cmluZyBjb3B5aW5nIGhlbHBlcnMgYWNyb3NzIG1tLyBhbmQga2VybmVsL2JwZi8sIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gYWxsb3cgZmF1bHQtcHJvdGVjdGVkIGxvYWRzIHRocm91Z2ggdHJ1c3RlZC1vci1udWxsIHBvaW50ZXJzLCBhbmQgYWx0ZXJzIG1tIGNsZWFudXAgaW4gZnJlZV9icHJtKCkuIFRoZXNlIGNoYW5nZXMgdG91Y2ggY29yZSBCUEYgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IGV4ZWN1dGlvbiBwYXRocyByZWFjaGFibGUgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMgdmlhIEJQRiBhbmQgZXhlYyBzeXNjYWxscy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6MjE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMDoyMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIEJQRiBrZnVuY3MgZm9yIGNvcHlpbmcgbWVtb3J5IGZyb20gYW4gYXJiaXRyYXJ5IGBzdHJ1Y3QgbW1fc3RydWN0YCAoYGJwZl9jb3B5X2Zyb21fdXNlcl9tbWAgYW5kIGBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyYCksIHJlZmFjdG9ycyBleGlzdGluZyB0YXNrLWJhc2VkIGhlbHBlcnMgdG8gdXNlIHRoZXNlIGZ1bmN0aW9ucywgY2xlYXJzIGBicHJtLVx1MDAzZW1tYCBiZWZvcmUgZHJvcHBpbmcgdGhlIHJlZmVyZW5jZSBpbiBgZnJlZV9icHJtKClgLCBhbmQgdXBkYXRlcyB0aGUgQlBGIHZlcmlmaWVyIHRvIGFsbG93IGZhdWx0LXByb3RlY3RlZCBsb2FkcyB0aHJvdWdoIHRydXN0ZWQtb3ItbnVsbCBCVEYgcG9pbnRlcnMgKGBicGZfaXNfdHJ1c3RlZF9vcl9udWxsX2J0Zl9wdHJgKS5cblxuS01TQU4gdnMgS0FTQU4gQXBwbGljYWJpbGl0eTpcbi0gS01TQU4gZGV0ZWN0cyByZWFkcyBvZiB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAvcGFnZSBtZW1vcnkgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBkaXNjbG9zdXJlIChpbmZvLWxlYWtzKS5cbi0gS0FTQU4gLyBMT0NLREVQIGRldGVjdCBtZW1vcnkgY29ycnVwdGlvbnMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMsIGFuZCBsb2NraW5nIGVycm9ycy5cbi0gVGhlIG5ldyBCUEYgY29weSBrZnVuY3MgcHJvcGVybHkgaGFuZGxlIG1lbW9yeSBpbml0aWFsaXphdGlvbjogYW55IGRlc3RpbmF0aW9uIGJ1ZmZlcnMgYXJlIGVpdGhlciBmdWxseSB3cml0dGVuIG9yIGV4cGxpY2l0bHkgemVyb2VkIHZpYSBgbWVtc2V0KClgIHVwb24gZmFpbHVyZSwgcGFydGlhbCByZWFkcywgb3Igd2hlbiBgQlBGX0ZfUEFEX1pFUk9TYCBpcyByZXF1ZXN0ZWQuXG4tIE5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgc3RhY2sgYWxsb2NhdGlvbnMsIG9yIGtlcm5lbC10by11c2VyIGxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuXG4tIFZlcmlmaWVyIHR5cGUgdHJhY2tpbmcgYW5kIHJlZmVyZW5jZSBjb3VudGluZyBjaGFuZ2VzIHJlbGF0ZSB0byBwb2ludGVyIHZhbGlkaXR5IGFuZCBmYXVsdCBoYW5kbGluZywgYXJlYXMgd2hlcmUgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllcyBhcmUgYXBwbGljYWJsZSwgbm90IEtNU0FOLlxuXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGRiNzdhZjY2YjNhYTA3YjEzZGM4M2FhZmNhMWI4YjBhMDI5MWExZmIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDIwOjIwOjUzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvZXhlYy5jIGIvZnMvZXhlYy5jCmluZGV4IDc0NWY2ZWI1Mjc5ZTYuLjRkZGQ0MDNmZDkxYzcgMTAwNjQ0Ci0tLSBhL2ZzL2V4ZWMuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leGVjLmMKQEAgLTE0NTYsOSAmIzQzOzE0NTYsMTIgQEAgdm9pZCBicHJtX2Ryb3BfbG9hZGVyKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pCiAKIHN0YXRpYyB2b2lkIGZyZWVfYnBybShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKQogewotCWlmIChicHJtLSZndDttbSkgewomIzQzOwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGJwcm0tJmd0O21tOwomIzQzOwomIzQzOwlpZiAobW0pIHsKIAkJYWNjdF9hcmdfc2l6ZShicHJtLCAwKTsKLQkJbW1wdXQoYnBybS0mZ3Q7bW0pOwomIzQzOwkJYnBybS0mZ3Q7bW0gPSBOVUxMOwomIzQzOwkJbW1wdXQobW0pOwogCX0KIAlpZiAoYnBybS0mZ3Q7dXNlcl9ucykKIAkJcHV0X3VzZXJfbnMoYnBybS0mZ3Q7dXNlcl9ucyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaAppbmRleCA5NzI3ZGY1YWY4M2FiLi40ZjAzMmFkODNjNjc1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgKQEAgLTEzMzksNiAmIzQzOzEzMzksMTEgQEAgc3RhdGljIGlubGluZSBib29sIGJwZl9pc19wdHJfdG9fbWVtX29yX2J0Zl9pZChlbnVtIGJwZl9yZWdfdHlwZSB0eXBlKQogCX0KIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBicGZfaXNfdHJ1c3RlZF9vcl9udWxsX2J0Zl9wdHIoZW51bSBicGZfcmVnX3R5cGUgdHlwZSkKJiM0Mzt7CiYjNDM7CXJldHVybiB0eXBlID09IChQVFJfVE9fQlRGX0lEIHwgUFRSX1RSVVNURUQgfCBQVFJfTUFZQkVfTlVMTCk7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBib29sIGJwZl9tYXlfZmF1bHRfb25fZGVyZWYoZW51bSBicGZfcmVnX3R5cGUgdHlwZSkKIHsKIAkvKgpAQCAtMTM0Niw3ICYjNDM7MTM1MSw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBicGZfbWF5X2ZhdWx0X29uX2RlcmVmKGVudW0gYnBmX3JlZ190eXBlIHR5cGUpCiAJICogcHJvdGVjdGlvbiwgdGhhdCBpcywgdGhlIG9uZXMgYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzKCkgaGFzIHRvCiAJICogdHVybiBhIEJQRl9MRFggaW50byBhIEJQRl9QUk9CRV9NRU0gb25lIGZvci4KIAkgKi8KLQlyZXR1cm4gdHlwZSA9PSBQVFJfVE9fQlRGX0lEIHx8ICh0eXBlX2ZsYWcodHlwZSkgJmFtcDsgUFRSX1VOVFJVU1RFRCk7CiYjNDM7CXJldHVybiB0eXBlID09IFBUUl9UT19CVEZfSUQgfHwKJiM0MzsJICAgICAgICh0eXBlX2ZsYWcodHlwZSkgJmFtcDsgUFRSX1VOVFJVU1RFRCkgfHwKJiM0MzsJICAgICAgIGJwZl9pc190cnVzdGVkX29yX251bGxfYnRmX3B0cih0eXBlKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIGJwZl9wcm9nX2hhc19hcmVuYV9jdHhfYXJnKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaAppbmRleCBkZDA5YzQzOGZhMjNlLi5kNWJkZTFmNzFhOTdlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbS5oCkBAIC0zMzI2LDYgJiM0MzszMzI2LDggQEAgZXh0ZXJuIGludCBhY2Nlc3NfcmVtb3RlX3ZtKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCXZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncyk7CiAKICNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTEwKJiM0MztleHRlcm4gaW50IGNvcHlfcmVtb3RlX21tX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAomIzQzOwkJCSAgICAgIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncyk7CiBleHRlcm4gaW50IGNvcHlfcmVtb3RlX3ZtX3N0cihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdW5zaWduZWQgbG9uZyBhZGRyLAogCQkJICAgICAgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oZWxwZXJzLmMgYi9rZXJuZWwvYnBmL2hlbHBlcnMuYwppbmRleCBiM2NjNWM4ZmM4NzU2Li5kM2M1NjQ0MzdhZDA2IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2hlbHBlcnMuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2hlbHBlcnMuYwpAQCAtMzIsNiAmIzQzOzMyLDEwIEBACiAKICNpbmNsdWRlICYjMzQ7Li4vLi4vbGliL2tzdHJ0b3guaCYjMzQ7CiAKJiM0MztfX2JwZl9rZnVuYyBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX21tKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osCiYjNDM7CQkJCSAgICAgIGNvbnN0IHZvaWQgX191c2VyICp1bnNhZmVfcHRyX19pZ24sCiYjNDM7CQkJCSAgICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1NjQgZmxhZ3MpOwomIzQzOwogLyogSWYga2VybmVsIHN1YnN5c3RlbSBpcyBhbGxvd2luZyBlQlBGIHByb2dyYW1zIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiwKICAqIGluc2lkZSBpdHMgb3duIHZlcmlmaWVyX29wcy0mZ3Q7Z2V0X2Z1bmNfcHJvdG8oKSBjYWxsYmFjayBpdCBzaG91bGQgcmV0dXJuCiAgKiBicGZfbWFwX2xvb2t1cF9lbGVtX3Byb3RvLCBzbyB0aGF0IHZlcmlmaWVyIGNhbiBwcm9wZXJseSBjaGVjayB0aGUgYXJndW1lbnRzCkBAIC02ODIsMjIgJiM0Mzs2ODYsMTUgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9jb3B5X2Zyb21fdXNlcl9wcm90byA9IHsKIEJQRl9DQUxMXzUoYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2ssIHZvaWQgKiwgZHN0LCB1MzIsIHNpemUsCiAJICAgY29uc3Qgdm9pZCBfX3VzZXIgKiwgdXNlcl9wdHIsIHN0cnVjdCB0YXNrX3N0cnVjdCAqLCB0c2ssIHU2NCwgZmxhZ3MpCiB7CiYjNDM7CXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwogCWludCByZXQ7CiAKLQkvKiBmbGFncyBpcyBub3QgdXNlZCB5ZXQgKi8KLQlpZiAodW5saWtlbHkoZmxhZ3MpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICh1bmxpa2VseSghc2l6ZSkpCi0JCXJldHVybiAwOwotCi0JcmV0ID0gYWNjZXNzX3Byb2Nlc3Nfdm0odHNrLCAodW5zaWduZWQgbG9uZyl1c2VyX3B0ciwgZHN0LCBzaXplLCAwKTsKLQlpZiAocmV0ID09IHNpemUpCi0JCXJldHVybiAwOwomIzQzOwltbSA9IGdldF90YXNrX21tKHRzayk7CiYjNDM7CXJldCA9IGJwZl9jb3B5X2Zyb21fdXNlcl9tbShkc3QsIHNpemUsIHVzZXJfcHRyLCBtbSwgZmxhZ3MpOwomIzQzOwlpZiAobW0pCiYjNDM7CQltbXB1dChtbSk7CiAKLQltZW1zZXQoZHN0LCAwLCBzaXplKTsKLQkvKiBSZXR1cm4gLUVGQVVMVCBmb3IgcGFydGlhbCByZWFkICovCi0JcmV0dXJuIHJldCAmbHQ7IDAgPyByZXQgOiAtRUZBVUxUOwomIzQzOwlyZXR1cm4gcmV0OwogfQogCiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfcHJvdG8gPSB7CkBAIC0zNjU4LDYgJiM0MzszNjU1LDEwMCBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX3N0cih2b2lkICpkc3QsIHUzMiBkc3RfX3N6LCBjb25zdCB2b2lkIF9fdXNlcgogCXJldHVybiByZXQgJiM0MzsgMTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIGJwZl9jb3B5X2Zyb21fdXNlcl9tbSgpIC0gQ29weSBkYXRhIGZyb20gYW4gYWRkcmVzcyBzcGFjZQomIzQzOyAqIEBkc3Q6ICAgICAgICAgICAgIERlc3RpbmF0aW9uIGFkZHJlc3MsIGluIGtlcm5lbCBzcGFjZQomIzQzOyAqIEBkc3RfX3N6OiAgICAgICAgIE51bWJlciBvZiBieXRlcyB0byBjb3B5CiYjNDM7ICogQHVuc2FmZV9wdHJfX2lnbjogU291cmNlIGFkZHJlc3MgaW4gdGhlIGFkZHJlc3Mgc3BhY2UKJiM0MzsgKiBAbW06ICAgICAgICAgICAgICBBZGRyZXNzIHNwYWNlIHRvIGNvcHkgZnJvbQomIzQzOyAqIEBmbGFnczogICAgICAgICAgIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlOyBtdXN0IGJlIHplcm8KJiM0MzsgKgomIzQzOyAqIENvcGllcyBkYXRhIGZyb20gdGhlIHVzZXIgYWRkcmVzcyBzcGFjZSBhc3NvY2lhdGVkIHdpdGggQG1tLiBUaGUgZGVzdGluYXRpb24KJiM0MzsgKiBpcyB6ZXJvZWQgaWYgYW4gYXR0ZW1wdGVkIGNvcHkgY2Fubm90IGJlIGNvbXBsZXRlZCBpbiBmdWxsLiBVbnN1cHBvcnRlZAomIzQzOyAqIGZsYWdzIHJldHVybiAtRUlOVkFMIHdpdGhvdXQgbW9kaWZ5aW5nIEBkc3QuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVJTlZBTCBpZiBAZmxhZ3MgaXMgbm9uLXplcm8sIG9yIC1FRkFVTFQgaWYgdGhlIGNvcHkKJiM0MzsgKiBmYWlscyBvciBpcyBwYXJ0aWFsLgomIzQzOyAqLwomIzQzO19fYnBmX2tmdW5jIGludCBicGZfY29weV9mcm9tX3VzZXJfbW0odm9pZCAqZHN0LCB1MzIgZHN0X19zeiwKJiM0MzsJCQkJICAgICAgY29uc3Qgdm9pZCBfX3VzZXIgKnVuc2FmZV9wdHJfX2lnbiwKJiM0MzsJCQkJICAgICAgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHU2NCBmbGFncykKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmICh1bmxpa2VseShmbGFncykpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJaWYgKHVubGlrZWx5KCFkc3RfX3N6KSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAodW5saWtlbHkoIW1tKSkgewomIzQzOwkJbWVtc2V0KGRzdCwgMCwgZHN0X19zeik7CiYjNDM7CQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBhY2Nlc3NfcmVtb3RlX3ZtKG1tLCAodW5zaWduZWQgbG9uZyl1bnNhZmVfcHRyX19pZ24sCiYjNDM7CQkJICAgICAgIGRzdCwgZHN0X19zeiwgMCk7CiYjNDM7CWlmIChyZXQgPT0gZHN0X19zeikKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwltZW1zZXQoZHN0LCAwLCBkc3RfX3N6KTsKJiM0MzsJcmV0dXJuIHJldCAmbHQ7IDAgPyByZXQgOiAtRUZBVUxUOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKCkgLSBDb3B5IGEgc3RyaW5nIGZyb20gYW4gYWRkcmVzcyBzcGFjZQomIzQzOyAqIEBkc3Q6ICAgICAgICAgICAgIERlc3RpbmF0aW9uIGFkZHJlc3MsIGluIGtlcm5lbCBzcGFjZS4gVGhpcyBidWZmZXIgbXVzdCBiZQomIzQzOyAqICAgICAgICAgICAgICAgICAgIGF0IGxlYXN0IEBkc3RfX3N6IGJ5dGVzIGxvbmcKJiM0MzsgKiBAZHN0X19zejogICAgICAgICBNYXhpbXVtIG51bWJlciBvZiBieXRlcyB0byBjb3B5LCBpbmNsdWRpbmcgdGhlIHRyYWlsaW5nIE5VTAomIzQzOyAqIEB1bnNhZmVfcHRyX19pZ246IFNvdXJjZSBhZGRyZXNzIGluIHRoZSBhZGRyZXNzIHNwYWNlCiYjNDM7ICogQG1tOiAgICAgICAgICAgICAgQWRkcmVzcyBzcGFjZSB0byBjb3B5IGZyb20KJiM0MzsgKiBAZmxhZ3M6ICAgICAgICAgICBUaGUgb25seSBzdXBwb3J0ZWQgZmxhZyBpcyBCUEZfRl9QQURfWkVST1MKJiM0MzsgKgomIzQzOyAqIENvcGllcyBhIE5VTC10ZXJtaW5hdGVkIHN0cmluZyBmcm9tIHRoZSB1c2VyIGFkZHJlc3Mgc3BhY2UgYXNzb2NpYXRlZCB3aXRoCiYjNDM7ICogQG1tLiBJZiB0aGUgc3RyaW5nIGlzIHRvbyBsb25nLCBAZHN0IGlzIHN0aWxsIE5VTC10ZXJtaW5hdGVkIHVubGVzcyBAZHN0X19zegomIzQzOyAqIGlzIHplcm8uCiYjNDM7ICoKJiM0MzsgKiBJZiB0aGUgZmxhZ3MgYXJlIHZhbGlkIGFuZCBCUEZfRl9QQURfWkVST1MgaXMgc2V0LCB0aGUgdW51c2VkIHBvcnRpb24gb2YKJiM0MzsgKiBAZHN0IGlzIGNsZWFyZWQgb24gc3VjY2VzcyBhbmQgYWxsIG9mIEBkc3QgaXMgY2xlYXJlZCBvbiBhIGNvcHkgZmFpbHVyZS4KJiM0MzsgKiBVbnN1cHBvcnRlZCBmbGFncyByZXR1cm4gLUVJTlZBTCB3aXRob3V0IG1vZGlmeWluZyBAZHN0LgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiBUaGUgbnVtYmVyIG9mIGNvcGllZCBieXRlcyBpbmNsdWRpbmcgdGhlIE5VTCB0ZXJtaW5hdG9yIG9uIHN1Y2Nlc3MsCiYjNDM7ICogb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCiYjNDM7ICovCiYjNDM7X19icGZfa2Z1bmMgaW50IGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIodm9pZCAqZHN0LCB1MzIgZHN0X19zeiwKJiM0MzsJCQkJCSAgY29uc3Qgdm9pZCBfX3VzZXIgKnVuc2FmZV9wdHJfX2lnbiwKJiM0MzsJCQkJCSAgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHU2NCBmbGFncykKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmICh1bmxpa2VseShmbGFncyAmYW1wOyB+QlBGX0ZfUEFEX1pFUk9TKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAodW5saWtlbHkoZHN0X19zeiA9PSAwKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAodW5saWtlbHkoIW1tKSkgewomIzQzOwkJaWYgKGZsYWdzICZhbXA7IEJQRl9GX1BBRF9aRVJPUykKJiM0MzsJCQltZW1zZXQoZHN0LCAwLCBkc3RfX3N6KTsKJiM0MzsJCWVsc2UKJiM0MzsJCQkqKGNoYXIgKilkc3QgPSAmIzM5O1wwJiMzOTs7CiYjNDM7CQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBjb3B5X3JlbW90ZV9tbV9zdHIobW0sICh1bnNpZ25lZCBsb25nKXVuc2FmZV9wdHJfX2lnbiwgZHN0LCBkc3RfX3N6LCAwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApIHsKJiM0MzsJCWlmIChmbGFncyAmYW1wOyBCUEZfRl9QQURfWkVST1MpCiYjNDM7CQkJbWVtc2V0KGRzdCwgMCwgZHN0X19zeik7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChmbGFncyAmYW1wOyBCUEZfRl9QQURfWkVST1MpCiYjNDM7CQltZW1zZXQoZHN0ICYjNDM7IHJldCwgMCwgZHN0X19zeiAtIHJldCk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQgJiM0MzsgMTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3N0cigpIC0gQ29weSBhIHN0cmluZyBmcm9tIGFuIHRhc2smIzM5O3MgYWRkcmVzcyBzcGFjZQogICogQGRzdDogICAgICAgICAgICAgRGVzdGluYXRpb24gYWRkcmVzcywgaW4ga2VybmVsIHNwYWNlLiAgVGhpcyBidWZmZXIgbXVzdCBiZQpAQCAtMzY4MSwyNSAmIzQzOzM3NzIsMTYgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3N0cih2b2lkICpkc3QsIHUzMiBkc3RfX3N6LAogCQkJCQkgICAgY29uc3Qgdm9pZCBfX3VzZXIgKnVuc2FmZV9wdHJfX2lnbiwKIAkJCQkJICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1NjQgZmxhZ3MpCiB7CiYjNDM7CXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwogCWludCByZXQ7CiAKLQlpZiAodW5saWtlbHkoZmxhZ3MgJmFtcDsgfkJQRl9GX1BBRF9aRVJPUykpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKHVubGlrZWx5KGRzdF9fc3ogPT0gMCkpCi0JCXJldHVybiAwOwomIzQzOwltbSA9IGdldF90YXNrX21tKHRzayk7CiYjNDM7CXJldCA9IGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIoZHN0LCBkc3RfX3N6LCB1bnNhZmVfcHRyX19pZ24sCiYjNDM7CQkJCQltbSwgZmxhZ3MpOwomIzQzOwlpZiAobW0pCiYjNDM7CQltbXB1dChtbSk7CiAKLQlyZXQgPSBjb3B5X3JlbW90ZV92bV9zdHIodHNrLCAodW5zaWduZWQgbG9uZyl1bnNhZmVfcHRyX19pZ24sIGRzdCwgZHN0X19zeiwgMCk7Ci0JaWYgKHJldCAmbHQ7IDApIHsKLQkJaWYgKGZsYWdzICZhbXA7IEJQRl9GX1BBRF9aRVJPUykKLQkJCW1lbXNldChkc3QsIDAsIGRzdF9fc3opOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCWlmIChmbGFncyAmYW1wOyBCUEZfRl9QQURfWkVST1MpCi0JCW1lbXNldChkc3QgJiM0MzsgcmV0LCAwLCBkc3RfX3N6IC0gcmV0KTsKLQotCXJldHVybiByZXQgJiM0MzsgMTsKJiM0MzsJcmV0dXJuIHJldDsKIH0KIAogLyogS2VlcCB1bnNpZ25lZCBsb25nIGluIHByb3RvdHlwZSBzbyB0aGF0IGtmdW5jIGlzIHVzYWJsZSB3aGVuIGVtaXR0ZWQgdG8KQEAgLTQ5MjQsNiAmIzQzOzUwMDYsOCBAQCBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfYml0c19uZXcsIEtGX0lURVJfTkVXKQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX2JpdHNfbmV4dCwgS0ZfSVRFUl9ORVhUIHwgS0ZfUkVUX05VTEwpCiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfYml0c19kZXN0cm95LCBLRl9JVEVSX0RFU1RST1kpCiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2NvcHlfZnJvbV91c2VyX3N0ciwgS0ZfU0xFRVBBQkxFKQomIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfY29weV9mcm9tX3VzZXJfbW0sIEtGX1NMRUVQQUJMRSkKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0ciwgS0ZfU0xFRVBBQkxFKQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3N0ciwgS0ZfU0xFRVBBQkxFKQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9nZXRfa21lbV9jYWNoZSkKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfaXRlcl9rbWVtX2NhY2hlX25ldywgS0ZfSVRFUl9ORVcgfCBLRl9TTEVFUEFCTEUpCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKaW5kZXggOWU3OTc1MGUyNDgwOC4uNjc5OWQ5ZTA4MGZjNSAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwpAQCAtNjAwNCw2ICYjNDM7NjAwNCwxMCBAQCBCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTChzdHJ1Y3QgZGVudHJ5KSB7CiAJc3RydWN0IGlub2RlICpkX2lub2RlOwogfTsKIAomIzQzO0JURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMKHN0cnVjdCBsaW51eF9iaW5wcm0pIHsKJiM0MzsJc3RydWN0IG1tX3N0cnVjdCAqbW07CiYjNDM7fTsKJiM0MzsKIEJURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMKHN0cnVjdCBzb2NrZXQpIHsKIAlzdHJ1Y3Qgc29jayAqc2s7CiB9OwpAQCAtNjA1OCw2ICYjNDM7NjA2Miw3IEBAIHN0YXRpYyBib29sIHR5cGVfaXNfdHJ1c3RlZF9vcl9udWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiB7CiAJQlRGX1RZUEVfRU1JVChCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTChzdHJ1Y3Qgc29ja2V0KSk7CiAJQlRGX1RZUEVfRU1JVChCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTChzdHJ1Y3QgZGVudHJ5KSk7CiYjNDM7CUJURl9UWVBFX0VNSVQoQlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IGxpbnV4X2JpbnBybSkpOwogCUJURl9UWVBFX0VNSVQoQlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IHZtX2FyZWFfc3RydWN0KSk7CiAKIAlyZXR1cm4gYnRmX25lc3RlZF90eXBlX2lzX3RydXN0ZWQoJmFtcDtlbnYtJmd0O2xvZywgcmVnLCBmaWVsZF9uYW1lLCBidGZfaWQsCkBAIC02MTY4LDYgJiM0Mzs2MTczLDE1IEBAIHN0YXRpYyBpbnQgY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAlpZiAocmV0ICE9IFBUUl9UT19CVEZfSUQpIHsKIAkJLyoganVzdCBtYXJrOyAqLwogCiYjNDM7CX0gZWxzZSBpZiAoYnBmX2lzX3RydXN0ZWRfb3JfbnVsbF9idGZfcHRyKHJlZy0mZ3Q7dHlwZSkpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBBbiB1bmNoZWNrZWQgbG9hZCB0aHJvdWdoIGEgdHJ1c3RlZC1vci1OVUxMIHBvaW50ZXIgaXMKJiM0MzsJCSAqIGZhdWx0LXByb3RlY3RlZC4gQW55IHBvaW50ZXIgZGVyaXZlZCBmcm9tIHRoYXQgbG9hZCBtdXN0IGJlCiYjNDM7CQkgKiB1bnRydXN0ZWQsIGFzIGEgZmF1bHQgcHJvZHVjZXMgYSBOVUxMIHZhbHVlLgomIzQzOwkJICovCiYjNDM7CQljbGVhcl90cnVzdGVkX2ZsYWdzKCZhbXA7ZmxhZyk7CiYjNDM7CQlmbGFnIHw9IFBUUl9VTlRSVVNURUQ7CiYjNDM7CiAJfSBlbHNlIGlmICh0eXBlX2ZsYWcocmVnLSZndDt0eXBlKSAmYW1wOyBQVFJfVU5UUlVTVEVEKSB7CiAJCS8qIElmIHRoaXMgaXMgYW4gdW50cnVzdGVkIHBvaW50ZXIsIGFsbCBwb2ludGVycyBmb3JtZWQgYnkgd2Fsa2luZyBpdAogCQkgKiBhbHNvIGluaGVyaXQgdGhlIHVudHJ1c3RlZCBmbGFnLgpAQCAtNjY0NCw3ICYjNDM7NjY1OCw4IEBAIHN0YXRpYyBpbnQgY2hlY2tfbWVtX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgsIHN0cnVjdCBiCiAJCWlmICghZXJyICZhbXA7JmFtcDsgdCA9PSBCUEZfUkVBRCAmYW1wOyZhbXA7IHZhbHVlX3JlZ25vICZndDs9IDApCiAJCQltYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgdmFsdWVfcmVnbm8pOwogCX0gZWxzZSBpZiAoYmFzZV90eXBlKHJlZy0mZ3Q7dHlwZSkgPT0gUFRSX1RPX0JURl9JRCAmYW1wOyZhbXA7Ci0JCSAgICF0eXBlX21heV9iZV9udWxsKHJlZy0mZ3Q7dHlwZSkpIHsKJiM0MzsJCSAgICghdHlwZV9tYXlfYmVfbnVsbChyZWctJmd0O3R5cGUpIHx8CiYjNDM7CQkgICAgKHQgPT0gQlBGX1JFQUQgJmFtcDsmYW1wOyBicGZfaXNfdHJ1c3RlZF9vcl9udWxsX2J0Zl9wdHIocmVnLSZndDt0eXBlKSkpKSB7CiAJCWVyciA9IGNoZWNrX3B0cl90b19idGZfYWNjZXNzKGVudiwgcmVncywgcmVnLCBhcmdubywgb2ZmLCBzaXplLCB0LAogCQkJCQkgICAgICB2YWx1ZV9yZWdubyk7CiAJfSBlbHNlIGlmIChyZWctJmd0O3R5cGUgPT0gQ09OU1RfUFRSX1RPX01BUCkgewpkaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmgKaW5kZXggMzhiMTE2NTIxMmM5NC4uODI2NGEzNDZkMThhZiAxMDA2NDQKLS0tIGEvbW0vaW50ZXJuYWwuaAomIzQzOyYjNDM7JiM0MzsgYi9tbS9pbnRlcm5hbC5oCkBAIC0yNSw2ICYjNDM7MjUsMTEgQEAKIHN0cnVjdCBmb2xpb19iYXRjaDsKIHN0cnVjdCBoc3RhdGU7CiAKJiM0MzsjaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMCiYjNDM7aW50IF9fY29weV9yZW1vdGVfbW1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiYjNDM7CQkJIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncyk7CiYjNDM7I2VuZGlmCiYjNDM7CiBzdHJ1Y3QgaHVnZV9ib290bWVtX3BhZ2UgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAlzdHJ1Y3QgaHN0YXRlICpoc3RhdGU7CmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jCmluZGV4IDhiMGMyYzczNWQzZGUuLmZlMmY1ZTk4OGZiOTAgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS5jCkBAIC03MzMxLDggJiM0Mzs3MzMxLDggQEAgRVhQT1JUX1NZTUJPTF9HUEwoYWNjZXNzX3Byb2Nlc3Nfdm0pOwogICogQ29weSBhIHN0cmluZyBmcm9tIGFub3RoZXIgcHJvY2VzcyYjMzk7cyBhZGRyZXNzIHNwYWNlIGFzIGdpdmVuIGluIG1tLgogICogSWYgdGhlcmUgaXMgYW55IGVycm9yIHJldHVybiAtRUZBVUxULgogICovCi1zdGF0aWMgaW50IF9fY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkJdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKQomIzQzO2ludCBfX2NvcHlfcmVtb3RlX21tX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAomIzQzOwkJCSB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpCiB7CiAJdm9pZCAqb2xkX2J1ZiA9IGJ1ZjsKIAlpbnQgZXJyID0gMDsKQEAgLTc0MDcsNDMgJiM0Mzs3NDA3LDYgQEAgc3RhdGljIGludCBfX2NvcHlfcmVtb3RlX3ZtX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQlyZXR1cm4gZXJyOwogCXJldHVybiBidWYgLSBvbGRfYnVmOwogfQotCi0vKioKLSAqIGNvcHlfcmVtb3RlX3ZtX3N0ciAtIGNvcHkgYSBzdHJpbmcgZnJvbSBhbm90aGVyIHByb2Nlc3MmIzM5O3MgYWRkcmVzcyBzcGFjZS4KLSAqIEB0c2s6CXRoZSB0YXNrIG9mIHRoZSB0YXJnZXQgYWRkcmVzcyBzcGFjZQotICogQGFkZHI6CXN0YXJ0IGFkZHJlc3MgdG8gcmVhZCBmcm9tCi0gKiBAYnVmOglkZXN0aW5hdGlvbiBidWZmZXIKLSAqIEBsZW46CW51bWJlciBvZiBieXRlcyB0byBjb3B5Ci0gKiBAZ3VwX2ZsYWdzOglmbGFncyBtb2RpZnlpbmcgbG9va3VwIGJlaGF2aW91cgotICoKLSAqIFRoZSBjYWxsZXIgbXVzdCBob2xkIGEgcmVmZXJlbmNlIG9uIEBtbS4KLSAqCi0gKiBSZXR1cm46IG51bWJlciBvZiBieXRlcyBjb3BpZWQgZnJvbSBAYWRkciAoc291cmNlKSB0byBAYnVmIChkZXN0aW5hdGlvbik7Ci0gKiBub3QgaW5jbHVkaW5nIHRoZSB0cmFpbGluZyBOVUwuIEFsd2F5cyBndWFyYW50ZWVkIHRvIGxlYXZlIE5VTC10ZXJtaW5hdGVkCi0gKiBidWZmZXIuIE9uIGFueSBlcnJvciwgcmV0dXJuIC1FRkFVTFQuCi0gKi8KLWludCBjb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJICAgICAgIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncykKLXsKLQlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKLQlpbnQgcmV0OwotCi0JaWYgKHVubGlrZWx5KGxlbiA9PSAwKSkKLQkJcmV0dXJuIDA7Ci0KLQltbSA9IGdldF90YXNrX21tKHRzayk7Ci0JaWYgKCFtbSkgewotCQkqKGNoYXIgKilidWYgPSAmIzM5O1wwJiMzOTs7Ci0JCXJldHVybiAtRUZBVUxUOwotCX0KLQotCXJldCA9IF9fY29weV9yZW1vdGVfdm1fc3RyKG1tLCBhZGRyLCBidWYsIGxlbiwgZ3VwX2ZsYWdzKTsKLQotCW1tcHV0KG1tKTsKLQotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChjb3B5X3JlbW90ZV92bV9zdHIpOwogI2VuZGlmIC8qIENPTkZJR19CUEZfU1lTQ0FMTCAqLwogCiAvKgpkaWZmIC0tZ2l0IGEvbW0vbm9tbXUuYyBiL21tL25vbW11LmMKaW5kZXggNDk4ZTAxZWU0MGIwNS4uOTg1OTZlNjAzMTFmMyAxMDA2NDQKLS0tIGEvbW0vbm9tbXUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9ub21tdS5jCkBAIC0xNzQ2LDggJiM0MzsxNzQ2LDggQEAgRVhQT1JUX1NZTUJPTF9HUEwoYWNjZXNzX3Byb2Nlc3Nfdm0pOwogICogQ29weSBhIHN0cmluZyBmcm9tIGFub3RoZXIgcHJvY2VzcyYjMzk7cyBhZGRyZXNzIHNwYWNlIGFzIGdpdmVuIGluIG1tLgogICogSWYgdGhlcmUgaXMgYW55IGVycm9yIHJldHVybiAtRUZBVUxULgogICovCi1zdGF0aWMgaW50IF9fY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkJdm9pZCAqYnVmLCBpbnQgbGVuKQomIzQzO2ludCBfX2NvcHlfcmVtb3RlX21tX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAomIzQzOwkJCSB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpCiB7CiAJdW5zaWduZWQgbG9uZyBhZGRyX2VuZDsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKQEAgLTE3ODEsNDMgJiM0MzsxNzgxLDYgQEAgc3RhdGljIGludCBfX2NvcHlfcmVtb3RlX3ZtX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCW1tYXBfcmVhZF91bmxvY2sobW0pOwogCXJldHVybiByZXQ7CiB9Ci0KLS8qKgotICogY29weV9yZW1vdGVfdm1fc3RyIC0gY29weSBhIHN0cmluZyBmcm9tIGFub3RoZXIgcHJvY2VzcyYjMzk7cyBhZGRyZXNzIHNwYWNlLgotICogQHRzazoJdGhlIHRhc2sgb2YgdGhlIHRhcmdldCBhZGRyZXNzIHNwYWNlCi0gKiBAYWRkcjoJc3RhcnQgYWRkcmVzcyB0byByZWFkIGZyb20KLSAqIEBidWY6CWRlc3RpbmF0aW9uIGJ1ZmZlcgotICogQGxlbjoJbnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkKLSAqIEBndXBfZmxhZ3M6CWZsYWdzIG1vZGlmeWluZyBsb29rdXAgYmVoYXZpb3VyICh1bnVzZWQpCi0gKgotICogVGhlIGNhbGxlciBtdXN0IGhvbGQgYSByZWZlcmVuY2Ugb24gQG1tLgotICoKLSAqIFJldHVybjogbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCBmcm9tIEBhZGRyIChzb3VyY2UpIHRvIEBidWYgKGRlc3RpbmF0aW9uKTsKLSAqIG5vdCBpbmNsdWRpbmcgdGhlIHRyYWlsaW5nIE5VTC4gQWx3YXlzIGd1YXJhbnRlZWQgdG8gbGVhdmUgTlVMLXRlcm1pbmF0ZWQKLSAqIGJ1ZmZlci4gT24gYW55IGVycm9yLCByZXR1cm4gLUVGQVVMVC4KLSAqLwotaW50IGNvcHlfcmVtb3RlX3ZtX3N0cihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkgICAgICAgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKQotewotCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwotCWludCByZXQ7Ci0KLQlpZiAodW5saWtlbHkobGVuID09IDApKQotCQlyZXR1cm4gMDsKLQotCW1tID0gZ2V0X3Rhc2tfbW0odHNrKTsKLQlpZiAoIW1tKSB7Ci0JCSooY2hhciAqKWJ1ZiA9ICYjMzk7XDAmIzM5OzsKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCi0JcmV0ID0gX19jb3B5X3JlbW90ZV92bV9zdHIobW0sIGFkZHIsIGJ1ZiwgbGVuKTsKLQotCW1tcHV0KG1tKTsKLQotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChjb3B5X3JlbW90ZV92bV9zdHIpOwogI2VuZGlmIC8qIENPTkZJR19CUEZfU1lTQ0FMTCAqLwogCiAvKioKZGlmZiAtLWdpdCBhL21tL3V0aWwuYyBiL21tL3V0aWwuYwppbmRleCBiZjA1MTNkMWQzZDA4Li4yZWNhMjdiMDI3OTFmIDEwMDY0NAotLS0gYS9tbS91dGlsLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdXRpbC5jCkBAIC0xMDYxLDYgJiM0MzsxMDYxLDY4IEBAIGludCBnZXRfY21kbGluZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGNoYXIgKmJ1ZmZlciwgaW50IGJ1ZmxlbikKIAlyZXR1cm4gcmVzOwogfQogCiYjNDM7I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTAomIzQzOy8qKgomIzQzOyAqIGNvcHlfcmVtb3RlX21tX3N0ciAtIGNvcHkgYSBzdHJpbmcgZnJvbSBhIHJlbW90ZSBhZGRyZXNzIHNwYWNlLgomIzQzOyAqIEBtbTogICAgICAgICB0aGUgcmVtb3RlIGFkZHJlc3Mgc3BhY2UKJiM0MzsgKiBAYWRkcjogICAgICAgc3RhcnQgYWRkcmVzcyB0byByZWFkIGZyb20KJiM0MzsgKiBAYnVmOiAgICAgICAgZGVzdGluYXRpb24gYnVmZmVyCiYjNDM7ICogQGxlbjogICAgICAgIG51bWJlciBvZiBieXRlcyB0byBjb3B5CiYjNDM7ICogQGd1cF9mbGFnczogIGZsYWdzIG1vZGlmeWluZyBsb29rdXAgYmVoYXZpb3VyCiYjNDM7ICoKJiM0MzsgKiBUaGUgY2FsbGVyIG11c3QgaG9sZCBhIHJlZmVyZW5jZSBvbiBAbW0uCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IG51bWJlciBvZiBieXRlcyBjb3BpZWQgZnJvbSBAYWRkciAoc291cmNlKSB0byBAYnVmIChkZXN0aW5hdGlvbiksCiYjNDM7ICogbm90IGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMLiBJZiBAbGVuIGlzIHplcm8sIHJldHVybiAwIHdpdGhvdXQgYWNjZXNzaW5nCiYjNDM7ICogQGJ1Zi4gT3RoZXJ3aXNlLCBAYnVmIGlzIGFsd2F5cyBOVUwtdGVybWluYXRlZC4gT24gYW55IGVycm9yLCByZXR1cm4KJiM0MzsgKiAtRUZBVUxULgomIzQzOyAqLwomIzQzO2ludCBjb3B5X3JlbW90ZV9tbV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKJiM0MzsJCSAgICAgICB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpCiYjNDM7ewomIzQzOwlpZiAodW5saWtlbHkobGVuID09IDApKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJldHVybiBfX2NvcHlfcmVtb3RlX21tX3N0cihtbSwgYWRkciwgYnVmLCBsZW4sIGd1cF9mbGFncyk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGNvcHlfcmVtb3RlX3ZtX3N0ciAtIGNvcHkgYSBzdHJpbmcgZnJvbSBhbm90aGVyIHByb2Nlc3MmIzM5O3MgYWRkcmVzcyBzcGFjZS4KJiM0MzsgKiBAdHNrOgl0aGUgdGFzayBvZiB0aGUgdGFyZ2V0IGFkZHJlc3Mgc3BhY2UKJiM0MzsgKiBAYWRkcjoJc3RhcnQgYWRkcmVzcyB0byByZWFkIGZyb20KJiM0MzsgKiBAYnVmOglkZXN0aW5hdGlvbiBidWZmZXIKJiM0MzsgKiBAbGVuOgludW1iZXIgb2YgYnl0ZXMgdG8gY29weQomIzQzOyAqIEBndXBfZmxhZ3M6CWZsYWdzIG1vZGlmeWluZyBsb29rdXAgYmVoYXZpb3VyCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IG51bWJlciBvZiBieXRlcyBjb3BpZWQgZnJvbSBAYWRkciAoc291cmNlKSB0byBAYnVmIChkZXN0aW5hdGlvbiksCiYjNDM7ICogbm90IGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMLiBJZiBAbGVuIGlzIHplcm8sIHJldHVybiAwIHdpdGhvdXQgYWNjZXNzaW5nCiYjNDM7ICogQGJ1Zi4gT3RoZXJ3aXNlLCBAYnVmIGlzIGFsd2F5cyBOVUwtdGVybWluYXRlZC4gT24gYW55IGVycm9yLCByZXR1cm4KJiM0MzsgKiAtRUZBVUxULgomIzQzOyAqLwomIzQzO2ludCBjb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHVuc2lnbmVkIGxvbmcgYWRkciwKJiM0MzsJCSAgICAgICB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKHVubGlrZWx5KGxlbiA9PSAwKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwltbSA9IGdldF90YXNrX21tKHRzayk7CiYjNDM7CWlmICghbW0pIHsKJiM0MzsJCSooY2hhciAqKWJ1ZiA9ICYjMzk7XDAmIzM5OzsKJiM0MzsJCXJldHVybiAtRUZBVUxUOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IF9fY29weV9yZW1vdGVfbW1fc3RyKG1tLCBhZGRyLCBidWYsIGxlbiwgZ3VwX2ZsYWdzKTsKJiM0MzsKJiM0MzsJbW1wdXQobW0pOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChjb3B5X3JlbW90ZV92bV9zdHIpOwomIzQzOyNlbmRpZiAvKiBDT05GSUdfQlBGX1NZU0NBTEwgKi8KJiM0MzsKIGludCBfX3dlYWsgbWVtY21wX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlMSwgc3RydWN0IHBhZ2UgKnBhZ2UyKQogewogCWNoYXIgKmFkZHIxLCAqYWRkcjI7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfaXRlci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2l0ZXIuYwppbmRleCBjNjkwODBjYTE0ZjVhLi45OWExNmExYWRkNzBlIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfaXRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9pdGVyLmMKQEAgLTM5LDEwICYjNDM7MzksMTAgQEAgc3RhdGljIHZvaWQgdGVzdF9idGZfaWRfb3JfbnVsbCh2b2lkKQogCXN0cnVjdCBicGZfaXRlcl90ZXN0X2tlcm4zICpza2VsOwogCiAJc2tlbCA9IGJwZl9pdGVyX3Rlc3Rfa2VybjNfX29wZW5fYW5kX2xvYWQoKTsKLQlpZiAoIUFTU0VSVF9FUlJfUFRSKHNrZWwsICYjMzQ7YnBmX2l0ZXJfdGVzdF9rZXJuM19fb3Blbl9hbmRfbG9hZCYjMzQ7KSkgewotCQlicGZfaXRlcl90ZXN0X2tlcm4zX19kZXN0cm95KHNrZWwpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgJiMzNDticGZfaXRlcl90ZXN0X2tlcm4zX19vcGVuX2FuZF9sb2FkJiMzNDspKQogCQlyZXR1cm47Ci0JfQomIzQzOwomIzQzOwlicGZfaXRlcl90ZXN0X2tlcm4zX19kZXN0cm95KHNrZWwpOwogfQogCiBzdGF0aWMgdm9pZCBkb19kdW1teV9yZWFkX29wdHMoc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBzdHJ1Y3QgYnBmX2l0ZXJfYXR0YWNoX29wdHMgKm9wdHMpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jb3B5X2Zyb21fdXNlcl9icHJtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jb3B5X2Zyb21fdXNlcl9icHJtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uYjIzMjViMTkzNTc2MQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2NvcHlfZnJvbV91c2VyX2Jwcm0uYwpAQCAtMCwwICYjNDM7MSw3MiBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2Vycm5vLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy93YWl0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDt0ZXN0X3Byb2dzLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtjb3B5X2Zyb21fdXNlcl9icHJtLnNrZWwuaCYjMzQ7CiYjNDM7CiYjNDM7dm9pZCB0ZXN0X2NvcHlfZnJvbV91c2VyX2Jwcm0odm9pZCkKJiM0Mzt7CiYjNDM7CWNoYXIgYXJnMFtdID0gJiMzNDtmaXJzdCYjMzQ7OwomIzQzOwljaGFyIGFyZzFbXSA9ICYjMzQ7c2Vjb25kLWFyZ3VtZW50JiMzNDs7CiYjNDM7CWNoYXIgZW52MFtdID0gJiMzNDtTT01FX0VOVj1hJiMzNDs7CiYjNDM7CWNoYXIgZW52MVtdID0gJiMzNDtPVEhFUl9FTlY9c29tZXRoaW5nJiMzNDs7CiYjNDM7CXN0cnVjdCBjb3B5X2Zyb21fdXNlcl9icHJtICpza2VsOwomIzQzOwlwaWRfdCBjaGlsZDsKJiM0MzsJaW50IHN0YXR1czsKJiM0MzsKJiM0MzsJc2tlbCA9IGNvcHlfZnJvbV91c2VyX2Jwcm1fX29wZW5fYW5kX2xvYWQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7b3Blbl9hbmRfbG9hZCYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogT24gIUNPTkZJR19NTVUsIGV4ZWMgc3RyaW5ncyBhcmUgaGVsZCBpbiBicHJtLSZndDtwYWdlW10gcmF0aGVyIHRoYW4KJiM0MzsJICogYmVpbmcgbWFwcGVkIGluIGJwcm0tJmd0O21tLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFza2VsLSZndDtrY29uZmlnLSZndDtDT05GSUdfTU1VKSB7CiYjNDM7CQlwcmludGYoJiMzNDslczpTS0lQOiB0ZXN0IHJlcXVpcmVzIENPTkZJR19NTVVcbiYjMzQ7LCBfX2Z1bmNfXyk7CiYjNDM7CQl0ZXN0X19za2lwKCk7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhjb3B5X2Zyb21fdXNlcl9icHJtX19hdHRhY2goc2tlbCksICYjMzQ7YXR0YWNoJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWNoaWxkID0gZm9yaygpOwomIzQzOwlpZiAoIUFTU0VSVF9HRShjaGlsZCwgMCwgJiMzNDtmb3JrJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWlmICghY2hpbGQpIHsKJiM0MzsJCWNoYXIgKmNvbnN0IGFyZ3ZbXSA9IHsgYXJnMCwgYXJnMSwgTlVMTCB9OwomIzQzOwkJY2hhciAqY29uc3QgZW52cFtdID0geyBlbnYwLCBlbnYxLCBOVUxMIH07CiYjNDM7CiYjNDM7CQlza2VsLSZndDtic3MtJmd0O21vbml0b3JlZF9waWQgPSBnZXRwaWQoKTsKJiM0MzsJCWV4ZWN2ZSgmIzM0Oy9iaW4vdHJ1ZSYjMzQ7LCBhcmd2LCBlbnZwKTsKJiM0MzsJCV9leGl0KGVycm5vKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIUFTU0VSVF9FUSh3YWl0cGlkKGNoaWxkLCAmYW1wO3N0YXR1cywgMCksIGNoaWxkLCAmIzM0O3dhaXRwaWQmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJaWYgKEFTU0VSVF9UUlVFKFdJRkVYSVRFRChzdGF0dXMpLCAmIzM0O2NoaWxkX2V4aXRlZCYjMzQ7KSkKJiM0MzsJCUFTU0VSVF9FUShXRVhJVFNUQVRVUyhzdGF0dXMpLCBFUEVSTSwgJiMzNDtleGVjX2Vycm5vJiMzNDspOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDticHJtX2FyZ2MsIDIsICYjMzQ7YnBybV9hcmdjJiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDticHJtX2VudmMsIDIsICYjMzQ7YnBybV9lbnZjJiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtkYXRhX2xlbl9tYXRjaCwgMSwgJiMzNDtkYXRhX2xlbl9tYXRjaCYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7aW52YWxpZF9mbGFnc19yZXQsIC1FSU5WQUwsICYjMzQ7aW52YWxpZF9mbGFnc19yZXQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O2NvcHlfcmV0LCAwLCAmIzM0O2NvcHlfcmV0JiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtzdHJfYXJnMF9yZXQsIHNpemVvZihhcmcwKSwgJiMzNDtzdHJfYXJnMF9yZXQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O3N0cl9hcmcxX3JldCwgc2l6ZW9mKGFyZzEpLCAmIzM0O3N0cl9hcmcxX3JldCYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7c3RyX2VudjBfcmV0LCBzaXplb2YoZW52MCksICYjMzQ7c3RyX2VudjBfcmV0JiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtzdHJfZW52MV9yZXQsIHNpemVvZihlbnYxKSwgJiMzNDtzdHJfZW52MV9yZXQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O2RhdGFfbWF0Y2gsIDEsICYjMzQ7ZGF0YV9tYXRjaCYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7c3RyX2FyZ3NfbWF0Y2gsIDEsICYjMzQ7c3RyX2FyZ3NfbWF0Y2gmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O3N0cl9lbnZzX21hdGNoLCAxLCAmIzM0O3N0cl9lbnZzX21hdGNoJiMzNDspOwomIzQzOwomIzQzO291dDoKJiM0MzsJY29weV9mcm9tX3VzZXJfYnBybV9fZGVzdHJveShza2VsKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfbWF5YmVfbnVsbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX21heWJlX251bGwuYwppbmRleCAwMWRjMjYxM2M4YTUxLi40NWFmNmYwMGFkOTA4IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfbWF5YmVfbnVsbC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19tYXliZV9udWxsLmMKQEAgLTE5LDE1ICYjNDM7MTksMTYgQEAgc3RhdGljIHZvaWQgbWF5YmVfbnVsbCh2b2lkKQogCXN0cnVjdF9vcHNfbWF5YmVfbnVsbF9fZGVzdHJveShza2VsKTsKIH0KIAotLyogVGVzdCB0aGF0IHRoZSB2ZXJpZmllciByZWplY3RzIGEgcHJvZ3JhbSB0aGF0IGFjY2VzcyBhIG51bGxhYmxlIHBvaW50ZXIKLSAqIHdpdGhvdXQgYSBjaGVjayBiZWZvcmVoYW5kLgomIzQzOy8qCiYjNDM7ICogVGVzdCB0aGF0IHRoZSB2ZXJpZmllciBhY2NlcHRzIGEgZmF1bHQtcHJvdGVjdGVkIHJlYWQgdGhyb3VnaCBhIG51bGxhYmxlCiYjNDM7ICogdHJ1c3RlZCBwb2ludGVyIHdpdGhvdXQgYW4gZXhwbGljaXQgTlVMTCBjaGVjay4KICAqLwotc3RhdGljIHZvaWQgbWF5YmVfbnVsbF9mYWlsKHZvaWQpCiYjNDM7c3RhdGljIHZvaWQgbWF5YmVfbnVsbF9ub19jaGVjayh2b2lkKQogewogCXN0cnVjdCBzdHJ1Y3Rfb3BzX21heWJlX251bGxfZmFpbCAqc2tlbDsKIAogCXNrZWwgPSBzdHJ1Y3Rfb3BzX21heWJlX251bGxfZmFpbF9fb3Blbl9hbmRfbG9hZCgpOwotCWlmIChBU1NFUlRfRVJSX1BUUihza2VsLCAmIzM0O3N0cnVjdF9vcHNfbW9kdWxlX2ZhaWxfX29wZW5fYW5kX2xvYWQmIzM0OykpCiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O3N0cnVjdF9vcHNfbWF5YmVfbnVsbF9mYWlsX19vcGVuX2FuZF9sb2FkJiMzNDspKQogCQlyZXR1cm47CiAKIAlzdHJ1Y3Rfb3BzX21heWJlX251bGxfZmFpbF9fZGVzdHJveShza2VsKTsKQEAgLTQxLDYgJiM0Mzs0Miw2IEBAIHZvaWQgdGVzdF9zdHJ1Y3Rfb3BzX21heWJlX251bGwodm9pZCkKIAkgKi8KIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O21heWJlX251bGwmIzM0OykpCiAJCW1heWJlX251bGwoKTsKLQlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O21heWJlX251bGxfZmFpbCYjMzQ7KSkKLQkJbWF5YmVfbnVsbF9mYWlsKCk7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7bWF5YmVfbnVsbF9ub19jaGVjayYjMzQ7KSkKJiM0MzsJCW1heWJlX251bGxfbm9fY2hlY2soKTsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RwX2J0Zl9udWxsYWJsZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHBfYnRmX251bGxhYmxlLmMKaW5kZXggYWNjYzQyZTAxZjhhOC4uODI1ZmU3YTkyZDc0ZiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHBfYnRmX251bGxhYmxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHBfYnRmX251bGxhYmxlLmMKQEAgLTIsNiAmIzQzOzIsMzEgQEAKIAogI2luY2x1ZGUgJmx0O3Rlc3RfcHJvZ3MuaCZndDsKICNpbmNsdWRlICYjMzQ7dGVzdF90cF9idGZfbnVsbGFibGUuc2tlbC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3Rlc3RfdHBfYnRmX251bGxhYmxlX3J1bnRpbWUuc2tlbC5oJiMzNDsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X251bGxhYmxlX3J1bnRpbWUodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0ZXN0X3RwX2J0Zl9udWxsYWJsZV9ydW50aW1lICpza2VsOwomIzQzOwomIzQzOwlza2VsID0gdGVzdF90cF9idGZfbnVsbGFibGVfcnVudGltZV9fb3Blbl9hbmRfbG9hZCgpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgJiMzNDtvcGVuX2FuZF9sb2FkJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlza2VsLSZndDtic3MtJmd0O21vbml0b3JlZF90aWQgPSBzeXNfZ2V0dGlkKCk7CiYjNDM7CiYjNDM7CWlmICghQVNTRVJUX09LKHRlc3RfdHBfYnRmX251bGxhYmxlX3J1bnRpbWVfX2F0dGFjaChza2VsKSwgJiMzNDthdHRhY2gmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJaWYgKCFBU1NFUlRfT0sodHJpZ2dlcl9tb2R1bGVfdGVzdF9yZWFkKDIpLCAmIzM0O3RyaWdnZXImIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7Y2FsbHMsIDIsICYjMzQ7Y2FsbHMmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O25vbm51bGxfbGVuLCAyLCAmIzM0O25vbm51bGxfbGVuJiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtudWxsX2xlbiwgMCwgJiMzNDtudWxsX2xlbiYjMzQ7KTsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CXRlc3RfdHBfYnRmX251bGxhYmxlX3J1bnRpbWVfX2Rlc3Ryb3koc2tlbCk7CiYjNDM7fQogCiB2b2lkIHRlc3RfdHBfYnRmX251bGxhYmxlKHZvaWQpCiB7CkBAIC0xMSw0ICYjNDM7MzYsNyBAQCB2b2lkIHRlc3RfdHBfYnRmX251bGxhYmxlKHZvaWQpCiAJfQogCiAJUlVOX1RFU1RTKHRlc3RfdHBfYnRmX251bGxhYmxlKTsKJiM0MzsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtydW50aW1lJiMzNDspKQomIzQzOwkJdGVzdF9udWxsYWJsZV9ydW50aW1lKCk7CiB9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvY29weV9mcm9tX3VzZXJfYnBybS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2NvcHlfZnJvbV91c2VyX2Jwcm0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5iMzM0YTE1NzQxOWU1Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2NvcHlfZnJvbV91c2VyX2Jwcm0uYwpAQCAtMCwwICYjNDM7MSwxMjMgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7dm1saW51eC5oJiMzNDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfdHJhY2luZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtlcnJuby5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7YnBmX21pc2MuaCYjMzQ7CiYjNDM7CiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBjaGFyIGV4cGVjdGVkX2RhdGFbXSA9ICYjMzQ7Zmlyc3RcMHNlY29uZC1hcmd1bWVudFwwJiMzNDsKJiM0MzsJCQkJICAgICYjMzQ7U09NRV9FTlY9YVwwT1RIRVJfRU5WPXNvbWV0aGluZyYjMzQ7OwomIzQzO3N0YXRpYyBjb25zdCBjaGFyIGV4cGVjdGVkX2FyZzBbXSA9ICYjMzQ7Zmlyc3QmIzM0OzsKJiM0MztzdGF0aWMgY29uc3QgY2hhciBleHBlY3RlZF9hcmcxW10gPSAmIzM0O3NlY29uZC1hcmd1bWVudCYjMzQ7OwomIzQzO3N0YXRpYyBjb25zdCBjaGFyIGV4cGVjdGVkX2VudjBbXSA9ICYjMzQ7U09NRV9FTlY9YSYjMzQ7OwomIzQzO3N0YXRpYyBjb25zdCBjaGFyIGV4cGVjdGVkX2VudjFbXSA9ICYjMzQ7T1RIRVJfRU5WPXNvbWV0aGluZyYjMzQ7OwomIzQzOwomIzQzO2ludCBtb25pdG9yZWRfcGlkOwomIzQzO2ludCBicHJtX2FyZ2M7CiYjNDM7aW50IGJwcm1fZW52YzsKJiM0MztpbnQgZGF0YV9sZW5fbWF0Y2g7CiYjNDM7aW50IGludmFsaWRfZmxhZ3NfcmV0OwomIzQzO2ludCBjb3B5X3JldDsKJiM0MztpbnQgc3RyX2FyZzBfcmV0OwomIzQzO2ludCBzdHJfYXJnMV9yZXQ7CiYjNDM7aW50IHN0cl9lbnYwX3JldDsKJiM0MztpbnQgc3RyX2VudjFfcmV0OwomIzQzO2ludCBkYXRhX21hdGNoOwomIzQzO2ludCBzdHJfYXJnc19tYXRjaDsKJiM0MztpbnQgc3RyX2VudnNfbWF0Y2g7CiYjNDM7CiYjNDM7ZXh0ZXJuIGJvb2wgQ09ORklHX01NVSBfX2tjb25maWcgX193ZWFrOwomIzQzOwomIzQzO2V4dGVybiBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX21tKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osCiYjNDM7CQkJCSBjb25zdCB2b2lkICp1bnNhZmVfcHRyX19pZ24sCiYjNDM7CQkJCSBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdTY0IGZsYWdzKSBfX2tzeW07CiYjNDM7CiYjNDM7ZXh0ZXJuIGludCBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osCiYjNDM7CQkJCSAgICAgY29uc3Qgdm9pZCAqdW5zYWZlX3B0cl9faWduLAomIzQzOwkJCQkgICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1NjQgZmxhZ3MpIF9fa3N5bTsKJiM0MzsKJiM0MztTRUMoJiMzNDtsc20ucy9icHJtX2NoZWNrX3NlY3VyaXR5JiMzNDspCiYjNDM7aW50IEJQRl9QUk9HKGNoZWNrX2V4ZWNfYXJncywgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKJiM0Mzt7CiYjNDM7CXUzMiBwaWQgPSBicGZfZ2V0X2N1cnJlbnRfcGlkX3RnaWQoKSAmZ3Q7Jmd0OyAzMjsKJiM0MzsJY2hhciBkYXRhW3NpemVvZihleHBlY3RlZF9kYXRhKV0gPSB7fTsKJiM0MzsJc3RydWN0IG1tX3N0cnVjdCAqbW07CiYjNDM7CWNoYXIgYXJnMFszMl0gPSB7fTsKJiM0MzsJY2hhciBhcmcxWzMyXSA9IHt9OwomIzQzOwljaGFyIGVudjBbMzJdID0ge307CiYjNDM7CWNoYXIgZW52MVszMl0gPSB7fTsKJiM0MzsJdTY0IG9mZnNldCA9IDA7CiYjNDM7CXU2NCBkYXRhX2xlbjsKJiM0MzsKJiM0MzsJaWYgKCFDT05GSUdfTU1VKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmIChwaWQgIT0gbW9uaXRvcmVkX3BpZCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwltbSA9IGJwcm0tJmd0O21tOwomIzQzOwlpZiAoIW1tKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWJwcm1fYXJnYyA9IGJwcm0tJmd0O2FyZ2M7CiYjNDM7CWJwcm1fZW52YyA9IGJwcm0tJmd0O2VudmM7CiYjNDM7CiYjNDM7CS8qIHRoaXMgaXMgdGhlIHRvdGFsIHNpemUgb2YgYXJncyBhbmQgZW52cyBzdGFydGluZyBmcm9tIGJwcm0tJmd0O3AgKi8KJiM0MzsJZGF0YV9sZW4gPSBicHJtLSZndDtleGVjIC0gYnBybS0mZ3Q7cDsKJiM0MzsJZGF0YV9sZW5fbWF0Y2ggPSBkYXRhX2xlbiA9PSBzaXplb2YoZXhwZWN0ZWRfZGF0YSk7CiYjNDM7CiYjNDM7CWludmFsaWRfZmxhZ3NfcmV0ID0gYnBmX2NvcHlfZnJvbV91c2VyX21tKGRhdGEsCiYjNDM7CQkJCQkJICBzaXplb2YoZGF0YSksICh2b2lkICopYnBybS0mZ3Q7cCwgbW0sIH4wVUxMKTsKJiM0MzsKJiM0MzsJY29weV9yZXQgPSBicGZfY29weV9mcm9tX3VzZXJfbW0oZGF0YSwgc2l6ZW9mKGRhdGEpLCAodm9pZCAqKWJwcm0tJmd0O3AsCiYjNDM7CQkJCQkgbW0sIDApOwomIzQzOwlpZiAoY29weV9yZXQpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJZGF0YV9tYXRjaCA9CiYjNDM7CQkhX19idWlsdGluX21lbWNtcChkYXRhLCBleHBlY3RlZF9kYXRhLCBzaXplb2YoZXhwZWN0ZWRfZGF0YSkpOwomIzQzOwomIzQzOwkvKiBhcmcwIGlzIGF0IGJwcm0tJmd0O3AgKi8KJiM0MzsJc3RyX2FyZzBfcmV0ID0gYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cihhcmcwLCBzaXplb2YoYXJnMCksCiYjNDM7CQkJCQkJICh2b2lkICopKGJwcm0tJmd0O3AgJiM0Mzsgb2Zmc2V0KSwKJiM0MzsJCQkJCQkgbW0sIEJQRl9GX1BBRF9aRVJPUyk7CiYjNDM7CWlmIChzdHJfYXJnMF9yZXQgIT0gc2l6ZW9mKGV4cGVjdGVkX2FyZzApKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CW9mZnNldCAmIzQzOz0gc3RyX2FyZzBfcmV0OwomIzQzOwomIzQzOwkvKiBhcmcxIGlzIGF0IGJwcm0tJmd0O3AgJiM0Mzsgc2l6ZW9mKGFyZzApICovCiYjNDM7CXN0cl9hcmcxX3JldCA9IGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIoYXJnMSwgc2l6ZW9mKGFyZzEpLAomIzQzOwkJCQkJCSAodm9pZCAqKShicHJtLSZndDtwICYjNDM7IG9mZnNldCksCiYjNDM7CQkJCQkJIG1tLCBCUEZfRl9QQURfWkVST1MpOwomIzQzOwlpZiAoc3RyX2FyZzFfcmV0ICE9IHNpemVvZihleHBlY3RlZF9hcmcxKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwlvZmZzZXQgJiM0Mzs9IHN0cl9hcmcxX3JldDsKJiM0MzsKJiM0MzsJLyogZW52MCBpcyBhdCBicHJtLSZndDtwICYjNDM7IHNpemVvZihhcmcwKSAmIzQzOyBzaXplb2YoYXJnMSkgKi8KJiM0MzsJc3RyX2VudjBfcmV0ID0gYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cihlbnYwLCBzaXplb2YoZW52MCksCiYjNDM7CQkJCQkJICh2b2lkICopKGJwcm0tJmd0O3AgJiM0Mzsgb2Zmc2V0KSwKJiM0MzsJCQkJCQkgbW0sIEJQRl9GX1BBRF9aRVJPUyk7CiYjNDM7CWlmIChzdHJfZW52MF9yZXQgIT0gc2l6ZW9mKGV4cGVjdGVkX2VudjApKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CW9mZnNldCAmIzQzOz0gc3RyX2VudjBfcmV0OwomIzQzOwomIzQzOwkvKiBlbnYxIGlzIGF0IGJwcm0tJmd0O3AgJiM0Mzsgc2l6ZW9mKGFyZzApICYjNDM7IHNpemVvZihhcmcxKSAmIzQzOyBzaXplb2YoZW52MCkgKi8KJiM0MzsJc3RyX2VudjFfcmV0ID0gYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cihlbnYxLCBzaXplb2YoZW52MSksCiYjNDM7CQkJCQkJICh2b2lkICopKGJwcm0tJmd0O3AgJiM0Mzsgb2Zmc2V0KSwKJiM0MzsJCQkJCQkgbW0sIEJQRl9GX1BBRF9aRVJPUyk7CiYjNDM7CWlmIChzdHJfZW52MV9yZXQgIT0gc2l6ZW9mKGV4cGVjdGVkX2VudjEpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXN0cl9hcmdzX21hdGNoID0KJiM0MzsJCSFfX2J1aWx0aW5fbWVtY21wKGFyZzAsIGV4cGVjdGVkX2FyZzAsIHNpemVvZihleHBlY3RlZF9hcmcwKSkgJmFtcDsmYW1wOwomIzQzOwkJIV9fYnVpbHRpbl9tZW1jbXAoYXJnMSwgZXhwZWN0ZWRfYXJnMSwgc2l6ZW9mKGV4cGVjdGVkX2FyZzEpKTsKJiM0MzsJc3RyX2VudnNfbWF0Y2ggPQomIzQzOwkJIV9fYnVpbHRpbl9tZW1jbXAoZW52MCwgZXhwZWN0ZWRfZW52MCwgc2l6ZW9mKGV4cGVjdGVkX2VudjApKSAmYW1wOyZhbXA7CiYjNDM7CQkhX19idWlsdGluX21lbWNtcChlbnYxLCBleHBlY3RlZF9lbnYxLCBzaXplb2YoZXhwZWN0ZWRfZW52MSkpOwomIzQzOwomIzQzOwlyZXR1cm4gZGF0YV9tYXRjaCAmYW1wOyZhbXA7IHN0cl9hcmdzX21hdGNoICZhbXA7JmFtcDsgc3RyX2VudnNfbWF0Y2ggPyAtRVBFUk0gOiAwOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yYXdfdHBfbnVsbF9mYWlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmF3X3RwX251bGxfZmFpbC5jCmluZGV4IDcyNWQ3M2M5ZmZlMTMuLjE2MzEyNDc5M2QwYTYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yYXdfdHBfbnVsbF9mYWlsLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Jhd190cF9udWxsX2ZhaWwuYwpAQCAtMiwyMiAmIzQzOzIsMzQgQEAKIC8qIENvcHlyaWdodCAoYykgMjAyNCBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi8KIAogI2luY2x1ZGUgJmx0O3ZtbGludXguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YnBmL2JwZl90cmFjaW5nLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O2JwZl9taXNjLmgmIzM0OwogCiBjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CiAKLS8qIEVuc3VyZSBtb2R1bGUgcGFyYW1ldGVyIGhhcyBQVFJfTUFZQkVfTlVMTCAqLwomIzQzO2V4dGVybiBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmJwZl90YXNrX2FjcXVpcmUoc3RydWN0IHRhc2tfc3RydWN0ICpwKSBfX2tzeW07CiYjNDM7ZXh0ZXJuIHZvaWQgYnBmX3Rhc2tfcmVsZWFzZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIF9fa3N5bTsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIEVuc3VyZSB0aGUgbW9kdWxlIHRyYWNlcG9pbnQgYXJndW1lbnQgaXMgdHJ1c3RlZC1vci1OVUxMIHdoaWxlIGFsbG93aW5nCiYjNDM7ICogYSBmYXVsdC1wcm90ZWN0ZWQgcmVhZCB3aXRob3V0IGFuIGV4cGxpY2l0IE5VTEwgY2hlY2suCiYjNDM7ICovCiBTRUMoJiMzNDt0cF9idGYvYnBmX3Rlc3Rtb2RfdGVzdF9yYXdfdHBfbnVsbF90cCYjMzQ7KQotX19mYWlsdXJlIF9fbXNnKCYjMzQ7UjEgaW52YWxpZCBtZW0gYWNjZXNzICYjMzk7dHJ1c3RlZF9wdHJfb3JfbnVsbF8mIzM5OyYjMzQ7KQomIzQzO19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKQomIzQzO19fbXNnKCYjMzQ7UjE9dHJ1c3RlZF9wdHJfb3JfbnVsbF9za19idWZmJiMzNDspCiBpbnQgdGVzdF9yYXdfdHBfbnVsbF9icGZfdGVzdG1vZF90ZXN0X3Jhd190cF9udWxsX2FyZ18xKHZvaWQgKmN0eCkgewogICAgIGFzbSB2b2xhdGlsZSgmIzM0O3IxID0gKih1NjQgKikocjEgJiM0MzswKTsgcjEgPSAqKHU2NCAqKShyMSAmIzQzOzApOyYjMzQ7IDo6OiBfX2Nsb2JiZXJfYWxsKTsKICAgICByZXR1cm4gMDsKIH0KIAotLyogQ2hlY2sgTlVMTCBtYXJraW5nICovCiYjNDM7LyoKJiM0MzsgKiBFbnN1cmUgc2NoZWRfcGlfc2V0cHJpbyYjMzk7cyBzZWNvbmQgYXJndW1lbnQgaXMgdHJ1c3RlZC1vci1OVUxMIHdoaWxlIGFsbG93aW5nCiYjNDM7ICogYSBmYXVsdC1wcm90ZWN0ZWQgcmVhZCB3aXRob3V0IGFuIGV4cGxpY2l0IE5VTEwgY2hlY2suCiYjNDM7ICovCiBTRUMoJiMzNDt0cF9idGYvc2NoZWRfcGlfc2V0cHJpbyYjMzQ7KQotX19mYWlsdXJlIF9fbXNnKCYjMzQ7UjEgaW52YWxpZCBtZW0gYWNjZXNzICYjMzk7dHJ1c3RlZF9wdHJfb3JfbnVsbF8mIzM5OyYjMzQ7KQomIzQzO19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKQomIzQzO19fbXNnKCYjMzQ7UjE9dHJ1c3RlZF9wdHJfb3JfbnVsbF90YXNrX3N0cnVjdCYjMzQ7KQogaW50IHRlc3RfcmF3X3RwX251bGxfc2NoZWRfcGlfc2V0cHJpb19hcmdfMih2b2lkICpjdHgpIHsKICAgICBhc20gdm9sYXRpbGUoJiMzNDtyMSA9ICoodTY0ICopKHIxICYjNDM7OCk7IHIxID0gKih1NjQgKikocjEgJiM0MzswKTsmIzM0OyA6OjogX19jbG9iYmVyX2FsbCk7CiAgICAgcmV0dXJuIDA7CkBAIC02MCw3ICYjNDM7NzIsOCBAQCBpbnQgdGVzdF90cF9idGZfc2lnbmFsX2RlbGl2ZXJfaW5mb19ub19kZXJlZih2b2lkICpjdHgpCiB9CiAKIFNFQygmIzM0O3RwX2J0Zi9zY2hlZF9wcm9jZXNzX3dhaXQmIzM0OykKLV9fZmFpbHVyZSBfX21zZygmIzM0O1IxIGludmFsaWQgbWVtIGFjY2VzcyAmIzM5O3RydXN0ZWRfcHRyX29yX251bGxfJiMzOTsmIzM0OykKJiM0MztfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMikKJiM0MztfX21zZygmIzM0O1IxPXRydXN0ZWRfcHRyX29yX251bGxfcGlkJiMzNDspCiBpbnQgdGVzdF9yYXdfdHBfbnVsbF9zY2hlZF9wcm9jZXNzX3dhaXRfYXJnXzEodm9pZCAqY3R4KQogewogCWFzbSB2b2xhdGlsZSgmIzM0O3IxID0gKih1NjQgKikocjEgJiM0MzswKTsgcjEgPSAqKHUzMiAqKShyMSAmIzQzOzApOyYjMzQ7IDo6OiBfX2Nsb2JiZXJfYWxsKTsKQEAgLTc1LDMgJiM0Mzs4OCw1OCBAQCBpbnQgdGVzdF9yYXdfdHBfbnVsbF9zY2hlZF9wcm9jZXNzX3dhaXRfYXJnXzFfY2hlY2tlZCh2b2lkICpjdHgpCiAJCSAgICAgJiMzNDtyMSA9ICoodTMyICopKHIxICYjNDM7MCk7JiMzNDsgOjo6IF9fY2xvYmJlcl9hbGwpOwogCXJldHVybiAwOwogfQomIzQzOwomIzQzO1NFQygmIzM0O3RwX2J0Zi9zY2hlZF9waV9zZXRwcmlvJiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbG9nX2xldmVsKDIpCiYjNDM7X19tc2coJiMzNDtSMT11bnRydXN0ZWRfcHRyX3Rhc2tfc3RydWN0JiMzNDspCiYjNDM7X19tc2coJiMzNDtSMSBtdXN0IGJlIGEgcmN1IHBvaW50ZXImIzM0OykKJiM0MztpbnQgQlBGX1BST0codHJ1c3RlZF9vcl9udWxsX3dhbGtfaXNfdW50cnVzdGVkLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCiYjNDM7CSAgICAgc3RydWN0IHRhc2tfc3RydWN0ICpwaV90YXNrKQomIzQzO3sKJiM0MzsJc3RydWN0IHRhc2tfc3RydWN0ICpwYXJlbnQsICphY3F1aXJlZDsKJiM0MzsKJiM0MzsJcGFyZW50ID0gcGlfdGFzay0mZ3Q7cmVhbF9wYXJlbnQ7CiYjNDM7CWFjcXVpcmVkID0gYnBmX3Rhc2tfYWNxdWlyZShwYXJlbnQpOwomIzQzOwlpZiAoYWNxdWlyZWQpCiYjNDM7CQlicGZfdGFza19yZWxlYXNlKGFjcXVpcmVkKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3RwX2J0Zi9zY2hlZF9waV9zZXRwcmlvJiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7UjEgbXVzdCBiZSBhIHJjdSBwb2ludGVyJiMzNDspCiYjNDM7aW50IEJQRl9QUk9HKGRlcml2ZWRfcHRyX251bGxfY2hlY2tfZG9lc19ub3RfcmVzdG9yZV90cnVzdCwKJiM0MzsJICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCB0YXNrX3N0cnVjdCAqcGlfdGFzaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50LCAqYWNxdWlyZWQ7CiYjNDM7CiYjNDM7CXBhcmVudCA9IHBpX3Rhc2stJmd0O3JlYWxfcGFyZW50OwomIzQzOwlpZiAoIXBhcmVudCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlhY3F1aXJlZCA9IGJwZl90YXNrX2FjcXVpcmUocGFyZW50KTsKJiM0MzsJaWYgKGFjcXVpcmVkKQomIzQzOwkJYnBmX3Rhc2tfcmVsZWFzZShhY3F1aXJlZCk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIEluIGNvbnRyYXN0LCBjaGVja2luZyB0aGUgb3JpZ2luYWwgdHJ1c3RlZC1vci1OVUxMIHBvaW50ZXIgcmVtb3ZlcwomIzQzOyAqIFBUUl9NQVlCRV9OVUxMIHdoaWxlIHJldGFpbmluZyBQVFJfVFJVU1RFRC4KJiM0MzsgKi8KJiM0MztTRUMoJiMzNDt0cF9idGYvc2NoZWRfcGlfc2V0cHJpbyYjMzQ7KQomIzQzO19fc3VjY2VzcwomIzQzO2ludCBCUEZfUFJPRyhvcmlnaW5hbF9wdHJfbnVsbF9jaGVja19yZXRhaW5zX3RydXN0LAomIzQzOwkgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHRhc2tfc3RydWN0ICpwaV90YXNrKQomIzQzO3sKJiM0MzsJc3RydWN0IHRhc2tfc3RydWN0ICphY3F1aXJlZDsKJiM0MzsKJiM0MzsJaWYgKCFwaV90YXNrKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWFjcXVpcmVkID0gYnBmX3Rhc2tfYWNxdWlyZShwaV90YXNrKTsKJiM0MzsJaWYgKGFjcXVpcmVkKQomIzQzOwkJYnBmX3Rhc2tfcmVsZWFzZShhY3F1aXJlZCk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RwX2J0Zl9udWxsYWJsZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdHBfYnRmX251bGxhYmxlLmMKaW5kZXggY2YwNTQ3YTYxM2ZmYy4uYjc5MTQyMjRiYTE5NCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdHBfYnRmX251bGxhYmxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdHBfYnRmX251bGxhYmxlLmMKQEAgLTcsNyAmIzQzOzcsNyBAQAogI2luY2x1ZGUgJiMzNDticGZfbWlzYy5oJiMzNDsKIAogU0VDKCYjMzQ7dHBfYnRmL2JwZl90ZXN0bW9kX3Rlc3RfbnVsbGFibGVfYmFyZV90cCYjMzQ7KQotX19mYWlsdXJlIF9fbXNnKCYjMzQ7UjEgaW52YWxpZCBtZW0gYWNjZXNzICYjMzk7dHJ1c3RlZF9wdHJfb3JfbnVsbF8mIzM5OyYjMzQ7KQomIzQzO19fc3VjY2VzcwogaW50IEJQRl9QUk9HKGhhbmRsZV90cF9idGZfbnVsbGFibGVfYmFyZTEsIHN0cnVjdCBicGZfdGVzdG1vZF90ZXN0X3JlYWRfY3R4ICpudWxsYWJsZV9jdHgpCiB7CiAJcmV0dXJuIG51bGxhYmxlX2N0eC0mZ3Q7bGVuOwpAQCAtMjEsNCAmIzQzOzIxLDQ3IEBAIGludCBCUEZfUFJPRyhoYW5kbGVfdHBfYnRmX251bGxhYmxlX2JhcmUyLCBzdHJ1Y3QgYnBmX3Rlc3Rtb2RfdGVzdF9yZWFkX2N0eCAqbnVsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztTRUMoJiMzNDt0cF9idGYvYnBmX3Rlc3Rtb2RfdGVzdF9udWxsYWJsZV9iYXJlX3RwJiMzNDspCiYjNDM7X19zdWNjZXNzCiYjNDM7aW50IEJQRl9QUk9HKGhhbmRsZV90cF9idGZfbnVsbGFibGVfbWVtLCBzdHJ1Y3QgYnBmX3Rlc3Rtb2RfdGVzdF9yZWFkX2N0eCAqbnVsbGFibGVfY3R4KQomIzQzO3sKJiM0MzsJcmV0dXJuIG51bGxhYmxlX2N0eC0mZ3Q7YnVmWzBdOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDt0cF9idGYvYnBmX3Rlc3Rtb2RfdGVzdF9udWxsYWJsZV9iYXJlX3RwJiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7cG9pbnRlciBhcml0aG1ldGljIG9uIHRydXN0ZWRfcHRyX29yX251bGxfIHByb2hpYml0ZWQmIzM0OykKJiM0MztpbnQgQlBGX1BST0coaGFuZGxlX3RwX2J0Zl9udWxsYWJsZV9hcml0aCwgc3RydWN0IGJwZl90ZXN0bW9kX3Rlc3RfcmVhZF9jdHggKm51bGxhYmxlX2N0eCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSgmIzM0OyVbY3R4XSAmIzQzOz0gMSYjMzQ7IDogW2N0eF0gJiMzNDsmIzQzO3ImIzM0OyhudWxsYWJsZV9jdHgpKTsKJiM0MzsJcmV0dXJuIG51bGxhYmxlX2N0eC0mZ3Q7bGVuOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDt0cF9idGYvYnBmX3Rlc3Rtb2RfdGVzdF9udWxsYWJsZV9iYXJlX3RwJiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7aW52YWxpZCBtZW0gYWNjZXNzICYjMzk7dHJ1c3RlZF9wdHJfb3JfbnVsbF8mIzM5OyYjMzQ7KQomIzQzO2ludCBCUEZfUFJPRyhoYW5kbGVfdHBfYnRmX251bGxhYmxlX2F0b21pY19ybXcsCiYjNDM7CSAgICAgc3RydWN0IGJwZl90ZXN0bW9kX3Rlc3RfcmVhZF9jdHggKm51bGxhYmxlX2N0eCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDtyMSA9ICVbY3R4XTsmIzM0OwomIzQzOwkJICAgICAgJiMzNDt3MiA9IDE7JiMzNDsKJiM0MzsJCSAgICAgICYjMzQ7bG9jayAqKHUzMiAqKShyMSAmIzQzOyAlW2xlbl0pICYjNDM7PSB3MjsmIzM0OwomIzQzOwkJICAgICAgOgomIzQzOwkJICAgICAgOiBbY3R4XSAmIzM0O3ImIzM0OyhudWxsYWJsZV9jdHgpLAomIzQzOwkJCV9faW1tX2NvbnN0KGxlbiwKJiM0MzsJCQkJICAgIG9mZnNldG9mKHN0cnVjdCBicGZfdGVzdG1vZF90ZXN0X3JlYWRfY3R4LAomIzQzOwkJCQkJICAgICBsZW4pKQomIzQzOwkJICAgICAgOiAmIzM0O3IxJiMzNDssICYjMzQ7cjImIzM0OywgJiMzNDttZW1vcnkmIzM0Oyk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsjaWZkZWYgX19CUEZfRkVBVFVSRV9MT0FEX0FDUV9TVE9SRV9SRUwKJiM0MztTRUMoJiMzNDt0cF9idGYvYnBmX3Rlc3Rtb2RfdGVzdF9udWxsYWJsZV9iYXJlX3RwJiMzNDspCiYjNDM7X19mYWlsdXJlCiYjNDM7X19tc2coJiMzNDtCUEZfQVRPTUlDIGxvYWRzIGZyb20gUnt7WzAtOV0mIzQzO319IHRydXN0ZWRfcHRyX29yX251bGxfJiMzNDspCiYjNDM7aW50IEJQRl9QUk9HKGhhbmRsZV90cF9idGZfbnVsbGFibGVfbG9hZF9hY3F1aXJlLAomIzQzOwkgICAgIHN0cnVjdCBicGZfdGVzdG1vZF90ZXN0X3JlYWRfY3R4ICpudWxsYWJsZV9jdHgpCiYjNDM7ewomIzQzOwlyZXR1cm4gX19hdG9taWNfbG9hZF9uKCZhbXA7bnVsbGFibGVfY3R4LSZndDtsZW4sIF9fQVRPTUlDX0FDUVVJUkUpOwomIzQzO30KJiM0MzsjZW5kaWYKJiM0MzsKIGNoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RwX2J0Zl9udWxsYWJsZV9ydW50aW1lLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90cF9idGZfbnVsbGFibGVfcnVudGltZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjVjOWM3Zjk0MDQwZGMKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90cF9idGZfbnVsbGFibGVfcnVudGltZS5jCkBAIC0wLDAgJiM0MzsxLDM1IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O3ZtbGludXguaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX3RyYWNpbmcuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0Oy4uL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuaCYjMzQ7CiYjNDM7CiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwomIzQzOwomIzQzO2ludCBtb25pdG9yZWRfdGlkOwomIzQzO2ludCBjYWxsczsKJiM0MztfX3U2NCBub25udWxsX2xlbjsKJiM0MztfX3U2NCBudWxsX2xlbjsKJiM0MzsKJiM0MztTRUMoJiMzNDt0cF9idGYvYnBmX3Rlc3Rtb2RfdGVzdF9udWxsYWJsZV9iYXJlX3RwJiMzNDspCiYjNDM7aW50IEJQRl9QUk9HKGhhbmRsZV9udWxsYWJsZV9ydW50aW1lLAomIzQzOwkgICAgIHN0cnVjdCBicGZfdGVzdG1vZF90ZXN0X3JlYWRfY3R4ICpudWxsYWJsZV9jdHgpCiYjNDM7ewomIzQzOwlfX3UzMiB0aWQgPSBicGZfZ2V0X2N1cnJlbnRfcGlkX3RnaWQoKTsKJiM0MzsJX191NjQgbGVuOwomIzQzOwlpbnQgY2FsbDsKJiM0MzsKJiM0MzsJaWYgKHRpZCAhPSBtb25pdG9yZWRfdGlkKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWxlbiA9IG51bGxhYmxlX2N0eC0mZ3Q7bGVuOwomIzQzOwljYWxsID0gY2FsbHMmIzQzOyYjNDM7OwomIzQzOwomIzQzOwlpZiAoY2FsbCA9PSAwKQomIzQzOwkJbm9ubnVsbF9sZW4gPSBsZW47CiYjNDM7CWVsc2UgaWYgKGNhbGwgPT0gMSkKJiM0MzsJCW51bGxfbGVuID0gbGVuOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbHNtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbHNtLmMKaW5kZXggYzcyNGJmMzg5ZjVjNi4uZmFjMTMzZDkwZjVlNiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xzbS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sc20uYwpAQCAtMTYyLDEzICYjNDM7MTYyLDEzIEBAIF9fbmFrZWQgaW50IGRpc2FibGVkX2hvb2tfdGVzdDModm9pZCAqY3R4KQogCiBTRUMoJiMzNDtsc20vbW1hcF9maWxlJiMzNDspCiBfX2Rlc2NyaXB0aW9uKCYjMzQ7bm90IG51bGwgY2hlY2tpbmcgbnVsbGFibGUgcG9pbnRlciBpbiBicGZfbHNtX21tYXBfZmlsZSYjMzQ7KQotX19mYWlsdXJlIF9fbXNnKCYjMzQ7UjEgaW52YWxpZCBtZW0gYWNjZXNzICYjMzk7dHJ1c3RlZF9wdHJfb3JfbnVsbF8mIzM5OyYjMzQ7KQomIzQzO19fc3VjY2VzcwogaW50IEJQRl9QUk9HKG5vX251bGxfY2hlY2ssIHN0cnVjdCBmaWxlICpmaWxlKQogewotCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiYjNDM7CWlub190IGlubzsKIAotCWlub2RlID0gZmlsZS0mZ3Q7Zl9pbm9kZTsKLQlfX3NpbmsoaW5vZGUpOwomIzQzOwlpbm8gPSBmaWxlLSZndDtmX2lub2RlLSZndDtpX2lubzsKJiM0MzsJX19zaW5rKGlubyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE4OCw2ICYjNDM7MTg4LDE2IEBAIGludCBCUEZfUFJPRyhudWxsX2NoZWNrLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIAlyZXR1cm4gMDsKIH0KIAomIzQzO1NFQygmIzM0O2xzbS9tbWFwX2ZpbGUmIzM0OykKJiM0MztfX2Rlc2NyaXB0aW9uKCYjMzQ7c3RvcmUgdGhyb3VnaCB0cnVzdGVkLW9yLW51bGwgZmlsZSBpcyByZWplY3RlZCYjMzQ7KQomIzQzO19fZmFpbHVyZQomIzQzO19fbXNnKCYjMzQ7Unt7WzAtOV0mIzQzO319IGludmFsaWQgbWVtIGFjY2VzcyAmIzM5O3RydXN0ZWRfcHRyX29yX251bGxfJiMzOTsmIzM0OykKJiM0MztpbnQgQlBGX1BST0coc3RvcmVfdGhyb3VnaF90cnVzdGVkX29yX251bGxfZmlsZSwgc3RydWN0IGZpbGUgKmZpbGUpCiYjNDM7ewomIzQzOwlmaWxlLSZndDtmX2ZsYWdzID0gMDsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogU0VDKCYjMzQ7bHNtX2Nncm91cC9maWxlX29wZW4mIzM0OykKIF9fZGVzY3JpcHRpb24oJiMzNDtzbGVlcGFibGUgbHNtX2Nncm91cCBwcm9ncmFtIGlzIHJlamVjdGVkJiMzNDspCiBfX2ZhaWx1cmUgX19tc2coJiMzNDtQcm9ncmFtIG9mIHRoaXMgdHlwZSBjYW5ub3QgYmUgc2xlZXBhYmxlJiMzNDspCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdmZzX2FjY2VwdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3Zmc19hY2NlcHQuYwppbmRleCA1NTM5OGMwNDI5MGE4Li4xN2MxNTQyY2M3ZTE3IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdmZzX2FjY2VwdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl92ZnNfYWNjZXB0LmMKQEAgLTEwMCw0ICYjNDM7MTAwLDE4IEBAIGludCBCUEZfUFJPRyhpbm9kZV9yZW5hbWUsIHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKIAlyZXR1cm4gMDsKIH0KIAomIzQzO1NFQygmIzM0O2xzbS5zL2lub2RlX3JlbmFtZSYjMzQ7KQomIzQzO19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKQomIzQzO19fbXNnKCYjMzQ7Unt7WzAtOV0mIzQzO319PXRydXN0ZWRfcHRyX29yX251bGxfaW5vZGUmIzM0OykKJiM0MztpbnQgQlBGX1BST0coaW5vZGVfcmVuYW1lX25vX251bGxfY2hlY2ssIHN0cnVjdCBpbm9kZSAqb2xkX2RpciwKJiM0MzsJICAgICBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKm5ld19kaXIsCiYjNDM7CSAgICAgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSwgdW5zaWduZWQgaW50IGZsYWdzKQomIzQzO3sKJiM0MzsJaW5vX3QgaW5vID0gbmV3X2RlbnRyeS0mZ3Q7ZF9pbm9kZS0mZ3Q7aV9pbm87CiYjNDM7CiYjNDM7CWlmIChpbm8gPT0gMCkKJiM0MzsJCXJldHVybiAtRUFDQ0VTOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdmZzX3JlamVjdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3Zmc19yZWplY3QuYwppbmRleCA4ZjBjNDU0MjFmODkzLi4yYTA4MTMyNTgxODNlIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdmZzX3JlamVjdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl92ZnNfcmVqZWN0LmMKQEAgLTE1OSwxOCAmIzQzOzE1OSw0IEBAIGludCBCUEZfUFJPRyhwYXRoX2RfcGF0aF9rZnVuY19ub25fbHNtLCBzdHJ1Y3QgcGF0aCAqcGF0aCwgc3RydWN0IGZpbGUgKmYpCiAJcmV0dXJuIDA7CiB9CiAKLVNFQygmIzM0O2xzbS5zL2lub2RlX3JlbmFtZSYjMzQ7KQotX19mYWlsdXJlIF9fbXNnKCYjMzQ7aW52YWxpZCBtZW0gYWNjZXNzICYjMzk7dHJ1c3RlZF9wdHJfb3JfbnVsbF8mIzM5OyYjMzQ7KQotaW50IEJQRl9QUk9HKGlub2RlX3JlbmFtZSwgc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LAotCSAgICAgc3RydWN0IGlub2RlICpuZXdfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5LAotCSAgICAgdW5zaWduZWQgaW50IGZsYWdzKQotewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBuZXdfZGVudHJ5LSZndDtkX2lub2RlOwotCWlub190IGlubzsKLQotCWlubyA9IGlub2RlLSZndDtpX2lubzsKLQlpZiAoaW5vID09IDApCi0JCXJldHVybiAtRUFDQ0VTOwotCXJldHVybiAwOwotfQogY2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMKaW5kZXggZjc5OGJiYmI0ZDEzYy4uMmJhNmE4M2QyNDNmNSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jCkBAIC03MDIsNiAmIzQzOzcwMiw3IEBAIGJwZl90ZXN0bW9kX3Rlc3RfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGtvYmplY3QgKmtvYmosCiAJaWYgKGJwZl90ZXN0bW9kX2xvb3BfdGVzdCgxMDEpICZndDsgMTAwKQogCQl0cmFjZV9icGZfdGVzdG1vZF90ZXN0X3JlYWQoY3VycmVudCwgJmFtcDtjdHgpOwogCiYjNDM7CXRyYWNlX2JwZl90ZXN0bW9kX3Rlc3RfbnVsbGFibGVfYmFyZV90cCgmYW1wO2N0eCk7CiAJdHJhY2VfYnBmX3Rlc3Rtb2RfdGVzdF9udWxsYWJsZV9iYXJlX3RwKE5VTEwpOwogCiAJLyogTWFnaWMgbnVtYmVyIHRvIGVuYWJsZSB3cml0YWJsZSB0cCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2NoZWRfZXh0L21heWJlX251bGxfZmFpbF9kc3AuYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zY2hlZF9leHQvbWF5YmVfbnVsbF9mYWlsX2RzcC5icGYuYwppbmRleCBlYzcyNGQ3YjMzZDE4Li5lY2FhMzYzNTVjYWVjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zY2hlZF9leHQvbWF5YmVfbnVsbF9mYWlsX2RzcC5icGYuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zY2hlZF9leHQvbWF5YmVfbnVsbF9mYWlsX2RzcC5icGYuYwpAQCAtNywxNCAmIzQzOzcsMTMgQEAKIAogY2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwogCi11NjQgdnRpbWVfdGVzdDsKLQogdm9pZCBCUEZfU1RSVUNUX09QUyhtYXliZV9udWxsX3J1bm5pbmcsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHt9CiAKIHZvaWQgQlBGX1NUUlVDVF9PUFMobWF5YmVfbnVsbF9mYWlsX2Rpc3BhdGNoLCBzMzIgY3B1LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiB7Ci0JdnRpbWVfdGVzdCA9IHAtJmd0O3NjeC5kc3FfdnRpbWU7CiYjNDM7CS8qIFBvaW50ZXIgYXJpdGhtZXRpYyBvbiBhIHRydXN0ZWQtb3ItTlVMTCBwb2ludGVyIG11c3QgYmUgcmVqZWN0ZWQuICovCiYjNDM7CWFzbSB2b2xhdGlsZSgmIzM0OyVbcF0gJiM0Mzs9IDAmIzM0OyA6IFtwXSAmIzM0OyYjNDM7ciYjMzQ7KHApKTsKIH0KIAogU0VDKCYjMzQ7LnN0cnVjdF9vcHMubGluayYjMzQ7KQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyMDYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMjgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggU2VyaWVzIGZvciBLTVNBTiBOZWVkcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIHNlcmllcyBuZWNlc3NpdGF0ZXMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLCBiZXlvbmQgdGhlIHN0YW5kYXJkIEtBU0FOIGNvdmVyYWdlIHdlIGFscmVhZHkgaGF2ZS4gV2UgbmVlZCB0byBiZSBvbiB0aGUgbG9va291dCBmb3IgY29kZSBjaGFuZ2VzIHRoYXQgKmludHJvZHVjZSogb3IgKmV4cG9zZSogdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHRoZSBraW5kIG9mIGlzc3VlcyBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gY2F0Y2guCgpGaXJzdCwgSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgY2hhbmdlcy4KCjEuICBgZnMvZXhlYy5jYDogVGhpcyBjaGFuZ2UsIHNldHRpbmcgYGJwcm0tJmd0O21tID0gTlVMTGAsIGlzIGEgbWVtb3J5IG1hbmFnZW1lbnQgbGlmZWN5Y2xlIGNoYW5nZS4gSXQmIzM5O3MgYWJvdXQgcHJldmVudGluZyBVQUYgYW5kIGRhbmdsaW5nIHBvaW50ZXIgcHJvYmxlbXMuIFRoaXMgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgcHJlY2F1dGlvbjsgaG93ZXZlciwgaXQmIzM5O3MgYWJvdXQgbWFraW5nIGNvZGUgc2FmZSBub3QgYWJvdXQgaW50cm9kdWNpbmcgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBJIGRvbiYjMzk7dCBzZWUgYW55dGhpbmcgaGVyZSB0aGF0IHNjcmVhbXMgZm9yIEtNU0FOIGF0dGVudGlvbi4KCjIuICBgaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaGAsIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgOiBUaGlzIGlzIHRoZSBpbnRlcmVzdGluZyBzZWN0aW9uLiBXZSYjMzk7cmUgZ2V0dGluZyBhIGJ1bmNoIG9mIHVwZGF0ZXMgcmVsYXRlZCB0byBCUEYgYW5kIGBCVEZgLiBXZSYjMzk7cmUgZW5hYmxpbmcgc2FmZSBkZXJlZmVyZW5jaW5nIGFuZCBhbGxvd2luZyBCUEYgdG8gc2FmZWx5IGFjY2VzcyBgYnBybS0mZ3Q7bW1gLiBUaGUgYWRkaXRpb24gb2YgYGJwZl9pc190cnVzdGVkX29yX251bGxfYnRmX3B0cmAgYW5kIGFsbG93aW5nIGZhdWx0LXByb3RlY3RlZCBkZXJlZmVyZW5jZXMgc291bmRzIGxpa2UgaXQgY291bGQgcG90ZW50aWFsbHkgaW50cm9kdWNlIHN1YnRsZSBpc3N1ZXMuIFRoZSBgUFRSX1VOVFJVU1RFRGAgbWFya2luZyBpcyBpbnRlcmVzdGluZy4gV2hpbGUgdGhpcyBzZWN0aW9uIGRlYWxzIHdpdGggcG90ZW50aWFsbHkgYWNjZXNzaW5nIG1lbW9yeSwgaXQmIzM5O3MgcHJpbWFyaWx5IGFib3V0ICpjb250cm9sbGluZyogYWNjZXNzLiBUaGUgZ29hbCBhcHBlYXJzIHRvIGJlICpwcmV2ZW50aW9uKiBvZiBiYWQgdGhpbmdzIGhhcHBlbmluZywgbm90IHRoZSAqaW50cm9kdWN0aW9uKiBvZiB1bmluaXRpYWxpemVkIHJlYWQgcmlza3MuIFRoZSBjaGFuZ2VzIGFyZSBkZXNpZ25lZCB0byBwcm90ZWN0IGFnYWluc3QgZmF1bHRpbmcgYW5kIGRlcmVmZXJlbmNpbmcgbnVsbCBwb2ludGVycy4gV2UmIzM5O3JlIG1ha2luZyB0aGluZ3MgKnNhZmVyKiwgbm90IG5lY2Vzc2FyaWx5IHJpc2tpZXIgZnJvbSBhIEtNU0FOIHBlcnNwZWN0aXZlLiBXZSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGlzIGJlY2F1c2UgdGhlIGBQVFJfVU5UUlVTVEVEYCBtaWdodCBoYXZlIHVuaW5pdGlhbGl6ZWQgcmVhZC4KCjMuICBga2VybmVsL2JwZi9oZWxwZXJzLmNgOiBOb3cgd2UmIzM5O3JlIGdldHRpbmcgdG8gdGhlIGhlYXJ0IG9mIG1lbW9yeSBjb3B5aW5nOiBgYnBmX2NvcHlfZnJvbV91c2VyX21tYCBhbmQgaXRzIHN0cmluZyB2YXJpYW50LCBgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cmAuIEl0IHJlZmFjdG9ycyBgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tgIHRvIHVzZSB0aGUgbmV3IGhlbHBlciwgYW5kIHJlZ2lzdGVycyBrZnVuY3MuIFRoaXMgaXMgYSBwb3RlbnRpYWwgS01TQU4gdGFyZ2V0LiBXZSBoYXZlIGBkc3RgIG1lbW9yeSB0aGF0IHdlJiMzOTtyZSBjb3B5aW5nICppbnRvKi4gVGhlIGxvZ2ljIGluY2x1ZGVzIGNoZWNrcyBmb3IgYSBudWxsIGBtbWAsIGFuZCBzZXRzIGRzdCB0byB6ZXJvLiBTbyB0aGVyZSBpcyBhIHBvc3NpYmlsaXR5IHRoYXQgZHN0IGlzIHVuaW5pdGlhbGl6ZWQuIFRoZSBjaGVja3MgZm9yIGFuIGAhbW1gIGxvb2sgcHJvbWlzaW5nLCBidXQgbmVlZCBjb25maXJtYXRpb24uIElmIHdlIGRvbiYjMzk7dCBoYXZlIGEgdmFsaWQgYG1tYCBpdCBzZXRzIGRzdCB0byB6ZXJvLiBUaGlzIGxvb2tzIGxpa2UgYSByZWFzb25hYmxlIHByZWNhdXRpb24sIGhvd2V2ZXIsIGlmIGBtbWAgKmlzKiB2YWxpZCwgaXQmIzM5O3Mgd29ydGggY2hlY2tpbmcgYGFjY2Vzc19yZW1vdGVfdm1gLCB3aGljaCBpcyBhbiBpc3N1ZS4gV2l0aCB0aGUgYGNvcHlfcmVtb3RlX21tX3N0cmAgZnVuY3Rpb24sIHRoZXJlIGFyZSBjYXNlcyB3aGVyZSB0aGUgZGVzdGluYXRpb24gKm1pZ2h0KiBiZSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQuIEl0IHNlZW1zIGxpa2UgaXQmIzM5O3MgdGFraW5nIGV4dHJhIHN0ZXBzIHRvIGVuc3VyZSB0aGlzIGlzIGhhbmRsZWQuIFdpdGggYEJQRl9GX1BBRF9aRVJPU2Agd2UgY2FuIGJlIHNldHRpbmcgdGhlIG1lbW9yeSB0byB6ZXJvLiBOZWVkIHRvIGV4YW1pbmUgYGFjY2Vzc19yZW1vdGVfdm1gIGFuZCBgY29weV9yZW1vdGVfbW1fc3RyYCB0byB2ZXJpZnkgdGhlc2UgYXNzdW1wdGlvbnMuCgo0LiAgYG1tL21lbW9yeS5jYCwgYG1tL25vbW11LmNgLCBgbW0vdXRpbC5jYCwgYG1tL2ludGVybmFsLmhgLCBgaW5jbHVkZS9saW51eC9tbS5oYDogVGhpcyBpcyBtb3N0bHkgcmVmYWN0b3JpbmcgdGhlIHJlbW90ZSBtZW1vcnkgY29weSBmdW5jdGlvbnMsIHJlbmFtaW5nIGFuZCBhZGRpbmcgd3JhcHBlcnMuIFRoZSBrZXkgZnVuY3Rpb24gdG8gbG9vayBhdCBoZXJlIGlzIGBfX2NvcHlfcmVtb3RlX21tX3N0cmAgYW5kIGBjb3B5X3JlbW90ZV9tbV9zdHJgLiBUaGlzIGlzIHdoZXJlIHRoZSBhY3R1YWwgbWVtb3J5IGNvcHlpbmcgaGFwcGVucy4gV2UgbmVlZCB0byBleGFtaW5lIHRoaXMgY29kZSB0byBzZWUgaWYgdGhlcmUgaXMgYW55IHdpbmRvdyBpbiB3aGljaCB0aGUgZGVzdGluYXRpb24gYnVmZmVyIGlzbiYjMzk7dCBwcm9wZXJseSBpbml0aWFsaXplZC4gSWYgdGhlcmUmIzM5O3MgYSBwYXJ0aWFsIHJlYWQgb3IgTlVMLXRlcm1pbmF0aW9uIGlzc3VlIHdlIG5lZWQgdG8gYmUgdmVyeSBjb25jZXJuZWQuCgo1LiAgU2VsZnRlc3RzOiBHcmVhdCwgdGhleSBhZGRlZCB0ZXN0cyEgSG93ZXZlciwgdGVzdGluZyBpcyBub3QgZW5vdWdoLgoKSW4gc3VtbWFyeSwgSSBzZWUgdGhlIGdyZWF0ZXN0IHBvdGVudGlhbCBmb3IgS01TQU4gZXhwb3N1cmUgaW4gdGhlIGBicGZfY29weV9mcm9tX3VzZXJfbW1gIGZ1bmN0aW9ucyBhbmQgdGhlaXIgc3RyaW5nIHZhcmlhbnQuIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBfX2NvcHlfcmVtb3RlX21tX3N0cmAsIGBjb3B5X3JlbW90ZV9tbV9zdHJgLCBhbmQgdGhlIGNhbGxzIHdpdGhpbiB0aGUgbmV3IGhlbHBlciBmdW5jdGlvbnMgdG8gbWFrZSBhIGRlZmluaXRpdmUgZGV0ZXJtaW5hdGlvbi4gSSBhbHNvIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYWxsIG1lbW9yeSBpcyBpbml0aWFsaXplZCBhcHByb3ByaWF0ZWx5IGluIGBCUEZfRl9QQURfWkVST1NgLiBXaGlsZSB0aGUgaW50ZW50aW9uIHNlZW1zIHRvIGJlIHNhZmUsIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgY29kZSBpcyAqcHJvdmFibHkqIHNhZmUgZnJvbSB1bmluaXRpYWxpemVkIHJlYWQgcmlza3MuIFRoZSBCUEYgY2hhbmdlcyByZXF1aXJlIHRob3JvdWdoIGluc3BlY3Rpb24gcmVnYXJkaW5nIHRoZSB1c2Ugb2YgYFBUUl9VTlRSVVNURURgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2NvcHlfcmVtb3RlX21tX3N0ciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9pbnRlcm5hbC5oPTI2PXN0cnVjdCBoc3RhdGU7XG4tLVxubW0vaW50ZXJuYWwuaC0yOC0jaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5tbS9pbnRlcm5hbC5oOjI5OmludCBfX2NvcHlfcmVtb3RlX21tX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxubW0vaW50ZXJuYWwuaC0zMC1cdFx0XHQgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKTtcbi0tXG5tbS9tZW1vcnkuYz03MzI3PUVYUE9SVF9TWU1CT0xfR1BMKGFjY2Vzc19wcm9jZXNzX3ZtKTtcbi0tXG5tbS9tZW1vcnkuYy03MzMzLSAqL1xubW0vbWVtb3J5LmM6NzMzNDppbnQgX19jb3B5X3JlbW90ZV9tbV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbm1tL21lbW9yeS5jLTczMzUtXHRcdFx0IHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncylcbi0tXG5tbS9ub21tdS5jPTE3NDI9RVhQT1JUX1NZTUJPTF9HUEwoYWNjZXNzX3Byb2Nlc3Nfdm0pO1xuLS1cbm1tL25vbW11LmMtMTc0OC0gKi9cbm1tL25vbW11LmM6MTc0OTppbnQgX19jb3B5X3JlbW90ZV9tbV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbm1tL25vbW11LmMtMTc1MC1cdFx0XHQgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKVxuLS1cbm1tL3V0aWwuYz0xMDgwPWludCBjb3B5X3JlbW90ZV9tbV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS91dGlsLmMtMTA4NS1cbm1tL3V0aWwuYzoxMDg2Olx0cmV0dXJuIF9fY29weV9yZW1vdGVfbW1fc3RyKG1tLCBhZGRyLCBidWYsIGxlbiwgZ3VwX2ZsYWdzKTtcbm1tL3V0aWwuYy0xMDg3LX1cbi0tXG5tbS91dGlsLmM9MTEwMj1pbnQgY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vdXRpbC5jLTExMTYtXG5tbS91dGlsLmM6MTExNzpcdHJldCA9IF9fY29weV9yZW1vdGVfbW1fc3RyKG1tLCBhZGRyLCBidWYsIGxlbiwgZ3VwX2ZsYWdzKTtcbm1tL3V0aWwuYy0xMTE4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDAwNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgX19jb3B5X3JlbW90ZV9tbV9zdHJgKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYF9fY29weV9yZW1vdGVfbW1fc3RyYCBpcyBkb2luZy4gR2l2ZW4gbXkgZGVlcCBrbm93bGVkZ2Ugb2YgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIHRoZSBrZXJuZWwsIEkgaW1tZWRpYXRlbHkgdGhpbmssICYjMzQ7TGV0JiMzOTtzIGNyYWNrIG9wZW4gYG1tL21lbW9yeS5jYC4mIzM0OyBJdCYjMzk7cyBsaWtlbHkgaW4gdGhhdCBmaWxlLCBhbmQgYSBnb29kIGJldCBpcyBhcm91bmQgbGluZSA3MzM0LiBUaGF0JiMzOTtzIGEgcmVhc29uYWJsZSBzdGFydGluZyBwb2ludCwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSB3aXRoIHRoZXNlIGtpbmRzIG9mIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UuIEkgZmlndXJlIEkmIzM5O2xsIHN0YXJ0IHRoZXJlIGFuZCBzZWUgd2hhdCBqdW1wcyBvdXQuIEkmIzM5O20gbm90IGV4cGVjdGluZyBhIHF1aWNrIGFuc3dlciAtIHRoZXNlIHRoaW5ncyBhbHdheXMgdGFrZSBhIGJpdCBvZiBkaWdnaW5nIHRvIGZ1bGx5IGdyYXNwIHRoZSBudWFuY2VzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvZGUgYWN0dWFsbHkgKnNheXMqLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbW9yeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzMzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs3MzMwOlx0LypcbjczMzE6XHQgKiBDb3B5IGEgc3RyaW5nIGZyb20gYW5vdGhlciBwcm9jZXNzJiMzOTtzIGFkZHJlc3Mgc3BhY2UgYXMgZ2l2ZW4gaW4gbW0uXG43MzMyOlx0ICogSWYgdGhlcmUgaXMgYW55IGVycm9yIHJldHVybiAtRUZBVUxULlxuNzMzMzpcdCAqL1xuNzMzNDpcdGludCBfX2NvcHlfcmVtb3RlX21tX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuNzMzNTpcdFx0XHRcdCB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXG43MzM2Olx0e1xuNzMzNzpcdFx0dm9pZCAqb2xkX2J1ZiA9IGJ1ZjtcbjczMzg6XHRcdGludCBlcnIgPSAwO1xuNzMzOTpcdFxuNzM0MDpcdFx0KihjaGFyICopYnVmID0gJiMzOTtcXDAmIzM5OztcbjczNDE6XHRcbjczNDI6XHRcdGlmIChtbWFwX3JlYWRfbG9ja19raWxsYWJsZShtbSkpXG43MzQzOlx0XHRcdHJldHVybiAtRUZBVUxUO1xuNzM0NDpcdFxuNzM0NTpcdFx0YWRkciA9IHVudGFnZ2VkX2FkZHJfcmVtb3RlKG1tLCBhZGRyKTtcbjczNDY6XHRcbjczNDc6XHRcdC8qIEF2b2lkIHRyaWdnZXJpbmcgdGhlIHRlbXBvcmFyeSB3YXJuaW5nIGluIF9fZ2V0X3VzZXJfcGFnZXMgKi9cbjczNDg6XHRcdGlmICghdm1hX2xvb2t1cChtbSwgYWRkcikpIHtcbjczNDk6XHRcdFx0ZXJyID0gLUVGQVVMVDtcbjczNTA6XHRcdFx0Z290byBvdXQ7XG43MzUxOlx0XHR9XG43MzUyOlx0XG43MzUzOlx0XHR3aGlsZSAobGVuKSB7XG43MzU0Olx0XHRcdGludCBieXRlcywgb2Zmc2V0LCByZXR2YWw7XG43MzU1Olx0XHRcdHZvaWQgKm1hZGRyO1xuNzM1NjpcdFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuNzM1NzpcdFx0XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbjczNTg6XHRcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBOVUxMO1xuNzM1OTpcdFxuNzM2MDpcdFx0XHRwYWdlID0gZ2V0X3VzZXJfcGFnZV92bWFfcmVtb3RlKG1tLCBhZGRyLCBndXBfZmxhZ3MsIFx1MDAyNnZtYSk7XG43MzYxOlx0XHRcdGlmIChJU19FUlIocGFnZSkpIHtcbjczNjI6XHRcdFx0XHQvKlxuNzM2MzpcdFx0XHRcdCAqIFRyZWF0IGFzIGEgdG90YWwgZmFpbHVyZSBmb3Igbm93IHVudGlsIHdlIGRlY2lkZSBob3dcbjczNjQ6XHRcdFx0XHQgKiB0byBoYW5kbGUgdGhlIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVCBjYXNlIGFuZFxuNzM2NTpcdFx0XHRcdCAqIHN0YWNrIGV4cGFuc2lvbi5cbjczNjY6XHRcdFx0XHQgKi9cbjczNjc6XHRcdFx0XHQqKGNoYXIgKilidWYgPSAmIzM5O1xcMCYjMzk7O1xuNzM2ODpcdFx0XHRcdGVyciA9IC1FRkFVTFQ7XG43MzY5Olx0XHRcdFx0Z290byBvdXQ7XG43MzcwOlx0XHRcdH1cbjczNzE6XHRcbjczNzI6XHRcdFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xuNzM3MzpcdFx0XHRieXRlcyA9IGxlbjtcbjczNzQ6XHRcdFx0b2Zmc2V0ID0gYWRkciBcdTAwMjYgKFBBR0VfU0laRSAtIDEpO1xuNzM3NTpcdFx0XHRpZiAoYnl0ZXMgXHUwMDNlIFBBR0VfU0laRSAtIG9mZnNldClcbjczNzY6XHRcdFx0XHRieXRlcyA9IFBBR0VfU0laRSAtIG9mZnNldDtcbjczNzc6XHRcbjczNzg6XHRcdFx0bWFkZHIgPSBrbWFwX2xvY2FsX2ZvbGlvKGZvbGlvLCBmb2xpb19wYWdlX2lkeChmb2xpbywgcGFnZSkgKiBQQUdFX1NJWkUpO1xuNzM3OTpcdFx0XHRyZXR2YWwgPSBzdHJzY3B5KGJ1ZiwgbWFkZHIgJiM0Mzsgb2Zmc2V0LCBieXRlcyk7XG43MzgwOlx0XHRcdGlmIChyZXR2YWwgXHUwMDNlPSAwKSB7XG43MzgxOlx0XHRcdFx0LyogRm91bmQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nICovXG43MzgyOlx0XHRcdFx0YnVmICYjNDM7PSByZXR2YWw7XG43MzgzOlx0XHRcdFx0Zm9saW9fcmVsZWFzZV9rbWFwKGZvbGlvLCBtYWRkcik7XG43Mzg0Olx0XHRcdFx0YnJlYWs7XG43Mzg1Olx0XHRcdH1cbjczODY6XHRcbjczODc6XHRcdFx0YnVmICYjNDM7PSBieXRlcyAtIDE7XG43Mzg4Olx0XHRcdC8qXG43Mzg5Olx0XHRcdCAqIEJlY2F1c2Ugc3Ryc2NweSBhbHdheXMgTlVMIHRlcm1pbmF0ZXMgd2UgbmVlZCB0b1xuNzM5MDpcdFx0XHQgKiBjb3B5IHRoZSBsYXN0IGJ5dGUgaW4gdGhlIHBhZ2UgaWYgd2UgYXJlIGdvaW5nIHRvXG43MzkxOlx0XHRcdCAqIGxvYWQgbW9yZSBwYWdlc1xuNzM5MjpcdFx0XHQgKi9cbjczOTM6XHRcdFx0aWYgKGJ5dGVzICE9IGxlbikge1xuNzM5NDpcdFx0XHRcdGFkZHIgJiM0Mzs9IGJ5dGVzIC0gMTtcbjczOTU6XHRcdFx0XHRjb3B5X2Zyb21fdXNlcl9wYWdlKHZtYSwgcGFnZSwgYWRkciwgYnVmLCBtYWRkciAmIzQzOyAoUEFHRV9TSVpFIC0gMSksIDEpO1xuNzM5NjpcdFx0XHRcdGJ1ZiAmIzQzOz0gMTtcbjczOTc6XHRcdFx0XHRhZGRyICYjNDM7PSAxO1xuNzM5ODpcdFx0XHR9XG43Mzk5Olx0XHRcdGxlbiAtPSBieXRlcztcbjc0MDA6XHRcbjc0MDE6XHRcdFx0Zm9saW9fcmVsZWFzZV9rbWFwKGZvbGlvLCBtYWRkcik7XG43NDAyOlx0XHR9XG43NDAzOlx0XG43NDA0Olx0b3V0OlxuNzQwNTpcdFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XG43NDA2Olx0XHRpZiAoZXJyKVxuNzQwNzpcdFx0XHRyZXR1cm4gZXJyO1xuNzQwODpcdFx0cmV0dXJuIGJ1ZiAtIG9sZF9idWY7XG43NDA5Olx0fVxuNzQxMDpcdCNlbmRpZiAvKiBDT05GSUdfQlBGX1NZU0NBTEwgKi9cbjc0MTE6XHRcbjc0MTI6XHQvKlxuNzQxMzpcdCAqIFByaW50IHRoZSBuYW1lIG9mIGEgVk1BLlxuNzQxNDpcdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTQxMgoJCQkJCQkJb3V0cHV0OiAzMzUKCQkJCQkJCXRob3VnaHRzOiAyMzAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBQcm9wb3NlZCBLZXJuZWwgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBtZXRpY3Vsb3VzbHkuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggcHJpbWFyaWx5IGZvY3VzZXMgb24gcmVmYWN0b3JpbmcgYW5kIHRpZ2h0ZW5pbmcgdXAgc29tZSBCUEYgZnVuY3Rpb25hbGl0eSB3aXRoIGEgZm9jdXMgb24gc2FmZXR5IGFuZCBjb3JyZWN0bmVzcywgcmF0aGVyIHRoYW4gaW50cm9kdWNpbmcgYW55IG5vdmVsIG1lbW9yeSBpbml0aWFsaXphdGlvbiBpc3N1ZXMuIExldCYjMzk7cyBkZWx2ZSBpbnRvIHRoZSBkZXRhaWxzLgoKVGhlIGZpcnN0IHBvaW50IHRvIGNvbnNpZGVyIGlzIHRoZSByZWZhY3RvcmluZyBvZiB0aGUgQlBGIGhlbHBlcnMgdXNlZCBmb3IgY29weWluZyBkYXRhIGZyb20gdXNlciBzcGFjZS4gU3BlY2lmaWNhbGx5LCBgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tgIGFuZCBgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyYCBhcmUgYmVpbmcgcmV2YW1wZWQgdG8gdXNlIGBicGZfY29weV9mcm9tX3VzZXJfbW1gIGFuZCBgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cmAgcmVzcGVjdGl2ZWx5LCB3aGljaCBvcGVyYXRlIGRpcmVjdGx5IG9uIGBzdHJ1Y3QgbW1fc3RydWN0ICpgLiBUaGlzIGlzIGEgY2xlYXIgaW1wcm92ZW1lbnQgaW4gdGVybXMgb2YgY29kZSBvcmdhbml6YXRpb24gYW5kIHJldXNhYmlsaXR5LCBhbGxvd2luZyBmdW5jdGlvbnMgbGlrZSBgY29weV9yZW1vdGVfbW1fc3RyYCAod2hpY2ggaGFuZGxlcyB0aGUgYWN0dWFsIG1lbW9yeSB0cmFuc2ZlcikgdG8gYmUgdXNlZCB3aXRoIGRpZmZlcmVudCBtZW1vcnkgc3BhY2VzLiBJbXBvcnRhbnRseSwgdGhlIGRlc2lnbiBvZiB0aGVzZSBrZnVuY3MsIHBhcnRpY3VsYXJseSByZWdhcmRpbmcgYGRzdGAsIGlzIHdlbGwtdW5kZXJzdG9vZDogbWVtb3J5IGZvciBgZHN0YCBpcyBlaXRoZXIgemVyb2VkIG9uIGZhaWx1cmUgb3IgaW5pdGlhbGl6ZWQgdXNpbmcgaGVscGVycyBsaWtlIGBhY2Nlc3NfcmVtb3RlX3ZtYCBvciBgY29weV9yZW1vdGVfbW1fc3RyYC4gVGhlIGV4aXN0aW5nIGxvZ2ljIGZvciB6ZXJvaW5nIG91dCB0aGUgZGVzdGluYXRpb24gYnVmZmVyIG9uIGZhaWx1cmUvcGFydGlhbCBjb3B5IHJlbWFpbnMgaW50YWN0LCB3aGljaCBpcyBjcml0aWNhbC4gVGhlIGNvbmNlcm4gaGVyZSBpcyBub3QgaW50cm9kdWNpbmcgYSBjYXNlIG9mIHJlYWRpbmcgdW5pbml0aWFsaXplZCBkYXRhLgoKVGhlIGBmcmVlX2Jwcm1gIGNoYW5nZSwgd2hlcmUgYGJwcm0tJmd0O21tYCBpcyBleHBsaWNpdGx5IHNldCB0byBgTlVMTGAgKmJlZm9yZSogYG1tcHV0KG1tKWAgaXMgY2FsbGVkLCBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBhbmQgY29ycmVjdCBhcHByb2FjaCB0byBhdm9pZCBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgKFVBRikgc2NlbmFyaW9zLiBUaGlzIGV4cGxpY2l0bHkgbnVsbGlmaWVzIHRoZSBwb2ludGVyIGFmdGVyIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBvcGVyYXRpb24uIEtBU0FOIHdvdWxkIGJlIHRoZSB0b29sIHRvIGRldGVjdCBhbnkgaXNzdWVzIHJlbGF0ZWQgdG8gdGhpcyBwb2ludGVyLgoKVGhlIHZlcmlmaWVyIGNoYW5nZXMgYXJlIGFsc28gY3J1Y2lhbC4gVGhlIHBhdGNoIGlzIGFsbG93aW5nIHRoZSBCUEYgcHJvZ3JhbXMgdG8gcmVhZCB0cnVzdGVkLW9yLW51bGwgcG9pbnRlcnMsIHByb3RlY3RlZCBieSBmYXVsdC1zYWZlIG9wZXJhdGlvbnMuIFRoaXMgbWVjaGFuaXNtIHRyYW5zZm9ybXMgcG9pbnRlciBsb2FkcyBpbnRvIHByb2JlIHJlYWRzLCBhbmQgbWFya3MgdGhlIHJldHJpZXZlZCBwb2ludGVyIGFzIHVudHJ1c3RlZCwgd2hpY2ggaXMgZXNzZW50aWFsIGZvciBlbnN1cmluZyB0aGF0IEJQRiBwcm9ncmFtcyBjYW5ub3QgZGlyZWN0bHkgZGVyZWZlcmVuY2UgYXJiaXRyYXJ5IHVzZXItcHJvdmlkZWQgYWRkcmVzc2VzLiBUaGlzIGFsc28gZXh0ZW5kcyB0byB0cmVhdGluZyBgYnBybS0mZ3Q7bW1gIGFzIHRydXN0ZWQtb3ItbnVsbC4gVGhpcyBpcyBhbGwgYWJvdXQgZW5oYW5jaW5nIHRoZSBzYWZldHkgb2YgdGhlIEJQRiBlbnZpcm9ubWVudC4gSXTigJlzIGFib3V0IHZlcmlmeWluZyB3aGF0IGNhbiBiZSBhY2Nlc3NlZCB2aWEgQlBGLgoKTm93LCBjb25jZXJuaW5nIEtNU0FOLCBteSBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBzaG91bGQgKm5vdCogaW50cm9kdWNlIEtNU0FOLXJlbGV2YW50IGlzc3Vlcy4gVGhlIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgdGhhdCBjb3VsZCBiZSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgb3IgbmV3IGluc3RhbmNlcyB3aGVyZSBrZXJuZWwgZGF0YSBjb3VsZCBiZSBsZWFrZWQgdG8gdXNlciBzcGFjZSB2aWEgY29waWVzLiBUaGUgbWVtb3J5IGhhbmRsaW5nIHdpdGhpbiB0aGUgQlBGIGZ1bmN0aW9ucyBpcyBhbHJlYWR5IHJvYnVzdCBhbmQgd2VsbC1kZWZpbmVkLCB3aXRoIHplcm9pbmcgb24gZmFpbHVyZSBvciBwYWRkaW5nIGZsYWdzLiBUaGUgcG9pbnRlciBtYW5pcHVsYXRpb24gZm9jdXNlcyBvbiB2YWxpZGl0eSBhbmQgZmF1bHQgdG9sZXJhbmNlLCBub3QgaW50cm9kdWNpbmcgbWVtb3J5IGluaXRpYWxpemF0aW9uIGZsYXdzLiBLQVNBTiBhbmQgdGhlIHZlcmlmaWVyIHdpbGwgaGFuZGxlIGFueSBwb3RlbnRpYWwgVUFGLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gVGhlIGVudGlyZSBsb2dpYyBpcyBkZXNpZ25lZCB0byBwcmV2ZW50IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLgoKVGhlcmVmb3JlLCBjb25zaWRlcmluZyB0aGF0IHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBjYXNlcyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSAqY291bGQqIGJlIHJlYWQsIHdoZXJlIGRhdGEgbWlnaHQgbGVhayB0byB1c2VyIHNwYWNlLCBvciB3aGVyZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQgd2l0aG91dCBwcm9wZXIgaW5pdGlhbGl6YXRpb24sIEkgY29uY2x1ZGUgdGhhdCBgTmVlZHNLTVNBTmAgaXMgYGZhbHNlYC4gVGhlIGNoYW5nZXMgYXJlIHNhZmV0eS1mb2N1c2VkIHJlZmFjdG9yaW5nLCBhbmQgYXJlIHdlbGwgd2l0aGluIHRoZSBleGlzdGluZyBtZW1vcnkgcHJvdGVjdGlvbiBmcmFtZXdvcmssIGFuZCBhbnkgcHJvYmxlbXMgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOL3ZlcmlmaWVyIGNoZWNrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgQlBGIGtmdW5jcyBmb3IgY29weWluZyBtZW1vcnkgZnJvbSBhbiBhcmJpdHJhcnkgYHN0cnVjdCBtbV9zdHJ1Y3RgIChgYnBmX2NvcHlfZnJvbV91c2VyX21tYCBhbmQgYGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHJgKSwgcmVmYWN0b3JzIGV4aXN0aW5nIHRhc2stYmFzZWQgaGVscGVycyB0byB1c2UgdGhlc2UgZnVuY3Rpb25zLCBjbGVhcnMgYGJwcm0tXHUwMDNlbW1gIGJlZm9yZSBkcm9wcGluZyB0aGUgcmVmZXJlbmNlIGluIGBmcmVlX2Jwcm0oKWAsIGFuZCB1cGRhdGVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gYWxsb3cgZmF1bHQtcHJvdGVjdGVkIGxvYWRzIHRocm91Z2ggdHJ1c3RlZC1vci1udWxsIEJURiBwb2ludGVycyAoYGJwZl9pc190cnVzdGVkX29yX251bGxfYnRmX3B0cmApLlxuXG5LTVNBTiB2cyBLQVNBTiBBcHBsaWNhYmlsaXR5OlxuLSBLTVNBTiBkZXRlY3RzIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcC9wYWdlIG1lbW9yeSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGRpc2Nsb3N1cmUgKGluZm8tbGVha3MpLlxuLSBLQVNBTiAvIExPQ0tERVAgZGV0ZWN0IG1lbW9yeSBjb3JydXB0aW9ucywgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgYW5kIGxvY2tpbmcgZXJyb3JzLlxuLSBUaGUgbmV3IEJQRiBjb3B5IGtmdW5jcyBwcm9wZXJseSBoYW5kbGUgbWVtb3J5IGluaXRpYWxpemF0aW9uOiBhbnkgZGVzdGluYXRpb24gYnVmZmVycyBhcmUgZWl0aGVyIGZ1bGx5IHdyaXR0ZW4gb3IgZXhwbGljaXRseSB6ZXJvZWQgdmlhIGBtZW1zZXQoKWAgdXBvbiBmYWlsdXJlLCBwYXJ0aWFsIHJlYWRzLCBvciB3aGVuIGBCUEZfRl9QQURfWkVST1NgIGlzIHJlcXVlc3RlZC5cbi0gTm8gdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBzdGFjayBhbGxvY2F0aW9ucywgb3Iga2VybmVsLXRvLXVzZXIgbGVha3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC5cbi0gVmVyaWZpZXIgdHlwZSB0cmFja2luZyBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIGNoYW5nZXMgcmVsYXRlIHRvIHBvaW50ZXIgdmFsaWRpdHkgYW5kIGZhdWx0IGhhbmRsaW5nLCBhcmVhcyB3aGVyZSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzIGFyZSBhcHBsaWNhYmxlLCBub3QgS01TQU4uXG5cblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgQlBGIGtmdW5jcyBmb3IgY29weWluZyBtZW1vcnkgZnJvbSBhbiBhcmJpdHJhcnkgYHN0cnVjdCBtbV9zdHJ1Y3RgIChgYnBmX2NvcHlfZnJvbV91c2VyX21tYCBhbmQgYGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHJgKSwgcmVmYWN0b3JzIGV4aXN0aW5nIHRhc2stYmFzZWQgaGVscGVycyB0byB1c2UgdGhlc2UgZnVuY3Rpb25zLCBjbGVhcnMgYGJwcm0tXHUwMDNlbW1gIGJlZm9yZSBkcm9wcGluZyB0aGUgcmVmZXJlbmNlIGluIGBmcmVlX2Jwcm0oKWAsIGFuZCB1cGRhdGVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gYWxsb3cgZmF1bHQtcHJvdGVjdGVkIGxvYWRzIHRocm91Z2ggdHJ1c3RlZC1vci1udWxsIEJURiBwb2ludGVycyAoYGJwZl9pc190cnVzdGVkX29yX251bGxfYnRmX3B0cmApLlxuXG5LTVNBTiB2cyBLQVNBTiBBcHBsaWNhYmlsaXR5OlxuLSBLTVNBTiBkZXRlY3RzIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcC9wYWdlIG1lbW9yeSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGRpc2Nsb3N1cmUgKGluZm8tbGVha3MpLlxuLSBLQVNBTiAvIExPQ0tERVAgZGV0ZWN0IG1lbW9yeSBjb3JydXB0aW9ucywgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgYW5kIGxvY2tpbmcgZXJyb3JzLlxuLSBUaGUgbmV3IEJQRiBjb3B5IGtmdW5jcyBwcm9wZXJseSBoYW5kbGUgbWVtb3J5IGluaXRpYWxpemF0aW9uOiBhbnkgZGVzdGluYXRpb24gYnVmZmVycyBhcmUgZWl0aGVyIGZ1bGx5IHdyaXR0ZW4gb3IgZXhwbGljaXRseSB6ZXJvZWQgdmlhIGBtZW1zZXQoKWAgdXBvbiBmYWlsdXJlLCBwYXJ0aWFsIHJlYWRzLCBvciB3aGVuIGBCUEZfRl9QQURfWkVST1NgIGlzIHJlcXVlc3RlZC5cbi0gTm8gdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBzdGFjayBhbGxvY2F0aW9ucywgb3Iga2VybmVsLXRvLXVzZXIgbGVha3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC5cbi0gVmVyaWZpZXIgdHlwZSB0cmFja2luZyBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIGNoYW5nZXMgcmVsYXRlIHRvIHBvaW50ZXIgdmFsaWRpdHkgYW5kIGZhdWx0IGhhbmRsaW5nLCBhcmVhcyB3aGVyZSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzIGFyZSBhcHBsaWNhYmxlLCBub3QgS01TQU4uXG5cblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDoyMDo1NC44MDIyOTk3MDdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDA0ODY2MTMyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiREVCVUdfSU5GT19CVEZcIixcbiAgICBcIkJQRl9MU01cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfY29weV9mcm9tX3VzZXJfbW1cIixcbiAgICBcImJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHJcIixcbiAgICBcImJwZl9jb3B5X2Zyb21fdXNlcl90YXNrXCIsXG4gICAgXCJicGZfY29weV9mcm9tX3VzZXJfdGFza19zdHJcIixcbiAgICBcImNvcHlfcmVtb3RlX21tX3N0clwiLFxuICAgIFwiY29weV9yZW1vdGVfdm1fc3RyXCIsXG4gICAgXCJfX2NvcHlfcmVtb3RlX21tX3N0clwiLFxuICAgIFwiY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3NcIixcbiAgICBcInR5cGVfaXNfdHJ1c3RlZF9vcl9udWxsXCIsXG4gICAgXCJjaGVja19tZW1fYWNjZXNzXCIsXG4gICAgXCJicGZfY29udmVydF9jdHhfYWNjZXNzZXNcIixcbiAgICBcImZyZWVfYnBybVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgQlBGIGtmdW5jcyBmb3IgY29weWluZyBtZW1vcnkgZnJvbSBhbiBhcmJpdHJhcnkgYHN0cnVjdCBtbV9zdHJ1Y3RgIChgYnBmX2NvcHlfZnJvbV91c2VyX21tYCBhbmQgYGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHJgKSwgcmVmYWN0b3JzIGV4aXN0aW5nIHRhc2stYmFzZWQgaGVscGVycyB0byB1c2UgdGhlc2UgZnVuY3Rpb25zLCBjbGVhcnMgYGJwcm0tXFx1MDAzZW1tYCBiZWZvcmUgZHJvcHBpbmcgdGhlIHJlZmVyZW5jZSBpbiBgZnJlZV9icHJtKClgLCBhbmQgdXBkYXRlcyB0aGUgQlBGIHZlcmlmaWVyIHRvIGFsbG93IGZhdWx0LXByb3RlY3RlZCBsb2FkcyB0aHJvdWdoIHRydXN0ZWQtb3ItbnVsbCBCVEYgcG9pbnRlcnMgKGBicGZfaXNfdHJ1c3RlZF9vcl9udWxsX2J0Zl9wdHJgKS5cXG5cXG5LTVNBTiB2cyBLQVNBTiBBcHBsaWNhYmlsaXR5Olxcbi0gS01TQU4gZGV0ZWN0cyByZWFkcyBvZiB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAvcGFnZSBtZW1vcnkgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBkaXNjbG9zdXJlIChpbmZvLWxlYWtzKS5cXG4tIEtBU0FOIC8gTE9DS0RFUCBkZXRlY3QgbWVtb3J5IGNvcnJ1cHRpb25zLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLCBhbmQgbG9ja2luZyBlcnJvcnMuXFxuLSBUaGUgbmV3IEJQRiBjb3B5IGtmdW5jcyBwcm9wZXJseSBoYW5kbGUgbWVtb3J5IGluaXRpYWxpemF0aW9uOiBhbnkgZGVzdGluYXRpb24gYnVmZmVycyBhcmUgZWl0aGVyIGZ1bGx5IHdyaXR0ZW4gb3IgZXhwbGljaXRseSB6ZXJvZWQgdmlhIGBtZW1zZXQoKWAgdXBvbiBmYWlsdXJlLCBwYXJ0aWFsIHJlYWRzLCBvciB3aGVuIGBCUEZfRl9QQURfWkVST1NgIGlzIHJlcXVlc3RlZC5cXG4tIE5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgc3RhY2sgYWxsb2NhdGlvbnMsIG9yIGtlcm5lbC10by11c2VyIGxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuXFxuLSBWZXJpZmllciB0eXBlIHRyYWNraW5nIGFuZCByZWZlcmVuY2UgY291bnRpbmcgY2hhbmdlcyByZWxhdGUgdG8gcG9pbnRlciB2YWxpZGl0eSBhbmQgZmF1bHQgaGFuZGxpbmcsIGFyZWFzIHdoZXJlIEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMgYXJlIGFwcGxpY2FibGUsIG5vdCBLTVNBTi5cXG5cXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBzbGVlcGFibGUgQlBGIGtmdW5jcyAoYnBmX2NvcHlfZnJvbV91c2VyX21tIGFuZCBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKSwgcmVmYWN0b3JzIHJlbW90ZSBNTSBzdHJpbmcgY29weWluZyBoZWxwZXJzIGFjcm9zcyBtbS8gYW5kIGtlcm5lbC9icGYvLCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIHRvIGFsbG93IGZhdWx0LXByb3RlY3RlZCBsb2FkcyB0aHJvdWdoIHRydXN0ZWQtb3ItbnVsbCBwb2ludGVycywgYW5kIGFsdGVycyBtbSBjbGVhbnVwIGluIGZyZWVfYnBybSgpLiBUaGVzZSBjaGFuZ2VzIHRvdWNoIGNvcmUgQlBGIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBleGVjdXRpb24gcGF0aHMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzIHZpYSBCUEYgYW5kIGV4ZWMgc3lzY2FsbHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIwOjIwOjU0LjgwMjMwNTI0N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODc1MTc1MTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZGI3N2FmNjZiM2FhMDdiMTNkYzgzYWFmY2ExYjhiMGEwMjkxYTFmYlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIFNlcCA3IDIwOjIwOjUzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2V4ZWMuYyBiL2ZzL2V4ZWMuY1xcbmluZGV4IDc0NWY2ZWI1Mjc5ZTYuLjRkZGQ0MDNmZDkxYzcgMTAwNjQ0XFxuLS0tIGEvZnMvZXhlYy5jXFxuKysrIGIvZnMvZXhlYy5jXFxuQEAgLTE0NTYsOSArMTQ1NiwxMiBAQCB2b2lkIGJwcm1fZHJvcF9sb2FkZXIoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcXG4gXFxuIHN0YXRpYyB2b2lkIGZyZWVfYnBybShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxcbiB7XFxuLVxcdGlmIChicHJtLVxcdTAwM2VtbSkge1xcbitcXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGJwcm0tXFx1MDAzZW1tO1xcbitcXG4rXFx0aWYgKG1tKSB7XFxuIFxcdFxcdGFjY3RfYXJnX3NpemUoYnBybSwgMCk7XFxuLVxcdFxcdG1tcHV0KGJwcm0tXFx1MDAzZW1tKTtcXG4rXFx0XFx0YnBybS1cXHUwMDNlbW0gPSBOVUxMO1xcbitcXHRcXHRtbXB1dChtbSk7XFxuIFxcdH1cXG4gXFx0aWYgKGJwcm0tXFx1MDAzZXVzZXJfbnMpXFxuIFxcdFxcdHB1dF91c2VyX25zKGJwcm0tXFx1MDAzZXVzZXJfbnMpO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxcbmluZGV4IDk3MjdkZjVhZjgzYWIuLjRmMDMyYWQ4M2M2NzUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcXG5AQCAtMTMzOSw2ICsxMzM5LDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBicGZfaXNfcHRyX3RvX21lbV9vcl9idGZfaWQoZW51bSBicGZfcmVnX3R5cGUgdHlwZSlcXG4gXFx0fVxcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIGJvb2wgYnBmX2lzX3RydXN0ZWRfb3JfbnVsbF9idGZfcHRyKGVudW0gYnBmX3JlZ190eXBlIHR5cGUpXFxuK3tcXG4rXFx0cmV0dXJuIHR5cGUgPT0gKFBUUl9UT19CVEZfSUQgfCBQVFJfVFJVU1RFRCB8IFBUUl9NQVlCRV9OVUxMKTtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSBib29sIGJwZl9tYXlfZmF1bHRfb25fZGVyZWYoZW51bSBicGZfcmVnX3R5cGUgdHlwZSlcXG4ge1xcbiBcXHQvKlxcbkBAIC0xMzQ2LDcgKzEzNTEsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYnBmX21heV9mYXVsdF9vbl9kZXJlZihlbnVtIGJwZl9yZWdfdHlwZSB0eXBlKVxcbiBcXHQgKiBwcm90ZWN0aW9uLCB0aGF0IGlzLCB0aGUgb25lcyBicGZfY29udmVydF9jdHhfYWNjZXNzZXMoKSBoYXMgdG9cXG4gXFx0ICogdHVybiBhIEJQRl9MRFggaW50byBhIEJQRl9QUk9CRV9NRU0gb25lIGZvci5cXG4gXFx0ICovXFxuLVxcdHJldHVybiB0eXBlID09IFBUUl9UT19CVEZfSUQgfHwgKHR5cGVfZmxhZyh0eXBlKSBcXHUwMDI2IFBUUl9VTlRSVVNURUQpO1xcbitcXHRyZXR1cm4gdHlwZSA9PSBQVFJfVE9fQlRGX0lEIHx8XFxuK1xcdCAgICAgICAodHlwZV9mbGFnKHR5cGUpIFxcdTAwMjYgUFRSX1VOVFJVU1RFRCkgfHxcXG4rXFx0ICAgICAgIGJwZl9pc190cnVzdGVkX29yX251bGxfYnRmX3B0cih0eXBlKTtcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSBib29sIGJwZl9wcm9nX2hhc19hcmVuYV9jdHhfYXJnKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oXFxuaW5kZXggZGQwOWM0MzhmYTIzZS4uZDViZGUxZjcxYTk3ZSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tLmhcXG5AQCAtMzMyNiw2ICszMzI2LDggQEAgZXh0ZXJuIGludCBhY2Nlc3NfcmVtb3RlX3ZtKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdFxcdHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncyk7XFxuIFxcbiAjaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxuK2V4dGVybiBpbnQgY29weV9yZW1vdGVfbW1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuK1xcdFxcdFxcdCAgICAgIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncyk7XFxuIGV4dGVybiBpbnQgY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdFxcdFxcdCAgICAgIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncyk7XFxuICNlbmRpZlxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2hlbHBlcnMuYyBiL2tlcm5lbC9icGYvaGVscGVycy5jXFxuaW5kZXggYjNjYzVjOGZjODc1Ni4uZDNjNTY0NDM3YWQwNiAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL2hlbHBlcnMuY1xcbisrKyBiL2tlcm5lbC9icGYvaGVscGVycy5jXFxuQEAgLTMyLDYgKzMyLDEwIEBAXFxuIFxcbiAjaW5jbHVkZSBcXFwiLi4vLi4vbGliL2tzdHJ0b3guaFxcXCJcXG4gXFxuK19fYnBmX2tmdW5jIGludCBicGZfY29weV9mcm9tX3VzZXJfbW0odm9pZCAqZHN0LCB1MzIgZHN0X19zeixcXG4rXFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgdm9pZCBfX3VzZXIgKnVuc2FmZV9wdHJfX2lnbixcXG4rXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHU2NCBmbGFncyk7XFxuK1xcbiAvKiBJZiBrZXJuZWwgc3Vic3lzdGVtIGlzIGFsbG93aW5nIGVCUEYgcHJvZ3JhbXMgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uLFxcbiAgKiBpbnNpZGUgaXRzIG93biB2ZXJpZmllcl9vcHMtXFx1MDAzZWdldF9mdW5jX3Byb3RvKCkgY2FsbGJhY2sgaXQgc2hvdWxkIHJldHVyblxcbiAgKiBicGZfbWFwX2xvb2t1cF9lbGVtX3Byb3RvLCBzbyB0aGF0IHZlcmlmaWVyIGNhbiBwcm9wZXJseSBjaGVjayB0aGUgYXJndW1lbnRzXFxuQEAgLTY4MiwyMiArNjg2LDE1IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfY29weV9mcm9tX3VzZXJfcHJvdG8gPSB7XFxuIEJQRl9DQUxMXzUoYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2ssIHZvaWQgKiwgZHN0LCB1MzIsIHNpemUsXFxuIFxcdCAgIGNvbnN0IHZvaWQgX191c2VyICosIHVzZXJfcHRyLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgdHNrLCB1NjQsIGZsYWdzKVxcbiB7XFxuK1xcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0LyogZmxhZ3MgaXMgbm90IHVzZWQgeWV0ICovXFxuLVxcdGlmICh1bmxpa2VseShmbGFncykpXFxuLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi1cXG4tXFx0aWYgKHVubGlrZWx5KCFzaXplKSlcXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcbi1cXHRyZXQgPSBhY2Nlc3NfcHJvY2Vzc192bSh0c2ssICh1bnNpZ25lZCBsb25nKXVzZXJfcHRyLCBkc3QsIHNpemUsIDApO1xcbi1cXHRpZiAocmV0ID09IHNpemUpXFxuLVxcdFxcdHJldHVybiAwO1xcbitcXHRtbSA9IGdldF90YXNrX21tKHRzayk7XFxuK1xcdHJldCA9IGJwZl9jb3B5X2Zyb21fdXNlcl9tbShkc3QsIHNpemUsIHVzZXJfcHRyLCBtbSwgZmxhZ3MpO1xcbitcXHRpZiAobW0pXFxuK1xcdFxcdG1tcHV0KG1tKTtcXG4gXFxuLVxcdG1lbXNldChkc3QsIDAsIHNpemUpO1xcbi1cXHQvKiBSZXR1cm4gLUVGQVVMVCBmb3IgcGFydGlhbCByZWFkICovXFxuLVxcdHJldHVybiByZXQgXFx1MDAzYyAwID8gcmV0IDogLUVGQVVMVDtcXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3Byb3RvID0ge1xcbkBAIC0zNjU4LDYgKzM2NTUsMTAwIEBAIF9fYnBmX2tmdW5jIGludCBicGZfY29weV9mcm9tX3VzZXJfc3RyKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osIGNvbnN0IHZvaWQgX191c2VyXFxuIFxcdHJldHVybiByZXQgKyAxO1xcbiB9XFxuIFxcbisvKipcXG4rICogYnBmX2NvcHlfZnJvbV91c2VyX21tKCkgLSBDb3B5IGRhdGEgZnJvbSBhbiBhZGRyZXNzIHNwYWNlXFxuKyAqIEBkc3Q6ICAgICAgICAgICAgIERlc3RpbmF0aW9uIGFkZHJlc3MsIGluIGtlcm5lbCBzcGFjZVxcbisgKiBAZHN0X19zejogICAgICAgICBOdW1iZXIgb2YgYnl0ZXMgdG8gY29weVxcbisgKiBAdW5zYWZlX3B0cl9faWduOiBTb3VyY2UgYWRkcmVzcyBpbiB0aGUgYWRkcmVzcyBzcGFjZVxcbisgKiBAbW06ICAgICAgICAgICAgICBBZGRyZXNzIHNwYWNlIHRvIGNvcHkgZnJvbVxcbisgKiBAZmxhZ3M6ICAgICAgICAgICBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZTsgbXVzdCBiZSB6ZXJvXFxuKyAqXFxuKyAqIENvcGllcyBkYXRhIGZyb20gdGhlIHVzZXIgYWRkcmVzcyBzcGFjZSBhc3NvY2lhdGVkIHdpdGggQG1tLiBUaGUgZGVzdGluYXRpb25cXG4rICogaXMgemVyb2VkIGlmIGFuIGF0dGVtcHRlZCBjb3B5IGNhbm5vdCBiZSBjb21wbGV0ZWQgaW4gZnVsbC4gVW5zdXBwb3J0ZWRcXG4rICogZmxhZ3MgcmV0dXJuIC1FSU5WQUwgd2l0aG91dCBtb2RpZnlpbmcgQGRzdC5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FSU5WQUwgaWYgQGZsYWdzIGlzIG5vbi16ZXJvLCBvciAtRUZBVUxUIGlmIHRoZSBjb3B5XFxuKyAqIGZhaWxzIG9yIGlzIHBhcnRpYWwuXFxuKyAqL1xcbitfX2JwZl9rZnVuYyBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX21tKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osXFxuK1xcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHZvaWQgX191c2VyICp1bnNhZmVfcHRyX19pZ24sXFxuK1xcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1NjQgZmxhZ3MpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmICh1bmxpa2VseShmbGFncykpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0aWYgKHVubGlrZWx5KCFkc3RfX3N6KSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAodW5saWtlbHkoIW1tKSkge1xcbitcXHRcXHRtZW1zZXQoZHN0LCAwLCBkc3RfX3N6KTtcXG4rXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IGFjY2Vzc19yZW1vdGVfdm0obW0sICh1bnNpZ25lZCBsb25nKXVuc2FmZV9wdHJfX2lnbixcXG4rXFx0XFx0XFx0ICAgICAgIGRzdCwgZHN0X19zeiwgMCk7XFxuK1xcdGlmIChyZXQgPT0gZHN0X19zeilcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRtZW1zZXQoZHN0LCAwLCBkc3RfX3N6KTtcXG4rXFx0cmV0dXJuIHJldCBcXHUwMDNjIDAgPyByZXQgOiAtRUZBVUxUO1xcbit9XFxuK1xcbisvKipcXG4rICogYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cigpIC0gQ29weSBhIHN0cmluZyBmcm9tIGFuIGFkZHJlc3Mgc3BhY2VcXG4rICogQGRzdDogICAgICAgICAgICAgRGVzdGluYXRpb24gYWRkcmVzcywgaW4ga2VybmVsIHNwYWNlLiBUaGlzIGJ1ZmZlciBtdXN0IGJlXFxuKyAqICAgICAgICAgICAgICAgICAgIGF0IGxlYXN0IEBkc3RfX3N6IGJ5dGVzIGxvbmdcXG4rICogQGRzdF9fc3o6ICAgICAgICAgTWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gY29weSwgaW5jbHVkaW5nIHRoZSB0cmFpbGluZyBOVUxcXG4rICogQHVuc2FmZV9wdHJfX2lnbjogU291cmNlIGFkZHJlc3MgaW4gdGhlIGFkZHJlc3Mgc3BhY2VcXG4rICogQG1tOiAgICAgICAgICAgICAgQWRkcmVzcyBzcGFjZSB0byBjb3B5IGZyb21cXG4rICogQGZsYWdzOiAgICAgICAgICAgVGhlIG9ubHkgc3VwcG9ydGVkIGZsYWcgaXMgQlBGX0ZfUEFEX1pFUk9TXFxuKyAqXFxuKyAqIENvcGllcyBhIE5VTC10ZXJtaW5hdGVkIHN0cmluZyBmcm9tIHRoZSB1c2VyIGFkZHJlc3Mgc3BhY2UgYXNzb2NpYXRlZCB3aXRoXFxuKyAqIEBtbS4gSWYgdGhlIHN0cmluZyBpcyB0b28gbG9uZywgQGRzdCBpcyBzdGlsbCBOVUwtdGVybWluYXRlZCB1bmxlc3MgQGRzdF9fc3pcXG4rICogaXMgemVyby5cXG4rICpcXG4rICogSWYgdGhlIGZsYWdzIGFyZSB2YWxpZCBhbmQgQlBGX0ZfUEFEX1pFUk9TIGlzIHNldCwgdGhlIHVudXNlZCBwb3J0aW9uIG9mXFxuKyAqIEBkc3QgaXMgY2xlYXJlZCBvbiBzdWNjZXNzIGFuZCBhbGwgb2YgQGRzdCBpcyBjbGVhcmVkIG9uIGEgY29weSBmYWlsdXJlLlxcbisgKiBVbnN1cHBvcnRlZCBmbGFncyByZXR1cm4gLUVJTlZBTCB3aXRob3V0IG1vZGlmeWluZyBAZHN0LlxcbisgKlxcbisgKiBSZXR1cm46IFRoZSBudW1iZXIgb2YgY29waWVkIGJ5dGVzIGluY2x1ZGluZyB0aGUgTlVMIHRlcm1pbmF0b3Igb24gc3VjY2VzcyxcXG4rICogb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXFxuKyAqL1xcbitfX2JwZl9rZnVuYyBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cih2b2lkICpkc3QsIHUzMiBkc3RfX3N6LFxcbitcXHRcXHRcXHRcXHRcXHQgIGNvbnN0IHZvaWQgX191c2VyICp1bnNhZmVfcHRyX19pZ24sXFxuK1xcdFxcdFxcdFxcdFxcdCAgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHU2NCBmbGFncylcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKHVubGlrZWx5KGZsYWdzIFxcdTAwMjYgfkJQRl9GX1BBRF9aRVJPUykpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0aWYgKHVubGlrZWx5KGRzdF9fc3ogPT0gMCkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKHVubGlrZWx5KCFtbSkpIHtcXG4rXFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgQlBGX0ZfUEFEX1pFUk9TKVxcbitcXHRcXHRcXHRtZW1zZXQoZHN0LCAwLCBkc3RfX3N6KTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHQqKGNoYXIgKilkc3QgPSAnXFxcXDAnO1xcbitcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0ID0gY29weV9yZW1vdGVfbW1fc3RyKG1tLCAodW5zaWduZWQgbG9uZyl1bnNhZmVfcHRyX19pZ24sIGRzdCwgZHN0X19zeiwgMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdGlmIChmbGFncyBcXHUwMDI2IEJQRl9GX1BBRF9aRVJPUylcXG4rXFx0XFx0XFx0bWVtc2V0KGRzdCwgMCwgZHN0X19zeik7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChmbGFncyBcXHUwMDI2IEJQRl9GX1BBRF9aRVJPUylcXG4rXFx0XFx0bWVtc2V0KGRzdCArIHJldCwgMCwgZHN0X19zeiAtIHJldCk7XFxuK1xcbitcXHRyZXR1cm4gcmV0ICsgMTtcXG4rfVxcbitcXG4gLyoqXFxuICAqIGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3N0cigpIC0gQ29weSBhIHN0cmluZyBmcm9tIGFuIHRhc2sncyBhZGRyZXNzIHNwYWNlXFxuICAqIEBkc3Q6ICAgICAgICAgICAgIERlc3RpbmF0aW9uIGFkZHJlc3MsIGluIGtlcm5lbCBzcGFjZS4gIFRoaXMgYnVmZmVyIG11c3QgYmVcXG5AQCAtMzY4MSwyNSArMzc3MiwxNiBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBjb25zdCB2b2lkIF9fdXNlciAqdW5zYWZlX3B0cl9faWduLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHU2NCBmbGFncylcXG4ge1xcbitcXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcXG4gXFx0aW50IHJldDtcXG4gXFxuLVxcdGlmICh1bmxpa2VseShmbGFncyBcXHUwMDI2IH5CUEZfRl9QQURfWkVST1MpKVxcbi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFxuLVxcdGlmICh1bmxpa2VseShkc3RfX3N6ID09IDApKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4rXFx0bW0gPSBnZXRfdGFza19tbSh0c2spO1xcbitcXHRyZXQgPSBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKGRzdCwgZHN0X19zeiwgdW5zYWZlX3B0cl9faWduLFxcbitcXHRcXHRcXHRcXHRcXHRtbSwgZmxhZ3MpO1xcbitcXHRpZiAobW0pXFxuK1xcdFxcdG1tcHV0KG1tKTtcXG4gXFxuLVxcdHJldCA9IGNvcHlfcmVtb3RlX3ZtX3N0cih0c2ssICh1bnNpZ25lZCBsb25nKXVuc2FmZV9wdHJfX2lnbiwgZHN0LCBkc3RfX3N6LCAwKTtcXG4tXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tXFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgQlBGX0ZfUEFEX1pFUk9TKVxcbi1cXHRcXHRcXHRtZW1zZXQoZHN0LCAwLCBkc3RfX3N6KTtcXG4tXFx0XFx0cmV0dXJuIHJldDtcXG4tXFx0fVxcbi1cXG4tXFx0aWYgKGZsYWdzIFxcdTAwMjYgQlBGX0ZfUEFEX1pFUk9TKVxcbi1cXHRcXHRtZW1zZXQoZHN0ICsgcmV0LCAwLCBkc3RfX3N6IC0gcmV0KTtcXG4tXFxuLVxcdHJldHVybiByZXQgKyAxO1xcbitcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbiAvKiBLZWVwIHVuc2lnbmVkIGxvbmcgaW4gcHJvdG90eXBlIHNvIHRoYXQga2Z1bmMgaXMgdXNhYmxlIHdoZW4gZW1pdHRlZCB0b1xcbkBAIC00OTI0LDYgKzUwMDYsOCBAQCBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfYml0c19uZXcsIEtGX0lURVJfTkVXKVxcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfYml0c19uZXh0LCBLRl9JVEVSX05FWFQgfCBLRl9SRVRfTlVMTClcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX2JpdHNfZGVzdHJveSwgS0ZfSVRFUl9ERVNUUk9ZKVxcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2NvcHlfZnJvbV91c2VyX3N0ciwgS0ZfU0xFRVBBQkxFKVxcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2NvcHlfZnJvbV91c2VyX21tLCBLRl9TTEVFUEFCTEUpXFxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyLCBLRl9TTEVFUEFCTEUpXFxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfY29weV9mcm9tX3VzZXJfdGFza19zdHIsIEtGX1NMRUVQQUJMRSlcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9nZXRfa21lbV9jYWNoZSlcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX2ttZW1fY2FjaGVfbmV3LCBLRl9JVEVSX05FVyB8IEtGX1NMRUVQQUJMRSlcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXFxuaW5kZXggOWU3OTc1MGUyNDgwOC4uNjc5OWQ5ZTA4MGZjNSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5AQCAtNjAwNCw2ICs2MDA0LDEwIEBAIEJURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMKHN0cnVjdCBkZW50cnkpIHtcXG4gXFx0c3RydWN0IGlub2RlICpkX2lub2RlO1xcbiB9O1xcbiBcXG4rQlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IGxpbnV4X2JpbnBybSkge1xcbitcXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcXG4rfTtcXG4rXFxuIEJURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMKHN0cnVjdCBzb2NrZXQpIHtcXG4gXFx0c3RydWN0IHNvY2sgKnNrO1xcbiB9O1xcbkBAIC02MDU4LDYgKzYwNjIsNyBAQCBzdGF0aWMgYm9vbCB0eXBlX2lzX3RydXN0ZWRfb3JfbnVsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiB7XFxuIFxcdEJURl9UWVBFX0VNSVQoQlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IHNvY2tldCkpO1xcbiBcXHRCVEZfVFlQRV9FTUlUKEJURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMKHN0cnVjdCBkZW50cnkpKTtcXG4rXFx0QlRGX1RZUEVfRU1JVChCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTChzdHJ1Y3QgbGludXhfYmlucHJtKSk7XFxuIFxcdEJURl9UWVBFX0VNSVQoQlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IHZtX2FyZWFfc3RydWN0KSk7XFxuIFxcbiBcXHRyZXR1cm4gYnRmX25lc3RlZF90eXBlX2lzX3RydXN0ZWQoXFx1MDAyNmVudi1cXHUwMDNlbG9nLCByZWcsIGZpZWxkX25hbWUsIGJ0Zl9pZCxcXG5AQCAtNjE2OCw2ICs2MTczLDE1IEBAIHN0YXRpYyBpbnQgY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFx0aWYgKHJldCAhPSBQVFJfVE9fQlRGX0lEKSB7XFxuIFxcdFxcdC8qIGp1c3QgbWFyazsgKi9cXG4gXFxuK1xcdH0gZWxzZSBpZiAoYnBmX2lzX3RydXN0ZWRfb3JfbnVsbF9idGZfcHRyKHJlZy1cXHUwMDNldHlwZSkpIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogQW4gdW5jaGVja2VkIGxvYWQgdGhyb3VnaCBhIHRydXN0ZWQtb3ItTlVMTCBwb2ludGVyIGlzXFxuK1xcdFxcdCAqIGZhdWx0LXByb3RlY3RlZC4gQW55IHBvaW50ZXIgZGVyaXZlZCBmcm9tIHRoYXQgbG9hZCBtdXN0IGJlXFxuK1xcdFxcdCAqIHVudHJ1c3RlZCwgYXMgYSBmYXVsdCBwcm9kdWNlcyBhIE5VTEwgdmFsdWUuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRjbGVhcl90cnVzdGVkX2ZsYWdzKFxcdTAwMjZmbGFnKTtcXG4rXFx0XFx0ZmxhZyB8PSBQVFJfVU5UUlVTVEVEO1xcbitcXG4gXFx0fSBlbHNlIGlmICh0eXBlX2ZsYWcocmVnLVxcdTAwM2V0eXBlKSBcXHUwMDI2IFBUUl9VTlRSVVNURUQpIHtcXG4gXFx0XFx0LyogSWYgdGhpcyBpcyBhbiB1bnRydXN0ZWQgcG9pbnRlciwgYWxsIHBvaW50ZXJzIGZvcm1lZCBieSB3YWxraW5nIGl0XFxuIFxcdFxcdCAqIGFsc28gaW5oZXJpdCB0aGUgdW50cnVzdGVkIGZsYWcuXFxuQEAgLTY2NDQsNyArNjY1OCw4IEBAIHN0YXRpYyBpbnQgY2hlY2tfbWVtX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgsIHN0cnVjdCBiXFxuIFxcdFxcdGlmICghZXJyIFxcdTAwMjZcXHUwMDI2IHQgPT0gQlBGX1JFQUQgXFx1MDAyNlxcdTAwMjYgdmFsdWVfcmVnbm8gXFx1MDAzZT0gMClcXG4gXFx0XFx0XFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIHZhbHVlX3JlZ25vKTtcXG4gXFx0fSBlbHNlIGlmIChiYXNlX3R5cGUocmVnLVxcdTAwM2V0eXBlKSA9PSBQVFJfVE9fQlRGX0lEIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgICF0eXBlX21heV9iZV9udWxsKHJlZy1cXHUwMDNldHlwZSkpIHtcXG4rXFx0XFx0ICAgKCF0eXBlX21heV9iZV9udWxsKHJlZy1cXHUwMDNldHlwZSkgfHxcXG4rXFx0XFx0ICAgICh0ID09IEJQRl9SRUFEIFxcdTAwMjZcXHUwMDI2IGJwZl9pc190cnVzdGVkX29yX251bGxfYnRmX3B0cihyZWctXFx1MDAzZXR5cGUpKSkpIHtcXG4gXFx0XFx0ZXJyID0gY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3MoZW52LCByZWdzLCByZWcsIGFyZ25vLCBvZmYsIHNpemUsIHQsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgIHZhbHVlX3JlZ25vKTtcXG4gXFx0fSBlbHNlIGlmIChyZWctXFx1MDAzZXR5cGUgPT0gQ09OU1RfUFRSX1RPX01BUCkge1xcbmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaFxcbmluZGV4IDM4YjExNjUyMTJjOTQuLjgyNjRhMzQ2ZDE4YWYgMTAwNjQ0XFxuLS0tIGEvbW0vaW50ZXJuYWwuaFxcbisrKyBiL21tL2ludGVybmFsLmhcXG5AQCAtMjUsNiArMjUsMTEgQEBcXG4gc3RydWN0IGZvbGlvX2JhdGNoO1xcbiBzdHJ1Y3QgaHN0YXRlO1xcbiBcXG4rI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbitpbnQgX19jb3B5X3JlbW90ZV9tbV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4rXFx0XFx0XFx0IHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncyk7XFxuKyNlbmRpZlxcbitcXG4gc3RydWN0IGh1Z2VfYm9vdG1lbV9wYWdlIHtcXG4gXFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xcbiBcXHRzdHJ1Y3QgaHN0YXRlICpoc3RhdGU7XFxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcXG5pbmRleCA4YjBjMmM3MzVkM2RlLi5mZTJmNWU5ODhmYjkwIDEwMDY0NFxcbi0tLSBhL21tL21lbW9yeS5jXFxuKysrIGIvbW0vbWVtb3J5LmNcXG5AQCAtNzMzMSw4ICs3MzMxLDggQEAgRVhQT1JUX1NZTUJPTF9HUEwoYWNjZXNzX3Byb2Nlc3Nfdm0pO1xcbiAgKiBDb3B5IGEgc3RyaW5nIGZyb20gYW5vdGhlciBwcm9jZXNzJ3MgYWRkcmVzcyBzcGFjZSBhcyBnaXZlbiBpbiBtbS5cXG4gICogSWYgdGhlcmUgaXMgYW55IGVycm9yIHJldHVybiAtRUZBVUxULlxcbiAgKi9cXG4tc3RhdGljIGludCBfX2NvcHlfcmVtb3RlX3ZtX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi1cXHRcXHRcXHRcXHR2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXFxuK2ludCBfX2NvcHlfcmVtb3RlX21tX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbitcXHRcXHRcXHQgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKVxcbiB7XFxuIFxcdHZvaWQgKm9sZF9idWYgPSBidWY7XFxuIFxcdGludCBlcnIgPSAwO1xcbkBAIC03NDA3LDQzICs3NDA3LDYgQEAgc3RhdGljIGludCBfX2NvcHlfcmVtb3RlX3ZtX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHRyZXR1cm4gYnVmIC0gb2xkX2J1ZjtcXG4gfVxcbi1cXG4tLyoqXFxuLSAqIGNvcHlfcmVtb3RlX3ZtX3N0ciAtIGNvcHkgYSBzdHJpbmcgZnJvbSBhbm90aGVyIHByb2Nlc3MncyBhZGRyZXNzIHNwYWNlLlxcbi0gKiBAdHNrOlxcdHRoZSB0YXNrIG9mIHRoZSB0YXJnZXQgYWRkcmVzcyBzcGFjZVxcbi0gKiBAYWRkcjpcXHRzdGFydCBhZGRyZXNzIHRvIHJlYWQgZnJvbVxcbi0gKiBAYnVmOlxcdGRlc3RpbmF0aW9uIGJ1ZmZlclxcbi0gKiBAbGVuOlxcdG51bWJlciBvZiBieXRlcyB0byBjb3B5XFxuLSAqIEBndXBfZmxhZ3M6XFx0ZmxhZ3MgbW9kaWZ5aW5nIGxvb2t1cCBiZWhhdmlvdXJcXG4tICpcXG4tICogVGhlIGNhbGxlciBtdXN0IGhvbGQgYSByZWZlcmVuY2Ugb24gQG1tLlxcbi0gKlxcbi0gKiBSZXR1cm46IG51bWJlciBvZiBieXRlcyBjb3BpZWQgZnJvbSBAYWRkciAoc291cmNlKSB0byBAYnVmIChkZXN0aW5hdGlvbik7XFxuLSAqIG5vdCBpbmNsdWRpbmcgdGhlIHRyYWlsaW5nIE5VTC4gQWx3YXlzIGd1YXJhbnRlZWQgdG8gbGVhdmUgTlVMLXRlcm1pbmF0ZWRcXG4tICogYnVmZmVyLiBPbiBhbnkgZXJyb3IsIHJldHVybiAtRUZBVUxULlxcbi0gKi9cXG4taW50IGNvcHlfcmVtb3RlX3ZtX3N0cihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi1cXHRcXHQgICAgICAgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKVxcbi17XFxuLVxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xcbi1cXHRpbnQgcmV0O1xcbi1cXG4tXFx0aWYgKHVubGlrZWx5KGxlbiA9PSAwKSlcXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcbi1cXHRtbSA9IGdldF90YXNrX21tKHRzayk7XFxuLVxcdGlmICghbW0pIHtcXG4tXFx0XFx0KihjaGFyICopYnVmID0gJ1xcXFwwJztcXG4tXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuLVxcdH1cXG4tXFxuLVxcdHJldCA9IF9fY29weV9yZW1vdGVfdm1fc3RyKG1tLCBhZGRyLCBidWYsIGxlbiwgZ3VwX2ZsYWdzKTtcXG4tXFxuLVxcdG1tcHV0KG1tKTtcXG4tXFxuLVxcdHJldHVybiByZXQ7XFxuLX1cXG4tRVhQT1JUX1NZTUJPTF9HUEwoY29weV9yZW1vdGVfdm1fc3RyKTtcXG4gI2VuZGlmIC8qIENPTkZJR19CUEZfU1lTQ0FMTCAqL1xcbiBcXG4gLypcXG5kaWZmIC0tZ2l0IGEvbW0vbm9tbXUuYyBiL21tL25vbW11LmNcXG5pbmRleCA0OThlMDFlZTQwYjA1Li45ODU5NmU2MDMxMWYzIDEwMDY0NFxcbi0tLSBhL21tL25vbW11LmNcXG4rKysgYi9tbS9ub21tdS5jXFxuQEAgLTE3NDYsOCArMTc0Niw4IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGFjY2Vzc19wcm9jZXNzX3ZtKTtcXG4gICogQ29weSBhIHN0cmluZyBmcm9tIGFub3RoZXIgcHJvY2VzcydzIGFkZHJlc3Mgc3BhY2UgYXMgZ2l2ZW4gaW4gbW0uXFxuICAqIElmIHRoZXJlIGlzIGFueSBlcnJvciByZXR1cm4gLUVGQVVMVC5cXG4gICovXFxuLXN0YXRpYyBpbnQgX19jb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tXFx0XFx0XFx0XFx0dm9pZCAqYnVmLCBpbnQgbGVuKVxcbitpbnQgX19jb3B5X3JlbW90ZV9tbV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4rXFx0XFx0XFx0IHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncylcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIGFkZHJfZW5kO1xcbiBcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcXG5AQCAtMTc4MSw0MyArMTc4MSw2IEBAIHN0YXRpYyBpbnQgX19jb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4tXFxuLS8qKlxcbi0gKiBjb3B5X3JlbW90ZV92bV9zdHIgLSBjb3B5IGEgc3RyaW5nIGZyb20gYW5vdGhlciBwcm9jZXNzJ3MgYWRkcmVzcyBzcGFjZS5cXG4tICogQHRzazpcXHR0aGUgdGFzayBvZiB0aGUgdGFyZ2V0IGFkZHJlc3Mgc3BhY2VcXG4tICogQGFkZHI6XFx0c3RhcnQgYWRkcmVzcyB0byByZWFkIGZyb21cXG4tICogQGJ1ZjpcXHRkZXN0aW5hdGlvbiBidWZmZXJcXG4tICogQGxlbjpcXHRudW1iZXIgb2YgYnl0ZXMgdG8gY29weVxcbi0gKiBAZ3VwX2ZsYWdzOlxcdGZsYWdzIG1vZGlmeWluZyBsb29rdXAgYmVoYXZpb3VyICh1bnVzZWQpXFxuLSAqXFxuLSAqIFRoZSBjYWxsZXIgbXVzdCBob2xkIGEgcmVmZXJlbmNlIG9uIEBtbS5cXG4tICpcXG4tICogUmV0dXJuOiBudW1iZXIgb2YgYnl0ZXMgY29waWVkIGZyb20gQGFkZHIgKHNvdXJjZSkgdG8gQGJ1ZiAoZGVzdGluYXRpb24pO1xcbi0gKiBub3QgaW5jbHVkaW5nIHRoZSB0cmFpbGluZyBOVUwuIEFsd2F5cyBndWFyYW50ZWVkIHRvIGxlYXZlIE5VTC10ZXJtaW5hdGVkXFxuLSAqIGJ1ZmZlci4gT24gYW55IGVycm9yLCByZXR1cm4gLUVGQVVMVC5cXG4tICovXFxuLWludCBjb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tXFx0XFx0ICAgICAgIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncylcXG4te1xcbi1cXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcXG4tXFx0aW50IHJldDtcXG4tXFxuLVxcdGlmICh1bmxpa2VseShsZW4gPT0gMCkpXFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXG4tXFx0bW0gPSBnZXRfdGFza19tbSh0c2spO1xcbi1cXHRpZiAoIW1tKSB7XFxuLVxcdFxcdCooY2hhciAqKWJ1ZiA9ICdcXFxcMCc7XFxuLVxcdFxcdHJldHVybiAtRUZBVUxUO1xcbi1cXHR9XFxuLVxcbi1cXHRyZXQgPSBfX2NvcHlfcmVtb3RlX3ZtX3N0cihtbSwgYWRkciwgYnVmLCBsZW4pO1xcbi1cXG4tXFx0bW1wdXQobW0pO1xcbi1cXG4tXFx0cmV0dXJuIHJldDtcXG4tfVxcbi1FWFBPUlRfU1lNQk9MX0dQTChjb3B5X3JlbW90ZV92bV9zdHIpO1xcbiAjZW5kaWYgLyogQ09ORklHX0JQRl9TWVNDQUxMICovXFxuIFxcbiAvKipcXG5kaWZmIC0tZ2l0IGEvbW0vdXRpbC5jIGIvbW0vdXRpbC5jXFxuaW5kZXggYmYwNTEzZDFkM2QwOC4uMmVjYTI3YjAyNzkxZiAxMDA2NDRcXG4tLS0gYS9tbS91dGlsLmNcXG4rKysgYi9tbS91dGlsLmNcXG5AQCAtMTA2MSw2ICsxMDYxLDY4IEBAIGludCBnZXRfY21kbGluZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGNoYXIgKmJ1ZmZlciwgaW50IGJ1ZmxlbilcXG4gXFx0cmV0dXJuIHJlcztcXG4gfVxcbiBcXG4rI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbisvKipcXG4rICogY29weV9yZW1vdGVfbW1fc3RyIC0gY29weSBhIHN0cmluZyBmcm9tIGEgcmVtb3RlIGFkZHJlc3Mgc3BhY2UuXFxuKyAqIEBtbTogICAgICAgICB0aGUgcmVtb3RlIGFkZHJlc3Mgc3BhY2VcXG4rICogQGFkZHI6ICAgICAgIHN0YXJ0IGFkZHJlc3MgdG8gcmVhZCBmcm9tXFxuKyAqIEBidWY6ICAgICAgICBkZXN0aW5hdGlvbiBidWZmZXJcXG4rICogQGxlbjogICAgICAgIG51bWJlciBvZiBieXRlcyB0byBjb3B5XFxuKyAqIEBndXBfZmxhZ3M6ICBmbGFncyBtb2RpZnlpbmcgbG9va3VwIGJlaGF2aW91clxcbisgKlxcbisgKiBUaGUgY2FsbGVyIG11c3QgaG9sZCBhIHJlZmVyZW5jZSBvbiBAbW0uXFxuKyAqXFxuKyAqIFJldHVybjogbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCBmcm9tIEBhZGRyIChzb3VyY2UpIHRvIEBidWYgKGRlc3RpbmF0aW9uKSxcXG4rICogbm90IGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMLiBJZiBAbGVuIGlzIHplcm8sIHJldHVybiAwIHdpdGhvdXQgYWNjZXNzaW5nXFxuKyAqIEBidWYuIE90aGVyd2lzZSwgQGJ1ZiBpcyBhbHdheXMgTlVMLXRlcm1pbmF0ZWQuIE9uIGFueSBlcnJvciwgcmV0dXJuXFxuKyAqIC1FRkFVTFQuXFxuKyAqL1xcbitpbnQgY29weV9yZW1vdGVfbW1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuK1xcdFxcdCAgICAgICB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXFxuK3tcXG4rXFx0aWYgKHVubGlrZWx5KGxlbiA9PSAwKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXR1cm4gX19jb3B5X3JlbW90ZV9tbV9zdHIobW0sIGFkZHIsIGJ1ZiwgbGVuLCBndXBfZmxhZ3MpO1xcbit9XFxuK1xcbisvKipcXG4rICogY29weV9yZW1vdGVfdm1fc3RyIC0gY29weSBhIHN0cmluZyBmcm9tIGFub3RoZXIgcHJvY2VzcydzIGFkZHJlc3Mgc3BhY2UuXFxuKyAqIEB0c2s6XFx0dGhlIHRhc2sgb2YgdGhlIHRhcmdldCBhZGRyZXNzIHNwYWNlXFxuKyAqIEBhZGRyOlxcdHN0YXJ0IGFkZHJlc3MgdG8gcmVhZCBmcm9tXFxuKyAqIEBidWY6XFx0ZGVzdGluYXRpb24gYnVmZmVyXFxuKyAqIEBsZW46XFx0bnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHlcXG4rICogQGd1cF9mbGFnczpcXHRmbGFncyBtb2RpZnlpbmcgbG9va3VwIGJlaGF2aW91clxcbisgKlxcbisgKiBSZXR1cm46IG51bWJlciBvZiBieXRlcyBjb3BpZWQgZnJvbSBAYWRkciAoc291cmNlKSB0byBAYnVmIChkZXN0aW5hdGlvbiksXFxuKyAqIG5vdCBpbmNsdWRpbmcgdGhlIHRyYWlsaW5nIE5VTC4gSWYgQGxlbiBpcyB6ZXJvLCByZXR1cm4gMCB3aXRob3V0IGFjY2Vzc2luZ1xcbisgKiBAYnVmLiBPdGhlcndpc2UsIEBidWYgaXMgYWx3YXlzIE5VTC10ZXJtaW5hdGVkLiBPbiBhbnkgZXJyb3IsIHJldHVyblxcbisgKiAtRUZBVUxULlxcbisgKi9cXG4raW50IGNvcHlfcmVtb3RlX3ZtX3N0cihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdW5zaWduZWQgbG9uZyBhZGRyLFxcbitcXHRcXHQgICAgICAgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKVxcbit7XFxuK1xcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKHVubGlrZWx5KGxlbiA9PSAwKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRtbSA9IGdldF90YXNrX21tKHRzayk7XFxuK1xcdGlmICghbW0pIHtcXG4rXFx0XFx0KihjaGFyICopYnVmID0gJ1xcXFwwJztcXG4rXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IF9fY29weV9yZW1vdGVfbW1fc3RyKG1tLCBhZGRyLCBidWYsIGxlbiwgZ3VwX2ZsYWdzKTtcXG4rXFxuK1xcdG1tcHV0KG1tKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwoY29weV9yZW1vdGVfdm1fc3RyKTtcXG4rI2VuZGlmIC8qIENPTkZJR19CUEZfU1lTQ0FMTCAqL1xcbitcXG4gaW50IF9fd2VhayBtZW1jbXBfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UxLCBzdHJ1Y3QgcGFnZSAqcGFnZTIpXFxuIHtcXG4gXFx0Y2hhciAqYWRkcjEsICphZGRyMjtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2l0ZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9pdGVyLmNcXG5pbmRleCBjNjkwODBjYTE0ZjVhLi45OWExNmExYWRkNzBlIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9pdGVyLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfaXRlci5jXFxuQEAgLTM5LDEwICszOSwxMCBAQCBzdGF0aWMgdm9pZCB0ZXN0X2J0Zl9pZF9vcl9udWxsKHZvaWQpXFxuIFxcdHN0cnVjdCBicGZfaXRlcl90ZXN0X2tlcm4zICpza2VsO1xcbiBcXG4gXFx0c2tlbCA9IGJwZl9pdGVyX3Rlc3Rfa2VybjNfX29wZW5fYW5kX2xvYWQoKTtcXG4tXFx0aWYgKCFBU1NFUlRfRVJSX1BUUihza2VsLCBcXFwiYnBmX2l0ZXJfdGVzdF9rZXJuM19fb3Blbl9hbmRfbG9hZFxcXCIpKSB7XFxuLVxcdFxcdGJwZl9pdGVyX3Rlc3Rfa2VybjNfX2Rlc3Ryb3koc2tlbCk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcXFwiYnBmX2l0ZXJfdGVzdF9rZXJuM19fb3Blbl9hbmRfbG9hZFxcXCIpKVxcbiBcXHRcXHRyZXR1cm47XFxuLVxcdH1cXG4rXFxuK1xcdGJwZl9pdGVyX3Rlc3Rfa2VybjNfX2Rlc3Ryb3koc2tlbCk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGRvX2R1bW15X3JlYWRfb3B0cyhzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIHN0cnVjdCBicGZfaXRlcl9hdHRhY2hfb3B0cyAqb3B0cylcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY29weV9mcm9tX3VzZXJfYnBybS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY29weV9mcm9tX3VzZXJfYnBybS5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5iMjMyNWIxOTM1NzYxXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2NvcHlfZnJvbV91c2VyX2Jwcm0uY1xcbkBAIC0wLDAgKzEsNzIgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NlcnJuby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL3dhaXQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3VuaXN0ZC5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY3Rlc3RfcHJvZ3MuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJjb3B5X2Zyb21fdXNlcl9icHJtLnNrZWwuaFxcXCJcXG4rXFxuK3ZvaWQgdGVzdF9jb3B5X2Zyb21fdXNlcl9icHJtKHZvaWQpXFxuK3tcXG4rXFx0Y2hhciBhcmcwW10gPSBcXFwiZmlyc3RcXFwiO1xcbitcXHRjaGFyIGFyZzFbXSA9IFxcXCJzZWNvbmQtYXJndW1lbnRcXFwiO1xcbitcXHRjaGFyIGVudjBbXSA9IFxcXCJTT01FX0VOVj1hXFxcIjtcXG4rXFx0Y2hhciBlbnYxW10gPSBcXFwiT1RIRVJfRU5WPXNvbWV0aGluZ1xcXCI7XFxuK1xcdHN0cnVjdCBjb3B5X2Zyb21fdXNlcl9icHJtICpza2VsO1xcbitcXHRwaWRfdCBjaGlsZDtcXG4rXFx0aW50IHN0YXR1cztcXG4rXFxuK1xcdHNrZWwgPSBjb3B5X2Zyb21fdXNlcl9icHJtX19vcGVuX2FuZF9sb2FkKCk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcXFwib3Blbl9hbmRfbG9hZFxcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHQvKlxcbitcXHQgKiBPbiAhQ09ORklHX01NVSwgZXhlYyBzdHJpbmdzIGFyZSBoZWxkIGluIGJwcm0tXFx1MDAzZXBhZ2VbXSByYXRoZXIgdGhhblxcbitcXHQgKiBiZWluZyBtYXBwZWQgaW4gYnBybS1cXHUwMDNlbW0uXFxuK1xcdCAqL1xcbitcXHRpZiAoIXNrZWwtXFx1MDAzZWtjb25maWctXFx1MDAzZUNPTkZJR19NTVUpIHtcXG4rXFx0XFx0cHJpbnRmKFxcXCIlczpTS0lQOiB0ZXN0IHJlcXVpcmVzIENPTkZJR19NTVVcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4rXFx0XFx0dGVzdF9fc2tpcCgpO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCFBU1NFUlRfT0soY29weV9mcm9tX3VzZXJfYnBybV9fYXR0YWNoKHNrZWwpLCBcXFwiYXR0YWNoXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0Y2hpbGQgPSBmb3JrKCk7XFxuK1xcdGlmICghQVNTRVJUX0dFKGNoaWxkLCAwLCBcXFwiZm9ya1xcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdGlmICghY2hpbGQpIHtcXG4rXFx0XFx0Y2hhciAqY29uc3QgYXJndltdID0geyBhcmcwLCBhcmcxLCBOVUxMIH07XFxuK1xcdFxcdGNoYXIgKmNvbnN0IGVudnBbXSA9IHsgZW52MCwgZW52MSwgTlVMTCB9O1xcbitcXG4rXFx0XFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2Vtb25pdG9yZWRfcGlkID0gZ2V0cGlkKCk7XFxuK1xcdFxcdGV4ZWN2ZShcXFwiL2Jpbi90cnVlXFxcIiwgYXJndiwgZW52cCk7XFxuK1xcdFxcdF9leGl0KGVycm5vKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCFBU1NFUlRfRVEod2FpdHBpZChjaGlsZCwgXFx1MDAyNnN0YXR1cywgMCksIGNoaWxkLCBcXFwid2FpdHBpZFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdGlmIChBU1NFUlRfVFJVRShXSUZFWElURUQoc3RhdHVzKSwgXFxcImNoaWxkX2V4aXRlZFxcXCIpKVxcbitcXHRcXHRBU1NFUlRfRVEoV0VYSVRTVEFUVVMoc3RhdHVzKSwgRVBFUk0sIFxcXCJleGVjX2Vycm5vXFxcIik7XFxuK1xcbitcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VicHJtX2FyZ2MsIDIsIFxcXCJicHJtX2FyZ2NcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlYnBybV9lbnZjLCAyLCBcXFwiYnBybV9lbnZjXFxcIik7XFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWRhdGFfbGVuX21hdGNoLCAxLCBcXFwiZGF0YV9sZW5fbWF0Y2hcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlaW52YWxpZF9mbGFnc19yZXQsIC1FSU5WQUwsIFxcXCJpbnZhbGlkX2ZsYWdzX3JldFxcXCIpO1xcbitcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2Vjb3B5X3JldCwgMCwgXFxcImNvcHlfcmV0XFxcIik7XFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXN0cl9hcmcwX3JldCwgc2l6ZW9mKGFyZzApLCBcXFwic3RyX2FyZzBfcmV0XFxcIik7XFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXN0cl9hcmcxX3JldCwgc2l6ZW9mKGFyZzEpLCBcXFwic3RyX2FyZzFfcmV0XFxcIik7XFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXN0cl9lbnYwX3JldCwgc2l6ZW9mKGVudjApLCBcXFwic3RyX2VudjBfcmV0XFxcIik7XFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXN0cl9lbnYxX3JldCwgc2l6ZW9mKGVudjEpLCBcXFwic3RyX2VudjFfcmV0XFxcIik7XFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWRhdGFfbWF0Y2gsIDEsIFxcXCJkYXRhX21hdGNoXFxcIik7XFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXN0cl9hcmdzX21hdGNoLCAxLCBcXFwic3RyX2FyZ3NfbWF0Y2hcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlc3RyX2VudnNfbWF0Y2gsIDEsIFxcXCJzdHJfZW52c19tYXRjaFxcXCIpO1xcbitcXG4rb3V0OlxcbitcXHRjb3B5X2Zyb21fdXNlcl9icHJtX19kZXN0cm95KHNrZWwpO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19tYXliZV9udWxsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfbWF5YmVfbnVsbC5jXFxuaW5kZXggMDFkYzI2MTNjOGE1MS4uNDVhZjZmMDBhZDkwOCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfbWF5YmVfbnVsbC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX21heWJlX251bGwuY1xcbkBAIC0xOSwxNSArMTksMTYgQEAgc3RhdGljIHZvaWQgbWF5YmVfbnVsbCh2b2lkKVxcbiBcXHRzdHJ1Y3Rfb3BzX21heWJlX251bGxfX2Rlc3Ryb3koc2tlbCk7XFxuIH1cXG4gXFxuLS8qIFRlc3QgdGhhdCB0aGUgdmVyaWZpZXIgcmVqZWN0cyBhIHByb2dyYW0gdGhhdCBhY2Nlc3MgYSBudWxsYWJsZSBwb2ludGVyXFxuLSAqIHdpdGhvdXQgYSBjaGVjayBiZWZvcmVoYW5kLlxcbisvKlxcbisgKiBUZXN0IHRoYXQgdGhlIHZlcmlmaWVyIGFjY2VwdHMgYSBmYXVsdC1wcm90ZWN0ZWQgcmVhZCB0aHJvdWdoIGEgbnVsbGFibGVcXG4rICogdHJ1c3RlZCBwb2ludGVyIHdpdGhvdXQgYW4gZXhwbGljaXQgTlVMTCBjaGVjay5cXG4gICovXFxuLXN0YXRpYyB2b2lkIG1heWJlX251bGxfZmFpbCh2b2lkKVxcbitzdGF0aWMgdm9pZCBtYXliZV9udWxsX25vX2NoZWNrKHZvaWQpXFxuIHtcXG4gXFx0c3RydWN0IHN0cnVjdF9vcHNfbWF5YmVfbnVsbF9mYWlsICpza2VsO1xcbiBcXG4gXFx0c2tlbCA9IHN0cnVjdF9vcHNfbWF5YmVfbnVsbF9mYWlsX19vcGVuX2FuZF9sb2FkKCk7XFxuLVxcdGlmIChBU1NFUlRfRVJSX1BUUihza2VsLCBcXFwic3RydWN0X29wc19tb2R1bGVfZmFpbF9fb3Blbl9hbmRfbG9hZFxcXCIpKVxcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXFxcInN0cnVjdF9vcHNfbWF5YmVfbnVsbF9mYWlsX19vcGVuX2FuZF9sb2FkXFxcIikpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdHN0cnVjdF9vcHNfbWF5YmVfbnVsbF9mYWlsX19kZXN0cm95KHNrZWwpO1xcbkBAIC00MSw2ICs0Miw2IEBAIHZvaWQgdGVzdF9zdHJ1Y3Rfb3BzX21heWJlX251bGwodm9pZClcXG4gXFx0ICovXFxuIFxcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJtYXliZV9udWxsXFxcIikpXFxuIFxcdFxcdG1heWJlX251bGwoKTtcXG4tXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcIm1heWJlX251bGxfZmFpbFxcXCIpKVxcbi1cXHRcXHRtYXliZV9udWxsX2ZhaWwoKTtcXG4rXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcIm1heWJlX251bGxfbm9fY2hlY2tcXFwiKSlcXG4rXFx0XFx0bWF5YmVfbnVsbF9ub19jaGVjaygpO1xcbiB9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RwX2J0Zl9udWxsYWJsZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHBfYnRmX251bGxhYmxlLmNcXG5pbmRleCBhY2NjNDJlMDFmOGE4Li44MjVmZTdhOTJkNzRmIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RwX2J0Zl9udWxsYWJsZS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHBfYnRmX251bGxhYmxlLmNcXG5AQCAtMiw2ICsyLDMxIEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjdGVzdF9wcm9ncy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXFwidGVzdF90cF9idGZfbnVsbGFibGUuc2tlbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwidGVzdF90cF9idGZfbnVsbGFibGVfcnVudGltZS5za2VsLmhcXFwiXFxuK1xcbitzdGF0aWMgdm9pZCB0ZXN0X251bGxhYmxlX3J1bnRpbWUodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgdGVzdF90cF9idGZfbnVsbGFibGVfcnVudGltZSAqc2tlbDtcXG4rXFxuK1xcdHNrZWwgPSB0ZXN0X3RwX2J0Zl9udWxsYWJsZV9ydW50aW1lX19vcGVuX2FuZF9sb2FkKCk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcXFwib3Blbl9hbmRfbG9hZFxcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZW1vbml0b3JlZF90aWQgPSBzeXNfZ2V0dGlkKCk7XFxuK1xcbitcXHRpZiAoIUFTU0VSVF9PSyh0ZXN0X3RwX2J0Zl9udWxsYWJsZV9ydW50aW1lX19hdHRhY2goc2tlbCksIFxcXCJhdHRhY2hcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRpZiAoIUFTU0VSVF9PSyh0cmlnZ2VyX21vZHVsZV90ZXN0X3JlYWQoMiksIFxcXCJ0cmlnZ2VyXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlY2FsbHMsIDIsIFxcXCJjYWxsc1xcXCIpO1xcbitcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2Vub25udWxsX2xlbiwgMiwgXFxcIm5vbm51bGxfbGVuXFxcIik7XFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZW51bGxfbGVuLCAwLCBcXFwibnVsbF9sZW5cXFwiKTtcXG4rXFxuK291dDpcXG4rXFx0dGVzdF90cF9idGZfbnVsbGFibGVfcnVudGltZV9fZGVzdHJveShza2VsKTtcXG4rfVxcbiBcXG4gdm9pZCB0ZXN0X3RwX2J0Zl9udWxsYWJsZSh2b2lkKVxcbiB7XFxuQEAgLTExLDQgKzM2LDcgQEAgdm9pZCB0ZXN0X3RwX2J0Zl9udWxsYWJsZSh2b2lkKVxcbiBcXHR9XFxuIFxcbiBcXHRSVU5fVEVTVFModGVzdF90cF9idGZfbnVsbGFibGUpO1xcbitcXG4rXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcInJ1bnRpbWVcXFwiKSlcXG4rXFx0XFx0dGVzdF9udWxsYWJsZV9ydW50aW1lKCk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2NvcHlfZnJvbV91c2VyX2Jwcm0uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9jb3B5X2Zyb21fdXNlcl9icHJtLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmIzMzRhMTU3NDE5ZTVcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2NvcHlfZnJvbV91c2VyX2Jwcm0uY1xcbkBAIC0wLDAgKzEsMTIzIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuK1xcbisjaW5jbHVkZSBcXFwidm1saW51eC5oXFxcIlxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9icGZfaGVscGVycy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl90cmFjaW5nLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NlcnJuby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiYnBmX21pc2MuaFxcXCJcXG4rXFxuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcbitcXG4rc3RhdGljIGNvbnN0IGNoYXIgZXhwZWN0ZWRfZGF0YVtdID0gXFxcImZpcnN0XFxcXDBzZWNvbmQtYXJndW1lbnRcXFxcMFxcXCJcXG4rXFx0XFx0XFx0XFx0ICAgIFxcXCJTT01FX0VOVj1hXFxcXDBPVEhFUl9FTlY9c29tZXRoaW5nXFxcIjtcXG4rc3RhdGljIGNvbnN0IGNoYXIgZXhwZWN0ZWRfYXJnMFtdID0gXFxcImZpcnN0XFxcIjtcXG4rc3RhdGljIGNvbnN0IGNoYXIgZXhwZWN0ZWRfYXJnMVtdID0gXFxcInNlY29uZC1hcmd1bWVudFxcXCI7XFxuK3N0YXRpYyBjb25zdCBjaGFyIGV4cGVjdGVkX2VudjBbXSA9IFxcXCJTT01FX0VOVj1hXFxcIjtcXG4rc3RhdGljIGNvbnN0IGNoYXIgZXhwZWN0ZWRfZW52MVtdID0gXFxcIk9USEVSX0VOVj1zb21ldGhpbmdcXFwiO1xcbitcXG4raW50IG1vbml0b3JlZF9waWQ7XFxuK2ludCBicHJtX2FyZ2M7XFxuK2ludCBicHJtX2VudmM7XFxuK2ludCBkYXRhX2xlbl9tYXRjaDtcXG4raW50IGludmFsaWRfZmxhZ3NfcmV0O1xcbitpbnQgY29weV9yZXQ7XFxuK2ludCBzdHJfYXJnMF9yZXQ7XFxuK2ludCBzdHJfYXJnMV9yZXQ7XFxuK2ludCBzdHJfZW52MF9yZXQ7XFxuK2ludCBzdHJfZW52MV9yZXQ7XFxuK2ludCBkYXRhX21hdGNoO1xcbitpbnQgc3RyX2FyZ3NfbWF0Y2g7XFxuK2ludCBzdHJfZW52c19tYXRjaDtcXG4rXFxuK2V4dGVybiBib29sIENPTkZJR19NTVUgX19rY29uZmlnIF9fd2VhaztcXG4rXFxuK2V4dGVybiBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX21tKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osXFxuK1xcdFxcdFxcdFxcdCBjb25zdCB2b2lkICp1bnNhZmVfcHRyX19pZ24sXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdTY0IGZsYWdzKSBfX2tzeW07XFxuK1xcbitleHRlcm4gaW50IGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIodm9pZCAqZHN0LCB1MzIgZHN0X19zeixcXG4rXFx0XFx0XFx0XFx0ICAgICBjb25zdCB2b2lkICp1bnNhZmVfcHRyX19pZ24sXFxuK1xcdFxcdFxcdFxcdCAgICAgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHU2NCBmbGFncykgX19rc3ltO1xcbitcXG4rU0VDKFxcXCJsc20ucy9icHJtX2NoZWNrX3NlY3VyaXR5XFxcIilcXG4raW50IEJQRl9QUk9HKGNoZWNrX2V4ZWNfYXJncywgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcXG4re1xcbitcXHR1MzIgcGlkID0gYnBmX2dldF9jdXJyZW50X3BpZF90Z2lkKCkgXFx1MDAzZVxcdTAwM2UgMzI7XFxuK1xcdGNoYXIgZGF0YVtzaXplb2YoZXhwZWN0ZWRfZGF0YSldID0ge307XFxuK1xcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xcbitcXHRjaGFyIGFyZzBbMzJdID0ge307XFxuK1xcdGNoYXIgYXJnMVszMl0gPSB7fTtcXG4rXFx0Y2hhciBlbnYwWzMyXSA9IHt9O1xcbitcXHRjaGFyIGVudjFbMzJdID0ge307XFxuK1xcdHU2NCBvZmZzZXQgPSAwO1xcbitcXHR1NjQgZGF0YV9sZW47XFxuK1xcbitcXHRpZiAoIUNPTkZJR19NTVUpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKHBpZCAhPSBtb25pdG9yZWRfcGlkKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdG1tID0gYnBybS1cXHUwMDNlbW07XFxuK1xcdGlmICghbW0pXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0YnBybV9hcmdjID0gYnBybS1cXHUwMDNlYXJnYztcXG4rXFx0YnBybV9lbnZjID0gYnBybS1cXHUwMDNlZW52YztcXG4rXFxuK1xcdC8qIHRoaXMgaXMgdGhlIHRvdGFsIHNpemUgb2YgYXJncyBhbmQgZW52cyBzdGFydGluZyBmcm9tIGJwcm0tXFx1MDAzZXAgKi9cXG4rXFx0ZGF0YV9sZW4gPSBicHJtLVxcdTAwM2VleGVjIC0gYnBybS1cXHUwMDNlcDtcXG4rXFx0ZGF0YV9sZW5fbWF0Y2ggPSBkYXRhX2xlbiA9PSBzaXplb2YoZXhwZWN0ZWRfZGF0YSk7XFxuK1xcbitcXHRpbnZhbGlkX2ZsYWdzX3JldCA9IGJwZl9jb3B5X2Zyb21fdXNlcl9tbShkYXRhLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIHNpemVvZihkYXRhKSwgKHZvaWQgKilicHJtLVxcdTAwM2VwLCBtbSwgfjBVTEwpO1xcbitcXG4rXFx0Y29weV9yZXQgPSBicGZfY29weV9mcm9tX3VzZXJfbW0oZGF0YSwgc2l6ZW9mKGRhdGEpLCAodm9pZCAqKWJwcm0tXFx1MDAzZXAsXFxuK1xcdFxcdFxcdFxcdFxcdCBtbSwgMCk7XFxuK1xcdGlmIChjb3B5X3JldClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRkYXRhX21hdGNoID1cXG4rXFx0XFx0IV9fYnVpbHRpbl9tZW1jbXAoZGF0YSwgZXhwZWN0ZWRfZGF0YSwgc2l6ZW9mKGV4cGVjdGVkX2RhdGEpKTtcXG4rXFxuK1xcdC8qIGFyZzAgaXMgYXQgYnBybS1cXHUwMDNlcCAqL1xcbitcXHRzdHJfYXJnMF9yZXQgPSBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKGFyZzAsIHNpemVvZihhcmcwKSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICh2b2lkICopKGJwcm0tXFx1MDAzZXAgKyBvZmZzZXQpLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgbW0sIEJQRl9GX1BBRF9aRVJPUyk7XFxuK1xcdGlmIChzdHJfYXJnMF9yZXQgIT0gc2l6ZW9mKGV4cGVjdGVkX2FyZzApKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0b2Zmc2V0ICs9IHN0cl9hcmcwX3JldDtcXG4rXFxuK1xcdC8qIGFyZzEgaXMgYXQgYnBybS1cXHUwMDNlcCArIHNpemVvZihhcmcwKSAqL1xcbitcXHRzdHJfYXJnMV9yZXQgPSBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKGFyZzEsIHNpemVvZihhcmcxKSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICh2b2lkICopKGJwcm0tXFx1MDAzZXAgKyBvZmZzZXQpLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgbW0sIEJQRl9GX1BBRF9aRVJPUyk7XFxuK1xcdGlmIChzdHJfYXJnMV9yZXQgIT0gc2l6ZW9mKGV4cGVjdGVkX2FyZzEpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0b2Zmc2V0ICs9IHN0cl9hcmcxX3JldDtcXG4rXFxuK1xcdC8qIGVudjAgaXMgYXQgYnBybS1cXHUwMDNlcCArIHNpemVvZihhcmcwKSArIHNpemVvZihhcmcxKSAqL1xcbitcXHRzdHJfZW52MF9yZXQgPSBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKGVudjAsIHNpemVvZihlbnYwKSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICh2b2lkICopKGJwcm0tXFx1MDAzZXAgKyBvZmZzZXQpLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgbW0sIEJQRl9GX1BBRF9aRVJPUyk7XFxuK1xcdGlmIChzdHJfZW52MF9yZXQgIT0gc2l6ZW9mKGV4cGVjdGVkX2VudjApKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0b2Zmc2V0ICs9IHN0cl9lbnYwX3JldDtcXG4rXFxuK1xcdC8qIGVudjEgaXMgYXQgYnBybS1cXHUwMDNlcCArIHNpemVvZihhcmcwKSArIHNpemVvZihhcmcxKSArIHNpemVvZihlbnYwKSAqL1xcbitcXHRzdHJfZW52MV9yZXQgPSBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKGVudjEsIHNpemVvZihlbnYxKSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICh2b2lkICopKGJwcm0tXFx1MDAzZXAgKyBvZmZzZXQpLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgbW0sIEJQRl9GX1BBRF9aRVJPUyk7XFxuK1xcdGlmIChzdHJfZW52MV9yZXQgIT0gc2l6ZW9mKGV4cGVjdGVkX2VudjEpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHN0cl9hcmdzX21hdGNoID1cXG4rXFx0XFx0IV9fYnVpbHRpbl9tZW1jbXAoYXJnMCwgZXhwZWN0ZWRfYXJnMCwgc2l6ZW9mKGV4cGVjdGVkX2FyZzApKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQhX19idWlsdGluX21lbWNtcChhcmcxLCBleHBlY3RlZF9hcmcxLCBzaXplb2YoZXhwZWN0ZWRfYXJnMSkpO1xcbitcXHRzdHJfZW52c19tYXRjaCA9XFxuK1xcdFxcdCFfX2J1aWx0aW5fbWVtY21wKGVudjAsIGV4cGVjdGVkX2VudjAsIHNpemVvZihleHBlY3RlZF9lbnYwKSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0IV9fYnVpbHRpbl9tZW1jbXAoZW52MSwgZXhwZWN0ZWRfZW52MSwgc2l6ZW9mKGV4cGVjdGVkX2VudjEpKTtcXG4rXFxuK1xcdHJldHVybiBkYXRhX21hdGNoIFxcdTAwMjZcXHUwMDI2IHN0cl9hcmdzX21hdGNoIFxcdTAwMjZcXHUwMDI2IHN0cl9lbnZzX21hdGNoID8gLUVQRVJNIDogMDtcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmF3X3RwX251bGxfZmFpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Jhd190cF9udWxsX2ZhaWwuY1xcbmluZGV4IDcyNWQ3M2M5ZmZlMTMuLjE2MzEyNDc5M2QwYTYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Jhd190cF9udWxsX2ZhaWwuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yYXdfdHBfbnVsbF9mYWlsLmNcXG5AQCAtMiwyMiArMiwzNCBAQFxcbiAvKiBDb3B5cmlnaHQgKGMpIDIwMjQgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjdm1saW51eC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcImJwZl9taXNjLmhcXFwiXFxuIFxcbiBjaGFyIF9saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG4gXFxuLS8qIEVuc3VyZSBtb2R1bGUgcGFyYW1ldGVyIGhhcyBQVFJfTUFZQkVfTlVMTCAqL1xcbitleHRlcm4gc3RydWN0IHRhc2tfc3RydWN0ICpicGZfdGFza19hY3F1aXJlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkgX19rc3ltO1xcbitleHRlcm4gdm9pZCBicGZfdGFza19yZWxlYXNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkgX19rc3ltO1xcbitcXG4rLypcXG4rICogRW5zdXJlIHRoZSBtb2R1bGUgdHJhY2Vwb2ludCBhcmd1bWVudCBpcyB0cnVzdGVkLW9yLU5VTEwgd2hpbGUgYWxsb3dpbmdcXG4rICogYSBmYXVsdC1wcm90ZWN0ZWQgcmVhZCB3aXRob3V0IGFuIGV4cGxpY2l0IE5VTEwgY2hlY2suXFxuKyAqL1xcbiBTRUMoXFxcInRwX2J0Zi9icGZfdGVzdG1vZF90ZXN0X3Jhd190cF9udWxsX3RwXFxcIilcXG4tX19mYWlsdXJlIF9fbXNnKFxcXCJSMSBpbnZhbGlkIG1lbSBhY2Nlc3MgJ3RydXN0ZWRfcHRyX29yX251bGxfJ1xcXCIpXFxuK19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxcbitfX21zZyhcXFwiUjE9dHJ1c3RlZF9wdHJfb3JfbnVsbF9za19idWZmXFxcIilcXG4gaW50IHRlc3RfcmF3X3RwX251bGxfYnBmX3Rlc3Rtb2RfdGVzdF9yYXdfdHBfbnVsbF9hcmdfMSh2b2lkICpjdHgpIHtcXG4gICAgIGFzbSB2b2xhdGlsZShcXFwicjEgPSAqKHU2NCAqKShyMSArMCk7IHIxID0gKih1NjQgKikocjEgKzApO1xcXCIgOjo6IF9fY2xvYmJlcl9hbGwpO1xcbiAgICAgcmV0dXJuIDA7XFxuIH1cXG4gXFxuLS8qIENoZWNrIE5VTEwgbWFya2luZyAqL1xcbisvKlxcbisgKiBFbnN1cmUgc2NoZWRfcGlfc2V0cHJpbydzIHNlY29uZCBhcmd1bWVudCBpcyB0cnVzdGVkLW9yLU5VTEwgd2hpbGUgYWxsb3dpbmdcXG4rICogYSBmYXVsdC1wcm90ZWN0ZWQgcmVhZCB3aXRob3V0IGFuIGV4cGxpY2l0IE5VTEwgY2hlY2suXFxuKyAqL1xcbiBTRUMoXFxcInRwX2J0Zi9zY2hlZF9waV9zZXRwcmlvXFxcIilcXG4tX19mYWlsdXJlIF9fbXNnKFxcXCJSMSBpbnZhbGlkIG1lbSBhY2Nlc3MgJ3RydXN0ZWRfcHRyX29yX251bGxfJ1xcXCIpXFxuK19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxcbitfX21zZyhcXFwiUjE9dHJ1c3RlZF9wdHJfb3JfbnVsbF90YXNrX3N0cnVjdFxcXCIpXFxuIGludCB0ZXN0X3Jhd190cF9udWxsX3NjaGVkX3BpX3NldHByaW9fYXJnXzIodm9pZCAqY3R4KSB7XFxuICAgICBhc20gdm9sYXRpbGUoXFxcInIxID0gKih1NjQgKikocjEgKzgpOyByMSA9ICoodTY0ICopKHIxICswKTtcXFwiIDo6OiBfX2Nsb2JiZXJfYWxsKTtcXG4gICAgIHJldHVybiAwO1xcbkBAIC02MCw3ICs3Miw4IEBAIGludCB0ZXN0X3RwX2J0Zl9zaWduYWxfZGVsaXZlcl9pbmZvX25vX2RlcmVmKHZvaWQgKmN0eClcXG4gfVxcbiBcXG4gU0VDKFxcXCJ0cF9idGYvc2NoZWRfcHJvY2Vzc193YWl0XFxcIilcXG4tX19mYWlsdXJlIF9fbXNnKFxcXCJSMSBpbnZhbGlkIG1lbSBhY2Nlc3MgJ3RydXN0ZWRfcHRyX29yX251bGxfJ1xcXCIpXFxuK19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxcbitfX21zZyhcXFwiUjE9dHJ1c3RlZF9wdHJfb3JfbnVsbF9waWRcXFwiKVxcbiBpbnQgdGVzdF9yYXdfdHBfbnVsbF9zY2hlZF9wcm9jZXNzX3dhaXRfYXJnXzEodm9pZCAqY3R4KVxcbiB7XFxuIFxcdGFzbSB2b2xhdGlsZShcXFwicjEgPSAqKHU2NCAqKShyMSArMCk7IHIxID0gKih1MzIgKikocjEgKzApO1xcXCIgOjo6IF9fY2xvYmJlcl9hbGwpO1xcbkBAIC03NSwzICs4OCw1OCBAQCBpbnQgdGVzdF9yYXdfdHBfbnVsbF9zY2hlZF9wcm9jZXNzX3dhaXRfYXJnXzFfY2hlY2tlZCh2b2lkICpjdHgpXFxuIFxcdFxcdCAgICAgXFxcInIxID0gKih1MzIgKikocjEgKzApO1xcXCIgOjo6IF9fY2xvYmJlcl9hbGwpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbitcXG4rU0VDKFxcXCJ0cF9idGYvc2NoZWRfcGlfc2V0cHJpb1xcXCIpXFxuK19fZmFpbHVyZSBfX2xvZ19sZXZlbCgyKVxcbitfX21zZyhcXFwiUjE9dW50cnVzdGVkX3B0cl90YXNrX3N0cnVjdFxcXCIpXFxuK19fbXNnKFxcXCJSMSBtdXN0IGJlIGEgcmN1IHBvaW50ZXJcXFwiKVxcbitpbnQgQlBGX1BST0codHJ1c3RlZF9vcl9udWxsX3dhbGtfaXNfdW50cnVzdGVkLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssXFxuK1xcdCAgICAgc3RydWN0IHRhc2tfc3RydWN0ICpwaV90YXNrKVxcbit7XFxuK1xcdHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50LCAqYWNxdWlyZWQ7XFxuK1xcbitcXHRwYXJlbnQgPSBwaV90YXNrLVxcdTAwM2VyZWFsX3BhcmVudDtcXG4rXFx0YWNxdWlyZWQgPSBicGZfdGFza19hY3F1aXJlKHBhcmVudCk7XFxuK1xcdGlmIChhY3F1aXJlZClcXG4rXFx0XFx0YnBmX3Rhc2tfcmVsZWFzZShhY3F1aXJlZCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitTRUMoXFxcInRwX2J0Zi9zY2hlZF9waV9zZXRwcmlvXFxcIilcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJSMSBtdXN0IGJlIGEgcmN1IHBvaW50ZXJcXFwiKVxcbitpbnQgQlBGX1BST0coZGVyaXZlZF9wdHJfbnVsbF9jaGVja19kb2VzX25vdF9yZXN0b3JlX3RydXN0LFxcbitcXHQgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHRhc2tfc3RydWN0ICpwaV90YXNrKVxcbit7XFxuK1xcdHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50LCAqYWNxdWlyZWQ7XFxuK1xcbitcXHRwYXJlbnQgPSBwaV90YXNrLVxcdTAwM2VyZWFsX3BhcmVudDtcXG4rXFx0aWYgKCFwYXJlbnQpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0YWNxdWlyZWQgPSBicGZfdGFza19hY3F1aXJlKHBhcmVudCk7XFxuK1xcdGlmIChhY3F1aXJlZClcXG4rXFx0XFx0YnBmX3Rhc2tfcmVsZWFzZShhY3F1aXJlZCk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLypcXG4rICogSW4gY29udHJhc3QsIGNoZWNraW5nIHRoZSBvcmlnaW5hbCB0cnVzdGVkLW9yLU5VTEwgcG9pbnRlciByZW1vdmVzXFxuKyAqIFBUUl9NQVlCRV9OVUxMIHdoaWxlIHJldGFpbmluZyBQVFJfVFJVU1RFRC5cXG4rICovXFxuK1NFQyhcXFwidHBfYnRmL3NjaGVkX3BpX3NldHByaW9cXFwiKVxcbitfX3N1Y2Nlc3NcXG4raW50IEJQRl9QUk9HKG9yaWdpbmFsX3B0cl9udWxsX2NoZWNrX3JldGFpbnNfdHJ1c3QsXFxuK1xcdCAgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBpX3Rhc2spXFxuK3tcXG4rXFx0c3RydWN0IHRhc2tfc3RydWN0ICphY3F1aXJlZDtcXG4rXFxuK1xcdGlmICghcGlfdGFzaylcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRhY3F1aXJlZCA9IGJwZl90YXNrX2FjcXVpcmUocGlfdGFzayk7XFxuK1xcdGlmIChhY3F1aXJlZClcXG4rXFx0XFx0YnBmX3Rhc2tfcmVsZWFzZShhY3F1aXJlZCk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90cF9idGZfbnVsbGFibGUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RwX2J0Zl9udWxsYWJsZS5jXFxuaW5kZXggY2YwNTQ3YTYxM2ZmYy4uYjc5MTQyMjRiYTE5NCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90cF9idGZfbnVsbGFibGUuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RwX2J0Zl9udWxsYWJsZS5jXFxuQEAgLTcsNyArNyw3IEBAXFxuICNpbmNsdWRlIFxcXCJicGZfbWlzYy5oXFxcIlxcbiBcXG4gU0VDKFxcXCJ0cF9idGYvYnBmX3Rlc3Rtb2RfdGVzdF9udWxsYWJsZV9iYXJlX3RwXFxcIilcXG4tX19mYWlsdXJlIF9fbXNnKFxcXCJSMSBpbnZhbGlkIG1lbSBhY2Nlc3MgJ3RydXN0ZWRfcHRyX29yX251bGxfJ1xcXCIpXFxuK19fc3VjY2Vzc1xcbiBpbnQgQlBGX1BST0coaGFuZGxlX3RwX2J0Zl9udWxsYWJsZV9iYXJlMSwgc3RydWN0IGJwZl90ZXN0bW9kX3Rlc3RfcmVhZF9jdHggKm51bGxhYmxlX2N0eClcXG4ge1xcbiBcXHRyZXR1cm4gbnVsbGFibGVfY3R4LVxcdTAwM2VsZW47XFxuQEAgLTIxLDQgKzIxLDQ3IEBAIGludCBCUEZfUFJPRyhoYW5kbGVfdHBfYnRmX251bGxhYmxlX2JhcmUyLCBzdHJ1Y3QgYnBmX3Rlc3Rtb2RfdGVzdF9yZWFkX2N0eCAqbnVsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitTRUMoXFxcInRwX2J0Zi9icGZfdGVzdG1vZF90ZXN0X251bGxhYmxlX2JhcmVfdHBcXFwiKVxcbitfX3N1Y2Nlc3NcXG4raW50IEJQRl9QUk9HKGhhbmRsZV90cF9idGZfbnVsbGFibGVfbWVtLCBzdHJ1Y3QgYnBmX3Rlc3Rtb2RfdGVzdF9yZWFkX2N0eCAqbnVsbGFibGVfY3R4KVxcbit7XFxuK1xcdHJldHVybiBudWxsYWJsZV9jdHgtXFx1MDAzZWJ1ZlswXTtcXG4rfVxcbitcXG4rU0VDKFxcXCJ0cF9idGYvYnBmX3Rlc3Rtb2RfdGVzdF9udWxsYWJsZV9iYXJlX3RwXFxcIilcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJwb2ludGVyIGFyaXRobWV0aWMgb24gdHJ1c3RlZF9wdHJfb3JfbnVsbF8gcHJvaGliaXRlZFxcXCIpXFxuK2ludCBCUEZfUFJPRyhoYW5kbGVfdHBfYnRmX251bGxhYmxlX2FyaXRoLCBzdHJ1Y3QgYnBmX3Rlc3Rtb2RfdGVzdF9yZWFkX2N0eCAqbnVsbGFibGVfY3R4KVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZShcXFwiJVtjdHhdICs9IDFcXFwiIDogW2N0eF0gXFxcIityXFxcIihudWxsYWJsZV9jdHgpKTtcXG4rXFx0cmV0dXJuIG51bGxhYmxlX2N0eC1cXHUwMDNlbGVuO1xcbit9XFxuK1xcbitTRUMoXFxcInRwX2J0Zi9icGZfdGVzdG1vZF90ZXN0X251bGxhYmxlX2JhcmVfdHBcXFwiKVxcbitfX2ZhaWx1cmUgX19tc2coXFxcImludmFsaWQgbWVtIGFjY2VzcyAndHJ1c3RlZF9wdHJfb3JfbnVsbF8nXFxcIilcXG4raW50IEJQRl9QUk9HKGhhbmRsZV90cF9idGZfbnVsbGFibGVfYXRvbWljX3JtdyxcXG4rXFx0ICAgICBzdHJ1Y3QgYnBmX3Rlc3Rtb2RfdGVzdF9yZWFkX2N0eCAqbnVsbGFibGVfY3R4KVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxcInIxID0gJVtjdHhdO1xcXCJcXG4rXFx0XFx0ICAgICAgXFxcIncyID0gMTtcXFwiXFxuK1xcdFxcdCAgICAgIFxcXCJsb2NrICoodTMyICopKHIxICsgJVtsZW5dKSArPSB3MjtcXFwiXFxuK1xcdFxcdCAgICAgIDpcXG4rXFx0XFx0ICAgICAgOiBbY3R4XSBcXFwiclxcXCIobnVsbGFibGVfY3R4KSxcXG4rXFx0XFx0XFx0X19pbW1fY29uc3QobGVuLFxcbitcXHRcXHRcXHRcXHQgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl90ZXN0bW9kX3Rlc3RfcmVhZF9jdHgsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgbGVuKSlcXG4rXFx0XFx0ICAgICAgOiBcXFwicjFcXFwiLCBcXFwicjJcXFwiLCBcXFwibWVtb3J5XFxcIik7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisjaWZkZWYgX19CUEZfRkVBVFVSRV9MT0FEX0FDUV9TVE9SRV9SRUxcXG4rU0VDKFxcXCJ0cF9idGYvYnBmX3Rlc3Rtb2RfdGVzdF9udWxsYWJsZV9iYXJlX3RwXFxcIilcXG4rX19mYWlsdXJlXFxuK19fbXNnKFxcXCJCUEZfQVRPTUlDIGxvYWRzIGZyb20gUnt7WzAtOV0rfX0gdHJ1c3RlZF9wdHJfb3JfbnVsbF9cXFwiKVxcbitpbnQgQlBGX1BST0coaGFuZGxlX3RwX2J0Zl9udWxsYWJsZV9sb2FkX2FjcXVpcmUsXFxuK1xcdCAgICAgc3RydWN0IGJwZl90ZXN0bW9kX3Rlc3RfcmVhZF9jdHggKm51bGxhYmxlX2N0eClcXG4re1xcbitcXHRyZXR1cm4gX19hdG9taWNfbG9hZF9uKFxcdTAwMjZudWxsYWJsZV9jdHgtXFx1MDAzZWxlbiwgX19BVE9NSUNfQUNRVUlSRSk7XFxuK31cXG4rI2VuZGlmXFxuK1xcbiBjaGFyIF9saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdHBfYnRmX251bGxhYmxlX3J1bnRpbWUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RwX2J0Zl9udWxsYWJsZV9ydW50aW1lLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjVjOWM3Zjk0MDQwZGNcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdHBfYnRmX251bGxhYmxlX3J1bnRpbWUuY1xcbkBAIC0wLDAgKzEsMzUgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rXFxuKyNpbmNsdWRlIFxcXCJ2bWxpbnV4LmhcXFwiXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiLi4vdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5oXFxcIlxcbitcXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuK1xcbitpbnQgbW9uaXRvcmVkX3RpZDtcXG4raW50IGNhbGxzO1xcbitfX3U2NCBub25udWxsX2xlbjtcXG4rX191NjQgbnVsbF9sZW47XFxuK1xcbitTRUMoXFxcInRwX2J0Zi9icGZfdGVzdG1vZF90ZXN0X251bGxhYmxlX2JhcmVfdHBcXFwiKVxcbitpbnQgQlBGX1BST0coaGFuZGxlX251bGxhYmxlX3J1bnRpbWUsXFxuK1xcdCAgICAgc3RydWN0IGJwZl90ZXN0bW9kX3Rlc3RfcmVhZF9jdHggKm51bGxhYmxlX2N0eClcXG4re1xcbitcXHRfX3UzMiB0aWQgPSBicGZfZ2V0X2N1cnJlbnRfcGlkX3RnaWQoKTtcXG4rXFx0X191NjQgbGVuO1xcbitcXHRpbnQgY2FsbDtcXG4rXFxuK1xcdGlmICh0aWQgIT0gbW9uaXRvcmVkX3RpZClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRsZW4gPSBudWxsYWJsZV9jdHgtXFx1MDAzZWxlbjtcXG4rXFx0Y2FsbCA9IGNhbGxzKys7XFxuK1xcbitcXHRpZiAoY2FsbCA9PSAwKVxcbitcXHRcXHRub25udWxsX2xlbiA9IGxlbjtcXG4rXFx0ZWxzZSBpZiAoY2FsbCA9PSAxKVxcbitcXHRcXHRudWxsX2xlbiA9IGxlbjtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sc20uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sc20uY1xcbmluZGV4IGM3MjRiZjM4OWY1YzYuLmZhYzEzM2Q5MGY1ZTYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xzbS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xzbS5jXFxuQEAgLTE2MiwxMyArMTYyLDEzIEBAIF9fbmFrZWQgaW50IGRpc2FibGVkX2hvb2tfdGVzdDModm9pZCAqY3R4KVxcbiBcXG4gU0VDKFxcXCJsc20vbW1hcF9maWxlXFxcIilcXG4gX19kZXNjcmlwdGlvbihcXFwibm90IG51bGwgY2hlY2tpbmcgbnVsbGFibGUgcG9pbnRlciBpbiBicGZfbHNtX21tYXBfZmlsZVxcXCIpXFxuLV9fZmFpbHVyZSBfX21zZyhcXFwiUjEgaW52YWxpZCBtZW0gYWNjZXNzICd0cnVzdGVkX3B0cl9vcl9udWxsXydcXFwiKVxcbitfX3N1Y2Nlc3NcXG4gaW50IEJQRl9QUk9HKG5vX251bGxfY2hlY2ssIHN0cnVjdCBmaWxlICpmaWxlKVxcbiB7XFxuLVxcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XFxuK1xcdGlub190IGlubztcXG4gXFxuLVxcdGlub2RlID0gZmlsZS1cXHUwMDNlZl9pbm9kZTtcXG4tXFx0X19zaW5rKGlub2RlKTtcXG4rXFx0aW5vID0gZmlsZS1cXHUwMDNlZl9pbm9kZS1cXHUwMDNlaV9pbm87XFxuK1xcdF9fc2luayhpbm8pO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtMTg4LDYgKzE4OCwxNiBAQCBpbnQgQlBGX1BST0cobnVsbF9jaGVjaywgc3RydWN0IGZpbGUgKmZpbGUpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitTRUMoXFxcImxzbS9tbWFwX2ZpbGVcXFwiKVxcbitfX2Rlc2NyaXB0aW9uKFxcXCJzdG9yZSB0aHJvdWdoIHRydXN0ZWQtb3ItbnVsbCBmaWxlIGlzIHJlamVjdGVkXFxcIilcXG4rX19mYWlsdXJlXFxuK19fbXNnKFxcXCJSe3tbMC05XSt9fSBpbnZhbGlkIG1lbSBhY2Nlc3MgJ3RydXN0ZWRfcHRyX29yX251bGxfJ1xcXCIpXFxuK2ludCBCUEZfUFJPRyhzdG9yZV90aHJvdWdoX3RydXN0ZWRfb3JfbnVsbF9maWxlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4re1xcbitcXHRmaWxlLVxcdTAwM2VmX2ZsYWdzID0gMDtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIFNFQyhcXFwibHNtX2Nncm91cC9maWxlX29wZW5cXFwiKVxcbiBfX2Rlc2NyaXB0aW9uKFxcXCJzbGVlcGFibGUgbHNtX2Nncm91cCBwcm9ncmFtIGlzIHJlamVjdGVkXFxcIilcXG4gX19mYWlsdXJlIF9fbXNnKFxcXCJQcm9ncmFtIG9mIHRoaXMgdHlwZSBjYW5ub3QgYmUgc2xlZXBhYmxlXFxcIilcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3Zmc19hY2NlcHQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl92ZnNfYWNjZXB0LmNcXG5pbmRleCA1NTM5OGMwNDI5MGE4Li4xN2MxNTQyY2M3ZTE3IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl92ZnNfYWNjZXB0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdmZzX2FjY2VwdC5jXFxuQEAgLTEwMCw0ICsxMDAsMTggQEAgaW50IEJQRl9QUk9HKGlub2RlX3JlbmFtZSwgc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rU0VDKFxcXCJsc20ucy9pbm9kZV9yZW5hbWVcXFwiKVxcbitfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcXG4rX19tc2coXFxcIlJ7e1swLTldK319PXRydXN0ZWRfcHRyX29yX251bGxfaW5vZGVcXFwiKVxcbitpbnQgQlBGX1BST0coaW5vZGVfcmVuYW1lX25vX251bGxfY2hlY2ssIHN0cnVjdCBpbm9kZSAqb2xkX2RpcixcXG4rXFx0ICAgICBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKm5ld19kaXIsXFxuK1xcdCAgICAgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSwgdW5zaWduZWQgaW50IGZsYWdzKVxcbit7XFxuK1xcdGlub190IGlubyA9IG5ld19kZW50cnktXFx1MDAzZWRfaW5vZGUtXFx1MDAzZWlfaW5vO1xcbitcXG4rXFx0aWYgKGlubyA9PSAwKVxcbitcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIGNoYXIgX2xpY2Vuc2VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdmZzX3JlamVjdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3Zmc19yZWplY3QuY1xcbmluZGV4IDhmMGM0NTQyMWY4OTMuLjJhMDgxMzI1ODE4M2UgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3Zmc19yZWplY3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl92ZnNfcmVqZWN0LmNcXG5AQCAtMTU5LDE4ICsxNTksNCBAQCBpbnQgQlBGX1BST0cocGF0aF9kX3BhdGhfa2Z1bmNfbm9uX2xzbSwgc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBmaWxlICpmKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tU0VDKFxcXCJsc20ucy9pbm9kZV9yZW5hbWVcXFwiKVxcbi1fX2ZhaWx1cmUgX19tc2coXFxcImludmFsaWQgbWVtIGFjY2VzcyAndHJ1c3RlZF9wdHJfb3JfbnVsbF8nXFxcIilcXG4taW50IEJQRl9QUk9HKGlub2RlX3JlbmFtZSwgc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxcbi1cXHQgICAgIHN0cnVjdCBpbm9kZSAqbmV3X2Rpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSxcXG4tXFx0ICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuLXtcXG4tXFx0c3RydWN0IGlub2RlICppbm9kZSA9IG5ld19kZW50cnktXFx1MDAzZWRfaW5vZGU7XFxuLVxcdGlub190IGlubztcXG4tXFxuLVxcdGlubyA9IGlub2RlLVxcdTAwM2VpX2lubztcXG4tXFx0aWYgKGlubyA9PSAwKVxcbi1cXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4gY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jXFxuaW5kZXggZjc5OGJiYmI0ZDEzYy4uMmJhNmE4M2QyNDNmNSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuY1xcbkBAIC03MDIsNiArNzAyLDcgQEAgYnBmX3Rlc3Rtb2RfdGVzdF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4gXFx0aWYgKGJwZl90ZXN0bW9kX2xvb3BfdGVzdCgxMDEpIFxcdTAwM2UgMTAwKVxcbiBcXHRcXHR0cmFjZV9icGZfdGVzdG1vZF90ZXN0X3JlYWQoY3VycmVudCwgXFx1MDAyNmN0eCk7XFxuIFxcbitcXHR0cmFjZV9icGZfdGVzdG1vZF90ZXN0X251bGxhYmxlX2JhcmVfdHAoXFx1MDAyNmN0eCk7XFxuIFxcdHRyYWNlX2JwZl90ZXN0bW9kX3Rlc3RfbnVsbGFibGVfYmFyZV90cChOVUxMKTtcXG4gXFxuIFxcdC8qIE1hZ2ljIG51bWJlciB0byBlbmFibGUgd3JpdGFibGUgdHAgKi9cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2NoZWRfZXh0L21heWJlX251bGxfZmFpbF9kc3AuYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zY2hlZF9leHQvbWF5YmVfbnVsbF9mYWlsX2RzcC5icGYuY1xcbmluZGV4IGVjNzI0ZDdiMzNkMTguLmVjYWEzNjM1NWNhZWMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2NoZWRfZXh0L21heWJlX251bGxfZmFpbF9kc3AuYnBmLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zY2hlZF9leHQvbWF5YmVfbnVsbF9mYWlsX2RzcC5icGYuY1xcbkBAIC03LDE0ICs3LDEzIEBAXFxuIFxcbiBjaGFyIF9saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG4gXFxuLXU2NCB2dGltZV90ZXN0O1xcbi1cXG4gdm9pZCBCUEZfU1RSVUNUX09QUyhtYXliZV9udWxsX3J1bm5pbmcsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcXG4ge31cXG4gXFxuIHZvaWQgQlBGX1NUUlVDVF9PUFMobWF5YmVfbnVsbF9mYWlsX2Rpc3BhdGNoLCBzMzIgY3B1LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXFxuIHtcXG4tXFx0dnRpbWVfdGVzdCA9IHAtXFx1MDAzZXNjeC5kc3FfdnRpbWU7XFxuK1xcdC8qIFBvaW50ZXIgYXJpdGhtZXRpYyBvbiBhIHRydXN0ZWQtb3ItTlVMTCBwb2ludGVyIG11c3QgYmUgcmVqZWN0ZWQuICovXFxuK1xcdGFzbSB2b2xhdGlsZShcXFwiJVtwXSArPSAwXFxcIiA6IFtwXSBcXFwiK3JcXFwiKHApKTtcXG4gfVxcbiBcXG4gU0VDKFxcXCIuc3RydWN0X29wcy5saW5rXFxcIilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjA6MjA6NTUuNjc4NTkxNjUzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0MTU1Nzc2NzI1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiREVCVUdfSU5GT19CVEZcIixcbiAgICBcIkJQRl9MU01cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfY29weV9mcm9tX3VzZXJfbW1cIixcbiAgICBcImJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHJcIixcbiAgICBcImJwZl9jb3B5X2Zyb21fdXNlcl90YXNrXCIsXG4gICAgXCJicGZfY29weV9mcm9tX3VzZXJfdGFza19zdHJcIixcbiAgICBcImNvcHlfcmVtb3RlX21tX3N0clwiLFxuICAgIFwiY29weV9yZW1vdGVfdm1fc3RyXCIsXG4gICAgXCJfX2NvcHlfcmVtb3RlX21tX3N0clwiLFxuICAgIFwiY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3NcIixcbiAgICBcInR5cGVfaXNfdHJ1c3RlZF9vcl9udWxsXCIsXG4gICAgXCJjaGVja19tZW1fYWNjZXNzXCIsXG4gICAgXCJicGZfY29udmVydF9jdHhfYWNjZXNzZXNcIixcbiAgICBcImZyZWVfYnBybVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IHNsZWVwYWJsZSBCUEYga2Z1bmNzIChicGZfY29weV9mcm9tX3VzZXJfbW0gYW5kIGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIpLCByZWZhY3RvcnMgcmVtb3RlIE1NIHN0cmluZyBjb3B5aW5nIGhlbHBlcnMgYWNyb3NzIG1tLyBhbmQga2VybmVsL2JwZi8sIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gYWxsb3cgZmF1bHQtcHJvdGVjdGVkIGxvYWRzIHRocm91Z2ggdHJ1c3RlZC1vci1udWxsIHBvaW50ZXJzLCBhbmQgYWx0ZXJzIG1tIGNsZWFudXAgaW4gZnJlZV9icHJtKCkuIFRoZXNlIGNoYW5nZXMgdG91Y2ggY29yZSBCUEYgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IGV4ZWN1dGlvbiBwYXRocyByZWFjaGFibGUgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMgdmlhIEJQRiBhbmQgZXhlYyBzeXNjYWxscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkYjc3YWY2NmIzYWEwN2IxM2RjODNhYWZjYTFiOGIwYTAyOTFhMWZiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAyMDoyMDo1MyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4ZWMuYyBiL2ZzL2V4ZWMuY1xuaW5kZXggNzQ1ZjZlYjUyNzllNi4uNGRkZDQwM2ZkOTFjNyAxMDA2NDRcbi0tLSBhL2ZzL2V4ZWMuY1xuKysrIGIvZnMvZXhlYy5jXG5AQCAtMTQ1Niw5ICsxNDU2LDEyIEBAIHZvaWQgYnBybV9kcm9wX2xvYWRlcihzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuIFxuIHN0YXRpYyB2b2lkIGZyZWVfYnBybShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuIHtcbi1cdGlmIChicHJtLVx1MDAzZW1tKSB7XG4rXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGJwcm0tXHUwMDNlbW07XG4rXG4rXHRpZiAobW0pIHtcbiBcdFx0YWNjdF9hcmdfc2l6ZShicHJtLCAwKTtcbi1cdFx0bW1wdXQoYnBybS1cdTAwM2VtbSk7XG4rXHRcdGJwcm0tXHUwMDNlbW0gPSBOVUxMO1xuK1x0XHRtbXB1dChtbSk7XG4gXHR9XG4gXHRpZiAoYnBybS1cdTAwM2V1c2VyX25zKVxuIFx0XHRwdXRfdXNlcl9ucyhicHJtLVx1MDAzZXVzZXJfbnMpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmggYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG5pbmRleCA5NzI3ZGY1YWY4M2FiLi40ZjAzMmFkODNjNjc1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuKysrIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuQEAgLTEzMzksNiArMTMzOSwxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYnBmX2lzX3B0cl90b19tZW1fb3JfYnRmX2lkKGVudW0gYnBmX3JlZ190eXBlIHR5cGUpXG4gXHR9XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBicGZfaXNfdHJ1c3RlZF9vcl9udWxsX2J0Zl9wdHIoZW51bSBicGZfcmVnX3R5cGUgdHlwZSlcbit7XG4rXHRyZXR1cm4gdHlwZSA9PSAoUFRSX1RPX0JURl9JRCB8IFBUUl9UUlVTVEVEIHwgUFRSX01BWUJFX05VTEwpO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIGJvb2wgYnBmX21heV9mYXVsdF9vbl9kZXJlZihlbnVtIGJwZl9yZWdfdHlwZSB0eXBlKVxuIHtcbiBcdC8qXG5AQCAtMTM0Niw3ICsxMzUxLDkgQEAgc3RhdGljIGlubGluZSBib29sIGJwZl9tYXlfZmF1bHRfb25fZGVyZWYoZW51bSBicGZfcmVnX3R5cGUgdHlwZSlcbiBcdCAqIHByb3RlY3Rpb24sIHRoYXQgaXMsIHRoZSBvbmVzIGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcygpIGhhcyB0b1xuIFx0ICogdHVybiBhIEJQRl9MRFggaW50byBhIEJQRl9QUk9CRV9NRU0gb25lIGZvci5cbiBcdCAqL1xuLVx0cmV0dXJuIHR5cGUgPT0gUFRSX1RPX0JURl9JRCB8fCAodHlwZV9mbGFnKHR5cGUpIFx1MDAyNiBQVFJfVU5UUlVTVEVEKTtcbitcdHJldHVybiB0eXBlID09IFBUUl9UT19CVEZfSUQgfHxcbitcdCAgICAgICAodHlwZV9mbGFnKHR5cGUpIFx1MDAyNiBQVFJfVU5UUlVTVEVEKSB8fFxuK1x0ICAgICAgIGJwZl9pc190cnVzdGVkX29yX251bGxfYnRmX3B0cih0eXBlKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBib29sIGJwZl9wcm9nX2hhc19hcmVuYV9jdHhfYXJnKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmhcbmluZGV4IGRkMDljNDM4ZmEyM2UuLmQ1YmRlMWY3MWE5N2UgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbW0uaFxuQEAgLTMzMjYsNiArMzMyNiw4IEBAIGV4dGVybiBpbnQgYWNjZXNzX3JlbW90ZV92bShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHR2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpO1xuIFxuICNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbitleHRlcm4gaW50IGNvcHlfcmVtb3RlX21tX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuK1x0XHRcdCAgICAgIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncyk7XG4gZXh0ZXJuIGludCBjb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0XHQgICAgICB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpO1xuICNlbmRpZlxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvaGVscGVycy5jIGIva2VybmVsL2JwZi9oZWxwZXJzLmNcbmluZGV4IGIzY2M1YzhmYzg3NTYuLmQzYzU2NDQzN2FkMDYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2hlbHBlcnMuY1xuKysrIGIva2VybmVsL2JwZi9oZWxwZXJzLmNcbkBAIC0zMiw2ICszMiwxMCBAQFxuIFxuICNpbmNsdWRlIFwiLi4vLi4vbGliL2tzdHJ0b3guaFwiXG4gXG4rX19icGZfa2Z1bmMgaW50IGJwZl9jb3B5X2Zyb21fdXNlcl9tbSh2b2lkICpkc3QsIHUzMiBkc3RfX3N6LFxuK1x0XHRcdFx0ICAgICAgY29uc3Qgdm9pZCBfX3VzZXIgKnVuc2FmZV9wdHJfX2lnbixcbitcdFx0XHRcdCAgICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1NjQgZmxhZ3MpO1xuK1xuIC8qIElmIGtlcm5lbCBzdWJzeXN0ZW0gaXMgYWxsb3dpbmcgZUJQRiBwcm9ncmFtcyB0byBjYWxsIHRoaXMgZnVuY3Rpb24sXG4gICogaW5zaWRlIGl0cyBvd24gdmVyaWZpZXJfb3BzLVx1MDAzZWdldF9mdW5jX3Byb3RvKCkgY2FsbGJhY2sgaXQgc2hvdWxkIHJldHVyblxuICAqIGJwZl9tYXBfbG9va3VwX2VsZW1fcHJvdG8sIHNvIHRoYXQgdmVyaWZpZXIgY2FuIHByb3Blcmx5IGNoZWNrIHRoZSBhcmd1bWVudHNcbkBAIC02ODIsMjIgKzY4NiwxNSBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2NvcHlfZnJvbV91c2VyX3Byb3RvID0ge1xuIEJQRl9DQUxMXzUoYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2ssIHZvaWQgKiwgZHN0LCB1MzIsIHNpemUsXG4gXHQgICBjb25zdCB2b2lkIF9fdXNlciAqLCB1c2VyX3B0ciwgc3RydWN0IHRhc2tfc3RydWN0ICosIHRzaywgdTY0LCBmbGFncylcbiB7XG4rXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcbiBcdGludCByZXQ7XG4gXG4tXHQvKiBmbGFncyBpcyBub3QgdXNlZCB5ZXQgKi9cbi1cdGlmICh1bmxpa2VseShmbGFncykpXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVxuLVx0aWYgKHVubGlrZWx5KCFzaXplKSlcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRyZXQgPSBhY2Nlc3NfcHJvY2Vzc192bSh0c2ssICh1bnNpZ25lZCBsb25nKXVzZXJfcHRyLCBkc3QsIHNpemUsIDApO1xuLVx0aWYgKHJldCA9PSBzaXplKVxuLVx0XHRyZXR1cm4gMDtcbitcdG1tID0gZ2V0X3Rhc2tfbW0odHNrKTtcbitcdHJldCA9IGJwZl9jb3B5X2Zyb21fdXNlcl9tbShkc3QsIHNpemUsIHVzZXJfcHRyLCBtbSwgZmxhZ3MpO1xuK1x0aWYgKG1tKVxuK1x0XHRtbXB1dChtbSk7XG4gXG4tXHRtZW1zZXQoZHN0LCAwLCBzaXplKTtcbi1cdC8qIFJldHVybiAtRUZBVUxUIGZvciBwYXJ0aWFsIHJlYWQgKi9cbi1cdHJldHVybiByZXQgXHUwMDNjIDAgPyByZXQgOiAtRUZBVUxUO1xuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3Byb3RvID0ge1xuQEAgLTM2NTgsNiArMzY1NSwxMDAgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9jb3B5X2Zyb21fdXNlcl9zdHIodm9pZCAqZHN0LCB1MzIgZHN0X19zeiwgY29uc3Qgdm9pZCBfX3VzZXJcbiBcdHJldHVybiByZXQgKyAxO1xuIH1cbiBcbisvKipcbisgKiBicGZfY29weV9mcm9tX3VzZXJfbW0oKSAtIENvcHkgZGF0YSBmcm9tIGFuIGFkZHJlc3Mgc3BhY2VcbisgKiBAZHN0OiAgICAgICAgICAgICBEZXN0aW5hdGlvbiBhZGRyZXNzLCBpbiBrZXJuZWwgc3BhY2VcbisgKiBAZHN0X19zejogICAgICAgICBOdW1iZXIgb2YgYnl0ZXMgdG8gY29weVxuKyAqIEB1bnNhZmVfcHRyX19pZ246IFNvdXJjZSBhZGRyZXNzIGluIHRoZSBhZGRyZXNzIHNwYWNlXG4rICogQG1tOiAgICAgICAgICAgICAgQWRkcmVzcyBzcGFjZSB0byBjb3B5IGZyb21cbisgKiBAZmxhZ3M6ICAgICAgICAgICBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZTsgbXVzdCBiZSB6ZXJvXG4rICpcbisgKiBDb3BpZXMgZGF0YSBmcm9tIHRoZSB1c2VyIGFkZHJlc3Mgc3BhY2UgYXNzb2NpYXRlZCB3aXRoIEBtbS4gVGhlIGRlc3RpbmF0aW9uXG4rICogaXMgemVyb2VkIGlmIGFuIGF0dGVtcHRlZCBjb3B5IGNhbm5vdCBiZSBjb21wbGV0ZWQgaW4gZnVsbC4gVW5zdXBwb3J0ZWRcbisgKiBmbGFncyByZXR1cm4gLUVJTlZBTCB3aXRob3V0IG1vZGlmeWluZyBAZHN0LlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FSU5WQUwgaWYgQGZsYWdzIGlzIG5vbi16ZXJvLCBvciAtRUZBVUxUIGlmIHRoZSBjb3B5XG4rICogZmFpbHMgb3IgaXMgcGFydGlhbC5cbisgKi9cbitfX2JwZl9rZnVuYyBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX21tKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osXG4rXHRcdFx0XHQgICAgICBjb25zdCB2b2lkIF9fdXNlciAqdW5zYWZlX3B0cl9faWduLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHU2NCBmbGFncylcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKHVubGlrZWx5KGZsYWdzKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpZiAodW5saWtlbHkoIWRzdF9fc3opKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmICh1bmxpa2VseSghbW0pKSB7XG4rXHRcdG1lbXNldChkc3QsIDAsIGRzdF9fc3opO1xuK1x0XHRyZXR1cm4gLUVGQVVMVDtcbitcdH1cbitcbitcdHJldCA9IGFjY2Vzc19yZW1vdGVfdm0obW0sICh1bnNpZ25lZCBsb25nKXVuc2FmZV9wdHJfX2lnbixcbitcdFx0XHQgICAgICAgZHN0LCBkc3RfX3N6LCAwKTtcbitcdGlmIChyZXQgPT0gZHN0X19zeilcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRtZW1zZXQoZHN0LCAwLCBkc3RfX3N6KTtcbitcdHJldHVybiByZXQgXHUwMDNjIDAgPyByZXQgOiAtRUZBVUxUO1xuK31cbitcbisvKipcbisgKiBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKCkgLSBDb3B5IGEgc3RyaW5nIGZyb20gYW4gYWRkcmVzcyBzcGFjZVxuKyAqIEBkc3Q6ICAgICAgICAgICAgIERlc3RpbmF0aW9uIGFkZHJlc3MsIGluIGtlcm5lbCBzcGFjZS4gVGhpcyBidWZmZXIgbXVzdCBiZVxuKyAqICAgICAgICAgICAgICAgICAgIGF0IGxlYXN0IEBkc3RfX3N6IGJ5dGVzIGxvbmdcbisgKiBAZHN0X19zejogICAgICAgICBNYXhpbXVtIG51bWJlciBvZiBieXRlcyB0byBjb3B5LCBpbmNsdWRpbmcgdGhlIHRyYWlsaW5nIE5VTFxuKyAqIEB1bnNhZmVfcHRyX19pZ246IFNvdXJjZSBhZGRyZXNzIGluIHRoZSBhZGRyZXNzIHNwYWNlXG4rICogQG1tOiAgICAgICAgICAgICAgQWRkcmVzcyBzcGFjZSB0byBjb3B5IGZyb21cbisgKiBAZmxhZ3M6ICAgICAgICAgICBUaGUgb25seSBzdXBwb3J0ZWQgZmxhZyBpcyBCUEZfRl9QQURfWkVST1NcbisgKlxuKyAqIENvcGllcyBhIE5VTC10ZXJtaW5hdGVkIHN0cmluZyBmcm9tIHRoZSB1c2VyIGFkZHJlc3Mgc3BhY2UgYXNzb2NpYXRlZCB3aXRoXG4rICogQG1tLiBJZiB0aGUgc3RyaW5nIGlzIHRvbyBsb25nLCBAZHN0IGlzIHN0aWxsIE5VTC10ZXJtaW5hdGVkIHVubGVzcyBAZHN0X19zelxuKyAqIGlzIHplcm8uXG4rICpcbisgKiBJZiB0aGUgZmxhZ3MgYXJlIHZhbGlkIGFuZCBCUEZfRl9QQURfWkVST1MgaXMgc2V0LCB0aGUgdW51c2VkIHBvcnRpb24gb2ZcbisgKiBAZHN0IGlzIGNsZWFyZWQgb24gc3VjY2VzcyBhbmQgYWxsIG9mIEBkc3QgaXMgY2xlYXJlZCBvbiBhIGNvcHkgZmFpbHVyZS5cbisgKiBVbnN1cHBvcnRlZCBmbGFncyByZXR1cm4gLUVJTlZBTCB3aXRob3V0IG1vZGlmeWluZyBAZHN0LlxuKyAqXG4rICogUmV0dXJuOiBUaGUgbnVtYmVyIG9mIGNvcGllZCBieXRlcyBpbmNsdWRpbmcgdGhlIE5VTCB0ZXJtaW5hdG9yIG9uIHN1Y2Nlc3MsXG4rICogb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXG4rICovXG4rX19icGZfa2Z1bmMgaW50IGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIodm9pZCAqZHN0LCB1MzIgZHN0X19zeixcbitcdFx0XHRcdFx0ICBjb25zdCB2b2lkIF9fdXNlciAqdW5zYWZlX3B0cl9faWduLFxuK1x0XHRcdFx0XHQgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1NjQgZmxhZ3MpXG4re1xuK1x0aW50IHJldDtcbitcbitcdGlmICh1bmxpa2VseShmbGFncyBcdTAwMjYgfkJQRl9GX1BBRF9aRVJPUykpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0aWYgKHVubGlrZWx5KGRzdF9fc3ogPT0gMCkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKHVubGlrZWx5KCFtbSkpIHtcbitcdFx0aWYgKGZsYWdzIFx1MDAyNiBCUEZfRl9QQURfWkVST1MpXG4rXHRcdFx0bWVtc2V0KGRzdCwgMCwgZHN0X19zeik7XG4rXHRcdGVsc2VcbitcdFx0XHQqKGNoYXIgKilkc3QgPSAnXFwwJztcbitcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXHR9XG4rXG4rXHRyZXQgPSBjb3B5X3JlbW90ZV9tbV9zdHIobW0sICh1bnNpZ25lZCBsb25nKXVuc2FmZV9wdHJfX2lnbiwgZHN0LCBkc3RfX3N6LCAwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApIHtcbitcdFx0aWYgKGZsYWdzIFx1MDAyNiBCUEZfRl9QQURfWkVST1MpXG4rXHRcdFx0bWVtc2V0KGRzdCwgMCwgZHN0X19zeik7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9GX1BBRF9aRVJPUylcbitcdFx0bWVtc2V0KGRzdCArIHJldCwgMCwgZHN0X19zeiAtIHJldCk7XG4rXG4rXHRyZXR1cm4gcmV0ICsgMTtcbit9XG4rXG4gLyoqXG4gICogYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyKCkgLSBDb3B5IGEgc3RyaW5nIGZyb20gYW4gdGFzaydzIGFkZHJlc3Mgc3BhY2VcbiAgKiBAZHN0OiAgICAgICAgICAgICBEZXN0aW5hdGlvbiBhZGRyZXNzLCBpbiBrZXJuZWwgc3BhY2UuICBUaGlzIGJ1ZmZlciBtdXN0IGJlXG5AQCAtMzY4MSwyNSArMzc3MiwxNiBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osXG4gXHRcdFx0XHRcdCAgICBjb25zdCB2b2lkIF9fdXNlciAqdW5zYWZlX3B0cl9faWduLFxuIFx0XHRcdFx0XHQgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHU2NCBmbGFncylcbiB7XG4rXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcbiBcdGludCByZXQ7XG4gXG4tXHRpZiAodW5saWtlbHkoZmxhZ3MgXHUwMDI2IH5CUEZfRl9QQURfWkVST1MpKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cbi1cdGlmICh1bmxpa2VseShkc3RfX3N6ID09IDApKVxuLVx0XHRyZXR1cm4gMDtcbitcdG1tID0gZ2V0X3Rhc2tfbW0odHNrKTtcbitcdHJldCA9IGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIoZHN0LCBkc3RfX3N6LCB1bnNhZmVfcHRyX19pZ24sXG4rXHRcdFx0XHRcdG1tLCBmbGFncyk7XG4rXHRpZiAobW0pXG4rXHRcdG1tcHV0KG1tKTtcbiBcbi1cdHJldCA9IGNvcHlfcmVtb3RlX3ZtX3N0cih0c2ssICh1bnNpZ25lZCBsb25nKXVuc2FmZV9wdHJfX2lnbiwgZHN0LCBkc3RfX3N6LCAwKTtcbi1cdGlmIChyZXQgXHUwMDNjIDApIHtcbi1cdFx0aWYgKGZsYWdzIFx1MDAyNiBCUEZfRl9QQURfWkVST1MpXG4tXHRcdFx0bWVtc2V0KGRzdCwgMCwgZHN0X19zeik7XG4tXHRcdHJldHVybiByZXQ7XG4tXHR9XG4tXG4tXHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9GX1BBRF9aRVJPUylcbi1cdFx0bWVtc2V0KGRzdCArIHJldCwgMCwgZHN0X19zeiAtIHJldCk7XG4tXG4tXHRyZXR1cm4gcmV0ICsgMTtcbitcdHJldHVybiByZXQ7XG4gfVxuIFxuIC8qIEtlZXAgdW5zaWduZWQgbG9uZyBpbiBwcm90b3R5cGUgc28gdGhhdCBrZnVuYyBpcyB1c2FibGUgd2hlbiBlbWl0dGVkIHRvXG5AQCAtNDkyNCw2ICs1MDA2LDggQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX2JpdHNfbmV3LCBLRl9JVEVSX05FVylcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfYml0c19uZXh0LCBLRl9JVEVSX05FWFQgfCBLRl9SRVRfTlVMTClcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfYml0c19kZXN0cm95LCBLRl9JVEVSX0RFU1RST1kpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jb3B5X2Zyb21fdXNlcl9zdHIsIEtGX1NMRUVQQUJMRSlcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2NvcHlfZnJvbV91c2VyX21tLCBLRl9TTEVFUEFCTEUpXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIsIEtGX1NMRUVQQUJMRSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyLCBLRl9TTEVFUEFCTEUpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9nZXRfa21lbV9jYWNoZSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfa21lbV9jYWNoZV9uZXcsIEtGX0lURVJfTkVXIHwgS0ZfU0xFRVBBQkxFKVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggOWU3OTc1MGUyNDgwOC4uNjc5OWQ5ZTA4MGZjNSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtNjAwNCw2ICs2MDA0LDEwIEBAIEJURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMKHN0cnVjdCBkZW50cnkpIHtcbiBcdHN0cnVjdCBpbm9kZSAqZF9pbm9kZTtcbiB9O1xuIFxuK0JURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMKHN0cnVjdCBsaW51eF9iaW5wcm0pIHtcbitcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuK307XG4rXG4gQlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IHNvY2tldCkge1xuIFx0c3RydWN0IHNvY2sgKnNrO1xuIH07XG5AQCAtNjA1OCw2ICs2MDYyLDcgQEAgc3RhdGljIGJvb2wgdHlwZV9pc190cnVzdGVkX29yX251bGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiB7XG4gXHRCVEZfVFlQRV9FTUlUKEJURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMKHN0cnVjdCBzb2NrZXQpKTtcbiBcdEJURl9UWVBFX0VNSVQoQlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IGRlbnRyeSkpO1xuK1x0QlRGX1RZUEVfRU1JVChCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTChzdHJ1Y3QgbGludXhfYmlucHJtKSk7XG4gXHRCVEZfVFlQRV9FTUlUKEJURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCkpO1xuIFxuIFx0cmV0dXJuIGJ0Zl9uZXN0ZWRfdHlwZV9pc190cnVzdGVkKFx1MDAyNmVudi1cdTAwM2Vsb2csIHJlZywgZmllbGRfbmFtZSwgYnRmX2lkLFxuQEAgLTYxNjgsNiArNjE3MywxNSBAQCBzdGF0aWMgaW50IGNoZWNrX3B0cl90b19idGZfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRpZiAocmV0ICE9IFBUUl9UT19CVEZfSUQpIHtcbiBcdFx0LyoganVzdCBtYXJrOyAqL1xuIFxuK1x0fSBlbHNlIGlmIChicGZfaXNfdHJ1c3RlZF9vcl9udWxsX2J0Zl9wdHIocmVnLVx1MDAzZXR5cGUpKSB7XG4rXHRcdC8qXG4rXHRcdCAqIEFuIHVuY2hlY2tlZCBsb2FkIHRocm91Z2ggYSB0cnVzdGVkLW9yLU5VTEwgcG9pbnRlciBpc1xuK1x0XHQgKiBmYXVsdC1wcm90ZWN0ZWQuIEFueSBwb2ludGVyIGRlcml2ZWQgZnJvbSB0aGF0IGxvYWQgbXVzdCBiZVxuK1x0XHQgKiB1bnRydXN0ZWQsIGFzIGEgZmF1bHQgcHJvZHVjZXMgYSBOVUxMIHZhbHVlLlxuK1x0XHQgKi9cbitcdFx0Y2xlYXJfdHJ1c3RlZF9mbGFncyhcdTAwMjZmbGFnKTtcbitcdFx0ZmxhZyB8PSBQVFJfVU5UUlVTVEVEO1xuK1xuIFx0fSBlbHNlIGlmICh0eXBlX2ZsYWcocmVnLVx1MDAzZXR5cGUpIFx1MDAyNiBQVFJfVU5UUlVTVEVEKSB7XG4gXHRcdC8qIElmIHRoaXMgaXMgYW4gdW50cnVzdGVkIHBvaW50ZXIsIGFsbCBwb2ludGVycyBmb3JtZWQgYnkgd2Fsa2luZyBpdFxuIFx0XHQgKiBhbHNvIGluaGVyaXQgdGhlIHVudHJ1c3RlZCBmbGFnLlxuQEAgLTY2NDQsNyArNjY1OCw4IEBAIHN0YXRpYyBpbnQgY2hlY2tfbWVtX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgsIHN0cnVjdCBiXG4gXHRcdGlmICghZXJyIFx1MDAyNlx1MDAyNiB0ID09IEJQRl9SRUFEIFx1MDAyNlx1MDAyNiB2YWx1ZV9yZWdubyBcdTAwM2U9IDApXG4gXHRcdFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIHZhbHVlX3JlZ25vKTtcbiBcdH0gZWxzZSBpZiAoYmFzZV90eXBlKHJlZy1cdTAwM2V0eXBlKSA9PSBQVFJfVE9fQlRGX0lEIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAhdHlwZV9tYXlfYmVfbnVsbChyZWctXHUwMDNldHlwZSkpIHtcbitcdFx0ICAgKCF0eXBlX21heV9iZV9udWxsKHJlZy1cdTAwM2V0eXBlKSB8fFxuK1x0XHQgICAgKHQgPT0gQlBGX1JFQUQgXHUwMDI2XHUwMDI2IGJwZl9pc190cnVzdGVkX29yX251bGxfYnRmX3B0cihyZWctXHUwMDNldHlwZSkpKSkge1xuIFx0XHRlcnIgPSBjaGVja19wdHJfdG9fYnRmX2FjY2VzcyhlbnYsIHJlZ3MsIHJlZywgYXJnbm8sIG9mZiwgc2l6ZSwgdCxcbiBcdFx0XHRcdFx0ICAgICAgdmFsdWVfcmVnbm8pO1xuIFx0fSBlbHNlIGlmIChyZWctXHUwMDNldHlwZSA9PSBDT05TVF9QVFJfVE9fTUFQKSB7XG5kaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmhcbmluZGV4IDM4YjExNjUyMTJjOTQuLjgyNjRhMzQ2ZDE4YWYgMTAwNjQ0XG4tLS0gYS9tbS9pbnRlcm5hbC5oXG4rKysgYi9tbS9pbnRlcm5hbC5oXG5AQCAtMjUsNiArMjUsMTEgQEBcbiBzdHJ1Y3QgZm9saW9fYmF0Y2g7XG4gc3RydWN0IGhzdGF0ZTtcbiBcbisjaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG4raW50IF9fY29weV9yZW1vdGVfbW1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4rXHRcdFx0IHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncyk7XG4rI2VuZGlmXG4rXG4gc3RydWN0IGh1Z2VfYm9vdG1lbV9wYWdlIHtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbiBcdHN0cnVjdCBoc3RhdGUgKmhzdGF0ZTtcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXG5pbmRleCA4YjBjMmM3MzVkM2RlLi5mZTJmNWU5ODhmYjkwIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LmNcbisrKyBiL21tL21lbW9yeS5jXG5AQCAtNzMzMSw4ICs3MzMxLDggQEAgRVhQT1JUX1NZTUJPTF9HUEwoYWNjZXNzX3Byb2Nlc3Nfdm0pO1xuICAqIENvcHkgYSBzdHJpbmcgZnJvbSBhbm90aGVyIHByb2Nlc3MncyBhZGRyZXNzIHNwYWNlIGFzIGdpdmVuIGluIG1tLlxuICAqIElmIHRoZXJlIGlzIGFueSBlcnJvciByZXR1cm4gLUVGQVVMVC5cbiAgKi9cbi1zdGF0aWMgaW50IF9fY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tXHRcdFx0XHR2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXG4raW50IF9fY29weV9yZW1vdGVfbW1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4rXHRcdFx0IHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncylcbiB7XG4gXHR2b2lkICpvbGRfYnVmID0gYnVmO1xuIFx0aW50IGVyciA9IDA7XG5AQCAtNzQwNyw0MyArNzQwNyw2IEBAIHN0YXRpYyBpbnQgX19jb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0cmV0dXJuIGVycjtcbiBcdHJldHVybiBidWYgLSBvbGRfYnVmO1xuIH1cbi1cbi0vKipcbi0gKiBjb3B5X3JlbW90ZV92bV9zdHIgLSBjb3B5IGEgc3RyaW5nIGZyb20gYW5vdGhlciBwcm9jZXNzJ3MgYWRkcmVzcyBzcGFjZS5cbi0gKiBAdHNrOlx0dGhlIHRhc2sgb2YgdGhlIHRhcmdldCBhZGRyZXNzIHNwYWNlXG4tICogQGFkZHI6XHRzdGFydCBhZGRyZXNzIHRvIHJlYWQgZnJvbVxuLSAqIEBidWY6XHRkZXN0aW5hdGlvbiBidWZmZXJcbi0gKiBAbGVuOlx0bnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHlcbi0gKiBAZ3VwX2ZsYWdzOlx0ZmxhZ3MgbW9kaWZ5aW5nIGxvb2t1cCBiZWhhdmlvdXJcbi0gKlxuLSAqIFRoZSBjYWxsZXIgbXVzdCBob2xkIGEgcmVmZXJlbmNlIG9uIEBtbS5cbi0gKlxuLSAqIFJldHVybjogbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCBmcm9tIEBhZGRyIChzb3VyY2UpIHRvIEBidWYgKGRlc3RpbmF0aW9uKTtcbi0gKiBub3QgaW5jbHVkaW5nIHRoZSB0cmFpbGluZyBOVUwuIEFsd2F5cyBndWFyYW50ZWVkIHRvIGxlYXZlIE5VTC10ZXJtaW5hdGVkXG4tICogYnVmZmVyLiBPbiBhbnkgZXJyb3IsIHJldHVybiAtRUZBVUxULlxuLSAqL1xuLWludCBjb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHVuc2lnbmVkIGxvbmcgYWRkcixcbi1cdFx0ICAgICAgIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncylcbi17XG4tXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcbi1cdGludCByZXQ7XG4tXG4tXHRpZiAodW5saWtlbHkobGVuID09IDApKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdG1tID0gZ2V0X3Rhc2tfbW0odHNrKTtcbi1cdGlmICghbW0pIHtcbi1cdFx0KihjaGFyICopYnVmID0gJ1xcMCc7XG4tXHRcdHJldHVybiAtRUZBVUxUO1xuLVx0fVxuLVxuLVx0cmV0ID0gX19jb3B5X3JlbW90ZV92bV9zdHIobW0sIGFkZHIsIGJ1ZiwgbGVuLCBndXBfZmxhZ3MpO1xuLVxuLVx0bW1wdXQobW0pO1xuLVxuLVx0cmV0dXJuIHJldDtcbi19XG4tRVhQT1JUX1NZTUJPTF9HUEwoY29weV9yZW1vdGVfdm1fc3RyKTtcbiAjZW5kaWYgLyogQ09ORklHX0JQRl9TWVNDQUxMICovXG4gXG4gLypcbmRpZmYgLS1naXQgYS9tbS9ub21tdS5jIGIvbW0vbm9tbXUuY1xuaW5kZXggNDk4ZTAxZWU0MGIwNS4uOTg1OTZlNjAzMTFmMyAxMDA2NDRcbi0tLSBhL21tL25vbW11LmNcbisrKyBiL21tL25vbW11LmNcbkBAIC0xNzQ2LDggKzE3NDYsOCBAQCBFWFBPUlRfU1lNQk9MX0dQTChhY2Nlc3NfcHJvY2Vzc192bSk7XG4gICogQ29weSBhIHN0cmluZyBmcm9tIGFub3RoZXIgcHJvY2VzcydzIGFkZHJlc3Mgc3BhY2UgYXMgZ2l2ZW4gaW4gbW0uXG4gICogSWYgdGhlcmUgaXMgYW55IGVycm9yIHJldHVybiAtRUZBVUxULlxuICAqL1xuLXN0YXRpYyBpbnQgX19jb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbi1cdFx0XHRcdHZvaWQgKmJ1ZiwgaW50IGxlbilcbitpbnQgX19jb3B5X3JlbW90ZV9tbV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbitcdFx0XHQgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgYWRkcl9lbmQ7XG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbkBAIC0xNzgxLDQzICsxNzgxLDYgQEAgc3RhdGljIGludCBfX2NvcHlfcmVtb3RlX3ZtX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbi1cbi0vKipcbi0gKiBjb3B5X3JlbW90ZV92bV9zdHIgLSBjb3B5IGEgc3RyaW5nIGZyb20gYW5vdGhlciBwcm9jZXNzJ3MgYWRkcmVzcyBzcGFjZS5cbi0gKiBAdHNrOlx0dGhlIHRhc2sgb2YgdGhlIHRhcmdldCBhZGRyZXNzIHNwYWNlXG4tICogQGFkZHI6XHRzdGFydCBhZGRyZXNzIHRvIHJlYWQgZnJvbVxuLSAqIEBidWY6XHRkZXN0aW5hdGlvbiBidWZmZXJcbi0gKiBAbGVuOlx0bnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHlcbi0gKiBAZ3VwX2ZsYWdzOlx0ZmxhZ3MgbW9kaWZ5aW5nIGxvb2t1cCBiZWhhdmlvdXIgKHVudXNlZClcbi0gKlxuLSAqIFRoZSBjYWxsZXIgbXVzdCBob2xkIGEgcmVmZXJlbmNlIG9uIEBtbS5cbi0gKlxuLSAqIFJldHVybjogbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCBmcm9tIEBhZGRyIChzb3VyY2UpIHRvIEBidWYgKGRlc3RpbmF0aW9uKTtcbi0gKiBub3QgaW5jbHVkaW5nIHRoZSB0cmFpbGluZyBOVUwuIEFsd2F5cyBndWFyYW50ZWVkIHRvIGxlYXZlIE5VTC10ZXJtaW5hdGVkXG4tICogYnVmZmVyLiBPbiBhbnkgZXJyb3IsIHJldHVybiAtRUZBVUxULlxuLSAqL1xuLWludCBjb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHVuc2lnbmVkIGxvbmcgYWRkcixcbi1cdFx0ICAgICAgIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncylcbi17XG4tXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcbi1cdGludCByZXQ7XG4tXG4tXHRpZiAodW5saWtlbHkobGVuID09IDApKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdG1tID0gZ2V0X3Rhc2tfbW0odHNrKTtcbi1cdGlmICghbW0pIHtcbi1cdFx0KihjaGFyICopYnVmID0gJ1xcMCc7XG4tXHRcdHJldHVybiAtRUZBVUxUO1xuLVx0fVxuLVxuLVx0cmV0ID0gX19jb3B5X3JlbW90ZV92bV9zdHIobW0sIGFkZHIsIGJ1ZiwgbGVuKTtcbi1cbi1cdG1tcHV0KG1tKTtcbi1cbi1cdHJldHVybiByZXQ7XG4tfVxuLUVYUE9SVF9TWU1CT0xfR1BMKGNvcHlfcmVtb3RlX3ZtX3N0cik7XG4gI2VuZGlmIC8qIENPTkZJR19CUEZfU1lTQ0FMTCAqL1xuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL21tL3V0aWwuYyBiL21tL3V0aWwuY1xuaW5kZXggYmYwNTEzZDFkM2QwOC4uMmVjYTI3YjAyNzkxZiAxMDA2NDRcbi0tLSBhL21tL3V0aWwuY1xuKysrIGIvbW0vdXRpbC5jXG5AQCAtMTA2MSw2ICsxMDYxLDY4IEBAIGludCBnZXRfY21kbGluZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGNoYXIgKmJ1ZmZlciwgaW50IGJ1ZmxlbilcbiBcdHJldHVybiByZXM7XG4gfVxuIFxuKyNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbisvKipcbisgKiBjb3B5X3JlbW90ZV9tbV9zdHIgLSBjb3B5IGEgc3RyaW5nIGZyb20gYSByZW1vdGUgYWRkcmVzcyBzcGFjZS5cbisgKiBAbW06ICAgICAgICAgdGhlIHJlbW90ZSBhZGRyZXNzIHNwYWNlXG4rICogQGFkZHI6ICAgICAgIHN0YXJ0IGFkZHJlc3MgdG8gcmVhZCBmcm9tXG4rICogQGJ1ZjogICAgICAgIGRlc3RpbmF0aW9uIGJ1ZmZlclxuKyAqIEBsZW46ICAgICAgICBudW1iZXIgb2YgYnl0ZXMgdG8gY29weVxuKyAqIEBndXBfZmxhZ3M6ICBmbGFncyBtb2RpZnlpbmcgbG9va3VwIGJlaGF2aW91clxuKyAqXG4rICogVGhlIGNhbGxlciBtdXN0IGhvbGQgYSByZWZlcmVuY2Ugb24gQG1tLlxuKyAqXG4rICogUmV0dXJuOiBudW1iZXIgb2YgYnl0ZXMgY29waWVkIGZyb20gQGFkZHIgKHNvdXJjZSkgdG8gQGJ1ZiAoZGVzdGluYXRpb24pLFxuKyAqIG5vdCBpbmNsdWRpbmcgdGhlIHRyYWlsaW5nIE5VTC4gSWYgQGxlbiBpcyB6ZXJvLCByZXR1cm4gMCB3aXRob3V0IGFjY2Vzc2luZ1xuKyAqIEBidWYuIE90aGVyd2lzZSwgQGJ1ZiBpcyBhbHdheXMgTlVMLXRlcm1pbmF0ZWQuIE9uIGFueSBlcnJvciwgcmV0dXJuXG4rICogLUVGQVVMVC5cbisgKi9cbitpbnQgY29weV9yZW1vdGVfbW1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4rXHRcdCAgICAgICB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXG4re1xuK1x0aWYgKHVubGlrZWx5KGxlbiA9PSAwKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRyZXR1cm4gX19jb3B5X3JlbW90ZV9tbV9zdHIobW0sIGFkZHIsIGJ1ZiwgbGVuLCBndXBfZmxhZ3MpO1xuK31cbitcbisvKipcbisgKiBjb3B5X3JlbW90ZV92bV9zdHIgLSBjb3B5IGEgc3RyaW5nIGZyb20gYW5vdGhlciBwcm9jZXNzJ3MgYWRkcmVzcyBzcGFjZS5cbisgKiBAdHNrOlx0dGhlIHRhc2sgb2YgdGhlIHRhcmdldCBhZGRyZXNzIHNwYWNlXG4rICogQGFkZHI6XHRzdGFydCBhZGRyZXNzIHRvIHJlYWQgZnJvbVxuKyAqIEBidWY6XHRkZXN0aW5hdGlvbiBidWZmZXJcbisgKiBAbGVuOlx0bnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHlcbisgKiBAZ3VwX2ZsYWdzOlx0ZmxhZ3MgbW9kaWZ5aW5nIGxvb2t1cCBiZWhhdmlvdXJcbisgKlxuKyAqIFJldHVybjogbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCBmcm9tIEBhZGRyIChzb3VyY2UpIHRvIEBidWYgKGRlc3RpbmF0aW9uKSxcbisgKiBub3QgaW5jbHVkaW5nIHRoZSB0cmFpbGluZyBOVUwuIElmIEBsZW4gaXMgemVybywgcmV0dXJuIDAgd2l0aG91dCBhY2Nlc3NpbmdcbisgKiBAYnVmLiBPdGhlcndpc2UsIEBidWYgaXMgYWx3YXlzIE5VTC10ZXJtaW5hdGVkLiBPbiBhbnkgZXJyb3IsIHJldHVyblxuKyAqIC1FRkFVTFQuXG4rICovXG4raW50IGNvcHlfcmVtb3RlX3ZtX3N0cihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdW5zaWduZWQgbG9uZyBhZGRyLFxuK1x0XHQgICAgICAgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKVxuK3tcbitcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuK1x0aW50IHJldDtcbitcbitcdGlmICh1bmxpa2VseShsZW4gPT0gMCkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0bW0gPSBnZXRfdGFza19tbSh0c2spO1xuK1x0aWYgKCFtbSkge1xuK1x0XHQqKGNoYXIgKilidWYgPSAnXFwwJztcbitcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXHR9XG4rXG4rXHRyZXQgPSBfX2NvcHlfcmVtb3RlX21tX3N0cihtbSwgYWRkciwgYnVmLCBsZW4sIGd1cF9mbGFncyk7XG4rXG4rXHRtbXB1dChtbSk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChjb3B5X3JlbW90ZV92bV9zdHIpO1xuKyNlbmRpZiAvKiBDT05GSUdfQlBGX1NZU0NBTEwgKi9cbitcbiBpbnQgX193ZWFrIG1lbWNtcF9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZTEsIHN0cnVjdCBwYWdlICpwYWdlMilcbiB7XG4gXHRjaGFyICphZGRyMSwgKmFkZHIyO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9pdGVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfaXRlci5jXG5pbmRleCBjNjkwODBjYTE0ZjVhLi45OWExNmExYWRkNzBlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2l0ZXIuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2l0ZXIuY1xuQEAgLTM5LDEwICszOSwxMCBAQCBzdGF0aWMgdm9pZCB0ZXN0X2J0Zl9pZF9vcl9udWxsKHZvaWQpXG4gXHRzdHJ1Y3QgYnBmX2l0ZXJfdGVzdF9rZXJuMyAqc2tlbDtcbiBcbiBcdHNrZWwgPSBicGZfaXRlcl90ZXN0X2tlcm4zX19vcGVuX2FuZF9sb2FkKCk7XG4tXHRpZiAoIUFTU0VSVF9FUlJfUFRSKHNrZWwsIFwiYnBmX2l0ZXJfdGVzdF9rZXJuM19fb3Blbl9hbmRfbG9hZFwiKSkge1xuLVx0XHRicGZfaXRlcl90ZXN0X2tlcm4zX19kZXN0cm95KHNrZWwpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwiYnBmX2l0ZXJfdGVzdF9rZXJuM19fb3Blbl9hbmRfbG9hZFwiKSlcbiBcdFx0cmV0dXJuO1xuLVx0fVxuK1xuK1x0YnBmX2l0ZXJfdGVzdF9rZXJuM19fZGVzdHJveShza2VsKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgZG9fZHVtbXlfcmVhZF9vcHRzKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgc3RydWN0IGJwZl9pdGVyX2F0dGFjaF9vcHRzICpvcHRzKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2NvcHlfZnJvbV91c2VyX2Jwcm0uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2NvcHlfZnJvbV91c2VyX2Jwcm0uY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmIyMzI1YjE5MzU3NjFcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2NvcHlfZnJvbV91c2VyX2Jwcm0uY1xuQEAgLTAsMCArMSw3MiBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rXG4rI2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy93YWl0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwiY29weV9mcm9tX3VzZXJfYnBybS5za2VsLmhcIlxuK1xuK3ZvaWQgdGVzdF9jb3B5X2Zyb21fdXNlcl9icHJtKHZvaWQpXG4re1xuK1x0Y2hhciBhcmcwW10gPSBcImZpcnN0XCI7XG4rXHRjaGFyIGFyZzFbXSA9IFwic2Vjb25kLWFyZ3VtZW50XCI7XG4rXHRjaGFyIGVudjBbXSA9IFwiU09NRV9FTlY9YVwiO1xuK1x0Y2hhciBlbnYxW10gPSBcIk9USEVSX0VOVj1zb21ldGhpbmdcIjtcbitcdHN0cnVjdCBjb3B5X2Zyb21fdXNlcl9icHJtICpza2VsO1xuK1x0cGlkX3QgY2hpbGQ7XG4rXHRpbnQgc3RhdHVzO1xuK1xuK1x0c2tlbCA9IGNvcHlfZnJvbV91c2VyX2Jwcm1fX29wZW5fYW5kX2xvYWQoKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcIm9wZW5fYW5kX2xvYWRcIikpXG4rXHRcdHJldHVybjtcbitcbitcdC8qXG4rXHQgKiBPbiAhQ09ORklHX01NVSwgZXhlYyBzdHJpbmdzIGFyZSBoZWxkIGluIGJwcm0tXHUwMDNlcGFnZVtdIHJhdGhlciB0aGFuXG4rXHQgKiBiZWluZyBtYXBwZWQgaW4gYnBybS1cdTAwM2VtbS5cbitcdCAqL1xuK1x0aWYgKCFza2VsLVx1MDAzZWtjb25maWctXHUwMDNlQ09ORklHX01NVSkge1xuK1x0XHRwcmludGYoXCIlczpTS0lQOiB0ZXN0IHJlcXVpcmVzIENPTkZJR19NTVVcXG5cIiwgX19mdW5jX18pO1xuK1x0XHR0ZXN0X19za2lwKCk7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0aWYgKCFBU1NFUlRfT0soY29weV9mcm9tX3VzZXJfYnBybV9fYXR0YWNoKHNrZWwpLCBcImF0dGFjaFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRjaGlsZCA9IGZvcmsoKTtcbitcdGlmICghQVNTRVJUX0dFKGNoaWxkLCAwLCBcImZvcmtcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0aWYgKCFjaGlsZCkge1xuK1x0XHRjaGFyICpjb25zdCBhcmd2W10gPSB7IGFyZzAsIGFyZzEsIE5VTEwgfTtcbitcdFx0Y2hhciAqY29uc3QgZW52cFtdID0geyBlbnYwLCBlbnYxLCBOVUxMIH07XG4rXG4rXHRcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZW1vbml0b3JlZF9waWQgPSBnZXRwaWQoKTtcbitcdFx0ZXhlY3ZlKFwiL2Jpbi90cnVlXCIsIGFyZ3YsIGVudnApO1xuK1x0XHRfZXhpdChlcnJubyk7XG4rXHR9XG4rXG4rXHRpZiAoIUFTU0VSVF9FUSh3YWl0cGlkKGNoaWxkLCBcdTAwMjZzdGF0dXMsIDApLCBjaGlsZCwgXCJ3YWl0cGlkXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGlmIChBU1NFUlRfVFJVRShXSUZFWElURUQoc3RhdHVzKSwgXCJjaGlsZF9leGl0ZWRcIikpXG4rXHRcdEFTU0VSVF9FUShXRVhJVFNUQVRVUyhzdGF0dXMpLCBFUEVSTSwgXCJleGVjX2Vycm5vXCIpO1xuK1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWJwcm1fYXJnYywgMiwgXCJicHJtX2FyZ2NcIik7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlYnBybV9lbnZjLCAyLCBcImJwcm1fZW52Y1wiKTtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VkYXRhX2xlbl9tYXRjaCwgMSwgXCJkYXRhX2xlbl9tYXRjaFwiKTtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VpbnZhbGlkX2ZsYWdzX3JldCwgLUVJTlZBTCwgXCJpbnZhbGlkX2ZsYWdzX3JldFwiKTtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2Vjb3B5X3JldCwgMCwgXCJjb3B5X3JldFwiKTtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VzdHJfYXJnMF9yZXQsIHNpemVvZihhcmcwKSwgXCJzdHJfYXJnMF9yZXRcIik7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlc3RyX2FyZzFfcmV0LCBzaXplb2YoYXJnMSksIFwic3RyX2FyZzFfcmV0XCIpO1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXN0cl9lbnYwX3JldCwgc2l6ZW9mKGVudjApLCBcInN0cl9lbnYwX3JldFwiKTtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VzdHJfZW52MV9yZXQsIHNpemVvZihlbnYxKSwgXCJzdHJfZW52MV9yZXRcIik7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlZGF0YV9tYXRjaCwgMSwgXCJkYXRhX21hdGNoXCIpO1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXN0cl9hcmdzX21hdGNoLCAxLCBcInN0cl9hcmdzX21hdGNoXCIpO1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXN0cl9lbnZzX21hdGNoLCAxLCBcInN0cl9lbnZzX21hdGNoXCIpO1xuK1xuK291dDpcbitcdGNvcHlfZnJvbV91c2VyX2Jwcm1fX2Rlc3Ryb3koc2tlbCk7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19tYXliZV9udWxsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfbWF5YmVfbnVsbC5jXG5pbmRleCAwMWRjMjYxM2M4YTUxLi40NWFmNmYwMGFkOTA4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX21heWJlX251bGwuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX21heWJlX251bGwuY1xuQEAgLTE5LDE1ICsxOSwxNiBAQCBzdGF0aWMgdm9pZCBtYXliZV9udWxsKHZvaWQpXG4gXHRzdHJ1Y3Rfb3BzX21heWJlX251bGxfX2Rlc3Ryb3koc2tlbCk7XG4gfVxuIFxuLS8qIFRlc3QgdGhhdCB0aGUgdmVyaWZpZXIgcmVqZWN0cyBhIHByb2dyYW0gdGhhdCBhY2Nlc3MgYSBudWxsYWJsZSBwb2ludGVyXG4tICogd2l0aG91dCBhIGNoZWNrIGJlZm9yZWhhbmQuXG4rLypcbisgKiBUZXN0IHRoYXQgdGhlIHZlcmlmaWVyIGFjY2VwdHMgYSBmYXVsdC1wcm90ZWN0ZWQgcmVhZCB0aHJvdWdoIGEgbnVsbGFibGVcbisgKiB0cnVzdGVkIHBvaW50ZXIgd2l0aG91dCBhbiBleHBsaWNpdCBOVUxMIGNoZWNrLlxuICAqL1xuLXN0YXRpYyB2b2lkIG1heWJlX251bGxfZmFpbCh2b2lkKVxuK3N0YXRpYyB2b2lkIG1heWJlX251bGxfbm9fY2hlY2sodm9pZClcbiB7XG4gXHRzdHJ1Y3Qgc3RydWN0X29wc19tYXliZV9udWxsX2ZhaWwgKnNrZWw7XG4gXG4gXHRza2VsID0gc3RydWN0X29wc19tYXliZV9udWxsX2ZhaWxfX29wZW5fYW5kX2xvYWQoKTtcbi1cdGlmIChBU1NFUlRfRVJSX1BUUihza2VsLCBcInN0cnVjdF9vcHNfbW9kdWxlX2ZhaWxfX29wZW5fYW5kX2xvYWRcIikpXG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJzdHJ1Y3Rfb3BzX21heWJlX251bGxfZmFpbF9fb3Blbl9hbmRfbG9hZFwiKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0c3RydWN0X29wc19tYXliZV9udWxsX2ZhaWxfX2Rlc3Ryb3koc2tlbCk7XG5AQCAtNDEsNiArNDIsNiBAQCB2b2lkIHRlc3Rfc3RydWN0X29wc19tYXliZV9udWxsKHZvaWQpXG4gXHQgKi9cbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwibWF5YmVfbnVsbFwiKSlcbiBcdFx0bWF5YmVfbnVsbCgpO1xuLVx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJtYXliZV9udWxsX2ZhaWxcIikpXG4tXHRcdG1heWJlX251bGxfZmFpbCgpO1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJtYXliZV9udWxsX25vX2NoZWNrXCIpKVxuK1x0XHRtYXliZV9udWxsX25vX2NoZWNrKCk7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RwX2J0Zl9udWxsYWJsZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHBfYnRmX251bGxhYmxlLmNcbmluZGV4IGFjY2M0MmUwMWY4YTguLjgyNWZlN2E5MmQ3NGYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90cF9idGZfbnVsbGFibGUuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHBfYnRmX251bGxhYmxlLmNcbkBAIC0yLDYgKzIsMzEgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbiAjaW5jbHVkZSBcInRlc3RfdHBfYnRmX251bGxhYmxlLnNrZWwuaFwiXG4rI2luY2x1ZGUgXCJ0ZXN0X3RwX2J0Zl9udWxsYWJsZV9ydW50aW1lLnNrZWwuaFwiXG4rXG4rc3RhdGljIHZvaWQgdGVzdF9udWxsYWJsZV9ydW50aW1lKHZvaWQpXG4re1xuK1x0c3RydWN0IHRlc3RfdHBfYnRmX251bGxhYmxlX3J1bnRpbWUgKnNrZWw7XG4rXG4rXHRza2VsID0gdGVzdF90cF9idGZfbnVsbGFibGVfcnVudGltZV9fb3Blbl9hbmRfbG9hZCgpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwib3Blbl9hbmRfbG9hZFwiKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlbW9uaXRvcmVkX3RpZCA9IHN5c19nZXR0aWQoKTtcbitcbitcdGlmICghQVNTRVJUX09LKHRlc3RfdHBfYnRmX251bGxhYmxlX3J1bnRpbWVfX2F0dGFjaChza2VsKSwgXCJhdHRhY2hcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0aWYgKCFBU1NFUlRfT0sodHJpZ2dlcl9tb2R1bGVfdGVzdF9yZWFkKDIpLCBcInRyaWdnZXJcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWNhbGxzLCAyLCBcImNhbGxzXCIpO1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZW5vbm51bGxfbGVuLCAyLCBcIm5vbm51bGxfbGVuXCIpO1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZW51bGxfbGVuLCAwLCBcIm51bGxfbGVuXCIpO1xuK1xuK291dDpcbitcdHRlc3RfdHBfYnRmX251bGxhYmxlX3J1bnRpbWVfX2Rlc3Ryb3koc2tlbCk7XG4rfVxuIFxuIHZvaWQgdGVzdF90cF9idGZfbnVsbGFibGUodm9pZClcbiB7XG5AQCAtMTEsNCArMzYsNyBAQCB2b2lkIHRlc3RfdHBfYnRmX251bGxhYmxlKHZvaWQpXG4gXHR9XG4gXG4gXHRSVU5fVEVTVFModGVzdF90cF9idGZfbnVsbGFibGUpO1xuK1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJydW50aW1lXCIpKVxuK1x0XHR0ZXN0X251bGxhYmxlX3J1bnRpbWUoKTtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2NvcHlfZnJvbV91c2VyX2Jwcm0uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9jb3B5X2Zyb21fdXNlcl9icHJtLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5iMzM0YTE1NzQxOWU1XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvY29weV9mcm9tX3VzZXJfYnBybS5jXG5AQCAtMCwwICsxLDEyMyBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rXG4rI2luY2x1ZGUgXCJ2bWxpbnV4LmhcIlxuK1xuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl90cmFjaW5nLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4rI2luY2x1ZGUgXCJicGZfbWlzYy5oXCJcbitcbitjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4rXG4rc3RhdGljIGNvbnN0IGNoYXIgZXhwZWN0ZWRfZGF0YVtdID0gXCJmaXJzdFxcMHNlY29uZC1hcmd1bWVudFxcMFwiXG4rXHRcdFx0XHQgICAgXCJTT01FX0VOVj1hXFwwT1RIRVJfRU5WPXNvbWV0aGluZ1wiO1xuK3N0YXRpYyBjb25zdCBjaGFyIGV4cGVjdGVkX2FyZzBbXSA9IFwiZmlyc3RcIjtcbitzdGF0aWMgY29uc3QgY2hhciBleHBlY3RlZF9hcmcxW10gPSBcInNlY29uZC1hcmd1bWVudFwiO1xuK3N0YXRpYyBjb25zdCBjaGFyIGV4cGVjdGVkX2VudjBbXSA9IFwiU09NRV9FTlY9YVwiO1xuK3N0YXRpYyBjb25zdCBjaGFyIGV4cGVjdGVkX2VudjFbXSA9IFwiT1RIRVJfRU5WPXNvbWV0aGluZ1wiO1xuK1xuK2ludCBtb25pdG9yZWRfcGlkO1xuK2ludCBicHJtX2FyZ2M7XG4raW50IGJwcm1fZW52YztcbitpbnQgZGF0YV9sZW5fbWF0Y2g7XG4raW50IGludmFsaWRfZmxhZ3NfcmV0O1xuK2ludCBjb3B5X3JldDtcbitpbnQgc3RyX2FyZzBfcmV0O1xuK2ludCBzdHJfYXJnMV9yZXQ7XG4raW50IHN0cl9lbnYwX3JldDtcbitpbnQgc3RyX2VudjFfcmV0O1xuK2ludCBkYXRhX21hdGNoO1xuK2ludCBzdHJfYXJnc19tYXRjaDtcbitpbnQgc3RyX2VudnNfbWF0Y2g7XG4rXG4rZXh0ZXJuIGJvb2wgQ09ORklHX01NVSBfX2tjb25maWcgX193ZWFrO1xuK1xuK2V4dGVybiBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX21tKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osXG4rXHRcdFx0XHQgY29uc3Qgdm9pZCAqdW5zYWZlX3B0cl9faWduLFxuK1x0XHRcdFx0IHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1NjQgZmxhZ3MpIF9fa3N5bTtcbitcbitleHRlcm4gaW50IGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIodm9pZCAqZHN0LCB1MzIgZHN0X19zeixcbitcdFx0XHRcdCAgICAgY29uc3Qgdm9pZCAqdW5zYWZlX3B0cl9faWduLFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdTY0IGZsYWdzKSBfX2tzeW07XG4rXG4rU0VDKFwibHNtLnMvYnBybV9jaGVja19zZWN1cml0eVwiKVxuK2ludCBCUEZfUFJPRyhjaGVja19leGVjX2FyZ3MsIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4re1xuK1x0dTMyIHBpZCA9IGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpIFx1MDAzZVx1MDAzZSAzMjtcbitcdGNoYXIgZGF0YVtzaXplb2YoZXhwZWN0ZWRfZGF0YSldID0ge307XG4rXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcbitcdGNoYXIgYXJnMFszMl0gPSB7fTtcbitcdGNoYXIgYXJnMVszMl0gPSB7fTtcbitcdGNoYXIgZW52MFszMl0gPSB7fTtcbitcdGNoYXIgZW52MVszMl0gPSB7fTtcbitcdHU2NCBvZmZzZXQgPSAwO1xuK1x0dTY0IGRhdGFfbGVuO1xuK1xuK1x0aWYgKCFDT05GSUdfTU1VKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmIChwaWQgIT0gbW9uaXRvcmVkX3BpZClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRtbSA9IGJwcm0tXHUwMDNlbW07XG4rXHRpZiAoIW1tKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGJwcm1fYXJnYyA9IGJwcm0tXHUwMDNlYXJnYztcbitcdGJwcm1fZW52YyA9IGJwcm0tXHUwMDNlZW52YztcbitcbitcdC8qIHRoaXMgaXMgdGhlIHRvdGFsIHNpemUgb2YgYXJncyBhbmQgZW52cyBzdGFydGluZyBmcm9tIGJwcm0tXHUwMDNlcCAqL1xuK1x0ZGF0YV9sZW4gPSBicHJtLVx1MDAzZWV4ZWMgLSBicHJtLVx1MDAzZXA7XG4rXHRkYXRhX2xlbl9tYXRjaCA9IGRhdGFfbGVuID09IHNpemVvZihleHBlY3RlZF9kYXRhKTtcbitcbitcdGludmFsaWRfZmxhZ3NfcmV0ID0gYnBmX2NvcHlfZnJvbV91c2VyX21tKGRhdGEsXG4rXHRcdFx0XHRcdFx0ICBzaXplb2YoZGF0YSksICh2b2lkICopYnBybS1cdTAwM2VwLCBtbSwgfjBVTEwpO1xuK1xuK1x0Y29weV9yZXQgPSBicGZfY29weV9mcm9tX3VzZXJfbW0oZGF0YSwgc2l6ZW9mKGRhdGEpLCAodm9pZCAqKWJwcm0tXHUwMDNlcCxcbitcdFx0XHRcdFx0IG1tLCAwKTtcbitcdGlmIChjb3B5X3JldClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRkYXRhX21hdGNoID1cbitcdFx0IV9fYnVpbHRpbl9tZW1jbXAoZGF0YSwgZXhwZWN0ZWRfZGF0YSwgc2l6ZW9mKGV4cGVjdGVkX2RhdGEpKTtcbitcbitcdC8qIGFyZzAgaXMgYXQgYnBybS1cdTAwM2VwICovXG4rXHRzdHJfYXJnMF9yZXQgPSBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKGFyZzAsIHNpemVvZihhcmcwKSxcbitcdFx0XHRcdFx0XHQgKHZvaWQgKikoYnBybS1cdTAwM2VwICsgb2Zmc2V0KSxcbitcdFx0XHRcdFx0XHQgbW0sIEJQRl9GX1BBRF9aRVJPUyk7XG4rXHRpZiAoc3RyX2FyZzBfcmV0ICE9IHNpemVvZihleHBlY3RlZF9hcmcwKSlcbitcdFx0cmV0dXJuIDA7XG4rXHRvZmZzZXQgKz0gc3RyX2FyZzBfcmV0O1xuK1xuK1x0LyogYXJnMSBpcyBhdCBicHJtLVx1MDAzZXAgKyBzaXplb2YoYXJnMCkgKi9cbitcdHN0cl9hcmcxX3JldCA9IGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIoYXJnMSwgc2l6ZW9mKGFyZzEpLFxuK1x0XHRcdFx0XHRcdCAodm9pZCAqKShicHJtLVx1MDAzZXAgKyBvZmZzZXQpLFxuK1x0XHRcdFx0XHRcdCBtbSwgQlBGX0ZfUEFEX1pFUk9TKTtcbitcdGlmIChzdHJfYXJnMV9yZXQgIT0gc2l6ZW9mKGV4cGVjdGVkX2FyZzEpKVxuK1x0XHRyZXR1cm4gMDtcbitcdG9mZnNldCArPSBzdHJfYXJnMV9yZXQ7XG4rXG4rXHQvKiBlbnYwIGlzIGF0IGJwcm0tXHUwMDNlcCArIHNpemVvZihhcmcwKSArIHNpemVvZihhcmcxKSAqL1xuK1x0c3RyX2VudjBfcmV0ID0gYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cihlbnYwLCBzaXplb2YoZW52MCksXG4rXHRcdFx0XHRcdFx0ICh2b2lkICopKGJwcm0tXHUwMDNlcCArIG9mZnNldCksXG4rXHRcdFx0XHRcdFx0IG1tLCBCUEZfRl9QQURfWkVST1MpO1xuK1x0aWYgKHN0cl9lbnYwX3JldCAhPSBzaXplb2YoZXhwZWN0ZWRfZW52MCkpXG4rXHRcdHJldHVybiAwO1xuK1x0b2Zmc2V0ICs9IHN0cl9lbnYwX3JldDtcbitcbitcdC8qIGVudjEgaXMgYXQgYnBybS1cdTAwM2VwICsgc2l6ZW9mKGFyZzApICsgc2l6ZW9mKGFyZzEpICsgc2l6ZW9mKGVudjApICovXG4rXHRzdHJfZW52MV9yZXQgPSBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKGVudjEsIHNpemVvZihlbnYxKSxcbitcdFx0XHRcdFx0XHQgKHZvaWQgKikoYnBybS1cdTAwM2VwICsgb2Zmc2V0KSxcbitcdFx0XHRcdFx0XHQgbW0sIEJQRl9GX1BBRF9aRVJPUyk7XG4rXHRpZiAoc3RyX2VudjFfcmV0ICE9IHNpemVvZihleHBlY3RlZF9lbnYxKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRzdHJfYXJnc19tYXRjaCA9XG4rXHRcdCFfX2J1aWx0aW5fbWVtY21wKGFyZzAsIGV4cGVjdGVkX2FyZzAsIHNpemVvZihleHBlY3RlZF9hcmcwKSkgXHUwMDI2XHUwMDI2XG4rXHRcdCFfX2J1aWx0aW5fbWVtY21wKGFyZzEsIGV4cGVjdGVkX2FyZzEsIHNpemVvZihleHBlY3RlZF9hcmcxKSk7XG4rXHRzdHJfZW52c19tYXRjaCA9XG4rXHRcdCFfX2J1aWx0aW5fbWVtY21wKGVudjAsIGV4cGVjdGVkX2VudjAsIHNpemVvZihleHBlY3RlZF9lbnYwKSkgXHUwMDI2XHUwMDI2XG4rXHRcdCFfX2J1aWx0aW5fbWVtY21wKGVudjEsIGV4cGVjdGVkX2VudjEsIHNpemVvZihleHBlY3RlZF9lbnYxKSk7XG4rXG4rXHRyZXR1cm4gZGF0YV9tYXRjaCBcdTAwMjZcdTAwMjYgc3RyX2FyZ3NfbWF0Y2ggXHUwMDI2XHUwMDI2IHN0cl9lbnZzX21hdGNoID8gLUVQRVJNIDogMDtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Jhd190cF9udWxsX2ZhaWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yYXdfdHBfbnVsbF9mYWlsLmNcbmluZGV4IDcyNWQ3M2M5ZmZlMTMuLjE2MzEyNDc5M2QwYTYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmF3X3RwX251bGxfZmFpbC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmF3X3RwX251bGxfZmFpbC5jXG5AQCAtMiwyMiArMiwzNCBAQFxuIC8qIENvcHlyaWdodCAoYykgMjAyNCBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2N2bWxpbnV4LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXHUwMDNlXG4gI2luY2x1ZGUgXCJicGZfbWlzYy5oXCJcbiBcbiBjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4gXG4tLyogRW5zdXJlIG1vZHVsZSBwYXJhbWV0ZXIgaGFzIFBUUl9NQVlCRV9OVUxMICovXG4rZXh0ZXJuIHN0cnVjdCB0YXNrX3N0cnVjdCAqYnBmX3Rhc2tfYWNxdWlyZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIF9fa3N5bTtcbitleHRlcm4gdm9pZCBicGZfdGFza19yZWxlYXNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkgX19rc3ltO1xuK1xuKy8qXG4rICogRW5zdXJlIHRoZSBtb2R1bGUgdHJhY2Vwb2ludCBhcmd1bWVudCBpcyB0cnVzdGVkLW9yLU5VTEwgd2hpbGUgYWxsb3dpbmdcbisgKiBhIGZhdWx0LXByb3RlY3RlZCByZWFkIHdpdGhvdXQgYW4gZXhwbGljaXQgTlVMTCBjaGVjay5cbisgKi9cbiBTRUMoXCJ0cF9idGYvYnBmX3Rlc3Rtb2RfdGVzdF9yYXdfdHBfbnVsbF90cFwiKVxuLV9fZmFpbHVyZSBfX21zZyhcIlIxIGludmFsaWQgbWVtIGFjY2VzcyAndHJ1c3RlZF9wdHJfb3JfbnVsbF8nXCIpXG4rX19zdWNjZXNzIF9fbG9nX2xldmVsKDIpXG4rX19tc2coXCJSMT10cnVzdGVkX3B0cl9vcl9udWxsX3NrX2J1ZmZcIilcbiBpbnQgdGVzdF9yYXdfdHBfbnVsbF9icGZfdGVzdG1vZF90ZXN0X3Jhd190cF9udWxsX2FyZ18xKHZvaWQgKmN0eCkge1xuICAgICBhc20gdm9sYXRpbGUoXCJyMSA9ICoodTY0ICopKHIxICswKTsgcjEgPSAqKHU2NCAqKShyMSArMCk7XCIgOjo6IF9fY2xvYmJlcl9hbGwpO1xuICAgICByZXR1cm4gMDtcbiB9XG4gXG4tLyogQ2hlY2sgTlVMTCBtYXJraW5nICovXG4rLypcbisgKiBFbnN1cmUgc2NoZWRfcGlfc2V0cHJpbydzIHNlY29uZCBhcmd1bWVudCBpcyB0cnVzdGVkLW9yLU5VTEwgd2hpbGUgYWxsb3dpbmdcbisgKiBhIGZhdWx0LXByb3RlY3RlZCByZWFkIHdpdGhvdXQgYW4gZXhwbGljaXQgTlVMTCBjaGVjay5cbisgKi9cbiBTRUMoXCJ0cF9idGYvc2NoZWRfcGlfc2V0cHJpb1wiKVxuLV9fZmFpbHVyZSBfX21zZyhcIlIxIGludmFsaWQgbWVtIGFjY2VzcyAndHJ1c3RlZF9wdHJfb3JfbnVsbF8nXCIpXG4rX19zdWNjZXNzIF9fbG9nX2xldmVsKDIpXG4rX19tc2coXCJSMT10cnVzdGVkX3B0cl9vcl9udWxsX3Rhc2tfc3RydWN0XCIpXG4gaW50IHRlc3RfcmF3X3RwX251bGxfc2NoZWRfcGlfc2V0cHJpb19hcmdfMih2b2lkICpjdHgpIHtcbiAgICAgYXNtIHZvbGF0aWxlKFwicjEgPSAqKHU2NCAqKShyMSArOCk7IHIxID0gKih1NjQgKikocjEgKzApO1wiIDo6OiBfX2Nsb2JiZXJfYWxsKTtcbiAgICAgcmV0dXJuIDA7XG5AQCAtNjAsNyArNzIsOCBAQCBpbnQgdGVzdF90cF9idGZfc2lnbmFsX2RlbGl2ZXJfaW5mb19ub19kZXJlZih2b2lkICpjdHgpXG4gfVxuIFxuIFNFQyhcInRwX2J0Zi9zY2hlZF9wcm9jZXNzX3dhaXRcIilcbi1fX2ZhaWx1cmUgX19tc2coXCJSMSBpbnZhbGlkIG1lbSBhY2Nlc3MgJ3RydXN0ZWRfcHRyX29yX251bGxfJ1wiKVxuK19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxuK19fbXNnKFwiUjE9dHJ1c3RlZF9wdHJfb3JfbnVsbF9waWRcIilcbiBpbnQgdGVzdF9yYXdfdHBfbnVsbF9zY2hlZF9wcm9jZXNzX3dhaXRfYXJnXzEodm9pZCAqY3R4KVxuIHtcbiBcdGFzbSB2b2xhdGlsZShcInIxID0gKih1NjQgKikocjEgKzApOyByMSA9ICoodTMyICopKHIxICswKTtcIiA6OjogX19jbG9iYmVyX2FsbCk7XG5AQCAtNzUsMyArODgsNTggQEAgaW50IHRlc3RfcmF3X3RwX251bGxfc2NoZWRfcHJvY2Vzc193YWl0X2FyZ18xX2NoZWNrZWQodm9pZCAqY3R4KVxuIFx0XHQgICAgIFwicjEgPSAqKHUzMiAqKShyMSArMCk7XCIgOjo6IF9fY2xvYmJlcl9hbGwpO1xuIFx0cmV0dXJuIDA7XG4gfVxuK1xuK1NFQyhcInRwX2J0Zi9zY2hlZF9waV9zZXRwcmlvXCIpXG4rX19mYWlsdXJlIF9fbG9nX2xldmVsKDIpXG4rX19tc2coXCJSMT11bnRydXN0ZWRfcHRyX3Rhc2tfc3RydWN0XCIpXG4rX19tc2coXCJSMSBtdXN0IGJlIGEgcmN1IHBvaW50ZXJcIilcbitpbnQgQlBGX1BST0codHJ1c3RlZF9vcl9udWxsX3dhbGtfaXNfdW50cnVzdGVkLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssXG4rXHQgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqcGlfdGFzaylcbit7XG4rXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudCwgKmFjcXVpcmVkO1xuK1xuK1x0cGFyZW50ID0gcGlfdGFzay1cdTAwM2VyZWFsX3BhcmVudDtcbitcdGFjcXVpcmVkID0gYnBmX3Rhc2tfYWNxdWlyZShwYXJlbnQpO1xuK1x0aWYgKGFjcXVpcmVkKVxuK1x0XHRicGZfdGFza19yZWxlYXNlKGFjcXVpcmVkKTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJ0cF9idGYvc2NoZWRfcGlfc2V0cHJpb1wiKVxuK19fZmFpbHVyZSBfX21zZyhcIlIxIG11c3QgYmUgYSByY3UgcG9pbnRlclwiKVxuK2ludCBCUEZfUFJPRyhkZXJpdmVkX3B0cl9udWxsX2NoZWNrX2RvZXNfbm90X3Jlc3RvcmVfdHJ1c3QsXG4rXHQgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHRhc2tfc3RydWN0ICpwaV90YXNrKVxuK3tcbitcdHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50LCAqYWNxdWlyZWQ7XG4rXG4rXHRwYXJlbnQgPSBwaV90YXNrLVx1MDAzZXJlYWxfcGFyZW50O1xuK1x0aWYgKCFwYXJlbnQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0YWNxdWlyZWQgPSBicGZfdGFza19hY3F1aXJlKHBhcmVudCk7XG4rXHRpZiAoYWNxdWlyZWQpXG4rXHRcdGJwZl90YXNrX3JlbGVhc2UoYWNxdWlyZWQpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qXG4rICogSW4gY29udHJhc3QsIGNoZWNraW5nIHRoZSBvcmlnaW5hbCB0cnVzdGVkLW9yLU5VTEwgcG9pbnRlciByZW1vdmVzXG4rICogUFRSX01BWUJFX05VTEwgd2hpbGUgcmV0YWluaW5nIFBUUl9UUlVTVEVELlxuKyAqL1xuK1NFQyhcInRwX2J0Zi9zY2hlZF9waV9zZXRwcmlvXCIpXG4rX19zdWNjZXNzXG4raW50IEJQRl9QUk9HKG9yaWdpbmFsX3B0cl9udWxsX2NoZWNrX3JldGFpbnNfdHJ1c3QsXG4rXHQgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHRhc2tfc3RydWN0ICpwaV90YXNrKVxuK3tcbitcdHN0cnVjdCB0YXNrX3N0cnVjdCAqYWNxdWlyZWQ7XG4rXG4rXHRpZiAoIXBpX3Rhc2spXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0YWNxdWlyZWQgPSBicGZfdGFza19hY3F1aXJlKHBpX3Rhc2spO1xuK1x0aWYgKGFjcXVpcmVkKVxuK1x0XHRicGZfdGFza19yZWxlYXNlKGFjcXVpcmVkKTtcbitcbitcdHJldHVybiAwO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90cF9idGZfbnVsbGFibGUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RwX2J0Zl9udWxsYWJsZS5jXG5pbmRleCBjZjA1NDdhNjEzZmZjLi5iNzkxNDIyNGJhMTk0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdHBfYnRmX251bGxhYmxlLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RwX2J0Zl9udWxsYWJsZS5jXG5AQCAtNyw3ICs3LDcgQEBcbiAjaW5jbHVkZSBcImJwZl9taXNjLmhcIlxuIFxuIFNFQyhcInRwX2J0Zi9icGZfdGVzdG1vZF90ZXN0X251bGxhYmxlX2JhcmVfdHBcIilcbi1fX2ZhaWx1cmUgX19tc2coXCJSMSBpbnZhbGlkIG1lbSBhY2Nlc3MgJ3RydXN0ZWRfcHRyX29yX251bGxfJ1wiKVxuK19fc3VjY2Vzc1xuIGludCBCUEZfUFJPRyhoYW5kbGVfdHBfYnRmX251bGxhYmxlX2JhcmUxLCBzdHJ1Y3QgYnBmX3Rlc3Rtb2RfdGVzdF9yZWFkX2N0eCAqbnVsbGFibGVfY3R4KVxuIHtcbiBcdHJldHVybiBudWxsYWJsZV9jdHgtXHUwMDNlbGVuO1xuQEAgLTIxLDQgKzIxLDQ3IEBAIGludCBCUEZfUFJPRyhoYW5kbGVfdHBfYnRmX251bGxhYmxlX2JhcmUyLCBzdHJ1Y3QgYnBmX3Rlc3Rtb2RfdGVzdF9yZWFkX2N0eCAqbnVsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rU0VDKFwidHBfYnRmL2JwZl90ZXN0bW9kX3Rlc3RfbnVsbGFibGVfYmFyZV90cFwiKVxuK19fc3VjY2Vzc1xuK2ludCBCUEZfUFJPRyhoYW5kbGVfdHBfYnRmX251bGxhYmxlX21lbSwgc3RydWN0IGJwZl90ZXN0bW9kX3Rlc3RfcmVhZF9jdHggKm51bGxhYmxlX2N0eClcbit7XG4rXHRyZXR1cm4gbnVsbGFibGVfY3R4LVx1MDAzZWJ1ZlswXTtcbit9XG4rXG4rU0VDKFwidHBfYnRmL2JwZl90ZXN0bW9kX3Rlc3RfbnVsbGFibGVfYmFyZV90cFwiKVxuK19fZmFpbHVyZSBfX21zZyhcInBvaW50ZXIgYXJpdGhtZXRpYyBvbiB0cnVzdGVkX3B0cl9vcl9udWxsXyBwcm9oaWJpdGVkXCIpXG4raW50IEJQRl9QUk9HKGhhbmRsZV90cF9idGZfbnVsbGFibGVfYXJpdGgsIHN0cnVjdCBicGZfdGVzdG1vZF90ZXN0X3JlYWRfY3R4ICpudWxsYWJsZV9jdHgpXG4re1xuK1x0YXNtIHZvbGF0aWxlKFwiJVtjdHhdICs9IDFcIiA6IFtjdHhdIFwiK3JcIihudWxsYWJsZV9jdHgpKTtcbitcdHJldHVybiBudWxsYWJsZV9jdHgtXHUwMDNlbGVuO1xuK31cbitcbitTRUMoXCJ0cF9idGYvYnBmX3Rlc3Rtb2RfdGVzdF9udWxsYWJsZV9iYXJlX3RwXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiaW52YWxpZCBtZW0gYWNjZXNzICd0cnVzdGVkX3B0cl9vcl9udWxsXydcIilcbitpbnQgQlBGX1BST0coaGFuZGxlX3RwX2J0Zl9udWxsYWJsZV9hdG9taWNfcm13LFxuK1x0ICAgICBzdHJ1Y3QgYnBmX3Rlc3Rtb2RfdGVzdF9yZWFkX2N0eCAqbnVsbGFibGVfY3R4KVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXCJyMSA9ICVbY3R4XTtcIlxuK1x0XHQgICAgICBcIncyID0gMTtcIlxuK1x0XHQgICAgICBcImxvY2sgKih1MzIgKikocjEgKyAlW2xlbl0pICs9IHcyO1wiXG4rXHRcdCAgICAgIDpcbitcdFx0ICAgICAgOiBbY3R4XSBcInJcIihudWxsYWJsZV9jdHgpLFxuK1x0XHRcdF9faW1tX2NvbnN0KGxlbixcbitcdFx0XHRcdCAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3Rlc3Rtb2RfdGVzdF9yZWFkX2N0eCxcbitcdFx0XHRcdFx0ICAgICBsZW4pKVxuK1x0XHQgICAgICA6IFwicjFcIiwgXCJyMlwiLCBcIm1lbW9yeVwiKTtcbitcdHJldHVybiAwO1xuK31cbitcbisjaWZkZWYgX19CUEZfRkVBVFVSRV9MT0FEX0FDUV9TVE9SRV9SRUxcbitTRUMoXCJ0cF9idGYvYnBmX3Rlc3Rtb2RfdGVzdF9udWxsYWJsZV9iYXJlX3RwXCIpXG4rX19mYWlsdXJlXG4rX19tc2coXCJCUEZfQVRPTUlDIGxvYWRzIGZyb20gUnt7WzAtOV0rfX0gdHJ1c3RlZF9wdHJfb3JfbnVsbF9cIilcbitpbnQgQlBGX1BST0coaGFuZGxlX3RwX2J0Zl9udWxsYWJsZV9sb2FkX2FjcXVpcmUsXG4rXHQgICAgIHN0cnVjdCBicGZfdGVzdG1vZF90ZXN0X3JlYWRfY3R4ICpudWxsYWJsZV9jdHgpXG4re1xuK1x0cmV0dXJuIF9fYXRvbWljX2xvYWRfbihcdTAwMjZudWxsYWJsZV9jdHgtXHUwMDNlbGVuLCBfX0FUT01JQ19BQ1FVSVJFKTtcbit9XG4rI2VuZGlmXG4rXG4gY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RwX2J0Zl9udWxsYWJsZV9ydW50aW1lLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90cF9idGZfbnVsbGFibGVfcnVudGltZS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNWM5YzdmOTQwNDBkY1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdHBfYnRmX251bGxhYmxlX3J1bnRpbWUuY1xuQEAgLTAsMCArMSwzNSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rXG4rI2luY2x1ZGUgXCJ2bWxpbnV4LmhcIlxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl90cmFjaW5nLmhcdTAwM2VcbisjaW5jbHVkZSBcIi4uL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuaFwiXG4rXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuK1xuK2ludCBtb25pdG9yZWRfdGlkO1xuK2ludCBjYWxscztcbitfX3U2NCBub25udWxsX2xlbjtcbitfX3U2NCBudWxsX2xlbjtcbitcbitTRUMoXCJ0cF9idGYvYnBmX3Rlc3Rtb2RfdGVzdF9udWxsYWJsZV9iYXJlX3RwXCIpXG4raW50IEJQRl9QUk9HKGhhbmRsZV9udWxsYWJsZV9ydW50aW1lLFxuK1x0ICAgICBzdHJ1Y3QgYnBmX3Rlc3Rtb2RfdGVzdF9yZWFkX2N0eCAqbnVsbGFibGVfY3R4KVxuK3tcbitcdF9fdTMyIHRpZCA9IGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpO1xuK1x0X191NjQgbGVuO1xuK1x0aW50IGNhbGw7XG4rXG4rXHRpZiAodGlkICE9IG1vbml0b3JlZF90aWQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0bGVuID0gbnVsbGFibGVfY3R4LVx1MDAzZWxlbjtcbitcdGNhbGwgPSBjYWxscysrO1xuK1xuK1x0aWYgKGNhbGwgPT0gMClcbitcdFx0bm9ubnVsbF9sZW4gPSBsZW47XG4rXHRlbHNlIGlmIChjYWxsID09IDEpXG4rXHRcdG51bGxfbGVuID0gbGVuO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sc20uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sc20uY1xuaW5kZXggYzcyNGJmMzg5ZjVjNi4uZmFjMTMzZDkwZjVlNiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sc20uY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xzbS5jXG5AQCAtMTYyLDEzICsxNjIsMTMgQEAgX19uYWtlZCBpbnQgZGlzYWJsZWRfaG9va190ZXN0Myh2b2lkICpjdHgpXG4gXG4gU0VDKFwibHNtL21tYXBfZmlsZVwiKVxuIF9fZGVzY3JpcHRpb24oXCJub3QgbnVsbCBjaGVja2luZyBudWxsYWJsZSBwb2ludGVyIGluIGJwZl9sc21fbW1hcF9maWxlXCIpXG4tX19mYWlsdXJlIF9fbXNnKFwiUjEgaW52YWxpZCBtZW0gYWNjZXNzICd0cnVzdGVkX3B0cl9vcl9udWxsXydcIilcbitfX3N1Y2Nlc3NcbiBpbnQgQlBGX1BST0cobm9fbnVsbF9jaGVjaywgc3RydWN0IGZpbGUgKmZpbGUpXG4ge1xuLVx0c3RydWN0IGlub2RlICppbm9kZTtcbitcdGlub190IGlubztcbiBcbi1cdGlub2RlID0gZmlsZS1cdTAwM2VmX2lub2RlO1xuLVx0X19zaW5rKGlub2RlKTtcbitcdGlubyA9IGZpbGUtXHUwMDNlZl9pbm9kZS1cdTAwM2VpX2lubztcbitcdF9fc2luayhpbm8pO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTE4OCw2ICsxODgsMTYgQEAgaW50IEJQRl9QUk9HKG51bGxfY2hlY2ssIHN0cnVjdCBmaWxlICpmaWxlKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK1NFQyhcImxzbS9tbWFwX2ZpbGVcIilcbitfX2Rlc2NyaXB0aW9uKFwic3RvcmUgdGhyb3VnaCB0cnVzdGVkLW9yLW51bGwgZmlsZSBpcyByZWplY3RlZFwiKVxuK19fZmFpbHVyZVxuK19fbXNnKFwiUnt7WzAtOV0rfX0gaW52YWxpZCBtZW0gYWNjZXNzICd0cnVzdGVkX3B0cl9vcl9udWxsXydcIilcbitpbnQgQlBGX1BST0coc3RvcmVfdGhyb3VnaF90cnVzdGVkX29yX251bGxfZmlsZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4re1xuK1x0ZmlsZS1cdTAwM2VmX2ZsYWdzID0gMDtcbitcdHJldHVybiAwO1xuK31cbitcbiBTRUMoXCJsc21fY2dyb3VwL2ZpbGVfb3BlblwiKVxuIF9fZGVzY3JpcHRpb24oXCJzbGVlcGFibGUgbHNtX2Nncm91cCBwcm9ncmFtIGlzIHJlamVjdGVkXCIpXG4gX19mYWlsdXJlIF9fbXNnKFwiUHJvZ3JhbSBvZiB0aGlzIHR5cGUgY2Fubm90IGJlIHNsZWVwYWJsZVwiKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl92ZnNfYWNjZXB0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdmZzX2FjY2VwdC5jXG5pbmRleCA1NTM5OGMwNDI5MGE4Li4xN2MxNTQyY2M3ZTE3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3Zmc19hY2NlcHQuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3Zmc19hY2NlcHQuY1xuQEAgLTEwMCw0ICsxMDAsMTggQEAgaW50IEJQRl9QUk9HKGlub2RlX3JlbmFtZSwgc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK1NFQyhcImxzbS5zL2lub2RlX3JlbmFtZVwiKVxuK19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxuK19fbXNnKFwiUnt7WzAtOV0rfX09dHJ1c3RlZF9wdHJfb3JfbnVsbF9pbm9kZVwiKVxuK2ludCBCUEZfUFJPRyhpbm9kZV9yZW5hbWVfbm9fbnVsbF9jaGVjaywgc3RydWN0IGlub2RlICpvbGRfZGlyLFxuK1x0ICAgICBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKm5ld19kaXIsXG4rXHQgICAgIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnksIHVuc2lnbmVkIGludCBmbGFncylcbit7XG4rXHRpbm9fdCBpbm8gPSBuZXdfZGVudHJ5LVx1MDAzZWRfaW5vZGUtXHUwMDNlaV9pbm87XG4rXG4rXHRpZiAoaW5vID09IDApXG4rXHRcdHJldHVybiAtRUFDQ0VTO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIGNoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdmZzX3JlamVjdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3Zmc19yZWplY3QuY1xuaW5kZXggOGYwYzQ1NDIxZjg5My4uMmEwODEzMjU4MTgzZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl92ZnNfcmVqZWN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl92ZnNfcmVqZWN0LmNcbkBAIC0xNTksMTggKzE1OSw0IEBAIGludCBCUEZfUFJPRyhwYXRoX2RfcGF0aF9rZnVuY19ub25fbHNtLCBzdHJ1Y3QgcGF0aCAqcGF0aCwgc3RydWN0IGZpbGUgKmYpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tU0VDKFwibHNtLnMvaW5vZGVfcmVuYW1lXCIpXG4tX19mYWlsdXJlIF9fbXNnKFwiaW52YWxpZCBtZW0gYWNjZXNzICd0cnVzdGVkX3B0cl9vcl9udWxsXydcIilcbi1pbnQgQlBGX1BST0coaW5vZGVfcmVuYW1lLCBzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4tXHQgICAgIHN0cnVjdCBpbm9kZSAqbmV3X2Rpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSxcbi1cdCAgICAgdW5zaWduZWQgaW50IGZsYWdzKVxuLXtcbi1cdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBuZXdfZGVudHJ5LVx1MDAzZWRfaW5vZGU7XG4tXHRpbm9fdCBpbm87XG4tXG4tXHRpbm8gPSBpbm9kZS1cdTAwM2VpX2lubztcbi1cdGlmIChpbm8gPT0gMClcbi1cdFx0cmV0dXJuIC1FQUNDRVM7XG4tXHRyZXR1cm4gMDtcbi19XG4gY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jXG5pbmRleCBmNzk4YmJiYjRkMTNjLi4yYmE2YTgzZDI0M2Y1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuY1xuQEAgLTcwMiw2ICs3MDIsNyBAQCBicGZfdGVzdG1vZF90ZXN0X3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuIFx0aWYgKGJwZl90ZXN0bW9kX2xvb3BfdGVzdCgxMDEpIFx1MDAzZSAxMDApXG4gXHRcdHRyYWNlX2JwZl90ZXN0bW9kX3Rlc3RfcmVhZChjdXJyZW50LCBcdTAwMjZjdHgpO1xuIFxuK1x0dHJhY2VfYnBmX3Rlc3Rtb2RfdGVzdF9udWxsYWJsZV9iYXJlX3RwKFx1MDAyNmN0eCk7XG4gXHR0cmFjZV9icGZfdGVzdG1vZF90ZXN0X251bGxhYmxlX2JhcmVfdHAoTlVMTCk7XG4gXG4gXHQvKiBNYWdpYyBudW1iZXIgdG8gZW5hYmxlIHdyaXRhYmxlIHRwICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2NoZWRfZXh0L21heWJlX251bGxfZmFpbF9kc3AuYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zY2hlZF9leHQvbWF5YmVfbnVsbF9mYWlsX2RzcC5icGYuY1xuaW5kZXggZWM3MjRkN2IzM2QxOC4uZWNhYTM2MzU1Y2FlYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NjaGVkX2V4dC9tYXliZV9udWxsX2ZhaWxfZHNwLmJwZi5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zY2hlZF9leHQvbWF5YmVfbnVsbF9mYWlsX2RzcC5icGYuY1xuQEAgLTcsMTQgKzcsMTMgQEBcbiBcbiBjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4gXG4tdTY0IHZ0aW1lX3Rlc3Q7XG4tXG4gdm9pZCBCUEZfU1RSVUNUX09QUyhtYXliZV9udWxsX3J1bm5pbmcsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiB7fVxuIFxuIHZvaWQgQlBGX1NUUlVDVF9PUFMobWF5YmVfbnVsbF9mYWlsX2Rpc3BhdGNoLCBzMzIgY3B1LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4ge1xuLVx0dnRpbWVfdGVzdCA9IHAtXHUwMDNlc2N4LmRzcV92dGltZTtcbitcdC8qIFBvaW50ZXIgYXJpdGhtZXRpYyBvbiBhIHRydXN0ZWQtb3ItTlVMTCBwb2ludGVyIG11c3QgYmUgcmVqZWN0ZWQuICovXG4rXHRhc20gdm9sYXRpbGUoXCIlW3BdICs9IDBcIiA6IFtwXSBcIityXCIocCkpO1xuIH1cbiBcbiBTRUMoXCIuc3RydWN0X29wcy5saW5rXCIpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDoyMDo1NS42Nzg1OTQzNDRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3Mjg0MTgwNDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBQYXRjaCBmb3IgU3l6a2FsbGVyIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoICpkb2VzKiB3YXJyYW50IGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiBmb3IgZnV6emluZyBwb3RlbnRpYWwgd2l0aCBzeXprYWxsZXIuIFRoZSBjb2RlIHRvdWNoZXMgc2V2ZXJhbCBrZXkgYXJlYXMgb2YgdGhlIGtlcm5lbCwgYW5kIHRoZSBjaGFuZ2VzIGFyZSBzaWduaWZpY2FudCBlbm91Z2ggdG8gd2FycmFudCBhIGZvY3VzZWQgYXBwcm9hY2guXG5cbkZpcnN0LCBJIHNlZSBtb2RpZmljYXRpb25zIGluIGBmcy9leGVjLmNgLCBzcGVjaWZpY2FsbHkgYGZyZWVfYnBybWAuIFdoaWxlIGl0IGxvb2tzIGxpa2UgYSBzbWFsbCBjaGFuZ2UsIHNldHRpbmcgYGJwcm0tXHUwMDNlbW0gPSBOVUxMYCBiZWZvcmUgYG1tcHV0KG1tKWAgY291bGQgcG90ZW50aWFsbHkgaW50cm9kdWNlIHN1YnRsZSBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgdGhhdCBmdXp6aW5nIGNvdWxkIHVuY292ZXIuXG5cblRoZW4sIHRoZSBzZWNvbmQgc2VjdGlvbiwgZW5jb21wYXNzaW5nIGBpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oYCBhbmQgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIGlzIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZy4gVGhlIGludHJvZHVjdGlvbiBvZiBgYnBmX2lzX3RydXN0ZWRfb3JfbnVsbF9idGZfcHRyYCBhbmQgdGhlIHJlbGF0ZWQgbW9kaWZpY2F0aW9ucyB0byBgYnBmX21heV9mYXVsdF9vbl9kZXJlZmAgd2l0aGluIHRoZSBCUEYgdmVyaWZpZXIgYXJlIGhpZ2gtdmFsdWUgdGFyZ2V0cy4gVGhpcyBpbmRpY2F0ZXMgbmV3IGxvZ2ljIGZvciBoYW5kbGluZyBwb3RlbnRpYWxseSB1bnRydXN0ZWQgcG9pbnRlcnMsIHdoaWNoIGlzIGEgcHJpbWUgYXJlYSBmb3IgZnV6emluZy4gVGhlIGNoYW5nZXMgYXJvdW5kIGBCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTGAgYW5kIHRoZSBhbHRlcmF0aW9ucyBpbiBgY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3NgIGFuZCBgY2hlY2tfbWVtX2FjY2Vzc2AgcG9pbnQgdG8gcG90ZW50aWFsIG5ldyBCUEYgZmVhdHVyZXMgYW5kIHZ1bG5lcmFiaWxpdGllcy5cblxuVGhlIGFkZGl0aW9uIG9mIG5ldyBrZnVuY3MgbGlrZSBgYnBmX2NvcHlfZnJvbV91c2VyX21tYCwgYGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHJgLCBhbmQgdGhlIHJlZmFjdG9yaW5nIG9mIGV4aXN0aW5nIGZ1bmN0aW9ucyB0byB1c2UgdGhlbSAoYGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrYCwgYGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3N0cmApIGFyZSBhbHNvIG5vdGV3b3J0aHkuIFRoZSBmYWN0IHRoYXQgdGhlc2Uga2Z1bmNzIGFyZSByZWdpc3RlcmVkIGFzIGBLRl9TTEVFUEFCTEVgIHN1Z2dlc3RzIGEgbGlrZWx5IG5ldyBzZXQgb2YgZmVhdHVyZXMgb3IgZW5oYW5jZW1lbnRzIGZvciBicGYgcHJvZ3JhbXMuIFRoZSBjaGFuZ2VzIHRvIGhvdyBkYXRhIGlzIGNvcGllZCBmcm9tIHVzZXIgc3BhY2UgKnRocm91Z2gqIHRoZSBtbSBsYXllciwgYW5kIHRoZSBwb3RlbnRpYWwgZm9yIHJhY2VzIGludHJvZHVjZWQgYnkgdGhlIHVzZSBvZiBzbGVlcGFibGUga2Z1bmNzLCBpcyBzaWduaWZpY2FudCBmb3Igc2VjdXJpdHkuXG5cblRoZSBjaGFuZ2VzIGluIGBtbS9pbnRlcm5hbC5oYCwgYG1tL21lbW9yeS5jYCwgYG1tL25vbW11LmNgLCBhbmQgYG1tL3V0aWwuY2AgYXJlIGFsc28gaW1wb3J0YW50LiBUaGUgaW50cm9kdWN0aW9uIG9mIGBjb3B5X3JlbW90ZV9tbV9zdHJgIChwcmV2aW91c2x5IGBfX2NvcHlfcmVtb3RlX3ZtX3N0cmApIGFuZCBpdHMgaW50ZXJhY3Rpb25zIHdpdGggYGdldF90YXNrX21tKHRzaylgIGluZGljYXRlIG1vZGlmaWNhdGlvbnMgcmVsYXRlZCB0byByZW1vdGUgbWVtb3J5IG1hbmlwdWxhdGlvbi4gVGhpcyBjb3VsZCBoYXZlIGltcGxpY2F0aW9ucyBmb3IgbWVtb3J5IGNvcnJ1cHRpb24sIHJhY2VzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzLlxuXG5UaGUgZXhpc3RlbmNlIG9mIHRlc3RzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy8uLi5gIGFkZHMgZnVydGhlciB3ZWlnaHQgdG8gdGhlIGlkZWEgdGhhdCB0aGlzIGlzIHNpZ25pZmljYW50IGNvZGUuIFRoZSB0ZXN0cyBtYXkgbm90IGJlIGV4aGF1c3RpdmUsIHNvIGEgY2FyZWZ1bGx5IGNyYWZ0ZWQgZnV6emluZyBjYW1wYWlnbiBpcyB3b3J0aHdoaWxlLlxuXG5UaGUgZmFjdCB0aGF0IGFsbCB0aGlzIGNvZGUgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIFFFTVUvYW1kNjQgc2V0dXBzLCB2aWEgdGhlIEJQRiBzeXNjYWxsIChlQlBGIHByb2dyYW1zLCBMU00gaG9va3MsIHRyYWNlcG9pbnRzLCBzeXNjYWxscywgZXRjLikgYW5kIGBleGVjdmVgLCBpcyB0aGUga2V5IGZhY3Rvci4gVGhlIGNvcmUgQlBGIHZlcmlmaWVyLCB0aGUgQlBGIGhlbHBlcnMva2Z1bmNzLCB0aGUgbW0gZnVuY3Rpb25zLCBhbmQgZXZlbiBgZnJlZV9icHJtYCBhcmUgYWxsIHdpdGhpbiB0aGUgYXR0YWNrIHN1cmZhY2UuXG5cbkJhc2VkIG9uIHRoZSBjcml0ZXJpYSBmb3IgXCJXb3J0aEZ1enppbmc9dHJ1ZSxcIiB0aGlzIHBhdGNoIGRlZmluaXRlbHkgbWVldHMgdGhlIHJlcXVpcmVtZW50cy4gSXQgdG91Y2hlcyBjb3JlIHN1YnN5c3RlbXMgKEJQRiwgbW0pLCBpbmNsdWRlcyByZWZhY3RvcmluZ3MsIGFuZCBpbnRyb2R1Y2VzIG5ldyBsb2dpYyB3aXRoaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG5cbk5vdywgSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBLY29uZmlnIG9wdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgZm9yIEJQRiBzeXNjYWxsLCB0aGUgQlBGIHZlcmlmaWVyLCB0aGUgbmV3IGtmdW5jcywgYW5kIGV2ZXJ5dGhpbmcgZWxzZSBpbiB0aGlzIHBhdGNoLiBJJ2xsIG5lZWQgdG8gdXNlIGdyZXBwZXIgb3Igc291cmNlIGluc3BlY3Rpb24gdG8gZGV0ZXJtaW5lIGFsbCByZWxldmFudCBjb25maWcgb3B0aW9ucy4gVGhlbiBJJ2xsIGlkZW50aWZ5IHRoZSBjcml0aWNhbCBmb2N1cyBzeW1ib2xzIHRvIGZlZWQgc3l6a2FsbGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzk5NCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMzcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDoyMTowMi45NjI3Nzg2NDNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgzODI3NDI5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI5PW1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTMwLVxcbmtlcm5lbC9icGYvS2NvbmZpZzozMTpjb25maWcgQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL0tjb25maWctMzItXFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDoyMTowNS44MDEwNjA3MjFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzkxMTQ1NDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgQlBGX1NZU0NBTEwgRGVwZW5kZW5jaWVzIGluIEtjb25maWcqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMzEuIFRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljIGFuZCBkZXBlbmRlbmNpZXMgZm9yIHRoZSBgQlBGX1NZU0NBTExgIG9wdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBLY29uZmlnIHN5bWJvbHMsIGFuZCB0aHVzIGNvbmZpZ3VyYXRpb25zLCBtdXN0IGJlIGVuYWJsZWQgZm9yIEJQRiBzeXNjYWxsIHN1cHBvcnQgdG8gYmUgY29tcGlsZWQgaW50byB0aGUga2VybmVsLiBUaGlzIGlzbid0IGp1c3QgYWJvdXQgdGhlIGRpcmVjdCBkZXBlbmRlbmNpZXMsIGJ1dCBhbHNvIHRoZSBpbmRpcmVjdGx5IGltcGxpZWQgb25lcy4gSSdtIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoaW5ncyBsaWtlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyByZXF1aXJlbWVudHMgKGxpa2Ugd2hldGhlciB0aGUgYXJjaGl0ZWN0dXJlIHByb3ZpZGVzIHRoZSBuZWVkZWQgaW5mcmFzdHJ1Y3R1cmUpLCBzZWN1cml0eSBmZWF0dXJlcywgb3IgZXZlbiBvdGhlciBCUEYtcmVsYXRlZCBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGJlIGEgcHJlcmVxdWlzaXRlLiBLbm93aW5nIHRoaXMgaXMgY3J1Y2lhbCBmb3IgZGVidWdnaW5nIGJ1aWxkIHByb2JsZW1zLCB0YWlsb3JpbmcgYSBjdXN0b20ga2VybmVsIGNvbmZpZ3VyYXRpb24sIG9yIGV2ZW4gcHJlZGljdGluZyBwb3RlbnRpYWwgY29tcGF0aWJpbGl0eSBpc3N1ZXMuIEknbSBleHBlY3RpbmcgdG8gc2VlIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzIGxpbmtpbmcgdGhpcyBzeW1ib2wgdG8gc3BlY2lmaWMgaGFyZHdhcmUgZmVhdHVyZXMgb3Igb3RoZXIgbW9kdWxlcy4gVGltZSB0byBjb25maXJtIGFuZCByZWZpbmUgbXkgbWVudGFsIG1vZGVsIG9mIHdoYXQgbmVlZHMgdG8gYmUgaW4gcGxhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMDE3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjA6MjE6MDguNTkyMjA4NTk4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzMjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAzMDpcXHRcXG4gIDMxOlxcdGNvbmZpZyBCUEZfU1lTQ0FMTFxcbiAgMzI6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcbiAgMzM6XFx0XFx0c2VsZWN0IEJQRlxcbiAgMzQ6XFx0XFx0c2VsZWN0IElSUV9XT1JLXFxuICAzNTpcXHRcXHRzZWxlY3QgTkVFRF9UQVNLU19SQ1VcXG4gIDM2OlxcdFxcdHNlbGVjdCBUQVNLU19UUkFDRV9SQ1VcXG4gIDM3OlxcdFxcdHNlbGVjdCBCSU5BUllfUFJJTlRGXFxuICAzODpcXHRcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHIGlmIE5FVFxcbiAgMzk6XFx0XFx0c2VsZWN0IE5FVF9YR1JFU1MgaWYgTkVUXFxuICA0MDpcXHRcXHRzZWxlY3QgUEFHRV9QT09MIGlmIE5FVFxcbiAgNDE6XFx0XFx0ZGVmYXVsdCBuXFxuICA0MjpcXHRcXHRoZWxwXFxuICA0MzpcXHRcXHQgIEVuYWJsZSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gbWFuaXB1bGF0ZSBCUEYgcHJvZ3JhbXNcXG4gIDQ0OlxcdFxcdCAgYW5kIG1hcHMgdmlhIGZpbGUgZGVzY3JpcHRvcnMuXFxuICA0NTpcXHRcXG4gIDQ2OlxcdGNvbmZpZyBCUEZfSklUXFxuICA0NzpcXHRcXHRib29sIFxcXCJFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclxcXCJcXG4gIDQ4OlxcdFxcdGRlcGVuZHMgb24gQlBGXFxuICA0OTpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfQ0JQRl9KSVQgfHwgSEFWRV9FQlBGX0pJVFxcbiAgNTA6XFx0XFx0c2VsZWN0IEVYRUNNRU1cXG4gIDUxOlxcdFxcdGhlbHBcXG4gIDUyOlxcdFxcdCAgQlBGIHByb2dyYW1zIGFyZSBub3JtYWxseSBoYW5kbGVkIGJ5IGEgQlBGIGludGVycHJldGVyLiBUaGlzIG9wdGlvblxcbiAgNTM6XFx0XFx0ICBhbGxvd3MgdGhlIGtlcm5lbCB0byBnZW5lcmF0ZSBuYXRpdmUgY29kZSB3aGVuIGEgcHJvZ3JhbSBpcyBsb2FkZWRcXG4gIDU0OlxcdFxcdCAgaW50byB0aGUga2VybmVsLiBUaGlzIHdpbGwgc2lnbmlmaWNhbnRseSBzcGVlZC11cCBwcm9jZXNzaW5nIG9mIEJQRlxcbiAgNTU6XFx0XFx0ICBwcm9ncmFtcy5cXG4gIDU2OlxcdFxcbiAgNTc6XFx0XFx0ICBOb3RlLCBhbiBhZG1pbiBzaG91bGQgZW5hYmxlIHRoaXMgZmVhdHVyZSBjaGFuZ2luZzpcXG4gIDU4OlxcdFxcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfZW5hYmxlXFxuICA1OTpcXHRcXHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2hhcmRlbiAgIChvcHRpb25hbClcXG4gIDYwOlxcdFxcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfa2FsbHN5bXMgKG9wdGlvbmFsKVxcbiAgNjE6XFx0XFxuICA2MjpcXHRjb25maWcgQlBGX0pJVF9BTFdBWVNfT05cXG4gIDYzOlxcdFxcdGJvb2wgXFxcIlBlcm1hbmVudGx5IGVuYWJsZSBCUEYgSklUIGFuZCByZW1vdmUgQlBGIGludGVycHJldGVyXFxcIlxcbiAgNjQ6XFx0XFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTCBcXHUwMDI2XFx1MDAyNiBIQVZFX0VCUEZfSklUIFxcdTAwMjZcXHUwMDI2IEJQRl9KSVRcXG4gIDY1OlxcdFxcdGhlbHBcXG4gIDY2OlxcdFxcdCAgRW5hYmxlcyBCUEYgSklUIGFuZCByZW1vdmVzIEJQRiBpbnRlcnByZXRlciB0byBhdm9pZCBzcGVjdWxhdGl2ZVxcbiAgNjc6XFx0XFx0ICBleGVjdXRpb24gb2YgQlBGIGluc3RydWN0aW9ucyBieSB0aGUgaW50ZXJwcmV0ZXIuXFxuICA2ODpcXHRcXG4gIDY5OlxcdFxcdCAgV2hlbiBDT05GSUdfQlBGX0pJVF9BTFdBWVNfT04gaXMgZW5hYmxlZCwgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfZW5hYmxlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIwOjIxOjA4LjU5MjMxNTQ1OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNDI3NzgzNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRlYnVnZ2luZyBCVEYgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGdpdmVuIHRoYXQgd2UncmUgZGVhbGluZyB3aXRoIGJvdGggQlRGLCBhbmQgdGhlIHBvdGVudGlhbCBmb3Iga2Z1bmNzIGFuZC9vciB0cnVzdGVkIHBvaW50ZXJzLCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGhvdyBgREVCVUdfSU5GT19CVEZgIGlzIGNvbmZpZ3VyZWQuIFdlJ3JlIG9idmlvdXNseSByZWx5aW5nIG9uIEJURiBkYXRhIGZvciBzb21lIGNyaXRpY2FsIGZ1bmN0aW9uYWxpdHkgaGVyZSwgd2hldGhlciBpdCdzIHN5bWJvbCByZXNvbHV0aW9uLCB0eXBlIGluZm9ybWF0aW9uLCBvciBwb3RlbnRpYWxseSB2YWxpZGF0aW9uIHJlbGF0ZWQgdG8gdGhlc2UgbW9yZSBhZHZhbmNlZCBmZWF0dXJlcy4gU28sIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgdmVyaWZ5IHRoZSBzdGF0ZSBvZiBCVEYuIEVzc2VudGlhbGx5LCBJJ20gdGhpbmtpbmcsIFwiTGV0J3MgY2hlY2sgYERFQlVHX0lORk9fQlRGYCBhbmQgdmVyaWZ5IGl0cyBjdXJyZW50IGNvbmZpZ3VyYXRpb24gZm9yIHRoZXNlIEJURiBkZXBlbmRlbmNpZXMuXCIgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBhc3BlY3RzIG9mIEJURiBhcmUgYWN0aXZlIGFuZCBhdmFpbGFibGUuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgdmVyaWZ5aW5nIHRoYXQgdGhlIGV4cGVjdGVkIG1ldGFkYXRhIGlzIHByZXNlbnQgYW5kIGZ1bmN0aW9uaW5nIGFzIGludGVuZGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDkyOCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjA6MjE6MTAuNzM1MDk2MzQ2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NzA0NzE2NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERFQlVHX0lORk9fQlRGXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi9LY29uZmlnLmRlYnVnPTM3OD1jb25maWcgREVCVUdfSU5GT19TUExJVFxcbi0tXFxubGliL0tjb25maWcuZGVidWctMzk3LVxcbmxpYi9LY29uZmlnLmRlYnVnOjM5ODpjb25maWcgREVCVUdfSU5GT19CVEZcXG5saWIvS2NvbmZpZy5kZWJ1Zy0zOTktXFx0Ym9vbCBcXFwiR2VuZXJhdGUgQlRGIHR5cGUgaW5mb3JtYXRpb25cXFwiXFxuLS1cXG5saWIvS2NvbmZpZy5kZWJ1Zz00MTk9Y29uZmlnIFBBSE9MRV9IQVNfTEFOR19FWENMVURFXFxuLS1cXG5saWIvS2NvbmZpZy5kZWJ1Zy00MjctXFxubGliL0tjb25maWcuZGVidWc6NDI4OmNvbmZpZyBERUJVR19JTkZPX0JURl9NT0RVTEVTXFxubGliL0tjb25maWcuZGVidWctNDI5LVxcdGJvb2wgXFxcIkdlbmVyYXRlIEJURiB0eXBlIGluZm9ybWF0aW9uIGZvciBrZXJuZWwgbW9kdWxlc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjA6MjE6MTMuNDA1NTczNTA2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTcyODI0NDIzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWJ1Z2dpbmcgdGhlIERlYnVnZ2luZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIG5pdHR5LWdyaXR0eS4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBkZWJ1Z2dpbmcgY29uZmlndXJhdGlvbiwgc28gSSdtIGhlYWRpbmcgc3RyYWlnaHQgZm9yIGBsaWIvS2NvbmZpZy5kZWJ1Z2AuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIEkgbmVlZCB0byB6ZXJvIGluIG9uIGxpbmUgMzk4LiBUaGF0J3MgdXN1YWxseSB3aGVyZSB0aGUgbWVhdCBvZiBhIHNwZWNpZmljIGRlYnVnZ2luZyBzZXR0aW5nLCBvciBhIHJlbGF0ZWQgZ3JvdXBpbmcsIHRlbmRzIHRvIGJlLiBJJ3ZlIGdvdCBhIGZlZWxpbmcgdGhlIHNvbHV0aW9uIEknbSBzZWVraW5nIGlzIGdvaW5nIHRvIGJlIG5lYXJieS4gTGV0J3Mgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTMzNywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIwOjIxOjE1LjEzMzgyMjA2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4MDE4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Z1wiLFxuICBcIkZpcnN0TGluZVwiOiAzOTUsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzOTU6XFx0XFx0ICB0byBrbm93IGFib3V0IHRoZSAuZHdvIGZpbGVzIGFuZCBpbmNsdWRlIHRoZW0uXFxuIDM5NjpcXHRcXHQgIEluY29tcGF0aWJsZSB3aXRoIG9sZGVyIHZlcnNpb25zIG9mIGNjYWNoZS5cXG4gMzk3OlxcdFxcbiAzOTg6XFx0Y29uZmlnIERFQlVHX0lORk9fQlRGXFxuIDM5OTpcXHRcXHRib29sIFxcXCJHZW5lcmF0ZSBCVEYgdHlwZSBpbmZvcm1hdGlvblxcXCJcXG4gNDAwOlxcdFxcdGRlcGVuZHMgb24gIURFQlVHX0lORk9fU1BMSVQgXFx1MDAyNlxcdTAwMjYgIURFQlVHX0lORk9fUkVEVUNFRFxcbiA0MDE6XFx0XFx0ZGVwZW5kcyBvbiAhR0NDX1BMVUdJTl9SQU5EU1RSVUNUIHx8IENPTVBJTEVfVEVTVFxcbiA0MDI6XFx0XFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxcbiA0MDM6XFx0XFx0ZGVwZW5kcyBvbiBQQUhPTEVfVkVSU0lPTiBcXHUwMDNlPSAxMjJcXG4gNDA0OlxcdFxcdCMgcGFob2xlIHVzZXMgZWxmdXRpbHMsIHdoaWNoIGRvZXMgbm90IGhhdmUgc3VwcG9ydCBmb3IgSGV4YWdvbiByZWxvY2F0aW9uc1xcbiA0MDU6XFx0XFx0ZGVwZW5kcyBvbiAhSEVYQUdPTlxcbiA0MDY6XFx0XFx0aGVscFxcbiA0MDc6XFx0XFx0ICBHZW5lcmF0ZSBkZWR1cGxpY2F0ZWQgQlRGIHR5cGUgaW5mb3JtYXRpb24gZnJvbSBEV0FSRiBkZWJ1ZyBpbmZvLlxcbiA0MDg6XFx0XFx0ICBUdXJuaW5nIHRoaXMgb24gcmVxdWlyZXMgcGFob2xlIHYxLjIyIG9yIGxhdGVyLCB3aGljaCB3aWxsIGNvbnZlcnRcXG4gNDA5OlxcdFxcdCAgRFdBUkYgdHlwZSBpbmZvIGludG8gZXF1aXZhbGVudCBkZWR1cGxpY2F0ZWQgQlRGIHR5cGUgaW5mby5cXG4gNDEwOlxcdFxcbiA0MTE6XFx0Y29uZmlnIFBBSE9MRV9IQVNfQlRGX1RBR1xcbiA0MTI6XFx0XFx0ZGVmX2Jvb2wgUEFIT0xFX1ZFUlNJT04gXFx1MDAzZT0gMTIzXFxuIDQxMzpcXHRcXHRkZXBlbmRzIG9uIENDX0lTX0NMQU5HXFxuIDQxNDpcXHRcXHRoZWxwXFxuIDQxNTpcXHRcXHQgIERlY2lkZSB3aGV0aGVyIHBhaG9sZSBlbWl0cyBidGZfdGFnIGF0dHJpYnV0ZXMgKGJ0Zl90eXBlX3RhZyBhbmRcXG4gNDE2OlxcdFxcdCAgYnRmX2RlY2xfdGFnKSBvciBub3QuIEN1cnJlbnRseSBvbmx5IGNsYW5nIGNvbXBpbGVyIGltcGxlbWVudHNcXG4gNDE3OlxcdFxcdCAgdGhlc2UgYXR0cmlidXRlcywgc28gbWFrZSB0aGUgY29uZmlnIGRlcGVuZCBvbiBDQ19JU19DTEFORy5cXG4gNDE4OlxcdFxcbiA0MTk6XFx0Y29uZmlnIFBBSE9MRV9IQVNfTEFOR19FWENMVURFXFxuIDQyMDpcXHRcXHRkZWZfYm9vbCBQQUhPTEVfVkVSU0lPTiBcXHUwMDNlPSAxMjRcXG4gNDIxOlxcdFxcdGhlbHBcXG4gNDIyOlxcdFxcdCAgU3VwcG9ydCBmb3IgdGhlIC0tbGFuZ19leGNsdWRlIGZsYWcgd2hpY2ggbWFrZXMgcGFob2xlIGV4Y2x1ZGVcXG4gNDIzOlxcdFxcdCAgY29tcGlsYXRpb24gdW5pdHMgZnJvbSB0aGUgc3VwcGxpZWQgbGFuZ3VhZ2UuIFVzZWQgaW4gS2J1aWxkIHRvXFxuIDQyNDpcXHRcXHQgIG9taXQgUnVzdCBDVXMgd2hpY2ggYXJlIG5vdCBzdXBwb3J0ZWQgaW4gdmVyc2lvbiAxLjI0IG9mIHBhaG9sZSxcXG4gNDI1OlxcdFxcdCAgb3RoZXJ3aXNlIGl0IHdvdWxkIGVtaXQgbWFsZm9ybWVkIGtlcm5lbCBhbmQgbW9kdWxlIGJpbmFyaWVzIHdoZW5cXG4gNDI2OlxcdFxcdCAgdXNpbmcgREVCVUdfSU5GT19CVEZfTU9EVUxFUy5cXG4gNDI3OlxcdFxcbiA0Mjg6XFx0Y29uZmlnIERFQlVHX0lORk9fQlRGX01PRFVMRVNcXG4gNDI5OlxcdFxcdGJvb2wgXFxcIkdlbmVyYXRlIEJURiB0eXBlIGluZm9ybWF0aW9uIGZvciBrZXJuZWwgbW9kdWxlc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjA6MjE6MTUuMTM0NTA4MzVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjEyNjA3OTc3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyBCUEYgYW5kIExTTSBDb25maWd1cmF0aW9ucyoqXG5cbkFscmlnaHQsIGJlZm9yZSBkaXZpbmcgdG9vIGRlZXAsIEkgbmVlZCB0byB0YWtlIGEgc3RlcCBiYWNrIGFuZCBleGFtaW5lIHRoZSBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGltbWVkaWF0ZWx5IGNoZWNrIHRoZSByZWxldmFudCBMU00gY29uZmlncywgYW5kIHBvdGVudGlhbGx5IGFueSBCUEYgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBiZSBpbmZsdWVuY2luZyBiZWhhdmlvci4gSSBoYXZlIHRvIG1ha2Ugc3VyZSBJIGRvbid0IG92ZXJsb29rIGFueSBkZXRhaWxzLiBCUEZfTFNNIGlzIHRoZSBmaXJzdCB0aGluZyB0aGF0IGNvbWVzIHRvIG1pbmQuIEdpdmVuIHRoZSBmb2N1cyBvZiB0aGlzIGlzc3VlLCBgQlBGX0xTTWAgZmVlbHMgbGlrZSBhIGxpa2VseSBzdXNwZWN0LCBzbyBJIHNob3VsZCBpbnZlc3RpZ2F0ZSB0aGF0IGZpcnN0LiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGhvdyBpdCdzIHNldCB1cCBhbmQgaWYgdGhlcmUgYXJlIGFueSBjb25mbGljdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMTI0LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDoyMToxNy4yNjA1OTE0OThaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MDU2Mzg5NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9MU01cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTk0PXNvdXJjZSBcXFwia2VybmVsL2JwZi9wcmVsb2FkL0tjb25maWdcXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTk1LVxcbmtlcm5lbC9icGYvS2NvbmZpZzo5Njpjb25maWcgQlBGX0xTTVxcbmtlcm5lbC9icGYvS2NvbmZpZy05Ny1cXHRib29sIFxcXCJFbmFibGUgQlBGIExTTSBJbnN0cnVtZW50YXRpb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIwOjIxOjE5Ljg2NjIzNjk5OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODMxNDI2MTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkV4YW1pbmluZyBLZXJuZWwgQlBGIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMsIEkgbmVlZCB0byBzdGFydCB3aXRoIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRoZSBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlIGlzIHRoZSBvYnZpb3VzIHBsYWNlIHRvIGJlZ2luLCBzbyBsZXQncyBoZWFkIHN0cmFpZ2h0IHRoZXJlLiBTcGVjaWZpY2FsbHksIEknbGwgemVybyBpbiBhcm91bmQgbGluZSA5Ni4gVGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhleSBzdGFydCB0aGUgZGVmaW5pdGlvbnMgb2YgdGhlIGNvcmUgQlBGIGZ1bmN0aW9uYWxpdHksIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLCBzbyBJIGJldCB0aGF0J3MgYSBrZXkgc3BvdCB0byBnZXQgc3RhcnRlZCB3aXRoIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNDE2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjA6MjE6MjEuNjk3NjY2ODZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjUzNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDkwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDkwOlxcdFxcdCAgYWZmZWN0ZWQgaGFyZHdhcmUuXFxuICA5MTpcXHRcXG4gIDkyOlxcdFxcdCAgSWYgeW91IGFyZSB1bnN1cmUgaG93IHRvIGFuc3dlciB0aGlzIHF1ZXN0aW9uLCBhbnN3ZXIgWS5cXG4gIDkzOlxcdFxcbiAgOTQ6XFx0c291cmNlIFxcXCJrZXJuZWwvYnBmL3ByZWxvYWQvS2NvbmZpZ1xcXCJcXG4gIDk1OlxcdFxcbiAgOTY6XFx0Y29uZmlnIEJQRl9MU01cXG4gIDk3OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBCUEYgTFNNIEluc3RydW1lbnRhdGlvblxcXCJcXG4gIDk4OlxcdFxcdGRlcGVuZHMgb24gQlBGX0VWRU5UU1xcbiAgOTk6XFx0XFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxcbiAxMDA6XFx0XFx0ZGVwZW5kcyBvbiBTRUNVUklUWVxcbiAxMDE6XFx0XFx0ZGVwZW5kcyBvbiBCUEZfSklUXFxuIDEwMjpcXHRcXHRoZWxwXFxuIDEwMzpcXHRcXHQgIEVuYWJsZXMgaW5zdHJ1bWVudGF0aW9uIG9mIHRoZSBzZWN1cml0eSBob29rcyB3aXRoIEJQRiBwcm9ncmFtcyBmb3JcXG4gMTA0OlxcdFxcdCAgaW1wbGVtZW50aW5nIGR5bmFtaWMgTUFDIGFuZCBBdWRpdCBQb2xpY2llcy5cXG4gMTA1OlxcdFxcbiAxMDY6XFx0XFx0ICBJZiB5b3UgYXJlIHVuc3VyZSBob3cgdG8gYW5zd2VyIHRoaXMgcXVlc3Rpb24sIGFuc3dlciBOLlxcbiAxMDc6XFx0XFxuIDEwODpcXHRjb25maWcgQlBGX0pJVF9LQVNBTlxcbiAxMDk6XFx0XFx0Ym9vbFxcbiAxMTA6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX0VCUEZfSklUX0tBU0FOXFxuIDExMTpcXHRcXHRkZXBlbmRzIG9uIEtBU0FOX0dFTkVSSUNcXG4gMTEyOlxcdFxcdGRlcGVuZHMgb24gS0FTQU5fVk1BTExPQ1xcbiAxMTM6XFx0XFx0ZGVwZW5kcyBvbiBCUEZfSklUXFxuIDExNDpcXHRcXHRkZWZhdWx0IHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjA6MjE6MjEuNjk3NzMzNTZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzc2NTczNDY4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwgRnVuY3Rpb25hbGl0eSBSZXZpZXcqKlxuXG5Pa2F5LCBsZXQncyBkaXNzZWN0IHRoZXNlIGtlcm5lbCBtb2RpZmljYXRpb25zLiBNeSBpbml0aWFsIGZvY3VzIGlzIHRvIHBpbnBvaW50IHRoZSBuZXdseSBpbnRyb2R1Y2VkIG9yIGFsdGVyZWQgZnVuY3Rpb25zLiBUaGUgbGlzdCBwb2ludHMgbWUgdG93YXJkcyBzZXZlcmFsIGtleSBhcmVhczpcblxuKiAgIFRoZSBgYnBmX2NvcHlfZnJvbV91c2VyXypgIGZhbWlseSB3aXRoaW4gYGtlcm5lbC9icGYvaGVscGVycy5jYC4gV2UndmUgZ290IGBicGZfY29weV9mcm9tX3VzZXJfbW1gLCBgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cmAsIGBicGZfY29weV9mcm9tX3VzZXJfdGFza2AsIGFuZCBgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyYC4gVGhlc2UgYXJlIGNsZWFybHkgcmVsYXRlZCB0byBCUEYgcHJvZ3JhbXMgaW50ZXJhY3Rpbmcgd2l0aCB1c2VyIHNwYWNlIG1lbW9yeSwgcHJvYmFibHkgaW52b2x2aW5nIGRpZmZlcmVudCBtZW1vcnkgc3BhY2VzIGFuZCBzdHJpbmcgb3BlcmF0aW9ucy5cbiogICBJbiBgbW0vdXRpbC5jYCwgYGNvcHlfcmVtb3RlX21tX3N0cmAgYW5kIGBjb3B5X3JlbW90ZV92bV9zdHJgIHBvcCB1cC4gU2VlbXMgbGlrZSB0aGVzZSBoYXZlIHNvbWV0aGluZyB0byBkbyB3aXRoIHJlbW90ZSBtZW1vcnkgY29waWVzLCBzcGVjaWZpY2FsbHkgc3RyaW5ncyBhbmQgdmlydHVhbCBtZW1vcnkuXG4qICAgYF9fY29weV9yZW1vdGVfbW1fc3RyYCBpbiBgbW0vbWVtb3J5LmNgIGlzIGFsc28gdGhlcmUsIHdoaWNoIGlzIGxpa2VseSBhIGxvdy1sZXZlbCBoZWxwZXIgZm9yIHRoZSBhYm92ZSBmdW5jdGlvbnMuXG4qICAgVGhlbiB3ZSBoYXZlIHNvbWUgY3J1Y2lhbCB2ZXJpZmllciB1cGRhdGVzIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgOiBgY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3NgLCBgdHlwZV9pc190cnVzdGVkX29yX251bGxgLCBhbmQgYGNoZWNrX21lbV9hY2Nlc3NgLiBUaGVzZSBhcmUgYWxsIHZlcnkgaW1wb3J0YW50IGZvciBtZW1vcnkgc2FmZXR5IHdpdGhpbiBCUEYuIEl0IHNlZW1zIHRoYXQgdGhleSBoYXZlIGJlZW4gYWRkZWQgdG8gcmVzdHJpY3QgYWNjZXNzIG9mIEJQRiBwcm9ncmFtcyB0byBtZW1vcnkuXG4qICAgQW5kIGZpbmFsbHksIGBmcmVlX2Jwcm1gIGluIGBmcy9leGVjLmNgLiBUaGF0J3MgYW4gaW50ZXJlc3Rpbmcgb25lLCBsaWtlbHkgY2xlYW5pbmcgdXAgdGhlIHByb2Nlc3MgZW52aXJvbm1lbnQsIHBvdGVudGlhbGx5IGFmdGVyIGFuIGV4ZWMgY2FsbC5cblxuSSBhbHNvIG5lZWQgdG8gY2hlY2sgd2hldGhlciBgYnBmX2lzX3RydXN0ZWRfb3JfbnVsbF9idGZfcHRyYCBhbmQgYGJwZl9tYXlfZmF1bHRfb25fZGVyZWZgIGFyZSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucy4gVGhleSBhcmUgZGVjbGFyZWQgaW4gYGluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhgLCBzbyBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBzcGVjaWZpY3MuIE5vdywgd2hlcmUgaXMgYGJwZl9tYXlfZmF1bHRfb25fZGVyZWZgIGNhbGxlZD8gSSdsbCBncmVwIGZvciBpdCB0byBnZXQgdGhlIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyOTI4LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjA6MjE6MjUuNDYzNDczNzA0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTcxNzk3NDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9tYXlfZmF1bHRfb25fZGVyZWZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaD0xMzQyPXN0YXRpYyBpbmxpbmUgYm9vbCBicGZfaXNfdHJ1c3RlZF9vcl9udWxsX2J0Zl9wdHIoZW51bSBicGZfcmVnX3R5cGUgdHlwZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTM0Ni1cXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oOjEzNDc6c3RhdGljIGlubGluZSBib29sIGJwZl9tYXlfZmF1bHRfb25fZGVyZWYoZW51bSBicGZfcmVnX3R5cGUgdHlwZSlcXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTEzNDgte1xcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYz03NzM9aW50IGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy05NzgtXFx0XFx0XFx0aWYgKGJwZl9pc19wdHJfdG9fbWVtX29yX2J0Zl9pZChwdHJfdHlwZSkgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjk3OTpcXHRcXHRcXHQgICAgYnBmX21heV9mYXVsdF9vbl9kZXJlZihwdHJfdHlwZSkgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTk4MC1cXHRcXHRcXHQgICAgdHlwZSA9PSBCUEZfUkVBRCkge1xcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy05ODktXFx0XFx0XFx0fVxcbmtlcm5lbC9icGYvZml4dXBzLmM6OTkwOlxcdFxcdFxcdGlmICh2ZXJpZmllcl9idWdfaWYoYnBmX21heV9mYXVsdF9vbl9kZXJlZihwdHJfdHlwZSksIGVudixcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTk5MS1cXHRcXHRcXHRcXHRcXHQgICAgXFxcImFjY2VzcyB0byBhIGZhdWx0IHByb25lIHBvaW50ZXIgaXMgbm90IHJld3JpdHRlbiBhcyBhIHByb2JlZCBvbmVcXFwiKSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz01MTE5PXN0YXRpYyBib29sIGlzX2xvYWRfYWNxX3Vuc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgcmVnbm8sXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTEzMS1cXHQgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTEzMjpcXHRyZXR1cm4gaW5zbi1cXHUwMDNlaW1tID09IEJQRl9MT0FEX0FDUSBcXHUwMDI2XFx1MDAyNiBicGZfbWF5X2ZhdWx0X29uX2RlcmVmKHJlZy1cXHUwMDNldHlwZSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTUxMzMtfVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTYwNzI9c3RhdGljIGludCBjaGVja19wdHJfdG9fYnRmX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYxMzAtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjYxMzE6XFx0aWYgKGF0eXBlICE9IEJQRl9SRUFEIFxcdTAwMjZcXHUwMDI2IGJwZl9tYXlfZmF1bHRfb25fZGVyZWYocmVnLVxcdTAwM2V0eXBlKSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MTMyLVxcdFxcdHZlcmJvc2UoZW52LCBcXFwib25seSByZWFkIGlzIHN1cHBvcnRlZFxcXFxuXFxcIik7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjE1OS1cXHRcXHQgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjE2MDpcXHRcXHRpZiAodHlwZV9pc19hbGxvYyhyZWctXFx1MDAzZXR5cGUpIFxcdTAwMjZcXHUwMDI2ICFicGZfbWF5X2ZhdWx0X29uX2RlcmVmKHJlZy1cXHUwMDNldHlwZSkgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjE2MS1cXHRcXHQgICAgIXR5cGVfaXNfbm9uX293bmluZ19yZWYocmVnLVxcdTAwM2V0eXBlKSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE4Mjg3PXN0YXRpYyBib29sIHJlZ190eXBlX21pc21hdGNoX29rKGVudW0gYnBmX3JlZ190eXBlIHR5cGUpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgyOTgtXFx0Y2FzZSBQVFJfVE9fTUVNOlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODI5OTpcXHRcXHRyZXR1cm4gIWJwZl9tYXlfZmF1bHRfb25fZGVyZWYodHlwZSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MzAwLVxcdGRlZmF1bHQ6XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTgzMjg9c3RhdGljIGVudW0gYnBmX3JlZ190eXBlIG1lcmdlX3B0cl90eXBlcyhlbnVtIGJwZl9yZWdfdHlwZSB0eXBlX2EsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgzMzMtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE4MzM0OlxcdGlmIChicGZfbWF5X2ZhdWx0X29uX2RlcmVmKHR5cGVfYSkgfHwgYnBmX21heV9mYXVsdF9vbl9kZXJlZih0eXBlX2IpKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODMzNS1cXHRcXHR0eXBlX21lcmdlZCB8PSB0b19tZW0gPyBNRU1fUkRPTkxZIHwgUFRSX1VOVFJVU1RFRCA6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIwOjIxOjI4LjAzNTI3NzE1NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5MDY2NDkyODQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBCUEYgYW5kIE1lbW9yeSBBY2Nlc3MgZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBiYXNlZCBvbiBgYnBmX21heV9mYXVsdF9vbl9kZXJlZmAncyB1c2FnZSBhY3Jvc3MgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgYW5kIGBrZXJuZWwvYnBmL2ZpeHVwcy5jYOKAlHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGBicGZfY29udmVydF9jdHhfYWNjZXNzZXNg4oCUd2UgbmVlZCB0byBwaWNrIG91dCBzb21lIGZvY3VzZWQgc3ltYm9scyBmb3IgdGFyZ2V0ZWQgZnV6emluZy4gSSBuZWVkIHRvIGJlIHByZWNpc2UgaGVyZSwgZm9jdXNpbmcgb24gdGhlIGNoYW5nZXMsIGFuZCBhdm9pZGluZyB0aGUgdWJpcXVpdG91cy5cblxuVGhlIGxpc3QgdGhhdCBzZWVtcyBtb3N0IHJlbGV2YW50IGluY2x1ZGVzOiBgYnBmX2NvcHlfZnJvbV91c2VyX21tYCwgYGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHJgLCBgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tgLCBgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyYCwgYGNvcHlfcmVtb3RlX21tX3N0cmAsIGBjb3B5X3JlbW90ZV92bV9zdHJgLCBgX19jb3B5X3JlbW90ZV9tbV9zdHJgLCBgY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3NgLCBgY2hlY2tfbWVtX2FjY2Vzc2AsIGB0eXBlX2lzX3RydXN0ZWRfb3JfbnVsbGAsIGBicGZfY29udmVydF9jdHhfYWNjZXNzZXNgLCBhbmQgYGZyZWVfYnBybWAuIFRoZXNlIGFsbCBzZWVtIHRvIGJlIGRpcmVjdGx5IHRvdWNoZWQsIG9yIGFkZGVkLCBhbmQgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkgaW4gdGhlIHBhdGNoLlxuXG5Ob3csIGxldCdzIHZlcmlmeSB0aGVzZSBzeW1ib2xzLiBJJ20gY2hlY2tpbmcgdGhlIG5hbWluZyBjb252ZW50aW9ucyB0byBlbnN1cmUgdGhlIHRvb2xzIGFyZSByZWZlcmVuY2luZyB0aGVtIGNvcnJlY3RseS4gRm9yIGluc3RhbmNlLCBgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tgIGlzIGBCUEZfQ0FMTF81KGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrLCAuLi4pYCBpbiBga2VybmVsL2JwZi9oZWxwZXJzLmNgLCBzbyBgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tgIHNob3VsZCBiZSBnb29kLiAgYGJwZl9jb3B5X2Zyb21fdXNlcl9tbWAgYW5kIGBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyYCBhcmUgZGVmaW5lZCB1c2luZyBgX19icGZfa2Z1bmNgLiBgY29weV9yZW1vdGVfbW1fc3RyYCBhbmQgYGNvcHlfcmVtb3RlX3ZtX3N0cmAgYXJlIGluIG1tL3V0aWwuYywgYF9fY29weV9yZW1vdGVfbW1fc3RyYCBpcyBpbiBtbS9tZW1vcnkuYyBhbmQgZmluYWxseSBgZnJlZV9icHJtYCBpcyBpbiBgZnMvZXhlYy5jYC4gSSdtIGFsc28gY29uZmlybWluZyB0aGF0IGBjaGVja19wdHJfdG9fYnRmX2FjY2Vzc2AgYW5kIGB0eXBlX2lzX3RydXN0ZWRfb3JfbnVsbGAgYXJlIHdoZXJlIEkgZXhwZWN0IHRoZW0sIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLCBhbmQgdGhhdCBgY2hlY2tfbWVtX2FjY2Vzc2AgaXMgYWxzbyBpbiBgdmVyaWZpZXIuY2AuXG5cbkknbSBhbHNvIGRvaW5nIGEgcXVpY2sgc2NhbiBvZiBga2VybmVsL2JwZi92ZXJpZmllci5jYCBmb3IgYW55IG90aGVyIG1vZGlmaWVkIGZ1bmN0aW9ucywganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgZW5zdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcsIGNvbmZpcm1pbmcgYHR5cGVfaXNfdHJ1c3RlZF9vcl9udWxsYCwgYGNoZWNrX3B0cl90b19idGZfYWNjZXNzYCwgYW5kIGBjaGVja19tZW1fYWNjZXNzYCBhcmUgdGhlIG9ubHkgcmVsZXZhbnQgZnVuY3Rpb25zLlxuXG5OZXh0LCB0aGUgS2NvbmZpZyBvcHRpb25zLCB3aGljaCBhcmUgZ29pbmcgdG8gYmUga2V5IHRvIHJlcGxpY2F0aW5nIHRoaXMuIEkgc2VlIGBCUEZfU1lTQ0FMTGAsIGBERUJVR19JTkZPX0JURmAsIGFuZCBgQlBGX0xTTWAgYXJlIHRoZSBpbXBvcnRhbnQgb25lcyBoZXJlLlxuXG5UaGUgcGF0Y2gncyByZWFzb25pbmcgaXMgc29saWQ6IG5ldyBzbGVlcGFibGUga2Z1bmNzLCByZWZhY3RvcmluZyBhY3Jvc3MgbW0gYW5kIEJQRiBoZWxwZXJzLCB0aGUgYWRkaXRpb24gb2YgdHJ1c3RlZC1vci1udWxsIHBvaW50ZXIgZGVyZWZlcmVuY2luZyBzdXBwb3J0IGluIHRoZSBCUEYgdmVyaWZpZXIsIGFuZCB0aGUgdXBkYXRlIHRvIGBmcmVlX2Jwcm1gLiBUaGVzZSBtb2RpZmljYXRpb25zIHRvdWNoIG1lbW9yeSBtYW5hZ2VtZW50LCBCUEYgdmVyaWZpY2F0aW9uLCBhbmQgcHJvY2VzcyBleGVjdXRpb24sIGFsbCBvZiB3aGljaCBhcmUgYWNjZXNzaWJsZSB2aWEgc3RhbmRhcmQgc3l6a2FsbGVyIHN5c2NhbGxzLiBUaGlzIG1ha2VzIGl0IGEgZ3JlYXQgY2FuZGlkYXRlIGZvciBmdXp6aW5nLlxuXG5NeSBjb25jbHVzaW9uOiBXb3J0aEZ1enppbmcgPSB0cnVlOyBhbmQgdGhlIGNvbmZpZ3VyYXRpb25zIGFuZCBzeW1ib2xzIGFyZSBzcG90IG9uLiBJJ20gcmVhZHkgdG8gY2FsbCB0aGUgYHNldC1yZXN1bHRzYCB0b29sIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ4MDgsIk91dHB1dFRva2VucyI6MzAxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDoyMTozNy4xMDE3NzQzNThaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzQ1NzU4MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJERUJVR19JTkZPX0JURlwiLFxuICAgIFwiQlBGX0xTTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9jb3B5X2Zyb21fdXNlcl9tbVwiLFxuICAgIFwiYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0clwiLFxuICAgIFwiYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tcIixcbiAgICBcImJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3N0clwiLFxuICAgIFwiY29weV9yZW1vdGVfbW1fc3RyXCIsXG4gICAgXCJjb3B5X3JlbW90ZV92bV9zdHJcIixcbiAgICBcIl9fY29weV9yZW1vdGVfbW1fc3RyXCIsXG4gICAgXCJjaGVja19wdHJfdG9fYnRmX2FjY2Vzc1wiLFxuICAgIFwidHlwZV9pc190cnVzdGVkX29yX251bGxcIixcbiAgICBcImNoZWNrX21lbV9hY2Nlc3NcIixcbiAgICBcImJwZl9jb252ZXJ0X2N0eF9hY2Nlc3Nlc1wiLFxuICAgIFwiZnJlZV9icHJtXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgc2xlZXBhYmxlIEJQRiBrZnVuY3MgKGJwZl9jb3B5X2Zyb21fdXNlcl9tbSBhbmQgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0ciksIHJlZmFjdG9ycyByZW1vdGUgTU0gc3RyaW5nIGNvcHlpbmcgaGVscGVycyBhY3Jvc3MgbW0vIGFuZCBrZXJuZWwvYnBmLywgbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byBhbGxvdyBmYXVsdC1wcm90ZWN0ZWQgbG9hZHMgdGhyb3VnaCB0cnVzdGVkLW9yLW51bGwgcG9pbnRlcnMsIGFuZCBhbHRlcnMgbW0gY2xlYW51cCBpbiBmcmVlX2Jwcm0oKS4gVGhlc2UgY2hhbmdlcyB0b3VjaCBjb3JlIEJQRiBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgZXhlY3V0aW9uIHBhdGhzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cyB2aWEgQlBGIGFuZCBleGVjIHN5c2NhbGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJERUJVR19JTkZPX0JURlwiLFxuICAgIFwiQlBGX0xTTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9jb3B5X2Zyb21fdXNlcl9tbVwiLFxuICAgIFwiYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0clwiLFxuICAgIFwiYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tcIixcbiAgICBcImJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3N0clwiLFxuICAgIFwiY29weV9yZW1vdGVfbW1fc3RyXCIsXG4gICAgXCJjb3B5X3JlbW90ZV92bV9zdHJcIixcbiAgICBcIl9fY29weV9yZW1vdGVfbW1fc3RyXCIsXG4gICAgXCJjaGVja19wdHJfdG9fYnRmX2FjY2Vzc1wiLFxuICAgIFwidHlwZV9pc190cnVzdGVkX29yX251bGxcIixcbiAgICBcImNoZWNrX21lbV9hY2Nlc3NcIixcbiAgICBcImJwZl9jb252ZXJ0X2N0eF9hY2Nlc3Nlc1wiLFxuICAgIFwiZnJlZV9icHJtXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgc2xlZXBhYmxlIEJQRiBrZnVuY3MgKGJwZl9jb3B5X2Zyb21fdXNlcl9tbSBhbmQgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0ciksIHJlZmFjdG9ycyByZW1vdGUgTU0gc3RyaW5nIGNvcHlpbmcgaGVscGVycyBhY3Jvc3MgbW0vIGFuZCBrZXJuZWwvYnBmLywgbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byBhbGxvdyBmYXVsdC1wcm90ZWN0ZWQgbG9hZHMgdGhyb3VnaCB0cnVzdGVkLW9yLW51bGwgcG9pbnRlcnMsIGFuZCBhbHRlcnMgbW0gY2xlYW51cCBpbiBmcmVlX2Jwcm0oKS4gVGhlc2UgY2hhbmdlcyB0b3VjaCBjb3JlIEJQRiBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgZXhlY3V0aW9uIHBhdGhzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cyB2aWEgQlBGIGFuZCBleGVjIHN5c2NhbGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDoyMTozNy4yMzYzNjU2ODVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNjE0NTc1MTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjA6MjE6MzcuMjM3MjYyMjU2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjE2MTM2NzAyOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIEJQRiBrZnVuY3MgZm9yIGNvcHlpbmcgbWVtb3J5IGZyb20gYW4gYXJiaXRyYXJ5IGBzdHJ1Y3QgbW1fc3RydWN0YCAoYGJwZl9jb3B5X2Zyb21fdXNlcl9tbWAgYW5kIGBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyYCksIHJlZmFjdG9ycyBleGlzdGluZyB0YXNrLWJhc2VkIGhlbHBlcnMgdG8gdXNlIHRoZXNlIGZ1bmN0aW9ucywgY2xlYXJzIGBicHJtLVxcdTAwM2VtbWAgYmVmb3JlIGRyb3BwaW5nIHRoZSByZWZlcmVuY2UgaW4gYGZyZWVfYnBybSgpYCwgYW5kIHVwZGF0ZXMgdGhlIEJQRiB2ZXJpZmllciB0byBhbGxvdyBmYXVsdC1wcm90ZWN0ZWQgbG9hZHMgdGhyb3VnaCB0cnVzdGVkLW9yLW51bGwgQlRGIHBvaW50ZXJzIChgYnBmX2lzX3RydXN0ZWRfb3JfbnVsbF9idGZfcHRyYCkuXFxuXFxuS01TQU4gdnMgS0FTQU4gQXBwbGljYWJpbGl0eTpcXG4tIEtNU0FOIGRldGVjdHMgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwL3BhZ2UgbWVtb3J5IGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgZGlzY2xvc3VyZSAoaW5mby1sZWFrcykuXFxuLSBLQVNBTiAvIExPQ0tERVAgZGV0ZWN0IG1lbW9yeSBjb3JydXB0aW9ucywgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgYW5kIGxvY2tpbmcgZXJyb3JzLlxcbi0gVGhlIG5ldyBCUEYgY29weSBrZnVuY3MgcHJvcGVybHkgaGFuZGxlIG1lbW9yeSBpbml0aWFsaXphdGlvbjogYW55IGRlc3RpbmF0aW9uIGJ1ZmZlcnMgYXJlIGVpdGhlciBmdWxseSB3cml0dGVuIG9yIGV4cGxpY2l0bHkgemVyb2VkIHZpYSBgbWVtc2V0KClgIHVwb24gZmFpbHVyZSwgcGFydGlhbCByZWFkcywgb3Igd2hlbiBgQlBGX0ZfUEFEX1pFUk9TYCBpcyByZXF1ZXN0ZWQuXFxuLSBObyB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIHN0YWNrIGFsbG9jYXRpb25zLCBvciBrZXJuZWwtdG8tdXNlciBsZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLlxcbi0gVmVyaWZpZXIgdHlwZSB0cmFja2luZyBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIGNoYW5nZXMgcmVsYXRlIHRvIHBvaW50ZXIgdmFsaWRpdHkgYW5kIGZhdWx0IGhhbmRsaW5nLCBhcmVhcyB3aGVyZSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzIGFyZSBhcHBsaWNhYmxlLCBub3QgS01TQU4uXFxuXFxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZGI3N2FmNjZiM2FhMDdiMTNkYzgzYWFmY2ExYjhiMGEwMjkxYTFmYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMjA6MjA6NTMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9leGVjLmMgYi9mcy9leGVjLmNcbmluZGV4IDc0NWY2ZWI1Mjc5ZTYuLjRkZGQ0MDNmZDkxYzcgMTAwNjQ0XG4tLS0gYS9mcy9leGVjLmNcbisrKyBiL2ZzL2V4ZWMuY1xuQEAgLTE0NTYsOSArMTQ1NiwxMiBAQCB2b2lkIGJwcm1fZHJvcF9sb2FkZXIoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbiBcbiBzdGF0aWMgdm9pZCBmcmVlX2Jwcm0oc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbiB7XG4tXHRpZiAoYnBybS1cdTAwM2VtbSkge1xuK1x0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBicHJtLVx1MDAzZW1tO1xuK1xuK1x0aWYgKG1tKSB7XG4gXHRcdGFjY3RfYXJnX3NpemUoYnBybSwgMCk7XG4tXHRcdG1tcHV0KGJwcm0tXHUwMDNlbW0pO1xuK1x0XHRicHJtLVx1MDAzZW1tID0gTlVMTDtcbitcdFx0bW1wdXQobW0pO1xuIFx0fVxuIFx0aWYgKGJwcm0tXHUwMDNldXNlcl9ucylcbiBcdFx0cHV0X3VzZXJfbnMoYnBybS1cdTAwM2V1c2VyX25zKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuaW5kZXggOTcyN2RmNWFmODNhYi4uNGYwMzJhZDgzYzY3NSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbkBAIC0xMzM5LDYgKzEzMzksMTEgQEAgc3RhdGljIGlubGluZSBib29sIGJwZl9pc19wdHJfdG9fbWVtX29yX2J0Zl9pZChlbnVtIGJwZl9yZWdfdHlwZSB0eXBlKVxuIFx0fVxuIH1cbiBcbitzdGF0aWMgaW5saW5lIGJvb2wgYnBmX2lzX3RydXN0ZWRfb3JfbnVsbF9idGZfcHRyKGVudW0gYnBmX3JlZ190eXBlIHR5cGUpXG4re1xuK1x0cmV0dXJuIHR5cGUgPT0gKFBUUl9UT19CVEZfSUQgfCBQVFJfVFJVU1RFRCB8IFBUUl9NQVlCRV9OVUxMKTtcbit9XG4rXG4gc3RhdGljIGlubGluZSBib29sIGJwZl9tYXlfZmF1bHRfb25fZGVyZWYoZW51bSBicGZfcmVnX3R5cGUgdHlwZSlcbiB7XG4gXHQvKlxuQEAgLTEzNDYsNyArMTM1MSw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBicGZfbWF5X2ZhdWx0X29uX2RlcmVmKGVudW0gYnBmX3JlZ190eXBlIHR5cGUpXG4gXHQgKiBwcm90ZWN0aW9uLCB0aGF0IGlzLCB0aGUgb25lcyBicGZfY29udmVydF9jdHhfYWNjZXNzZXMoKSBoYXMgdG9cbiBcdCAqIHR1cm4gYSBCUEZfTERYIGludG8gYSBCUEZfUFJPQkVfTUVNIG9uZSBmb3IuXG4gXHQgKi9cbi1cdHJldHVybiB0eXBlID09IFBUUl9UT19CVEZfSUQgfHwgKHR5cGVfZmxhZyh0eXBlKSBcdTAwMjYgUFRSX1VOVFJVU1RFRCk7XG4rXHRyZXR1cm4gdHlwZSA9PSBQVFJfVE9fQlRGX0lEIHx8XG4rXHQgICAgICAgKHR5cGVfZmxhZyh0eXBlKSBcdTAwMjYgUFRSX1VOVFJVU1RFRCkgfHxcbitcdCAgICAgICBicGZfaXNfdHJ1c3RlZF9vcl9udWxsX2J0Zl9wdHIodHlwZSk7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBicGZfcHJvZ19oYXNfYXJlbmFfY3R4X2FyZyhjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oXG5pbmRleCBkZDA5YzQzOGZhMjNlLi5kNWJkZTFmNzFhOTdlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tLmhcbkBAIC0zMzI2LDYgKzMzMjYsOCBAQCBleHRlcm4gaW50IGFjY2Vzc19yZW1vdGVfdm0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0dm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKTtcbiBcbiAjaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG4rZXh0ZXJuIGludCBjb3B5X3JlbW90ZV9tbV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbitcdFx0XHQgICAgICB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpO1xuIGV4dGVybiBpbnQgY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdFx0ICAgICAgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKTtcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2hlbHBlcnMuYyBiL2tlcm5lbC9icGYvaGVscGVycy5jXG5pbmRleCBiM2NjNWM4ZmM4NzU2Li5kM2M1NjQ0MzdhZDA2IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9oZWxwZXJzLmNcbisrKyBiL2tlcm5lbC9icGYvaGVscGVycy5jXG5AQCAtMzIsNiArMzIsMTAgQEBcbiBcbiAjaW5jbHVkZSBcIi4uLy4uL2xpYi9rc3RydG94LmhcIlxuIFxuK19fYnBmX2tmdW5jIGludCBicGZfY29weV9mcm9tX3VzZXJfbW0odm9pZCAqZHN0LCB1MzIgZHN0X19zeixcbitcdFx0XHRcdCAgICAgIGNvbnN0IHZvaWQgX191c2VyICp1bnNhZmVfcHRyX19pZ24sXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdTY0IGZsYWdzKTtcbitcbiAvKiBJZiBrZXJuZWwgc3Vic3lzdGVtIGlzIGFsbG93aW5nIGVCUEYgcHJvZ3JhbXMgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uLFxuICAqIGluc2lkZSBpdHMgb3duIHZlcmlmaWVyX29wcy1cdTAwM2VnZXRfZnVuY19wcm90bygpIGNhbGxiYWNrIGl0IHNob3VsZCByZXR1cm5cbiAgKiBicGZfbWFwX2xvb2t1cF9lbGVtX3Byb3RvLCBzbyB0aGF0IHZlcmlmaWVyIGNhbiBwcm9wZXJseSBjaGVjayB0aGUgYXJndW1lbnRzXG5AQCAtNjgyLDIyICs2ODYsMTUgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9jb3B5X2Zyb21fdXNlcl9wcm90byA9IHtcbiBCUEZfQ0FMTF81KGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrLCB2b2lkICosIGRzdCwgdTMyLCBzaXplLFxuIFx0ICAgY29uc3Qgdm9pZCBfX3VzZXIgKiwgdXNlcl9wdHIsIHN0cnVjdCB0YXNrX3N0cnVjdCAqLCB0c2ssIHU2NCwgZmxhZ3MpXG4ge1xuK1x0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4gXHRpbnQgcmV0O1xuIFxuLVx0LyogZmxhZ3MgaXMgbm90IHVzZWQgeWV0ICovXG4tXHRpZiAodW5saWtlbHkoZmxhZ3MpKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cbi1cdGlmICh1bmxpa2VseSghc2l6ZSkpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0cmV0ID0gYWNjZXNzX3Byb2Nlc3Nfdm0odHNrLCAodW5zaWduZWQgbG9uZyl1c2VyX3B0ciwgZHN0LCBzaXplLCAwKTtcbi1cdGlmIChyZXQgPT0gc2l6ZSlcbi1cdFx0cmV0dXJuIDA7XG4rXHRtbSA9IGdldF90YXNrX21tKHRzayk7XG4rXHRyZXQgPSBicGZfY29weV9mcm9tX3VzZXJfbW0oZHN0LCBzaXplLCB1c2VyX3B0ciwgbW0sIGZsYWdzKTtcbitcdGlmIChtbSlcbitcdFx0bW1wdXQobW0pO1xuIFxuLVx0bWVtc2V0KGRzdCwgMCwgc2l6ZSk7XG4tXHQvKiBSZXR1cm4gLUVGQVVMVCBmb3IgcGFydGlhbCByZWFkICovXG4tXHRyZXR1cm4gcmV0IFx1MDAzYyAwID8gcmV0IDogLUVGQVVMVDtcbitcdHJldHVybiByZXQ7XG4gfVxuIFxuIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfY29weV9mcm9tX3VzZXJfdGFza19wcm90byA9IHtcbkBAIC0zNjU4LDYgKzM2NTUsMTAwIEBAIF9fYnBmX2tmdW5jIGludCBicGZfY29weV9mcm9tX3VzZXJfc3RyKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osIGNvbnN0IHZvaWQgX191c2VyXG4gXHRyZXR1cm4gcmV0ICsgMTtcbiB9XG4gXG4rLyoqXG4rICogYnBmX2NvcHlfZnJvbV91c2VyX21tKCkgLSBDb3B5IGRhdGEgZnJvbSBhbiBhZGRyZXNzIHNwYWNlXG4rICogQGRzdDogICAgICAgICAgICAgRGVzdGluYXRpb24gYWRkcmVzcywgaW4ga2VybmVsIHNwYWNlXG4rICogQGRzdF9fc3o6ICAgICAgICAgTnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHlcbisgKiBAdW5zYWZlX3B0cl9faWduOiBTb3VyY2UgYWRkcmVzcyBpbiB0aGUgYWRkcmVzcyBzcGFjZVxuKyAqIEBtbTogICAgICAgICAgICAgIEFkZHJlc3Mgc3BhY2UgdG8gY29weSBmcm9tXG4rICogQGZsYWdzOiAgICAgICAgICAgUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2U7IG11c3QgYmUgemVyb1xuKyAqXG4rICogQ29waWVzIGRhdGEgZnJvbSB0aGUgdXNlciBhZGRyZXNzIHNwYWNlIGFzc29jaWF0ZWQgd2l0aCBAbW0uIFRoZSBkZXN0aW5hdGlvblxuKyAqIGlzIHplcm9lZCBpZiBhbiBhdHRlbXB0ZWQgY29weSBjYW5ub3QgYmUgY29tcGxldGVkIGluIGZ1bGwuIFVuc3VwcG9ydGVkXG4rICogZmxhZ3MgcmV0dXJuIC1FSU5WQUwgd2l0aG91dCBtb2RpZnlpbmcgQGRzdC5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRUlOVkFMIGlmIEBmbGFncyBpcyBub24temVybywgb3IgLUVGQVVMVCBpZiB0aGUgY29weVxuKyAqIGZhaWxzIG9yIGlzIHBhcnRpYWwuXG4rICovXG4rX19icGZfa2Z1bmMgaW50IGJwZl9jb3B5X2Zyb21fdXNlcl9tbSh2b2lkICpkc3QsIHUzMiBkc3RfX3N6LFxuK1x0XHRcdFx0ICAgICAgY29uc3Qgdm9pZCBfX3VzZXIgKnVuc2FmZV9wdHJfX2lnbixcbitcdFx0XHRcdCAgICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1NjQgZmxhZ3MpXG4re1xuK1x0aW50IHJldDtcbitcbitcdGlmICh1bmxpa2VseShmbGFncykpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0aWYgKHVubGlrZWx5KCFkc3RfX3N6KSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAodW5saWtlbHkoIW1tKSkge1xuK1x0XHRtZW1zZXQoZHN0LCAwLCBkc3RfX3N6KTtcbitcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXHR9XG4rXG4rXHRyZXQgPSBhY2Nlc3NfcmVtb3RlX3ZtKG1tLCAodW5zaWduZWQgbG9uZyl1bnNhZmVfcHRyX19pZ24sXG4rXHRcdFx0ICAgICAgIGRzdCwgZHN0X19zeiwgMCk7XG4rXHRpZiAocmV0ID09IGRzdF9fc3opXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0bWVtc2V0KGRzdCwgMCwgZHN0X19zeik7XG4rXHRyZXR1cm4gcmV0IFx1MDAzYyAwID8gcmV0IDogLUVGQVVMVDtcbit9XG4rXG4rLyoqXG4rICogYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cigpIC0gQ29weSBhIHN0cmluZyBmcm9tIGFuIGFkZHJlc3Mgc3BhY2VcbisgKiBAZHN0OiAgICAgICAgICAgICBEZXN0aW5hdGlvbiBhZGRyZXNzLCBpbiBrZXJuZWwgc3BhY2UuIFRoaXMgYnVmZmVyIG11c3QgYmVcbisgKiAgICAgICAgICAgICAgICAgICBhdCBsZWFzdCBAZHN0X19zeiBieXRlcyBsb25nXG4rICogQGRzdF9fc3o6ICAgICAgICAgTWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gY29weSwgaW5jbHVkaW5nIHRoZSB0cmFpbGluZyBOVUxcbisgKiBAdW5zYWZlX3B0cl9faWduOiBTb3VyY2UgYWRkcmVzcyBpbiB0aGUgYWRkcmVzcyBzcGFjZVxuKyAqIEBtbTogICAgICAgICAgICAgIEFkZHJlc3Mgc3BhY2UgdG8gY29weSBmcm9tXG4rICogQGZsYWdzOiAgICAgICAgICAgVGhlIG9ubHkgc3VwcG9ydGVkIGZsYWcgaXMgQlBGX0ZfUEFEX1pFUk9TXG4rICpcbisgKiBDb3BpZXMgYSBOVUwtdGVybWluYXRlZCBzdHJpbmcgZnJvbSB0aGUgdXNlciBhZGRyZXNzIHNwYWNlIGFzc29jaWF0ZWQgd2l0aFxuKyAqIEBtbS4gSWYgdGhlIHN0cmluZyBpcyB0b28gbG9uZywgQGRzdCBpcyBzdGlsbCBOVUwtdGVybWluYXRlZCB1bmxlc3MgQGRzdF9fc3pcbisgKiBpcyB6ZXJvLlxuKyAqXG4rICogSWYgdGhlIGZsYWdzIGFyZSB2YWxpZCBhbmQgQlBGX0ZfUEFEX1pFUk9TIGlzIHNldCwgdGhlIHVudXNlZCBwb3J0aW9uIG9mXG4rICogQGRzdCBpcyBjbGVhcmVkIG9uIHN1Y2Nlc3MgYW5kIGFsbCBvZiBAZHN0IGlzIGNsZWFyZWQgb24gYSBjb3B5IGZhaWx1cmUuXG4rICogVW5zdXBwb3J0ZWQgZmxhZ3MgcmV0dXJuIC1FSU5WQUwgd2l0aG91dCBtb2RpZnlpbmcgQGRzdC5cbisgKlxuKyAqIFJldHVybjogVGhlIG51bWJlciBvZiBjb3BpZWQgYnl0ZXMgaW5jbHVkaW5nIHRoZSBOVUwgdGVybWluYXRvciBvbiBzdWNjZXNzLFxuKyAqIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxuKyAqL1xuK19fYnBmX2tmdW5jIGludCBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osXG4rXHRcdFx0XHRcdCAgY29uc3Qgdm9pZCBfX3VzZXIgKnVuc2FmZV9wdHJfX2lnbixcbitcdFx0XHRcdFx0ICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdTY0IGZsYWdzKVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRpZiAodW5saWtlbHkoZmxhZ3MgXHUwMDI2IH5CUEZfRl9QQURfWkVST1MpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGlmICh1bmxpa2VseShkc3RfX3N6ID09IDApKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmICh1bmxpa2VseSghbW0pKSB7XG4rXHRcdGlmIChmbGFncyBcdTAwMjYgQlBGX0ZfUEFEX1pFUk9TKVxuK1x0XHRcdG1lbXNldChkc3QsIDAsIGRzdF9fc3opO1xuK1x0XHRlbHNlXG4rXHRcdFx0KihjaGFyICopZHN0ID0gJ1xcMCc7XG4rXHRcdHJldHVybiAtRUZBVUxUO1xuK1x0fVxuK1xuK1x0cmV0ID0gY29weV9yZW1vdGVfbW1fc3RyKG1tLCAodW5zaWduZWQgbG9uZyl1bnNhZmVfcHRyX19pZ24sIGRzdCwgZHN0X19zeiwgMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4rXHRcdGlmIChmbGFncyBcdTAwMjYgQlBGX0ZfUEFEX1pFUk9TKVxuK1x0XHRcdG1lbXNldChkc3QsIDAsIGRzdF9fc3opO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0aWYgKGZsYWdzIFx1MDAyNiBCUEZfRl9QQURfWkVST1MpXG4rXHRcdG1lbXNldChkc3QgKyByZXQsIDAsIGRzdF9fc3ogLSByZXQpO1xuK1xuK1x0cmV0dXJuIHJldCArIDE7XG4rfVxuK1xuIC8qKlxuICAqIGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3N0cigpIC0gQ29weSBhIHN0cmluZyBmcm9tIGFuIHRhc2sncyBhZGRyZXNzIHNwYWNlXG4gICogQGRzdDogICAgICAgICAgICAgRGVzdGluYXRpb24gYWRkcmVzcywgaW4ga2VybmVsIHNwYWNlLiAgVGhpcyBidWZmZXIgbXVzdCBiZVxuQEAgLTM2ODEsMjUgKzM3NzIsMTYgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3N0cih2b2lkICpkc3QsIHUzMiBkc3RfX3N6LFxuIFx0XHRcdFx0XHQgICAgY29uc3Qgdm9pZCBfX3VzZXIgKnVuc2FmZV9wdHJfX2lnbixcbiBcdFx0XHRcdFx0ICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1NjQgZmxhZ3MpXG4ge1xuK1x0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4gXHRpbnQgcmV0O1xuIFxuLVx0aWYgKHVubGlrZWx5KGZsYWdzIFx1MDAyNiB+QlBGX0ZfUEFEX1pFUk9TKSlcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXG4tXHRpZiAodW5saWtlbHkoZHN0X19zeiA9PSAwKSlcbi1cdFx0cmV0dXJuIDA7XG4rXHRtbSA9IGdldF90YXNrX21tKHRzayk7XG4rXHRyZXQgPSBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKGRzdCwgZHN0X19zeiwgdW5zYWZlX3B0cl9faWduLFxuK1x0XHRcdFx0XHRtbSwgZmxhZ3MpO1xuK1x0aWYgKG1tKVxuK1x0XHRtbXB1dChtbSk7XG4gXG4tXHRyZXQgPSBjb3B5X3JlbW90ZV92bV9zdHIodHNrLCAodW5zaWduZWQgbG9uZyl1bnNhZmVfcHRyX19pZ24sIGRzdCwgZHN0X19zeiwgMCk7XG4tXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tXHRcdGlmIChmbGFncyBcdTAwMjYgQlBGX0ZfUEFEX1pFUk9TKVxuLVx0XHRcdG1lbXNldChkc3QsIDAsIGRzdF9fc3opO1xuLVx0XHRyZXR1cm4gcmV0O1xuLVx0fVxuLVxuLVx0aWYgKGZsYWdzIFx1MDAyNiBCUEZfRl9QQURfWkVST1MpXG4tXHRcdG1lbXNldChkc3QgKyByZXQsIDAsIGRzdF9fc3ogLSByZXQpO1xuLVxuLVx0cmV0dXJuIHJldCArIDE7XG4rXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiAvKiBLZWVwIHVuc2lnbmVkIGxvbmcgaW4gcHJvdG90eXBlIHNvIHRoYXQga2Z1bmMgaXMgdXNhYmxlIHdoZW4gZW1pdHRlZCB0b1xuQEAgLTQ5MjQsNiArNTAwNiw4IEBAIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfaXRlcl9iaXRzX25ldywgS0ZfSVRFUl9ORVcpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX2JpdHNfbmV4dCwgS0ZfSVRFUl9ORVhUIHwgS0ZfUkVUX05VTEwpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX2JpdHNfZGVzdHJveSwgS0ZfSVRFUl9ERVNUUk9ZKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfY29weV9mcm9tX3VzZXJfc3RyLCBLRl9TTEVFUEFCTEUpXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jb3B5X2Zyb21fdXNlcl9tbSwgS0ZfU0xFRVBBQkxFKVxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyLCBLRl9TTEVFUEFCTEUpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3N0ciwgS0ZfU0xFRVBBQkxFKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfZ2V0X2ttZW1fY2FjaGUpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX2ttZW1fY2FjaGVfbmV3LCBLRl9JVEVSX05FVyB8IEtGX1NMRUVQQUJMRSlcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IDllNzk3NTBlMjQ4MDguLjY3OTlkOWUwODBmYzUgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTYwMDQsNiArNjAwNCwxMCBAQCBCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTChzdHJ1Y3QgZGVudHJ5KSB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmRfaW5vZGU7XG4gfTtcbiBcbitCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTChzdHJ1Y3QgbGludXhfYmlucHJtKSB7XG4rXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcbit9O1xuK1xuIEJURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMKHN0cnVjdCBzb2NrZXQpIHtcbiBcdHN0cnVjdCBzb2NrICpzaztcbiB9O1xuQEAgLTYwNTgsNiArNjA2Miw3IEBAIHN0YXRpYyBib29sIHR5cGVfaXNfdHJ1c3RlZF9vcl9udWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4ge1xuIFx0QlRGX1RZUEVfRU1JVChCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTChzdHJ1Y3Qgc29ja2V0KSk7XG4gXHRCVEZfVFlQRV9FTUlUKEJURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMKHN0cnVjdCBkZW50cnkpKTtcbitcdEJURl9UWVBFX0VNSVQoQlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IGxpbnV4X2JpbnBybSkpO1xuIFx0QlRGX1RZUEVfRU1JVChCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QpKTtcbiBcbiBcdHJldHVybiBidGZfbmVzdGVkX3R5cGVfaXNfdHJ1c3RlZChcdTAwMjZlbnYtXHUwMDNlbG9nLCByZWcsIGZpZWxkX25hbWUsIGJ0Zl9pZCxcbkBAIC02MTY4LDYgKzYxNzMsMTUgQEAgc3RhdGljIGludCBjaGVja19wdHJfdG9fYnRmX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0aWYgKHJldCAhPSBQVFJfVE9fQlRGX0lEKSB7XG4gXHRcdC8qIGp1c3QgbWFyazsgKi9cbiBcbitcdH0gZWxzZSBpZiAoYnBmX2lzX3RydXN0ZWRfb3JfbnVsbF9idGZfcHRyKHJlZy1cdTAwM2V0eXBlKSkge1xuK1x0XHQvKlxuK1x0XHQgKiBBbiB1bmNoZWNrZWQgbG9hZCB0aHJvdWdoIGEgdHJ1c3RlZC1vci1OVUxMIHBvaW50ZXIgaXNcbitcdFx0ICogZmF1bHQtcHJvdGVjdGVkLiBBbnkgcG9pbnRlciBkZXJpdmVkIGZyb20gdGhhdCBsb2FkIG11c3QgYmVcbitcdFx0ICogdW50cnVzdGVkLCBhcyBhIGZhdWx0IHByb2R1Y2VzIGEgTlVMTCB2YWx1ZS5cbitcdFx0ICovXG4rXHRcdGNsZWFyX3RydXN0ZWRfZmxhZ3MoXHUwMDI2ZmxhZyk7XG4rXHRcdGZsYWcgfD0gUFRSX1VOVFJVU1RFRDtcbitcbiBcdH0gZWxzZSBpZiAodHlwZV9mbGFnKHJlZy1cdTAwM2V0eXBlKSBcdTAwMjYgUFRSX1VOVFJVU1RFRCkge1xuIFx0XHQvKiBJZiB0aGlzIGlzIGFuIHVudHJ1c3RlZCBwb2ludGVyLCBhbGwgcG9pbnRlcnMgZm9ybWVkIGJ5IHdhbGtpbmcgaXRcbiBcdFx0ICogYWxzbyBpbmhlcml0IHRoZSB1bnRydXN0ZWQgZmxhZy5cbkBAIC02NjQ0LDcgKzY2NTgsOCBAQCBzdGF0aWMgaW50IGNoZWNrX21lbV9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LCBzdHJ1Y3QgYlxuIFx0XHRpZiAoIWVyciBcdTAwMjZcdTAwMjYgdCA9PSBCUEZfUkVBRCBcdTAwMjZcdTAwMjYgdmFsdWVfcmVnbm8gXHUwMDNlPSAwKVxuIFx0XHRcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCB2YWx1ZV9yZWdubyk7XG4gXHR9IGVsc2UgaWYgKGJhc2VfdHlwZShyZWctXHUwMDNldHlwZSkgPT0gUFRSX1RPX0JURl9JRCBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIXR5cGVfbWF5X2JlX251bGwocmVnLVx1MDAzZXR5cGUpKSB7XG4rXHRcdCAgICghdHlwZV9tYXlfYmVfbnVsbChyZWctXHUwMDNldHlwZSkgfHxcbitcdFx0ICAgICh0ID09IEJQRl9SRUFEIFx1MDAyNlx1MDAyNiBicGZfaXNfdHJ1c3RlZF9vcl9udWxsX2J0Zl9wdHIocmVnLVx1MDAzZXR5cGUpKSkpIHtcbiBcdFx0ZXJyID0gY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3MoZW52LCByZWdzLCByZWcsIGFyZ25vLCBvZmYsIHNpemUsIHQsXG4gXHRcdFx0XHRcdCAgICAgIHZhbHVlX3JlZ25vKTtcbiBcdH0gZWxzZSBpZiAocmVnLVx1MDAzZXR5cGUgPT0gQ09OU1RfUFRSX1RPX01BUCkge1xuZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oXG5pbmRleCAzOGIxMTY1MjEyYzk0Li44MjY0YTM0NmQxOGFmIDEwMDY0NFxuLS0tIGEvbW0vaW50ZXJuYWwuaFxuKysrIGIvbW0vaW50ZXJuYWwuaFxuQEAgLTI1LDYgKzI1LDExIEBAXG4gc3RydWN0IGZvbGlvX2JhdGNoO1xuIHN0cnVjdCBoc3RhdGU7XG4gXG4rI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxuK2ludCBfX2NvcHlfcmVtb3RlX21tX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuK1x0XHRcdCB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpO1xuKyNlbmRpZlxuK1xuIHN0cnVjdCBodWdlX2Jvb3RtZW1fcGFnZSB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4gXHRzdHJ1Y3QgaHN0YXRlICpoc3RhdGU7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xuaW5kZXggOGIwYzJjNzM1ZDNkZS4uZmUyZjVlOTg4ZmI5MCAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4rKysgYi9tbS9tZW1vcnkuY1xuQEAgLTczMzEsOCArNzMzMSw4IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGFjY2Vzc19wcm9jZXNzX3ZtKTtcbiAgKiBDb3B5IGEgc3RyaW5nIGZyb20gYW5vdGhlciBwcm9jZXNzJ3MgYWRkcmVzcyBzcGFjZSBhcyBnaXZlbiBpbiBtbS5cbiAgKiBJZiB0aGVyZSBpcyBhbnkgZXJyb3IgcmV0dXJuIC1FRkFVTFQuXG4gICovXG4tc3RhdGljIGludCBfX2NvcHlfcmVtb3RlX3ZtX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLVx0XHRcdFx0dm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKVxuK2ludCBfX2NvcHlfcmVtb3RlX21tX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuK1x0XHRcdCB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXG4ge1xuIFx0dm9pZCAqb2xkX2J1ZiA9IGJ1ZjtcbiBcdGludCBlcnIgPSAwO1xuQEAgLTc0MDcsNDMgKzc0MDcsNiBAQCBzdGF0aWMgaW50IF9fY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdHJldHVybiBlcnI7XG4gXHRyZXR1cm4gYnVmIC0gb2xkX2J1ZjtcbiB9XG4tXG4tLyoqXG4tICogY29weV9yZW1vdGVfdm1fc3RyIC0gY29weSBhIHN0cmluZyBmcm9tIGFub3RoZXIgcHJvY2VzcydzIGFkZHJlc3Mgc3BhY2UuXG4tICogQHRzazpcdHRoZSB0YXNrIG9mIHRoZSB0YXJnZXQgYWRkcmVzcyBzcGFjZVxuLSAqIEBhZGRyOlx0c3RhcnQgYWRkcmVzcyB0byByZWFkIGZyb21cbi0gKiBAYnVmOlx0ZGVzdGluYXRpb24gYnVmZmVyXG4tICogQGxlbjpcdG51bWJlciBvZiBieXRlcyB0byBjb3B5XG4tICogQGd1cF9mbGFnczpcdGZsYWdzIG1vZGlmeWluZyBsb29rdXAgYmVoYXZpb3VyXG4tICpcbi0gKiBUaGUgY2FsbGVyIG11c3QgaG9sZCBhIHJlZmVyZW5jZSBvbiBAbW0uXG4tICpcbi0gKiBSZXR1cm46IG51bWJlciBvZiBieXRlcyBjb3BpZWQgZnJvbSBAYWRkciAoc291cmNlKSB0byBAYnVmIChkZXN0aW5hdGlvbik7XG4tICogbm90IGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMLiBBbHdheXMgZ3VhcmFudGVlZCB0byBsZWF2ZSBOVUwtdGVybWluYXRlZFxuLSAqIGJ1ZmZlci4gT24gYW55IGVycm9yLCByZXR1cm4gLUVGQVVMVC5cbi0gKi9cbi1pbnQgY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tXHRcdCAgICAgICB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXG4te1xuLVx0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4tXHRpbnQgcmV0O1xuLVxuLVx0aWYgKHVubGlrZWx5KGxlbiA9PSAwKSlcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRtbSA9IGdldF90YXNrX21tKHRzayk7XG4tXHRpZiAoIW1tKSB7XG4tXHRcdCooY2hhciAqKWJ1ZiA9ICdcXDAnO1xuLVx0XHRyZXR1cm4gLUVGQVVMVDtcbi1cdH1cbi1cbi1cdHJldCA9IF9fY29weV9yZW1vdGVfdm1fc3RyKG1tLCBhZGRyLCBidWYsIGxlbiwgZ3VwX2ZsYWdzKTtcbi1cbi1cdG1tcHV0KG1tKTtcbi1cbi1cdHJldHVybiByZXQ7XG4tfVxuLUVYUE9SVF9TWU1CT0xfR1BMKGNvcHlfcmVtb3RlX3ZtX3N0cik7XG4gI2VuZGlmIC8qIENPTkZJR19CUEZfU1lTQ0FMTCAqL1xuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvbW0vbm9tbXUuYyBiL21tL25vbW11LmNcbmluZGV4IDQ5OGUwMWVlNDBiMDUuLjk4NTk2ZTYwMzExZjMgMTAwNjQ0XG4tLS0gYS9tbS9ub21tdS5jXG4rKysgYi9tbS9ub21tdS5jXG5AQCAtMTc0Niw4ICsxNzQ2LDggQEAgRVhQT1JUX1NZTUJPTF9HUEwoYWNjZXNzX3Byb2Nlc3Nfdm0pO1xuICAqIENvcHkgYSBzdHJpbmcgZnJvbSBhbm90aGVyIHByb2Nlc3MncyBhZGRyZXNzIHNwYWNlIGFzIGdpdmVuIGluIG1tLlxuICAqIElmIHRoZXJlIGlzIGFueSBlcnJvciByZXR1cm4gLUVGQVVMVC5cbiAgKi9cbi1zdGF0aWMgaW50IF9fY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tXHRcdFx0XHR2b2lkICpidWYsIGludCBsZW4pXG4raW50IF9fY29weV9yZW1vdGVfbW1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4rXHRcdFx0IHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGFkZHJfZW5kO1xuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG5AQCAtMTc4MSw0MyArMTc4MSw2IEBAIHN0YXRpYyBpbnQgX19jb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4tXG4tLyoqXG4tICogY29weV9yZW1vdGVfdm1fc3RyIC0gY29weSBhIHN0cmluZyBmcm9tIGFub3RoZXIgcHJvY2VzcydzIGFkZHJlc3Mgc3BhY2UuXG4tICogQHRzazpcdHRoZSB0YXNrIG9mIHRoZSB0YXJnZXQgYWRkcmVzcyBzcGFjZVxuLSAqIEBhZGRyOlx0c3RhcnQgYWRkcmVzcyB0byByZWFkIGZyb21cbi0gKiBAYnVmOlx0ZGVzdGluYXRpb24gYnVmZmVyXG4tICogQGxlbjpcdG51bWJlciBvZiBieXRlcyB0byBjb3B5XG4tICogQGd1cF9mbGFnczpcdGZsYWdzIG1vZGlmeWluZyBsb29rdXAgYmVoYXZpb3VyICh1bnVzZWQpXG4tICpcbi0gKiBUaGUgY2FsbGVyIG11c3QgaG9sZCBhIHJlZmVyZW5jZSBvbiBAbW0uXG4tICpcbi0gKiBSZXR1cm46IG51bWJlciBvZiBieXRlcyBjb3BpZWQgZnJvbSBAYWRkciAoc291cmNlKSB0byBAYnVmIChkZXN0aW5hdGlvbik7XG4tICogbm90IGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMLiBBbHdheXMgZ3VhcmFudGVlZCB0byBsZWF2ZSBOVUwtdGVybWluYXRlZFxuLSAqIGJ1ZmZlci4gT24gYW55IGVycm9yLCByZXR1cm4gLUVGQVVMVC5cbi0gKi9cbi1pbnQgY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tXHRcdCAgICAgICB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXG4te1xuLVx0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4tXHRpbnQgcmV0O1xuLVxuLVx0aWYgKHVubGlrZWx5KGxlbiA9PSAwKSlcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRtbSA9IGdldF90YXNrX21tKHRzayk7XG4tXHRpZiAoIW1tKSB7XG4tXHRcdCooY2hhciAqKWJ1ZiA9ICdcXDAnO1xuLVx0XHRyZXR1cm4gLUVGQVVMVDtcbi1cdH1cbi1cbi1cdHJldCA9IF9fY29weV9yZW1vdGVfdm1fc3RyKG1tLCBhZGRyLCBidWYsIGxlbik7XG4tXG4tXHRtbXB1dChtbSk7XG4tXG4tXHRyZXR1cm4gcmV0O1xuLX1cbi1FWFBPUlRfU1lNQk9MX0dQTChjb3B5X3JlbW90ZV92bV9zdHIpO1xuICNlbmRpZiAvKiBDT05GSUdfQlBGX1NZU0NBTEwgKi9cbiBcbiAvKipcbmRpZmYgLS1naXQgYS9tbS91dGlsLmMgYi9tbS91dGlsLmNcbmluZGV4IGJmMDUxM2QxZDNkMDguLjJlY2EyN2IwMjc5MWYgMTAwNjQ0XG4tLS0gYS9tbS91dGlsLmNcbisrKyBiL21tL3V0aWwuY1xuQEAgLTEwNjEsNiArMTA2MSw2OCBAQCBpbnQgZ2V0X2NtZGxpbmUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBjaGFyICpidWZmZXIsIGludCBidWZsZW4pXG4gXHRyZXR1cm4gcmVzO1xuIH1cbiBcbisjaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG4rLyoqXG4rICogY29weV9yZW1vdGVfbW1fc3RyIC0gY29weSBhIHN0cmluZyBmcm9tIGEgcmVtb3RlIGFkZHJlc3Mgc3BhY2UuXG4rICogQG1tOiAgICAgICAgIHRoZSByZW1vdGUgYWRkcmVzcyBzcGFjZVxuKyAqIEBhZGRyOiAgICAgICBzdGFydCBhZGRyZXNzIHRvIHJlYWQgZnJvbVxuKyAqIEBidWY6ICAgICAgICBkZXN0aW5hdGlvbiBidWZmZXJcbisgKiBAbGVuOiAgICAgICAgbnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHlcbisgKiBAZ3VwX2ZsYWdzOiAgZmxhZ3MgbW9kaWZ5aW5nIGxvb2t1cCBiZWhhdmlvdXJcbisgKlxuKyAqIFRoZSBjYWxsZXIgbXVzdCBob2xkIGEgcmVmZXJlbmNlIG9uIEBtbS5cbisgKlxuKyAqIFJldHVybjogbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCBmcm9tIEBhZGRyIChzb3VyY2UpIHRvIEBidWYgKGRlc3RpbmF0aW9uKSxcbisgKiBub3QgaW5jbHVkaW5nIHRoZSB0cmFpbGluZyBOVUwuIElmIEBsZW4gaXMgemVybywgcmV0dXJuIDAgd2l0aG91dCBhY2Nlc3NpbmdcbisgKiBAYnVmLiBPdGhlcndpc2UsIEBidWYgaXMgYWx3YXlzIE5VTC10ZXJtaW5hdGVkLiBPbiBhbnkgZXJyb3IsIHJldHVyblxuKyAqIC1FRkFVTFQuXG4rICovXG4raW50IGNvcHlfcmVtb3RlX21tX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuK1x0XHQgICAgICAgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKVxuK3tcbitcdGlmICh1bmxpa2VseShsZW4gPT0gMCkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIF9fY29weV9yZW1vdGVfbW1fc3RyKG1tLCBhZGRyLCBidWYsIGxlbiwgZ3VwX2ZsYWdzKTtcbit9XG4rXG4rLyoqXG4rICogY29weV9yZW1vdGVfdm1fc3RyIC0gY29weSBhIHN0cmluZyBmcm9tIGFub3RoZXIgcHJvY2VzcydzIGFkZHJlc3Mgc3BhY2UuXG4rICogQHRzazpcdHRoZSB0YXNrIG9mIHRoZSB0YXJnZXQgYWRkcmVzcyBzcGFjZVxuKyAqIEBhZGRyOlx0c3RhcnQgYWRkcmVzcyB0byByZWFkIGZyb21cbisgKiBAYnVmOlx0ZGVzdGluYXRpb24gYnVmZmVyXG4rICogQGxlbjpcdG51bWJlciBvZiBieXRlcyB0byBjb3B5XG4rICogQGd1cF9mbGFnczpcdGZsYWdzIG1vZGlmeWluZyBsb29rdXAgYmVoYXZpb3VyXG4rICpcbisgKiBSZXR1cm46IG51bWJlciBvZiBieXRlcyBjb3BpZWQgZnJvbSBAYWRkciAoc291cmNlKSB0byBAYnVmIChkZXN0aW5hdGlvbiksXG4rICogbm90IGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMLiBJZiBAbGVuIGlzIHplcm8sIHJldHVybiAwIHdpdGhvdXQgYWNjZXNzaW5nXG4rICogQGJ1Zi4gT3RoZXJ3aXNlLCBAYnVmIGlzIGFsd2F5cyBOVUwtdGVybWluYXRlZC4gT24gYW55IGVycm9yLCByZXR1cm5cbisgKiAtRUZBVUxULlxuKyAqL1xuK2ludCBjb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHVuc2lnbmVkIGxvbmcgYWRkcixcbitcdFx0ICAgICAgIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncylcbit7XG4rXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAodW5saWtlbHkobGVuID09IDApKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdG1tID0gZ2V0X3Rhc2tfbW0odHNrKTtcbitcdGlmICghbW0pIHtcbitcdFx0KihjaGFyICopYnVmID0gJ1xcMCc7XG4rXHRcdHJldHVybiAtRUZBVUxUO1xuK1x0fVxuK1xuK1x0cmV0ID0gX19jb3B5X3JlbW90ZV9tbV9zdHIobW0sIGFkZHIsIGJ1ZiwgbGVuLCBndXBfZmxhZ3MpO1xuK1xuK1x0bW1wdXQobW0pO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwoY29weV9yZW1vdGVfdm1fc3RyKTtcbisjZW5kaWYgLyogQ09ORklHX0JQRl9TWVNDQUxMICovXG4rXG4gaW50IF9fd2VhayBtZW1jbXBfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UxLCBzdHJ1Y3QgcGFnZSAqcGFnZTIpXG4ge1xuIFx0Y2hhciAqYWRkcjEsICphZGRyMjtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfaXRlci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2l0ZXIuY1xuaW5kZXggYzY5MDgwY2ExNGY1YS4uOTlhMTZhMWFkZDcwZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9pdGVyLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9pdGVyLmNcbkBAIC0zOSwxMCArMzksMTAgQEAgc3RhdGljIHZvaWQgdGVzdF9idGZfaWRfb3JfbnVsbCh2b2lkKVxuIFx0c3RydWN0IGJwZl9pdGVyX3Rlc3Rfa2VybjMgKnNrZWw7XG4gXG4gXHRza2VsID0gYnBmX2l0ZXJfdGVzdF9rZXJuM19fb3Blbl9hbmRfbG9hZCgpO1xuLVx0aWYgKCFBU1NFUlRfRVJSX1BUUihza2VsLCBcImJwZl9pdGVyX3Rlc3Rfa2VybjNfX29wZW5fYW5kX2xvYWRcIikpIHtcbi1cdFx0YnBmX2l0ZXJfdGVzdF9rZXJuM19fZGVzdHJveShza2VsKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcImJwZl9pdGVyX3Rlc3Rfa2VybjNfX29wZW5fYW5kX2xvYWRcIikpXG4gXHRcdHJldHVybjtcbi1cdH1cbitcbitcdGJwZl9pdGVyX3Rlc3Rfa2VybjNfX2Rlc3Ryb3koc2tlbCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGRvX2R1bW15X3JlYWRfb3B0cyhzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIHN0cnVjdCBicGZfaXRlcl9hdHRhY2hfb3B0cyAqb3B0cylcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jb3B5X2Zyb21fdXNlcl9icHJtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jb3B5X2Zyb21fdXNlcl9icHJtLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5iMjMyNWIxOTM1NzYxXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jb3B5X2Zyb21fdXNlcl9icHJtLmNcbkBAIC0wLDAgKzEsNzIgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuK1xuKyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvd2FpdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcImNvcHlfZnJvbV91c2VyX2Jwcm0uc2tlbC5oXCJcbitcbit2b2lkIHRlc3RfY29weV9mcm9tX3VzZXJfYnBybSh2b2lkKVxuK3tcbitcdGNoYXIgYXJnMFtdID0gXCJmaXJzdFwiO1xuK1x0Y2hhciBhcmcxW10gPSBcInNlY29uZC1hcmd1bWVudFwiO1xuK1x0Y2hhciBlbnYwW10gPSBcIlNPTUVfRU5WPWFcIjtcbitcdGNoYXIgZW52MVtdID0gXCJPVEhFUl9FTlY9c29tZXRoaW5nXCI7XG4rXHRzdHJ1Y3QgY29weV9mcm9tX3VzZXJfYnBybSAqc2tlbDtcbitcdHBpZF90IGNoaWxkO1xuK1x0aW50IHN0YXR1cztcbitcbitcdHNrZWwgPSBjb3B5X2Zyb21fdXNlcl9icHJtX19vcGVuX2FuZF9sb2FkKCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJvcGVuX2FuZF9sb2FkXCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHQvKlxuK1x0ICogT24gIUNPTkZJR19NTVUsIGV4ZWMgc3RyaW5ncyBhcmUgaGVsZCBpbiBicHJtLVx1MDAzZXBhZ2VbXSByYXRoZXIgdGhhblxuK1x0ICogYmVpbmcgbWFwcGVkIGluIGJwcm0tXHUwMDNlbW0uXG4rXHQgKi9cbitcdGlmICghc2tlbC1cdTAwM2VrY29uZmlnLVx1MDAzZUNPTkZJR19NTVUpIHtcbitcdFx0cHJpbnRmKFwiJXM6U0tJUDogdGVzdCByZXF1aXJlcyBDT05GSUdfTU1VXFxuXCIsIF9fZnVuY19fKTtcbitcdFx0dGVzdF9fc2tpcCgpO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdGlmICghQVNTRVJUX09LKGNvcHlfZnJvbV91c2VyX2Jwcm1fX2F0dGFjaChza2VsKSwgXCJhdHRhY2hcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0Y2hpbGQgPSBmb3JrKCk7XG4rXHRpZiAoIUFTU0VSVF9HRShjaGlsZCwgMCwgXCJmb3JrXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGlmICghY2hpbGQpIHtcbitcdFx0Y2hhciAqY29uc3QgYXJndltdID0geyBhcmcwLCBhcmcxLCBOVUxMIH07XG4rXHRcdGNoYXIgKmNvbnN0IGVudnBbXSA9IHsgZW52MCwgZW52MSwgTlVMTCB9O1xuK1xuK1x0XHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vtb25pdG9yZWRfcGlkID0gZ2V0cGlkKCk7XG4rXHRcdGV4ZWN2ZShcIi9iaW4vdHJ1ZVwiLCBhcmd2LCBlbnZwKTtcbitcdFx0X2V4aXQoZXJybm8pO1xuK1x0fVxuK1xuK1x0aWYgKCFBU1NFUlRfRVEod2FpdHBpZChjaGlsZCwgXHUwMDI2c3RhdHVzLCAwKSwgY2hpbGQsIFwid2FpdHBpZFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRpZiAoQVNTRVJUX1RSVUUoV0lGRVhJVEVEKHN0YXR1cyksIFwiY2hpbGRfZXhpdGVkXCIpKVxuK1x0XHRBU1NFUlRfRVEoV0VYSVRTVEFUVVMoc3RhdHVzKSwgRVBFUk0sIFwiZXhlY19lcnJub1wiKTtcbitcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VicHJtX2FyZ2MsIDIsIFwiYnBybV9hcmdjXCIpO1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWJwcm1fZW52YywgMiwgXCJicHJtX2VudmNcIik7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlZGF0YV9sZW5fbWF0Y2gsIDEsIFwiZGF0YV9sZW5fbWF0Y2hcIik7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlaW52YWxpZF9mbGFnc19yZXQsIC1FSU5WQUwsIFwiaW52YWxpZF9mbGFnc19yZXRcIik7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlY29weV9yZXQsIDAsIFwiY29weV9yZXRcIik7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlc3RyX2FyZzBfcmV0LCBzaXplb2YoYXJnMCksIFwic3RyX2FyZzBfcmV0XCIpO1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXN0cl9hcmcxX3JldCwgc2l6ZW9mKGFyZzEpLCBcInN0cl9hcmcxX3JldFwiKTtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VzdHJfZW52MF9yZXQsIHNpemVvZihlbnYwKSwgXCJzdHJfZW52MF9yZXRcIik7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlc3RyX2VudjFfcmV0LCBzaXplb2YoZW52MSksIFwic3RyX2VudjFfcmV0XCIpO1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWRhdGFfbWF0Y2gsIDEsIFwiZGF0YV9tYXRjaFwiKTtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VzdHJfYXJnc19tYXRjaCwgMSwgXCJzdHJfYXJnc19tYXRjaFwiKTtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VzdHJfZW52c19tYXRjaCwgMSwgXCJzdHJfZW52c19tYXRjaFwiKTtcbitcbitvdXQ6XG4rXHRjb3B5X2Zyb21fdXNlcl9icHJtX19kZXN0cm95KHNrZWwpO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfbWF5YmVfbnVsbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX21heWJlX251bGwuY1xuaW5kZXggMDFkYzI2MTNjOGE1MS4uNDVhZjZmMDBhZDkwOCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19tYXliZV9udWxsLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19tYXliZV9udWxsLmNcbkBAIC0xOSwxNSArMTksMTYgQEAgc3RhdGljIHZvaWQgbWF5YmVfbnVsbCh2b2lkKVxuIFx0c3RydWN0X29wc19tYXliZV9udWxsX19kZXN0cm95KHNrZWwpO1xuIH1cbiBcbi0vKiBUZXN0IHRoYXQgdGhlIHZlcmlmaWVyIHJlamVjdHMgYSBwcm9ncmFtIHRoYXQgYWNjZXNzIGEgbnVsbGFibGUgcG9pbnRlclxuLSAqIHdpdGhvdXQgYSBjaGVjayBiZWZvcmVoYW5kLlxuKy8qXG4rICogVGVzdCB0aGF0IHRoZSB2ZXJpZmllciBhY2NlcHRzIGEgZmF1bHQtcHJvdGVjdGVkIHJlYWQgdGhyb3VnaCBhIG51bGxhYmxlXG4rICogdHJ1c3RlZCBwb2ludGVyIHdpdGhvdXQgYW4gZXhwbGljaXQgTlVMTCBjaGVjay5cbiAgKi9cbi1zdGF0aWMgdm9pZCBtYXliZV9udWxsX2ZhaWwodm9pZClcbitzdGF0aWMgdm9pZCBtYXliZV9udWxsX25vX2NoZWNrKHZvaWQpXG4ge1xuIFx0c3RydWN0IHN0cnVjdF9vcHNfbWF5YmVfbnVsbF9mYWlsICpza2VsO1xuIFxuIFx0c2tlbCA9IHN0cnVjdF9vcHNfbWF5YmVfbnVsbF9mYWlsX19vcGVuX2FuZF9sb2FkKCk7XG4tXHRpZiAoQVNTRVJUX0VSUl9QVFIoc2tlbCwgXCJzdHJ1Y3Rfb3BzX21vZHVsZV9mYWlsX19vcGVuX2FuZF9sb2FkXCIpKVxuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwic3RydWN0X29wc19tYXliZV9udWxsX2ZhaWxfX29wZW5fYW5kX2xvYWRcIikpXG4gXHRcdHJldHVybjtcbiBcbiBcdHN0cnVjdF9vcHNfbWF5YmVfbnVsbF9mYWlsX19kZXN0cm95KHNrZWwpO1xuQEAgLTQxLDYgKzQyLDYgQEAgdm9pZCB0ZXN0X3N0cnVjdF9vcHNfbWF5YmVfbnVsbCh2b2lkKVxuIFx0ICovXG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcIm1heWJlX251bGxcIikpXG4gXHRcdG1heWJlX251bGwoKTtcbi1cdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwibWF5YmVfbnVsbF9mYWlsXCIpKVxuLVx0XHRtYXliZV9udWxsX2ZhaWwoKTtcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwibWF5YmVfbnVsbF9ub19jaGVja1wiKSlcbitcdFx0bWF5YmVfbnVsbF9ub19jaGVjaygpO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90cF9idGZfbnVsbGFibGUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RwX2J0Zl9udWxsYWJsZS5jXG5pbmRleCBhY2NjNDJlMDFmOGE4Li44MjVmZTdhOTJkNzRmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHBfYnRmX251bGxhYmxlLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RwX2J0Zl9udWxsYWJsZS5jXG5AQCAtMiw2ICsyLDMxIEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4gI2luY2x1ZGUgXCJ0ZXN0X3RwX2J0Zl9udWxsYWJsZS5za2VsLmhcIlxuKyNpbmNsdWRlIFwidGVzdF90cF9idGZfbnVsbGFibGVfcnVudGltZS5za2VsLmhcIlxuK1xuK3N0YXRpYyB2b2lkIHRlc3RfbnVsbGFibGVfcnVudGltZSh2b2lkKVxuK3tcbitcdHN0cnVjdCB0ZXN0X3RwX2J0Zl9udWxsYWJsZV9ydW50aW1lICpza2VsO1xuK1xuK1x0c2tlbCA9IHRlc3RfdHBfYnRmX251bGxhYmxlX3J1bnRpbWVfX29wZW5fYW5kX2xvYWQoKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcIm9wZW5fYW5kX2xvYWRcIikpXG4rXHRcdHJldHVybjtcbitcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZW1vbml0b3JlZF90aWQgPSBzeXNfZ2V0dGlkKCk7XG4rXG4rXHRpZiAoIUFTU0VSVF9PSyh0ZXN0X3RwX2J0Zl9udWxsYWJsZV9ydW50aW1lX19hdHRhY2goc2tlbCksIFwiYXR0YWNoXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGlmICghQVNTRVJUX09LKHRyaWdnZXJfbW9kdWxlX3Rlc3RfcmVhZCgyKSwgXCJ0cmlnZ2VyXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VjYWxscywgMiwgXCJjYWxsc1wiKTtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2Vub25udWxsX2xlbiwgMiwgXCJub25udWxsX2xlblwiKTtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VudWxsX2xlbiwgMCwgXCJudWxsX2xlblwiKTtcbitcbitvdXQ6XG4rXHR0ZXN0X3RwX2J0Zl9udWxsYWJsZV9ydW50aW1lX19kZXN0cm95KHNrZWwpO1xuK31cbiBcbiB2b2lkIHRlc3RfdHBfYnRmX251bGxhYmxlKHZvaWQpXG4ge1xuQEAgLTExLDQgKzM2LDcgQEAgdm9pZCB0ZXN0X3RwX2J0Zl9udWxsYWJsZSh2b2lkKVxuIFx0fVxuIFxuIFx0UlVOX1RFU1RTKHRlc3RfdHBfYnRmX251bGxhYmxlKTtcbitcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwicnVudGltZVwiKSlcbitcdFx0dGVzdF9udWxsYWJsZV9ydW50aW1lKCk7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9jb3B5X2Zyb21fdXNlcl9icHJtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvY29weV9mcm9tX3VzZXJfYnBybS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYjMzNGExNTc0MTllNVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2NvcHlfZnJvbV91c2VyX2Jwcm0uY1xuQEAgLTAsMCArMSwxMjMgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuK1xuKyNpbmNsdWRlIFwidm1saW51eC5oXCJcbitcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuKyNpbmNsdWRlIFwiYnBmX21pc2MuaFwiXG4rXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuK1xuK3N0YXRpYyBjb25zdCBjaGFyIGV4cGVjdGVkX2RhdGFbXSA9IFwiZmlyc3RcXDBzZWNvbmQtYXJndW1lbnRcXDBcIlxuK1x0XHRcdFx0ICAgIFwiU09NRV9FTlY9YVxcME9USEVSX0VOVj1zb21ldGhpbmdcIjtcbitzdGF0aWMgY29uc3QgY2hhciBleHBlY3RlZF9hcmcwW10gPSBcImZpcnN0XCI7XG4rc3RhdGljIGNvbnN0IGNoYXIgZXhwZWN0ZWRfYXJnMVtdID0gXCJzZWNvbmQtYXJndW1lbnRcIjtcbitzdGF0aWMgY29uc3QgY2hhciBleHBlY3RlZF9lbnYwW10gPSBcIlNPTUVfRU5WPWFcIjtcbitzdGF0aWMgY29uc3QgY2hhciBleHBlY3RlZF9lbnYxW10gPSBcIk9USEVSX0VOVj1zb21ldGhpbmdcIjtcbitcbitpbnQgbW9uaXRvcmVkX3BpZDtcbitpbnQgYnBybV9hcmdjO1xuK2ludCBicHJtX2VudmM7XG4raW50IGRhdGFfbGVuX21hdGNoO1xuK2ludCBpbnZhbGlkX2ZsYWdzX3JldDtcbitpbnQgY29weV9yZXQ7XG4raW50IHN0cl9hcmcwX3JldDtcbitpbnQgc3RyX2FyZzFfcmV0O1xuK2ludCBzdHJfZW52MF9yZXQ7XG4raW50IHN0cl9lbnYxX3JldDtcbitpbnQgZGF0YV9tYXRjaDtcbitpbnQgc3RyX2FyZ3NfbWF0Y2g7XG4raW50IHN0cl9lbnZzX21hdGNoO1xuK1xuK2V4dGVybiBib29sIENPTkZJR19NTVUgX19rY29uZmlnIF9fd2VhaztcbitcbitleHRlcm4gaW50IGJwZl9jb3B5X2Zyb21fdXNlcl9tbSh2b2lkICpkc3QsIHUzMiBkc3RfX3N6LFxuK1x0XHRcdFx0IGNvbnN0IHZvaWQgKnVuc2FmZV9wdHJfX2lnbixcbitcdFx0XHRcdCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdTY0IGZsYWdzKSBfX2tzeW07XG4rXG4rZXh0ZXJuIGludCBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osXG4rXHRcdFx0XHQgICAgIGNvbnN0IHZvaWQgKnVuc2FmZV9wdHJfX2lnbixcbitcdFx0XHRcdCAgICAgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHU2NCBmbGFncykgX19rc3ltO1xuK1xuK1NFQyhcImxzbS5zL2Jwcm1fY2hlY2tfc2VjdXJpdHlcIilcbitpbnQgQlBGX1BST0coY2hlY2tfZXhlY19hcmdzLCBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuK3tcbitcdHUzMiBwaWQgPSBicGZfZ2V0X2N1cnJlbnRfcGlkX3RnaWQoKSBcdTAwM2VcdTAwM2UgMzI7XG4rXHRjaGFyIGRhdGFbc2l6ZW9mKGV4cGVjdGVkX2RhdGEpXSA9IHt9O1xuK1x0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4rXHRjaGFyIGFyZzBbMzJdID0ge307XG4rXHRjaGFyIGFyZzFbMzJdID0ge307XG4rXHRjaGFyIGVudjBbMzJdID0ge307XG4rXHRjaGFyIGVudjFbMzJdID0ge307XG4rXHR1NjQgb2Zmc2V0ID0gMDtcbitcdHU2NCBkYXRhX2xlbjtcbitcbitcdGlmICghQ09ORklHX01NVSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAocGlkICE9IG1vbml0b3JlZF9waWQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0bW0gPSBicHJtLVx1MDAzZW1tO1xuK1x0aWYgKCFtbSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRicHJtX2FyZ2MgPSBicHJtLVx1MDAzZWFyZ2M7XG4rXHRicHJtX2VudmMgPSBicHJtLVx1MDAzZWVudmM7XG4rXG4rXHQvKiB0aGlzIGlzIHRoZSB0b3RhbCBzaXplIG9mIGFyZ3MgYW5kIGVudnMgc3RhcnRpbmcgZnJvbSBicHJtLVx1MDAzZXAgKi9cbitcdGRhdGFfbGVuID0gYnBybS1cdTAwM2VleGVjIC0gYnBybS1cdTAwM2VwO1xuK1x0ZGF0YV9sZW5fbWF0Y2ggPSBkYXRhX2xlbiA9PSBzaXplb2YoZXhwZWN0ZWRfZGF0YSk7XG4rXG4rXHRpbnZhbGlkX2ZsYWdzX3JldCA9IGJwZl9jb3B5X2Zyb21fdXNlcl9tbShkYXRhLFxuK1x0XHRcdFx0XHRcdCAgc2l6ZW9mKGRhdGEpLCAodm9pZCAqKWJwcm0tXHUwMDNlcCwgbW0sIH4wVUxMKTtcbitcbitcdGNvcHlfcmV0ID0gYnBmX2NvcHlfZnJvbV91c2VyX21tKGRhdGEsIHNpemVvZihkYXRhKSwgKHZvaWQgKilicHJtLVx1MDAzZXAsXG4rXHRcdFx0XHRcdCBtbSwgMCk7XG4rXHRpZiAoY29weV9yZXQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0ZGF0YV9tYXRjaCA9XG4rXHRcdCFfX2J1aWx0aW5fbWVtY21wKGRhdGEsIGV4cGVjdGVkX2RhdGEsIHNpemVvZihleHBlY3RlZF9kYXRhKSk7XG4rXG4rXHQvKiBhcmcwIGlzIGF0IGJwcm0tXHUwMDNlcCAqL1xuK1x0c3RyX2FyZzBfcmV0ID0gYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cihhcmcwLCBzaXplb2YoYXJnMCksXG4rXHRcdFx0XHRcdFx0ICh2b2lkICopKGJwcm0tXHUwMDNlcCArIG9mZnNldCksXG4rXHRcdFx0XHRcdFx0IG1tLCBCUEZfRl9QQURfWkVST1MpO1xuK1x0aWYgKHN0cl9hcmcwX3JldCAhPSBzaXplb2YoZXhwZWN0ZWRfYXJnMCkpXG4rXHRcdHJldHVybiAwO1xuK1x0b2Zmc2V0ICs9IHN0cl9hcmcwX3JldDtcbitcbitcdC8qIGFyZzEgaXMgYXQgYnBybS1cdTAwM2VwICsgc2l6ZW9mKGFyZzApICovXG4rXHRzdHJfYXJnMV9yZXQgPSBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKGFyZzEsIHNpemVvZihhcmcxKSxcbitcdFx0XHRcdFx0XHQgKHZvaWQgKikoYnBybS1cdTAwM2VwICsgb2Zmc2V0KSxcbitcdFx0XHRcdFx0XHQgbW0sIEJQRl9GX1BBRF9aRVJPUyk7XG4rXHRpZiAoc3RyX2FyZzFfcmV0ICE9IHNpemVvZihleHBlY3RlZF9hcmcxKSlcbitcdFx0cmV0dXJuIDA7XG4rXHRvZmZzZXQgKz0gc3RyX2FyZzFfcmV0O1xuK1xuK1x0LyogZW52MCBpcyBhdCBicHJtLVx1MDAzZXAgKyBzaXplb2YoYXJnMCkgKyBzaXplb2YoYXJnMSkgKi9cbitcdHN0cl9lbnYwX3JldCA9IGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIoZW52MCwgc2l6ZW9mKGVudjApLFxuK1x0XHRcdFx0XHRcdCAodm9pZCAqKShicHJtLVx1MDAzZXAgKyBvZmZzZXQpLFxuK1x0XHRcdFx0XHRcdCBtbSwgQlBGX0ZfUEFEX1pFUk9TKTtcbitcdGlmIChzdHJfZW52MF9yZXQgIT0gc2l6ZW9mKGV4cGVjdGVkX2VudjApKVxuK1x0XHRyZXR1cm4gMDtcbitcdG9mZnNldCArPSBzdHJfZW52MF9yZXQ7XG4rXG4rXHQvKiBlbnYxIGlzIGF0IGJwcm0tXHUwMDNlcCArIHNpemVvZihhcmcwKSArIHNpemVvZihhcmcxKSArIHNpemVvZihlbnYwKSAqL1xuK1x0c3RyX2VudjFfcmV0ID0gYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cihlbnYxLCBzaXplb2YoZW52MSksXG4rXHRcdFx0XHRcdFx0ICh2b2lkICopKGJwcm0tXHUwMDNlcCArIG9mZnNldCksXG4rXHRcdFx0XHRcdFx0IG1tLCBCUEZfRl9QQURfWkVST1MpO1xuK1x0aWYgKHN0cl9lbnYxX3JldCAhPSBzaXplb2YoZXhwZWN0ZWRfZW52MSkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0c3RyX2FyZ3NfbWF0Y2ggPVxuK1x0XHQhX19idWlsdGluX21lbWNtcChhcmcwLCBleHBlY3RlZF9hcmcwLCBzaXplb2YoZXhwZWN0ZWRfYXJnMCkpIFx1MDAyNlx1MDAyNlxuK1x0XHQhX19idWlsdGluX21lbWNtcChhcmcxLCBleHBlY3RlZF9hcmcxLCBzaXplb2YoZXhwZWN0ZWRfYXJnMSkpO1xuK1x0c3RyX2VudnNfbWF0Y2ggPVxuK1x0XHQhX19idWlsdGluX21lbWNtcChlbnYwLCBleHBlY3RlZF9lbnYwLCBzaXplb2YoZXhwZWN0ZWRfZW52MCkpIFx1MDAyNlx1MDAyNlxuK1x0XHQhX19idWlsdGluX21lbWNtcChlbnYxLCBleHBlY3RlZF9lbnYxLCBzaXplb2YoZXhwZWN0ZWRfZW52MSkpO1xuK1xuK1x0cmV0dXJuIGRhdGFfbWF0Y2ggXHUwMDI2XHUwMDI2IHN0cl9hcmdzX21hdGNoIFx1MDAyNlx1MDAyNiBzdHJfZW52c19tYXRjaCA/IC1FUEVSTSA6IDA7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yYXdfdHBfbnVsbF9mYWlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmF3X3RwX251bGxfZmFpbC5jXG5pbmRleCA3MjVkNzNjOWZmZTEzLi4xNjMxMjQ3OTNkMGE2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Jhd190cF9udWxsX2ZhaWwuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Jhd190cF9udWxsX2ZhaWwuY1xuQEAgLTIsMjIgKzIsMzQgQEBcbiAvKiBDb3B5cmlnaHQgKGMpIDIwMjQgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjdm1saW51eC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFwiYnBmX21pc2MuaFwiXG4gXG4gY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuIFxuLS8qIEVuc3VyZSBtb2R1bGUgcGFyYW1ldGVyIGhhcyBQVFJfTUFZQkVfTlVMTCAqL1xuK2V4dGVybiBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmJwZl90YXNrX2FjcXVpcmUoc3RydWN0IHRhc2tfc3RydWN0ICpwKSBfX2tzeW07XG4rZXh0ZXJuIHZvaWQgYnBmX3Rhc2tfcmVsZWFzZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIF9fa3N5bTtcbitcbisvKlxuKyAqIEVuc3VyZSB0aGUgbW9kdWxlIHRyYWNlcG9pbnQgYXJndW1lbnQgaXMgdHJ1c3RlZC1vci1OVUxMIHdoaWxlIGFsbG93aW5nXG4rICogYSBmYXVsdC1wcm90ZWN0ZWQgcmVhZCB3aXRob3V0IGFuIGV4cGxpY2l0IE5VTEwgY2hlY2suXG4rICovXG4gU0VDKFwidHBfYnRmL2JwZl90ZXN0bW9kX3Rlc3RfcmF3X3RwX251bGxfdHBcIilcbi1fX2ZhaWx1cmUgX19tc2coXCJSMSBpbnZhbGlkIG1lbSBhY2Nlc3MgJ3RydXN0ZWRfcHRyX29yX251bGxfJ1wiKVxuK19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxuK19fbXNnKFwiUjE9dHJ1c3RlZF9wdHJfb3JfbnVsbF9za19idWZmXCIpXG4gaW50IHRlc3RfcmF3X3RwX251bGxfYnBmX3Rlc3Rtb2RfdGVzdF9yYXdfdHBfbnVsbF9hcmdfMSh2b2lkICpjdHgpIHtcbiAgICAgYXNtIHZvbGF0aWxlKFwicjEgPSAqKHU2NCAqKShyMSArMCk7IHIxID0gKih1NjQgKikocjEgKzApO1wiIDo6OiBfX2Nsb2JiZXJfYWxsKTtcbiAgICAgcmV0dXJuIDA7XG4gfVxuIFxuLS8qIENoZWNrIE5VTEwgbWFya2luZyAqL1xuKy8qXG4rICogRW5zdXJlIHNjaGVkX3BpX3NldHByaW8ncyBzZWNvbmQgYXJndW1lbnQgaXMgdHJ1c3RlZC1vci1OVUxMIHdoaWxlIGFsbG93aW5nXG4rICogYSBmYXVsdC1wcm90ZWN0ZWQgcmVhZCB3aXRob3V0IGFuIGV4cGxpY2l0IE5VTEwgY2hlY2suXG4rICovXG4gU0VDKFwidHBfYnRmL3NjaGVkX3BpX3NldHByaW9cIilcbi1fX2ZhaWx1cmUgX19tc2coXCJSMSBpbnZhbGlkIG1lbSBhY2Nlc3MgJ3RydXN0ZWRfcHRyX29yX251bGxfJ1wiKVxuK19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxuK19fbXNnKFwiUjE9dHJ1c3RlZF9wdHJfb3JfbnVsbF90YXNrX3N0cnVjdFwiKVxuIGludCB0ZXN0X3Jhd190cF9udWxsX3NjaGVkX3BpX3NldHByaW9fYXJnXzIodm9pZCAqY3R4KSB7XG4gICAgIGFzbSB2b2xhdGlsZShcInIxID0gKih1NjQgKikocjEgKzgpOyByMSA9ICoodTY0ICopKHIxICswKTtcIiA6OjogX19jbG9iYmVyX2FsbCk7XG4gICAgIHJldHVybiAwO1xuQEAgLTYwLDcgKzcyLDggQEAgaW50IHRlc3RfdHBfYnRmX3NpZ25hbF9kZWxpdmVyX2luZm9fbm9fZGVyZWYodm9pZCAqY3R4KVxuIH1cbiBcbiBTRUMoXCJ0cF9idGYvc2NoZWRfcHJvY2Vzc193YWl0XCIpXG4tX19mYWlsdXJlIF9fbXNnKFwiUjEgaW52YWxpZCBtZW0gYWNjZXNzICd0cnVzdGVkX3B0cl9vcl9udWxsXydcIilcbitfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcbitfX21zZyhcIlIxPXRydXN0ZWRfcHRyX29yX251bGxfcGlkXCIpXG4gaW50IHRlc3RfcmF3X3RwX251bGxfc2NoZWRfcHJvY2Vzc193YWl0X2FyZ18xKHZvaWQgKmN0eClcbiB7XG4gXHRhc20gdm9sYXRpbGUoXCJyMSA9ICoodTY0ICopKHIxICswKTsgcjEgPSAqKHUzMiAqKShyMSArMCk7XCIgOjo6IF9fY2xvYmJlcl9hbGwpO1xuQEAgLTc1LDMgKzg4LDU4IEBAIGludCB0ZXN0X3Jhd190cF9udWxsX3NjaGVkX3Byb2Nlc3Nfd2FpdF9hcmdfMV9jaGVja2VkKHZvaWQgKmN0eClcbiBcdFx0ICAgICBcInIxID0gKih1MzIgKikocjEgKzApO1wiIDo6OiBfX2Nsb2JiZXJfYWxsKTtcbiBcdHJldHVybiAwO1xuIH1cbitcbitTRUMoXCJ0cF9idGYvc2NoZWRfcGlfc2V0cHJpb1wiKVxuK19fZmFpbHVyZSBfX2xvZ19sZXZlbCgyKVxuK19fbXNnKFwiUjE9dW50cnVzdGVkX3B0cl90YXNrX3N0cnVjdFwiKVxuK19fbXNnKFwiUjEgbXVzdCBiZSBhIHJjdSBwb2ludGVyXCIpXG4raW50IEJQRl9QUk9HKHRydXN0ZWRfb3JfbnVsbF93YWxrX2lzX3VudHJ1c3RlZCwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLFxuK1x0ICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBpX3Rhc2spXG4re1xuK1x0c3RydWN0IHRhc2tfc3RydWN0ICpwYXJlbnQsICphY3F1aXJlZDtcbitcbitcdHBhcmVudCA9IHBpX3Rhc2stXHUwMDNlcmVhbF9wYXJlbnQ7XG4rXHRhY3F1aXJlZCA9IGJwZl90YXNrX2FjcXVpcmUocGFyZW50KTtcbitcdGlmIChhY3F1aXJlZClcbitcdFx0YnBmX3Rhc2tfcmVsZWFzZShhY3F1aXJlZCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwidHBfYnRmL3NjaGVkX3BpX3NldHByaW9cIilcbitfX2ZhaWx1cmUgX19tc2coXCJSMSBtdXN0IGJlIGEgcmN1IHBvaW50ZXJcIilcbitpbnQgQlBGX1BST0coZGVyaXZlZF9wdHJfbnVsbF9jaGVja19kb2VzX25vdF9yZXN0b3JlX3RydXN0LFxuK1x0ICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCB0YXNrX3N0cnVjdCAqcGlfdGFzaylcbit7XG4rXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudCwgKmFjcXVpcmVkO1xuK1xuK1x0cGFyZW50ID0gcGlfdGFzay1cdTAwM2VyZWFsX3BhcmVudDtcbitcdGlmICghcGFyZW50KVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGFjcXVpcmVkID0gYnBmX3Rhc2tfYWNxdWlyZShwYXJlbnQpO1xuK1x0aWYgKGFjcXVpcmVkKVxuK1x0XHRicGZfdGFza19yZWxlYXNlKGFjcXVpcmVkKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKlxuKyAqIEluIGNvbnRyYXN0LCBjaGVja2luZyB0aGUgb3JpZ2luYWwgdHJ1c3RlZC1vci1OVUxMIHBvaW50ZXIgcmVtb3Zlc1xuKyAqIFBUUl9NQVlCRV9OVUxMIHdoaWxlIHJldGFpbmluZyBQVFJfVFJVU1RFRC5cbisgKi9cbitTRUMoXCJ0cF9idGYvc2NoZWRfcGlfc2V0cHJpb1wiKVxuK19fc3VjY2Vzc1xuK2ludCBCUEZfUFJPRyhvcmlnaW5hbF9wdHJfbnVsbF9jaGVja19yZXRhaW5zX3RydXN0LFxuK1x0ICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCB0YXNrX3N0cnVjdCAqcGlfdGFzaylcbit7XG4rXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmFjcXVpcmVkO1xuK1xuK1x0aWYgKCFwaV90YXNrKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGFjcXVpcmVkID0gYnBmX3Rhc2tfYWNxdWlyZShwaV90YXNrKTtcbitcdGlmIChhY3F1aXJlZClcbitcdFx0YnBmX3Rhc2tfcmVsZWFzZShhY3F1aXJlZCk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdHBfYnRmX251bGxhYmxlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90cF9idGZfbnVsbGFibGUuY1xuaW5kZXggY2YwNTQ3YTYxM2ZmYy4uYjc5MTQyMjRiYTE5NCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RwX2J0Zl9udWxsYWJsZS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90cF9idGZfbnVsbGFibGUuY1xuQEAgLTcsNyArNyw3IEBAXG4gI2luY2x1ZGUgXCJicGZfbWlzYy5oXCJcbiBcbiBTRUMoXCJ0cF9idGYvYnBmX3Rlc3Rtb2RfdGVzdF9udWxsYWJsZV9iYXJlX3RwXCIpXG4tX19mYWlsdXJlIF9fbXNnKFwiUjEgaW52YWxpZCBtZW0gYWNjZXNzICd0cnVzdGVkX3B0cl9vcl9udWxsXydcIilcbitfX3N1Y2Nlc3NcbiBpbnQgQlBGX1BST0coaGFuZGxlX3RwX2J0Zl9udWxsYWJsZV9iYXJlMSwgc3RydWN0IGJwZl90ZXN0bW9kX3Rlc3RfcmVhZF9jdHggKm51bGxhYmxlX2N0eClcbiB7XG4gXHRyZXR1cm4gbnVsbGFibGVfY3R4LVx1MDAzZWxlbjtcbkBAIC0yMSw0ICsyMSw0NyBAQCBpbnQgQlBGX1BST0coaGFuZGxlX3RwX2J0Zl9udWxsYWJsZV9iYXJlMiwgc3RydWN0IGJwZl90ZXN0bW9kX3Rlc3RfcmVhZF9jdHggKm51bFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK1NFQyhcInRwX2J0Zi9icGZfdGVzdG1vZF90ZXN0X251bGxhYmxlX2JhcmVfdHBcIilcbitfX3N1Y2Nlc3NcbitpbnQgQlBGX1BST0coaGFuZGxlX3RwX2J0Zl9udWxsYWJsZV9tZW0sIHN0cnVjdCBicGZfdGVzdG1vZF90ZXN0X3JlYWRfY3R4ICpudWxsYWJsZV9jdHgpXG4re1xuK1x0cmV0dXJuIG51bGxhYmxlX2N0eC1cdTAwM2VidWZbMF07XG4rfVxuK1xuK1NFQyhcInRwX2J0Zi9icGZfdGVzdG1vZF90ZXN0X251bGxhYmxlX2JhcmVfdHBcIilcbitfX2ZhaWx1cmUgX19tc2coXCJwb2ludGVyIGFyaXRobWV0aWMgb24gdHJ1c3RlZF9wdHJfb3JfbnVsbF8gcHJvaGliaXRlZFwiKVxuK2ludCBCUEZfUFJPRyhoYW5kbGVfdHBfYnRmX251bGxhYmxlX2FyaXRoLCBzdHJ1Y3QgYnBmX3Rlc3Rtb2RfdGVzdF9yZWFkX2N0eCAqbnVsbGFibGVfY3R4KVxuK3tcbitcdGFzbSB2b2xhdGlsZShcIiVbY3R4XSArPSAxXCIgOiBbY3R4XSBcIityXCIobnVsbGFibGVfY3R4KSk7XG4rXHRyZXR1cm4gbnVsbGFibGVfY3R4LVx1MDAzZWxlbjtcbit9XG4rXG4rU0VDKFwidHBfYnRmL2JwZl90ZXN0bW9kX3Rlc3RfbnVsbGFibGVfYmFyZV90cFwiKVxuK19fZmFpbHVyZSBfX21zZyhcImludmFsaWQgbWVtIGFjY2VzcyAndHJ1c3RlZF9wdHJfb3JfbnVsbF8nXCIpXG4raW50IEJQRl9QUk9HKGhhbmRsZV90cF9idGZfbnVsbGFibGVfYXRvbWljX3JtdyxcbitcdCAgICAgc3RydWN0IGJwZl90ZXN0bW9kX3Rlc3RfcmVhZF9jdHggKm51bGxhYmxlX2N0eClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwicjEgPSAlW2N0eF07XCJcbitcdFx0ICAgICAgXCJ3MiA9IDE7XCJcbitcdFx0ICAgICAgXCJsb2NrICoodTMyICopKHIxICsgJVtsZW5dKSArPSB3MjtcIlxuK1x0XHQgICAgICA6XG4rXHRcdCAgICAgIDogW2N0eF0gXCJyXCIobnVsbGFibGVfY3R4KSxcbitcdFx0XHRfX2ltbV9jb25zdChsZW4sXG4rXHRcdFx0XHQgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl90ZXN0bW9kX3Rlc3RfcmVhZF9jdHgsXG4rXHRcdFx0XHRcdCAgICAgbGVuKSlcbitcdFx0ICAgICAgOiBcInIxXCIsIFwicjJcIiwgXCJtZW1vcnlcIik7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rI2lmZGVmIF9fQlBGX0ZFQVRVUkVfTE9BRF9BQ1FfU1RPUkVfUkVMXG4rU0VDKFwidHBfYnRmL2JwZl90ZXN0bW9kX3Rlc3RfbnVsbGFibGVfYmFyZV90cFwiKVxuK19fZmFpbHVyZVxuK19fbXNnKFwiQlBGX0FUT01JQyBsb2FkcyBmcm9tIFJ7e1swLTldK319IHRydXN0ZWRfcHRyX29yX251bGxfXCIpXG4raW50IEJQRl9QUk9HKGhhbmRsZV90cF9idGZfbnVsbGFibGVfbG9hZF9hY3F1aXJlLFxuK1x0ICAgICBzdHJ1Y3QgYnBmX3Rlc3Rtb2RfdGVzdF9yZWFkX2N0eCAqbnVsbGFibGVfY3R4KVxuK3tcbitcdHJldHVybiBfX2F0b21pY19sb2FkX24oXHUwMDI2bnVsbGFibGVfY3R4LVx1MDAzZWxlbiwgX19BVE9NSUNfQUNRVUlSRSk7XG4rfVxuKyNlbmRpZlxuK1xuIGNoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90cF9idGZfbnVsbGFibGVfcnVudGltZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdHBfYnRmX251bGxhYmxlX3J1bnRpbWUuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjVjOWM3Zjk0MDQwZGNcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RwX2J0Zl9udWxsYWJsZV9ydW50aW1lLmNcbkBAIC0wLDAgKzEsMzUgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuK1xuKyNpbmNsdWRlIFwidm1saW51eC5oXCJcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXHUwMDNlXG4rI2luY2x1ZGUgXCIuLi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmhcIlxuK1xuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbitcbitpbnQgbW9uaXRvcmVkX3RpZDtcbitpbnQgY2FsbHM7XG4rX191NjQgbm9ubnVsbF9sZW47XG4rX191NjQgbnVsbF9sZW47XG4rXG4rU0VDKFwidHBfYnRmL2JwZl90ZXN0bW9kX3Rlc3RfbnVsbGFibGVfYmFyZV90cFwiKVxuK2ludCBCUEZfUFJPRyhoYW5kbGVfbnVsbGFibGVfcnVudGltZSxcbitcdCAgICAgc3RydWN0IGJwZl90ZXN0bW9kX3Rlc3RfcmVhZF9jdHggKm51bGxhYmxlX2N0eClcbit7XG4rXHRfX3UzMiB0aWQgPSBicGZfZ2V0X2N1cnJlbnRfcGlkX3RnaWQoKTtcbitcdF9fdTY0IGxlbjtcbitcdGludCBjYWxsO1xuK1xuK1x0aWYgKHRpZCAhPSBtb25pdG9yZWRfdGlkKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGxlbiA9IG51bGxhYmxlX2N0eC1cdTAwM2VsZW47XG4rXHRjYWxsID0gY2FsbHMrKztcbitcbitcdGlmIChjYWxsID09IDApXG4rXHRcdG5vbm51bGxfbGVuID0gbGVuO1xuK1x0ZWxzZSBpZiAoY2FsbCA9PSAxKVxuK1x0XHRudWxsX2xlbiA9IGxlbjtcbitcbitcdHJldHVybiAwO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbHNtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbHNtLmNcbmluZGV4IGM3MjRiZjM4OWY1YzYuLmZhYzEzM2Q5MGY1ZTYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbHNtLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sc20uY1xuQEAgLTE2MiwxMyArMTYyLDEzIEBAIF9fbmFrZWQgaW50IGRpc2FibGVkX2hvb2tfdGVzdDModm9pZCAqY3R4KVxuIFxuIFNFQyhcImxzbS9tbWFwX2ZpbGVcIilcbiBfX2Rlc2NyaXB0aW9uKFwibm90IG51bGwgY2hlY2tpbmcgbnVsbGFibGUgcG9pbnRlciBpbiBicGZfbHNtX21tYXBfZmlsZVwiKVxuLV9fZmFpbHVyZSBfX21zZyhcIlIxIGludmFsaWQgbWVtIGFjY2VzcyAndHJ1c3RlZF9wdHJfb3JfbnVsbF8nXCIpXG4rX19zdWNjZXNzXG4gaW50IEJQRl9QUk9HKG5vX251bGxfY2hlY2ssIHN0cnVjdCBmaWxlICpmaWxlKVxuIHtcbi1cdHN0cnVjdCBpbm9kZSAqaW5vZGU7XG4rXHRpbm9fdCBpbm87XG4gXG4tXHRpbm9kZSA9IGZpbGUtXHUwMDNlZl9pbm9kZTtcbi1cdF9fc2luayhpbm9kZSk7XG4rXHRpbm8gPSBmaWxlLVx1MDAzZWZfaW5vZGUtXHUwMDNlaV9pbm87XG4rXHRfX3NpbmsoaW5vKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0xODgsNiArMTg4LDE2IEBAIGludCBCUEZfUFJPRyhudWxsX2NoZWNrLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcdHJldHVybiAwO1xuIH1cbiBcbitTRUMoXCJsc20vbW1hcF9maWxlXCIpXG4rX19kZXNjcmlwdGlvbihcInN0b3JlIHRocm91Z2ggdHJ1c3RlZC1vci1udWxsIGZpbGUgaXMgcmVqZWN0ZWRcIilcbitfX2ZhaWx1cmVcbitfX21zZyhcIlJ7e1swLTldK319IGludmFsaWQgbWVtIGFjY2VzcyAndHJ1c3RlZF9wdHJfb3JfbnVsbF8nXCIpXG4raW50IEJQRl9QUk9HKHN0b3JlX3Rocm91Z2hfdHJ1c3RlZF9vcl9udWxsX2ZpbGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuK3tcbitcdGZpbGUtXHUwMDNlZl9mbGFncyA9IDA7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gU0VDKFwibHNtX2Nncm91cC9maWxlX29wZW5cIilcbiBfX2Rlc2NyaXB0aW9uKFwic2xlZXBhYmxlIGxzbV9jZ3JvdXAgcHJvZ3JhbSBpcyByZWplY3RlZFwiKVxuIF9fZmFpbHVyZSBfX21zZyhcIlByb2dyYW0gb2YgdGhpcyB0eXBlIGNhbm5vdCBiZSBzbGVlcGFibGVcIilcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdmZzX2FjY2VwdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3Zmc19hY2NlcHQuY1xuaW5kZXggNTUzOThjMDQyOTBhOC4uMTdjMTU0MmNjN2UxNyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl92ZnNfYWNjZXB0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl92ZnNfYWNjZXB0LmNcbkBAIC0xMDAsNCArMTAwLDE4IEBAIGludCBCUEZfUFJPRyhpbm9kZV9yZW5hbWUsIHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbitTRUMoXCJsc20ucy9pbm9kZV9yZW5hbWVcIilcbitfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcbitfX21zZyhcIlJ7e1swLTldK319PXRydXN0ZWRfcHRyX29yX251bGxfaW5vZGVcIilcbitpbnQgQlBGX1BST0coaW5vZGVfcmVuYW1lX25vX251bGxfY2hlY2ssIHN0cnVjdCBpbm9kZSAqb2xkX2RpcixcbitcdCAgICAgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpuZXdfZGlyLFxuK1x0ICAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5LCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4re1xuK1x0aW5vX3QgaW5vID0gbmV3X2RlbnRyeS1cdTAwM2VkX2lub2RlLVx1MDAzZWlfaW5vO1xuK1xuK1x0aWYgKGlubyA9PSAwKVxuK1x0XHRyZXR1cm4gLUVBQ0NFUztcbitcdHJldHVybiAwO1xuK31cbitcbiBjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3Zmc19yZWplY3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl92ZnNfcmVqZWN0LmNcbmluZGV4IDhmMGM0NTQyMWY4OTMuLjJhMDgxMzI1ODE4M2UgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdmZzX3JlamVjdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdmZzX3JlamVjdC5jXG5AQCAtMTU5LDE4ICsxNTksNCBAQCBpbnQgQlBGX1BST0cocGF0aF9kX3BhdGhfa2Z1bmNfbm9uX2xzbSwgc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBmaWxlICpmKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLVNFQyhcImxzbS5zL2lub2RlX3JlbmFtZVwiKVxuLV9fZmFpbHVyZSBfX21zZyhcImludmFsaWQgbWVtIGFjY2VzcyAndHJ1c3RlZF9wdHJfb3JfbnVsbF8nXCIpXG4taW50IEJQRl9QUk9HKGlub2RlX3JlbmFtZSwgc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxuLVx0ICAgICBzdHJ1Y3QgaW5vZGUgKm5ld19kaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnksXG4tXHQgICAgIHVuc2lnbmVkIGludCBmbGFncylcbi17XG4tXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbmV3X2RlbnRyeS1cdTAwM2VkX2lub2RlO1xuLVx0aW5vX3QgaW5vO1xuLVxuLVx0aW5vID0gaW5vZGUtXHUwMDNlaV9pbm87XG4tXHRpZiAoaW5vID09IDApXG4tXHRcdHJldHVybiAtRUFDQ0VTO1xuLVx0cmV0dXJuIDA7XG4tfVxuIGNoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuY1xuaW5kZXggZjc5OGJiYmI0ZDEzYy4uMmJhNmE4M2QyNDNmNSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcbkBAIC03MDIsNiArNzAyLDcgQEAgYnBmX3Rlc3Rtb2RfdGVzdF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qga29iamVjdCAqa29iaixcbiBcdGlmIChicGZfdGVzdG1vZF9sb29wX3Rlc3QoMTAxKSBcdTAwM2UgMTAwKVxuIFx0XHR0cmFjZV9icGZfdGVzdG1vZF90ZXN0X3JlYWQoY3VycmVudCwgXHUwMDI2Y3R4KTtcbiBcbitcdHRyYWNlX2JwZl90ZXN0bW9kX3Rlc3RfbnVsbGFibGVfYmFyZV90cChcdTAwMjZjdHgpO1xuIFx0dHJhY2VfYnBmX3Rlc3Rtb2RfdGVzdF9udWxsYWJsZV9iYXJlX3RwKE5VTEwpO1xuIFxuIFx0LyogTWFnaWMgbnVtYmVyIHRvIGVuYWJsZSB3cml0YWJsZSB0cCAqL1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NjaGVkX2V4dC9tYXliZV9udWxsX2ZhaWxfZHNwLmJwZi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2NoZWRfZXh0L21heWJlX251bGxfZmFpbF9kc3AuYnBmLmNcbmluZGV4IGVjNzI0ZDdiMzNkMTguLmVjYWEzNjM1NWNhZWMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zY2hlZF9leHQvbWF5YmVfbnVsbF9mYWlsX2RzcC5icGYuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2NoZWRfZXh0L21heWJlX251bGxfZmFpbF9kc3AuYnBmLmNcbkBAIC03LDE0ICs3LDEzIEBAXG4gXG4gY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuIFxuLXU2NCB2dGltZV90ZXN0O1xuLVxuIHZvaWQgQlBGX1NUUlVDVF9PUFMobWF5YmVfbnVsbF9ydW5uaW5nLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4ge31cbiBcbiB2b2lkIEJQRl9TVFJVQ1RfT1BTKG1heWJlX251bGxfZmFpbF9kaXNwYXRjaCwgczMyIGNwdSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuIHtcbi1cdHZ0aW1lX3Rlc3QgPSBwLVx1MDAzZXNjeC5kc3FfdnRpbWU7XG4rXHQvKiBQb2ludGVyIGFyaXRobWV0aWMgb24gYSB0cnVzdGVkLW9yLU5VTEwgcG9pbnRlciBtdXN0IGJlIHJlamVjdGVkLiAqL1xuK1x0YXNtIHZvbGF0aWxlKFwiJVtwXSArPSAwXCIgOiBbcF0gXCIrclwiKHApKTtcbiB9XG4gXG4gU0VDKFwiLnN0cnVjdF9vcHMubGlua1wiKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjA6MjE6MzcuMjM3MjYzOTU2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjgzMTc4MjIxNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBTZXJpZXMgZm9yIEtNU0FOIE5lZWRzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIHNlcmllcyBuZWNlc3NpdGF0ZXMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLCBiZXlvbmQgdGhlIHN0YW5kYXJkIEtBU0FOIGNvdmVyYWdlIHdlIGFscmVhZHkgaGF2ZS4gV2UgbmVlZCB0byBiZSBvbiB0aGUgbG9va291dCBmb3IgY29kZSBjaGFuZ2VzIHRoYXQgKmludHJvZHVjZSogb3IgKmV4cG9zZSogdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHRoZSBraW5kIG9mIGlzc3VlcyBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gY2F0Y2guXG5cbkZpcnN0LCBJJ20gZm9jdXNpbmcgb24gdGhlIGNoYW5nZXMuXG5cbjEuICBgZnMvZXhlYy5jYDogVGhpcyBjaGFuZ2UsIHNldHRpbmcgYGJwcm0tXHUwMDNlbW0gPSBOVUxMYCwgaXMgYSBtZW1vcnkgbWFuYWdlbWVudCBsaWZlY3ljbGUgY2hhbmdlLiBJdCdzIGFib3V0IHByZXZlbnRpbmcgVUFGIGFuZCBkYW5nbGluZyBwb2ludGVyIHByb2JsZW1zLiBUaGlzIHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHByZWNhdXRpb247IGhvd2V2ZXIsIGl0J3MgYWJvdXQgbWFraW5nIGNvZGUgc2FmZSBub3QgYWJvdXQgaW50cm9kdWNpbmcgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBJIGRvbid0IHNlZSBhbnl0aGluZyBoZXJlIHRoYXQgc2NyZWFtcyBmb3IgS01TQU4gYXR0ZW50aW9uLlxuXG4yLiAgYGluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhgLCBga2VybmVsL2JwZi92ZXJpZmllci5jYDogVGhpcyBpcyB0aGUgaW50ZXJlc3Rpbmcgc2VjdGlvbi4gV2UncmUgZ2V0dGluZyBhIGJ1bmNoIG9mIHVwZGF0ZXMgcmVsYXRlZCB0byBCUEYgYW5kIGBCVEZgLiBXZSdyZSBlbmFibGluZyBzYWZlIGRlcmVmZXJlbmNpbmcgYW5kIGFsbG93aW5nIEJQRiB0byBzYWZlbHkgYWNjZXNzIGBicHJtLVx1MDAzZW1tYC4gVGhlIGFkZGl0aW9uIG9mIGBicGZfaXNfdHJ1c3RlZF9vcl9udWxsX2J0Zl9wdHJgIGFuZCBhbGxvd2luZyBmYXVsdC1wcm90ZWN0ZWQgZGVyZWZlcmVuY2VzIHNvdW5kcyBsaWtlIGl0IGNvdWxkIHBvdGVudGlhbGx5IGludHJvZHVjZSBzdWJ0bGUgaXNzdWVzLiBUaGUgYFBUUl9VTlRSVVNURURgIG1hcmtpbmcgaXMgaW50ZXJlc3RpbmcuIFdoaWxlIHRoaXMgc2VjdGlvbiBkZWFscyB3aXRoIHBvdGVudGlhbGx5IGFjY2Vzc2luZyBtZW1vcnksIGl0J3MgcHJpbWFyaWx5IGFib3V0ICpjb250cm9sbGluZyogYWNjZXNzLiBUaGUgZ29hbCBhcHBlYXJzIHRvIGJlICpwcmV2ZW50aW9uKiBvZiBiYWQgdGhpbmdzIGhhcHBlbmluZywgbm90IHRoZSAqaW50cm9kdWN0aW9uKiBvZiB1bmluaXRpYWxpemVkIHJlYWQgcmlza3MuIFRoZSBjaGFuZ2VzIGFyZSBkZXNpZ25lZCB0byBwcm90ZWN0IGFnYWluc3QgZmF1bHRpbmcgYW5kIGRlcmVmZXJlbmNpbmcgbnVsbCBwb2ludGVycy4gV2UncmUgbWFraW5nIHRoaW5ncyAqc2FmZXIqLCBub3QgbmVjZXNzYXJpbHkgcmlza2llciBmcm9tIGEgS01TQU4gcGVyc3BlY3RpdmUuIFdlIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoaXMgYmVjYXVzZSB0aGUgYFBUUl9VTlRSVVNURURgIG1pZ2h0IGhhdmUgdW5pbml0aWFsaXplZCByZWFkLlxuXG4zLiAgYGtlcm5lbC9icGYvaGVscGVycy5jYDogTm93IHdlJ3JlIGdldHRpbmcgdG8gdGhlIGhlYXJ0IG9mIG1lbW9yeSBjb3B5aW5nOiBgYnBmX2NvcHlfZnJvbV91c2VyX21tYCBhbmQgaXRzIHN0cmluZyB2YXJpYW50LCBgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cmAuIEl0IHJlZmFjdG9ycyBgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tgIHRvIHVzZSB0aGUgbmV3IGhlbHBlciwgYW5kIHJlZ2lzdGVycyBrZnVuY3MuIFRoaXMgaXMgYSBwb3RlbnRpYWwgS01TQU4gdGFyZ2V0LiBXZSBoYXZlIGBkc3RgIG1lbW9yeSB0aGF0IHdlJ3JlIGNvcHlpbmcgKmludG8qLiBUaGUgbG9naWMgaW5jbHVkZXMgY2hlY2tzIGZvciBhIG51bGwgYG1tYCwgYW5kIHNldHMgZHN0IHRvIHplcm8uIFNvIHRoZXJlIGlzIGEgcG9zc2liaWxpdHkgdGhhdCBkc3QgaXMgdW5pbml0aWFsaXplZC4gVGhlIGNoZWNrcyBmb3IgYW4gYCFtbWAgbG9vayBwcm9taXNpbmcsIGJ1dCBuZWVkIGNvbmZpcm1hdGlvbi4gSWYgd2UgZG9uJ3QgaGF2ZSBhIHZhbGlkIGBtbWAgaXQgc2V0cyBkc3QgdG8gemVyby4gVGhpcyBsb29rcyBsaWtlIGEgcmVhc29uYWJsZSBwcmVjYXV0aW9uLCBob3dldmVyLCBpZiBgbW1gICppcyogdmFsaWQsIGl0J3Mgd29ydGggY2hlY2tpbmcgYGFjY2Vzc19yZW1vdGVfdm1gLCB3aGljaCBpcyBhbiBpc3N1ZS4gV2l0aCB0aGUgYGNvcHlfcmVtb3RlX21tX3N0cmAgZnVuY3Rpb24sIHRoZXJlIGFyZSBjYXNlcyB3aGVyZSB0aGUgZGVzdGluYXRpb24gKm1pZ2h0KiBiZSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQuIEl0IHNlZW1zIGxpa2UgaXQncyB0YWtpbmcgZXh0cmEgc3RlcHMgdG8gZW5zdXJlIHRoaXMgaXMgaGFuZGxlZC4gV2l0aCBgQlBGX0ZfUEFEX1pFUk9TYCB3ZSBjYW4gYmUgc2V0dGluZyB0aGUgbWVtb3J5IHRvIHplcm8uIE5lZWQgdG8gZXhhbWluZSBgYWNjZXNzX3JlbW90ZV92bWAgYW5kIGBjb3B5X3JlbW90ZV9tbV9zdHJgIHRvIHZlcmlmeSB0aGVzZSBhc3N1bXB0aW9ucy5cblxuNC4gIGBtbS9tZW1vcnkuY2AsIGBtbS9ub21tdS5jYCwgYG1tL3V0aWwuY2AsIGBtbS9pbnRlcm5hbC5oYCwgYGluY2x1ZGUvbGludXgvbW0uaGA6IFRoaXMgaXMgbW9zdGx5IHJlZmFjdG9yaW5nIHRoZSByZW1vdGUgbWVtb3J5IGNvcHkgZnVuY3Rpb25zLCByZW5hbWluZyBhbmQgYWRkaW5nIHdyYXBwZXJzLiBUaGUga2V5IGZ1bmN0aW9uIHRvIGxvb2sgYXQgaGVyZSBpcyBgX19jb3B5X3JlbW90ZV9tbV9zdHJgIGFuZCBgY29weV9yZW1vdGVfbW1fc3RyYC4gVGhpcyBpcyB3aGVyZSB0aGUgYWN0dWFsIG1lbW9yeSBjb3B5aW5nIGhhcHBlbnMuIFdlIG5lZWQgdG8gZXhhbWluZSB0aGlzIGNvZGUgdG8gc2VlIGlmIHRoZXJlIGlzIGFueSB3aW5kb3cgaW4gd2hpY2ggdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciBpc24ndCBwcm9wZXJseSBpbml0aWFsaXplZC4gSWYgdGhlcmUncyBhIHBhcnRpYWwgcmVhZCBvciBOVUwtdGVybWluYXRpb24gaXNzdWUgd2UgbmVlZCB0byBiZSB2ZXJ5IGNvbmNlcm5lZC5cblxuNS4gIFNlbGZ0ZXN0czogR3JlYXQsIHRoZXkgYWRkZWQgdGVzdHMhIEhvd2V2ZXIsIHRlc3RpbmcgaXMgbm90IGVub3VnaC5cblxuSW4gc3VtbWFyeSwgSSBzZWUgdGhlIGdyZWF0ZXN0IHBvdGVudGlhbCBmb3IgS01TQU4gZXhwb3N1cmUgaW4gdGhlIGBicGZfY29weV9mcm9tX3VzZXJfbW1gIGZ1bmN0aW9ucyBhbmQgdGhlaXIgc3RyaW5nIHZhcmlhbnQuIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBfX2NvcHlfcmVtb3RlX21tX3N0cmAsIGBjb3B5X3JlbW90ZV9tbV9zdHJgLCBhbmQgdGhlIGNhbGxzIHdpdGhpbiB0aGUgbmV3IGhlbHBlciBmdW5jdGlvbnMgdG8gbWFrZSBhIGRlZmluaXRpdmUgZGV0ZXJtaW5hdGlvbi4gSSBhbHNvIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYWxsIG1lbW9yeSBpcyBpbml0aWFsaXplZCBhcHByb3ByaWF0ZWx5IGluIGBCUEZfRl9QQURfWkVST1NgLiBXaGlsZSB0aGUgaW50ZW50aW9uIHNlZW1zIHRvIGJlIHNhZmUsIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgY29kZSBpcyAqcHJvdmFibHkqIHNhZmUgZnJvbSB1bmluaXRpYWxpemVkIHJlYWQgcmlza3MuIFRoZSBCUEYgY2hhbmdlcyByZXF1aXJlIHRob3JvdWdoIGluc3BlY3Rpb24gcmVnYXJkaW5nIHRoZSB1c2Ugb2YgYFBUUl9VTlRSVVNURURgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzIwNiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyODIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDoyMTo0NS41NTUwOTE5MzlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxMTcyMzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fY29weV9yZW1vdGVfbW1fc3RyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9pbnRlcm5hbC5oPTI2PXN0cnVjdCBoc3RhdGU7XFxuLS1cXG5tbS9pbnRlcm5hbC5oLTI4LSNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5tbS9pbnRlcm5hbC5oOjI5OmludCBfX2NvcHlfcmVtb3RlX21tX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbm1tL2ludGVybmFsLmgtMzAtXFx0XFx0XFx0IHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncyk7XFxuLS1cXG5tbS9tZW1vcnkuYz03MzI3PUVYUE9SVF9TWU1CT0xfR1BMKGFjY2Vzc19wcm9jZXNzX3ZtKTtcXG4tLVxcbm1tL21lbW9yeS5jLTczMzMtICovXFxubW0vbWVtb3J5LmM6NzMzNDppbnQgX19jb3B5X3JlbW90ZV9tbV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5tbS9tZW1vcnkuYy03MzM1LVxcdFxcdFxcdCB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXFxuLS1cXG5tbS9ub21tdS5jPTE3NDI9RVhQT1JUX1NZTUJPTF9HUEwoYWNjZXNzX3Byb2Nlc3Nfdm0pO1xcbi0tXFxubW0vbm9tbXUuYy0xNzQ4LSAqL1xcbm1tL25vbW11LmM6MTc0OTppbnQgX19jb3B5X3JlbW90ZV9tbV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5tbS9ub21tdS5jLTE3NTAtXFx0XFx0XFx0IHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncylcXG4tLVxcbm1tL3V0aWwuYz0xMDgwPWludCBjb3B5X3JlbW90ZV9tbV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL3V0aWwuYy0xMDg1LVxcbm1tL3V0aWwuYzoxMDg2OlxcdHJldHVybiBfX2NvcHlfcmVtb3RlX21tX3N0cihtbSwgYWRkciwgYnVmLCBsZW4sIGd1cF9mbGFncyk7XFxubW0vdXRpbC5jLTEwODctfVxcbi0tXFxubW0vdXRpbC5jPTExMDI9aW50IGNvcHlfcmVtb3RlX3ZtX3N0cihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vdXRpbC5jLTExMTYtXFxubW0vdXRpbC5jOjExMTc6XFx0cmV0ID0gX19jb3B5X3JlbW90ZV9tbV9zdHIobW0sIGFkZHIsIGJ1ZiwgbGVuLCBndXBfZmxhZ3MpO1xcbm1tL3V0aWwuYy0xMTE4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDoyMTo0NS42NDYyNzc3MDhaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA0Mjg5NjQ1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBfX2NvcHlfcmVtb3RlX21tX3N0cmAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBfX2NvcHlfcmVtb3RlX21tX3N0cmAgaXMgZG9pbmcuIEdpdmVuIG15IGRlZXAga25vd2xlZGdlIG9mIG1lbW9yeSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUga2VybmVsLCBJIGltbWVkaWF0ZWx5IHRoaW5rLCBcIkxldCdzIGNyYWNrIG9wZW4gYG1tL21lbW9yeS5jYC5cIiBJdCdzIGxpa2VseSBpbiB0aGF0IGZpbGUsIGFuZCBhIGdvb2QgYmV0IGlzIGFyb3VuZCBsaW5lIDczMzQuIFRoYXQncyBhIHJlYXNvbmFibGUgc3RhcnRpbmcgcG9pbnQsIGdpdmVuIG15IGV4cGVyaWVuY2Ugd2l0aCB0aGVzZSBraW5kcyBvZiBmdW5jdGlvbnMgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlLiBJIGZpZ3VyZSBJJ2xsIHN0YXJ0IHRoZXJlIGFuZCBzZWUgd2hhdCBqdW1wcyBvdXQuIEknbSBub3QgZXhwZWN0aW5nIGEgcXVpY2sgYW5zd2VyIC0gdGhlc2UgdGhpbmdzIGFsd2F5cyB0YWtlIGEgYml0IG9mIGRpZ2dpbmcgdG8gZnVsbHkgZ3Jhc3AgdGhlIG51YW5jZXMuIExldCdzIHNlZSB3aGF0IHRoZSBjb2RlIGFjdHVhbGx5ICpzYXlzKi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAwMDYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDoyMTo0Ny42ODkxNzk4OTdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc2MzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbW9yeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDczMzAsXG4gIFwiTGluZUNvdW50XCI6IDg1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjczMzA6XFx0LypcXG43MzMxOlxcdCAqIENvcHkgYSBzdHJpbmcgZnJvbSBhbm90aGVyIHByb2Nlc3MncyBhZGRyZXNzIHNwYWNlIGFzIGdpdmVuIGluIG1tLlxcbjczMzI6XFx0ICogSWYgdGhlcmUgaXMgYW55IGVycm9yIHJldHVybiAtRUZBVUxULlxcbjczMzM6XFx0ICovXFxuNzMzNDpcXHRpbnQgX19jb3B5X3JlbW90ZV9tbV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG43MzM1OlxcdFxcdFxcdFxcdCB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXFxuNzMzNjpcXHR7XFxuNzMzNzpcXHRcXHR2b2lkICpvbGRfYnVmID0gYnVmO1xcbjczMzg6XFx0XFx0aW50IGVyciA9IDA7XFxuNzMzOTpcXHRcXG43MzQwOlxcdFxcdCooY2hhciAqKWJ1ZiA9ICdcXFxcMCc7XFxuNzM0MTpcXHRcXG43MzQyOlxcdFxcdGlmIChtbWFwX3JlYWRfbG9ja19raWxsYWJsZShtbSkpXFxuNzM0MzpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG43MzQ0OlxcdFxcbjczNDU6XFx0XFx0YWRkciA9IHVudGFnZ2VkX2FkZHJfcmVtb3RlKG1tLCBhZGRyKTtcXG43MzQ2OlxcdFxcbjczNDc6XFx0XFx0LyogQXZvaWQgdHJpZ2dlcmluZyB0aGUgdGVtcG9yYXJ5IHdhcm5pbmcgaW4gX19nZXRfdXNlcl9wYWdlcyAqL1xcbjczNDg6XFx0XFx0aWYgKCF2bWFfbG9va3VwKG1tLCBhZGRyKSkge1xcbjczNDk6XFx0XFx0XFx0ZXJyID0gLUVGQVVMVDtcXG43MzUwOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjczNTE6XFx0XFx0fVxcbjczNTI6XFx0XFxuNzM1MzpcXHRcXHR3aGlsZSAobGVuKSB7XFxuNzM1NDpcXHRcXHRcXHRpbnQgYnl0ZXMsIG9mZnNldCwgcmV0dmFsO1xcbjczNTU6XFx0XFx0XFx0dm9pZCAqbWFkZHI7XFxuNzM1NjpcXHRcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbjczNTc6XFx0XFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuNzM1ODpcXHRcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IE5VTEw7XFxuNzM1OTpcXHRcXG43MzYwOlxcdFxcdFxcdHBhZ2UgPSBnZXRfdXNlcl9wYWdlX3ZtYV9yZW1vdGUobW0sIGFkZHIsIGd1cF9mbGFncywgXFx1MDAyNnZtYSk7XFxuNzM2MTpcXHRcXHRcXHRpZiAoSVNfRVJSKHBhZ2UpKSB7XFxuNzM2MjpcXHRcXHRcXHRcXHQvKlxcbjczNjM6XFx0XFx0XFx0XFx0ICogVHJlYXQgYXMgYSB0b3RhbCBmYWlsdXJlIGZvciBub3cgdW50aWwgd2UgZGVjaWRlIGhvd1xcbjczNjQ6XFx0XFx0XFx0XFx0ICogdG8gaGFuZGxlIHRoZSBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1QgY2FzZSBhbmRcXG43MzY1OlxcdFxcdFxcdFxcdCAqIHN0YWNrIGV4cGFuc2lvbi5cXG43MzY2OlxcdFxcdFxcdFxcdCAqL1xcbjczNjc6XFx0XFx0XFx0XFx0KihjaGFyICopYnVmID0gJ1xcXFwwJztcXG43MzY4OlxcdFxcdFxcdFxcdGVyciA9IC1FRkFVTFQ7XFxuNzM2OTpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG43MzcwOlxcdFxcdFxcdH1cXG43MzcxOlxcdFxcbjczNzI6XFx0XFx0XFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xcbjczNzM6XFx0XFx0XFx0Ynl0ZXMgPSBsZW47XFxuNzM3NDpcXHRcXHRcXHRvZmZzZXQgPSBhZGRyIFxcdTAwMjYgKFBBR0VfU0laRSAtIDEpO1xcbjczNzU6XFx0XFx0XFx0aWYgKGJ5dGVzIFxcdTAwM2UgUEFHRV9TSVpFIC0gb2Zmc2V0KVxcbjczNzY6XFx0XFx0XFx0XFx0Ynl0ZXMgPSBQQUdFX1NJWkUgLSBvZmZzZXQ7XFxuNzM3NzpcXHRcXG43Mzc4OlxcdFxcdFxcdG1hZGRyID0ga21hcF9sb2NhbF9mb2xpbyhmb2xpbywgZm9saW9fcGFnZV9pZHgoZm9saW8sIHBhZ2UpICogUEFHRV9TSVpFKTtcXG43Mzc5OlxcdFxcdFxcdHJldHZhbCA9IHN0cnNjcHkoYnVmLCBtYWRkciArIG9mZnNldCwgYnl0ZXMpO1xcbjczODA6XFx0XFx0XFx0aWYgKHJldHZhbCBcXHUwMDNlPSAwKSB7XFxuNzM4MTpcXHRcXHRcXHRcXHQvKiBGb3VuZCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcgKi9cXG43MzgyOlxcdFxcdFxcdFxcdGJ1ZiArPSByZXR2YWw7XFxuNzM4MzpcXHRcXHRcXHRcXHRmb2xpb19yZWxlYXNlX2ttYXAoZm9saW8sIG1hZGRyKTtcXG43Mzg0OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjczODU6XFx0XFx0XFx0fVxcbjczODY6XFx0XFxuNzM4NzpcXHRcXHRcXHRidWYgKz0gYnl0ZXMgLSAxO1xcbjczODg6XFx0XFx0XFx0LypcXG43Mzg5OlxcdFxcdFxcdCAqIEJlY2F1c2Ugc3Ryc2NweSBhbHdheXMgTlVMIHRlcm1pbmF0ZXMgd2UgbmVlZCB0b1xcbjczOTA6XFx0XFx0XFx0ICogY29weSB0aGUgbGFzdCBieXRlIGluIHRoZSBwYWdlIGlmIHdlIGFyZSBnb2luZyB0b1xcbjczOTE6XFx0XFx0XFx0ICogbG9hZCBtb3JlIHBhZ2VzXFxuNzM5MjpcXHRcXHRcXHQgKi9cXG43MzkzOlxcdFxcdFxcdGlmIChieXRlcyAhPSBsZW4pIHtcXG43Mzk0OlxcdFxcdFxcdFxcdGFkZHIgKz0gYnl0ZXMgLSAxO1xcbjczOTU6XFx0XFx0XFx0XFx0Y29weV9mcm9tX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIGFkZHIsIGJ1ZiwgbWFkZHIgKyAoUEFHRV9TSVpFIC0gMSksIDEpO1xcbjczOTY6XFx0XFx0XFx0XFx0YnVmICs9IDE7XFxuNzM5NzpcXHRcXHRcXHRcXHRhZGRyICs9IDE7XFxuNzM5ODpcXHRcXHRcXHR9XFxuNzM5OTpcXHRcXHRcXHRsZW4gLT0gYnl0ZXM7XFxuNzQwMDpcXHRcXG43NDAxOlxcdFxcdFxcdGZvbGlvX3JlbGVhc2Vfa21hcChmb2xpbywgbWFkZHIpO1xcbjc0MDI6XFx0XFx0fVxcbjc0MDM6XFx0XFxuNzQwNDpcXHRvdXQ6XFxuNzQwNTpcXHRcXHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcXG43NDA2OlxcdFxcdGlmIChlcnIpXFxuNzQwNzpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjc0MDg6XFx0XFx0cmV0dXJuIGJ1ZiAtIG9sZF9idWY7XFxuNzQwOTpcXHR9XFxuNzQxMDpcXHQjZW5kaWYgLyogQ09ORklHX0JQRl9TWVNDQUxMICovXFxuNzQxMTpcXHRcXG43NDEyOlxcdC8qXFxuNzQxMzpcXHQgKiBQcmludCB0aGUgbmFtZSBvZiBhIFZNQS5cXG43NDE0OlxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDoyMTo0Ny42ODk4NjAxMTdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTExNjEwMTU2MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIFByb3Bvc2VkIEtlcm5lbCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBtZXRpY3Vsb3VzbHkuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggcHJpbWFyaWx5IGZvY3VzZXMgb24gcmVmYWN0b3JpbmcgYW5kIHRpZ2h0ZW5pbmcgdXAgc29tZSBCUEYgZnVuY3Rpb25hbGl0eSB3aXRoIGEgZm9jdXMgb24gc2FmZXR5IGFuZCBjb3JyZWN0bmVzcywgcmF0aGVyIHRoYW4gaW50cm9kdWNpbmcgYW55IG5vdmVsIG1lbW9yeSBpbml0aWFsaXphdGlvbiBpc3N1ZXMuIExldCdzIGRlbHZlIGludG8gdGhlIGRldGFpbHMuXG5cblRoZSBmaXJzdCBwb2ludCB0byBjb25zaWRlciBpcyB0aGUgcmVmYWN0b3Jpbmcgb2YgdGhlIEJQRiBoZWxwZXJzIHVzZWQgZm9yIGNvcHlpbmcgZGF0YSBmcm9tIHVzZXIgc3BhY2UuIFNwZWNpZmljYWxseSwgYGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrYCBhbmQgYGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3N0cmAgYXJlIGJlaW5nIHJldmFtcGVkIHRvIHVzZSBgYnBmX2NvcHlfZnJvbV91c2VyX21tYCBhbmQgYGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHJgIHJlc3BlY3RpdmVseSwgd2hpY2ggb3BlcmF0ZSBkaXJlY3RseSBvbiBgc3RydWN0IG1tX3N0cnVjdCAqYC4gVGhpcyBpcyBhIGNsZWFyIGltcHJvdmVtZW50IGluIHRlcm1zIG9mIGNvZGUgb3JnYW5pemF0aW9uIGFuZCByZXVzYWJpbGl0eSwgYWxsb3dpbmcgZnVuY3Rpb25zIGxpa2UgYGNvcHlfcmVtb3RlX21tX3N0cmAgKHdoaWNoIGhhbmRsZXMgdGhlIGFjdHVhbCBtZW1vcnkgdHJhbnNmZXIpIHRvIGJlIHVzZWQgd2l0aCBkaWZmZXJlbnQgbWVtb3J5IHNwYWNlcy4gSW1wb3J0YW50bHksIHRoZSBkZXNpZ24gb2YgdGhlc2Uga2Z1bmNzLCBwYXJ0aWN1bGFybHkgcmVnYXJkaW5nIGBkc3RgLCBpcyB3ZWxsLXVuZGVyc3Rvb2Q6IG1lbW9yeSBmb3IgYGRzdGAgaXMgZWl0aGVyIHplcm9lZCBvbiBmYWlsdXJlIG9yIGluaXRpYWxpemVkIHVzaW5nIGhlbHBlcnMgbGlrZSBgYWNjZXNzX3JlbW90ZV92bWAgb3IgYGNvcHlfcmVtb3RlX21tX3N0cmAuIFRoZSBleGlzdGluZyBsb2dpYyBmb3IgemVyb2luZyBvdXQgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciBvbiBmYWlsdXJlL3BhcnRpYWwgY29weSByZW1haW5zIGludGFjdCwgd2hpY2ggaXMgY3JpdGljYWwuIFRoZSBjb25jZXJuIGhlcmUgaXMgbm90IGludHJvZHVjaW5nIGEgY2FzZSBvZiByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgZGF0YS5cblxuVGhlIGBmcmVlX2Jwcm1gIGNoYW5nZSwgd2hlcmUgYGJwcm0tXHUwMDNlbW1gIGlzIGV4cGxpY2l0bHkgc2V0IHRvIGBOVUxMYCAqYmVmb3JlKiBgbW1wdXQobW0pYCBpcyBjYWxsZWQsIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGFuZCBjb3JyZWN0IGFwcHJvYWNoIHRvIGF2b2lkIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSAoVUFGKSBzY2VuYXJpb3MuIFRoaXMgZXhwbGljaXRseSBudWxsaWZpZXMgdGhlIHBvaW50ZXIgYWZ0ZXIgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IG9wZXJhdGlvbi4gS0FTQU4gd291bGQgYmUgdGhlIHRvb2wgdG8gZGV0ZWN0IGFueSBpc3N1ZXMgcmVsYXRlZCB0byB0aGlzIHBvaW50ZXIuXG5cblRoZSB2ZXJpZmllciBjaGFuZ2VzIGFyZSBhbHNvIGNydWNpYWwuIFRoZSBwYXRjaCBpcyBhbGxvd2luZyB0aGUgQlBGIHByb2dyYW1zIHRvIHJlYWQgdHJ1c3RlZC1vci1udWxsIHBvaW50ZXJzLCBwcm90ZWN0ZWQgYnkgZmF1bHQtc2FmZSBvcGVyYXRpb25zLiBUaGlzIG1lY2hhbmlzbSB0cmFuc2Zvcm1zIHBvaW50ZXIgbG9hZHMgaW50byBwcm9iZSByZWFkcywgYW5kIG1hcmtzIHRoZSByZXRyaWV2ZWQgcG9pbnRlciBhcyB1bnRydXN0ZWQsIHdoaWNoIGlzIGVzc2VudGlhbCBmb3IgZW5zdXJpbmcgdGhhdCBCUEYgcHJvZ3JhbXMgY2Fubm90IGRpcmVjdGx5IGRlcmVmZXJlbmNlIGFyYml0cmFyeSB1c2VyLXByb3ZpZGVkIGFkZHJlc3Nlcy4gVGhpcyBhbHNvIGV4dGVuZHMgdG8gdHJlYXRpbmcgYGJwcm0tXHUwMDNlbW1gIGFzIHRydXN0ZWQtb3ItbnVsbC4gVGhpcyBpcyBhbGwgYWJvdXQgZW5oYW5jaW5nIHRoZSBzYWZldHkgb2YgdGhlIEJQRiBlbnZpcm9ubWVudC4gSXTigJlzIGFib3V0IHZlcmlmeWluZyB3aGF0IGNhbiBiZSBhY2Nlc3NlZCB2aWEgQlBGLlxuXG5Ob3csIGNvbmNlcm5pbmcgS01TQU4sIG15IGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIHNob3VsZCAqbm90KiBpbnRyb2R1Y2UgS01TQU4tcmVsZXZhbnQgaXNzdWVzLiBUaGUgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHRoYXQgY291bGQgYmUgcGFydGlhbGx5IGluaXRpYWxpemVkIG9yIG5ldyBpbnN0YW5jZXMgd2hlcmUga2VybmVsIGRhdGEgY291bGQgYmUgbGVha2VkIHRvIHVzZXIgc3BhY2UgdmlhIGNvcGllcy4gVGhlIG1lbW9yeSBoYW5kbGluZyB3aXRoaW4gdGhlIEJQRiBmdW5jdGlvbnMgaXMgYWxyZWFkeSByb2J1c3QgYW5kIHdlbGwtZGVmaW5lZCwgd2l0aCB6ZXJvaW5nIG9uIGZhaWx1cmUgb3IgcGFkZGluZyBmbGFncy4gVGhlIHBvaW50ZXIgbWFuaXB1bGF0aW9uIGZvY3VzZXMgb24gdmFsaWRpdHkgYW5kIGZhdWx0IHRvbGVyYW5jZSwgbm90IGludHJvZHVjaW5nIG1lbW9yeSBpbml0aWFsaXphdGlvbiBmbGF3cy4gS0FTQU4gYW5kIHRoZSB2ZXJpZmllciB3aWxsIGhhbmRsZSBhbnkgcG90ZW50aWFsIFVBRiwgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIFRoZSBlbnRpcmUgbG9naWMgaXMgZGVzaWduZWQgdG8gcHJldmVudCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy5cblxuVGhlcmVmb3JlLCBjb25zaWRlcmluZyB0aGF0IHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBjYXNlcyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSAqY291bGQqIGJlIHJlYWQsIHdoZXJlIGRhdGEgbWlnaHQgbGVhayB0byB1c2VyIHNwYWNlLCBvciB3aGVyZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQgd2l0aG91dCBwcm9wZXIgaW5pdGlhbGl6YXRpb24sIEkgY29uY2x1ZGUgdGhhdCBgTmVlZHNLTVNBTmAgaXMgYGZhbHNlYC4gVGhlIGNoYW5nZXMgYXJlIHNhZmV0eS1mb2N1c2VkIHJlZmFjdG9yaW5nLCBhbmQgYXJlIHdlbGwgd2l0aGluIHRoZSBleGlzdGluZyBtZW1vcnkgcHJvdGVjdGlvbiBmcmFtZXdvcmssIGFuZCBhbnkgcHJvYmxlbXMgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOL3ZlcmlmaWVyIGNoZWNrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE0MTIsIk91dHB1dFRva2VucyI6MzM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMwMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIwOjIxOjU4Ljg1MDg5MTcwNFoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3NTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgQlBGIGtmdW5jcyBmb3IgY29weWluZyBtZW1vcnkgZnJvbSBhbiBhcmJpdHJhcnkgYHN0cnVjdCBtbV9zdHJ1Y3RgIChgYnBmX2NvcHlfZnJvbV91c2VyX21tYCBhbmQgYGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHJgKSwgcmVmYWN0b3JzIGV4aXN0aW5nIHRhc2stYmFzZWQgaGVscGVycyB0byB1c2UgdGhlc2UgZnVuY3Rpb25zLCBjbGVhcnMgYGJwcm0tXFx1MDAzZW1tYCBiZWZvcmUgZHJvcHBpbmcgdGhlIHJlZmVyZW5jZSBpbiBgZnJlZV9icHJtKClgLCBhbmQgdXBkYXRlcyB0aGUgQlBGIHZlcmlmaWVyIHRvIGFsbG93IGZhdWx0LXByb3RlY3RlZCBsb2FkcyB0aHJvdWdoIHRydXN0ZWQtb3ItbnVsbCBCVEYgcG9pbnRlcnMgKGBicGZfaXNfdHJ1c3RlZF9vcl9udWxsX2J0Zl9wdHJgKS5cXG5cXG5LTVNBTiB2cyBLQVNBTiBBcHBsaWNhYmlsaXR5Olxcbi0gS01TQU4gZGV0ZWN0cyByZWFkcyBvZiB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAvcGFnZSBtZW1vcnkgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBkaXNjbG9zdXJlIChpbmZvLWxlYWtzKS5cXG4tIEtBU0FOIC8gTE9DS0RFUCBkZXRlY3QgbWVtb3J5IGNvcnJ1cHRpb25zLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLCBhbmQgbG9ja2luZyBlcnJvcnMuXFxuLSBUaGUgbmV3IEJQRiBjb3B5IGtmdW5jcyBwcm9wZXJseSBoYW5kbGUgbWVtb3J5IGluaXRpYWxpemF0aW9uOiBhbnkgZGVzdGluYXRpb24gYnVmZmVycyBhcmUgZWl0aGVyIGZ1bGx5IHdyaXR0ZW4gb3IgZXhwbGljaXRseSB6ZXJvZWQgdmlhIGBtZW1zZXQoKWAgdXBvbiBmYWlsdXJlLCBwYXJ0aWFsIHJlYWRzLCBvciB3aGVuIGBCUEZfRl9QQURfWkVST1NgIGlzIHJlcXVlc3RlZC5cXG4tIE5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgc3RhY2sgYWxsb2NhdGlvbnMsIG9yIGtlcm5lbC10by11c2VyIGxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuXFxuLSBWZXJpZmllciB0eXBlIHRyYWNraW5nIGFuZCByZWZlcmVuY2UgY291bnRpbmcgY2hhbmdlcyByZWxhdGUgdG8gcG9pbnRlciB2YWxpZGl0eSBhbmQgZmF1bHQgaGFuZGxpbmcsIGFyZWFzIHdoZXJlIEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMgYXJlIGFwcGxpY2FibGUsIG5vdCBLTVNBTi5cXG5cXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBCUEYga2Z1bmNzIGZvciBjb3B5aW5nIG1lbW9yeSBmcm9tIGFuIGFyYml0cmFyeSBgc3RydWN0IG1tX3N0cnVjdGAgKGBicGZfY29weV9mcm9tX3VzZXJfbW1gIGFuZCBgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cmApLCByZWZhY3RvcnMgZXhpc3RpbmcgdGFzay1iYXNlZCBoZWxwZXJzIHRvIHVzZSB0aGVzZSBmdW5jdGlvbnMsIGNsZWFycyBgYnBybS1cXHUwMDNlbW1gIGJlZm9yZSBkcm9wcGluZyB0aGUgcmVmZXJlbmNlIGluIGBmcmVlX2Jwcm0oKWAsIGFuZCB1cGRhdGVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gYWxsb3cgZmF1bHQtcHJvdGVjdGVkIGxvYWRzIHRocm91Z2ggdHJ1c3RlZC1vci1udWxsIEJURiBwb2ludGVycyAoYGJwZl9pc190cnVzdGVkX29yX251bGxfYnRmX3B0cmApLlxcblxcbktNU0FOIHZzIEtBU0FOIEFwcGxpY2FiaWxpdHk6XFxuLSBLTVNBTiBkZXRlY3RzIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcC9wYWdlIG1lbW9yeSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGRpc2Nsb3N1cmUgKGluZm8tbGVha3MpLlxcbi0gS0FTQU4gLyBMT0NLREVQIGRldGVjdCBtZW1vcnkgY29ycnVwdGlvbnMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMsIGFuZCBsb2NraW5nIGVycm9ycy5cXG4tIFRoZSBuZXcgQlBGIGNvcHkga2Z1bmNzIHByb3Blcmx5IGhhbmRsZSBtZW1vcnkgaW5pdGlhbGl6YXRpb246IGFueSBkZXN0aW5hdGlvbiBidWZmZXJzIGFyZSBlaXRoZXIgZnVsbHkgd3JpdHRlbiBvciBleHBsaWNpdGx5IHplcm9lZCB2aWEgYG1lbXNldCgpYCB1cG9uIGZhaWx1cmUsIHBhcnRpYWwgcmVhZHMsIG9yIHdoZW4gYEJQRl9GX1BBRF9aRVJPU2AgaXMgcmVxdWVzdGVkLlxcbi0gTm8gdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBzdGFjayBhbGxvY2F0aW9ucywgb3Iga2VybmVsLXRvLXVzZXIgbGVha3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC5cXG4tIFZlcmlmaWVyIHR5cGUgdHJhY2tpbmcgYW5kIHJlZmVyZW5jZSBjb3VudGluZyBjaGFuZ2VzIHJlbGF0ZSB0byBwb2ludGVyIHZhbGlkaXR5IGFuZCBmYXVsdCBoYW5kbGluZywgYXJlYXMgd2hlcmUgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllcyBhcmUgYXBwbGljYWJsZSwgbm90IEtNU0FOLlxcblxcblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowmrdxc[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-07 20:19:16 +0000 UTC FinishedAt: 2026-09-07 20:22:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "1b7415bf70be95b9a1e7e87d544867881065613f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "DEBUG_INFO_BTF", "BPF_LSM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "1b7415bf70be95b9a1e7e87d544867881065613f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "DEBUG_INFO_BTF", "BPF_LSM" ], "series_id": "4e99b38f-3352-4c93-9dea-5d0b879102c5" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "bpf_copy_from_user_mm", "bpf_copy_from_user_mm_str", "bpf_copy_from_user_task", "bpf_copy_from_user_task_str", "copy_remote_mm_str", "copy_remote_vm_str", "__copy_remote_mm_str", "check_ptr_to_btf_access", "type_is_trusted_or_null", "check_mem_access", "bpf_convert_ctx_accesses", "free_bprm" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjIwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0RFQlVHX0lORk9fQlRGJiMzNDssCiAgICAmIzM0O0JQRl9MU00mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfY29weV9mcm9tX3VzZXJfbW0mIzM0OywKICAgICYjMzQ7YnBmX2NvcHlfZnJvbV91c2VyX21tX3N0ciYjMzQ7LAogICAgJiMzNDticGZfY29weV9mcm9tX3VzZXJfdGFzayYjMzQ7LAogICAgJiMzNDticGZfY29weV9mcm9tX3VzZXJfdGFza19zdHImIzM0OywKICAgICYjMzQ7Y29weV9yZW1vdGVfbW1fc3RyJiMzNDssCiAgICAmIzM0O2NvcHlfcmVtb3RlX3ZtX3N0ciYjMzQ7LAogICAgJiMzNDtfX2NvcHlfcmVtb3RlX21tX3N0ciYjMzQ7LAogICAgJiMzNDtjaGVja19wdHJfdG9fYnRmX2FjY2VzcyYjMzQ7LAogICAgJiMzNDt0eXBlX2lzX3RydXN0ZWRfb3JfbnVsbCYjMzQ7LAogICAgJiMzNDtjaGVja19tZW1fYWNjZXNzJiMzNDssCiAgICAmIzM0O2JwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcyYjMzQ7LAogICAgJiMzNDtmcmVlX2Jwcm0mIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBCUEYga2Z1bmNzIGZvciBjb3B5aW5nIG1lbW9yeSBmcm9tIGFuIGFyYml0cmFyeSBgc3RydWN0IG1tX3N0cnVjdGAgKGBicGZfY29weV9mcm9tX3VzZXJfbW1gIGFuZCBgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cmApLCByZWZhY3RvcnMgZXhpc3RpbmcgdGFzay1iYXNlZCBoZWxwZXJzIHRvIHVzZSB0aGVzZSBmdW5jdGlvbnMsIGNsZWFycyBgYnBybS1cdTAwM2VtbWAgYmVmb3JlIGRyb3BwaW5nIHRoZSByZWZlcmVuY2UgaW4gYGZyZWVfYnBybSgpYCwgYW5kIHVwZGF0ZXMgdGhlIEJQRiB2ZXJpZmllciB0byBhbGxvdyBmYXVsdC1wcm90ZWN0ZWQgbG9hZHMgdGhyb3VnaCB0cnVzdGVkLW9yLW51bGwgQlRGIHBvaW50ZXJzIChgYnBmX2lzX3RydXN0ZWRfb3JfbnVsbF9idGZfcHRyYCkuXG5cbktNU0FOIHZzIEtBU0FOIEFwcGxpY2FiaWxpdHk6XG4tIEtNU0FOIGRldGVjdHMgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwL3BhZ2UgbWVtb3J5IGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgZGlzY2xvc3VyZSAoaW5mby1sZWFrcykuXG4tIEtBU0FOIC8gTE9DS0RFUCBkZXRlY3QgbWVtb3J5IGNvcnJ1cHRpb25zLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLCBhbmQgbG9ja2luZyBlcnJvcnMuXG4tIFRoZSBuZXcgQlBGIGNvcHkga2Z1bmNzIHByb3Blcmx5IGhhbmRsZSBtZW1vcnkgaW5pdGlhbGl6YXRpb246IGFueSBkZXN0aW5hdGlvbiBidWZmZXJzIGFyZSBlaXRoZXIgZnVsbHkgd3JpdHRlbiBvciBleHBsaWNpdGx5IHplcm9lZCB2aWEgYG1lbXNldCgpYCB1cG9uIGZhaWx1cmUsIHBhcnRpYWwgcmVhZHMsIG9yIHdoZW4gYEJQRl9GX1BBRF9aRVJPU2AgaXMgcmVxdWVzdGVkLlxuLSBObyB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIHN0YWNrIGFsbG9jYXRpb25zLCBvciBrZXJuZWwtdG8tdXNlciBsZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLlxuLSBWZXJpZmllciB0eXBlIHRyYWNraW5nIGFuZCByZWZlcmVuY2UgY291bnRpbmcgY2hhbmdlcyByZWxhdGUgdG8gcG9pbnRlciB2YWxpZGl0eSBhbmQgZmF1bHQgaGFuZGxpbmcsIGFyZWFzIHdoZXJlIEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMgYXJlIGFwcGxpY2FibGUsIG5vdCBLTVNBTi5cblxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IHNsZWVwYWJsZSBCUEYga2Z1bmNzIChicGZfY29weV9mcm9tX3VzZXJfbW0gYW5kIGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIpLCByZWZhY3RvcnMgcmVtb3RlIE1NIHN0cmluZyBjb3B5aW5nIGhlbHBlcnMgYWNyb3NzIG1tLyBhbmQga2VybmVsL2JwZi8sIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gYWxsb3cgZmF1bHQtcHJvdGVjdGVkIGxvYWRzIHRocm91Z2ggdHJ1c3RlZC1vci1udWxsIHBvaW50ZXJzLCBhbmQgYWx0ZXJzIG1tIGNsZWFudXAgaW4gZnJlZV9icHJtKCkuIFRoZXNlIGNoYW5nZXMgdG91Y2ggY29yZSBCUEYgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IGV4ZWN1dGlvbiBwYXRocyByZWFjaGFibGUgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMgdmlhIEJQRiBhbmQgZXhlYyBzeXNjYWxscy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMDoyMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGRiNzdhZjY2YjNhYTA3YjEzZGM4M2FhZmNhMWI4YjBhMDI5MWExZmJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDIwOjIwOjUzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4ZWMuYyBiL2ZzL2V4ZWMuY1xuaW5kZXggNzQ1ZjZlYjUyNzllNi4uNGRkZDQwM2ZkOTFjNyAxMDA2NDRcbi0tLSBhL2ZzL2V4ZWMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXhlYy5jXG5AQCAtMTQ1Niw5ICYjNDM7MTQ1NiwxMiBAQCB2b2lkIGJwcm1fZHJvcF9sb2FkZXIoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbiBcbiBzdGF0aWMgdm9pZCBmcmVlX2Jwcm0oc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbiB7XG4tXHRpZiAoYnBybS1cdTAwM2VtbSkge1xuJiM0MztcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gYnBybS1cdTAwM2VtbTtcbiYjNDM7XG4mIzQzO1x0aWYgKG1tKSB7XG4gXHRcdGFjY3RfYXJnX3NpemUoYnBybSwgMCk7XG4tXHRcdG1tcHV0KGJwcm0tXHUwMDNlbW0pO1xuJiM0MztcdFx0YnBybS1cdTAwM2VtbSA9IE5VTEw7XG4mIzQzO1x0XHRtbXB1dChtbSk7XG4gXHR9XG4gXHRpZiAoYnBybS1cdTAwM2V1c2VyX25zKVxuIFx0XHRwdXRfdXNlcl9ucyhicHJtLVx1MDAzZXVzZXJfbnMpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmggYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG5pbmRleCA5NzI3ZGY1YWY4M2FiLi40ZjAzMmFkODNjNjc1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuQEAgLTEzMzksNiAmIzQzOzEzMzksMTEgQEAgc3RhdGljIGlubGluZSBib29sIGJwZl9pc19wdHJfdG9fbWVtX29yX2J0Zl9pZChlbnVtIGJwZl9yZWdfdHlwZSB0eXBlKVxuIFx0fVxuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGJwZl9pc190cnVzdGVkX29yX251bGxfYnRmX3B0cihlbnVtIGJwZl9yZWdfdHlwZSB0eXBlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHR5cGUgPT0gKFBUUl9UT19CVEZfSUQgfCBQVFJfVFJVU1RFRCB8IFBUUl9NQVlCRV9OVUxMKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIGJvb2wgYnBmX21heV9mYXVsdF9vbl9kZXJlZihlbnVtIGJwZl9yZWdfdHlwZSB0eXBlKVxuIHtcbiBcdC8qXG5AQCAtMTM0Niw3ICYjNDM7MTM1MSw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBicGZfbWF5X2ZhdWx0X29uX2RlcmVmKGVudW0gYnBmX3JlZ190eXBlIHR5cGUpXG4gXHQgKiBwcm90ZWN0aW9uLCB0aGF0IGlzLCB0aGUgb25lcyBicGZfY29udmVydF9jdHhfYWNjZXNzZXMoKSBoYXMgdG9cbiBcdCAqIHR1cm4gYSBCUEZfTERYIGludG8gYSBCUEZfUFJPQkVfTUVNIG9uZSBmb3IuXG4gXHQgKi9cbi1cdHJldHVybiB0eXBlID09IFBUUl9UT19CVEZfSUQgfHwgKHR5cGVfZmxhZyh0eXBlKSBcdTAwMjYgUFRSX1VOVFJVU1RFRCk7XG4mIzQzO1x0cmV0dXJuIHR5cGUgPT0gUFRSX1RPX0JURl9JRCB8fFxuJiM0MztcdCAgICAgICAodHlwZV9mbGFnKHR5cGUpIFx1MDAyNiBQVFJfVU5UUlVTVEVEKSB8fFxuJiM0MztcdCAgICAgICBicGZfaXNfdHJ1c3RlZF9vcl9udWxsX2J0Zl9wdHIodHlwZSk7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBicGZfcHJvZ19oYXNfYXJlbmFfY3R4X2FyZyhjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oXG5pbmRleCBkZDA5YzQzOGZhMjNlLi5kNWJkZTFmNzFhOTdlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tLmhcbkBAIC0zMzI2LDYgJiM0MzszMzI2LDggQEAgZXh0ZXJuIGludCBhY2Nlc3NfcmVtb3RlX3ZtKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncyk7XG4gXG4gI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxuJiM0MztleHRlcm4gaW50IGNvcHlfcmVtb3RlX21tX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuJiM0MztcdFx0XHQgICAgICB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpO1xuIGV4dGVybiBpbnQgY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdFx0ICAgICAgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKTtcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2hlbHBlcnMuYyBiL2tlcm5lbC9icGYvaGVscGVycy5jXG5pbmRleCBiM2NjNWM4ZmM4NzU2Li5kM2M1NjQ0MzdhZDA2IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9oZWxwZXJzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvaGVscGVycy5jXG5AQCAtMzIsNiAmIzQzOzMyLDEwIEBAXG4gXG4gI2luY2x1ZGUgXCYjMzQ7Li4vLi4vbGliL2tzdHJ0b3guaFwmIzM0O1xuIFxuJiM0MztfX2JwZl9rZnVuYyBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX21tKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osXG4mIzQzO1x0XHRcdFx0ICAgICAgY29uc3Qgdm9pZCBfX3VzZXIgKnVuc2FmZV9wdHJfX2lnbixcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdTY0IGZsYWdzKTtcbiYjNDM7XG4gLyogSWYga2VybmVsIHN1YnN5c3RlbSBpcyBhbGxvd2luZyBlQlBGIHByb2dyYW1zIHRvIGNhbGwgdGhpcyBmdW5jdGlvbixcbiAgKiBpbnNpZGUgaXRzIG93biB2ZXJpZmllcl9vcHMtXHUwMDNlZ2V0X2Z1bmNfcHJvdG8oKSBjYWxsYmFjayBpdCBzaG91bGQgcmV0dXJuXG4gICogYnBmX21hcF9sb29rdXBfZWxlbV9wcm90bywgc28gdGhhdCB2ZXJpZmllciBjYW4gcHJvcGVybHkgY2hlY2sgdGhlIGFyZ3VtZW50c1xuQEAgLTY4MiwyMiAmIzQzOzY4NiwxNSBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2NvcHlfZnJvbV91c2VyX3Byb3RvID0ge1xuIEJQRl9DQUxMXzUoYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2ssIHZvaWQgKiwgZHN0LCB1MzIsIHNpemUsXG4gXHQgICBjb25zdCB2b2lkIF9fdXNlciAqLCB1c2VyX3B0ciwgc3RydWN0IHRhc2tfc3RydWN0ICosIHRzaywgdTY0LCBmbGFncylcbiB7XG4mIzQzO1x0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4gXHRpbnQgcmV0O1xuIFxuLVx0LyogZmxhZ3MgaXMgbm90IHVzZWQgeWV0ICovXG4tXHRpZiAodW5saWtlbHkoZmxhZ3MpKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cbi1cdGlmICh1bmxpa2VseSghc2l6ZSkpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0cmV0ID0gYWNjZXNzX3Byb2Nlc3Nfdm0odHNrLCAodW5zaWduZWQgbG9uZyl1c2VyX3B0ciwgZHN0LCBzaXplLCAwKTtcbi1cdGlmIChyZXQgPT0gc2l6ZSlcbi1cdFx0cmV0dXJuIDA7XG4mIzQzO1x0bW0gPSBnZXRfdGFza19tbSh0c2spO1xuJiM0MztcdHJldCA9IGJwZl9jb3B5X2Zyb21fdXNlcl9tbShkc3QsIHNpemUsIHVzZXJfcHRyLCBtbSwgZmxhZ3MpO1xuJiM0MztcdGlmIChtbSlcbiYjNDM7XHRcdG1tcHV0KG1tKTtcbiBcbi1cdG1lbXNldChkc3QsIDAsIHNpemUpO1xuLVx0LyogUmV0dXJuIC1FRkFVTFQgZm9yIHBhcnRpYWwgcmVhZCAqL1xuLVx0cmV0dXJuIHJldCBcdTAwM2MgMCA/IHJldCA6IC1FRkFVTFQ7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3Byb3RvID0ge1xuQEAgLTM2NTgsNiAmIzQzOzM2NTUsMTAwIEBAIF9fYnBmX2tmdW5jIGludCBicGZfY29weV9mcm9tX3VzZXJfc3RyKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osIGNvbnN0IHZvaWQgX191c2VyXG4gXHRyZXR1cm4gcmV0ICYjNDM7IDE7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogYnBmX2NvcHlfZnJvbV91c2VyX21tKCkgLSBDb3B5IGRhdGEgZnJvbSBhbiBhZGRyZXNzIHNwYWNlXG4mIzQzOyAqIEBkc3Q6ICAgICAgICAgICAgIERlc3RpbmF0aW9uIGFkZHJlc3MsIGluIGtlcm5lbCBzcGFjZVxuJiM0MzsgKiBAZHN0X19zejogICAgICAgICBOdW1iZXIgb2YgYnl0ZXMgdG8gY29weVxuJiM0MzsgKiBAdW5zYWZlX3B0cl9faWduOiBTb3VyY2UgYWRkcmVzcyBpbiB0aGUgYWRkcmVzcyBzcGFjZVxuJiM0MzsgKiBAbW06ICAgICAgICAgICAgICBBZGRyZXNzIHNwYWNlIHRvIGNvcHkgZnJvbVxuJiM0MzsgKiBAZmxhZ3M6ICAgICAgICAgICBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZTsgbXVzdCBiZSB6ZXJvXG4mIzQzOyAqXG4mIzQzOyAqIENvcGllcyBkYXRhIGZyb20gdGhlIHVzZXIgYWRkcmVzcyBzcGFjZSBhc3NvY2lhdGVkIHdpdGggQG1tLiBUaGUgZGVzdGluYXRpb25cbiYjNDM7ICogaXMgemVyb2VkIGlmIGFuIGF0dGVtcHRlZCBjb3B5IGNhbm5vdCBiZSBjb21wbGV0ZWQgaW4gZnVsbC4gVW5zdXBwb3J0ZWRcbiYjNDM7ICogZmxhZ3MgcmV0dXJuIC1FSU5WQUwgd2l0aG91dCBtb2RpZnlpbmcgQGRzdC5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FSU5WQUwgaWYgQGZsYWdzIGlzIG5vbi16ZXJvLCBvciAtRUZBVUxUIGlmIHRoZSBjb3B5XG4mIzQzOyAqIGZhaWxzIG9yIGlzIHBhcnRpYWwuXG4mIzQzOyAqL1xuJiM0MztfX2JwZl9rZnVuYyBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX21tKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osXG4mIzQzO1x0XHRcdFx0ICAgICAgY29uc3Qgdm9pZCBfX3VzZXIgKnVuc2FmZV9wdHJfX2lnbixcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdTY0IGZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHVubGlrZWx5KGZsYWdzKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAodW5saWtlbHkoIWRzdF9fc3opKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmICh1bmxpa2VseSghbW0pKSB7XG4mIzQzO1x0XHRtZW1zZXQoZHN0LCAwLCBkc3RfX3N6KTtcbiYjNDM7XHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWNjZXNzX3JlbW90ZV92bShtbSwgKHVuc2lnbmVkIGxvbmcpdW5zYWZlX3B0cl9faWduLFxuJiM0MztcdFx0XHQgICAgICAgZHN0LCBkc3RfX3N6LCAwKTtcbiYjNDM7XHRpZiAocmV0ID09IGRzdF9fc3opXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0bWVtc2V0KGRzdCwgMCwgZHN0X19zeik7XG4mIzQzO1x0cmV0dXJuIHJldCBcdTAwM2MgMCA/IHJldCA6IC1FRkFVTFQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKCkgLSBDb3B5IGEgc3RyaW5nIGZyb20gYW4gYWRkcmVzcyBzcGFjZVxuJiM0MzsgKiBAZHN0OiAgICAgICAgICAgICBEZXN0aW5hdGlvbiBhZGRyZXNzLCBpbiBrZXJuZWwgc3BhY2UuIFRoaXMgYnVmZmVyIG11c3QgYmVcbiYjNDM7ICogICAgICAgICAgICAgICAgICAgYXQgbGVhc3QgQGRzdF9fc3ogYnl0ZXMgbG9uZ1xuJiM0MzsgKiBAZHN0X19zejogICAgICAgICBNYXhpbXVtIG51bWJlciBvZiBieXRlcyB0byBjb3B5LCBpbmNsdWRpbmcgdGhlIHRyYWlsaW5nIE5VTFxuJiM0MzsgKiBAdW5zYWZlX3B0cl9faWduOiBTb3VyY2UgYWRkcmVzcyBpbiB0aGUgYWRkcmVzcyBzcGFjZVxuJiM0MzsgKiBAbW06ICAgICAgICAgICAgICBBZGRyZXNzIHNwYWNlIHRvIGNvcHkgZnJvbVxuJiM0MzsgKiBAZmxhZ3M6ICAgICAgICAgICBUaGUgb25seSBzdXBwb3J0ZWQgZmxhZyBpcyBCUEZfRl9QQURfWkVST1NcbiYjNDM7ICpcbiYjNDM7ICogQ29waWVzIGEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIGZyb20gdGhlIHVzZXIgYWRkcmVzcyBzcGFjZSBhc3NvY2lhdGVkIHdpdGhcbiYjNDM7ICogQG1tLiBJZiB0aGUgc3RyaW5nIGlzIHRvbyBsb25nLCBAZHN0IGlzIHN0aWxsIE5VTC10ZXJtaW5hdGVkIHVubGVzcyBAZHN0X19zelxuJiM0MzsgKiBpcyB6ZXJvLlxuJiM0MzsgKlxuJiM0MzsgKiBJZiB0aGUgZmxhZ3MgYXJlIHZhbGlkIGFuZCBCUEZfRl9QQURfWkVST1MgaXMgc2V0LCB0aGUgdW51c2VkIHBvcnRpb24gb2ZcbiYjNDM7ICogQGRzdCBpcyBjbGVhcmVkIG9uIHN1Y2Nlc3MgYW5kIGFsbCBvZiBAZHN0IGlzIGNsZWFyZWQgb24gYSBjb3B5IGZhaWx1cmUuXG4mIzQzOyAqIFVuc3VwcG9ydGVkIGZsYWdzIHJldHVybiAtRUlOVkFMIHdpdGhvdXQgbW9kaWZ5aW5nIEBkc3QuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogVGhlIG51bWJlciBvZiBjb3BpZWQgYnl0ZXMgaW5jbHVkaW5nIHRoZSBOVUwgdGVybWluYXRvciBvbiBzdWNjZXNzLFxuJiM0MzsgKiBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cbiYjNDM7ICovXG4mIzQzO19fYnBmX2tmdW5jIGludCBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osXG4mIzQzO1x0XHRcdFx0XHQgIGNvbnN0IHZvaWQgX191c2VyICp1bnNhZmVfcHRyX19pZ24sXG4mIzQzO1x0XHRcdFx0XHQgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1NjQgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAodW5saWtlbHkoZmxhZ3MgXHUwMDI2IH5CUEZfRl9QQURfWkVST1MpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGlmICh1bmxpa2VseShkc3RfX3N6ID09IDApKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmICh1bmxpa2VseSghbW0pKSB7XG4mIzQzO1x0XHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9GX1BBRF9aRVJPUylcbiYjNDM7XHRcdFx0bWVtc2V0KGRzdCwgMCwgZHN0X19zeik7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdCooY2hhciAqKWRzdCA9ICYjMzk7XFwwJiMzOTs7XG4mIzQzO1x0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IGNvcHlfcmVtb3RlX21tX3N0cihtbSwgKHVuc2lnbmVkIGxvbmcpdW5zYWZlX3B0cl9faWduLCBkc3QsIGRzdF9fc3osIDApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApIHtcbiYjNDM7XHRcdGlmIChmbGFncyBcdTAwMjYgQlBGX0ZfUEFEX1pFUk9TKVxuJiM0MztcdFx0XHRtZW1zZXQoZHN0LCAwLCBkc3RfX3N6KTtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9GX1BBRF9aRVJPUylcbiYjNDM7XHRcdG1lbXNldChkc3QgJiM0MzsgcmV0LCAwLCBkc3RfX3N6IC0gcmV0KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldCAmIzQzOyAxO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3N0cigpIC0gQ29weSBhIHN0cmluZyBmcm9tIGFuIHRhc2smIzM5O3MgYWRkcmVzcyBzcGFjZVxuICAqIEBkc3Q6ICAgICAgICAgICAgIERlc3RpbmF0aW9uIGFkZHJlc3MsIGluIGtlcm5lbCBzcGFjZS4gIFRoaXMgYnVmZmVyIG11c3QgYmVcbkBAIC0zNjgxLDI1ICYjNDM7Mzc3MiwxNiBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osXG4gXHRcdFx0XHRcdCAgICBjb25zdCB2b2lkIF9fdXNlciAqdW5zYWZlX3B0cl9faWduLFxuIFx0XHRcdFx0XHQgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHU2NCBmbGFncylcbiB7XG4mIzQzO1x0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4gXHRpbnQgcmV0O1xuIFxuLVx0aWYgKHVubGlrZWx5KGZsYWdzIFx1MDAyNiB+QlBGX0ZfUEFEX1pFUk9TKSlcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXG4tXHRpZiAodW5saWtlbHkoZHN0X19zeiA9PSAwKSlcbi1cdFx0cmV0dXJuIDA7XG4mIzQzO1x0bW0gPSBnZXRfdGFza19tbSh0c2spO1xuJiM0MztcdHJldCA9IGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIoZHN0LCBkc3RfX3N6LCB1bnNhZmVfcHRyX19pZ24sXG4mIzQzO1x0XHRcdFx0XHRtbSwgZmxhZ3MpO1xuJiM0MztcdGlmIChtbSlcbiYjNDM7XHRcdG1tcHV0KG1tKTtcbiBcbi1cdHJldCA9IGNvcHlfcmVtb3RlX3ZtX3N0cih0c2ssICh1bnNpZ25lZCBsb25nKXVuc2FmZV9wdHJfX2lnbiwgZHN0LCBkc3RfX3N6LCAwKTtcbi1cdGlmIChyZXQgXHUwMDNjIDApIHtcbi1cdFx0aWYgKGZsYWdzIFx1MDAyNiBCUEZfRl9QQURfWkVST1MpXG4tXHRcdFx0bWVtc2V0KGRzdCwgMCwgZHN0X19zeik7XG4tXHRcdHJldHVybiByZXQ7XG4tXHR9XG4tXG4tXHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9GX1BBRF9aRVJPUylcbi1cdFx0bWVtc2V0KGRzdCAmIzQzOyByZXQsIDAsIGRzdF9fc3ogLSByZXQpO1xuLVxuLVx0cmV0dXJuIHJldCAmIzQzOyAxO1xuJiM0MztcdHJldHVybiByZXQ7XG4gfVxuIFxuIC8qIEtlZXAgdW5zaWduZWQgbG9uZyBpbiBwcm90b3R5cGUgc28gdGhhdCBrZnVuYyBpcyB1c2FibGUgd2hlbiBlbWl0dGVkIHRvXG5AQCAtNDkyNCw2ICYjNDM7NTAwNiw4IEBAIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfaXRlcl9iaXRzX25ldywgS0ZfSVRFUl9ORVcpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX2JpdHNfbmV4dCwgS0ZfSVRFUl9ORVhUIHwgS0ZfUkVUX05VTEwpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX2JpdHNfZGVzdHJveSwgS0ZfSVRFUl9ERVNUUk9ZKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfY29weV9mcm9tX3VzZXJfc3RyLCBLRl9TTEVFUEFCTEUpXG4mIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfY29weV9mcm9tX3VzZXJfbW0sIEtGX1NMRUVQQUJMRSlcbiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIsIEtGX1NMRUVQQUJMRSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyLCBLRl9TTEVFUEFCTEUpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9nZXRfa21lbV9jYWNoZSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfa21lbV9jYWNoZV9uZXcsIEtGX0lURVJfTkVXIHwgS0ZfU0xFRVBBQkxFKVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggOWU3OTc1MGUyNDgwOC4uNjc5OWQ5ZTA4MGZjNSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtNjAwNCw2ICYjNDM7NjAwNCwxMCBAQCBCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTChzdHJ1Y3QgZGVudHJ5KSB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmRfaW5vZGU7XG4gfTtcbiBcbiYjNDM7QlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IGxpbnV4X2JpbnBybSkge1xuJiM0MztcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuJiM0Mzt9O1xuJiM0MztcbiBCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTChzdHJ1Y3Qgc29ja2V0KSB7XG4gXHRzdHJ1Y3Qgc29jayAqc2s7XG4gfTtcbkBAIC02MDU4LDYgJiM0Mzs2MDYyLDcgQEAgc3RhdGljIGJvb2wgdHlwZV9pc190cnVzdGVkX29yX251bGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiB7XG4gXHRCVEZfVFlQRV9FTUlUKEJURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMKHN0cnVjdCBzb2NrZXQpKTtcbiBcdEJURl9UWVBFX0VNSVQoQlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IGRlbnRyeSkpO1xuJiM0MztcdEJURl9UWVBFX0VNSVQoQlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IGxpbnV4X2JpbnBybSkpO1xuIFx0QlRGX1RZUEVfRU1JVChCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QpKTtcbiBcbiBcdHJldHVybiBidGZfbmVzdGVkX3R5cGVfaXNfdHJ1c3RlZChcdTAwMjZlbnYtXHUwMDNlbG9nLCByZWcsIGZpZWxkX25hbWUsIGJ0Zl9pZCxcbkBAIC02MTY4LDYgJiM0Mzs2MTczLDE1IEBAIHN0YXRpYyBpbnQgY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdGlmIChyZXQgIT0gUFRSX1RPX0JURl9JRCkge1xuIFx0XHQvKiBqdXN0IG1hcms7ICovXG4gXG4mIzQzO1x0fSBlbHNlIGlmIChicGZfaXNfdHJ1c3RlZF9vcl9udWxsX2J0Zl9wdHIocmVnLVx1MDAzZXR5cGUpKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogQW4gdW5jaGVja2VkIGxvYWQgdGhyb3VnaCBhIHRydXN0ZWQtb3ItTlVMTCBwb2ludGVyIGlzXG4mIzQzO1x0XHQgKiBmYXVsdC1wcm90ZWN0ZWQuIEFueSBwb2ludGVyIGRlcml2ZWQgZnJvbSB0aGF0IGxvYWQgbXVzdCBiZVxuJiM0MztcdFx0ICogdW50cnVzdGVkLCBhcyBhIGZhdWx0IHByb2R1Y2VzIGEgTlVMTCB2YWx1ZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0Y2xlYXJfdHJ1c3RlZF9mbGFncyhcdTAwMjZmbGFnKTtcbiYjNDM7XHRcdGZsYWcgfD0gUFRSX1VOVFJVU1RFRDtcbiYjNDM7XG4gXHR9IGVsc2UgaWYgKHR5cGVfZmxhZyhyZWctXHUwMDNldHlwZSkgXHUwMDI2IFBUUl9VTlRSVVNURUQpIHtcbiBcdFx0LyogSWYgdGhpcyBpcyBhbiB1bnRydXN0ZWQgcG9pbnRlciwgYWxsIHBvaW50ZXJzIGZvcm1lZCBieSB3YWxraW5nIGl0XG4gXHRcdCAqIGFsc28gaW5oZXJpdCB0aGUgdW50cnVzdGVkIGZsYWcuXG5AQCAtNjY0NCw3ICYjNDM7NjY1OCw4IEBAIHN0YXRpYyBpbnQgY2hlY2tfbWVtX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgsIHN0cnVjdCBiXG4gXHRcdGlmICghZXJyIFx1MDAyNlx1MDAyNiB0ID09IEJQRl9SRUFEIFx1MDAyNlx1MDAyNiB2YWx1ZV9yZWdubyBcdTAwM2U9IDApXG4gXHRcdFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIHZhbHVlX3JlZ25vKTtcbiBcdH0gZWxzZSBpZiAoYmFzZV90eXBlKHJlZy1cdTAwM2V0eXBlKSA9PSBQVFJfVE9fQlRGX0lEIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAhdHlwZV9tYXlfYmVfbnVsbChyZWctXHUwMDNldHlwZSkpIHtcbiYjNDM7XHRcdCAgICghdHlwZV9tYXlfYmVfbnVsbChyZWctXHUwMDNldHlwZSkgfHxcbiYjNDM7XHRcdCAgICAodCA9PSBCUEZfUkVBRCBcdTAwMjZcdTAwMjYgYnBmX2lzX3RydXN0ZWRfb3JfbnVsbF9idGZfcHRyKHJlZy1cdTAwM2V0eXBlKSkpKSB7XG4gXHRcdGVyciA9IGNoZWNrX3B0cl90b19idGZfYWNjZXNzKGVudiwgcmVncywgcmVnLCBhcmdubywgb2ZmLCBzaXplLCB0LFxuIFx0XHRcdFx0XHQgICAgICB2YWx1ZV9yZWdubyk7XG4gXHR9IGVsc2UgaWYgKHJlZy1cdTAwM2V0eXBlID09IENPTlNUX1BUUl9UT19NQVApIHtcbmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaFxuaW5kZXggMzhiMTE2NTIxMmM5NC4uODI2NGEzNDZkMThhZiAxMDA2NDRcbi0tLSBhL21tL2ludGVybmFsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2ludGVybmFsLmhcbkBAIC0yNSw2ICYjNDM7MjUsMTEgQEBcbiBzdHJ1Y3QgZm9saW9fYmF0Y2g7XG4gc3RydWN0IGhzdGF0ZTtcbiBcbiYjNDM7I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxuJiM0MztpbnQgX19jb3B5X3JlbW90ZV9tbV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbiYjNDM7XHRcdFx0IHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncyk7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiBzdHJ1Y3QgaHVnZV9ib290bWVtX3BhZ2Uge1xuIFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuIFx0c3RydWN0IGhzdGF0ZSAqaHN0YXRlO1xuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcbmluZGV4IDhiMGMyYzczNWQzZGUuLmZlMmY1ZTk4OGZiOTAgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LmNcbkBAIC03MzMxLDggJiM0Mzs3MzMxLDggQEAgRVhQT1JUX1NZTUJPTF9HUEwoYWNjZXNzX3Byb2Nlc3Nfdm0pO1xuICAqIENvcHkgYSBzdHJpbmcgZnJvbSBhbm90aGVyIHByb2Nlc3MmIzM5O3MgYWRkcmVzcyBzcGFjZSBhcyBnaXZlbiBpbiBtbS5cbiAgKiBJZiB0aGVyZSBpcyBhbnkgZXJyb3IgcmV0dXJuIC1FRkFVTFQuXG4gICovXG4tc3RhdGljIGludCBfX2NvcHlfcmVtb3RlX3ZtX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLVx0XHRcdFx0dm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKVxuJiM0MztpbnQgX19jb3B5X3JlbW90ZV9tbV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbiYjNDM7XHRcdFx0IHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncylcbiB7XG4gXHR2b2lkICpvbGRfYnVmID0gYnVmO1xuIFx0aW50IGVyciA9IDA7XG5AQCAtNzQwNyw0MyAmIzQzOzc0MDcsNiBAQCBzdGF0aWMgaW50IF9fY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdHJldHVybiBlcnI7XG4gXHRyZXR1cm4gYnVmIC0gb2xkX2J1ZjtcbiB9XG4tXG4tLyoqXG4tICogY29weV9yZW1vdGVfdm1fc3RyIC0gY29weSBhIHN0cmluZyBmcm9tIGFub3RoZXIgcHJvY2VzcyYjMzk7cyBhZGRyZXNzIHNwYWNlLlxuLSAqIEB0c2s6XHR0aGUgdGFzayBvZiB0aGUgdGFyZ2V0IGFkZHJlc3Mgc3BhY2Vcbi0gKiBAYWRkcjpcdHN0YXJ0IGFkZHJlc3MgdG8gcmVhZCBmcm9tXG4tICogQGJ1ZjpcdGRlc3RpbmF0aW9uIGJ1ZmZlclxuLSAqIEBsZW46XHRudW1iZXIgb2YgYnl0ZXMgdG8gY29weVxuLSAqIEBndXBfZmxhZ3M6XHRmbGFncyBtb2RpZnlpbmcgbG9va3VwIGJlaGF2aW91clxuLSAqXG4tICogVGhlIGNhbGxlciBtdXN0IGhvbGQgYSByZWZlcmVuY2Ugb24gQG1tLlxuLSAqXG4tICogUmV0dXJuOiBudW1iZXIgb2YgYnl0ZXMgY29waWVkIGZyb20gQGFkZHIgKHNvdXJjZSkgdG8gQGJ1ZiAoZGVzdGluYXRpb24pO1xuLSAqIG5vdCBpbmNsdWRpbmcgdGhlIHRyYWlsaW5nIE5VTC4gQWx3YXlzIGd1YXJhbnRlZWQgdG8gbGVhdmUgTlVMLXRlcm1pbmF0ZWRcbi0gKiBidWZmZXIuIE9uIGFueSBlcnJvciwgcmV0dXJuIC1FRkFVTFQuXG4tICovXG4taW50IGNvcHlfcmVtb3RlX3ZtX3N0cihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdW5zaWduZWQgbG9uZyBhZGRyLFxuLVx0XHQgICAgICAgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKVxuLXtcbi1cdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuLVx0aW50IHJldDtcbi1cbi1cdGlmICh1bmxpa2VseShsZW4gPT0gMCkpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0bW0gPSBnZXRfdGFza19tbSh0c2spO1xuLVx0aWYgKCFtbSkge1xuLVx0XHQqKGNoYXIgKilidWYgPSAmIzM5O1xcMCYjMzk7O1xuLVx0XHRyZXR1cm4gLUVGQVVMVDtcbi1cdH1cbi1cbi1cdHJldCA9IF9fY29weV9yZW1vdGVfdm1fc3RyKG1tLCBhZGRyLCBidWYsIGxlbiwgZ3VwX2ZsYWdzKTtcbi1cbi1cdG1tcHV0KG1tKTtcbi1cbi1cdHJldHVybiByZXQ7XG4tfVxuLUVYUE9SVF9TWU1CT0xfR1BMKGNvcHlfcmVtb3RlX3ZtX3N0cik7XG4gI2VuZGlmIC8qIENPTkZJR19CUEZfU1lTQ0FMTCAqL1xuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvbW0vbm9tbXUuYyBiL21tL25vbW11LmNcbmluZGV4IDQ5OGUwMWVlNDBiMDUuLjk4NTk2ZTYwMzExZjMgMTAwNjQ0XG4tLS0gYS9tbS9ub21tdS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9ub21tdS5jXG5AQCAtMTc0Niw4ICYjNDM7MTc0Niw4IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGFjY2Vzc19wcm9jZXNzX3ZtKTtcbiAgKiBDb3B5IGEgc3RyaW5nIGZyb20gYW5vdGhlciBwcm9jZXNzJiMzOTtzIGFkZHJlc3Mgc3BhY2UgYXMgZ2l2ZW4gaW4gbW0uXG4gICogSWYgdGhlcmUgaXMgYW55IGVycm9yIHJldHVybiAtRUZBVUxULlxuICAqL1xuLXN0YXRpYyBpbnQgX19jb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbi1cdFx0XHRcdHZvaWQgKmJ1ZiwgaW50IGxlbilcbiYjNDM7aW50IF9fY29weV9yZW1vdGVfbW1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4mIzQzO1x0XHRcdCB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBhZGRyX2VuZDtcbiBcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xuQEAgLTE3ODEsNDMgJiM0MzsxNzgxLDYgQEAgc3RhdGljIGludCBfX2NvcHlfcmVtb3RlX3ZtX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbi1cbi0vKipcbi0gKiBjb3B5X3JlbW90ZV92bV9zdHIgLSBjb3B5IGEgc3RyaW5nIGZyb20gYW5vdGhlciBwcm9jZXNzJiMzOTtzIGFkZHJlc3Mgc3BhY2UuXG4tICogQHRzazpcdHRoZSB0YXNrIG9mIHRoZSB0YXJnZXQgYWRkcmVzcyBzcGFjZVxuLSAqIEBhZGRyOlx0c3RhcnQgYWRkcmVzcyB0byByZWFkIGZyb21cbi0gKiBAYnVmOlx0ZGVzdGluYXRpb24gYnVmZmVyXG4tICogQGxlbjpcdG51bWJlciBvZiBieXRlcyB0byBjb3B5XG4tICogQGd1cF9mbGFnczpcdGZsYWdzIG1vZGlmeWluZyBsb29rdXAgYmVoYXZpb3VyICh1bnVzZWQpXG4tICpcbi0gKiBUaGUgY2FsbGVyIG11c3QgaG9sZCBhIHJlZmVyZW5jZSBvbiBAbW0uXG4tICpcbi0gKiBSZXR1cm46IG51bWJlciBvZiBieXRlcyBjb3BpZWQgZnJvbSBAYWRkciAoc291cmNlKSB0byBAYnVmIChkZXN0aW5hdGlvbik7XG4tICogbm90IGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMLiBBbHdheXMgZ3VhcmFudGVlZCB0byBsZWF2ZSBOVUwtdGVybWluYXRlZFxuLSAqIGJ1ZmZlci4gT24gYW55IGVycm9yLCByZXR1cm4gLUVGQVVMVC5cbi0gKi9cbi1pbnQgY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tXHRcdCAgICAgICB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXG4te1xuLVx0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4tXHRpbnQgcmV0O1xuLVxuLVx0aWYgKHVubGlrZWx5KGxlbiA9PSAwKSlcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRtbSA9IGdldF90YXNrX21tKHRzayk7XG4tXHRpZiAoIW1tKSB7XG4tXHRcdCooY2hhciAqKWJ1ZiA9ICYjMzk7XFwwJiMzOTs7XG4tXHRcdHJldHVybiAtRUZBVUxUO1xuLVx0fVxuLVxuLVx0cmV0ID0gX19jb3B5X3JlbW90ZV92bV9zdHIobW0sIGFkZHIsIGJ1ZiwgbGVuKTtcbi1cbi1cdG1tcHV0KG1tKTtcbi1cbi1cdHJldHVybiByZXQ7XG4tfVxuLUVYUE9SVF9TWU1CT0xfR1BMKGNvcHlfcmVtb3RlX3ZtX3N0cik7XG4gI2VuZGlmIC8qIENPTkZJR19CUEZfU1lTQ0FMTCAqL1xuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL21tL3V0aWwuYyBiL21tL3V0aWwuY1xuaW5kZXggYmYwNTEzZDFkM2QwOC4uMmVjYTI3YjAyNzkxZiAxMDA2NDRcbi0tLSBhL21tL3V0aWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vdXRpbC5jXG5AQCAtMTA2MSw2ICYjNDM7MTA2MSw2OCBAQCBpbnQgZ2V0X2NtZGxpbmUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBjaGFyICpidWZmZXIsIGludCBidWZsZW4pXG4gXHRyZXR1cm4gcmVzO1xuIH1cbiBcbiYjNDM7I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxuJiM0MzsvKipcbiYjNDM7ICogY29weV9yZW1vdGVfbW1fc3RyIC0gY29weSBhIHN0cmluZyBmcm9tIGEgcmVtb3RlIGFkZHJlc3Mgc3BhY2UuXG4mIzQzOyAqIEBtbTogICAgICAgICB0aGUgcmVtb3RlIGFkZHJlc3Mgc3BhY2VcbiYjNDM7ICogQGFkZHI6ICAgICAgIHN0YXJ0IGFkZHJlc3MgdG8gcmVhZCBmcm9tXG4mIzQzOyAqIEBidWY6ICAgICAgICBkZXN0aW5hdGlvbiBidWZmZXJcbiYjNDM7ICogQGxlbjogICAgICAgIG51bWJlciBvZiBieXRlcyB0byBjb3B5XG4mIzQzOyAqIEBndXBfZmxhZ3M6ICBmbGFncyBtb2RpZnlpbmcgbG9va3VwIGJlaGF2aW91clxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgY2FsbGVyIG11c3QgaG9sZCBhIHJlZmVyZW5jZSBvbiBAbW0uXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCBmcm9tIEBhZGRyIChzb3VyY2UpIHRvIEBidWYgKGRlc3RpbmF0aW9uKSxcbiYjNDM7ICogbm90IGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMLiBJZiBAbGVuIGlzIHplcm8sIHJldHVybiAwIHdpdGhvdXQgYWNjZXNzaW5nXG4mIzQzOyAqIEBidWYuIE90aGVyd2lzZSwgQGJ1ZiBpcyBhbHdheXMgTlVMLXRlcm1pbmF0ZWQuIE9uIGFueSBlcnJvciwgcmV0dXJuXG4mIzQzOyAqIC1FRkFVTFQuXG4mIzQzOyAqL1xuJiM0MztpbnQgY29weV9yZW1vdGVfbW1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4mIzQzO1x0XHQgICAgICAgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHVubGlrZWx5KGxlbiA9PSAwKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gX19jb3B5X3JlbW90ZV9tbV9zdHIobW0sIGFkZHIsIGJ1ZiwgbGVuLCBndXBfZmxhZ3MpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogY29weV9yZW1vdGVfdm1fc3RyIC0gY29weSBhIHN0cmluZyBmcm9tIGFub3RoZXIgcHJvY2VzcyYjMzk7cyBhZGRyZXNzIHNwYWNlLlxuJiM0MzsgKiBAdHNrOlx0dGhlIHRhc2sgb2YgdGhlIHRhcmdldCBhZGRyZXNzIHNwYWNlXG4mIzQzOyAqIEBhZGRyOlx0c3RhcnQgYWRkcmVzcyB0byByZWFkIGZyb21cbiYjNDM7ICogQGJ1ZjpcdGRlc3RpbmF0aW9uIGJ1ZmZlclxuJiM0MzsgKiBAbGVuOlx0bnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHlcbiYjNDM7ICogQGd1cF9mbGFnczpcdGZsYWdzIG1vZGlmeWluZyBsb29rdXAgYmVoYXZpb3VyXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCBmcm9tIEBhZGRyIChzb3VyY2UpIHRvIEBidWYgKGRlc3RpbmF0aW9uKSxcbiYjNDM7ICogbm90IGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMLiBJZiBAbGVuIGlzIHplcm8sIHJldHVybiAwIHdpdGhvdXQgYWNjZXNzaW5nXG4mIzQzOyAqIEBidWYuIE90aGVyd2lzZSwgQGJ1ZiBpcyBhbHdheXMgTlVMLXRlcm1pbmF0ZWQuIE9uIGFueSBlcnJvciwgcmV0dXJuXG4mIzQzOyAqIC1FRkFVTFQuXG4mIzQzOyAqL1xuJiM0MztpbnQgY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4mIzQzO1x0XHQgICAgICAgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHVubGlrZWx5KGxlbiA9PSAwKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRtbSA9IGdldF90YXNrX21tKHRzayk7XG4mIzQzO1x0aWYgKCFtbSkge1xuJiM0MztcdFx0KihjaGFyICopYnVmID0gJiMzOTtcXDAmIzM5OztcbiYjNDM7XHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gX19jb3B5X3JlbW90ZV9tbV9zdHIobW0sIGFkZHIsIGJ1ZiwgbGVuLCBndXBfZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRtbXB1dChtbSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoY29weV9yZW1vdGVfdm1fc3RyKTtcbiYjNDM7I2VuZGlmIC8qIENPTkZJR19CUEZfU1lTQ0FMTCAqL1xuJiM0MztcbiBpbnQgX193ZWFrIG1lbWNtcF9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZTEsIHN0cnVjdCBwYWdlICpwYWdlMilcbiB7XG4gXHRjaGFyICphZGRyMSwgKmFkZHIyO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9pdGVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfaXRlci5jXG5pbmRleCBjNjkwODBjYTE0ZjVhLi45OWExNmExYWRkNzBlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2l0ZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2l0ZXIuY1xuQEAgLTM5LDEwICYjNDM7MzksMTAgQEAgc3RhdGljIHZvaWQgdGVzdF9idGZfaWRfb3JfbnVsbCh2b2lkKVxuIFx0c3RydWN0IGJwZl9pdGVyX3Rlc3Rfa2VybjMgKnNrZWw7XG4gXG4gXHRza2VsID0gYnBmX2l0ZXJfdGVzdF9rZXJuM19fb3Blbl9hbmRfbG9hZCgpO1xuLVx0aWYgKCFBU1NFUlRfRVJSX1BUUihza2VsLCBcJiMzNDticGZfaXRlcl90ZXN0X2tlcm4zX19vcGVuX2FuZF9sb2FkXCYjMzQ7KSkge1xuLVx0XHRicGZfaXRlcl90ZXN0X2tlcm4zX19kZXN0cm95KHNrZWwpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcJiMzNDticGZfaXRlcl90ZXN0X2tlcm4zX19vcGVuX2FuZF9sb2FkXCYjMzQ7KSlcbiBcdFx0cmV0dXJuO1xuLVx0fVxuJiM0MztcbiYjNDM7XHRicGZfaXRlcl90ZXN0X2tlcm4zX19kZXN0cm95KHNrZWwpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBkb19kdW1teV9yZWFkX29wdHMoc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBzdHJ1Y3QgYnBmX2l0ZXJfYXR0YWNoX29wdHMgKm9wdHMpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY29weV9mcm9tX3VzZXJfYnBybS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY29weV9mcm9tX3VzZXJfYnBybS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYjIzMjViMTkzNTc2MVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY29weV9mcm9tX3VzZXJfYnBybS5jXG5AQCAtMCwwICYjNDM7MSw3MiBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvd2FpdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2NvcHlfZnJvbV91c2VyX2Jwcm0uc2tlbC5oXCYjMzQ7XG4mIzQzO1xuJiM0Mzt2b2lkIHRlc3RfY29weV9mcm9tX3VzZXJfYnBybSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBhcmcwW10gPSBcJiMzNDtmaXJzdFwmIzM0OztcbiYjNDM7XHRjaGFyIGFyZzFbXSA9IFwmIzM0O3NlY29uZC1hcmd1bWVudFwmIzM0OztcbiYjNDM7XHRjaGFyIGVudjBbXSA9IFwmIzM0O1NPTUVfRU5WPWFcJiMzNDs7XG4mIzQzO1x0Y2hhciBlbnYxW10gPSBcJiMzNDtPVEhFUl9FTlY9c29tZXRoaW5nXCYjMzQ7O1xuJiM0MztcdHN0cnVjdCBjb3B5X2Zyb21fdXNlcl9icHJtICpza2VsO1xuJiM0MztcdHBpZF90IGNoaWxkO1xuJiM0MztcdGludCBzdGF0dXM7XG4mIzQzO1xuJiM0MztcdHNrZWwgPSBjb3B5X2Zyb21fdXNlcl9icHJtX19vcGVuX2FuZF9sb2FkKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O29wZW5fYW5kX2xvYWRcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE9uICFDT05GSUdfTU1VLCBleGVjIHN0cmluZ3MgYXJlIGhlbGQgaW4gYnBybS1cdTAwM2VwYWdlW10gcmF0aGVyIHRoYW5cbiYjNDM7XHQgKiBiZWluZyBtYXBwZWQgaW4gYnBybS1cdTAwM2VtbS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIXNrZWwtXHUwMDNla2NvbmZpZy1cdTAwM2VDT05GSUdfTU1VKSB7XG4mIzQzO1x0XHRwcmludGYoXCYjMzQ7JXM6U0tJUDogdGVzdCByZXF1aXJlcyBDT05GSUdfTU1VXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4mIzQzO1x0XHR0ZXN0X19za2lwKCk7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGNvcHlfZnJvbV91c2VyX2Jwcm1fX2F0dGFjaChza2VsKSwgXCYjMzQ7YXR0YWNoXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRjaGlsZCA9IGZvcmsoKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HRShjaGlsZCwgMCwgXCYjMzQ7Zm9ya1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFjaGlsZCkge1xuJiM0MztcdFx0Y2hhciAqY29uc3QgYXJndltdID0geyBhcmcwLCBhcmcxLCBOVUxMIH07XG4mIzQzO1x0XHRjaGFyICpjb25zdCBlbnZwW10gPSB7IGVudjAsIGVudjEsIE5VTEwgfTtcbiYjNDM7XG4mIzQzO1x0XHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vtb25pdG9yZWRfcGlkID0gZ2V0cGlkKCk7XG4mIzQzO1x0XHRleGVjdmUoXCYjMzQ7L2Jpbi90cnVlXCYjMzQ7LCBhcmd2LCBlbnZwKTtcbiYjNDM7XHRcdF9leGl0KGVycm5vKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghQVNTRVJUX0VRKHdhaXRwaWQoY2hpbGQsIFx1MDAyNnN0YXR1cywgMCksIGNoaWxkLCBcJiMzNDt3YWl0cGlkXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRpZiAoQVNTRVJUX1RSVUUoV0lGRVhJVEVEKHN0YXR1cyksIFwmIzM0O2NoaWxkX2V4aXRlZFwmIzM0OykpXG4mIzQzO1x0XHRBU1NFUlRfRVEoV0VYSVRTVEFUVVMoc3RhdHVzKSwgRVBFUk0sIFwmIzM0O2V4ZWNfZXJybm9cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlYnBybV9hcmdjLCAyLCBcJiMzNDticHJtX2FyZ2NcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VicHJtX2VudmMsIDIsIFwmIzM0O2Jwcm1fZW52Y1wmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWRhdGFfbGVuX21hdGNoLCAxLCBcJiMzNDtkYXRhX2xlbl9tYXRjaFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWludmFsaWRfZmxhZ3NfcmV0LCAtRUlOVkFMLCBcJiMzNDtpbnZhbGlkX2ZsYWdzX3JldFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWNvcHlfcmV0LCAwLCBcJiMzNDtjb3B5X3JldFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXN0cl9hcmcwX3JldCwgc2l6ZW9mKGFyZzApLCBcJiMzNDtzdHJfYXJnMF9yZXRcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VzdHJfYXJnMV9yZXQsIHNpemVvZihhcmcxKSwgXCYjMzQ7c3RyX2FyZzFfcmV0XCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlc3RyX2VudjBfcmV0LCBzaXplb2YoZW52MCksIFwmIzM0O3N0cl9lbnYwX3JldFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXN0cl9lbnYxX3JldCwgc2l6ZW9mKGVudjEpLCBcJiMzNDtzdHJfZW52MV9yZXRcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VkYXRhX21hdGNoLCAxLCBcJiMzNDtkYXRhX21hdGNoXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlc3RyX2FyZ3NfbWF0Y2gsIDEsIFwmIzM0O3N0cl9hcmdzX21hdGNoXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlc3RyX2VudnNfbWF0Y2gsIDEsIFwmIzM0O3N0cl9lbnZzX21hdGNoXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHRjb3B5X2Zyb21fdXNlcl9icHJtX19kZXN0cm95KHNrZWwpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX21heWJlX251bGwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19tYXliZV9udWxsLmNcbmluZGV4IDAxZGMyNjEzYzhhNTEuLjQ1YWY2ZjAwYWQ5MDggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfbWF5YmVfbnVsbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfbWF5YmVfbnVsbC5jXG5AQCAtMTksMTUgJiM0MzsxOSwxNiBAQCBzdGF0aWMgdm9pZCBtYXliZV9udWxsKHZvaWQpXG4gXHRzdHJ1Y3Rfb3BzX21heWJlX251bGxfX2Rlc3Ryb3koc2tlbCk7XG4gfVxuIFxuLS8qIFRlc3QgdGhhdCB0aGUgdmVyaWZpZXIgcmVqZWN0cyBhIHByb2dyYW0gdGhhdCBhY2Nlc3MgYSBudWxsYWJsZSBwb2ludGVyXG4tICogd2l0aG91dCBhIGNoZWNrIGJlZm9yZWhhbmQuXG4mIzQzOy8qXG4mIzQzOyAqIFRlc3QgdGhhdCB0aGUgdmVyaWZpZXIgYWNjZXB0cyBhIGZhdWx0LXByb3RlY3RlZCByZWFkIHRocm91Z2ggYSBudWxsYWJsZVxuJiM0MzsgKiB0cnVzdGVkIHBvaW50ZXIgd2l0aG91dCBhbiBleHBsaWNpdCBOVUxMIGNoZWNrLlxuICAqL1xuLXN0YXRpYyB2b2lkIG1heWJlX251bGxfZmFpbCh2b2lkKVxuJiM0MztzdGF0aWMgdm9pZCBtYXliZV9udWxsX25vX2NoZWNrKHZvaWQpXG4ge1xuIFx0c3RydWN0IHN0cnVjdF9vcHNfbWF5YmVfbnVsbF9mYWlsICpza2VsO1xuIFxuIFx0c2tlbCA9IHN0cnVjdF9vcHNfbWF5YmVfbnVsbF9mYWlsX19vcGVuX2FuZF9sb2FkKCk7XG4tXHRpZiAoQVNTRVJUX0VSUl9QVFIoc2tlbCwgXCYjMzQ7c3RydWN0X29wc19tb2R1bGVfZmFpbF9fb3Blbl9hbmRfbG9hZFwmIzM0OykpXG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O3N0cnVjdF9vcHNfbWF5YmVfbnVsbF9mYWlsX19vcGVuX2FuZF9sb2FkXCYjMzQ7KSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0c3RydWN0X29wc19tYXliZV9udWxsX2ZhaWxfX2Rlc3Ryb3koc2tlbCk7XG5AQCAtNDEsNiAmIzQzOzQyLDYgQEAgdm9pZCB0ZXN0X3N0cnVjdF9vcHNfbWF5YmVfbnVsbCh2b2lkKVxuIFx0ICovXG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDttYXliZV9udWxsXCYjMzQ7KSlcbiBcdFx0bWF5YmVfbnVsbCgpO1xuLVx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7bWF5YmVfbnVsbF9mYWlsXCYjMzQ7KSlcbi1cdFx0bWF5YmVfbnVsbF9mYWlsKCk7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7bWF5YmVfbnVsbF9ub19jaGVja1wmIzM0OykpXG4mIzQzO1x0XHRtYXliZV9udWxsX25vX2NoZWNrKCk7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RwX2J0Zl9udWxsYWJsZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHBfYnRmX251bGxhYmxlLmNcbmluZGV4IGFjY2M0MmUwMWY4YTguLjgyNWZlN2E5MmQ3NGYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90cF9idGZfbnVsbGFibGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHBfYnRmX251bGxhYmxlLmNcbkBAIC0yLDYgJiM0MzsyLDMxIEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7dGVzdF90cF9idGZfbnVsbGFibGUuc2tlbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3Rlc3RfdHBfYnRmX251bGxhYmxlX3J1bnRpbWUuc2tlbC5oXCYjMzQ7XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB0ZXN0X251bGxhYmxlX3J1bnRpbWUodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0ZXN0X3RwX2J0Zl9udWxsYWJsZV9ydW50aW1lICpza2VsO1xuJiM0MztcbiYjNDM7XHRza2VsID0gdGVzdF90cF9idGZfbnVsbGFibGVfcnVudGltZV9fb3Blbl9hbmRfbG9hZCgpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcJiMzNDtvcGVuX2FuZF9sb2FkXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlbW9uaXRvcmVkX3RpZCA9IHN5c19nZXR0aWQoKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0sodGVzdF90cF9idGZfbnVsbGFibGVfcnVudGltZV9fYXR0YWNoKHNrZWwpLCBcJiMzNDthdHRhY2hcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdGlmICghQVNTRVJUX09LKHRyaWdnZXJfbW9kdWxlX3Rlc3RfcmVhZCgyKSwgXCYjMzQ7dHJpZ2dlclwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWNhbGxzLCAyLCBcJiMzNDtjYWxsc1wmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZW5vbm51bGxfbGVuLCAyLCBcJiMzNDtub25udWxsX2xlblwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZW51bGxfbGVuLCAwLCBcJiMzNDtudWxsX2xlblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztvdXQ6XG4mIzQzO1x0dGVzdF90cF9idGZfbnVsbGFibGVfcnVudGltZV9fZGVzdHJveShza2VsKTtcbiYjNDM7fVxuIFxuIHZvaWQgdGVzdF90cF9idGZfbnVsbGFibGUodm9pZClcbiB7XG5AQCAtMTEsNCAmIzQzOzM2LDcgQEAgdm9pZCB0ZXN0X3RwX2J0Zl9udWxsYWJsZSh2b2lkKVxuIFx0fVxuIFxuIFx0UlVOX1RFU1RTKHRlc3RfdHBfYnRmX251bGxhYmxlKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7cnVudGltZVwmIzM0OykpXG4mIzQzO1x0XHR0ZXN0X251bGxhYmxlX3J1bnRpbWUoKTtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2NvcHlfZnJvbV91c2VyX2Jwcm0uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9jb3B5X2Zyb21fdXNlcl9icHJtLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5iMzM0YTE1NzQxOWU1XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvY29weV9mcm9tX3VzZXJfYnBybS5jXG5AQCAtMCwwICYjNDM7MSwxMjMgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3ZtbGludXguaFwmIzM0O1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl90cmFjaW5nLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDticGZfbWlzYy5oXCYjMzQ7XG4mIzQzO1xuJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgZXhwZWN0ZWRfZGF0YVtdID0gXCYjMzQ7Zmlyc3RcXDBzZWNvbmQtYXJndW1lbnRcXDBcJiMzNDtcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7U09NRV9FTlY9YVxcME9USEVSX0VOVj1zb21ldGhpbmdcJiMzNDs7XG4mIzQzO3N0YXRpYyBjb25zdCBjaGFyIGV4cGVjdGVkX2FyZzBbXSA9IFwmIzM0O2ZpcnN0XCYjMzQ7O1xuJiM0MztzdGF0aWMgY29uc3QgY2hhciBleHBlY3RlZF9hcmcxW10gPSBcJiMzNDtzZWNvbmQtYXJndW1lbnRcJiMzNDs7XG4mIzQzO3N0YXRpYyBjb25zdCBjaGFyIGV4cGVjdGVkX2VudjBbXSA9IFwmIzM0O1NPTUVfRU5WPWFcJiMzNDs7XG4mIzQzO3N0YXRpYyBjb25zdCBjaGFyIGV4cGVjdGVkX2VudjFbXSA9IFwmIzM0O09USEVSX0VOVj1zb21ldGhpbmdcJiMzNDs7XG4mIzQzO1xuJiM0MztpbnQgbW9uaXRvcmVkX3BpZDtcbiYjNDM7aW50IGJwcm1fYXJnYztcbiYjNDM7aW50IGJwcm1fZW52YztcbiYjNDM7aW50IGRhdGFfbGVuX21hdGNoO1xuJiM0MztpbnQgaW52YWxpZF9mbGFnc19yZXQ7XG4mIzQzO2ludCBjb3B5X3JldDtcbiYjNDM7aW50IHN0cl9hcmcwX3JldDtcbiYjNDM7aW50IHN0cl9hcmcxX3JldDtcbiYjNDM7aW50IHN0cl9lbnYwX3JldDtcbiYjNDM7aW50IHN0cl9lbnYxX3JldDtcbiYjNDM7aW50IGRhdGFfbWF0Y2g7XG4mIzQzO2ludCBzdHJfYXJnc19tYXRjaDtcbiYjNDM7aW50IHN0cl9lbnZzX21hdGNoO1xuJiM0MztcbiYjNDM7ZXh0ZXJuIGJvb2wgQ09ORklHX01NVSBfX2tjb25maWcgX193ZWFrO1xuJiM0MztcbiYjNDM7ZXh0ZXJuIGludCBicGZfY29weV9mcm9tX3VzZXJfbW0odm9pZCAqZHN0LCB1MzIgZHN0X19zeixcbiYjNDM7XHRcdFx0XHQgY29uc3Qgdm9pZCAqdW5zYWZlX3B0cl9faWduLFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdTY0IGZsYWdzKSBfX2tzeW07XG4mIzQzO1xuJiM0MztleHRlcm4gaW50IGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIodm9pZCAqZHN0LCB1MzIgZHN0X19zeixcbiYjNDM7XHRcdFx0XHQgICAgIGNvbnN0IHZvaWQgKnVuc2FmZV9wdHJfX2lnbixcbiYjNDM7XHRcdFx0XHQgICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1NjQgZmxhZ3MpIF9fa3N5bTtcbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtsc20ucy9icHJtX2NoZWNrX3NlY3VyaXR5XCYjMzQ7KVxuJiM0MztpbnQgQlBGX1BST0coY2hlY2tfZXhlY19hcmdzLCBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIHBpZCA9IGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpIFx1MDAzZVx1MDAzZSAzMjtcbiYjNDM7XHRjaGFyIGRhdGFbc2l6ZW9mKGV4cGVjdGVkX2RhdGEpXSA9IHt9O1xuJiM0MztcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuJiM0MztcdGNoYXIgYXJnMFszMl0gPSB7fTtcbiYjNDM7XHRjaGFyIGFyZzFbMzJdID0ge307XG4mIzQzO1x0Y2hhciBlbnYwWzMyXSA9IHt9O1xuJiM0MztcdGNoYXIgZW52MVszMl0gPSB7fTtcbiYjNDM7XHR1NjQgb2Zmc2V0ID0gMDtcbiYjNDM7XHR1NjQgZGF0YV9sZW47XG4mIzQzO1xuJiM0MztcdGlmICghQ09ORklHX01NVSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAocGlkICE9IG1vbml0b3JlZF9waWQpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0bW0gPSBicHJtLVx1MDAzZW1tO1xuJiM0MztcdGlmICghbW0pXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0YnBybV9hcmdjID0gYnBybS1cdTAwM2VhcmdjO1xuJiM0MztcdGJwcm1fZW52YyA9IGJwcm0tXHUwMDNlZW52YztcbiYjNDM7XG4mIzQzO1x0LyogdGhpcyBpcyB0aGUgdG90YWwgc2l6ZSBvZiBhcmdzIGFuZCBlbnZzIHN0YXJ0aW5nIGZyb20gYnBybS1cdTAwM2VwICovXG4mIzQzO1x0ZGF0YV9sZW4gPSBicHJtLVx1MDAzZWV4ZWMgLSBicHJtLVx1MDAzZXA7XG4mIzQzO1x0ZGF0YV9sZW5fbWF0Y2ggPSBkYXRhX2xlbiA9PSBzaXplb2YoZXhwZWN0ZWRfZGF0YSk7XG4mIzQzO1xuJiM0MztcdGludmFsaWRfZmxhZ3NfcmV0ID0gYnBmX2NvcHlfZnJvbV91c2VyX21tKGRhdGEsXG4mIzQzO1x0XHRcdFx0XHRcdCAgc2l6ZW9mKGRhdGEpLCAodm9pZCAqKWJwcm0tXHUwMDNlcCwgbW0sIH4wVUxMKTtcbiYjNDM7XG4mIzQzO1x0Y29weV9yZXQgPSBicGZfY29weV9mcm9tX3VzZXJfbW0oZGF0YSwgc2l6ZW9mKGRhdGEpLCAodm9pZCAqKWJwcm0tXHUwMDNlcCxcbiYjNDM7XHRcdFx0XHRcdCBtbSwgMCk7XG4mIzQzO1x0aWYgKGNvcHlfcmV0KVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGRhdGFfbWF0Y2ggPVxuJiM0MztcdFx0IV9fYnVpbHRpbl9tZW1jbXAoZGF0YSwgZXhwZWN0ZWRfZGF0YSwgc2l6ZW9mKGV4cGVjdGVkX2RhdGEpKTtcbiYjNDM7XG4mIzQzO1x0LyogYXJnMCBpcyBhdCBicHJtLVx1MDAzZXAgKi9cbiYjNDM7XHRzdHJfYXJnMF9yZXQgPSBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKGFyZzAsIHNpemVvZihhcmcwKSxcbiYjNDM7XHRcdFx0XHRcdFx0ICh2b2lkICopKGJwcm0tXHUwMDNlcCAmIzQzOyBvZmZzZXQpLFxuJiM0MztcdFx0XHRcdFx0XHQgbW0sIEJQRl9GX1BBRF9aRVJPUyk7XG4mIzQzO1x0aWYgKHN0cl9hcmcwX3JldCAhPSBzaXplb2YoZXhwZWN0ZWRfYXJnMCkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRvZmZzZXQgJiM0Mzs9IHN0cl9hcmcwX3JldDtcbiYjNDM7XG4mIzQzO1x0LyogYXJnMSBpcyBhdCBicHJtLVx1MDAzZXAgJiM0Mzsgc2l6ZW9mKGFyZzApICovXG4mIzQzO1x0c3RyX2FyZzFfcmV0ID0gYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cihhcmcxLCBzaXplb2YoYXJnMSksXG4mIzQzO1x0XHRcdFx0XHRcdCAodm9pZCAqKShicHJtLVx1MDAzZXAgJiM0Mzsgb2Zmc2V0KSxcbiYjNDM7XHRcdFx0XHRcdFx0IG1tLCBCUEZfRl9QQURfWkVST1MpO1xuJiM0MztcdGlmIChzdHJfYXJnMV9yZXQgIT0gc2l6ZW9mKGV4cGVjdGVkX2FyZzEpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0b2Zmc2V0ICYjNDM7PSBzdHJfYXJnMV9yZXQ7XG4mIzQzO1xuJiM0MztcdC8qIGVudjAgaXMgYXQgYnBybS1cdTAwM2VwICYjNDM7IHNpemVvZihhcmcwKSAmIzQzOyBzaXplb2YoYXJnMSkgKi9cbiYjNDM7XHRzdHJfZW52MF9yZXQgPSBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKGVudjAsIHNpemVvZihlbnYwKSxcbiYjNDM7XHRcdFx0XHRcdFx0ICh2b2lkICopKGJwcm0tXHUwMDNlcCAmIzQzOyBvZmZzZXQpLFxuJiM0MztcdFx0XHRcdFx0XHQgbW0sIEJQRl9GX1BBRF9aRVJPUyk7XG4mIzQzO1x0aWYgKHN0cl9lbnYwX3JldCAhPSBzaXplb2YoZXhwZWN0ZWRfZW52MCkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRvZmZzZXQgJiM0Mzs9IHN0cl9lbnYwX3JldDtcbiYjNDM7XG4mIzQzO1x0LyogZW52MSBpcyBhdCBicHJtLVx1MDAzZXAgJiM0Mzsgc2l6ZW9mKGFyZzApICYjNDM7IHNpemVvZihhcmcxKSAmIzQzOyBzaXplb2YoZW52MCkgKi9cbiYjNDM7XHRzdHJfZW52MV9yZXQgPSBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKGVudjEsIHNpemVvZihlbnYxKSxcbiYjNDM7XHRcdFx0XHRcdFx0ICh2b2lkICopKGJwcm0tXHUwMDNlcCAmIzQzOyBvZmZzZXQpLFxuJiM0MztcdFx0XHRcdFx0XHQgbW0sIEJQRl9GX1BBRF9aRVJPUyk7XG4mIzQzO1x0aWYgKHN0cl9lbnYxX3JldCAhPSBzaXplb2YoZXhwZWN0ZWRfZW52MSkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0c3RyX2FyZ3NfbWF0Y2ggPVxuJiM0MztcdFx0IV9fYnVpbHRpbl9tZW1jbXAoYXJnMCwgZXhwZWN0ZWRfYXJnMCwgc2l6ZW9mKGV4cGVjdGVkX2FyZzApKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCFfX2J1aWx0aW5fbWVtY21wKGFyZzEsIGV4cGVjdGVkX2FyZzEsIHNpemVvZihleHBlY3RlZF9hcmcxKSk7XG4mIzQzO1x0c3RyX2VudnNfbWF0Y2ggPVxuJiM0MztcdFx0IV9fYnVpbHRpbl9tZW1jbXAoZW52MCwgZXhwZWN0ZWRfZW52MCwgc2l6ZW9mKGV4cGVjdGVkX2VudjApKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCFfX2J1aWx0aW5fbWVtY21wKGVudjEsIGV4cGVjdGVkX2VudjEsIHNpemVvZihleHBlY3RlZF9lbnYxKSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBkYXRhX21hdGNoIFx1MDAyNlx1MDAyNiBzdHJfYXJnc19tYXRjaCBcdTAwMjZcdTAwMjYgc3RyX2VudnNfbWF0Y2ggPyAtRVBFUk0gOiAwO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Jhd190cF9udWxsX2ZhaWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yYXdfdHBfbnVsbF9mYWlsLmNcbmluZGV4IDcyNWQ3M2M5ZmZlMTMuLjE2MzEyNDc5M2QwYTYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmF3X3RwX251bGxfZmFpbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmF3X3RwX251bGxfZmFpbC5jXG5AQCAtMiwyMiAmIzQzOzIsMzQgQEBcbiAvKiBDb3B5cmlnaHQgKGMpIDIwMjQgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjdm1saW51eC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl90cmFjaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDticGZfbWlzYy5oXCYjMzQ7XG4gXG4gY2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbiBcbi0vKiBFbnN1cmUgbW9kdWxlIHBhcmFtZXRlciBoYXMgUFRSX01BWUJFX05VTEwgKi9cbiYjNDM7ZXh0ZXJuIHN0cnVjdCB0YXNrX3N0cnVjdCAqYnBmX3Rhc2tfYWNxdWlyZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIF9fa3N5bTtcbiYjNDM7ZXh0ZXJuIHZvaWQgYnBmX3Rhc2tfcmVsZWFzZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIF9fa3N5bTtcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEVuc3VyZSB0aGUgbW9kdWxlIHRyYWNlcG9pbnQgYXJndW1lbnQgaXMgdHJ1c3RlZC1vci1OVUxMIHdoaWxlIGFsbG93aW5nXG4mIzQzOyAqIGEgZmF1bHQtcHJvdGVjdGVkIHJlYWQgd2l0aG91dCBhbiBleHBsaWNpdCBOVUxMIGNoZWNrLlxuJiM0MzsgKi9cbiBTRUMoXCYjMzQ7dHBfYnRmL2JwZl90ZXN0bW9kX3Rlc3RfcmF3X3RwX251bGxfdHBcJiMzNDspXG4tX19mYWlsdXJlIF9fbXNnKFwmIzM0O1IxIGludmFsaWQgbWVtIGFjY2VzcyAmIzM5O3RydXN0ZWRfcHRyX29yX251bGxfJiMzOTtcJiMzNDspXG4mIzQzO19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxuJiM0MztfX21zZyhcJiMzNDtSMT10cnVzdGVkX3B0cl9vcl9udWxsX3NrX2J1ZmZcJiMzNDspXG4gaW50IHRlc3RfcmF3X3RwX251bGxfYnBmX3Rlc3Rtb2RfdGVzdF9yYXdfdHBfbnVsbF9hcmdfMSh2b2lkICpjdHgpIHtcbiAgICAgYXNtIHZvbGF0aWxlKFwmIzM0O3IxID0gKih1NjQgKikocjEgJiM0MzswKTsgcjEgPSAqKHU2NCAqKShyMSAmIzQzOzApO1wmIzM0OyA6OjogX19jbG9iYmVyX2FsbCk7XG4gICAgIHJldHVybiAwO1xuIH1cbiBcbi0vKiBDaGVjayBOVUxMIG1hcmtpbmcgKi9cbiYjNDM7LypcbiYjNDM7ICogRW5zdXJlIHNjaGVkX3BpX3NldHByaW8mIzM5O3Mgc2Vjb25kIGFyZ3VtZW50IGlzIHRydXN0ZWQtb3ItTlVMTCB3aGlsZSBhbGxvd2luZ1xuJiM0MzsgKiBhIGZhdWx0LXByb3RlY3RlZCByZWFkIHdpdGhvdXQgYW4gZXhwbGljaXQgTlVMTCBjaGVjay5cbiYjNDM7ICovXG4gU0VDKFwmIzM0O3RwX2J0Zi9zY2hlZF9waV9zZXRwcmlvXCYjMzQ7KVxuLV9fZmFpbHVyZSBfX21zZyhcJiMzNDtSMSBpbnZhbGlkIG1lbSBhY2Nlc3MgJiMzOTt0cnVzdGVkX3B0cl9vcl9udWxsXyYjMzk7XCYjMzQ7KVxuJiM0MztfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcbiYjNDM7X19tc2coXCYjMzQ7UjE9dHJ1c3RlZF9wdHJfb3JfbnVsbF90YXNrX3N0cnVjdFwmIzM0OylcbiBpbnQgdGVzdF9yYXdfdHBfbnVsbF9zY2hlZF9waV9zZXRwcmlvX2FyZ18yKHZvaWQgKmN0eCkge1xuICAgICBhc20gdm9sYXRpbGUoXCYjMzQ7cjEgPSAqKHU2NCAqKShyMSAmIzQzOzgpOyByMSA9ICoodTY0ICopKHIxICYjNDM7MCk7XCYjMzQ7IDo6OiBfX2Nsb2JiZXJfYWxsKTtcbiAgICAgcmV0dXJuIDA7XG5AQCAtNjAsNyAmIzQzOzcyLDggQEAgaW50IHRlc3RfdHBfYnRmX3NpZ25hbF9kZWxpdmVyX2luZm9fbm9fZGVyZWYodm9pZCAqY3R4KVxuIH1cbiBcbiBTRUMoXCYjMzQ7dHBfYnRmL3NjaGVkX3Byb2Nlc3Nfd2FpdFwmIzM0Oylcbi1fX2ZhaWx1cmUgX19tc2coXCYjMzQ7UjEgaW52YWxpZCBtZW0gYWNjZXNzICYjMzk7dHJ1c3RlZF9wdHJfb3JfbnVsbF8mIzM5O1wmIzM0OylcbiYjNDM7X19zdWNjZXNzIF9fbG9nX2xldmVsKDIpXG4mIzQzO19fbXNnKFwmIzM0O1IxPXRydXN0ZWRfcHRyX29yX251bGxfcGlkXCYjMzQ7KVxuIGludCB0ZXN0X3Jhd190cF9udWxsX3NjaGVkX3Byb2Nlc3Nfd2FpdF9hcmdfMSh2b2lkICpjdHgpXG4ge1xuIFx0YXNtIHZvbGF0aWxlKFwmIzM0O3IxID0gKih1NjQgKikocjEgJiM0MzswKTsgcjEgPSAqKHUzMiAqKShyMSAmIzQzOzApO1wmIzM0OyA6OjogX19jbG9iYmVyX2FsbCk7XG5AQCAtNzUsMyAmIzQzOzg4LDU4IEBAIGludCB0ZXN0X3Jhd190cF9udWxsX3NjaGVkX3Byb2Nlc3Nfd2FpdF9hcmdfMV9jaGVja2VkKHZvaWQgKmN0eClcbiBcdFx0ICAgICBcJiMzNDtyMSA9ICoodTMyICopKHIxICYjNDM7MCk7XCYjMzQ7IDo6OiBfX2Nsb2JiZXJfYWxsKTtcbiBcdHJldHVybiAwO1xuIH1cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDt0cF9idGYvc2NoZWRfcGlfc2V0cHJpb1wmIzM0OylcbiYjNDM7X19mYWlsdXJlIF9fbG9nX2xldmVsKDIpXG4mIzQzO19fbXNnKFwmIzM0O1IxPXVudHJ1c3RlZF9wdHJfdGFza19zdHJ1Y3RcJiMzNDspXG4mIzQzO19fbXNnKFwmIzM0O1IxIG11c3QgYmUgYSByY3UgcG9pbnRlclwmIzM0OylcbiYjNDM7aW50IEJQRl9QUk9HKHRydXN0ZWRfb3JfbnVsbF93YWxrX2lzX3VudHJ1c3RlZCwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLFxuJiM0MztcdCAgICAgc3RydWN0IHRhc2tfc3RydWN0ICpwaV90YXNrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRhc2tfc3RydWN0ICpwYXJlbnQsICphY3F1aXJlZDtcbiYjNDM7XG4mIzQzO1x0cGFyZW50ID0gcGlfdGFzay1cdTAwM2VyZWFsX3BhcmVudDtcbiYjNDM7XHRhY3F1aXJlZCA9IGJwZl90YXNrX2FjcXVpcmUocGFyZW50KTtcbiYjNDM7XHRpZiAoYWNxdWlyZWQpXG4mIzQzO1x0XHRicGZfdGFza19yZWxlYXNlKGFjcXVpcmVkKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3RwX2J0Zi9zY2hlZF9waV9zZXRwcmlvXCYjMzQ7KVxuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7UjEgbXVzdCBiZSBhIHJjdSBwb2ludGVyXCYjMzQ7KVxuJiM0MztpbnQgQlBGX1BST0coZGVyaXZlZF9wdHJfbnVsbF9jaGVja19kb2VzX25vdF9yZXN0b3JlX3RydXN0LFxuJiM0MztcdCAgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBpX3Rhc2spXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudCwgKmFjcXVpcmVkO1xuJiM0MztcbiYjNDM7XHRwYXJlbnQgPSBwaV90YXNrLVx1MDAzZXJlYWxfcGFyZW50O1xuJiM0MztcdGlmICghcGFyZW50KVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGFjcXVpcmVkID0gYnBmX3Rhc2tfYWNxdWlyZShwYXJlbnQpO1xuJiM0MztcdGlmIChhY3F1aXJlZClcbiYjNDM7XHRcdGJwZl90YXNrX3JlbGVhc2UoYWNxdWlyZWQpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogSW4gY29udHJhc3QsIGNoZWNraW5nIHRoZSBvcmlnaW5hbCB0cnVzdGVkLW9yLU5VTEwgcG9pbnRlciByZW1vdmVzXG4mIzQzOyAqIFBUUl9NQVlCRV9OVUxMIHdoaWxlIHJldGFpbmluZyBQVFJfVFJVU1RFRC5cbiYjNDM7ICovXG4mIzQzO1NFQyhcJiMzNDt0cF9idGYvc2NoZWRfcGlfc2V0cHJpb1wmIzM0OylcbiYjNDM7X19zdWNjZXNzXG4mIzQzO2ludCBCUEZfUFJPRyhvcmlnaW5hbF9wdHJfbnVsbF9jaGVja19yZXRhaW5zX3RydXN0LFxuJiM0MztcdCAgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBpX3Rhc2spXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmFjcXVpcmVkO1xuJiM0MztcbiYjNDM7XHRpZiAoIXBpX3Rhc2spXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0YWNxdWlyZWQgPSBicGZfdGFza19hY3F1aXJlKHBpX3Rhc2spO1xuJiM0MztcdGlmIChhY3F1aXJlZClcbiYjNDM7XHRcdGJwZl90YXNrX3JlbGVhc2UoYWNxdWlyZWQpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RwX2J0Zl9udWxsYWJsZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdHBfYnRmX251bGxhYmxlLmNcbmluZGV4IGNmMDU0N2E2MTNmZmMuLmI3OTE0MjI0YmExOTQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90cF9idGZfbnVsbGFibGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdHBfYnRmX251bGxhYmxlLmNcbkBAIC03LDcgJiM0Mzs3LDcgQEBcbiAjaW5jbHVkZSBcJiMzNDticGZfbWlzYy5oXCYjMzQ7XG4gXG4gU0VDKFwmIzM0O3RwX2J0Zi9icGZfdGVzdG1vZF90ZXN0X251bGxhYmxlX2JhcmVfdHBcJiMzNDspXG4tX19mYWlsdXJlIF9fbXNnKFwmIzM0O1IxIGludmFsaWQgbWVtIGFjY2VzcyAmIzM5O3RydXN0ZWRfcHRyX29yX251bGxfJiMzOTtcJiMzNDspXG4mIzQzO19fc3VjY2Vzc1xuIGludCBCUEZfUFJPRyhoYW5kbGVfdHBfYnRmX251bGxhYmxlX2JhcmUxLCBzdHJ1Y3QgYnBmX3Rlc3Rtb2RfdGVzdF9yZWFkX2N0eCAqbnVsbGFibGVfY3R4KVxuIHtcbiBcdHJldHVybiBudWxsYWJsZV9jdHgtXHUwMDNlbGVuO1xuQEAgLTIxLDQgJiM0MzsyMSw0NyBAQCBpbnQgQlBGX1BST0coaGFuZGxlX3RwX2J0Zl9udWxsYWJsZV9iYXJlMiwgc3RydWN0IGJwZl90ZXN0bW9kX3Rlc3RfcmVhZF9jdHggKm51bFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztTRUMoXCYjMzQ7dHBfYnRmL2JwZl90ZXN0bW9kX3Rlc3RfbnVsbGFibGVfYmFyZV90cFwmIzM0OylcbiYjNDM7X19zdWNjZXNzXG4mIzQzO2ludCBCUEZfUFJPRyhoYW5kbGVfdHBfYnRmX251bGxhYmxlX21lbSwgc3RydWN0IGJwZl90ZXN0bW9kX3Rlc3RfcmVhZF9jdHggKm51bGxhYmxlX2N0eClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBudWxsYWJsZV9jdHgtXHUwMDNlYnVmWzBdO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7dHBfYnRmL2JwZl90ZXN0bW9kX3Rlc3RfbnVsbGFibGVfYmFyZV90cFwmIzM0OylcbiYjNDM7X19mYWlsdXJlIF9fbXNnKFwmIzM0O3BvaW50ZXIgYXJpdGhtZXRpYyBvbiB0cnVzdGVkX3B0cl9vcl9udWxsXyBwcm9oaWJpdGVkXCYjMzQ7KVxuJiM0MztpbnQgQlBGX1BST0coaGFuZGxlX3RwX2J0Zl9udWxsYWJsZV9hcml0aCwgc3RydWN0IGJwZl90ZXN0bW9kX3Rlc3RfcmVhZF9jdHggKm51bGxhYmxlX2N0eClcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZShcJiMzNDslW2N0eF0gJiM0Mzs9IDFcJiMzNDsgOiBbY3R4XSBcJiMzNDsmIzQzO3JcJiMzNDsobnVsbGFibGVfY3R4KSk7XG4mIzQzO1x0cmV0dXJuIG51bGxhYmxlX2N0eC1cdTAwM2VsZW47XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDt0cF9idGYvYnBmX3Rlc3Rtb2RfdGVzdF9udWxsYWJsZV9iYXJlX3RwXCYjMzQ7KVxuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7aW52YWxpZCBtZW0gYWNjZXNzICYjMzk7dHJ1c3RlZF9wdHJfb3JfbnVsbF8mIzM5O1wmIzM0OylcbiYjNDM7aW50IEJQRl9QUk9HKGhhbmRsZV90cF9idGZfbnVsbGFibGVfYXRvbWljX3JtdyxcbiYjNDM7XHQgICAgIHN0cnVjdCBicGZfdGVzdG1vZF90ZXN0X3JlYWRfY3R4ICpudWxsYWJsZV9jdHgpXG4mIzQzO3tcbiYjNDM7XHRhc20gdm9sYXRpbGUgKFwmIzM0O3IxID0gJVtjdHhdO1wmIzM0O1xuJiM0MztcdFx0ICAgICAgXCYjMzQ7dzIgPSAxO1wmIzM0O1xuJiM0MztcdFx0ICAgICAgXCYjMzQ7bG9jayAqKHUzMiAqKShyMSAmIzQzOyAlW2xlbl0pICYjNDM7PSB3MjtcJiMzNDtcbiYjNDM7XHRcdCAgICAgIDpcbiYjNDM7XHRcdCAgICAgIDogW2N0eF0gXCYjMzQ7clwmIzM0OyhudWxsYWJsZV9jdHgpLFxuJiM0MztcdFx0XHRfX2ltbV9jb25zdChsZW4sXG4mIzQzO1x0XHRcdFx0ICAgIG9mZnNldG9mKHN0cnVjdCBicGZfdGVzdG1vZF90ZXN0X3JlYWRfY3R4LFxuJiM0MztcdFx0XHRcdFx0ICAgICBsZW4pKVxuJiM0MztcdFx0ICAgICAgOiBcJiMzNDtyMVwmIzM0OywgXCYjMzQ7cjJcJiMzNDssIFwmIzM0O21lbW9yeVwmIzM0Oyk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOyNpZmRlZiBfX0JQRl9GRUFUVVJFX0xPQURfQUNRX1NUT1JFX1JFTFxuJiM0MztTRUMoXCYjMzQ7dHBfYnRmL2JwZl90ZXN0bW9kX3Rlc3RfbnVsbGFibGVfYmFyZV90cFwmIzM0OylcbiYjNDM7X19mYWlsdXJlXG4mIzQzO19fbXNnKFwmIzM0O0JQRl9BVE9NSUMgbG9hZHMgZnJvbSBSe3tbMC05XSYjNDM7fX0gdHJ1c3RlZF9wdHJfb3JfbnVsbF9cJiMzNDspXG4mIzQzO2ludCBCUEZfUFJPRyhoYW5kbGVfdHBfYnRmX251bGxhYmxlX2xvYWRfYWNxdWlyZSxcbiYjNDM7XHQgICAgIHN0cnVjdCBicGZfdGVzdG1vZF90ZXN0X3JlYWRfY3R4ICpudWxsYWJsZV9jdHgpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gX19hdG9taWNfbG9hZF9uKFx1MDAyNm51bGxhYmxlX2N0eC1cdTAwM2VsZW4sIF9fQVRPTUlDX0FDUVVJUkUpO1xuJiM0Mzt9XG4mIzQzOyNlbmRpZlxuJiM0MztcbiBjaGFyIF9saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RwX2J0Zl9udWxsYWJsZV9ydW50aW1lLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90cF9idGZfbnVsbGFibGVfcnVudGltZS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNWM5YzdmOTQwNDBkY1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdHBfYnRmX251bGxhYmxlX3J1bnRpbWUuY1xuQEAgLTAsMCAmIzQzOzEsMzUgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3ZtbGludXguaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDsuLi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmhcJiMzNDtcbiYjNDM7XG4mIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG4mIzQzO1xuJiM0MztpbnQgbW9uaXRvcmVkX3RpZDtcbiYjNDM7aW50IGNhbGxzO1xuJiM0MztfX3U2NCBub25udWxsX2xlbjtcbiYjNDM7X191NjQgbnVsbF9sZW47XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7dHBfYnRmL2JwZl90ZXN0bW9kX3Rlc3RfbnVsbGFibGVfYmFyZV90cFwmIzM0OylcbiYjNDM7aW50IEJQRl9QUk9HKGhhbmRsZV9udWxsYWJsZV9ydW50aW1lLFxuJiM0MztcdCAgICAgc3RydWN0IGJwZl90ZXN0bW9kX3Rlc3RfcmVhZF9jdHggKm51bGxhYmxlX2N0eClcbiYjNDM7e1xuJiM0MztcdF9fdTMyIHRpZCA9IGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpO1xuJiM0MztcdF9fdTY0IGxlbjtcbiYjNDM7XHRpbnQgY2FsbDtcbiYjNDM7XG4mIzQzO1x0aWYgKHRpZCAhPSBtb25pdG9yZWRfdGlkKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGxlbiA9IG51bGxhYmxlX2N0eC1cdTAwM2VsZW47XG4mIzQzO1x0Y2FsbCA9IGNhbGxzJiM0MzsmIzQzOztcbiYjNDM7XG4mIzQzO1x0aWYgKGNhbGwgPT0gMClcbiYjNDM7XHRcdG5vbm51bGxfbGVuID0gbGVuO1xuJiM0MztcdGVsc2UgaWYgKGNhbGwgPT0gMSlcbiYjNDM7XHRcdG51bGxfbGVuID0gbGVuO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sc20uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sc20uY1xuaW5kZXggYzcyNGJmMzg5ZjVjNi4uZmFjMTMzZDkwZjVlNiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sc20uY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xzbS5jXG5AQCAtMTYyLDEzICYjNDM7MTYyLDEzIEBAIF9fbmFrZWQgaW50IGRpc2FibGVkX2hvb2tfdGVzdDModm9pZCAqY3R4KVxuIFxuIFNFQyhcJiMzNDtsc20vbW1hcF9maWxlXCYjMzQ7KVxuIF9fZGVzY3JpcHRpb24oXCYjMzQ7bm90IG51bGwgY2hlY2tpbmcgbnVsbGFibGUgcG9pbnRlciBpbiBicGZfbHNtX21tYXBfZmlsZVwmIzM0Oylcbi1fX2ZhaWx1cmUgX19tc2coXCYjMzQ7UjEgaW52YWxpZCBtZW0gYWNjZXNzICYjMzk7dHJ1c3RlZF9wdHJfb3JfbnVsbF8mIzM5O1wmIzM0OylcbiYjNDM7X19zdWNjZXNzXG4gaW50IEJQRl9QUk9HKG5vX251bGxfY2hlY2ssIHN0cnVjdCBmaWxlICpmaWxlKVxuIHtcbi1cdHN0cnVjdCBpbm9kZSAqaW5vZGU7XG4mIzQzO1x0aW5vX3QgaW5vO1xuIFxuLVx0aW5vZGUgPSBmaWxlLVx1MDAzZWZfaW5vZGU7XG4tXHRfX3NpbmsoaW5vZGUpO1xuJiM0MztcdGlubyA9IGZpbGUtXHUwMDNlZl9pbm9kZS1cdTAwM2VpX2lubztcbiYjNDM7XHRfX3NpbmsoaW5vKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0xODgsNiAmIzQzOzE4OCwxNiBAQCBpbnQgQlBGX1BST0cobnVsbF9jaGVjaywgc3RydWN0IGZpbGUgKmZpbGUpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO1NFQyhcJiMzNDtsc20vbW1hcF9maWxlXCYjMzQ7KVxuJiM0MztfX2Rlc2NyaXB0aW9uKFwmIzM0O3N0b3JlIHRocm91Z2ggdHJ1c3RlZC1vci1udWxsIGZpbGUgaXMgcmVqZWN0ZWRcJiMzNDspXG4mIzQzO19fZmFpbHVyZVxuJiM0MztfX21zZyhcJiMzNDtSe3tbMC05XSYjNDM7fX0gaW52YWxpZCBtZW0gYWNjZXNzICYjMzk7dHJ1c3RlZF9wdHJfb3JfbnVsbF8mIzM5O1wmIzM0OylcbiYjNDM7aW50IEJQRl9QUk9HKHN0b3JlX3Rocm91Z2hfdHJ1c3RlZF9vcl9udWxsX2ZpbGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuJiM0Mzt7XG4mIzQzO1x0ZmlsZS1cdTAwM2VmX2ZsYWdzID0gMDtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBTRUMoXCYjMzQ7bHNtX2Nncm91cC9maWxlX29wZW5cJiMzNDspXG4gX19kZXNjcmlwdGlvbihcJiMzNDtzbGVlcGFibGUgbHNtX2Nncm91cCBwcm9ncmFtIGlzIHJlamVjdGVkXCYjMzQ7KVxuIF9fZmFpbHVyZSBfX21zZyhcJiMzNDtQcm9ncmFtIG9mIHRoaXMgdHlwZSBjYW5ub3QgYmUgc2xlZXBhYmxlXCYjMzQ7KVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl92ZnNfYWNjZXB0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdmZzX2FjY2VwdC5jXG5pbmRleCA1NTM5OGMwNDI5MGE4Li4xN2MxNTQyY2M3ZTE3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3Zmc19hY2NlcHQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3Zmc19hY2NlcHQuY1xuQEAgLTEwMCw0ICYjNDM7MTAwLDE4IEBAIGludCBCUEZfUFJPRyhpbm9kZV9yZW5hbWUsIHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7U0VDKFwmIzM0O2xzbS5zL2lub2RlX3JlbmFtZVwmIzM0OylcbiYjNDM7X19zdWNjZXNzIF9fbG9nX2xldmVsKDIpXG4mIzQzO19fbXNnKFwmIzM0O1J7e1swLTldJiM0Mzt9fT10cnVzdGVkX3B0cl9vcl9udWxsX2lub2RlXCYjMzQ7KVxuJiM0MztpbnQgQlBGX1BST0coaW5vZGVfcmVuYW1lX25vX251bGxfY2hlY2ssIHN0cnVjdCBpbm9kZSAqb2xkX2RpcixcbiYjNDM7XHQgICAgIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqbmV3X2RpcixcbiYjNDM7XHQgICAgIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnksIHVuc2lnbmVkIGludCBmbGFncylcbiYjNDM7e1xuJiM0MztcdGlub190IGlubyA9IG5ld19kZW50cnktXHUwMDNlZF9pbm9kZS1cdTAwM2VpX2lubztcbiYjNDM7XG4mIzQzO1x0aWYgKGlubyA9PSAwKVxuJiM0MztcdFx0cmV0dXJuIC1FQUNDRVM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gY2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdmZzX3JlamVjdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3Zmc19yZWplY3QuY1xuaW5kZXggOGYwYzQ1NDIxZjg5My4uMmEwODEzMjU4MTgzZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl92ZnNfcmVqZWN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl92ZnNfcmVqZWN0LmNcbkBAIC0xNTksMTggJiM0MzsxNTksNCBAQCBpbnQgQlBGX1BST0cocGF0aF9kX3BhdGhfa2Z1bmNfbm9uX2xzbSwgc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBmaWxlICpmKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLVNFQyhcJiMzNDtsc20ucy9pbm9kZV9yZW5hbWVcJiMzNDspXG4tX19mYWlsdXJlIF9fbXNnKFwmIzM0O2ludmFsaWQgbWVtIGFjY2VzcyAmIzM5O3RydXN0ZWRfcHRyX29yX251bGxfJiMzOTtcJiMzNDspXG4taW50IEJQRl9QUk9HKGlub2RlX3JlbmFtZSwgc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxuLVx0ICAgICBzdHJ1Y3QgaW5vZGUgKm5ld19kaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnksXG4tXHQgICAgIHVuc2lnbmVkIGludCBmbGFncylcbi17XG4tXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbmV3X2RlbnRyeS1cdTAwM2VkX2lub2RlO1xuLVx0aW5vX3QgaW5vO1xuLVxuLVx0aW5vID0gaW5vZGUtXHUwMDNlaV9pbm87XG4tXHRpZiAoaW5vID09IDApXG4tXHRcdHJldHVybiAtRUFDQ0VTO1xuLVx0cmV0dXJuIDA7XG4tfVxuIGNoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcbmluZGV4IGY3OThiYmJiNGQxM2MuLjJiYTZhODNkMjQzZjUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jXG5AQCAtNzAyLDYgJiM0Mzs3MDIsNyBAQCBicGZfdGVzdG1vZF90ZXN0X3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuIFx0aWYgKGJwZl90ZXN0bW9kX2xvb3BfdGVzdCgxMDEpIFx1MDAzZSAxMDApXG4gXHRcdHRyYWNlX2JwZl90ZXN0bW9kX3Rlc3RfcmVhZChjdXJyZW50LCBcdTAwMjZjdHgpO1xuIFxuJiM0MztcdHRyYWNlX2JwZl90ZXN0bW9kX3Rlc3RfbnVsbGFibGVfYmFyZV90cChcdTAwMjZjdHgpO1xuIFx0dHJhY2VfYnBmX3Rlc3Rtb2RfdGVzdF9udWxsYWJsZV9iYXJlX3RwKE5VTEwpO1xuIFxuIFx0LyogTWFnaWMgbnVtYmVyIHRvIGVuYWJsZSB3cml0YWJsZSB0cCAqL1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NjaGVkX2V4dC9tYXliZV9udWxsX2ZhaWxfZHNwLmJwZi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2NoZWRfZXh0L21heWJlX251bGxfZmFpbF9kc3AuYnBmLmNcbmluZGV4IGVjNzI0ZDdiMzNkMTguLmVjYWEzNjM1NWNhZWMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zY2hlZF9leHQvbWF5YmVfbnVsbF9mYWlsX2RzcC5icGYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2NoZWRfZXh0L21heWJlX251bGxfZmFpbF9kc3AuYnBmLmNcbkBAIC03LDE0ICYjNDM7NywxMyBAQFxuIFxuIGNoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG4gXG4tdTY0IHZ0aW1lX3Rlc3Q7XG4tXG4gdm9pZCBCUEZfU1RSVUNUX09QUyhtYXliZV9udWxsX3J1bm5pbmcsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiB7fVxuIFxuIHZvaWQgQlBGX1NUUlVDVF9PUFMobWF5YmVfbnVsbF9mYWlsX2Rpc3BhdGNoLCBzMzIgY3B1LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4ge1xuLVx0dnRpbWVfdGVzdCA9IHAtXHUwMDNlc2N4LmRzcV92dGltZTtcbiYjNDM7XHQvKiBQb2ludGVyIGFyaXRobWV0aWMgb24gYSB0cnVzdGVkLW9yLU5VTEwgcG9pbnRlciBtdXN0IGJlIHJlamVjdGVkLiAqL1xuJiM0MztcdGFzbSB2b2xhdGlsZShcJiMzNDslW3BdICYjNDM7PSAwXCYjMzQ7IDogW3BdIFwmIzM0OyYjNDM7clwmIzM0OyhwKSk7XG4gfVxuIFxuIFNFQyhcJiMzNDsuc3RydWN0X29wcy5saW5rXCYjMzQ7KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjIwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0RFQlVHX0lORk9fQlRGJiMzNDssCiAgICAmIzM0O0JQRl9MU00mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfY29weV9mcm9tX3VzZXJfbW0mIzM0OywKICAgICYjMzQ7YnBmX2NvcHlfZnJvbV91c2VyX21tX3N0ciYjMzQ7LAogICAgJiMzNDticGZfY29weV9mcm9tX3VzZXJfdGFzayYjMzQ7LAogICAgJiMzNDticGZfY29weV9mcm9tX3VzZXJfdGFza19zdHImIzM0OywKICAgICYjMzQ7Y29weV9yZW1vdGVfbW1fc3RyJiMzNDssCiAgICAmIzM0O2NvcHlfcmVtb3RlX3ZtX3N0ciYjMzQ7LAogICAgJiMzNDtfX2NvcHlfcmVtb3RlX21tX3N0ciYjMzQ7LAogICAgJiMzNDtjaGVja19wdHJfdG9fYnRmX2FjY2VzcyYjMzQ7LAogICAgJiMzNDt0eXBlX2lzX3RydXN0ZWRfb3JfbnVsbCYjMzQ7LAogICAgJiMzNDtjaGVja19tZW1fYWNjZXNzJiMzNDssCiAgICAmIzM0O2JwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcyYjMzQ7LAogICAgJiMzNDtmcmVlX2Jwcm0mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgc2xlZXBhYmxlIEJQRiBrZnVuY3MgKGJwZl9jb3B5X2Zyb21fdXNlcl9tbSBhbmQgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0ciksIHJlZmFjdG9ycyByZW1vdGUgTU0gc3RyaW5nIGNvcHlpbmcgaGVscGVycyBhY3Jvc3MgbW0vIGFuZCBrZXJuZWwvYnBmLywgbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byBhbGxvdyBmYXVsdC1wcm90ZWN0ZWQgbG9hZHMgdGhyb3VnaCB0cnVzdGVkLW9yLW51bGwgcG9pbnRlcnMsIGFuZCBhbHRlcnMgbW0gY2xlYW51cCBpbiBmcmVlX2Jwcm0oKS4gVGhlc2UgY2hhbmdlcyB0b3VjaCBjb3JlIEJQRiBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgZXhlY3V0aW9uIHBhdGhzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cyB2aWEgQlBGIGFuZCBleGVjIHN5c2NhbGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZGI3N2FmNjZiM2FhMDdiMTNkYzgzYWFmY2ExYjhiMGEwMjkxYTFmYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDcgMjA6MjA6NTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9leGVjLmMgYi9mcy9leGVjLmMKaW5kZXggNzQ1ZjZlYjUyNzllNi4uNGRkZDQwM2ZkOTFjNyAxMDA2NDQKLS0tIGEvZnMvZXhlYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4ZWMuYwpAQCAtMTQ1Niw5ICYjNDM7MTQ1NiwxMiBAQCB2b2lkIGJwcm1fZHJvcF9sb2FkZXIoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKIAogc3RhdGljIHZvaWQgZnJlZV9icHJtKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pCiB7Ci0JaWYgKGJwcm0tJmd0O21tKSB7CiYjNDM7CXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gYnBybS0mZ3Q7bW07CiYjNDM7CiYjNDM7CWlmIChtbSkgewogCQlhY2N0X2FyZ19zaXplKGJwcm0sIDApOwotCQltbXB1dChicHJtLSZndDttbSk7CiYjNDM7CQlicHJtLSZndDttbSA9IE5VTEw7CiYjNDM7CQltbXB1dChtbSk7CiAJfQogCWlmIChicHJtLSZndDt1c2VyX25zKQogCQlwdXRfdXNlcl9ucyhicHJtLSZndDt1c2VyX25zKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmggYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oCmluZGV4IDk3MjdkZjVhZjgzYWIuLjRmMDMyYWQ4M2M2NzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaApAQCAtMTMzOSw2ICYjNDM7MTMzOSwxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYnBmX2lzX3B0cl90b19tZW1fb3JfYnRmX2lkKGVudW0gYnBmX3JlZ190eXBlIHR5cGUpCiAJfQogfQogCiYjNDM7c3RhdGljIGlubGluZSBib29sIGJwZl9pc190cnVzdGVkX29yX251bGxfYnRmX3B0cihlbnVtIGJwZl9yZWdfdHlwZSB0eXBlKQomIzQzO3sKJiM0MzsJcmV0dXJuIHR5cGUgPT0gKFBUUl9UT19CVEZfSUQgfCBQVFJfVFJVU1RFRCB8IFBUUl9NQVlCRV9OVUxMKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIGJvb2wgYnBmX21heV9mYXVsdF9vbl9kZXJlZihlbnVtIGJwZl9yZWdfdHlwZSB0eXBlKQogewogCS8qCkBAIC0xMzQ2LDcgJiM0MzsxMzUxLDkgQEAgc3RhdGljIGlubGluZSBib29sIGJwZl9tYXlfZmF1bHRfb25fZGVyZWYoZW51bSBicGZfcmVnX3R5cGUgdHlwZSkKIAkgKiBwcm90ZWN0aW9uLCB0aGF0IGlzLCB0aGUgb25lcyBicGZfY29udmVydF9jdHhfYWNjZXNzZXMoKSBoYXMgdG8KIAkgKiB0dXJuIGEgQlBGX0xEWCBpbnRvIGEgQlBGX1BST0JFX01FTSBvbmUgZm9yLgogCSAqLwotCXJldHVybiB0eXBlID09IFBUUl9UT19CVEZfSUQgfHwgKHR5cGVfZmxhZyh0eXBlKSAmYW1wOyBQVFJfVU5UUlVTVEVEKTsKJiM0MzsJcmV0dXJuIHR5cGUgPT0gUFRSX1RPX0JURl9JRCB8fAomIzQzOwkgICAgICAgKHR5cGVfZmxhZyh0eXBlKSAmYW1wOyBQVFJfVU5UUlVTVEVEKSB8fAomIzQzOwkgICAgICAgYnBmX2lzX3RydXN0ZWRfb3JfbnVsbF9idGZfcHRyKHR5cGUpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgYnBmX3Byb2dfaGFzX2FyZW5hX2N0eF9hcmcoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oCmluZGV4IGRkMDljNDM4ZmEyM2UuLmQ1YmRlMWY3MWE5N2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW0uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tLmgKQEAgLTMzMjYsNiAmIzQzOzMzMjYsOCBAQCBleHRlcm4gaW50IGFjY2Vzc19yZW1vdGVfdm0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKTsKIAogI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTAomIzQzO2V4dGVybiBpbnQgY29weV9yZW1vdGVfbW1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiYjNDM7CQkJICAgICAgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKTsKIGV4dGVybiBpbnQgY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQkgICAgICB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2hlbHBlcnMuYyBiL2tlcm5lbC9icGYvaGVscGVycy5jCmluZGV4IGIzY2M1YzhmYzg3NTYuLmQzYzU2NDQzN2FkMDYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvaGVscGVycy5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvaGVscGVycy5jCkBAIC0zMiw2ICYjNDM7MzIsMTAgQEAKIAogI2luY2x1ZGUgJiMzNDsuLi8uLi9saWIva3N0cnRveC5oJiMzNDsKIAomIzQzO19fYnBmX2tmdW5jIGludCBicGZfY29weV9mcm9tX3VzZXJfbW0odm9pZCAqZHN0LCB1MzIgZHN0X19zeiwKJiM0MzsJCQkJICAgICAgY29uc3Qgdm9pZCBfX3VzZXIgKnVuc2FmZV9wdHJfX2lnbiwKJiM0MzsJCQkJICAgICAgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHU2NCBmbGFncyk7CiYjNDM7CiAvKiBJZiBrZXJuZWwgc3Vic3lzdGVtIGlzIGFsbG93aW5nIGVCUEYgcHJvZ3JhbXMgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uLAogICogaW5zaWRlIGl0cyBvd24gdmVyaWZpZXJfb3BzLSZndDtnZXRfZnVuY19wcm90bygpIGNhbGxiYWNrIGl0IHNob3VsZCByZXR1cm4KICAqIGJwZl9tYXBfbG9va3VwX2VsZW1fcHJvdG8sIHNvIHRoYXQgdmVyaWZpZXIgY2FuIHByb3Blcmx5IGNoZWNrIHRoZSBhcmd1bWVudHMKQEAgLTY4MiwyMiAmIzQzOzY4NiwxNSBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2NvcHlfZnJvbV91c2VyX3Byb3RvID0gewogQlBGX0NBTExfNShicGZfY29weV9mcm9tX3VzZXJfdGFzaywgdm9pZCAqLCBkc3QsIHUzMiwgc2l6ZSwKIAkgICBjb25zdCB2b2lkIF9fdXNlciAqLCB1c2VyX3B0ciwgc3RydWN0IHRhc2tfc3RydWN0ICosIHRzaywgdTY0LCBmbGFncykKIHsKJiM0MzsJc3RydWN0IG1tX3N0cnVjdCAqbW07CiAJaW50IHJldDsKIAotCS8qIGZsYWdzIGlzIG5vdCB1c2VkIHlldCAqLwotCWlmICh1bmxpa2VseShmbGFncykpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKHVubGlrZWx5KCFzaXplKSkKLQkJcmV0dXJuIDA7Ci0KLQlyZXQgPSBhY2Nlc3NfcHJvY2Vzc192bSh0c2ssICh1bnNpZ25lZCBsb25nKXVzZXJfcHRyLCBkc3QsIHNpemUsIDApOwotCWlmIChyZXQgPT0gc2l6ZSkKLQkJcmV0dXJuIDA7CiYjNDM7CW1tID0gZ2V0X3Rhc2tfbW0odHNrKTsKJiM0MzsJcmV0ID0gYnBmX2NvcHlfZnJvbV91c2VyX21tKGRzdCwgc2l6ZSwgdXNlcl9wdHIsIG1tLCBmbGFncyk7CiYjNDM7CWlmIChtbSkKJiM0MzsJCW1tcHV0KG1tKTsKIAotCW1lbXNldChkc3QsIDAsIHNpemUpOwotCS8qIFJldHVybiAtRUZBVUxUIGZvciBwYXJ0aWFsIHJlYWQgKi8KLQlyZXR1cm4gcmV0ICZsdDsgMCA/IHJldCA6IC1FRkFVTFQ7CiYjNDM7CXJldHVybiByZXQ7CiB9CiAKIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfY29weV9mcm9tX3VzZXJfdGFza19wcm90byA9IHsKQEAgLTM2NTgsNiAmIzQzOzM2NTUsMTAwIEBAIF9fYnBmX2tmdW5jIGludCBicGZfY29weV9mcm9tX3VzZXJfc3RyKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osIGNvbnN0IHZvaWQgX191c2VyCiAJcmV0dXJuIHJldCAmIzQzOyAxOwogfQogCiYjNDM7LyoqCiYjNDM7ICogYnBmX2NvcHlfZnJvbV91c2VyX21tKCkgLSBDb3B5IGRhdGEgZnJvbSBhbiBhZGRyZXNzIHNwYWNlCiYjNDM7ICogQGRzdDogICAgICAgICAgICAgRGVzdGluYXRpb24gYWRkcmVzcywgaW4ga2VybmVsIHNwYWNlCiYjNDM7ICogQGRzdF9fc3o6ICAgICAgICAgTnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkKJiM0MzsgKiBAdW5zYWZlX3B0cl9faWduOiBTb3VyY2UgYWRkcmVzcyBpbiB0aGUgYWRkcmVzcyBzcGFjZQomIzQzOyAqIEBtbTogICAgICAgICAgICAgIEFkZHJlc3Mgc3BhY2UgdG8gY29weSBmcm9tCiYjNDM7ICogQGZsYWdzOiAgICAgICAgICAgUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2U7IG11c3QgYmUgemVybwomIzQzOyAqCiYjNDM7ICogQ29waWVzIGRhdGEgZnJvbSB0aGUgdXNlciBhZGRyZXNzIHNwYWNlIGFzc29jaWF0ZWQgd2l0aCBAbW0uIFRoZSBkZXN0aW5hdGlvbgomIzQzOyAqIGlzIHplcm9lZCBpZiBhbiBhdHRlbXB0ZWQgY29weSBjYW5ub3QgYmUgY29tcGxldGVkIGluIGZ1bGwuIFVuc3VwcG9ydGVkCiYjNDM7ICogZmxhZ3MgcmV0dXJuIC1FSU5WQUwgd2l0aG91dCBtb2RpZnlpbmcgQGRzdC4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRUlOVkFMIGlmIEBmbGFncyBpcyBub24temVybywgb3IgLUVGQVVMVCBpZiB0aGUgY29weQomIzQzOyAqIGZhaWxzIG9yIGlzIHBhcnRpYWwuCiYjNDM7ICovCiYjNDM7X19icGZfa2Z1bmMgaW50IGJwZl9jb3B5X2Zyb21fdXNlcl9tbSh2b2lkICpkc3QsIHUzMiBkc3RfX3N6LAomIzQzOwkJCQkgICAgICBjb25zdCB2b2lkIF9fdXNlciAqdW5zYWZlX3B0cl9faWduLAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdTY0IGZsYWdzKQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKHVubGlrZWx5KGZsYWdzKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAodW5saWtlbHkoIWRzdF9fc3opKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmICh1bmxpa2VseSghbW0pKSB7CiYjNDM7CQltZW1zZXQoZHN0LCAwLCBkc3RfX3N6KTsKJiM0MzsJCXJldHVybiAtRUZBVUxUOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IGFjY2Vzc19yZW1vdGVfdm0obW0sICh1bnNpZ25lZCBsb25nKXVuc2FmZV9wdHJfX2lnbiwKJiM0MzsJCQkgICAgICAgZHN0LCBkc3RfX3N6LCAwKTsKJiM0MzsJaWYgKHJldCA9PSBkc3RfX3N6KQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CW1lbXNldChkc3QsIDAsIGRzdF9fc3opOwomIzQzOwlyZXR1cm4gcmV0ICZsdDsgMCA/IHJldCA6IC1FRkFVTFQ7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIoKSAtIENvcHkgYSBzdHJpbmcgZnJvbSBhbiBhZGRyZXNzIHNwYWNlCiYjNDM7ICogQGRzdDogICAgICAgICAgICAgRGVzdGluYXRpb24gYWRkcmVzcywgaW4ga2VybmVsIHNwYWNlLiBUaGlzIGJ1ZmZlciBtdXN0IGJlCiYjNDM7ICogICAgICAgICAgICAgICAgICAgYXQgbGVhc3QgQGRzdF9fc3ogYnl0ZXMgbG9uZwomIzQzOyAqIEBkc3RfX3N6OiAgICAgICAgIE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHksIGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMCiYjNDM7ICogQHVuc2FmZV9wdHJfX2lnbjogU291cmNlIGFkZHJlc3MgaW4gdGhlIGFkZHJlc3Mgc3BhY2UKJiM0MzsgKiBAbW06ICAgICAgICAgICAgICBBZGRyZXNzIHNwYWNlIHRvIGNvcHkgZnJvbQomIzQzOyAqIEBmbGFnczogICAgICAgICAgIFRoZSBvbmx5IHN1cHBvcnRlZCBmbGFnIGlzIEJQRl9GX1BBRF9aRVJPUwomIzQzOyAqCiYjNDM7ICogQ29waWVzIGEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIGZyb20gdGhlIHVzZXIgYWRkcmVzcyBzcGFjZSBhc3NvY2lhdGVkIHdpdGgKJiM0MzsgKiBAbW0uIElmIHRoZSBzdHJpbmcgaXMgdG9vIGxvbmcsIEBkc3QgaXMgc3RpbGwgTlVMLXRlcm1pbmF0ZWQgdW5sZXNzIEBkc3RfX3N6CiYjNDM7ICogaXMgemVyby4KJiM0MzsgKgomIzQzOyAqIElmIHRoZSBmbGFncyBhcmUgdmFsaWQgYW5kIEJQRl9GX1BBRF9aRVJPUyBpcyBzZXQsIHRoZSB1bnVzZWQgcG9ydGlvbiBvZgomIzQzOyAqIEBkc3QgaXMgY2xlYXJlZCBvbiBzdWNjZXNzIGFuZCBhbGwgb2YgQGRzdCBpcyBjbGVhcmVkIG9uIGEgY29weSBmYWlsdXJlLgomIzQzOyAqIFVuc3VwcG9ydGVkIGZsYWdzIHJldHVybiAtRUlOVkFMIHdpdGhvdXQgbW9kaWZ5aW5nIEBkc3QuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IFRoZSBudW1iZXIgb2YgY29waWVkIGJ5dGVzIGluY2x1ZGluZyB0aGUgTlVMIHRlcm1pbmF0b3Igb24gc3VjY2VzcywKJiM0MzsgKiBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KJiM0MzsgKi8KJiM0MztfX2JwZl9rZnVuYyBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cih2b2lkICpkc3QsIHUzMiBkc3RfX3N6LAomIzQzOwkJCQkJICBjb25zdCB2b2lkIF9fdXNlciAqdW5zYWZlX3B0cl9faWduLAomIzQzOwkJCQkJICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdTY0IGZsYWdzKQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKHVubGlrZWx5KGZsYWdzICZhbXA7IH5CUEZfRl9QQURfWkVST1MpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWlmICh1bmxpa2VseShkc3RfX3N6ID09IDApKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmICh1bmxpa2VseSghbW0pKSB7CiYjNDM7CQlpZiAoZmxhZ3MgJmFtcDsgQlBGX0ZfUEFEX1pFUk9TKQomIzQzOwkJCW1lbXNldChkc3QsIDAsIGRzdF9fc3opOwomIzQzOwkJZWxzZQomIzQzOwkJCSooY2hhciAqKWRzdCA9ICYjMzk7XDAmIzM5OzsKJiM0MzsJCXJldHVybiAtRUZBVUxUOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IGNvcHlfcmVtb3RlX21tX3N0cihtbSwgKHVuc2lnbmVkIGxvbmcpdW5zYWZlX3B0cl9faWduLCBkc3QsIGRzdF9fc3osIDApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkgewomIzQzOwkJaWYgKGZsYWdzICZhbXA7IEJQRl9GX1BBRF9aRVJPUykKJiM0MzsJCQltZW1zZXQoZHN0LCAwLCBkc3RfX3N6KTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGZsYWdzICZhbXA7IEJQRl9GX1BBRF9aRVJPUykKJiM0MzsJCW1lbXNldChkc3QgJiM0MzsgcmV0LCAwLCBkc3RfX3N6IC0gcmV0KTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldCAmIzQzOyAxOwomIzQzO30KJiM0MzsKIC8qKgogICogYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyKCkgLSBDb3B5IGEgc3RyaW5nIGZyb20gYW4gdGFzayYjMzk7cyBhZGRyZXNzIHNwYWNlCiAgKiBAZHN0OiAgICAgICAgICAgICBEZXN0aW5hdGlvbiBhZGRyZXNzLCBpbiBrZXJuZWwgc3BhY2UuICBUaGlzIGJ1ZmZlciBtdXN0IGJlCkBAIC0zNjgxLDI1ICYjNDM7Mzc3MiwxNiBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osCiAJCQkJCSAgICBjb25zdCB2b2lkIF9fdXNlciAqdW5zYWZlX3B0cl9faWduLAogCQkJCQkgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHU2NCBmbGFncykKIHsKJiM0MzsJc3RydWN0IG1tX3N0cnVjdCAqbW07CiAJaW50IHJldDsKIAotCWlmICh1bmxpa2VseShmbGFncyAmYW1wOyB+QlBGX0ZfUEFEX1pFUk9TKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAodW5saWtlbHkoZHN0X19zeiA9PSAwKSkKLQkJcmV0dXJuIDA7CiYjNDM7CW1tID0gZ2V0X3Rhc2tfbW0odHNrKTsKJiM0MzsJcmV0ID0gYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cihkc3QsIGRzdF9fc3osIHVuc2FmZV9wdHJfX2lnbiwKJiM0MzsJCQkJCW1tLCBmbGFncyk7CiYjNDM7CWlmIChtbSkKJiM0MzsJCW1tcHV0KG1tKTsKIAotCXJldCA9IGNvcHlfcmVtb3RlX3ZtX3N0cih0c2ssICh1bnNpZ25lZCBsb25nKXVuc2FmZV9wdHJfX2lnbiwgZHN0LCBkc3RfX3N6LCAwKTsKLQlpZiAocmV0ICZsdDsgMCkgewotCQlpZiAoZmxhZ3MgJmFtcDsgQlBGX0ZfUEFEX1pFUk9TKQotCQkJbWVtc2V0KGRzdCwgMCwgZHN0X19zeik7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JaWYgKGZsYWdzICZhbXA7IEJQRl9GX1BBRF9aRVJPUykKLQkJbWVtc2V0KGRzdCAmIzQzOyByZXQsIDAsIGRzdF9fc3ogLSByZXQpOwotCi0JcmV0dXJuIHJldCAmIzQzOyAxOwomIzQzOwlyZXR1cm4gcmV0OwogfQogCiAvKiBLZWVwIHVuc2lnbmVkIGxvbmcgaW4gcHJvdG90eXBlIHNvIHRoYXQga2Z1bmMgaXMgdXNhYmxlIHdoZW4gZW1pdHRlZCB0bwpAQCAtNDkyNCw2ICYjNDM7NTAwNiw4IEBAIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfaXRlcl9iaXRzX25ldywgS0ZfSVRFUl9ORVcpCiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfYml0c19uZXh0LCBLRl9JVEVSX05FWFQgfCBLRl9SRVRfTlVMTCkKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfaXRlcl9iaXRzX2Rlc3Ryb3ksIEtGX0lURVJfREVTVFJPWSkKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfY29weV9mcm9tX3VzZXJfc3RyLCBLRl9TTEVFUEFCTEUpCiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jb3B5X2Zyb21fdXNlcl9tbSwgS0ZfU0xFRVBBQkxFKQomIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyLCBLRl9TTEVFUEFCTEUpCiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyLCBLRl9TTEVFUEFCTEUpCiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2dldF9rbWVtX2NhY2hlKQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX2ttZW1fY2FjaGVfbmV3LCBLRl9JVEVSX05FVyB8IEtGX1NMRUVQQUJMRSkKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwppbmRleCA5ZTc5NzUwZTI0ODA4Li42Nzk5ZDllMDgwZmM1IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jCkBAIC02MDA0LDYgJiM0Mzs2MDA0LDEwIEBAIEJURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMKHN0cnVjdCBkZW50cnkpIHsKIAlzdHJ1Y3QgaW5vZGUgKmRfaW5vZGU7CiB9OwogCiYjNDM7QlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IGxpbnV4X2JpbnBybSkgewomIzQzOwlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKJiM0Mzt9OwomIzQzOwogQlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IHNvY2tldCkgewogCXN0cnVjdCBzb2NrICpzazsKIH07CkBAIC02MDU4LDYgJiM0Mzs2MDYyLDcgQEAgc3RhdGljIGJvb2wgdHlwZV9pc190cnVzdGVkX29yX251bGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIHsKIAlCVEZfVFlQRV9FTUlUKEJURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMKHN0cnVjdCBzb2NrZXQpKTsKIAlCVEZfVFlQRV9FTUlUKEJURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMKHN0cnVjdCBkZW50cnkpKTsKJiM0MzsJQlRGX1RZUEVfRU1JVChCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTChzdHJ1Y3QgbGludXhfYmlucHJtKSk7CiAJQlRGX1RZUEVfRU1JVChCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QpKTsKIAogCXJldHVybiBidGZfbmVzdGVkX3R5cGVfaXNfdHJ1c3RlZCgmYW1wO2Vudi0mZ3Q7bG9nLCByZWcsIGZpZWxkX25hbWUsIGJ0Zl9pZCwKQEAgLTYxNjgsNiAmIzQzOzYxNzMsMTUgQEAgc3RhdGljIGludCBjaGVja19wdHJfdG9fYnRmX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCWlmIChyZXQgIT0gUFRSX1RPX0JURl9JRCkgewogCQkvKiBqdXN0IG1hcms7ICovCiAKJiM0MzsJfSBlbHNlIGlmIChicGZfaXNfdHJ1c3RlZF9vcl9udWxsX2J0Zl9wdHIocmVnLSZndDt0eXBlKSkgewomIzQzOwkJLyoKJiM0MzsJCSAqIEFuIHVuY2hlY2tlZCBsb2FkIHRocm91Z2ggYSB0cnVzdGVkLW9yLU5VTEwgcG9pbnRlciBpcwomIzQzOwkJICogZmF1bHQtcHJvdGVjdGVkLiBBbnkgcG9pbnRlciBkZXJpdmVkIGZyb20gdGhhdCBsb2FkIG11c3QgYmUKJiM0MzsJCSAqIHVudHJ1c3RlZCwgYXMgYSBmYXVsdCBwcm9kdWNlcyBhIE5VTEwgdmFsdWUuCiYjNDM7CQkgKi8KJiM0MzsJCWNsZWFyX3RydXN0ZWRfZmxhZ3MoJmFtcDtmbGFnKTsKJiM0MzsJCWZsYWcgfD0gUFRSX1VOVFJVU1RFRDsKJiM0MzsKIAl9IGVsc2UgaWYgKHR5cGVfZmxhZyhyZWctJmd0O3R5cGUpICZhbXA7IFBUUl9VTlRSVVNURUQpIHsKIAkJLyogSWYgdGhpcyBpcyBhbiB1bnRydXN0ZWQgcG9pbnRlciwgYWxsIHBvaW50ZXJzIGZvcm1lZCBieSB3YWxraW5nIGl0CiAJCSAqIGFsc28gaW5oZXJpdCB0aGUgdW50cnVzdGVkIGZsYWcuCkBAIC02NjQ0LDcgJiM0Mzs2NjU4LDggQEAgc3RhdGljIGludCBjaGVja19tZW1fYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeCwgc3RydWN0IGIKIAkJaWYgKCFlcnIgJmFtcDsmYW1wOyB0ID09IEJQRl9SRUFEICZhbXA7JmFtcDsgdmFsdWVfcmVnbm8gJmd0Oz0gMCkKIAkJCW1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCB2YWx1ZV9yZWdubyk7CiAJfSBlbHNlIGlmIChiYXNlX3R5cGUocmVnLSZndDt0eXBlKSA9PSBQVFJfVE9fQlRGX0lEICZhbXA7JmFtcDsKLQkJICAgIXR5cGVfbWF5X2JlX251bGwocmVnLSZndDt0eXBlKSkgewomIzQzOwkJICAgKCF0eXBlX21heV9iZV9udWxsKHJlZy0mZ3Q7dHlwZSkgfHwKJiM0MzsJCSAgICAodCA9PSBCUEZfUkVBRCAmYW1wOyZhbXA7IGJwZl9pc190cnVzdGVkX29yX251bGxfYnRmX3B0cihyZWctJmd0O3R5cGUpKSkpIHsKIAkJZXJyID0gY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3MoZW52LCByZWdzLCByZWcsIGFyZ25vLCBvZmYsIHNpemUsIHQsCiAJCQkJCSAgICAgIHZhbHVlX3JlZ25vKTsKIAl9IGVsc2UgaWYgKHJlZy0mZ3Q7dHlwZSA9PSBDT05TVF9QVFJfVE9fTUFQKSB7CmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaAppbmRleCAzOGIxMTY1MjEyYzk0Li44MjY0YTM0NmQxOGFmIDEwMDY0NAotLS0gYS9tbS9pbnRlcm5hbC5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL2ludGVybmFsLmgKQEAgLTI1LDYgJiM0MzsyNSwxMSBAQAogc3RydWN0IGZvbGlvX2JhdGNoOwogc3RydWN0IGhzdGF0ZTsKIAomIzQzOyNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTEwKJiM0MztpbnQgX19jb3B5X3JlbW90ZV9tbV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKJiM0MzsJCQkgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKTsKJiM0MzsjZW5kaWYKJiM0MzsKIHN0cnVjdCBodWdlX2Jvb3RtZW1fcGFnZSB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCXN0cnVjdCBoc3RhdGUgKmhzdGF0ZTsKZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmMKaW5kZXggOGIwYzJjNzM1ZDNkZS4uZmUyZjVlOTg4ZmI5MCAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LmMKQEAgLTczMzEsOCAmIzQzOzczMzEsOCBAQCBFWFBPUlRfU1lNQk9MX0dQTChhY2Nlc3NfcHJvY2Vzc192bSk7CiAgKiBDb3B5IGEgc3RyaW5nIGZyb20gYW5vdGhlciBwcm9jZXNzJiMzOTtzIGFkZHJlc3Mgc3BhY2UgYXMgZ2l2ZW4gaW4gbW0uCiAgKiBJZiB0aGVyZSBpcyBhbnkgZXJyb3IgcmV0dXJuIC1FRkFVTFQuCiAgKi8KLXN0YXRpYyBpbnQgX19jb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCQl2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpCiYjNDM7aW50IF9fY29weV9yZW1vdGVfbW1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiYjNDM7CQkJIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncykKIHsKIAl2b2lkICpvbGRfYnVmID0gYnVmOwogCWludCBlcnIgPSAwOwpAQCAtNzQwNyw0MyAmIzQzOzc0MDcsNiBAQCBzdGF0aWMgaW50IF9fY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCXJldHVybiBlcnI7CiAJcmV0dXJuIGJ1ZiAtIG9sZF9idWY7CiB9Ci0KLS8qKgotICogY29weV9yZW1vdGVfdm1fc3RyIC0gY29weSBhIHN0cmluZyBmcm9tIGFub3RoZXIgcHJvY2VzcyYjMzk7cyBhZGRyZXNzIHNwYWNlLgotICogQHRzazoJdGhlIHRhc2sgb2YgdGhlIHRhcmdldCBhZGRyZXNzIHNwYWNlCi0gKiBAYWRkcjoJc3RhcnQgYWRkcmVzcyB0byByZWFkIGZyb20KLSAqIEBidWY6CWRlc3RpbmF0aW9uIGJ1ZmZlcgotICogQGxlbjoJbnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkKLSAqIEBndXBfZmxhZ3M6CWZsYWdzIG1vZGlmeWluZyBsb29rdXAgYmVoYXZpb3VyCi0gKgotICogVGhlIGNhbGxlciBtdXN0IGhvbGQgYSByZWZlcmVuY2Ugb24gQG1tLgotICoKLSAqIFJldHVybjogbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCBmcm9tIEBhZGRyIChzb3VyY2UpIHRvIEBidWYgKGRlc3RpbmF0aW9uKTsKLSAqIG5vdCBpbmNsdWRpbmcgdGhlIHRyYWlsaW5nIE5VTC4gQWx3YXlzIGd1YXJhbnRlZWQgdG8gbGVhdmUgTlVMLXRlcm1pbmF0ZWQKLSAqIGJ1ZmZlci4gT24gYW55IGVycm9yLCByZXR1cm4gLUVGQVVMVC4KLSAqLwotaW50IGNvcHlfcmVtb3RlX3ZtX3N0cihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkgICAgICAgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKQotewotCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwotCWludCByZXQ7Ci0KLQlpZiAodW5saWtlbHkobGVuID09IDApKQotCQlyZXR1cm4gMDsKLQotCW1tID0gZ2V0X3Rhc2tfbW0odHNrKTsKLQlpZiAoIW1tKSB7Ci0JCSooY2hhciAqKWJ1ZiA9ICYjMzk7XDAmIzM5OzsKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCi0JcmV0ID0gX19jb3B5X3JlbW90ZV92bV9zdHIobW0sIGFkZHIsIGJ1ZiwgbGVuLCBndXBfZmxhZ3MpOwotCi0JbW1wdXQobW0pOwotCi0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGNvcHlfcmVtb3RlX3ZtX3N0cik7CiAjZW5kaWYgLyogQ09ORklHX0JQRl9TWVNDQUxMICovCiAKIC8qCmRpZmYgLS1naXQgYS9tbS9ub21tdS5jIGIvbW0vbm9tbXUuYwppbmRleCA0OThlMDFlZTQwYjA1Li45ODU5NmU2MDMxMWYzIDEwMDY0NAotLS0gYS9tbS9ub21tdS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL25vbW11LmMKQEAgLTE3NDYsOCAmIzQzOzE3NDYsOCBAQCBFWFBPUlRfU1lNQk9MX0dQTChhY2Nlc3NfcHJvY2Vzc192bSk7CiAgKiBDb3B5IGEgc3RyaW5nIGZyb20gYW5vdGhlciBwcm9jZXNzJiMzOTtzIGFkZHJlc3Mgc3BhY2UgYXMgZ2l2ZW4gaW4gbW0uCiAgKiBJZiB0aGVyZSBpcyBhbnkgZXJyb3IgcmV0dXJuIC1FRkFVTFQuCiAgKi8KLXN0YXRpYyBpbnQgX19jb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCQl2b2lkICpidWYsIGludCBsZW4pCiYjNDM7aW50IF9fY29weV9yZW1vdGVfbW1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiYjNDM7CQkJIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncykKIHsKIAl1bnNpZ25lZCBsb25nIGFkZHJfZW5kOwogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwpAQCAtMTc4MSw0MyAmIzQzOzE3ODEsNiBAQCBzdGF0aWMgaW50IF9fY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJbW1hcF9yZWFkX3VubG9jayhtbSk7CiAJcmV0dXJuIHJldDsKIH0KLQotLyoqCi0gKiBjb3B5X3JlbW90ZV92bV9zdHIgLSBjb3B5IGEgc3RyaW5nIGZyb20gYW5vdGhlciBwcm9jZXNzJiMzOTtzIGFkZHJlc3Mgc3BhY2UuCi0gKiBAdHNrOgl0aGUgdGFzayBvZiB0aGUgdGFyZ2V0IGFkZHJlc3Mgc3BhY2UKLSAqIEBhZGRyOglzdGFydCBhZGRyZXNzIHRvIHJlYWQgZnJvbQotICogQGJ1ZjoJZGVzdGluYXRpb24gYnVmZmVyCi0gKiBAbGVuOgludW1iZXIgb2YgYnl0ZXMgdG8gY29weQotICogQGd1cF9mbGFnczoJZmxhZ3MgbW9kaWZ5aW5nIGxvb2t1cCBiZWhhdmlvdXIgKHVudXNlZCkKLSAqCi0gKiBUaGUgY2FsbGVyIG11c3QgaG9sZCBhIHJlZmVyZW5jZSBvbiBAbW0uCi0gKgotICogUmV0dXJuOiBudW1iZXIgb2YgYnl0ZXMgY29waWVkIGZyb20gQGFkZHIgKHNvdXJjZSkgdG8gQGJ1ZiAoZGVzdGluYXRpb24pOwotICogbm90IGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMLiBBbHdheXMgZ3VhcmFudGVlZCB0byBsZWF2ZSBOVUwtdGVybWluYXRlZAotICogYnVmZmVyLiBPbiBhbnkgZXJyb3IsIHJldHVybiAtRUZBVUxULgotICovCi1pbnQgY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCSAgICAgICB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpCi17Ci0Jc3RydWN0IG1tX3N0cnVjdCAqbW07Ci0JaW50IHJldDsKLQotCWlmICh1bmxpa2VseShsZW4gPT0gMCkpCi0JCXJldHVybiAwOwotCi0JbW0gPSBnZXRfdGFza19tbSh0c2spOwotCWlmICghbW0pIHsKLQkJKihjaGFyICopYnVmID0gJiMzOTtcMCYjMzk7OwotCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0KLQlyZXQgPSBfX2NvcHlfcmVtb3RlX3ZtX3N0cihtbSwgYWRkciwgYnVmLCBsZW4pOwotCi0JbW1wdXQobW0pOwotCi0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGNvcHlfcmVtb3RlX3ZtX3N0cik7CiAjZW5kaWYgLyogQ09ORklHX0JQRl9TWVNDQUxMICovCiAKIC8qKgpkaWZmIC0tZ2l0IGEvbW0vdXRpbC5jIGIvbW0vdXRpbC5jCmluZGV4IGJmMDUxM2QxZDNkMDguLjJlY2EyN2IwMjc5MWYgMTAwNjQ0Ci0tLSBhL21tL3V0aWwuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS91dGlsLmMKQEAgLTEwNjEsNiAmIzQzOzEwNjEsNjggQEAgaW50IGdldF9jbWRsaW5lKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgY2hhciAqYnVmZmVyLCBpbnQgYnVmbGVuKQogCXJldHVybiByZXM7CiB9CiAKJiM0MzsjaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMCiYjNDM7LyoqCiYjNDM7ICogY29weV9yZW1vdGVfbW1fc3RyIC0gY29weSBhIHN0cmluZyBmcm9tIGEgcmVtb3RlIGFkZHJlc3Mgc3BhY2UuCiYjNDM7ICogQG1tOiAgICAgICAgIHRoZSByZW1vdGUgYWRkcmVzcyBzcGFjZQomIzQzOyAqIEBhZGRyOiAgICAgICBzdGFydCBhZGRyZXNzIHRvIHJlYWQgZnJvbQomIzQzOyAqIEBidWY6ICAgICAgICBkZXN0aW5hdGlvbiBidWZmZXIKJiM0MzsgKiBAbGVuOiAgICAgICAgbnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkKJiM0MzsgKiBAZ3VwX2ZsYWdzOiAgZmxhZ3MgbW9kaWZ5aW5nIGxvb2t1cCBiZWhhdmlvdXIKJiM0MzsgKgomIzQzOyAqIFRoZSBjYWxsZXIgbXVzdCBob2xkIGEgcmVmZXJlbmNlIG9uIEBtbS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCBmcm9tIEBhZGRyIChzb3VyY2UpIHRvIEBidWYgKGRlc3RpbmF0aW9uKSwKJiM0MzsgKiBub3QgaW5jbHVkaW5nIHRoZSB0cmFpbGluZyBOVUwuIElmIEBsZW4gaXMgemVybywgcmV0dXJuIDAgd2l0aG91dCBhY2Nlc3NpbmcKJiM0MzsgKiBAYnVmLiBPdGhlcndpc2UsIEBidWYgaXMgYWx3YXlzIE5VTC10ZXJtaW5hdGVkLiBPbiBhbnkgZXJyb3IsIHJldHVybgomIzQzOyAqIC1FRkFVTFQuCiYjNDM7ICovCiYjNDM7aW50IGNvcHlfcmVtb3RlX21tX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAomIzQzOwkJICAgICAgIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncykKJiM0Mzt7CiYjNDM7CWlmICh1bmxpa2VseShsZW4gPT0gMCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIF9fY29weV9yZW1vdGVfbW1fc3RyKG1tLCBhZGRyLCBidWYsIGxlbiwgZ3VwX2ZsYWdzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogY29weV9yZW1vdGVfdm1fc3RyIC0gY29weSBhIHN0cmluZyBmcm9tIGFub3RoZXIgcHJvY2VzcyYjMzk7cyBhZGRyZXNzIHNwYWNlLgomIzQzOyAqIEB0c2s6CXRoZSB0YXNrIG9mIHRoZSB0YXJnZXQgYWRkcmVzcyBzcGFjZQomIzQzOyAqIEBhZGRyOglzdGFydCBhZGRyZXNzIHRvIHJlYWQgZnJvbQomIzQzOyAqIEBidWY6CWRlc3RpbmF0aW9uIGJ1ZmZlcgomIzQzOyAqIEBsZW46CW51bWJlciBvZiBieXRlcyB0byBjb3B5CiYjNDM7ICogQGd1cF9mbGFnczoJZmxhZ3MgbW9kaWZ5aW5nIGxvb2t1cCBiZWhhdmlvdXIKJiM0MzsgKgomIzQzOyAqIFJldHVybjogbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCBmcm9tIEBhZGRyIChzb3VyY2UpIHRvIEBidWYgKGRlc3RpbmF0aW9uKSwKJiM0MzsgKiBub3QgaW5jbHVkaW5nIHRoZSB0cmFpbGluZyBOVUwuIElmIEBsZW4gaXMgemVybywgcmV0dXJuIDAgd2l0aG91dCBhY2Nlc3NpbmcKJiM0MzsgKiBAYnVmLiBPdGhlcndpc2UsIEBidWYgaXMgYWx3YXlzIE5VTC10ZXJtaW5hdGVkLiBPbiBhbnkgZXJyb3IsIHJldHVybgomIzQzOyAqIC1FRkFVTFQuCiYjNDM7ICovCiYjNDM7aW50IGNvcHlfcmVtb3RlX3ZtX3N0cihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdW5zaWduZWQgbG9uZyBhZGRyLAomIzQzOwkJICAgICAgIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAodW5saWtlbHkobGVuID09IDApKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CW1tID0gZ2V0X3Rhc2tfbW0odHNrKTsKJiM0MzsJaWYgKCFtbSkgewomIzQzOwkJKihjaGFyICopYnVmID0gJiMzOTtcMCYjMzk7OwomIzQzOwkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gX19jb3B5X3JlbW90ZV9tbV9zdHIobW0sIGFkZHIsIGJ1ZiwgbGVuLCBndXBfZmxhZ3MpOwomIzQzOwomIzQzOwltbXB1dChtbSk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGNvcHlfcmVtb3RlX3ZtX3N0cik7CiYjNDM7I2VuZGlmIC8qIENPTkZJR19CUEZfU1lTQ0FMTCAqLwomIzQzOwogaW50IF9fd2VhayBtZW1jbXBfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UxLCBzdHJ1Y3QgcGFnZSAqcGFnZTIpCiB7CiAJY2hhciAqYWRkcjEsICphZGRyMjsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9pdGVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfaXRlci5jCmluZGV4IGM2OTA4MGNhMTRmNWEuLjk5YTE2YTFhZGQ3MGUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9pdGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2l0ZXIuYwpAQCAtMzksMTAgJiM0MzszOSwxMCBAQCBzdGF0aWMgdm9pZCB0ZXN0X2J0Zl9pZF9vcl9udWxsKHZvaWQpCiAJc3RydWN0IGJwZl9pdGVyX3Rlc3Rfa2VybjMgKnNrZWw7CiAKIAlza2VsID0gYnBmX2l0ZXJfdGVzdF9rZXJuM19fb3Blbl9hbmRfbG9hZCgpOwotCWlmICghQVNTRVJUX0VSUl9QVFIoc2tlbCwgJiMzNDticGZfaXRlcl90ZXN0X2tlcm4zX19vcGVuX2FuZF9sb2FkJiMzNDspKSB7Ci0JCWJwZl9pdGVyX3Rlc3Rfa2VybjNfX2Rlc3Ryb3koc2tlbCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O2JwZl9pdGVyX3Rlc3Rfa2VybjNfX29wZW5fYW5kX2xvYWQmIzM0OykpCiAJCXJldHVybjsKLQl9CiYjNDM7CiYjNDM7CWJwZl9pdGVyX3Rlc3Rfa2VybjNfX2Rlc3Ryb3koc2tlbCk7CiB9CiAKIHN0YXRpYyB2b2lkIGRvX2R1bW15X3JlYWRfb3B0cyhzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIHN0cnVjdCBicGZfaXRlcl9hdHRhY2hfb3B0cyAqb3B0cykKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2NvcHlfZnJvbV91c2VyX2Jwcm0uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2NvcHlfZnJvbV91c2VyX2Jwcm0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5iMjMyNWIxOTM1NzYxCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY29weV9mcm9tX3VzZXJfYnBybS5jCkBAIC0wLDAgJiM0MzsxLDcyIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7ZXJybm8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL3dhaXQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O3Rlc3RfcHJvZ3MuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O2NvcHlfZnJvbV91c2VyX2Jwcm0uc2tlbC5oJiMzNDsKJiM0MzsKJiM0Mzt2b2lkIHRlc3RfY29weV9mcm9tX3VzZXJfYnBybSh2b2lkKQomIzQzO3sKJiM0MzsJY2hhciBhcmcwW10gPSAmIzM0O2ZpcnN0JiMzNDs7CiYjNDM7CWNoYXIgYXJnMVtdID0gJiMzNDtzZWNvbmQtYXJndW1lbnQmIzM0OzsKJiM0MzsJY2hhciBlbnYwW10gPSAmIzM0O1NPTUVfRU5WPWEmIzM0OzsKJiM0MzsJY2hhciBlbnYxW10gPSAmIzM0O09USEVSX0VOVj1zb21ldGhpbmcmIzM0OzsKJiM0MzsJc3RydWN0IGNvcHlfZnJvbV91c2VyX2Jwcm0gKnNrZWw7CiYjNDM7CXBpZF90IGNoaWxkOwomIzQzOwlpbnQgc3RhdHVzOwomIzQzOwomIzQzOwlza2VsID0gY29weV9mcm9tX3VzZXJfYnBybV9fb3Blbl9hbmRfbG9hZCgpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgJiMzNDtvcGVuX2FuZF9sb2FkJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBPbiAhQ09ORklHX01NVSwgZXhlYyBzdHJpbmdzIGFyZSBoZWxkIGluIGJwcm0tJmd0O3BhZ2VbXSByYXRoZXIgdGhhbgomIzQzOwkgKiBiZWluZyBtYXBwZWQgaW4gYnBybS0mZ3Q7bW0uCiYjNDM7CSAqLwomIzQzOwlpZiAoIXNrZWwtJmd0O2tjb25maWctJmd0O0NPTkZJR19NTVUpIHsKJiM0MzsJCXByaW50ZigmIzM0OyVzOlNLSVA6IHRlc3QgcmVxdWlyZXMgQ09ORklHX01NVVxuJiMzNDssIF9fZnVuY19fKTsKJiM0MzsJCXRlc3RfX3NraXAoKTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghQVNTRVJUX09LKGNvcHlfZnJvbV91c2VyX2Jwcm1fX2F0dGFjaChza2VsKSwgJiMzNDthdHRhY2gmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJY2hpbGQgPSBmb3JrKCk7CiYjNDM7CWlmICghQVNTRVJUX0dFKGNoaWxkLCAwLCAmIzM0O2ZvcmsmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJaWYgKCFjaGlsZCkgewomIzQzOwkJY2hhciAqY29uc3QgYXJndltdID0geyBhcmcwLCBhcmcxLCBOVUxMIH07CiYjNDM7CQljaGFyICpjb25zdCBlbnZwW10gPSB7IGVudjAsIGVudjEsIE5VTEwgfTsKJiM0MzsKJiM0MzsJCXNrZWwtJmd0O2Jzcy0mZ3Q7bW9uaXRvcmVkX3BpZCA9IGdldHBpZCgpOwomIzQzOwkJZXhlY3ZlKCYjMzQ7L2Jpbi90cnVlJiMzNDssIGFyZ3YsIGVudnApOwomIzQzOwkJX2V4aXQoZXJybm8pOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghQVNTRVJUX0VRKHdhaXRwaWQoY2hpbGQsICZhbXA7c3RhdHVzLCAwKSwgY2hpbGQsICYjMzQ7d2FpdHBpZCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlpZiAoQVNTRVJUX1RSVUUoV0lGRVhJVEVEKHN0YXR1cyksICYjMzQ7Y2hpbGRfZXhpdGVkJiMzNDspKQomIzQzOwkJQVNTRVJUX0VRKFdFWElUU1RBVFVTKHN0YXR1cyksIEVQRVJNLCAmIzM0O2V4ZWNfZXJybm8mIzM0Oyk7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O2Jwcm1fYXJnYywgMiwgJiMzNDticHJtX2FyZ2MmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O2Jwcm1fZW52YywgMiwgJiMzNDticHJtX2VudmMmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O2RhdGFfbGVuX21hdGNoLCAxLCAmIzM0O2RhdGFfbGVuX21hdGNoJiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtpbnZhbGlkX2ZsYWdzX3JldCwgLUVJTlZBTCwgJiMzNDtpbnZhbGlkX2ZsYWdzX3JldCYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7Y29weV9yZXQsIDAsICYjMzQ7Y29weV9yZXQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O3N0cl9hcmcwX3JldCwgc2l6ZW9mKGFyZzApLCAmIzM0O3N0cl9hcmcwX3JldCYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7c3RyX2FyZzFfcmV0LCBzaXplb2YoYXJnMSksICYjMzQ7c3RyX2FyZzFfcmV0JiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtzdHJfZW52MF9yZXQsIHNpemVvZihlbnYwKSwgJiMzNDtzdHJfZW52MF9yZXQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O3N0cl9lbnYxX3JldCwgc2l6ZW9mKGVudjEpLCAmIzM0O3N0cl9lbnYxX3JldCYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7ZGF0YV9tYXRjaCwgMSwgJiMzNDtkYXRhX21hdGNoJiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtzdHJfYXJnc19tYXRjaCwgMSwgJiMzNDtzdHJfYXJnc19tYXRjaCYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7c3RyX2VudnNfbWF0Y2gsIDEsICYjMzQ7c3RyX2VudnNfbWF0Y2gmIzM0Oyk7CiYjNDM7CiYjNDM7b3V0OgomIzQzOwljb3B5X2Zyb21fdXNlcl9icHJtX19kZXN0cm95KHNrZWwpOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19tYXliZV9udWxsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfbWF5YmVfbnVsbC5jCmluZGV4IDAxZGMyNjEzYzhhNTEuLjQ1YWY2ZjAwYWQ5MDggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19tYXliZV9udWxsLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX21heWJlX251bGwuYwpAQCAtMTksMTUgJiM0MzsxOSwxNiBAQCBzdGF0aWMgdm9pZCBtYXliZV9udWxsKHZvaWQpCiAJc3RydWN0X29wc19tYXliZV9udWxsX19kZXN0cm95KHNrZWwpOwogfQogCi0vKiBUZXN0IHRoYXQgdGhlIHZlcmlmaWVyIHJlamVjdHMgYSBwcm9ncmFtIHRoYXQgYWNjZXNzIGEgbnVsbGFibGUgcG9pbnRlcgotICogd2l0aG91dCBhIGNoZWNrIGJlZm9yZWhhbmQuCiYjNDM7LyoKJiM0MzsgKiBUZXN0IHRoYXQgdGhlIHZlcmlmaWVyIGFjY2VwdHMgYSBmYXVsdC1wcm90ZWN0ZWQgcmVhZCB0aHJvdWdoIGEgbnVsbGFibGUKJiM0MzsgKiB0cnVzdGVkIHBvaW50ZXIgd2l0aG91dCBhbiBleHBsaWNpdCBOVUxMIGNoZWNrLgogICovCi1zdGF0aWMgdm9pZCBtYXliZV9udWxsX2ZhaWwodm9pZCkKJiM0MztzdGF0aWMgdm9pZCBtYXliZV9udWxsX25vX2NoZWNrKHZvaWQpCiB7CiAJc3RydWN0IHN0cnVjdF9vcHNfbWF5YmVfbnVsbF9mYWlsICpza2VsOwogCiAJc2tlbCA9IHN0cnVjdF9vcHNfbWF5YmVfbnVsbF9mYWlsX19vcGVuX2FuZF9sb2FkKCk7Ci0JaWYgKEFTU0VSVF9FUlJfUFRSKHNrZWwsICYjMzQ7c3RydWN0X29wc19tb2R1bGVfZmFpbF9fb3Blbl9hbmRfbG9hZCYjMzQ7KSkKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7c3RydWN0X29wc19tYXliZV9udWxsX2ZhaWxfX29wZW5fYW5kX2xvYWQmIzM0OykpCiAJCXJldHVybjsKIAogCXN0cnVjdF9vcHNfbWF5YmVfbnVsbF9mYWlsX19kZXN0cm95KHNrZWwpOwpAQCAtNDEsNiAmIzQzOzQyLDYgQEAgdm9pZCB0ZXN0X3N0cnVjdF9vcHNfbWF5YmVfbnVsbCh2b2lkKQogCSAqLwogCWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7bWF5YmVfbnVsbCYjMzQ7KSkKIAkJbWF5YmVfbnVsbCgpOwotCWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7bWF5YmVfbnVsbF9mYWlsJiMzNDspKQotCQltYXliZV9udWxsX2ZhaWwoKTsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDttYXliZV9udWxsX25vX2NoZWNrJiMzNDspKQomIzQzOwkJbWF5YmVfbnVsbF9ub19jaGVjaygpOwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHBfYnRmX251bGxhYmxlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90cF9idGZfbnVsbGFibGUuYwppbmRleCBhY2NjNDJlMDFmOGE4Li44MjVmZTdhOTJkNzRmIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90cF9idGZfbnVsbGFibGUuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90cF9idGZfbnVsbGFibGUuYwpAQCAtMiw2ICYjNDM7MiwzMSBAQAogCiAjaW5jbHVkZSAmbHQ7dGVzdF9wcm9ncy5oJmd0OwogI2luY2x1ZGUgJiMzNDt0ZXN0X3RwX2J0Zl9udWxsYWJsZS5za2VsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7dGVzdF90cF9idGZfbnVsbGFibGVfcnVudGltZS5za2VsLmgmIzM0OwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHRlc3RfbnVsbGFibGVfcnVudGltZSh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IHRlc3RfdHBfYnRmX251bGxhYmxlX3J1bnRpbWUgKnNrZWw7CiYjNDM7CiYjNDM7CXNrZWwgPSB0ZXN0X3RwX2J0Zl9udWxsYWJsZV9ydW50aW1lX19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O29wZW5fYW5kX2xvYWQmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7bW9uaXRvcmVkX3RpZCA9IHN5c19nZXR0aWQoKTsKJiM0MzsKJiM0MzsJaWYgKCFBU1NFUlRfT0sodGVzdF90cF9idGZfbnVsbGFibGVfcnVudGltZV9fYXR0YWNoKHNrZWwpLCAmIzM0O2F0dGFjaCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlpZiAoIUFTU0VSVF9PSyh0cmlnZ2VyX21vZHVsZV90ZXN0X3JlYWQoMiksICYjMzQ7dHJpZ2dlciYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtjYWxscywgMiwgJiMzNDtjYWxscyYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7bm9ubnVsbF9sZW4sIDIsICYjMzQ7bm9ubnVsbF9sZW4mIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O251bGxfbGVuLCAwLCAmIzM0O251bGxfbGVuJiMzNDspOwomIzQzOwomIzQzO291dDoKJiM0MzsJdGVzdF90cF9idGZfbnVsbGFibGVfcnVudGltZV9fZGVzdHJveShza2VsKTsKJiM0Mzt9CiAKIHZvaWQgdGVzdF90cF9idGZfbnVsbGFibGUodm9pZCkKIHsKQEAgLTExLDQgJiM0MzszNiw3IEBAIHZvaWQgdGVzdF90cF9idGZfbnVsbGFibGUodm9pZCkKIAl9CiAKIAlSVU5fVEVTVFModGVzdF90cF9idGZfbnVsbGFibGUpOwomIzQzOwomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3J1bnRpbWUmIzM0OykpCiYjNDM7CQl0ZXN0X251bGxhYmxlX3J1bnRpbWUoKTsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9jb3B5X2Zyb21fdXNlcl9icHJtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvY29weV9mcm9tX3VzZXJfYnBybS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmIzMzRhMTU3NDE5ZTUKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvY29weV9mcm9tX3VzZXJfYnBybS5jCkBAIC0wLDAgJiM0MzsxLDEyMyBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDt2bWxpbnV4LmgmIzM0OwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2hlbHBlcnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl90cmFjaW5nLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2Vycm5vLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDticGZfbWlzYy5oJiMzNDsKJiM0MzsKJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgZXhwZWN0ZWRfZGF0YVtdID0gJiMzNDtmaXJzdFwwc2Vjb25kLWFyZ3VtZW50XDAmIzM0OwomIzQzOwkJCQkgICAgJiMzNDtTT01FX0VOVj1hXDBPVEhFUl9FTlY9c29tZXRoaW5nJiMzNDs7CiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgZXhwZWN0ZWRfYXJnMFtdID0gJiMzNDtmaXJzdCYjMzQ7OwomIzQzO3N0YXRpYyBjb25zdCBjaGFyIGV4cGVjdGVkX2FyZzFbXSA9ICYjMzQ7c2Vjb25kLWFyZ3VtZW50JiMzNDs7CiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgZXhwZWN0ZWRfZW52MFtdID0gJiMzNDtTT01FX0VOVj1hJiMzNDs7CiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgZXhwZWN0ZWRfZW52MVtdID0gJiMzNDtPVEhFUl9FTlY9c29tZXRoaW5nJiMzNDs7CiYjNDM7CiYjNDM7aW50IG1vbml0b3JlZF9waWQ7CiYjNDM7aW50IGJwcm1fYXJnYzsKJiM0MztpbnQgYnBybV9lbnZjOwomIzQzO2ludCBkYXRhX2xlbl9tYXRjaDsKJiM0MztpbnQgaW52YWxpZF9mbGFnc19yZXQ7CiYjNDM7aW50IGNvcHlfcmV0OwomIzQzO2ludCBzdHJfYXJnMF9yZXQ7CiYjNDM7aW50IHN0cl9hcmcxX3JldDsKJiM0MztpbnQgc3RyX2VudjBfcmV0OwomIzQzO2ludCBzdHJfZW52MV9yZXQ7CiYjNDM7aW50IGRhdGFfbWF0Y2g7CiYjNDM7aW50IHN0cl9hcmdzX21hdGNoOwomIzQzO2ludCBzdHJfZW52c19tYXRjaDsKJiM0MzsKJiM0MztleHRlcm4gYm9vbCBDT05GSUdfTU1VIF9fa2NvbmZpZyBfX3dlYWs7CiYjNDM7CiYjNDM7ZXh0ZXJuIGludCBicGZfY29weV9mcm9tX3VzZXJfbW0odm9pZCAqZHN0LCB1MzIgZHN0X19zeiwKJiM0MzsJCQkJIGNvbnN0IHZvaWQgKnVuc2FmZV9wdHJfX2lnbiwKJiM0MzsJCQkJIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1NjQgZmxhZ3MpIF9fa3N5bTsKJiM0MzsKJiM0MztleHRlcm4gaW50IGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIodm9pZCAqZHN0LCB1MzIgZHN0X19zeiwKJiM0MzsJCQkJICAgICBjb25zdCB2b2lkICp1bnNhZmVfcHRyX19pZ24sCiYjNDM7CQkJCSAgICAgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHU2NCBmbGFncykgX19rc3ltOwomIzQzOwomIzQzO1NFQygmIzM0O2xzbS5zL2Jwcm1fY2hlY2tfc2VjdXJpdHkmIzM0OykKJiM0MztpbnQgQlBGX1BST0coY2hlY2tfZXhlY19hcmdzLCBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKQomIzQzO3sKJiM0MzsJdTMyIHBpZCA9IGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpICZndDsmZ3Q7IDMyOwomIzQzOwljaGFyIGRhdGFbc2l6ZW9mKGV4cGVjdGVkX2RhdGEpXSA9IHt9OwomIzQzOwlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKJiM0MzsJY2hhciBhcmcwWzMyXSA9IHt9OwomIzQzOwljaGFyIGFyZzFbMzJdID0ge307CiYjNDM7CWNoYXIgZW52MFszMl0gPSB7fTsKJiM0MzsJY2hhciBlbnYxWzMyXSA9IHt9OwomIzQzOwl1NjQgb2Zmc2V0ID0gMDsKJiM0MzsJdTY0IGRhdGFfbGVuOwomIzQzOwomIzQzOwlpZiAoIUNPTkZJR19NTVUpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKHBpZCAhPSBtb25pdG9yZWRfcGlkKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CW1tID0gYnBybS0mZ3Q7bW07CiYjNDM7CWlmICghbW0pCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJYnBybV9hcmdjID0gYnBybS0mZ3Q7YXJnYzsKJiM0MzsJYnBybV9lbnZjID0gYnBybS0mZ3Q7ZW52YzsKJiM0MzsKJiM0MzsJLyogdGhpcyBpcyB0aGUgdG90YWwgc2l6ZSBvZiBhcmdzIGFuZCBlbnZzIHN0YXJ0aW5nIGZyb20gYnBybS0mZ3Q7cCAqLwomIzQzOwlkYXRhX2xlbiA9IGJwcm0tJmd0O2V4ZWMgLSBicHJtLSZndDtwOwomIzQzOwlkYXRhX2xlbl9tYXRjaCA9IGRhdGFfbGVuID09IHNpemVvZihleHBlY3RlZF9kYXRhKTsKJiM0MzsKJiM0MzsJaW52YWxpZF9mbGFnc19yZXQgPSBicGZfY29weV9mcm9tX3VzZXJfbW0oZGF0YSwKJiM0MzsJCQkJCQkgIHNpemVvZihkYXRhKSwgKHZvaWQgKilicHJtLSZndDtwLCBtbSwgfjBVTEwpOwomIzQzOwomIzQzOwljb3B5X3JldCA9IGJwZl9jb3B5X2Zyb21fdXNlcl9tbShkYXRhLCBzaXplb2YoZGF0YSksICh2b2lkICopYnBybS0mZ3Q7cCwKJiM0MzsJCQkJCSBtbSwgMCk7CiYjNDM7CWlmIChjb3B5X3JldCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlkYXRhX21hdGNoID0KJiM0MzsJCSFfX2J1aWx0aW5fbWVtY21wKGRhdGEsIGV4cGVjdGVkX2RhdGEsIHNpemVvZihleHBlY3RlZF9kYXRhKSk7CiYjNDM7CiYjNDM7CS8qIGFyZzAgaXMgYXQgYnBybS0mZ3Q7cCAqLwomIzQzOwlzdHJfYXJnMF9yZXQgPSBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKGFyZzAsIHNpemVvZihhcmcwKSwKJiM0MzsJCQkJCQkgKHZvaWQgKikoYnBybS0mZ3Q7cCAmIzQzOyBvZmZzZXQpLAomIzQzOwkJCQkJCSBtbSwgQlBGX0ZfUEFEX1pFUk9TKTsKJiM0MzsJaWYgKHN0cl9hcmcwX3JldCAhPSBzaXplb2YoZXhwZWN0ZWRfYXJnMCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJb2Zmc2V0ICYjNDM7PSBzdHJfYXJnMF9yZXQ7CiYjNDM7CiYjNDM7CS8qIGFyZzEgaXMgYXQgYnBybS0mZ3Q7cCAmIzQzOyBzaXplb2YoYXJnMCkgKi8KJiM0MzsJc3RyX2FyZzFfcmV0ID0gYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cihhcmcxLCBzaXplb2YoYXJnMSksCiYjNDM7CQkJCQkJICh2b2lkICopKGJwcm0tJmd0O3AgJiM0Mzsgb2Zmc2V0KSwKJiM0MzsJCQkJCQkgbW0sIEJQRl9GX1BBRF9aRVJPUyk7CiYjNDM7CWlmIChzdHJfYXJnMV9yZXQgIT0gc2l6ZW9mKGV4cGVjdGVkX2FyZzEpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CW9mZnNldCAmIzQzOz0gc3RyX2FyZzFfcmV0OwomIzQzOwomIzQzOwkvKiBlbnYwIGlzIGF0IGJwcm0tJmd0O3AgJiM0Mzsgc2l6ZW9mKGFyZzApICYjNDM7IHNpemVvZihhcmcxKSAqLwomIzQzOwlzdHJfZW52MF9yZXQgPSBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKGVudjAsIHNpemVvZihlbnYwKSwKJiM0MzsJCQkJCQkgKHZvaWQgKikoYnBybS0mZ3Q7cCAmIzQzOyBvZmZzZXQpLAomIzQzOwkJCQkJCSBtbSwgQlBGX0ZfUEFEX1pFUk9TKTsKJiM0MzsJaWYgKHN0cl9lbnYwX3JldCAhPSBzaXplb2YoZXhwZWN0ZWRfZW52MCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJb2Zmc2V0ICYjNDM7PSBzdHJfZW52MF9yZXQ7CiYjNDM7CiYjNDM7CS8qIGVudjEgaXMgYXQgYnBybS0mZ3Q7cCAmIzQzOyBzaXplb2YoYXJnMCkgJiM0Mzsgc2l6ZW9mKGFyZzEpICYjNDM7IHNpemVvZihlbnYwKSAqLwomIzQzOwlzdHJfZW52MV9yZXQgPSBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKGVudjEsIHNpemVvZihlbnYxKSwKJiM0MzsJCQkJCQkgKHZvaWQgKikoYnBybS0mZ3Q7cCAmIzQzOyBvZmZzZXQpLAomIzQzOwkJCQkJCSBtbSwgQlBGX0ZfUEFEX1pFUk9TKTsKJiM0MzsJaWYgKHN0cl9lbnYxX3JldCAhPSBzaXplb2YoZXhwZWN0ZWRfZW52MSkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJc3RyX2FyZ3NfbWF0Y2ggPQomIzQzOwkJIV9fYnVpbHRpbl9tZW1jbXAoYXJnMCwgZXhwZWN0ZWRfYXJnMCwgc2l6ZW9mKGV4cGVjdGVkX2FyZzApKSAmYW1wOyZhbXA7CiYjNDM7CQkhX19idWlsdGluX21lbWNtcChhcmcxLCBleHBlY3RlZF9hcmcxLCBzaXplb2YoZXhwZWN0ZWRfYXJnMSkpOwomIzQzOwlzdHJfZW52c19tYXRjaCA9CiYjNDM7CQkhX19idWlsdGluX21lbWNtcChlbnYwLCBleHBlY3RlZF9lbnYwLCBzaXplb2YoZXhwZWN0ZWRfZW52MCkpICZhbXA7JmFtcDsKJiM0MzsJCSFfX2J1aWx0aW5fbWVtY21wKGVudjEsIGV4cGVjdGVkX2VudjEsIHNpemVvZihleHBlY3RlZF9lbnYxKSk7CiYjNDM7CiYjNDM7CXJldHVybiBkYXRhX21hdGNoICZhbXA7JmFtcDsgc3RyX2FyZ3NfbWF0Y2ggJmFtcDsmYW1wOyBzdHJfZW52c19tYXRjaCA/IC1FUEVSTSA6IDA7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Jhd190cF9udWxsX2ZhaWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yYXdfdHBfbnVsbF9mYWlsLmMKaW5kZXggNzI1ZDczYzlmZmUxMy4uMTYzMTI0NzkzZDBhNiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Jhd190cF9udWxsX2ZhaWwuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmF3X3RwX251bGxfZmFpbC5jCkBAIC0yLDIyICYjNDM7MiwzNCBAQAogLyogQ29weXJpZ2h0IChjKSAyMDI0IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqLwogCiAjaW5jbHVkZSAmbHQ7dm1saW51eC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2hlbHBlcnMuaCZndDsKICNpbmNsdWRlICZsdDticGYvYnBmX3RyYWNpbmcuaCZndDsKICNpbmNsdWRlICYjMzQ7YnBmX21pc2MuaCYjMzQ7CiAKIGNoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKIAotLyogRW5zdXJlIG1vZHVsZSBwYXJhbWV0ZXIgaGFzIFBUUl9NQVlCRV9OVUxMICovCiYjNDM7ZXh0ZXJuIHN0cnVjdCB0YXNrX3N0cnVjdCAqYnBmX3Rhc2tfYWNxdWlyZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIF9fa3N5bTsKJiM0MztleHRlcm4gdm9pZCBicGZfdGFza19yZWxlYXNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkgX19rc3ltOwomIzQzOwomIzQzOy8qCiYjNDM7ICogRW5zdXJlIHRoZSBtb2R1bGUgdHJhY2Vwb2ludCBhcmd1bWVudCBpcyB0cnVzdGVkLW9yLU5VTEwgd2hpbGUgYWxsb3dpbmcKJiM0MzsgKiBhIGZhdWx0LXByb3RlY3RlZCByZWFkIHdpdGhvdXQgYW4gZXhwbGljaXQgTlVMTCBjaGVjay4KJiM0MzsgKi8KIFNFQygmIzM0O3RwX2J0Zi9icGZfdGVzdG1vZF90ZXN0X3Jhd190cF9udWxsX3RwJiMzNDspCi1fX2ZhaWx1cmUgX19tc2coJiMzNDtSMSBpbnZhbGlkIG1lbSBhY2Nlc3MgJiMzOTt0cnVzdGVkX3B0cl9vcl9udWxsXyYjMzk7JiMzNDspCiYjNDM7X19zdWNjZXNzIF9fbG9nX2xldmVsKDIpCiYjNDM7X19tc2coJiMzNDtSMT10cnVzdGVkX3B0cl9vcl9udWxsX3NrX2J1ZmYmIzM0OykKIGludCB0ZXN0X3Jhd190cF9udWxsX2JwZl90ZXN0bW9kX3Rlc3RfcmF3X3RwX251bGxfYXJnXzEodm9pZCAqY3R4KSB7CiAgICAgYXNtIHZvbGF0aWxlKCYjMzQ7cjEgPSAqKHU2NCAqKShyMSAmIzQzOzApOyByMSA9ICoodTY0ICopKHIxICYjNDM7MCk7JiMzNDsgOjo6IF9fY2xvYmJlcl9hbGwpOwogICAgIHJldHVybiAwOwogfQogCi0vKiBDaGVjayBOVUxMIG1hcmtpbmcgKi8KJiM0MzsvKgomIzQzOyAqIEVuc3VyZSBzY2hlZF9waV9zZXRwcmlvJiMzOTtzIHNlY29uZCBhcmd1bWVudCBpcyB0cnVzdGVkLW9yLU5VTEwgd2hpbGUgYWxsb3dpbmcKJiM0MzsgKiBhIGZhdWx0LXByb3RlY3RlZCByZWFkIHdpdGhvdXQgYW4gZXhwbGljaXQgTlVMTCBjaGVjay4KJiM0MzsgKi8KIFNFQygmIzM0O3RwX2J0Zi9zY2hlZF9waV9zZXRwcmlvJiMzNDspCi1fX2ZhaWx1cmUgX19tc2coJiMzNDtSMSBpbnZhbGlkIG1lbSBhY2Nlc3MgJiMzOTt0cnVzdGVkX3B0cl9vcl9udWxsXyYjMzk7JiMzNDspCiYjNDM7X19zdWNjZXNzIF9fbG9nX2xldmVsKDIpCiYjNDM7X19tc2coJiMzNDtSMT10cnVzdGVkX3B0cl9vcl9udWxsX3Rhc2tfc3RydWN0JiMzNDspCiBpbnQgdGVzdF9yYXdfdHBfbnVsbF9zY2hlZF9waV9zZXRwcmlvX2FyZ18yKHZvaWQgKmN0eCkgewogICAgIGFzbSB2b2xhdGlsZSgmIzM0O3IxID0gKih1NjQgKikocjEgJiM0Mzs4KTsgcjEgPSAqKHU2NCAqKShyMSAmIzQzOzApOyYjMzQ7IDo6OiBfX2Nsb2JiZXJfYWxsKTsKICAgICByZXR1cm4gMDsKQEAgLTYwLDcgJiM0Mzs3Miw4IEBAIGludCB0ZXN0X3RwX2J0Zl9zaWduYWxfZGVsaXZlcl9pbmZvX25vX2RlcmVmKHZvaWQgKmN0eCkKIH0KIAogU0VDKCYjMzQ7dHBfYnRmL3NjaGVkX3Byb2Nlc3Nfd2FpdCYjMzQ7KQotX19mYWlsdXJlIF9fbXNnKCYjMzQ7UjEgaW52YWxpZCBtZW0gYWNjZXNzICYjMzk7dHJ1c3RlZF9wdHJfb3JfbnVsbF8mIzM5OyYjMzQ7KQomIzQzO19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKQomIzQzO19fbXNnKCYjMzQ7UjE9dHJ1c3RlZF9wdHJfb3JfbnVsbF9waWQmIzM0OykKIGludCB0ZXN0X3Jhd190cF9udWxsX3NjaGVkX3Byb2Nlc3Nfd2FpdF9hcmdfMSh2b2lkICpjdHgpCiB7CiAJYXNtIHZvbGF0aWxlKCYjMzQ7cjEgPSAqKHU2NCAqKShyMSAmIzQzOzApOyByMSA9ICoodTMyICopKHIxICYjNDM7MCk7JiMzNDsgOjo6IF9fY2xvYmJlcl9hbGwpOwpAQCAtNzUsMyAmIzQzOzg4LDU4IEBAIGludCB0ZXN0X3Jhd190cF9udWxsX3NjaGVkX3Byb2Nlc3Nfd2FpdF9hcmdfMV9jaGVja2VkKHZvaWQgKmN0eCkKIAkJICAgICAmIzM0O3IxID0gKih1MzIgKikocjEgJiM0MzswKTsmIzM0OyA6OjogX19jbG9iYmVyX2FsbCk7CiAJcmV0dXJuIDA7CiB9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7dHBfYnRmL3NjaGVkX3BpX3NldHByaW8mIzM0OykKJiM0MztfX2ZhaWx1cmUgX19sb2dfbGV2ZWwoMikKJiM0MztfX21zZygmIzM0O1IxPXVudHJ1c3RlZF9wdHJfdGFza19zdHJ1Y3QmIzM0OykKJiM0MztfX21zZygmIzM0O1IxIG11c3QgYmUgYSByY3UgcG9pbnRlciYjMzQ7KQomIzQzO2ludCBCUEZfUFJPRyh0cnVzdGVkX29yX251bGxfd2Fsa19pc191bnRydXN0ZWQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKJiM0MzsJICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBpX3Rhc2spCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudCwgKmFjcXVpcmVkOwomIzQzOwomIzQzOwlwYXJlbnQgPSBwaV90YXNrLSZndDtyZWFsX3BhcmVudDsKJiM0MzsJYWNxdWlyZWQgPSBicGZfdGFza19hY3F1aXJlKHBhcmVudCk7CiYjNDM7CWlmIChhY3F1aXJlZCkKJiM0MzsJCWJwZl90YXNrX3JlbGVhc2UoYWNxdWlyZWQpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7dHBfYnRmL3NjaGVkX3BpX3NldHByaW8mIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtSMSBtdXN0IGJlIGEgcmN1IHBvaW50ZXImIzM0OykKJiM0MztpbnQgQlBGX1BST0coZGVyaXZlZF9wdHJfbnVsbF9jaGVja19kb2VzX25vdF9yZXN0b3JlX3RydXN0LAomIzQzOwkgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHRhc2tfc3RydWN0ICpwaV90YXNrKQomIzQzO3sKJiM0MzsJc3RydWN0IHRhc2tfc3RydWN0ICpwYXJlbnQsICphY3F1aXJlZDsKJiM0MzsKJiM0MzsJcGFyZW50ID0gcGlfdGFzay0mZ3Q7cmVhbF9wYXJlbnQ7CiYjNDM7CWlmICghcGFyZW50KQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWFjcXVpcmVkID0gYnBmX3Rhc2tfYWNxdWlyZShwYXJlbnQpOwomIzQzOwlpZiAoYWNxdWlyZWQpCiYjNDM7CQlicGZfdGFza19yZWxlYXNlKGFjcXVpcmVkKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogSW4gY29udHJhc3QsIGNoZWNraW5nIHRoZSBvcmlnaW5hbCB0cnVzdGVkLW9yLU5VTEwgcG9pbnRlciByZW1vdmVzCiYjNDM7ICogUFRSX01BWUJFX05VTEwgd2hpbGUgcmV0YWluaW5nIFBUUl9UUlVTVEVELgomIzQzOyAqLwomIzQzO1NFQygmIzM0O3RwX2J0Zi9zY2hlZF9waV9zZXRwcmlvJiMzNDspCiYjNDM7X19zdWNjZXNzCiYjNDM7aW50IEJQRl9QUk9HKG9yaWdpbmFsX3B0cl9udWxsX2NoZWNrX3JldGFpbnNfdHJ1c3QsCiYjNDM7CSAgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBpX3Rhc2spCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmFjcXVpcmVkOwomIzQzOwomIzQzOwlpZiAoIXBpX3Rhc2spCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJYWNxdWlyZWQgPSBicGZfdGFza19hY3F1aXJlKHBpX3Rhc2spOwomIzQzOwlpZiAoYWNxdWlyZWQpCiYjNDM7CQlicGZfdGFza19yZWxlYXNlKGFjcXVpcmVkKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdHBfYnRmX251bGxhYmxlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90cF9idGZfbnVsbGFibGUuYwppbmRleCBjZjA1NDdhNjEzZmZjLi5iNzkxNDIyNGJhMTk0IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90cF9idGZfbnVsbGFibGUuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90cF9idGZfbnVsbGFibGUuYwpAQCAtNyw3ICYjNDM7Nyw3IEBACiAjaW5jbHVkZSAmIzM0O2JwZl9taXNjLmgmIzM0OwogCiBTRUMoJiMzNDt0cF9idGYvYnBmX3Rlc3Rtb2RfdGVzdF9udWxsYWJsZV9iYXJlX3RwJiMzNDspCi1fX2ZhaWx1cmUgX19tc2coJiMzNDtSMSBpbnZhbGlkIG1lbSBhY2Nlc3MgJiMzOTt0cnVzdGVkX3B0cl9vcl9udWxsXyYjMzk7JiMzNDspCiYjNDM7X19zdWNjZXNzCiBpbnQgQlBGX1BST0coaGFuZGxlX3RwX2J0Zl9udWxsYWJsZV9iYXJlMSwgc3RydWN0IGJwZl90ZXN0bW9kX3Rlc3RfcmVhZF9jdHggKm51bGxhYmxlX2N0eCkKIHsKIAlyZXR1cm4gbnVsbGFibGVfY3R4LSZndDtsZW47CkBAIC0yMSw0ICYjNDM7MjEsNDcgQEAgaW50IEJQRl9QUk9HKGhhbmRsZV90cF9idGZfbnVsbGFibGVfYmFyZTIsIHN0cnVjdCBicGZfdGVzdG1vZF90ZXN0X3JlYWRfY3R4ICpudWwKIAlyZXR1cm4gMDsKIH0KIAomIzQzO1NFQygmIzM0O3RwX2J0Zi9icGZfdGVzdG1vZF90ZXN0X251bGxhYmxlX2JhcmVfdHAmIzM0OykKJiM0MztfX3N1Y2Nlc3MKJiM0MztpbnQgQlBGX1BST0coaGFuZGxlX3RwX2J0Zl9udWxsYWJsZV9tZW0sIHN0cnVjdCBicGZfdGVzdG1vZF90ZXN0X3JlYWRfY3R4ICpudWxsYWJsZV9jdHgpCiYjNDM7ewomIzQzOwlyZXR1cm4gbnVsbGFibGVfY3R4LSZndDtidWZbMF07CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3RwX2J0Zi9icGZfdGVzdG1vZF90ZXN0X251bGxhYmxlX2JhcmVfdHAmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtwb2ludGVyIGFyaXRobWV0aWMgb24gdHJ1c3RlZF9wdHJfb3JfbnVsbF8gcHJvaGliaXRlZCYjMzQ7KQomIzQzO2ludCBCUEZfUFJPRyhoYW5kbGVfdHBfYnRmX251bGxhYmxlX2FyaXRoLCBzdHJ1Y3QgYnBmX3Rlc3Rtb2RfdGVzdF9yZWFkX2N0eCAqbnVsbGFibGVfY3R4KQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlKCYjMzQ7JVtjdHhdICYjNDM7PSAxJiMzNDsgOiBbY3R4XSAmIzM0OyYjNDM7ciYjMzQ7KG51bGxhYmxlX2N0eCkpOwomIzQzOwlyZXR1cm4gbnVsbGFibGVfY3R4LSZndDtsZW47CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3RwX2J0Zi9icGZfdGVzdG1vZF90ZXN0X251bGxhYmxlX2JhcmVfdHAmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtpbnZhbGlkIG1lbSBhY2Nlc3MgJiMzOTt0cnVzdGVkX3B0cl9vcl9udWxsXyYjMzk7JiMzNDspCiYjNDM7aW50IEJQRl9QUk9HKGhhbmRsZV90cF9idGZfbnVsbGFibGVfYXRvbWljX3JtdywKJiM0MzsJICAgICBzdHJ1Y3QgYnBmX3Rlc3Rtb2RfdGVzdF9yZWFkX2N0eCAqbnVsbGFibGVfY3R4KQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgmIzM0O3IxID0gJVtjdHhdOyYjMzQ7CiYjNDM7CQkgICAgICAmIzM0O3cyID0gMTsmIzM0OwomIzQzOwkJICAgICAgJiMzNDtsb2NrICoodTMyICopKHIxICYjNDM7ICVbbGVuXSkgJiM0Mzs9IHcyOyYjMzQ7CiYjNDM7CQkgICAgICA6CiYjNDM7CQkgICAgICA6IFtjdHhdICYjMzQ7ciYjMzQ7KG51bGxhYmxlX2N0eCksCiYjNDM7CQkJX19pbW1fY29uc3QobGVuLAomIzQzOwkJCQkgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl90ZXN0bW9kX3Rlc3RfcmVhZF9jdHgsCiYjNDM7CQkJCQkgICAgIGxlbikpCiYjNDM7CQkgICAgICA6ICYjMzQ7cjEmIzM0OywgJiMzNDtyMiYjMzQ7LCAmIzM0O21lbW9yeSYjMzQ7KTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOyNpZmRlZiBfX0JQRl9GRUFUVVJFX0xPQURfQUNRX1NUT1JFX1JFTAomIzQzO1NFQygmIzM0O3RwX2J0Zi9icGZfdGVzdG1vZF90ZXN0X251bGxhYmxlX2JhcmVfdHAmIzM0OykKJiM0MztfX2ZhaWx1cmUKJiM0MztfX21zZygmIzM0O0JQRl9BVE9NSUMgbG9hZHMgZnJvbSBSe3tbMC05XSYjNDM7fX0gdHJ1c3RlZF9wdHJfb3JfbnVsbF8mIzM0OykKJiM0MztpbnQgQlBGX1BST0coaGFuZGxlX3RwX2J0Zl9udWxsYWJsZV9sb2FkX2FjcXVpcmUsCiYjNDM7CSAgICAgc3RydWN0IGJwZl90ZXN0bW9kX3Rlc3RfcmVhZF9jdHggKm51bGxhYmxlX2N0eCkKJiM0Mzt7CiYjNDM7CXJldHVybiBfX2F0b21pY19sb2FkX24oJmFtcDtudWxsYWJsZV9jdHgtJmd0O2xlbiwgX19BVE9NSUNfQUNRVUlSRSk7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwogY2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdHBfYnRmX251bGxhYmxlX3J1bnRpbWUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RwX2J0Zl9udWxsYWJsZV9ydW50aW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uNWM5YzdmOTQwNDBkYwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RwX2J0Zl9udWxsYWJsZV9ydW50aW1lLmMKQEAgLTAsMCAmIzQzOzEsMzUgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7dm1saW51eC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfdHJhY2luZy5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7Li4vdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5oJiMzNDsKJiM0MzsKJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CiYjNDM7CiYjNDM7aW50IG1vbml0b3JlZF90aWQ7CiYjNDM7aW50IGNhbGxzOwomIzQzO19fdTY0IG5vbm51bGxfbGVuOwomIzQzO19fdTY0IG51bGxfbGVuOwomIzQzOwomIzQzO1NFQygmIzM0O3RwX2J0Zi9icGZfdGVzdG1vZF90ZXN0X251bGxhYmxlX2JhcmVfdHAmIzM0OykKJiM0MztpbnQgQlBGX1BST0coaGFuZGxlX251bGxhYmxlX3J1bnRpbWUsCiYjNDM7CSAgICAgc3RydWN0IGJwZl90ZXN0bW9kX3Rlc3RfcmVhZF9jdHggKm51bGxhYmxlX2N0eCkKJiM0Mzt7CiYjNDM7CV9fdTMyIHRpZCA9IGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpOwomIzQzOwlfX3U2NCBsZW47CiYjNDM7CWludCBjYWxsOwomIzQzOwomIzQzOwlpZiAodGlkICE9IG1vbml0b3JlZF90aWQpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJbGVuID0gbnVsbGFibGVfY3R4LSZndDtsZW47CiYjNDM7CWNhbGwgPSBjYWxscyYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CWlmIChjYWxsID09IDApCiYjNDM7CQlub25udWxsX2xlbiA9IGxlbjsKJiM0MzsJZWxzZSBpZiAoY2FsbCA9PSAxKQomIzQzOwkJbnVsbF9sZW4gPSBsZW47CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sc20uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sc20uYwppbmRleCBjNzI0YmYzODlmNWM2Li5mYWMxMzNkOTBmNWU2IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbHNtLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xzbS5jCkBAIC0xNjIsMTMgJiM0MzsxNjIsMTMgQEAgX19uYWtlZCBpbnQgZGlzYWJsZWRfaG9va190ZXN0Myh2b2lkICpjdHgpCiAKIFNFQygmIzM0O2xzbS9tbWFwX2ZpbGUmIzM0OykKIF9fZGVzY3JpcHRpb24oJiMzNDtub3QgbnVsbCBjaGVja2luZyBudWxsYWJsZSBwb2ludGVyIGluIGJwZl9sc21fbW1hcF9maWxlJiMzNDspCi1fX2ZhaWx1cmUgX19tc2coJiMzNDtSMSBpbnZhbGlkIG1lbSBhY2Nlc3MgJiMzOTt0cnVzdGVkX3B0cl9vcl9udWxsXyYjMzk7JiMzNDspCiYjNDM7X19zdWNjZXNzCiBpbnQgQlBGX1BST0cobm9fbnVsbF9jaGVjaywgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0Jc3RydWN0IGlub2RlICppbm9kZTsKJiM0MzsJaW5vX3QgaW5vOwogCi0JaW5vZGUgPSBmaWxlLSZndDtmX2lub2RlOwotCV9fc2luayhpbm9kZSk7CiYjNDM7CWlubyA9IGZpbGUtJmd0O2ZfaW5vZGUtJmd0O2lfaW5vOwomIzQzOwlfX3NpbmsoaW5vKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTg4LDYgJiM0MzsxODgsMTYgQEAgaW50IEJQRl9QUk9HKG51bGxfY2hlY2ssIHN0cnVjdCBmaWxlICpmaWxlKQogCXJldHVybiAwOwogfQogCiYjNDM7U0VDKCYjMzQ7bHNtL21tYXBfZmlsZSYjMzQ7KQomIzQzO19fZGVzY3JpcHRpb24oJiMzNDtzdG9yZSB0aHJvdWdoIHRydXN0ZWQtb3ItbnVsbCBmaWxlIGlzIHJlamVjdGVkJiMzNDspCiYjNDM7X19mYWlsdXJlCiYjNDM7X19tc2coJiMzNDtSe3tbMC05XSYjNDM7fX0gaW52YWxpZCBtZW0gYWNjZXNzICYjMzk7dHJ1c3RlZF9wdHJfb3JfbnVsbF8mIzM5OyYjMzQ7KQomIzQzO2ludCBCUEZfUFJPRyhzdG9yZV90aHJvdWdoX3RydXN0ZWRfb3JfbnVsbF9maWxlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKJiM0Mzt7CiYjNDM7CWZpbGUtJmd0O2ZfZmxhZ3MgPSAwOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBTRUMoJiMzNDtsc21fY2dyb3VwL2ZpbGVfb3BlbiYjMzQ7KQogX19kZXNjcmlwdGlvbigmIzM0O3NsZWVwYWJsZSBsc21fY2dyb3VwIHByb2dyYW0gaXMgcmVqZWN0ZWQmIzM0OykKIF9fZmFpbHVyZSBfX21zZygmIzM0O1Byb2dyYW0gb2YgdGhpcyB0eXBlIGNhbm5vdCBiZSBzbGVlcGFibGUmIzM0OykKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl92ZnNfYWNjZXB0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdmZzX2FjY2VwdC5jCmluZGV4IDU1Mzk4YzA0MjkwYTguLjE3YzE1NDJjYzdlMTcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl92ZnNfYWNjZXB0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3Zmc19hY2NlcHQuYwpAQCAtMTAwLDQgJiM0MzsxMDAsMTggQEAgaW50IEJQRl9QUk9HKGlub2RlX3JlbmFtZSwgc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LAogCXJldHVybiAwOwogfQogCiYjNDM7U0VDKCYjMzQ7bHNtLnMvaW5vZGVfcmVuYW1lJiMzNDspCiYjNDM7X19zdWNjZXNzIF9fbG9nX2xldmVsKDIpCiYjNDM7X19tc2coJiMzNDtSe3tbMC05XSYjNDM7fX09dHJ1c3RlZF9wdHJfb3JfbnVsbF9pbm9kZSYjMzQ7KQomIzQzO2ludCBCUEZfUFJPRyhpbm9kZV9yZW5hbWVfbm9fbnVsbF9jaGVjaywgc3RydWN0IGlub2RlICpvbGRfZGlyLAomIzQzOwkgICAgIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqbmV3X2RpciwKJiM0MzsJICAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5LCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiYjNDM7ewomIzQzOwlpbm9fdCBpbm8gPSBuZXdfZGVudHJ5LSZndDtkX2lub2RlLSZndDtpX2lubzsKJiM0MzsKJiM0MzsJaWYgKGlubyA9PSAwKQomIzQzOwkJcmV0dXJuIC1FQUNDRVM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIGNoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl92ZnNfcmVqZWN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdmZzX3JlamVjdC5jCmluZGV4IDhmMGM0NTQyMWY4OTMuLjJhMDgxMzI1ODE4M2UgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl92ZnNfcmVqZWN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3Zmc19yZWplY3QuYwpAQCAtMTU5LDE4ICYjNDM7MTU5LDQgQEAgaW50IEJQRl9QUk9HKHBhdGhfZF9wYXRoX2tmdW5jX25vbl9sc20sIHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3QgZmlsZSAqZikKIAlyZXR1cm4gMDsKIH0KIAotU0VDKCYjMzQ7bHNtLnMvaW5vZGVfcmVuYW1lJiMzNDspCi1fX2ZhaWx1cmUgX19tc2coJiMzNDtpbnZhbGlkIG1lbSBhY2Nlc3MgJiMzOTt0cnVzdGVkX3B0cl9vcl9udWxsXyYjMzk7JiMzNDspCi1pbnQgQlBGX1BST0coaW5vZGVfcmVuYW1lLCBzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCi0JICAgICBzdHJ1Y3QgaW5vZGUgKm5ld19kaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnksCi0JICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpCi17Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IG5ld19kZW50cnktJmd0O2RfaW5vZGU7Ci0JaW5vX3QgaW5vOwotCi0JaW5vID0gaW5vZGUtJmd0O2lfaW5vOwotCWlmIChpbm8gPT0gMCkKLQkJcmV0dXJuIC1FQUNDRVM7Ci0JcmV0dXJuIDA7Ci19CiBjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYwppbmRleCBmNzk4YmJiYjRkMTNjLi4yYmE2YTgzZDI0M2Y1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMKQEAgLTcwMiw2ICYjNDM7NzAyLDcgQEAgYnBmX3Rlc3Rtb2RfdGVzdF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qga29iamVjdCAqa29iaiwKIAlpZiAoYnBmX3Rlc3Rtb2RfbG9vcF90ZXN0KDEwMSkgJmd0OyAxMDApCiAJCXRyYWNlX2JwZl90ZXN0bW9kX3Rlc3RfcmVhZChjdXJyZW50LCAmYW1wO2N0eCk7CiAKJiM0MzsJdHJhY2VfYnBmX3Rlc3Rtb2RfdGVzdF9udWxsYWJsZV9iYXJlX3RwKCZhbXA7Y3R4KTsKIAl0cmFjZV9icGZfdGVzdG1vZF90ZXN0X251bGxhYmxlX2JhcmVfdHAoTlVMTCk7CiAKIAkvKiBNYWdpYyBudW1iZXIgdG8gZW5hYmxlIHdyaXRhYmxlIHRwICovCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zY2hlZF9leHQvbWF5YmVfbnVsbF9mYWlsX2RzcC5icGYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NjaGVkX2V4dC9tYXliZV9udWxsX2ZhaWxfZHNwLmJwZi5jCmluZGV4IGVjNzI0ZDdiMzNkMTguLmVjYWEzNjM1NWNhZWMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NjaGVkX2V4dC9tYXliZV9udWxsX2ZhaWxfZHNwLmJwZi5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NjaGVkX2V4dC9tYXliZV9udWxsX2ZhaWxfZHNwLmJwZi5jCkBAIC03LDE0ICYjNDM7NywxMyBAQAogCiBjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CiAKLXU2NCB2dGltZV90ZXN0OwotCiB2b2lkIEJQRl9TVFJVQ1RfT1BTKG1heWJlX251bGxfcnVubmluZywgc3RydWN0IHRhc2tfc3RydWN0ICpwKQoge30KIAogdm9pZCBCUEZfU1RSVUNUX09QUyhtYXliZV9udWxsX2ZhaWxfZGlzcGF0Y2gsIHMzMiBjcHUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKLQl2dGltZV90ZXN0ID0gcC0mZ3Q7c2N4LmRzcV92dGltZTsKJiM0MzsJLyogUG9pbnRlciBhcml0aG1ldGljIG9uIGEgdHJ1c3RlZC1vci1OVUxMIHBvaW50ZXIgbXVzdCBiZSByZWplY3RlZC4gKi8KJiM0MzsJYXNtIHZvbGF0aWxlKCYjMzQ7JVtwXSAmIzQzOz0gMCYjMzQ7IDogW3BdICYjMzQ7JiM0MztyJiMzNDsocCkpOwogfQogCiBTRUMoJiMzNDsuc3RydWN0X29wcy5saW5rJiMzNDspCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3OTk0CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTEzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgUGF0Y2ggZm9yIFN5emthbGxlciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoICpkb2VzKiB3YXJyYW50IGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiBmb3IgZnV6emluZyBwb3RlbnRpYWwgd2l0aCBzeXprYWxsZXIuIFRoZSBjb2RlIHRvdWNoZXMgc2V2ZXJhbCBrZXkgYXJlYXMgb2YgdGhlIGtlcm5lbCwgYW5kIHRoZSBjaGFuZ2VzIGFyZSBzaWduaWZpY2FudCBlbm91Z2ggdG8gd2FycmFudCBhIGZvY3VzZWQgYXBwcm9hY2guCgpGaXJzdCwgSSBzZWUgbW9kaWZpY2F0aW9ucyBpbiBgZnMvZXhlYy5jYCwgc3BlY2lmaWNhbGx5IGBmcmVlX2Jwcm1gLiBXaGlsZSBpdCBsb29rcyBsaWtlIGEgc21hbGwgY2hhbmdlLCBzZXR0aW5nIGBicHJtLSZndDttbSA9IE5VTExgIGJlZm9yZSBgbW1wdXQobW0pYCBjb3VsZCBwb3RlbnRpYWxseSBpbnRyb2R1Y2Ugc3VidGxlIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyB0aGF0IGZ1enppbmcgY291bGQgdW5jb3Zlci4KClRoZW4sIHRoZSBzZWNvbmQgc2VjdGlvbiwgZW5jb21wYXNzaW5nIGBpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oYCBhbmQgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIGlzIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZy4gVGhlIGludHJvZHVjdGlvbiBvZiBgYnBmX2lzX3RydXN0ZWRfb3JfbnVsbF9idGZfcHRyYCBhbmQgdGhlIHJlbGF0ZWQgbW9kaWZpY2F0aW9ucyB0byBgYnBmX21heV9mYXVsdF9vbl9kZXJlZmAgd2l0aGluIHRoZSBCUEYgdmVyaWZpZXIgYXJlIGhpZ2gtdmFsdWUgdGFyZ2V0cy4gVGhpcyBpbmRpY2F0ZXMgbmV3IGxvZ2ljIGZvciBoYW5kbGluZyBwb3RlbnRpYWxseSB1bnRydXN0ZWQgcG9pbnRlcnMsIHdoaWNoIGlzIGEgcHJpbWUgYXJlYSBmb3IgZnV6emluZy4gVGhlIGNoYW5nZXMgYXJvdW5kIGBCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTGAgYW5kIHRoZSBhbHRlcmF0aW9ucyBpbiBgY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3NgIGFuZCBgY2hlY2tfbWVtX2FjY2Vzc2AgcG9pbnQgdG8gcG90ZW50aWFsIG5ldyBCUEYgZmVhdHVyZXMgYW5kIHZ1bG5lcmFiaWxpdGllcy4KClRoZSBhZGRpdGlvbiBvZiBuZXcga2Z1bmNzIGxpa2UgYGJwZl9jb3B5X2Zyb21fdXNlcl9tbWAsIGBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyYCwgYW5kIHRoZSByZWZhY3RvcmluZyBvZiBleGlzdGluZyBmdW5jdGlvbnMgdG8gdXNlIHRoZW0gKGBicGZfY29weV9mcm9tX3VzZXJfdGFza2AsIGBicGZfY29weV9mcm9tX3VzZXJfdGFza19zdHJgKSBhcmUgYWxzbyBub3Rld29ydGh5LiBUaGUgZmFjdCB0aGF0IHRoZXNlIGtmdW5jcyBhcmUgcmVnaXN0ZXJlZCBhcyBgS0ZfU0xFRVBBQkxFYCBzdWdnZXN0cyBhIGxpa2VseSBuZXcgc2V0IG9mIGZlYXR1cmVzIG9yIGVuaGFuY2VtZW50cyBmb3IgYnBmIHByb2dyYW1zLiBUaGUgY2hhbmdlcyB0byBob3cgZGF0YSBpcyBjb3BpZWQgZnJvbSB1c2VyIHNwYWNlICp0aHJvdWdoKiB0aGUgbW0gbGF5ZXIsIGFuZCB0aGUgcG90ZW50aWFsIGZvciByYWNlcyBpbnRyb2R1Y2VkIGJ5IHRoZSB1c2Ugb2Ygc2xlZXBhYmxlIGtmdW5jcywgaXMgc2lnbmlmaWNhbnQgZm9yIHNlY3VyaXR5LgoKVGhlIGNoYW5nZXMgaW4gYG1tL2ludGVybmFsLmhgLCBgbW0vbWVtb3J5LmNgLCBgbW0vbm9tbXUuY2AsIGFuZCBgbW0vdXRpbC5jYCBhcmUgYWxzbyBpbXBvcnRhbnQuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYGNvcHlfcmVtb3RlX21tX3N0cmAgKHByZXZpb3VzbHkgYF9fY29weV9yZW1vdGVfdm1fc3RyYCkgYW5kIGl0cyBpbnRlcmFjdGlvbnMgd2l0aCBgZ2V0X3Rhc2tfbW0odHNrKWAgaW5kaWNhdGUgbW9kaWZpY2F0aW9ucyByZWxhdGVkIHRvIHJlbW90ZSBtZW1vcnkgbWFuaXB1bGF0aW9uLiBUaGlzIGNvdWxkIGhhdmUgaW1wbGljYXRpb25zIGZvciBtZW1vcnkgY29ycnVwdGlvbiwgcmFjZXMsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MuCgpUaGUgZXhpc3RlbmNlIG9mIHRlc3RzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy8uLi5gIGFkZHMgZnVydGhlciB3ZWlnaHQgdG8gdGhlIGlkZWEgdGhhdCB0aGlzIGlzIHNpZ25pZmljYW50IGNvZGUuIFRoZSB0ZXN0cyBtYXkgbm90IGJlIGV4aGF1c3RpdmUsIHNvIGEgY2FyZWZ1bGx5IGNyYWZ0ZWQgZnV6emluZyBjYW1wYWlnbiBpcyB3b3J0aHdoaWxlLgoKVGhlIGZhY3QgdGhhdCBhbGwgdGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBRRU1VL2FtZDY0IHNldHVwcywgdmlhIHRoZSBCUEYgc3lzY2FsbCAoZUJQRiBwcm9ncmFtcywgTFNNIGhvb2tzLCB0cmFjZXBvaW50cywgc3lzY2FsbHMsIGV0Yy4pIGFuZCBgZXhlY3ZlYCwgaXMgdGhlIGtleSBmYWN0b3IuIFRoZSBjb3JlIEJQRiB2ZXJpZmllciwgdGhlIEJQRiBoZWxwZXJzL2tmdW5jcywgdGhlIG1tIGZ1bmN0aW9ucywgYW5kIGV2ZW4gYGZyZWVfYnBybWAgYXJlIGFsbCB3aXRoaW4gdGhlIGF0dGFjayBzdXJmYWNlLgoKQmFzZWQgb24gdGhlIGNyaXRlcmlhIGZvciAmIzM0O1dvcnRoRnV6emluZz10cnVlLCYjMzQ7IHRoaXMgcGF0Y2ggZGVmaW5pdGVseSBtZWV0cyB0aGUgcmVxdWlyZW1lbnRzLiBJdCB0b3VjaGVzIGNvcmUgc3Vic3lzdGVtcyAoQlBGLCBtbSksIGluY2x1ZGVzIHJlZmFjdG9yaW5ncywgYW5kIGludHJvZHVjZXMgbmV3IGxvZ2ljIHdpdGhpbiByZWFjaGFibGUgY29kZSBwYXRocy4KCk5vdywgSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgS2NvbmZpZyBvcHRpb25zLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGZvciBCUEYgc3lzY2FsbCwgdGhlIEJQRiB2ZXJpZmllciwgdGhlIG5ldyBrZnVuY3MsIGFuZCBldmVyeXRoaW5nIGVsc2UgaW4gdGhpcyBwYXRjaC4gSSYjMzk7bGwgbmVlZCB0byB1c2UgZ3JlcHBlciBvciBzb3VyY2UgaW5zcGVjdGlvbiB0byBkZXRlcm1pbmUgYWxsIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zLiBUaGVuIEkmIzM5O2xsIGlkZW50aWZ5IHRoZSBjcml0aWNhbCBmb2N1cyBzeW1ib2xzIHRvIGZlZWQgc3l6a2FsbGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfU1lTQ0FMTCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9Mjk9bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWctMzAtXG5rZXJuZWwvYnBmL0tjb25maWc6MzE6Y29uZmlnIEJQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL0tjb25maWctMzItXHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMDE3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIEJQRl9TWVNDQUxMIERlcGVuZGVuY2llcyBpbiBLY29uZmlnKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMzEuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgY29uZGl0aW9uYWwgbG9naWMgYW5kIGRlcGVuZGVuY2llcyBmb3IgdGhlIGBCUEZfU1lTQ0FMTGAgb3B0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IG90aGVyIEtjb25maWcgc3ltYm9scywgYW5kIHRodXMgY29uZmlndXJhdGlvbnMsIG11c3QgYmUgZW5hYmxlZCBmb3IgQlBGIHN5c2NhbGwgc3VwcG9ydCB0byBiZSBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYWJvdXQgdGhlIGRpcmVjdCBkZXBlbmRlbmNpZXMsIGJ1dCBhbHNvIHRoZSBpbmRpcmVjdGx5IGltcGxpZWQgb25lcy4gSSYjMzk7bSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGluZ3MgbGlrZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgcmVxdWlyZW1lbnRzIChsaWtlIHdoZXRoZXIgdGhlIGFyY2hpdGVjdHVyZSBwcm92aWRlcyB0aGUgbmVlZGVkIGluZnJhc3RydWN0dXJlKSwgc2VjdXJpdHkgZmVhdHVyZXMsIG9yIGV2ZW4gb3RoZXIgQlBGLXJlbGF0ZWQgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBiZSBhIHByZXJlcXVpc2l0ZS4gS25vd2luZyB0aGlzIGlzIGNydWNpYWwgZm9yIGRlYnVnZ2luZyBidWlsZCBwcm9ibGVtcywgdGFpbG9yaW5nIGEgY3VzdG9tIGtlcm5lbCBjb25maWd1cmF0aW9uLCBvciBldmVuIHByZWRpY3RpbmcgcG90ZW50aWFsIGNvbXBhdGliaWxpdHkgaXNzdWVzLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMgbGlua2luZyB0aGlzIHN5bWJvbCB0byBzcGVjaWZpYyBoYXJkd2FyZSBmZWF0dXJlcyBvciBvdGhlciBtb2R1bGVzLiBUaW1lIHRvIGNvbmZpcm0gYW5kIHJlZmluZSBteSBtZW50YWwgbW9kZWwgb2Ygd2hhdCBuZWVkcyB0byBiZSBpbiBwbGFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzA6XHRcbiAgMzE6XHRjb25maWcgQlBGX1NZU0NBTExcbiAgMzI6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4gIDMzOlx0XHRzZWxlY3QgQlBGXG4gIDM0Olx0XHRzZWxlY3QgSVJRX1dPUktcbiAgMzU6XHRcdHNlbGVjdCBORUVEX1RBU0tTX1JDVVxuICAzNjpcdFx0c2VsZWN0IFRBU0tTX1RSQUNFX1JDVVxuICAzNzpcdFx0c2VsZWN0IEJJTkFSWV9QUklOVEZcbiAgMzg6XHRcdHNlbGVjdCBORVRfU09DS19NU0cgaWYgTkVUXG4gIDM5Olx0XHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcbiAgNDA6XHRcdHNlbGVjdCBQQUdFX1BPT0wgaWYgTkVUXG4gIDQxOlx0XHRkZWZhdWx0IG5cbiAgNDI6XHRcdGhlbHBcbiAgNDM6XHRcdCAgRW5hYmxlIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCB0aGF0IGFsbG93cyB0byBtYW5pcHVsYXRlIEJQRiBwcm9ncmFtc1xuICA0NDpcdFx0ICBhbmQgbWFwcyB2aWEgZmlsZSBkZXNjcmlwdG9ycy5cbiAgNDU6XHRcbiAgNDY6XHRjb25maWcgQlBGX0pJVFxuICA0NzpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclwmIzM0O1xuICA0ODpcdFx0ZGVwZW5kcyBvbiBCUEZcbiAgNDk6XHRcdGRlcGVuZHMgb24gSEFWRV9DQlBGX0pJVCB8fCBIQVZFX0VCUEZfSklUXG4gIDUwOlx0XHRzZWxlY3QgRVhFQ01FTVxuICA1MTpcdFx0aGVscFxuICA1MjpcdFx0ICBCUEYgcHJvZ3JhbXMgYXJlIG5vcm1hbGx5IGhhbmRsZWQgYnkgYSBCUEYgaW50ZXJwcmV0ZXIuIFRoaXMgb3B0aW9uXG4gIDUzOlx0XHQgIGFsbG93cyB0aGUga2VybmVsIHRvIGdlbmVyYXRlIG5hdGl2ZSBjb2RlIHdoZW4gYSBwcm9ncmFtIGlzIGxvYWRlZFxuICA1NDpcdFx0ICBpbnRvIHRoZSBrZXJuZWwuIFRoaXMgd2lsbCBzaWduaWZpY2FudGx5IHNwZWVkLXVwIHByb2Nlc3Npbmcgb2YgQlBGXG4gIDU1Olx0XHQgIHByb2dyYW1zLlxuICA1NjpcdFxuICA1NzpcdFx0ICBOb3RlLCBhbiBhZG1pbiBzaG91bGQgZW5hYmxlIHRoaXMgZmVhdHVyZSBjaGFuZ2luZzpcbiAgNTg6XHRcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfZW5hYmxlXG4gIDU5Olx0XHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2hhcmRlbiAgIChvcHRpb25hbClcbiAgNjA6XHRcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfa2FsbHN5bXMgKG9wdGlvbmFsKVxuICA2MTpcdFxuICA2MjpcdGNvbmZpZyBCUEZfSklUX0FMV0FZU19PTlxuICA2MzpcdFx0Ym9vbCBcJiMzNDtQZXJtYW5lbnRseSBlbmFibGUgQlBGIEpJVCBhbmQgcmVtb3ZlIEJQRiBpbnRlcnByZXRlclwmIzM0O1xuICA2NDpcdFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTCBcdTAwMjZcdTAwMjYgSEFWRV9FQlBGX0pJVCBcdTAwMjZcdTAwMjYgQlBGX0pJVFxuICA2NTpcdFx0aGVscFxuICA2NjpcdFx0ICBFbmFibGVzIEJQRiBKSVQgYW5kIHJlbW92ZXMgQlBGIGludGVycHJldGVyIHRvIGF2b2lkIHNwZWN1bGF0aXZlXG4gIDY3Olx0XHQgIGV4ZWN1dGlvbiBvZiBCUEYgaW5zdHJ1Y3Rpb25zIGJ5IHRoZSBpbnRlcnByZXRlci5cbiAgNjg6XHRcbiAgNjk6XHRcdCAgV2hlbiBDT05GSUdfQlBGX0pJVF9BTFdBWVNfT04gaXMgZW5hYmxlZCwgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfZW5hYmxlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA5MjgKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEZWJ1Z2dpbmcgQlRGIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgZ2l2ZW4gdGhhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGJvdGggQlRGLCBhbmQgdGhlIHBvdGVudGlhbCBmb3Iga2Z1bmNzIGFuZC9vciB0cnVzdGVkIHBvaW50ZXJzLCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGhvdyBgREVCVUdfSU5GT19CVEZgIGlzIGNvbmZpZ3VyZWQuIFdlJiMzOTtyZSBvYnZpb3VzbHkgcmVseWluZyBvbiBCVEYgZGF0YSBmb3Igc29tZSBjcml0aWNhbCBmdW5jdGlvbmFsaXR5IGhlcmUsIHdoZXRoZXIgaXQmIzM5O3Mgc3ltYm9sIHJlc29sdXRpb24sIHR5cGUgaW5mb3JtYXRpb24sIG9yIHBvdGVudGlhbGx5IHZhbGlkYXRpb24gcmVsYXRlZCB0byB0aGVzZSBtb3JlIGFkdmFuY2VkIGZlYXR1cmVzLiBTbywgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyB2ZXJpZnkgdGhlIHN0YXRlIG9mIEJURi4gRXNzZW50aWFsbHksIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7TGV0JiMzOTtzIGNoZWNrIGBERUJVR19JTkZPX0JURmAgYW5kIHZlcmlmeSBpdHMgY3VycmVudCBjb25maWd1cmF0aW9uIGZvciB0aGVzZSBCVEYgZGVwZW5kZW5jaWVzLiYjMzQ7IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYXNwZWN0cyBvZiBCVEYgYXJlIGFjdGl2ZSBhbmQgYXZhaWxhYmxlLiBUaGlzIGlzIGNydWNpYWwgZm9yIHZlcmlmeWluZyB0aGF0IHRoZSBleHBlY3RlZCBtZXRhZGF0YSBpcyBwcmVzZW50IGFuZCBmdW5jdGlvbmluZyBhcyBpbnRlbmRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgREVCVUdfSU5GT19CVEYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bGliL0tjb25maWcuZGVidWc9Mzc4PWNvbmZpZyBERUJVR19JTkZPX1NQTElUXG4tLVxubGliL0tjb25maWcuZGVidWctMzk3LVxubGliL0tjb25maWcuZGVidWc6Mzk4OmNvbmZpZyBERUJVR19JTkZPX0JURlxubGliL0tjb25maWcuZGVidWctMzk5LVx0Ym9vbCBcJiMzNDtHZW5lcmF0ZSBCVEYgdHlwZSBpbmZvcm1hdGlvblwmIzM0O1xuLS1cbmxpYi9LY29uZmlnLmRlYnVnPTQxOT1jb25maWcgUEFIT0xFX0hBU19MQU5HX0VYQ0xVREVcbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zy00MjctXG5saWIvS2NvbmZpZy5kZWJ1Zzo0Mjg6Y29uZmlnIERFQlVHX0lORk9fQlRGX01PRFVMRVNcbmxpYi9LY29uZmlnLmRlYnVnLTQyOS1cdGJvb2wgXCYjMzQ7R2VuZXJhdGUgQlRGIHR5cGUgaW5mb3JtYXRpb24gZm9yIGtlcm5lbCBtb2R1bGVzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEzMzcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWJ1Z2dpbmcgdGhlIERlYnVnZ2luZyBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBuaXR0eS1ncml0dHkuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgZGVidWdnaW5nIGNvbmZpZ3VyYXRpb24sIHNvIEkmIzM5O20gaGVhZGluZyBzdHJhaWdodCBmb3IgYGxpYi9LY29uZmlnLmRlYnVnYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIEkgbmVlZCB0byB6ZXJvIGluIG9uIGxpbmUgMzk4LiBUaGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlIG1lYXQgb2YgYSBzcGVjaWZpYyBkZWJ1Z2dpbmcgc2V0dGluZywgb3IgYSByZWxhdGVkIGdyb3VwaW5nLCB0ZW5kcyB0byBiZS4gSSYjMzk7dmUgZ290IGEgZmVlbGluZyB0aGUgc29sdXRpb24gSSYjMzk7bSBzZWVraW5nIGlzIGdvaW5nIHRvIGJlIG5lYXJieS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bGliL0tjb25maWcuZGVidWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzOTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM5NTpcdFx0ICB0byBrbm93IGFib3V0IHRoZSAuZHdvIGZpbGVzIGFuZCBpbmNsdWRlIHRoZW0uXG4gMzk2Olx0XHQgIEluY29tcGF0aWJsZSB3aXRoIG9sZGVyIHZlcnNpb25zIG9mIGNjYWNoZS5cbiAzOTc6XHRcbiAzOTg6XHRjb25maWcgREVCVUdfSU5GT19CVEZcbiAzOTk6XHRcdGJvb2wgXCYjMzQ7R2VuZXJhdGUgQlRGIHR5cGUgaW5mb3JtYXRpb25cJiMzNDtcbiA0MDA6XHRcdGRlcGVuZHMgb24gIURFQlVHX0lORk9fU1BMSVQgXHUwMDI2XHUwMDI2ICFERUJVR19JTkZPX1JFRFVDRURcbiA0MDE6XHRcdGRlcGVuZHMgb24gIUdDQ19QTFVHSU5fUkFORFNUUlVDVCB8fCBDT01QSUxFX1RFU1RcbiA0MDI6XHRcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcbiA0MDM6XHRcdGRlcGVuZHMgb24gUEFIT0xFX1ZFUlNJT04gXHUwMDNlPSAxMjJcbiA0MDQ6XHRcdCMgcGFob2xlIHVzZXMgZWxmdXRpbHMsIHdoaWNoIGRvZXMgbm90IGhhdmUgc3VwcG9ydCBmb3IgSGV4YWdvbiByZWxvY2F0aW9uc1xuIDQwNTpcdFx0ZGVwZW5kcyBvbiAhSEVYQUdPTlxuIDQwNjpcdFx0aGVscFxuIDQwNzpcdFx0ICBHZW5lcmF0ZSBkZWR1cGxpY2F0ZWQgQlRGIHR5cGUgaW5mb3JtYXRpb24gZnJvbSBEV0FSRiBkZWJ1ZyBpbmZvLlxuIDQwODpcdFx0ICBUdXJuaW5nIHRoaXMgb24gcmVxdWlyZXMgcGFob2xlIHYxLjIyIG9yIGxhdGVyLCB3aGljaCB3aWxsIGNvbnZlcnRcbiA0MDk6XHRcdCAgRFdBUkYgdHlwZSBpbmZvIGludG8gZXF1aXZhbGVudCBkZWR1cGxpY2F0ZWQgQlRGIHR5cGUgaW5mby5cbiA0MTA6XHRcbiA0MTE6XHRjb25maWcgUEFIT0xFX0hBU19CVEZfVEFHXG4gNDEyOlx0XHRkZWZfYm9vbCBQQUhPTEVfVkVSU0lPTiBcdTAwM2U9IDEyM1xuIDQxMzpcdFx0ZGVwZW5kcyBvbiBDQ19JU19DTEFOR1xuIDQxNDpcdFx0aGVscFxuIDQxNTpcdFx0ICBEZWNpZGUgd2hldGhlciBwYWhvbGUgZW1pdHMgYnRmX3RhZyBhdHRyaWJ1dGVzIChidGZfdHlwZV90YWcgYW5kXG4gNDE2Olx0XHQgIGJ0Zl9kZWNsX3RhZykgb3Igbm90LiBDdXJyZW50bHkgb25seSBjbGFuZyBjb21waWxlciBpbXBsZW1lbnRzXG4gNDE3Olx0XHQgIHRoZXNlIGF0dHJpYnV0ZXMsIHNvIG1ha2UgdGhlIGNvbmZpZyBkZXBlbmQgb24gQ0NfSVNfQ0xBTkcuXG4gNDE4Olx0XG4gNDE5Olx0Y29uZmlnIFBBSE9MRV9IQVNfTEFOR19FWENMVURFXG4gNDIwOlx0XHRkZWZfYm9vbCBQQUhPTEVfVkVSU0lPTiBcdTAwM2U9IDEyNFxuIDQyMTpcdFx0aGVscFxuIDQyMjpcdFx0ICBTdXBwb3J0IGZvciB0aGUgLS1sYW5nX2V4Y2x1ZGUgZmxhZyB3aGljaCBtYWtlcyBwYWhvbGUgZXhjbHVkZVxuIDQyMzpcdFx0ICBjb21waWxhdGlvbiB1bml0cyBmcm9tIHRoZSBzdXBwbGllZCBsYW5ndWFnZS4gVXNlZCBpbiBLYnVpbGQgdG9cbiA0MjQ6XHRcdCAgb21pdCBSdXN0IENVcyB3aGljaCBhcmUgbm90IHN1cHBvcnRlZCBpbiB2ZXJzaW9uIDEuMjQgb2YgcGFob2xlLFxuIDQyNTpcdFx0ICBvdGhlcndpc2UgaXQgd291bGQgZW1pdCBtYWxmb3JtZWQga2VybmVsIGFuZCBtb2R1bGUgYmluYXJpZXMgd2hlblxuIDQyNjpcdFx0ICB1c2luZyBERUJVR19JTkZPX0JURl9NT0RVTEVTLlxuIDQyNzpcdFxuIDQyODpcdGNvbmZpZyBERUJVR19JTkZPX0JURl9NT0RVTEVTXG4gNDI5Olx0XHRib29sIFwmIzM0O0dlbmVyYXRlIEJURiB0eXBlIGluZm9ybWF0aW9uIGZvciBrZXJuZWwgbW9kdWxlc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjEyNAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqQ2hlY2tpbmcgQlBGIGFuZCBMU00gQ29uZmlndXJhdGlvbnMqKgoKQWxyaWdodCwgYmVmb3JlIGRpdmluZyB0b28gZGVlcCwgSSBuZWVkIHRvIHRha2UgYSBzdGVwIGJhY2sgYW5kIGV4YW1pbmUgdGhlIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgY2hlY2sgdGhlIHJlbGV2YW50IExTTSBjb25maWdzLCBhbmQgcG90ZW50aWFsbHkgYW55IEJQRiBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGJlIGluZmx1ZW5jaW5nIGJlaGF2aW9yLiBJIGhhdmUgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG92ZXJsb29rIGFueSBkZXRhaWxzLiBCUEZfTFNNIGlzIHRoZSBmaXJzdCB0aGluZyB0aGF0IGNvbWVzIHRvIG1pbmQuIEdpdmVuIHRoZSBmb2N1cyBvZiB0aGlzIGlzc3VlLCBgQlBGX0xTTWAgZmVlbHMgbGlrZSBhIGxpa2VseSBzdXNwZWN0LCBzbyBJIHNob3VsZCBpbnZlc3RpZ2F0ZSB0aGF0IGZpcnN0LiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayBob3cgaXQmIzM5O3Mgc2V0IHVwIGFuZCBpZiB0aGVyZSBhcmUgYW55IGNvbmZsaWN0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9MU00mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTk0PXNvdXJjZSBcJiMzNDtrZXJuZWwvYnBmL3ByZWxvYWQvS2NvbmZpZ1wmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTk1LVxua2VybmVsL2JwZi9LY29uZmlnOjk2OmNvbmZpZyBCUEZfTFNNXG5rZXJuZWwvYnBmL0tjb25maWctOTctXHRib29sIFwmIzM0O0VuYWJsZSBCUEYgTFNNIEluc3RydW1lbnRhdGlvblwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjQxNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRXhhbWluaW5nIEtlcm5lbCBCUEYgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRvIGdldCBhIGhhbmRsZSBvbiB0aGlzLCBJIG5lZWQgdG8gc3RhcnQgd2l0aCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUaGUgYGtlcm5lbC9icGYvS2NvbmZpZ2AgZmlsZSBpcyB0aGUgb2J2aW91cyBwbGFjZSB0byBiZWdpbiwgc28gbGV0JiMzOTtzIGhlYWQgc3RyYWlnaHQgdGhlcmUuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgemVybyBpbiBhcm91bmQgbGluZSA5Ni4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZXkgc3RhcnQgdGhlIGRlZmluaXRpb25zIG9mIHRoZSBjb3JlIEJQRiBmdW5jdGlvbmFsaXR5LCB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciwgc28gSSBiZXQgdGhhdCYjMzk7cyBhIGtleSBzcG90IHRvIGdldCBzdGFydGVkIHdpdGggdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDkwOlx0XHQgIGFmZmVjdGVkIGhhcmR3YXJlLlxuICA5MTpcdFxuICA5MjpcdFx0ICBJZiB5b3UgYXJlIHVuc3VyZSBob3cgdG8gYW5zd2VyIHRoaXMgcXVlc3Rpb24sIGFuc3dlciBZLlxuICA5MzpcdFxuICA5NDpcdHNvdXJjZSBcJiMzNDtrZXJuZWwvYnBmL3ByZWxvYWQvS2NvbmZpZ1wmIzM0O1xuICA5NTpcdFxuICA5NjpcdGNvbmZpZyBCUEZfTFNNXG4gIDk3Olx0XHRib29sIFwmIzM0O0VuYWJsZSBCUEYgTFNNIEluc3RydW1lbnRhdGlvblwmIzM0O1xuICA5ODpcdFx0ZGVwZW5kcyBvbiBCUEZfRVZFTlRTXG4gIDk5Olx0XHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXG4gMTAwOlx0XHRkZXBlbmRzIG9uIFNFQ1VSSVRZXG4gMTAxOlx0XHRkZXBlbmRzIG9uIEJQRl9KSVRcbiAxMDI6XHRcdGhlbHBcbiAxMDM6XHRcdCAgRW5hYmxlcyBpbnN0cnVtZW50YXRpb24gb2YgdGhlIHNlY3VyaXR5IGhvb2tzIHdpdGggQlBGIHByb2dyYW1zIGZvclxuIDEwNDpcdFx0ICBpbXBsZW1lbnRpbmcgZHluYW1pYyBNQUMgYW5kIEF1ZGl0IFBvbGljaWVzLlxuIDEwNTpcdFxuIDEwNjpcdFx0ICBJZiB5b3UgYXJlIHVuc3VyZSBob3cgdG8gYW5zd2VyIHRoaXMgcXVlc3Rpb24sIGFuc3dlciBOLlxuIDEwNzpcdFxuIDEwODpcdGNvbmZpZyBCUEZfSklUX0tBU0FOXG4gMTA5Olx0XHRib29sXG4gMTEwOlx0XHRkZXBlbmRzIG9uIEhBVkVfRUJQRl9KSVRfS0FTQU5cbiAxMTE6XHRcdGRlcGVuZHMgb24gS0FTQU5fR0VORVJJQ1xuIDExMjpcdFx0ZGVwZW5kcyBvbiBLQVNBTl9WTUFMTE9DXG4gMTEzOlx0XHRkZXBlbmRzIG9uIEJQRl9KSVRcbiAxMTQ6XHRcdGRlZmF1bHQgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjkyOAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDQxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLZXJuZWwgRnVuY3Rpb25hbGl0eSBSZXZpZXcqKgoKT2theSwgbGV0JiMzOTtzIGRpc3NlY3QgdGhlc2Uga2VybmVsIG1vZGlmaWNhdGlvbnMuIE15IGluaXRpYWwgZm9jdXMgaXMgdG8gcGlucG9pbnQgdGhlIG5ld2x5IGludHJvZHVjZWQgb3IgYWx0ZXJlZCBmdW5jdGlvbnMuIFRoZSBsaXN0IHBvaW50cyBtZSB0b3dhcmRzIHNldmVyYWwga2V5IGFyZWFzOgoKKiAgIFRoZSBgYnBmX2NvcHlfZnJvbV91c2VyXypgIGZhbWlseSB3aXRoaW4gYGtlcm5lbC9icGYvaGVscGVycy5jYC4gV2UmIzM5O3ZlIGdvdCBgYnBmX2NvcHlfZnJvbV91c2VyX21tYCwgYGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHJgLCBgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tgLCBhbmQgYGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3N0cmAuIFRoZXNlIGFyZSBjbGVhcmx5IHJlbGF0ZWQgdG8gQlBGIHByb2dyYW1zIGludGVyYWN0aW5nIHdpdGggdXNlciBzcGFjZSBtZW1vcnksIHByb2JhYmx5IGludm9sdmluZyBkaWZmZXJlbnQgbWVtb3J5IHNwYWNlcyBhbmQgc3RyaW5nIG9wZXJhdGlvbnMuCiogICBJbiBgbW0vdXRpbC5jYCwgYGNvcHlfcmVtb3RlX21tX3N0cmAgYW5kIGBjb3B5X3JlbW90ZV92bV9zdHJgIHBvcCB1cC4gU2VlbXMgbGlrZSB0aGVzZSBoYXZlIHNvbWV0aGluZyB0byBkbyB3aXRoIHJlbW90ZSBtZW1vcnkgY29waWVzLCBzcGVjaWZpY2FsbHkgc3RyaW5ncyBhbmQgdmlydHVhbCBtZW1vcnkuCiogICBgX19jb3B5X3JlbW90ZV9tbV9zdHJgIGluIGBtbS9tZW1vcnkuY2AgaXMgYWxzbyB0aGVyZSwgd2hpY2ggaXMgbGlrZWx5IGEgbG93LWxldmVsIGhlbHBlciBmb3IgdGhlIGFib3ZlIGZ1bmN0aW9ucy4KKiAgIFRoZW4gd2UgaGF2ZSBzb21lIGNydWNpYWwgdmVyaWZpZXIgdXBkYXRlcyBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYDogYGNoZWNrX3B0cl90b19idGZfYWNjZXNzYCwgYHR5cGVfaXNfdHJ1c3RlZF9vcl9udWxsYCwgYW5kIGBjaGVja19tZW1fYWNjZXNzYC4gVGhlc2UgYXJlIGFsbCB2ZXJ5IGltcG9ydGFudCBmb3IgbWVtb3J5IHNhZmV0eSB3aXRoaW4gQlBGLiBJdCBzZWVtcyB0aGF0IHRoZXkgaGF2ZSBiZWVuIGFkZGVkIHRvIHJlc3RyaWN0IGFjY2VzcyBvZiBCUEYgcHJvZ3JhbXMgdG8gbWVtb3J5LgoqICAgQW5kIGZpbmFsbHksIGBmcmVlX2Jwcm1gIGluIGBmcy9leGVjLmNgLiBUaGF0JiMzOTtzIGFuIGludGVyZXN0aW5nIG9uZSwgbGlrZWx5IGNsZWFuaW5nIHVwIHRoZSBwcm9jZXNzIGVudmlyb25tZW50LCBwb3RlbnRpYWxseSBhZnRlciBhbiBleGVjIGNhbGwuCgpJIGFsc28gbmVlZCB0byBjaGVjayB3aGV0aGVyIGBicGZfaXNfdHJ1c3RlZF9vcl9udWxsX2J0Zl9wdHJgIGFuZCBgYnBmX21heV9mYXVsdF9vbl9kZXJlZmAgYXJlIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zLiBUaGV5IGFyZSBkZWNsYXJlZCBpbiBgaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaGAsIHNvIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBzcGVjaWZpY3MuIE5vdywgd2hlcmUgaXMgYGJwZl9tYXlfZmF1bHRfb25fZGVyZWZgIGNhbGxlZD8gSSYjMzk7bGwgZ3JlcCBmb3IgaXQgdG8gZ2V0IHRoZSBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfbWF5X2ZhdWx0X29uX2RlcmVmJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg9MTM0Mj1zdGF0aWMgaW5saW5lIGJvb2wgYnBmX2lzX3RydXN0ZWRfb3JfbnVsbF9idGZfcHRyKGVudW0gYnBmX3JlZ190eXBlIHR5cGUpXG4tLVxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0xMzQ2LVxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaDoxMzQ3OnN0YXRpYyBpbmxpbmUgYm9vbCBicGZfbWF5X2ZhdWx0X29uX2RlcmVmKGVudW0gYnBmX3JlZ190eXBlIHR5cGUpXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTEzNDgte1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmM9NzczPWludCBicGZfY29udmVydF9jdHhfYWNjZXNzZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTk3OC1cdFx0XHRpZiAoYnBmX2lzX3B0cl90b19tZW1fb3JfYnRmX2lkKHB0cl90eXBlKSBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvZml4dXBzLmM6OTc5Olx0XHRcdCAgICBicGZfbWF5X2ZhdWx0X29uX2RlcmVmKHB0cl90eXBlKSBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvZml4dXBzLmMtOTgwLVx0XHRcdCAgICB0eXBlID09IEJQRl9SRUFEKSB7XG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy05ODktXHRcdFx0fVxua2VybmVsL2JwZi9maXh1cHMuYzo5OTA6XHRcdFx0aWYgKHZlcmlmaWVyX2J1Z19pZihicGZfbWF5X2ZhdWx0X29uX2RlcmVmKHB0cl90eXBlKSwgZW52LFxua2VybmVsL2JwZi9maXh1cHMuYy05OTEtXHRcdFx0XHRcdCAgICBcJiMzNDthY2Nlc3MgdG8gYSBmYXVsdCBwcm9uZSBwb2ludGVyIGlzIG5vdCByZXdyaXR0ZW4gYXMgYSBwcm9iZWQgb25lXCYjMzQ7KSlcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NTExOT1zdGF0aWMgYm9vbCBpc19sb2FkX2FjcV91bnNhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHJlZ25vLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01MTMxLVx0ICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTEzMjpcdHJldHVybiBpbnNuLVx1MDAzZWltbSA9PSBCUEZfTE9BRF9BQ1EgXHUwMDI2XHUwMDI2IGJwZl9tYXlfZmF1bHRfb25fZGVyZWYocmVnLVx1MDAzZXR5cGUpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTUxMzMtfVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02MDcyPXN0YXRpYyBpbnQgY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjEzMC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2MTMxOlx0aWYgKGF0eXBlICE9IEJQRl9SRUFEIFx1MDAyNlx1MDAyNiBicGZfbWF5X2ZhdWx0X29uX2RlcmVmKHJlZy1cdTAwM2V0eXBlKSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTYxMzItXHRcdHZlcmJvc2UoZW52LCBcJiMzNDtvbmx5IHJlYWQgaXMgc3VwcG9ydGVkXFxuXCYjMzQ7KTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjE1OS1cdFx0ICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjE2MDpcdFx0aWYgKHR5cGVfaXNfYWxsb2MocmVnLVx1MDAzZXR5cGUpIFx1MDAyNlx1MDAyNiAhYnBmX21heV9mYXVsdF9vbl9kZXJlZihyZWctXHUwMDNldHlwZSkgXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjE2MS1cdFx0ICAgICF0eXBlX2lzX25vbl9vd25pbmdfcmVmKHJlZy1cdTAwM2V0eXBlKSBcdTAwMjZcdTAwMjZcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTgyODc9c3RhdGljIGJvb2wgcmVnX3R5cGVfbWlzbWF0Y2hfb2soZW51bSBicGZfcmVnX3R5cGUgdHlwZSlcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgyOTgtXHRjYXNlIFBUUl9UT19NRU06XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTgyOTk6XHRcdHJldHVybiAhYnBmX21heV9mYXVsdF9vbl9kZXJlZih0eXBlKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODMwMC1cdGRlZmF1bHQ6XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE4MzI4PXN0YXRpYyBlbnVtIGJwZl9yZWdfdHlwZSBtZXJnZV9wdHJfdHlwZXMoZW51bSBicGZfcmVnX3R5cGUgdHlwZV9hLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODMzMy1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODMzNDpcdGlmIChicGZfbWF5X2ZhdWx0X29uX2RlcmVmKHR5cGVfYSkgfHwgYnBmX21heV9mYXVsdF9vbl9kZXJlZih0eXBlX2IpKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MzM1LVx0XHR0eXBlX21lcmdlZCB8PSB0b19tZW0gPyBNRU1fUkRPTkxZIHwgUFRSX1VOVFJVU1RFRCA6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0ODA4CgkJCQkJCQlvdXRwdXQ6IDMwMQoJCQkJCQkJdGhvdWdodHM6IDEwMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJQRiBhbmQgTWVtb3J5IEFjY2VzcyBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgYmFzZWQgb24gYGJwZl9tYXlfZmF1bHRfb25fZGVyZWZgJiMzOTtzIHVzYWdlIGFjcm9zcyBga2VybmVsL2JwZi92ZXJpZmllci5jYCBhbmQgYGtlcm5lbC9icGYvZml4dXBzLmNg4oCUc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gYGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3Nlc2DigJR3ZSBuZWVkIHRvIHBpY2sgb3V0IHNvbWUgZm9jdXNlZCBzeW1ib2xzIGZvciB0YXJnZXRlZCBmdXp6aW5nLiBJIG5lZWQgdG8gYmUgcHJlY2lzZSBoZXJlLCBmb2N1c2luZyBvbiB0aGUgY2hhbmdlcywgYW5kIGF2b2lkaW5nIHRoZSB1YmlxdWl0b3VzLgoKVGhlIGxpc3QgdGhhdCBzZWVtcyBtb3N0IHJlbGV2YW50IGluY2x1ZGVzOiBgYnBmX2NvcHlfZnJvbV91c2VyX21tYCwgYGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHJgLCBgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tgLCBgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyYCwgYGNvcHlfcmVtb3RlX21tX3N0cmAsIGBjb3B5X3JlbW90ZV92bV9zdHJgLCBgX19jb3B5X3JlbW90ZV9tbV9zdHJgLCBgY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3NgLCBgY2hlY2tfbWVtX2FjY2Vzc2AsIGB0eXBlX2lzX3RydXN0ZWRfb3JfbnVsbGAsIGBicGZfY29udmVydF9jdHhfYWNjZXNzZXNgLCBhbmQgYGZyZWVfYnBybWAuIFRoZXNlIGFsbCBzZWVtIHRvIGJlIGRpcmVjdGx5IHRvdWNoZWQsIG9yIGFkZGVkLCBhbmQgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkgaW4gdGhlIHBhdGNoLgoKTm93LCBsZXQmIzM5O3MgdmVyaWZ5IHRoZXNlIHN5bWJvbHMuIEkmIzM5O20gY2hlY2tpbmcgdGhlIG5hbWluZyBjb252ZW50aW9ucyB0byBlbnN1cmUgdGhlIHRvb2xzIGFyZSByZWZlcmVuY2luZyB0aGVtIGNvcnJlY3RseS4gRm9yIGluc3RhbmNlLCBgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tgIGlzIGBCUEZfQ0FMTF81KGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrLCAuLi4pYCBpbiBga2VybmVsL2JwZi9oZWxwZXJzLmNgLCBzbyBgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tgIHNob3VsZCBiZSBnb29kLiAgYGJwZl9jb3B5X2Zyb21fdXNlcl9tbWAgYW5kIGBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyYCBhcmUgZGVmaW5lZCB1c2luZyBgX19icGZfa2Z1bmNgLiBgY29weV9yZW1vdGVfbW1fc3RyYCBhbmQgYGNvcHlfcmVtb3RlX3ZtX3N0cmAgYXJlIGluIG1tL3V0aWwuYywgYF9fY29weV9yZW1vdGVfbW1fc3RyYCBpcyBpbiBtbS9tZW1vcnkuYyBhbmQgZmluYWxseSBgZnJlZV9icHJtYCBpcyBpbiBgZnMvZXhlYy5jYC4gSSYjMzk7bSBhbHNvIGNvbmZpcm1pbmcgdGhhdCBgY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3NgIGFuZCBgdHlwZV9pc190cnVzdGVkX29yX251bGxgIGFyZSB3aGVyZSBJIGV4cGVjdCB0aGVtLCBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCwgYW5kIHRoYXQgYGNoZWNrX21lbV9hY2Nlc3NgIGlzIGFsc28gaW4gYHZlcmlmaWVyLmNgLgoKSSYjMzk7bSBhbHNvIGRvaW5nIGEgcXVpY2sgc2NhbiBvZiBga2VybmVsL2JwZi92ZXJpZmllci5jYCBmb3IgYW55IG90aGVyIG1vZGlmaWVkIGZ1bmN0aW9ucywganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgZW5zdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLCBjb25maXJtaW5nIGB0eXBlX2lzX3RydXN0ZWRfb3JfbnVsbGAsIGBjaGVja19wdHJfdG9fYnRmX2FjY2Vzc2AsIGFuZCBgY2hlY2tfbWVtX2FjY2Vzc2AgYXJlIHRoZSBvbmx5IHJlbGV2YW50IGZ1bmN0aW9ucy4KCk5leHQsIHRoZSBLY29uZmlnIG9wdGlvbnMsIHdoaWNoIGFyZSBnb2luZyB0byBiZSBrZXkgdG8gcmVwbGljYXRpbmcgdGhpcy4gSSBzZWUgYEJQRl9TWVNDQUxMYCwgYERFQlVHX0lORk9fQlRGYCwgYW5kIGBCUEZfTFNNYCBhcmUgdGhlIGltcG9ydGFudCBvbmVzIGhlcmUuCgpUaGUgcGF0Y2gmIzM5O3MgcmVhc29uaW5nIGlzIHNvbGlkOiBuZXcgc2xlZXBhYmxlIGtmdW5jcywgcmVmYWN0b3JpbmcgYWNyb3NzIG1tIGFuZCBCUEYgaGVscGVycywgdGhlIGFkZGl0aW9uIG9mIHRydXN0ZWQtb3ItbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNpbmcgc3VwcG9ydCBpbiB0aGUgQlBGIHZlcmlmaWVyLCBhbmQgdGhlIHVwZGF0ZSB0byBgZnJlZV9icHJtYC4gVGhlc2UgbW9kaWZpY2F0aW9ucyB0b3VjaCBtZW1vcnkgbWFuYWdlbWVudCwgQlBGIHZlcmlmaWNhdGlvbiwgYW5kIHByb2Nlc3MgZXhlY3V0aW9uLCBhbGwgb2Ygd2hpY2ggYXJlIGFjY2Vzc2libGUgdmlhIHN0YW5kYXJkIHN5emthbGxlciBzeXNjYWxscy4gVGhpcyBtYWtlcyBpdCBhIGdyZWF0IGNhbmRpZGF0ZSBmb3IgZnV6emluZy4KCk15IGNvbmNsdXNpb246IFdvcnRoRnV6emluZyA9IHRydWU7IGFuZCB0aGUgY29uZmlndXJhdGlvbnMgYW5kIHN5bWJvbHMgYXJlIHNwb3Qgb24uIEkmIzM5O20gcmVhZHkgdG8gY2FsbCB0aGUgYHNldC1yZXN1bHRzYCB0b29sIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0RFQlVHX0lORk9fQlRGJiMzNDssCiAgICAmIzM0O0JQRl9MU00mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfY29weV9mcm9tX3VzZXJfbW0mIzM0OywKICAgICYjMzQ7YnBmX2NvcHlfZnJvbV91c2VyX21tX3N0ciYjMzQ7LAogICAgJiMzNDticGZfY29weV9mcm9tX3VzZXJfdGFzayYjMzQ7LAogICAgJiMzNDticGZfY29weV9mcm9tX3VzZXJfdGFza19zdHImIzM0OywKICAgICYjMzQ7Y29weV9yZW1vdGVfbW1fc3RyJiMzNDssCiAgICAmIzM0O2NvcHlfcmVtb3RlX3ZtX3N0ciYjMzQ7LAogICAgJiMzNDtfX2NvcHlfcmVtb3RlX21tX3N0ciYjMzQ7LAogICAgJiMzNDtjaGVja19wdHJfdG9fYnRmX2FjY2VzcyYjMzQ7LAogICAgJiMzNDt0eXBlX2lzX3RydXN0ZWRfb3JfbnVsbCYjMzQ7LAogICAgJiMzNDtjaGVja19tZW1fYWNjZXNzJiMzNDssCiAgICAmIzM0O2JwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcyYjMzQ7LAogICAgJiMzNDtmcmVlX2Jwcm0mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgc2xlZXBhYmxlIEJQRiBrZnVuY3MgKGJwZl9jb3B5X2Zyb21fdXNlcl9tbSBhbmQgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0ciksIHJlZmFjdG9ycyByZW1vdGUgTU0gc3RyaW5nIGNvcHlpbmcgaGVscGVycyBhY3Jvc3MgbW0vIGFuZCBrZXJuZWwvYnBmLywgbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byBhbGxvdyBmYXVsdC1wcm90ZWN0ZWQgbG9hZHMgdGhyb3VnaCB0cnVzdGVkLW9yLW51bGwgcG9pbnRlcnMsIGFuZCBhbHRlcnMgbW0gY2xlYW51cCBpbiBmcmVlX2Jwcm0oKS4gVGhlc2UgY2hhbmdlcyB0b3VjaCBjb3JlIEJQRiBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgZXhlY3V0aW9uIHBhdGhzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cyB2aWEgQlBGIGFuZCBleGVjIHN5c2NhbGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtERUJVR19JTkZPX0JURiYjMzQ7LAogICAgJiMzNDtCUEZfTFNNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2NvcHlfZnJvbV91c2VyX21tJiMzNDssCiAgICAmIzM0O2JwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHImIzM0OywKICAgICYjMzQ7YnBmX2NvcHlfZnJvbV91c2VyX3Rhc2smIzM0OywKICAgICYjMzQ7YnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyJiMzNDssCiAgICAmIzM0O2NvcHlfcmVtb3RlX21tX3N0ciYjMzQ7LAogICAgJiMzNDtjb3B5X3JlbW90ZV92bV9zdHImIzM0OywKICAgICYjMzQ7X19jb3B5X3JlbW90ZV9tbV9zdHImIzM0OywKICAgICYjMzQ7Y2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3MmIzM0OywKICAgICYjMzQ7dHlwZV9pc190cnVzdGVkX29yX251bGwmIzM0OywKICAgICYjMzQ7Y2hlY2tfbWVtX2FjY2VzcyYjMzQ7LAogICAgJiMzNDticGZfY29udmVydF9jdHhfYWNjZXNzZXMmIzM0OywKICAgICYjMzQ7ZnJlZV9icHJtJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IHNsZWVwYWJsZSBCUEYga2Z1bmNzIChicGZfY29weV9mcm9tX3VzZXJfbW0gYW5kIGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIpLCByZWZhY3RvcnMgcmVtb3RlIE1NIHN0cmluZyBjb3B5aW5nIGhlbHBlcnMgYWNyb3NzIG1tLyBhbmQga2VybmVsL2JwZi8sIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gYWxsb3cgZmF1bHQtcHJvdGVjdGVkIGxvYWRzIHRocm91Z2ggdHJ1c3RlZC1vci1udWxsIHBvaW50ZXJzLCBhbmQgYWx0ZXJzIG1tIGNsZWFudXAgaW4gZnJlZV9icHJtKCkuIFRoZXNlIGNoYW5nZXMgdG91Y2ggY29yZSBCUEYgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IGV4ZWN1dGlvbiBwYXRocyByZWFjaGFibGUgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMgdmlhIEJQRiBhbmQgZXhlYyBzeXNjYWxscy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6MjE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMDoyMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIEJQRiBrZnVuY3MgZm9yIGNvcHlpbmcgbWVtb3J5IGZyb20gYW4gYXJiaXRyYXJ5IGBzdHJ1Y3QgbW1fc3RydWN0YCAoYGJwZl9jb3B5X2Zyb21fdXNlcl9tbWAgYW5kIGBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyYCksIHJlZmFjdG9ycyBleGlzdGluZyB0YXNrLWJhc2VkIGhlbHBlcnMgdG8gdXNlIHRoZXNlIGZ1bmN0aW9ucywgY2xlYXJzIGBicHJtLVx1MDAzZW1tYCBiZWZvcmUgZHJvcHBpbmcgdGhlIHJlZmVyZW5jZSBpbiBgZnJlZV9icHJtKClgLCBhbmQgdXBkYXRlcyB0aGUgQlBGIHZlcmlmaWVyIHRvIGFsbG93IGZhdWx0LXByb3RlY3RlZCBsb2FkcyB0aHJvdWdoIHRydXN0ZWQtb3ItbnVsbCBCVEYgcG9pbnRlcnMgKGBicGZfaXNfdHJ1c3RlZF9vcl9udWxsX2J0Zl9wdHJgKS5cblxuS01TQU4gdnMgS0FTQU4gQXBwbGljYWJpbGl0eTpcbi0gS01TQU4gZGV0ZWN0cyByZWFkcyBvZiB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAvcGFnZSBtZW1vcnkgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBkaXNjbG9zdXJlIChpbmZvLWxlYWtzKS5cbi0gS0FTQU4gLyBMT0NLREVQIGRldGVjdCBtZW1vcnkgY29ycnVwdGlvbnMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMsIGFuZCBsb2NraW5nIGVycm9ycy5cbi0gVGhlIG5ldyBCUEYgY29weSBrZnVuY3MgcHJvcGVybHkgaGFuZGxlIG1lbW9yeSBpbml0aWFsaXphdGlvbjogYW55IGRlc3RpbmF0aW9uIGJ1ZmZlcnMgYXJlIGVpdGhlciBmdWxseSB3cml0dGVuIG9yIGV4cGxpY2l0bHkgemVyb2VkIHZpYSBgbWVtc2V0KClgIHVwb24gZmFpbHVyZSwgcGFydGlhbCByZWFkcywgb3Igd2hlbiBgQlBGX0ZfUEFEX1pFUk9TYCBpcyByZXF1ZXN0ZWQuXG4tIE5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgc3RhY2sgYWxsb2NhdGlvbnMsIG9yIGtlcm5lbC10by11c2VyIGxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuXG4tIFZlcmlmaWVyIHR5cGUgdHJhY2tpbmcgYW5kIHJlZmVyZW5jZSBjb3VudGluZyBjaGFuZ2VzIHJlbGF0ZSB0byBwb2ludGVyIHZhbGlkaXR5IGFuZCBmYXVsdCBoYW5kbGluZywgYXJlYXMgd2hlcmUgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllcyBhcmUgYXBwbGljYWJsZSwgbm90IEtNU0FOLlxuXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGRiNzdhZjY2YjNhYTA3YjEzZGM4M2FhZmNhMWI4YjBhMDI5MWExZmIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDIwOjIwOjUzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvZXhlYy5jIGIvZnMvZXhlYy5jCmluZGV4IDc0NWY2ZWI1Mjc5ZTYuLjRkZGQ0MDNmZDkxYzcgMTAwNjQ0Ci0tLSBhL2ZzL2V4ZWMuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leGVjLmMKQEAgLTE0NTYsOSAmIzQzOzE0NTYsMTIgQEAgdm9pZCBicHJtX2Ryb3BfbG9hZGVyKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pCiAKIHN0YXRpYyB2b2lkIGZyZWVfYnBybShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKQogewotCWlmIChicHJtLSZndDttbSkgewomIzQzOwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGJwcm0tJmd0O21tOwomIzQzOwomIzQzOwlpZiAobW0pIHsKIAkJYWNjdF9hcmdfc2l6ZShicHJtLCAwKTsKLQkJbW1wdXQoYnBybS0mZ3Q7bW0pOwomIzQzOwkJYnBybS0mZ3Q7bW0gPSBOVUxMOwomIzQzOwkJbW1wdXQobW0pOwogCX0KIAlpZiAoYnBybS0mZ3Q7dXNlcl9ucykKIAkJcHV0X3VzZXJfbnMoYnBybS0mZ3Q7dXNlcl9ucyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaAppbmRleCA5NzI3ZGY1YWY4M2FiLi40ZjAzMmFkODNjNjc1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgKQEAgLTEzMzksNiAmIzQzOzEzMzksMTEgQEAgc3RhdGljIGlubGluZSBib29sIGJwZl9pc19wdHJfdG9fbWVtX29yX2J0Zl9pZChlbnVtIGJwZl9yZWdfdHlwZSB0eXBlKQogCX0KIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBicGZfaXNfdHJ1c3RlZF9vcl9udWxsX2J0Zl9wdHIoZW51bSBicGZfcmVnX3R5cGUgdHlwZSkKJiM0Mzt7CiYjNDM7CXJldHVybiB0eXBlID09IChQVFJfVE9fQlRGX0lEIHwgUFRSX1RSVVNURUQgfCBQVFJfTUFZQkVfTlVMTCk7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBib29sIGJwZl9tYXlfZmF1bHRfb25fZGVyZWYoZW51bSBicGZfcmVnX3R5cGUgdHlwZSkKIHsKIAkvKgpAQCAtMTM0Niw3ICYjNDM7MTM1MSw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBicGZfbWF5X2ZhdWx0X29uX2RlcmVmKGVudW0gYnBmX3JlZ190eXBlIHR5cGUpCiAJICogcHJvdGVjdGlvbiwgdGhhdCBpcywgdGhlIG9uZXMgYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzKCkgaGFzIHRvCiAJICogdHVybiBhIEJQRl9MRFggaW50byBhIEJQRl9QUk9CRV9NRU0gb25lIGZvci4KIAkgKi8KLQlyZXR1cm4gdHlwZSA9PSBQVFJfVE9fQlRGX0lEIHx8ICh0eXBlX2ZsYWcodHlwZSkgJmFtcDsgUFRSX1VOVFJVU1RFRCk7CiYjNDM7CXJldHVybiB0eXBlID09IFBUUl9UT19CVEZfSUQgfHwKJiM0MzsJICAgICAgICh0eXBlX2ZsYWcodHlwZSkgJmFtcDsgUFRSX1VOVFJVU1RFRCkgfHwKJiM0MzsJICAgICAgIGJwZl9pc190cnVzdGVkX29yX251bGxfYnRmX3B0cih0eXBlKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIGJwZl9wcm9nX2hhc19hcmVuYV9jdHhfYXJnKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaAppbmRleCBkZDA5YzQzOGZhMjNlLi5kNWJkZTFmNzFhOTdlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbS5oCkBAIC0zMzI2LDYgJiM0MzszMzI2LDggQEAgZXh0ZXJuIGludCBhY2Nlc3NfcmVtb3RlX3ZtKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCXZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncyk7CiAKICNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTEwKJiM0MztleHRlcm4gaW50IGNvcHlfcmVtb3RlX21tX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAomIzQzOwkJCSAgICAgIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncyk7CiBleHRlcm4gaW50IGNvcHlfcmVtb3RlX3ZtX3N0cihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdW5zaWduZWQgbG9uZyBhZGRyLAogCQkJICAgICAgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oZWxwZXJzLmMgYi9rZXJuZWwvYnBmL2hlbHBlcnMuYwppbmRleCBiM2NjNWM4ZmM4NzU2Li5kM2M1NjQ0MzdhZDA2IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2hlbHBlcnMuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2hlbHBlcnMuYwpAQCAtMzIsNiAmIzQzOzMyLDEwIEBACiAKICNpbmNsdWRlICYjMzQ7Li4vLi4vbGliL2tzdHJ0b3guaCYjMzQ7CiAKJiM0MztfX2JwZl9rZnVuYyBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX21tKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osCiYjNDM7CQkJCSAgICAgIGNvbnN0IHZvaWQgX191c2VyICp1bnNhZmVfcHRyX19pZ24sCiYjNDM7CQkJCSAgICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1NjQgZmxhZ3MpOwomIzQzOwogLyogSWYga2VybmVsIHN1YnN5c3RlbSBpcyBhbGxvd2luZyBlQlBGIHByb2dyYW1zIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiwKICAqIGluc2lkZSBpdHMgb3duIHZlcmlmaWVyX29wcy0mZ3Q7Z2V0X2Z1bmNfcHJvdG8oKSBjYWxsYmFjayBpdCBzaG91bGQgcmV0dXJuCiAgKiBicGZfbWFwX2xvb2t1cF9lbGVtX3Byb3RvLCBzbyB0aGF0IHZlcmlmaWVyIGNhbiBwcm9wZXJseSBjaGVjayB0aGUgYXJndW1lbnRzCkBAIC02ODIsMjIgJiM0Mzs2ODYsMTUgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9jb3B5X2Zyb21fdXNlcl9wcm90byA9IHsKIEJQRl9DQUxMXzUoYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2ssIHZvaWQgKiwgZHN0LCB1MzIsIHNpemUsCiAJICAgY29uc3Qgdm9pZCBfX3VzZXIgKiwgdXNlcl9wdHIsIHN0cnVjdCB0YXNrX3N0cnVjdCAqLCB0c2ssIHU2NCwgZmxhZ3MpCiB7CiYjNDM7CXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwogCWludCByZXQ7CiAKLQkvKiBmbGFncyBpcyBub3QgdXNlZCB5ZXQgKi8KLQlpZiAodW5saWtlbHkoZmxhZ3MpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICh1bmxpa2VseSghc2l6ZSkpCi0JCXJldHVybiAwOwotCi0JcmV0ID0gYWNjZXNzX3Byb2Nlc3Nfdm0odHNrLCAodW5zaWduZWQgbG9uZyl1c2VyX3B0ciwgZHN0LCBzaXplLCAwKTsKLQlpZiAocmV0ID09IHNpemUpCi0JCXJldHVybiAwOwomIzQzOwltbSA9IGdldF90YXNrX21tKHRzayk7CiYjNDM7CXJldCA9IGJwZl9jb3B5X2Zyb21fdXNlcl9tbShkc3QsIHNpemUsIHVzZXJfcHRyLCBtbSwgZmxhZ3MpOwomIzQzOwlpZiAobW0pCiYjNDM7CQltbXB1dChtbSk7CiAKLQltZW1zZXQoZHN0LCAwLCBzaXplKTsKLQkvKiBSZXR1cm4gLUVGQVVMVCBmb3IgcGFydGlhbCByZWFkICovCi0JcmV0dXJuIHJldCAmbHQ7IDAgPyByZXQgOiAtRUZBVUxUOwomIzQzOwlyZXR1cm4gcmV0OwogfQogCiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfcHJvdG8gPSB7CkBAIC0zNjU4LDYgJiM0MzszNjU1LDEwMCBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX3N0cih2b2lkICpkc3QsIHUzMiBkc3RfX3N6LCBjb25zdCB2b2lkIF9fdXNlcgogCXJldHVybiByZXQgJiM0MzsgMTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIGJwZl9jb3B5X2Zyb21fdXNlcl9tbSgpIC0gQ29weSBkYXRhIGZyb20gYW4gYWRkcmVzcyBzcGFjZQomIzQzOyAqIEBkc3Q6ICAgICAgICAgICAgIERlc3RpbmF0aW9uIGFkZHJlc3MsIGluIGtlcm5lbCBzcGFjZQomIzQzOyAqIEBkc3RfX3N6OiAgICAgICAgIE51bWJlciBvZiBieXRlcyB0byBjb3B5CiYjNDM7ICogQHVuc2FmZV9wdHJfX2lnbjogU291cmNlIGFkZHJlc3MgaW4gdGhlIGFkZHJlc3Mgc3BhY2UKJiM0MzsgKiBAbW06ICAgICAgICAgICAgICBBZGRyZXNzIHNwYWNlIHRvIGNvcHkgZnJvbQomIzQzOyAqIEBmbGFnczogICAgICAgICAgIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlOyBtdXN0IGJlIHplcm8KJiM0MzsgKgomIzQzOyAqIENvcGllcyBkYXRhIGZyb20gdGhlIHVzZXIgYWRkcmVzcyBzcGFjZSBhc3NvY2lhdGVkIHdpdGggQG1tLiBUaGUgZGVzdGluYXRpb24KJiM0MzsgKiBpcyB6ZXJvZWQgaWYgYW4gYXR0ZW1wdGVkIGNvcHkgY2Fubm90IGJlIGNvbXBsZXRlZCBpbiBmdWxsLiBVbnN1cHBvcnRlZAomIzQzOyAqIGZsYWdzIHJldHVybiAtRUlOVkFMIHdpdGhvdXQgbW9kaWZ5aW5nIEBkc3QuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVJTlZBTCBpZiBAZmxhZ3MgaXMgbm9uLXplcm8sIG9yIC1FRkFVTFQgaWYgdGhlIGNvcHkKJiM0MzsgKiBmYWlscyBvciBpcyBwYXJ0aWFsLgomIzQzOyAqLwomIzQzO19fYnBmX2tmdW5jIGludCBicGZfY29weV9mcm9tX3VzZXJfbW0odm9pZCAqZHN0LCB1MzIgZHN0X19zeiwKJiM0MzsJCQkJICAgICAgY29uc3Qgdm9pZCBfX3VzZXIgKnVuc2FmZV9wdHJfX2lnbiwKJiM0MzsJCQkJICAgICAgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHU2NCBmbGFncykKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmICh1bmxpa2VseShmbGFncykpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJaWYgKHVubGlrZWx5KCFkc3RfX3N6KSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAodW5saWtlbHkoIW1tKSkgewomIzQzOwkJbWVtc2V0KGRzdCwgMCwgZHN0X19zeik7CiYjNDM7CQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBhY2Nlc3NfcmVtb3RlX3ZtKG1tLCAodW5zaWduZWQgbG9uZyl1bnNhZmVfcHRyX19pZ24sCiYjNDM7CQkJICAgICAgIGRzdCwgZHN0X19zeiwgMCk7CiYjNDM7CWlmIChyZXQgPT0gZHN0X19zeikKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwltZW1zZXQoZHN0LCAwLCBkc3RfX3N6KTsKJiM0MzsJcmV0dXJuIHJldCAmbHQ7IDAgPyByZXQgOiAtRUZBVUxUOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKCkgLSBDb3B5IGEgc3RyaW5nIGZyb20gYW4gYWRkcmVzcyBzcGFjZQomIzQzOyAqIEBkc3Q6ICAgICAgICAgICAgIERlc3RpbmF0aW9uIGFkZHJlc3MsIGluIGtlcm5lbCBzcGFjZS4gVGhpcyBidWZmZXIgbXVzdCBiZQomIzQzOyAqICAgICAgICAgICAgICAgICAgIGF0IGxlYXN0IEBkc3RfX3N6IGJ5dGVzIGxvbmcKJiM0MzsgKiBAZHN0X19zejogICAgICAgICBNYXhpbXVtIG51bWJlciBvZiBieXRlcyB0byBjb3B5LCBpbmNsdWRpbmcgdGhlIHRyYWlsaW5nIE5VTAomIzQzOyAqIEB1bnNhZmVfcHRyX19pZ246IFNvdXJjZSBhZGRyZXNzIGluIHRoZSBhZGRyZXNzIHNwYWNlCiYjNDM7ICogQG1tOiAgICAgICAgICAgICAgQWRkcmVzcyBzcGFjZSB0byBjb3B5IGZyb20KJiM0MzsgKiBAZmxhZ3M6ICAgICAgICAgICBUaGUgb25seSBzdXBwb3J0ZWQgZmxhZyBpcyBCUEZfRl9QQURfWkVST1MKJiM0MzsgKgomIzQzOyAqIENvcGllcyBhIE5VTC10ZXJtaW5hdGVkIHN0cmluZyBmcm9tIHRoZSB1c2VyIGFkZHJlc3Mgc3BhY2UgYXNzb2NpYXRlZCB3aXRoCiYjNDM7ICogQG1tLiBJZiB0aGUgc3RyaW5nIGlzIHRvbyBsb25nLCBAZHN0IGlzIHN0aWxsIE5VTC10ZXJtaW5hdGVkIHVubGVzcyBAZHN0X19zegomIzQzOyAqIGlzIHplcm8uCiYjNDM7ICoKJiM0MzsgKiBJZiB0aGUgZmxhZ3MgYXJlIHZhbGlkIGFuZCBCUEZfRl9QQURfWkVST1MgaXMgc2V0LCB0aGUgdW51c2VkIHBvcnRpb24gb2YKJiM0MzsgKiBAZHN0IGlzIGNsZWFyZWQgb24gc3VjY2VzcyBhbmQgYWxsIG9mIEBkc3QgaXMgY2xlYXJlZCBvbiBhIGNvcHkgZmFpbHVyZS4KJiM0MzsgKiBVbnN1cHBvcnRlZCBmbGFncyByZXR1cm4gLUVJTlZBTCB3aXRob3V0IG1vZGlmeWluZyBAZHN0LgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiBUaGUgbnVtYmVyIG9mIGNvcGllZCBieXRlcyBpbmNsdWRpbmcgdGhlIE5VTCB0ZXJtaW5hdG9yIG9uIHN1Y2Nlc3MsCiYjNDM7ICogb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCiYjNDM7ICovCiYjNDM7X19icGZfa2Z1bmMgaW50IGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIodm9pZCAqZHN0LCB1MzIgZHN0X19zeiwKJiM0MzsJCQkJCSAgY29uc3Qgdm9pZCBfX3VzZXIgKnVuc2FmZV9wdHJfX2lnbiwKJiM0MzsJCQkJCSAgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHU2NCBmbGFncykKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmICh1bmxpa2VseShmbGFncyAmYW1wOyB+QlBGX0ZfUEFEX1pFUk9TKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAodW5saWtlbHkoZHN0X19zeiA9PSAwKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAodW5saWtlbHkoIW1tKSkgewomIzQzOwkJaWYgKGZsYWdzICZhbXA7IEJQRl9GX1BBRF9aRVJPUykKJiM0MzsJCQltZW1zZXQoZHN0LCAwLCBkc3RfX3N6KTsKJiM0MzsJCWVsc2UKJiM0MzsJCQkqKGNoYXIgKilkc3QgPSAmIzM5O1wwJiMzOTs7CiYjNDM7CQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBjb3B5X3JlbW90ZV9tbV9zdHIobW0sICh1bnNpZ25lZCBsb25nKXVuc2FmZV9wdHJfX2lnbiwgZHN0LCBkc3RfX3N6LCAwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApIHsKJiM0MzsJCWlmIChmbGFncyAmYW1wOyBCUEZfRl9QQURfWkVST1MpCiYjNDM7CQkJbWVtc2V0KGRzdCwgMCwgZHN0X19zeik7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChmbGFncyAmYW1wOyBCUEZfRl9QQURfWkVST1MpCiYjNDM7CQltZW1zZXQoZHN0ICYjNDM7IHJldCwgMCwgZHN0X19zeiAtIHJldCk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQgJiM0MzsgMTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3N0cigpIC0gQ29weSBhIHN0cmluZyBmcm9tIGFuIHRhc2smIzM5O3MgYWRkcmVzcyBzcGFjZQogICogQGRzdDogICAgICAgICAgICAgRGVzdGluYXRpb24gYWRkcmVzcywgaW4ga2VybmVsIHNwYWNlLiAgVGhpcyBidWZmZXIgbXVzdCBiZQpAQCAtMzY4MSwyNSAmIzQzOzM3NzIsMTYgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3N0cih2b2lkICpkc3QsIHUzMiBkc3RfX3N6LAogCQkJCQkgICAgY29uc3Qgdm9pZCBfX3VzZXIgKnVuc2FmZV9wdHJfX2lnbiwKIAkJCQkJICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1NjQgZmxhZ3MpCiB7CiYjNDM7CXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwogCWludCByZXQ7CiAKLQlpZiAodW5saWtlbHkoZmxhZ3MgJmFtcDsgfkJQRl9GX1BBRF9aRVJPUykpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKHVubGlrZWx5KGRzdF9fc3ogPT0gMCkpCi0JCXJldHVybiAwOwomIzQzOwltbSA9IGdldF90YXNrX21tKHRzayk7CiYjNDM7CXJldCA9IGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIoZHN0LCBkc3RfX3N6LCB1bnNhZmVfcHRyX19pZ24sCiYjNDM7CQkJCQltbSwgZmxhZ3MpOwomIzQzOwlpZiAobW0pCiYjNDM7CQltbXB1dChtbSk7CiAKLQlyZXQgPSBjb3B5X3JlbW90ZV92bV9zdHIodHNrLCAodW5zaWduZWQgbG9uZyl1bnNhZmVfcHRyX19pZ24sIGRzdCwgZHN0X19zeiwgMCk7Ci0JaWYgKHJldCAmbHQ7IDApIHsKLQkJaWYgKGZsYWdzICZhbXA7IEJQRl9GX1BBRF9aRVJPUykKLQkJCW1lbXNldChkc3QsIDAsIGRzdF9fc3opOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCWlmIChmbGFncyAmYW1wOyBCUEZfRl9QQURfWkVST1MpCi0JCW1lbXNldChkc3QgJiM0MzsgcmV0LCAwLCBkc3RfX3N6IC0gcmV0KTsKLQotCXJldHVybiByZXQgJiM0MzsgMTsKJiM0MzsJcmV0dXJuIHJldDsKIH0KIAogLyogS2VlcCB1bnNpZ25lZCBsb25nIGluIHByb3RvdHlwZSBzbyB0aGF0IGtmdW5jIGlzIHVzYWJsZSB3aGVuIGVtaXR0ZWQgdG8KQEAgLTQ5MjQsNiAmIzQzOzUwMDYsOCBAQCBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfYml0c19uZXcsIEtGX0lURVJfTkVXKQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX2JpdHNfbmV4dCwgS0ZfSVRFUl9ORVhUIHwgS0ZfUkVUX05VTEwpCiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfYml0c19kZXN0cm95LCBLRl9JVEVSX0RFU1RST1kpCiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2NvcHlfZnJvbV91c2VyX3N0ciwgS0ZfU0xFRVBBQkxFKQomIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfY29weV9mcm9tX3VzZXJfbW0sIEtGX1NMRUVQQUJMRSkKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0ciwgS0ZfU0xFRVBBQkxFKQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3N0ciwgS0ZfU0xFRVBBQkxFKQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9nZXRfa21lbV9jYWNoZSkKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfaXRlcl9rbWVtX2NhY2hlX25ldywgS0ZfSVRFUl9ORVcgfCBLRl9TTEVFUEFCTEUpCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKaW5kZXggOWU3OTc1MGUyNDgwOC4uNjc5OWQ5ZTA4MGZjNSAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwpAQCAtNjAwNCw2ICYjNDM7NjAwNCwxMCBAQCBCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTChzdHJ1Y3QgZGVudHJ5KSB7CiAJc3RydWN0IGlub2RlICpkX2lub2RlOwogfTsKIAomIzQzO0JURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMKHN0cnVjdCBsaW51eF9iaW5wcm0pIHsKJiM0MzsJc3RydWN0IG1tX3N0cnVjdCAqbW07CiYjNDM7fTsKJiM0MzsKIEJURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMKHN0cnVjdCBzb2NrZXQpIHsKIAlzdHJ1Y3Qgc29jayAqc2s7CiB9OwpAQCAtNjA1OCw2ICYjNDM7NjA2Miw3IEBAIHN0YXRpYyBib29sIHR5cGVfaXNfdHJ1c3RlZF9vcl9udWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiB7CiAJQlRGX1RZUEVfRU1JVChCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTChzdHJ1Y3Qgc29ja2V0KSk7CiAJQlRGX1RZUEVfRU1JVChCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTChzdHJ1Y3QgZGVudHJ5KSk7CiYjNDM7CUJURl9UWVBFX0VNSVQoQlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IGxpbnV4X2JpbnBybSkpOwogCUJURl9UWVBFX0VNSVQoQlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IHZtX2FyZWFfc3RydWN0KSk7CiAKIAlyZXR1cm4gYnRmX25lc3RlZF90eXBlX2lzX3RydXN0ZWQoJmFtcDtlbnYtJmd0O2xvZywgcmVnLCBmaWVsZF9uYW1lLCBidGZfaWQsCkBAIC02MTY4LDYgJiM0Mzs2MTczLDE1IEBAIHN0YXRpYyBpbnQgY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAlpZiAocmV0ICE9IFBUUl9UT19CVEZfSUQpIHsKIAkJLyoganVzdCBtYXJrOyAqLwogCiYjNDM7CX0gZWxzZSBpZiAoYnBmX2lzX3RydXN0ZWRfb3JfbnVsbF9idGZfcHRyKHJlZy0mZ3Q7dHlwZSkpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBBbiB1bmNoZWNrZWQgbG9hZCB0aHJvdWdoIGEgdHJ1c3RlZC1vci1OVUxMIHBvaW50ZXIgaXMKJiM0MzsJCSAqIGZhdWx0LXByb3RlY3RlZC4gQW55IHBvaW50ZXIgZGVyaXZlZCBmcm9tIHRoYXQgbG9hZCBtdXN0IGJlCiYjNDM7CQkgKiB1bnRydXN0ZWQsIGFzIGEgZmF1bHQgcHJvZHVjZXMgYSBOVUxMIHZhbHVlLgomIzQzOwkJICovCiYjNDM7CQljbGVhcl90cnVzdGVkX2ZsYWdzKCZhbXA7ZmxhZyk7CiYjNDM7CQlmbGFnIHw9IFBUUl9VTlRSVVNURUQ7CiYjNDM7CiAJfSBlbHNlIGlmICh0eXBlX2ZsYWcocmVnLSZndDt0eXBlKSAmYW1wOyBQVFJfVU5UUlVTVEVEKSB7CiAJCS8qIElmIHRoaXMgaXMgYW4gdW50cnVzdGVkIHBvaW50ZXIsIGFsbCBwb2ludGVycyBmb3JtZWQgYnkgd2Fsa2luZyBpdAogCQkgKiBhbHNvIGluaGVyaXQgdGhlIHVudHJ1c3RlZCBmbGFnLgpAQCAtNjY0NCw3ICYjNDM7NjY1OCw4IEBAIHN0YXRpYyBpbnQgY2hlY2tfbWVtX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgsIHN0cnVjdCBiCiAJCWlmICghZXJyICZhbXA7JmFtcDsgdCA9PSBCUEZfUkVBRCAmYW1wOyZhbXA7IHZhbHVlX3JlZ25vICZndDs9IDApCiAJCQltYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgdmFsdWVfcmVnbm8pOwogCX0gZWxzZSBpZiAoYmFzZV90eXBlKHJlZy0mZ3Q7dHlwZSkgPT0gUFRSX1RPX0JURl9JRCAmYW1wOyZhbXA7Ci0JCSAgICF0eXBlX21heV9iZV9udWxsKHJlZy0mZ3Q7dHlwZSkpIHsKJiM0MzsJCSAgICghdHlwZV9tYXlfYmVfbnVsbChyZWctJmd0O3R5cGUpIHx8CiYjNDM7CQkgICAgKHQgPT0gQlBGX1JFQUQgJmFtcDsmYW1wOyBicGZfaXNfdHJ1c3RlZF9vcl9udWxsX2J0Zl9wdHIocmVnLSZndDt0eXBlKSkpKSB7CiAJCWVyciA9IGNoZWNrX3B0cl90b19idGZfYWNjZXNzKGVudiwgcmVncywgcmVnLCBhcmdubywgb2ZmLCBzaXplLCB0LAogCQkJCQkgICAgICB2YWx1ZV9yZWdubyk7CiAJfSBlbHNlIGlmIChyZWctJmd0O3R5cGUgPT0gQ09OU1RfUFRSX1RPX01BUCkgewpkaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmgKaW5kZXggMzhiMTE2NTIxMmM5NC4uODI2NGEzNDZkMThhZiAxMDA2NDQKLS0tIGEvbW0vaW50ZXJuYWwuaAomIzQzOyYjNDM7JiM0MzsgYi9tbS9pbnRlcm5hbC5oCkBAIC0yNSw2ICYjNDM7MjUsMTEgQEAKIHN0cnVjdCBmb2xpb19iYXRjaDsKIHN0cnVjdCBoc3RhdGU7CiAKJiM0MzsjaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMCiYjNDM7aW50IF9fY29weV9yZW1vdGVfbW1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiYjNDM7CQkJIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncyk7CiYjNDM7I2VuZGlmCiYjNDM7CiBzdHJ1Y3QgaHVnZV9ib290bWVtX3BhZ2UgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAlzdHJ1Y3QgaHN0YXRlICpoc3RhdGU7CmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jCmluZGV4IDhiMGMyYzczNWQzZGUuLmZlMmY1ZTk4OGZiOTAgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS5jCkBAIC03MzMxLDggJiM0Mzs3MzMxLDggQEAgRVhQT1JUX1NZTUJPTF9HUEwoYWNjZXNzX3Byb2Nlc3Nfdm0pOwogICogQ29weSBhIHN0cmluZyBmcm9tIGFub3RoZXIgcHJvY2VzcyYjMzk7cyBhZGRyZXNzIHNwYWNlIGFzIGdpdmVuIGluIG1tLgogICogSWYgdGhlcmUgaXMgYW55IGVycm9yIHJldHVybiAtRUZBVUxULgogICovCi1zdGF0aWMgaW50IF9fY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkJdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKQomIzQzO2ludCBfX2NvcHlfcmVtb3RlX21tX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAomIzQzOwkJCSB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpCiB7CiAJdm9pZCAqb2xkX2J1ZiA9IGJ1ZjsKIAlpbnQgZXJyID0gMDsKQEAgLTc0MDcsNDMgJiM0Mzs3NDA3LDYgQEAgc3RhdGljIGludCBfX2NvcHlfcmVtb3RlX3ZtX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQlyZXR1cm4gZXJyOwogCXJldHVybiBidWYgLSBvbGRfYnVmOwogfQotCi0vKioKLSAqIGNvcHlfcmVtb3RlX3ZtX3N0ciAtIGNvcHkgYSBzdHJpbmcgZnJvbSBhbm90aGVyIHByb2Nlc3MmIzM5O3MgYWRkcmVzcyBzcGFjZS4KLSAqIEB0c2s6CXRoZSB0YXNrIG9mIHRoZSB0YXJnZXQgYWRkcmVzcyBzcGFjZQotICogQGFkZHI6CXN0YXJ0IGFkZHJlc3MgdG8gcmVhZCBmcm9tCi0gKiBAYnVmOglkZXN0aW5hdGlvbiBidWZmZXIKLSAqIEBsZW46CW51bWJlciBvZiBieXRlcyB0byBjb3B5Ci0gKiBAZ3VwX2ZsYWdzOglmbGFncyBtb2RpZnlpbmcgbG9va3VwIGJlaGF2aW91cgotICoKLSAqIFRoZSBjYWxsZXIgbXVzdCBob2xkIGEgcmVmZXJlbmNlIG9uIEBtbS4KLSAqCi0gKiBSZXR1cm46IG51bWJlciBvZiBieXRlcyBjb3BpZWQgZnJvbSBAYWRkciAoc291cmNlKSB0byBAYnVmIChkZXN0aW5hdGlvbik7Ci0gKiBub3QgaW5jbHVkaW5nIHRoZSB0cmFpbGluZyBOVUwuIEFsd2F5cyBndWFyYW50ZWVkIHRvIGxlYXZlIE5VTC10ZXJtaW5hdGVkCi0gKiBidWZmZXIuIE9uIGFueSBlcnJvciwgcmV0dXJuIC1FRkFVTFQuCi0gKi8KLWludCBjb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJICAgICAgIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncykKLXsKLQlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKLQlpbnQgcmV0OwotCi0JaWYgKHVubGlrZWx5KGxlbiA9PSAwKSkKLQkJcmV0dXJuIDA7Ci0KLQltbSA9IGdldF90YXNrX21tKHRzayk7Ci0JaWYgKCFtbSkgewotCQkqKGNoYXIgKilidWYgPSAmIzM5O1wwJiMzOTs7Ci0JCXJldHVybiAtRUZBVUxUOwotCX0KLQotCXJldCA9IF9fY29weV9yZW1vdGVfdm1fc3RyKG1tLCBhZGRyLCBidWYsIGxlbiwgZ3VwX2ZsYWdzKTsKLQotCW1tcHV0KG1tKTsKLQotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChjb3B5X3JlbW90ZV92bV9zdHIpOwogI2VuZGlmIC8qIENPTkZJR19CUEZfU1lTQ0FMTCAqLwogCiAvKgpkaWZmIC0tZ2l0IGEvbW0vbm9tbXUuYyBiL21tL25vbW11LmMKaW5kZXggNDk4ZTAxZWU0MGIwNS4uOTg1OTZlNjAzMTFmMyAxMDA2NDQKLS0tIGEvbW0vbm9tbXUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9ub21tdS5jCkBAIC0xNzQ2LDggJiM0MzsxNzQ2LDggQEAgRVhQT1JUX1NZTUJPTF9HUEwoYWNjZXNzX3Byb2Nlc3Nfdm0pOwogICogQ29weSBhIHN0cmluZyBmcm9tIGFub3RoZXIgcHJvY2VzcyYjMzk7cyBhZGRyZXNzIHNwYWNlIGFzIGdpdmVuIGluIG1tLgogICogSWYgdGhlcmUgaXMgYW55IGVycm9yIHJldHVybiAtRUZBVUxULgogICovCi1zdGF0aWMgaW50IF9fY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkJdm9pZCAqYnVmLCBpbnQgbGVuKQomIzQzO2ludCBfX2NvcHlfcmVtb3RlX21tX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAomIzQzOwkJCSB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpCiB7CiAJdW5zaWduZWQgbG9uZyBhZGRyX2VuZDsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKQEAgLTE3ODEsNDMgJiM0MzsxNzgxLDYgQEAgc3RhdGljIGludCBfX2NvcHlfcmVtb3RlX3ZtX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCW1tYXBfcmVhZF91bmxvY2sobW0pOwogCXJldHVybiByZXQ7CiB9Ci0KLS8qKgotICogY29weV9yZW1vdGVfdm1fc3RyIC0gY29weSBhIHN0cmluZyBmcm9tIGFub3RoZXIgcHJvY2VzcyYjMzk7cyBhZGRyZXNzIHNwYWNlLgotICogQHRzazoJdGhlIHRhc2sgb2YgdGhlIHRhcmdldCBhZGRyZXNzIHNwYWNlCi0gKiBAYWRkcjoJc3RhcnQgYWRkcmVzcyB0byByZWFkIGZyb20KLSAqIEBidWY6CWRlc3RpbmF0aW9uIGJ1ZmZlcgotICogQGxlbjoJbnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkKLSAqIEBndXBfZmxhZ3M6CWZsYWdzIG1vZGlmeWluZyBsb29rdXAgYmVoYXZpb3VyICh1bnVzZWQpCi0gKgotICogVGhlIGNhbGxlciBtdXN0IGhvbGQgYSByZWZlcmVuY2Ugb24gQG1tLgotICoKLSAqIFJldHVybjogbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCBmcm9tIEBhZGRyIChzb3VyY2UpIHRvIEBidWYgKGRlc3RpbmF0aW9uKTsKLSAqIG5vdCBpbmNsdWRpbmcgdGhlIHRyYWlsaW5nIE5VTC4gQWx3YXlzIGd1YXJhbnRlZWQgdG8gbGVhdmUgTlVMLXRlcm1pbmF0ZWQKLSAqIGJ1ZmZlci4gT24gYW55IGVycm9yLCByZXR1cm4gLUVGQVVMVC4KLSAqLwotaW50IGNvcHlfcmVtb3RlX3ZtX3N0cihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkgICAgICAgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKQotewotCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwotCWludCByZXQ7Ci0KLQlpZiAodW5saWtlbHkobGVuID09IDApKQotCQlyZXR1cm4gMDsKLQotCW1tID0gZ2V0X3Rhc2tfbW0odHNrKTsKLQlpZiAoIW1tKSB7Ci0JCSooY2hhciAqKWJ1ZiA9ICYjMzk7XDAmIzM5OzsKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCi0JcmV0ID0gX19jb3B5X3JlbW90ZV92bV9zdHIobW0sIGFkZHIsIGJ1ZiwgbGVuKTsKLQotCW1tcHV0KG1tKTsKLQotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChjb3B5X3JlbW90ZV92bV9zdHIpOwogI2VuZGlmIC8qIENPTkZJR19CUEZfU1lTQ0FMTCAqLwogCiAvKioKZGlmZiAtLWdpdCBhL21tL3V0aWwuYyBiL21tL3V0aWwuYwppbmRleCBiZjA1MTNkMWQzZDA4Li4yZWNhMjdiMDI3OTFmIDEwMDY0NAotLS0gYS9tbS91dGlsLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdXRpbC5jCkBAIC0xMDYxLDYgJiM0MzsxMDYxLDY4IEBAIGludCBnZXRfY21kbGluZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGNoYXIgKmJ1ZmZlciwgaW50IGJ1ZmxlbikKIAlyZXR1cm4gcmVzOwogfQogCiYjNDM7I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTAomIzQzOy8qKgomIzQzOyAqIGNvcHlfcmVtb3RlX21tX3N0ciAtIGNvcHkgYSBzdHJpbmcgZnJvbSBhIHJlbW90ZSBhZGRyZXNzIHNwYWNlLgomIzQzOyAqIEBtbTogICAgICAgICB0aGUgcmVtb3RlIGFkZHJlc3Mgc3BhY2UKJiM0MzsgKiBAYWRkcjogICAgICAgc3RhcnQgYWRkcmVzcyB0byByZWFkIGZyb20KJiM0MzsgKiBAYnVmOiAgICAgICAgZGVzdGluYXRpb24gYnVmZmVyCiYjNDM7ICogQGxlbjogICAgICAgIG51bWJlciBvZiBieXRlcyB0byBjb3B5CiYjNDM7ICogQGd1cF9mbGFnczogIGZsYWdzIG1vZGlmeWluZyBsb29rdXAgYmVoYXZpb3VyCiYjNDM7ICoKJiM0MzsgKiBUaGUgY2FsbGVyIG11c3QgaG9sZCBhIHJlZmVyZW5jZSBvbiBAbW0uCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IG51bWJlciBvZiBieXRlcyBjb3BpZWQgZnJvbSBAYWRkciAoc291cmNlKSB0byBAYnVmIChkZXN0aW5hdGlvbiksCiYjNDM7ICogbm90IGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMLiBJZiBAbGVuIGlzIHplcm8sIHJldHVybiAwIHdpdGhvdXQgYWNjZXNzaW5nCiYjNDM7ICogQGJ1Zi4gT3RoZXJ3aXNlLCBAYnVmIGlzIGFsd2F5cyBOVUwtdGVybWluYXRlZC4gT24gYW55IGVycm9yLCByZXR1cm4KJiM0MzsgKiAtRUZBVUxULgomIzQzOyAqLwomIzQzO2ludCBjb3B5X3JlbW90ZV9tbV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKJiM0MzsJCSAgICAgICB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpCiYjNDM7ewomIzQzOwlpZiAodW5saWtlbHkobGVuID09IDApKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJldHVybiBfX2NvcHlfcmVtb3RlX21tX3N0cihtbSwgYWRkciwgYnVmLCBsZW4sIGd1cF9mbGFncyk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGNvcHlfcmVtb3RlX3ZtX3N0ciAtIGNvcHkgYSBzdHJpbmcgZnJvbSBhbm90aGVyIHByb2Nlc3MmIzM5O3MgYWRkcmVzcyBzcGFjZS4KJiM0MzsgKiBAdHNrOgl0aGUgdGFzayBvZiB0aGUgdGFyZ2V0IGFkZHJlc3Mgc3BhY2UKJiM0MzsgKiBAYWRkcjoJc3RhcnQgYWRkcmVzcyB0byByZWFkIGZyb20KJiM0MzsgKiBAYnVmOglkZXN0aW5hdGlvbiBidWZmZXIKJiM0MzsgKiBAbGVuOgludW1iZXIgb2YgYnl0ZXMgdG8gY29weQomIzQzOyAqIEBndXBfZmxhZ3M6CWZsYWdzIG1vZGlmeWluZyBsb29rdXAgYmVoYXZpb3VyCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IG51bWJlciBvZiBieXRlcyBjb3BpZWQgZnJvbSBAYWRkciAoc291cmNlKSB0byBAYnVmIChkZXN0aW5hdGlvbiksCiYjNDM7ICogbm90IGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMLiBJZiBAbGVuIGlzIHplcm8sIHJldHVybiAwIHdpdGhvdXQgYWNjZXNzaW5nCiYjNDM7ICogQGJ1Zi4gT3RoZXJ3aXNlLCBAYnVmIGlzIGFsd2F5cyBOVUwtdGVybWluYXRlZC4gT24gYW55IGVycm9yLCByZXR1cm4KJiM0MzsgKiAtRUZBVUxULgomIzQzOyAqLwomIzQzO2ludCBjb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHVuc2lnbmVkIGxvbmcgYWRkciwKJiM0MzsJCSAgICAgICB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKHVubGlrZWx5KGxlbiA9PSAwKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwltbSA9IGdldF90YXNrX21tKHRzayk7CiYjNDM7CWlmICghbW0pIHsKJiM0MzsJCSooY2hhciAqKWJ1ZiA9ICYjMzk7XDAmIzM5OzsKJiM0MzsJCXJldHVybiAtRUZBVUxUOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IF9fY29weV9yZW1vdGVfbW1fc3RyKG1tLCBhZGRyLCBidWYsIGxlbiwgZ3VwX2ZsYWdzKTsKJiM0MzsKJiM0MzsJbW1wdXQobW0pOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChjb3B5X3JlbW90ZV92bV9zdHIpOwomIzQzOyNlbmRpZiAvKiBDT05GSUdfQlBGX1NZU0NBTEwgKi8KJiM0MzsKIGludCBfX3dlYWsgbWVtY21wX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlMSwgc3RydWN0IHBhZ2UgKnBhZ2UyKQogewogCWNoYXIgKmFkZHIxLCAqYWRkcjI7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfaXRlci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2l0ZXIuYwppbmRleCBjNjkwODBjYTE0ZjVhLi45OWExNmExYWRkNzBlIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfaXRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9pdGVyLmMKQEAgLTM5LDEwICYjNDM7MzksMTAgQEAgc3RhdGljIHZvaWQgdGVzdF9idGZfaWRfb3JfbnVsbCh2b2lkKQogCXN0cnVjdCBicGZfaXRlcl90ZXN0X2tlcm4zICpza2VsOwogCiAJc2tlbCA9IGJwZl9pdGVyX3Rlc3Rfa2VybjNfX29wZW5fYW5kX2xvYWQoKTsKLQlpZiAoIUFTU0VSVF9FUlJfUFRSKHNrZWwsICYjMzQ7YnBmX2l0ZXJfdGVzdF9rZXJuM19fb3Blbl9hbmRfbG9hZCYjMzQ7KSkgewotCQlicGZfaXRlcl90ZXN0X2tlcm4zX19kZXN0cm95KHNrZWwpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgJiMzNDticGZfaXRlcl90ZXN0X2tlcm4zX19vcGVuX2FuZF9sb2FkJiMzNDspKQogCQlyZXR1cm47Ci0JfQomIzQzOwomIzQzOwlicGZfaXRlcl90ZXN0X2tlcm4zX19kZXN0cm95KHNrZWwpOwogfQogCiBzdGF0aWMgdm9pZCBkb19kdW1teV9yZWFkX29wdHMoc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBzdHJ1Y3QgYnBmX2l0ZXJfYXR0YWNoX29wdHMgKm9wdHMpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jb3B5X2Zyb21fdXNlcl9icHJtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jb3B5X2Zyb21fdXNlcl9icHJtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uYjIzMjViMTkzNTc2MQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2NvcHlfZnJvbV91c2VyX2Jwcm0uYwpAQCAtMCwwICYjNDM7MSw3MiBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2Vycm5vLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy93YWl0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDt0ZXN0X3Byb2dzLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtjb3B5X2Zyb21fdXNlcl9icHJtLnNrZWwuaCYjMzQ7CiYjNDM7CiYjNDM7dm9pZCB0ZXN0X2NvcHlfZnJvbV91c2VyX2Jwcm0odm9pZCkKJiM0Mzt7CiYjNDM7CWNoYXIgYXJnMFtdID0gJiMzNDtmaXJzdCYjMzQ7OwomIzQzOwljaGFyIGFyZzFbXSA9ICYjMzQ7c2Vjb25kLWFyZ3VtZW50JiMzNDs7CiYjNDM7CWNoYXIgZW52MFtdID0gJiMzNDtTT01FX0VOVj1hJiMzNDs7CiYjNDM7CWNoYXIgZW52MVtdID0gJiMzNDtPVEhFUl9FTlY9c29tZXRoaW5nJiMzNDs7CiYjNDM7CXN0cnVjdCBjb3B5X2Zyb21fdXNlcl9icHJtICpza2VsOwomIzQzOwlwaWRfdCBjaGlsZDsKJiM0MzsJaW50IHN0YXR1czsKJiM0MzsKJiM0MzsJc2tlbCA9IGNvcHlfZnJvbV91c2VyX2Jwcm1fX29wZW5fYW5kX2xvYWQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7b3Blbl9hbmRfbG9hZCYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogT24gIUNPTkZJR19NTVUsIGV4ZWMgc3RyaW5ncyBhcmUgaGVsZCBpbiBicHJtLSZndDtwYWdlW10gcmF0aGVyIHRoYW4KJiM0MzsJICogYmVpbmcgbWFwcGVkIGluIGJwcm0tJmd0O21tLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFza2VsLSZndDtrY29uZmlnLSZndDtDT05GSUdfTU1VKSB7CiYjNDM7CQlwcmludGYoJiMzNDslczpTS0lQOiB0ZXN0IHJlcXVpcmVzIENPTkZJR19NTVVcbiYjMzQ7LCBfX2Z1bmNfXyk7CiYjNDM7CQl0ZXN0X19za2lwKCk7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhjb3B5X2Zyb21fdXNlcl9icHJtX19hdHRhY2goc2tlbCksICYjMzQ7YXR0YWNoJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWNoaWxkID0gZm9yaygpOwomIzQzOwlpZiAoIUFTU0VSVF9HRShjaGlsZCwgMCwgJiMzNDtmb3JrJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWlmICghY2hpbGQpIHsKJiM0MzsJCWNoYXIgKmNvbnN0IGFyZ3ZbXSA9IHsgYXJnMCwgYXJnMSwgTlVMTCB9OwomIzQzOwkJY2hhciAqY29uc3QgZW52cFtdID0geyBlbnYwLCBlbnYxLCBOVUxMIH07CiYjNDM7CiYjNDM7CQlza2VsLSZndDtic3MtJmd0O21vbml0b3JlZF9waWQgPSBnZXRwaWQoKTsKJiM0MzsJCWV4ZWN2ZSgmIzM0Oy9iaW4vdHJ1ZSYjMzQ7LCBhcmd2LCBlbnZwKTsKJiM0MzsJCV9leGl0KGVycm5vKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIUFTU0VSVF9FUSh3YWl0cGlkKGNoaWxkLCAmYW1wO3N0YXR1cywgMCksIGNoaWxkLCAmIzM0O3dhaXRwaWQmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJaWYgKEFTU0VSVF9UUlVFKFdJRkVYSVRFRChzdGF0dXMpLCAmIzM0O2NoaWxkX2V4aXRlZCYjMzQ7KSkKJiM0MzsJCUFTU0VSVF9FUShXRVhJVFNUQVRVUyhzdGF0dXMpLCBFUEVSTSwgJiMzNDtleGVjX2Vycm5vJiMzNDspOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDticHJtX2FyZ2MsIDIsICYjMzQ7YnBybV9hcmdjJiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDticHJtX2VudmMsIDIsICYjMzQ7YnBybV9lbnZjJiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtkYXRhX2xlbl9tYXRjaCwgMSwgJiMzNDtkYXRhX2xlbl9tYXRjaCYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7aW52YWxpZF9mbGFnc19yZXQsIC1FSU5WQUwsICYjMzQ7aW52YWxpZF9mbGFnc19yZXQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O2NvcHlfcmV0LCAwLCAmIzM0O2NvcHlfcmV0JiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtzdHJfYXJnMF9yZXQsIHNpemVvZihhcmcwKSwgJiMzNDtzdHJfYXJnMF9yZXQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O3N0cl9hcmcxX3JldCwgc2l6ZW9mKGFyZzEpLCAmIzM0O3N0cl9hcmcxX3JldCYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7c3RyX2VudjBfcmV0LCBzaXplb2YoZW52MCksICYjMzQ7c3RyX2VudjBfcmV0JiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtzdHJfZW52MV9yZXQsIHNpemVvZihlbnYxKSwgJiMzNDtzdHJfZW52MV9yZXQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O2RhdGFfbWF0Y2gsIDEsICYjMzQ7ZGF0YV9tYXRjaCYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7c3RyX2FyZ3NfbWF0Y2gsIDEsICYjMzQ7c3RyX2FyZ3NfbWF0Y2gmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O3N0cl9lbnZzX21hdGNoLCAxLCAmIzM0O3N0cl9lbnZzX21hdGNoJiMzNDspOwomIzQzOwomIzQzO291dDoKJiM0MzsJY29weV9mcm9tX3VzZXJfYnBybV9fZGVzdHJveShza2VsKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfbWF5YmVfbnVsbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX21heWJlX251bGwuYwppbmRleCAwMWRjMjYxM2M4YTUxLi40NWFmNmYwMGFkOTA4IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfbWF5YmVfbnVsbC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19tYXliZV9udWxsLmMKQEAgLTE5LDE1ICYjNDM7MTksMTYgQEAgc3RhdGljIHZvaWQgbWF5YmVfbnVsbCh2b2lkKQogCXN0cnVjdF9vcHNfbWF5YmVfbnVsbF9fZGVzdHJveShza2VsKTsKIH0KIAotLyogVGVzdCB0aGF0IHRoZSB2ZXJpZmllciByZWplY3RzIGEgcHJvZ3JhbSB0aGF0IGFjY2VzcyBhIG51bGxhYmxlIHBvaW50ZXIKLSAqIHdpdGhvdXQgYSBjaGVjayBiZWZvcmVoYW5kLgomIzQzOy8qCiYjNDM7ICogVGVzdCB0aGF0IHRoZSB2ZXJpZmllciBhY2NlcHRzIGEgZmF1bHQtcHJvdGVjdGVkIHJlYWQgdGhyb3VnaCBhIG51bGxhYmxlCiYjNDM7ICogdHJ1c3RlZCBwb2ludGVyIHdpdGhvdXQgYW4gZXhwbGljaXQgTlVMTCBjaGVjay4KICAqLwotc3RhdGljIHZvaWQgbWF5YmVfbnVsbF9mYWlsKHZvaWQpCiYjNDM7c3RhdGljIHZvaWQgbWF5YmVfbnVsbF9ub19jaGVjayh2b2lkKQogewogCXN0cnVjdCBzdHJ1Y3Rfb3BzX21heWJlX251bGxfZmFpbCAqc2tlbDsKIAogCXNrZWwgPSBzdHJ1Y3Rfb3BzX21heWJlX251bGxfZmFpbF9fb3Blbl9hbmRfbG9hZCgpOwotCWlmIChBU1NFUlRfRVJSX1BUUihza2VsLCAmIzM0O3N0cnVjdF9vcHNfbW9kdWxlX2ZhaWxfX29wZW5fYW5kX2xvYWQmIzM0OykpCiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O3N0cnVjdF9vcHNfbWF5YmVfbnVsbF9mYWlsX19vcGVuX2FuZF9sb2FkJiMzNDspKQogCQlyZXR1cm47CiAKIAlzdHJ1Y3Rfb3BzX21heWJlX251bGxfZmFpbF9fZGVzdHJveShza2VsKTsKQEAgLTQxLDYgJiM0Mzs0Miw2IEBAIHZvaWQgdGVzdF9zdHJ1Y3Rfb3BzX21heWJlX251bGwodm9pZCkKIAkgKi8KIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O21heWJlX251bGwmIzM0OykpCiAJCW1heWJlX251bGwoKTsKLQlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O21heWJlX251bGxfZmFpbCYjMzQ7KSkKLQkJbWF5YmVfbnVsbF9mYWlsKCk7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7bWF5YmVfbnVsbF9ub19jaGVjayYjMzQ7KSkKJiM0MzsJCW1heWJlX251bGxfbm9fY2hlY2soKTsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RwX2J0Zl9udWxsYWJsZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHBfYnRmX251bGxhYmxlLmMKaW5kZXggYWNjYzQyZTAxZjhhOC4uODI1ZmU3YTkyZDc0ZiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHBfYnRmX251bGxhYmxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHBfYnRmX251bGxhYmxlLmMKQEAgLTIsNiAmIzQzOzIsMzEgQEAKIAogI2luY2x1ZGUgJmx0O3Rlc3RfcHJvZ3MuaCZndDsKICNpbmNsdWRlICYjMzQ7dGVzdF90cF9idGZfbnVsbGFibGUuc2tlbC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3Rlc3RfdHBfYnRmX251bGxhYmxlX3J1bnRpbWUuc2tlbC5oJiMzNDsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X251bGxhYmxlX3J1bnRpbWUodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0ZXN0X3RwX2J0Zl9udWxsYWJsZV9ydW50aW1lICpza2VsOwomIzQzOwomIzQzOwlza2VsID0gdGVzdF90cF9idGZfbnVsbGFibGVfcnVudGltZV9fb3Blbl9hbmRfbG9hZCgpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgJiMzNDtvcGVuX2FuZF9sb2FkJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlza2VsLSZndDtic3MtJmd0O21vbml0b3JlZF90aWQgPSBzeXNfZ2V0dGlkKCk7CiYjNDM7CiYjNDM7CWlmICghQVNTRVJUX09LKHRlc3RfdHBfYnRmX251bGxhYmxlX3J1bnRpbWVfX2F0dGFjaChza2VsKSwgJiMzNDthdHRhY2gmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJaWYgKCFBU1NFUlRfT0sodHJpZ2dlcl9tb2R1bGVfdGVzdF9yZWFkKDIpLCAmIzM0O3RyaWdnZXImIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7Y2FsbHMsIDIsICYjMzQ7Y2FsbHMmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O25vbm51bGxfbGVuLCAyLCAmIzM0O25vbm51bGxfbGVuJiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtudWxsX2xlbiwgMCwgJiMzNDtudWxsX2xlbiYjMzQ7KTsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CXRlc3RfdHBfYnRmX251bGxhYmxlX3J1bnRpbWVfX2Rlc3Ryb3koc2tlbCk7CiYjNDM7fQogCiB2b2lkIHRlc3RfdHBfYnRmX251bGxhYmxlKHZvaWQpCiB7CkBAIC0xMSw0ICYjNDM7MzYsNyBAQCB2b2lkIHRlc3RfdHBfYnRmX251bGxhYmxlKHZvaWQpCiAJfQogCiAJUlVOX1RFU1RTKHRlc3RfdHBfYnRmX251bGxhYmxlKTsKJiM0MzsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtydW50aW1lJiMzNDspKQomIzQzOwkJdGVzdF9udWxsYWJsZV9ydW50aW1lKCk7CiB9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvY29weV9mcm9tX3VzZXJfYnBybS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2NvcHlfZnJvbV91c2VyX2Jwcm0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5iMzM0YTE1NzQxOWU1Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2NvcHlfZnJvbV91c2VyX2Jwcm0uYwpAQCAtMCwwICYjNDM7MSwxMjMgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7dm1saW51eC5oJiMzNDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfdHJhY2luZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtlcnJuby5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7YnBmX21pc2MuaCYjMzQ7CiYjNDM7CiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBjaGFyIGV4cGVjdGVkX2RhdGFbXSA9ICYjMzQ7Zmlyc3RcMHNlY29uZC1hcmd1bWVudFwwJiMzNDsKJiM0MzsJCQkJICAgICYjMzQ7U09NRV9FTlY9YVwwT1RIRVJfRU5WPXNvbWV0aGluZyYjMzQ7OwomIzQzO3N0YXRpYyBjb25zdCBjaGFyIGV4cGVjdGVkX2FyZzBbXSA9ICYjMzQ7Zmlyc3QmIzM0OzsKJiM0MztzdGF0aWMgY29uc3QgY2hhciBleHBlY3RlZF9hcmcxW10gPSAmIzM0O3NlY29uZC1hcmd1bWVudCYjMzQ7OwomIzQzO3N0YXRpYyBjb25zdCBjaGFyIGV4cGVjdGVkX2VudjBbXSA9ICYjMzQ7U09NRV9FTlY9YSYjMzQ7OwomIzQzO3N0YXRpYyBjb25zdCBjaGFyIGV4cGVjdGVkX2VudjFbXSA9ICYjMzQ7T1RIRVJfRU5WPXNvbWV0aGluZyYjMzQ7OwomIzQzOwomIzQzO2ludCBtb25pdG9yZWRfcGlkOwomIzQzO2ludCBicHJtX2FyZ2M7CiYjNDM7aW50IGJwcm1fZW52YzsKJiM0MztpbnQgZGF0YV9sZW5fbWF0Y2g7CiYjNDM7aW50IGludmFsaWRfZmxhZ3NfcmV0OwomIzQzO2ludCBjb3B5X3JldDsKJiM0MztpbnQgc3RyX2FyZzBfcmV0OwomIzQzO2ludCBzdHJfYXJnMV9yZXQ7CiYjNDM7aW50IHN0cl9lbnYwX3JldDsKJiM0MztpbnQgc3RyX2VudjFfcmV0OwomIzQzO2ludCBkYXRhX21hdGNoOwomIzQzO2ludCBzdHJfYXJnc19tYXRjaDsKJiM0MztpbnQgc3RyX2VudnNfbWF0Y2g7CiYjNDM7CiYjNDM7ZXh0ZXJuIGJvb2wgQ09ORklHX01NVSBfX2tjb25maWcgX193ZWFrOwomIzQzOwomIzQzO2V4dGVybiBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX21tKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osCiYjNDM7CQkJCSBjb25zdCB2b2lkICp1bnNhZmVfcHRyX19pZ24sCiYjNDM7CQkJCSBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdTY0IGZsYWdzKSBfX2tzeW07CiYjNDM7CiYjNDM7ZXh0ZXJuIGludCBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osCiYjNDM7CQkJCSAgICAgY29uc3Qgdm9pZCAqdW5zYWZlX3B0cl9faWduLAomIzQzOwkJCQkgICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1NjQgZmxhZ3MpIF9fa3N5bTsKJiM0MzsKJiM0MztTRUMoJiMzNDtsc20ucy9icHJtX2NoZWNrX3NlY3VyaXR5JiMzNDspCiYjNDM7aW50IEJQRl9QUk9HKGNoZWNrX2V4ZWNfYXJncywgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKJiM0Mzt7CiYjNDM7CXUzMiBwaWQgPSBicGZfZ2V0X2N1cnJlbnRfcGlkX3RnaWQoKSAmZ3Q7Jmd0OyAzMjsKJiM0MzsJY2hhciBkYXRhW3NpemVvZihleHBlY3RlZF9kYXRhKV0gPSB7fTsKJiM0MzsJc3RydWN0IG1tX3N0cnVjdCAqbW07CiYjNDM7CWNoYXIgYXJnMFszMl0gPSB7fTsKJiM0MzsJY2hhciBhcmcxWzMyXSA9IHt9OwomIzQzOwljaGFyIGVudjBbMzJdID0ge307CiYjNDM7CWNoYXIgZW52MVszMl0gPSB7fTsKJiM0MzsJdTY0IG9mZnNldCA9IDA7CiYjNDM7CXU2NCBkYXRhX2xlbjsKJiM0MzsKJiM0MzsJaWYgKCFDT05GSUdfTU1VKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmIChwaWQgIT0gbW9uaXRvcmVkX3BpZCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwltbSA9IGJwcm0tJmd0O21tOwomIzQzOwlpZiAoIW1tKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWJwcm1fYXJnYyA9IGJwcm0tJmd0O2FyZ2M7CiYjNDM7CWJwcm1fZW52YyA9IGJwcm0tJmd0O2VudmM7CiYjNDM7CiYjNDM7CS8qIHRoaXMgaXMgdGhlIHRvdGFsIHNpemUgb2YgYXJncyBhbmQgZW52cyBzdGFydGluZyBmcm9tIGJwcm0tJmd0O3AgKi8KJiM0MzsJZGF0YV9sZW4gPSBicHJtLSZndDtleGVjIC0gYnBybS0mZ3Q7cDsKJiM0MzsJZGF0YV9sZW5fbWF0Y2ggPSBkYXRhX2xlbiA9PSBzaXplb2YoZXhwZWN0ZWRfZGF0YSk7CiYjNDM7CiYjNDM7CWludmFsaWRfZmxhZ3NfcmV0ID0gYnBmX2NvcHlfZnJvbV91c2VyX21tKGRhdGEsCiYjNDM7CQkJCQkJICBzaXplb2YoZGF0YSksICh2b2lkICopYnBybS0mZ3Q7cCwgbW0sIH4wVUxMKTsKJiM0MzsKJiM0MzsJY29weV9yZXQgPSBicGZfY29weV9mcm9tX3VzZXJfbW0oZGF0YSwgc2l6ZW9mKGRhdGEpLCAodm9pZCAqKWJwcm0tJmd0O3AsCiYjNDM7CQkJCQkgbW0sIDApOwomIzQzOwlpZiAoY29weV9yZXQpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJZGF0YV9tYXRjaCA9CiYjNDM7CQkhX19idWlsdGluX21lbWNtcChkYXRhLCBleHBlY3RlZF9kYXRhLCBzaXplb2YoZXhwZWN0ZWRfZGF0YSkpOwomIzQzOwomIzQzOwkvKiBhcmcwIGlzIGF0IGJwcm0tJmd0O3AgKi8KJiM0MzsJc3RyX2FyZzBfcmV0ID0gYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cihhcmcwLCBzaXplb2YoYXJnMCksCiYjNDM7CQkJCQkJICh2b2lkICopKGJwcm0tJmd0O3AgJiM0Mzsgb2Zmc2V0KSwKJiM0MzsJCQkJCQkgbW0sIEJQRl9GX1BBRF9aRVJPUyk7CiYjNDM7CWlmIChzdHJfYXJnMF9yZXQgIT0gc2l6ZW9mKGV4cGVjdGVkX2FyZzApKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CW9mZnNldCAmIzQzOz0gc3RyX2FyZzBfcmV0OwomIzQzOwomIzQzOwkvKiBhcmcxIGlzIGF0IGJwcm0tJmd0O3AgJiM0Mzsgc2l6ZW9mKGFyZzApICovCiYjNDM7CXN0cl9hcmcxX3JldCA9IGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIoYXJnMSwgc2l6ZW9mKGFyZzEpLAomIzQzOwkJCQkJCSAodm9pZCAqKShicHJtLSZndDtwICYjNDM7IG9mZnNldCksCiYjNDM7CQkJCQkJIG1tLCBCUEZfRl9QQURfWkVST1MpOwomIzQzOwlpZiAoc3RyX2FyZzFfcmV0ICE9IHNpemVvZihleHBlY3RlZF9hcmcxKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwlvZmZzZXQgJiM0Mzs9IHN0cl9hcmcxX3JldDsKJiM0MzsKJiM0MzsJLyogZW52MCBpcyBhdCBicHJtLSZndDtwICYjNDM7IHNpemVvZihhcmcwKSAmIzQzOyBzaXplb2YoYXJnMSkgKi8KJiM0MzsJc3RyX2VudjBfcmV0ID0gYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cihlbnYwLCBzaXplb2YoZW52MCksCiYjNDM7CQkJCQkJICh2b2lkICopKGJwcm0tJmd0O3AgJiM0Mzsgb2Zmc2V0KSwKJiM0MzsJCQkJCQkgbW0sIEJQRl9GX1BBRF9aRVJPUyk7CiYjNDM7CWlmIChzdHJfZW52MF9yZXQgIT0gc2l6ZW9mKGV4cGVjdGVkX2VudjApKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CW9mZnNldCAmIzQzOz0gc3RyX2VudjBfcmV0OwomIzQzOwomIzQzOwkvKiBlbnYxIGlzIGF0IGJwcm0tJmd0O3AgJiM0Mzsgc2l6ZW9mKGFyZzApICYjNDM7IHNpemVvZihhcmcxKSAmIzQzOyBzaXplb2YoZW52MCkgKi8KJiM0MzsJc3RyX2VudjFfcmV0ID0gYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cihlbnYxLCBzaXplb2YoZW52MSksCiYjNDM7CQkJCQkJICh2b2lkICopKGJwcm0tJmd0O3AgJiM0Mzsgb2Zmc2V0KSwKJiM0MzsJCQkJCQkgbW0sIEJQRl9GX1BBRF9aRVJPUyk7CiYjNDM7CWlmIChzdHJfZW52MV9yZXQgIT0gc2l6ZW9mKGV4cGVjdGVkX2VudjEpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXN0cl9hcmdzX21hdGNoID0KJiM0MzsJCSFfX2J1aWx0aW5fbWVtY21wKGFyZzAsIGV4cGVjdGVkX2FyZzAsIHNpemVvZihleHBlY3RlZF9hcmcwKSkgJmFtcDsmYW1wOwomIzQzOwkJIV9fYnVpbHRpbl9tZW1jbXAoYXJnMSwgZXhwZWN0ZWRfYXJnMSwgc2l6ZW9mKGV4cGVjdGVkX2FyZzEpKTsKJiM0MzsJc3RyX2VudnNfbWF0Y2ggPQomIzQzOwkJIV9fYnVpbHRpbl9tZW1jbXAoZW52MCwgZXhwZWN0ZWRfZW52MCwgc2l6ZW9mKGV4cGVjdGVkX2VudjApKSAmYW1wOyZhbXA7CiYjNDM7CQkhX19idWlsdGluX21lbWNtcChlbnYxLCBleHBlY3RlZF9lbnYxLCBzaXplb2YoZXhwZWN0ZWRfZW52MSkpOwomIzQzOwomIzQzOwlyZXR1cm4gZGF0YV9tYXRjaCAmYW1wOyZhbXA7IHN0cl9hcmdzX21hdGNoICZhbXA7JmFtcDsgc3RyX2VudnNfbWF0Y2ggPyAtRVBFUk0gOiAwOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yYXdfdHBfbnVsbF9mYWlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmF3X3RwX251bGxfZmFpbC5jCmluZGV4IDcyNWQ3M2M5ZmZlMTMuLjE2MzEyNDc5M2QwYTYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yYXdfdHBfbnVsbF9mYWlsLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Jhd190cF9udWxsX2ZhaWwuYwpAQCAtMiwyMiAmIzQzOzIsMzQgQEAKIC8qIENvcHlyaWdodCAoYykgMjAyNCBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi8KIAogI2luY2x1ZGUgJmx0O3ZtbGludXguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YnBmL2JwZl90cmFjaW5nLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O2JwZl9taXNjLmgmIzM0OwogCiBjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CiAKLS8qIEVuc3VyZSBtb2R1bGUgcGFyYW1ldGVyIGhhcyBQVFJfTUFZQkVfTlVMTCAqLwomIzQzO2V4dGVybiBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmJwZl90YXNrX2FjcXVpcmUoc3RydWN0IHRhc2tfc3RydWN0ICpwKSBfX2tzeW07CiYjNDM7ZXh0ZXJuIHZvaWQgYnBmX3Rhc2tfcmVsZWFzZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIF9fa3N5bTsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIEVuc3VyZSB0aGUgbW9kdWxlIHRyYWNlcG9pbnQgYXJndW1lbnQgaXMgdHJ1c3RlZC1vci1OVUxMIHdoaWxlIGFsbG93aW5nCiYjNDM7ICogYSBmYXVsdC1wcm90ZWN0ZWQgcmVhZCB3aXRob3V0IGFuIGV4cGxpY2l0IE5VTEwgY2hlY2suCiYjNDM7ICovCiBTRUMoJiMzNDt0cF9idGYvYnBmX3Rlc3Rtb2RfdGVzdF9yYXdfdHBfbnVsbF90cCYjMzQ7KQotX19mYWlsdXJlIF9fbXNnKCYjMzQ7UjEgaW52YWxpZCBtZW0gYWNjZXNzICYjMzk7dHJ1c3RlZF9wdHJfb3JfbnVsbF8mIzM5OyYjMzQ7KQomIzQzO19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKQomIzQzO19fbXNnKCYjMzQ7UjE9dHJ1c3RlZF9wdHJfb3JfbnVsbF9za19idWZmJiMzNDspCiBpbnQgdGVzdF9yYXdfdHBfbnVsbF9icGZfdGVzdG1vZF90ZXN0X3Jhd190cF9udWxsX2FyZ18xKHZvaWQgKmN0eCkgewogICAgIGFzbSB2b2xhdGlsZSgmIzM0O3IxID0gKih1NjQgKikocjEgJiM0MzswKTsgcjEgPSAqKHU2NCAqKShyMSAmIzQzOzApOyYjMzQ7IDo6OiBfX2Nsb2JiZXJfYWxsKTsKICAgICByZXR1cm4gMDsKIH0KIAotLyogQ2hlY2sgTlVMTCBtYXJraW5nICovCiYjNDM7LyoKJiM0MzsgKiBFbnN1cmUgc2NoZWRfcGlfc2V0cHJpbyYjMzk7cyBzZWNvbmQgYXJndW1lbnQgaXMgdHJ1c3RlZC1vci1OVUxMIHdoaWxlIGFsbG93aW5nCiYjNDM7ICogYSBmYXVsdC1wcm90ZWN0ZWQgcmVhZCB3aXRob3V0IGFuIGV4cGxpY2l0IE5VTEwgY2hlY2suCiYjNDM7ICovCiBTRUMoJiMzNDt0cF9idGYvc2NoZWRfcGlfc2V0cHJpbyYjMzQ7KQotX19mYWlsdXJlIF9fbXNnKCYjMzQ7UjEgaW52YWxpZCBtZW0gYWNjZXNzICYjMzk7dHJ1c3RlZF9wdHJfb3JfbnVsbF8mIzM5OyYjMzQ7KQomIzQzO19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKQomIzQzO19fbXNnKCYjMzQ7UjE9dHJ1c3RlZF9wdHJfb3JfbnVsbF90YXNrX3N0cnVjdCYjMzQ7KQogaW50IHRlc3RfcmF3X3RwX251bGxfc2NoZWRfcGlfc2V0cHJpb19hcmdfMih2b2lkICpjdHgpIHsKICAgICBhc20gdm9sYXRpbGUoJiMzNDtyMSA9ICoodTY0ICopKHIxICYjNDM7OCk7IHIxID0gKih1NjQgKikocjEgJiM0MzswKTsmIzM0OyA6OjogX19jbG9iYmVyX2FsbCk7CiAgICAgcmV0dXJuIDA7CkBAIC02MCw3ICYjNDM7NzIsOCBAQCBpbnQgdGVzdF90cF9idGZfc2lnbmFsX2RlbGl2ZXJfaW5mb19ub19kZXJlZih2b2lkICpjdHgpCiB9CiAKIFNFQygmIzM0O3RwX2J0Zi9zY2hlZF9wcm9jZXNzX3dhaXQmIzM0OykKLV9fZmFpbHVyZSBfX21zZygmIzM0O1IxIGludmFsaWQgbWVtIGFjY2VzcyAmIzM5O3RydXN0ZWRfcHRyX29yX251bGxfJiMzOTsmIzM0OykKJiM0MztfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMikKJiM0MztfX21zZygmIzM0O1IxPXRydXN0ZWRfcHRyX29yX251bGxfcGlkJiMzNDspCiBpbnQgdGVzdF9yYXdfdHBfbnVsbF9zY2hlZF9wcm9jZXNzX3dhaXRfYXJnXzEodm9pZCAqY3R4KQogewogCWFzbSB2b2xhdGlsZSgmIzM0O3IxID0gKih1NjQgKikocjEgJiM0MzswKTsgcjEgPSAqKHUzMiAqKShyMSAmIzQzOzApOyYjMzQ7IDo6OiBfX2Nsb2JiZXJfYWxsKTsKQEAgLTc1LDMgJiM0Mzs4OCw1OCBAQCBpbnQgdGVzdF9yYXdfdHBfbnVsbF9zY2hlZF9wcm9jZXNzX3dhaXRfYXJnXzFfY2hlY2tlZCh2b2lkICpjdHgpCiAJCSAgICAgJiMzNDtyMSA9ICoodTMyICopKHIxICYjNDM7MCk7JiMzNDsgOjo6IF9fY2xvYmJlcl9hbGwpOwogCXJldHVybiAwOwogfQomIzQzOwomIzQzO1NFQygmIzM0O3RwX2J0Zi9zY2hlZF9waV9zZXRwcmlvJiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbG9nX2xldmVsKDIpCiYjNDM7X19tc2coJiMzNDtSMT11bnRydXN0ZWRfcHRyX3Rhc2tfc3RydWN0JiMzNDspCiYjNDM7X19tc2coJiMzNDtSMSBtdXN0IGJlIGEgcmN1IHBvaW50ZXImIzM0OykKJiM0MztpbnQgQlBGX1BST0codHJ1c3RlZF9vcl9udWxsX3dhbGtfaXNfdW50cnVzdGVkLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCiYjNDM7CSAgICAgc3RydWN0IHRhc2tfc3RydWN0ICpwaV90YXNrKQomIzQzO3sKJiM0MzsJc3RydWN0IHRhc2tfc3RydWN0ICpwYXJlbnQsICphY3F1aXJlZDsKJiM0MzsKJiM0MzsJcGFyZW50ID0gcGlfdGFzay0mZ3Q7cmVhbF9wYXJlbnQ7CiYjNDM7CWFjcXVpcmVkID0gYnBmX3Rhc2tfYWNxdWlyZShwYXJlbnQpOwomIzQzOwlpZiAoYWNxdWlyZWQpCiYjNDM7CQlicGZfdGFza19yZWxlYXNlKGFjcXVpcmVkKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3RwX2J0Zi9zY2hlZF9waV9zZXRwcmlvJiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7UjEgbXVzdCBiZSBhIHJjdSBwb2ludGVyJiMzNDspCiYjNDM7aW50IEJQRl9QUk9HKGRlcml2ZWRfcHRyX251bGxfY2hlY2tfZG9lc19ub3RfcmVzdG9yZV90cnVzdCwKJiM0MzsJICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCB0YXNrX3N0cnVjdCAqcGlfdGFzaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50LCAqYWNxdWlyZWQ7CiYjNDM7CiYjNDM7CXBhcmVudCA9IHBpX3Rhc2stJmd0O3JlYWxfcGFyZW50OwomIzQzOwlpZiAoIXBhcmVudCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlhY3F1aXJlZCA9IGJwZl90YXNrX2FjcXVpcmUocGFyZW50KTsKJiM0MzsJaWYgKGFjcXVpcmVkKQomIzQzOwkJYnBmX3Rhc2tfcmVsZWFzZShhY3F1aXJlZCk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIEluIGNvbnRyYXN0LCBjaGVja2luZyB0aGUgb3JpZ2luYWwgdHJ1c3RlZC1vci1OVUxMIHBvaW50ZXIgcmVtb3ZlcwomIzQzOyAqIFBUUl9NQVlCRV9OVUxMIHdoaWxlIHJldGFpbmluZyBQVFJfVFJVU1RFRC4KJiM0MzsgKi8KJiM0MztTRUMoJiMzNDt0cF9idGYvc2NoZWRfcGlfc2V0cHJpbyYjMzQ7KQomIzQzO19fc3VjY2VzcwomIzQzO2ludCBCUEZfUFJPRyhvcmlnaW5hbF9wdHJfbnVsbF9jaGVja19yZXRhaW5zX3RydXN0LAomIzQzOwkgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHRhc2tfc3RydWN0ICpwaV90YXNrKQomIzQzO3sKJiM0MzsJc3RydWN0IHRhc2tfc3RydWN0ICphY3F1aXJlZDsKJiM0MzsKJiM0MzsJaWYgKCFwaV90YXNrKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWFjcXVpcmVkID0gYnBmX3Rhc2tfYWNxdWlyZShwaV90YXNrKTsKJiM0MzsJaWYgKGFjcXVpcmVkKQomIzQzOwkJYnBmX3Rhc2tfcmVsZWFzZShhY3F1aXJlZCk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RwX2J0Zl9udWxsYWJsZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdHBfYnRmX251bGxhYmxlLmMKaW5kZXggY2YwNTQ3YTYxM2ZmYy4uYjc5MTQyMjRiYTE5NCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdHBfYnRmX251bGxhYmxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdHBfYnRmX251bGxhYmxlLmMKQEAgLTcsNyAmIzQzOzcsNyBAQAogI2luY2x1ZGUgJiMzNDticGZfbWlzYy5oJiMzNDsKIAogU0VDKCYjMzQ7dHBfYnRmL2JwZl90ZXN0bW9kX3Rlc3RfbnVsbGFibGVfYmFyZV90cCYjMzQ7KQotX19mYWlsdXJlIF9fbXNnKCYjMzQ7UjEgaW52YWxpZCBtZW0gYWNjZXNzICYjMzk7dHJ1c3RlZF9wdHJfb3JfbnVsbF8mIzM5OyYjMzQ7KQomIzQzO19fc3VjY2VzcwogaW50IEJQRl9QUk9HKGhhbmRsZV90cF9idGZfbnVsbGFibGVfYmFyZTEsIHN0cnVjdCBicGZfdGVzdG1vZF90ZXN0X3JlYWRfY3R4ICpudWxsYWJsZV9jdHgpCiB7CiAJcmV0dXJuIG51bGxhYmxlX2N0eC0mZ3Q7bGVuOwpAQCAtMjEsNCAmIzQzOzIxLDQ3IEBAIGludCBCUEZfUFJPRyhoYW5kbGVfdHBfYnRmX251bGxhYmxlX2JhcmUyLCBzdHJ1Y3QgYnBmX3Rlc3Rtb2RfdGVzdF9yZWFkX2N0eCAqbnVsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztTRUMoJiMzNDt0cF9idGYvYnBmX3Rlc3Rtb2RfdGVzdF9udWxsYWJsZV9iYXJlX3RwJiMzNDspCiYjNDM7X19zdWNjZXNzCiYjNDM7aW50IEJQRl9QUk9HKGhhbmRsZV90cF9idGZfbnVsbGFibGVfbWVtLCBzdHJ1Y3QgYnBmX3Rlc3Rtb2RfdGVzdF9yZWFkX2N0eCAqbnVsbGFibGVfY3R4KQomIzQzO3sKJiM0MzsJcmV0dXJuIG51bGxhYmxlX2N0eC0mZ3Q7YnVmWzBdOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDt0cF9idGYvYnBmX3Rlc3Rtb2RfdGVzdF9udWxsYWJsZV9iYXJlX3RwJiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7cG9pbnRlciBhcml0aG1ldGljIG9uIHRydXN0ZWRfcHRyX29yX251bGxfIHByb2hpYml0ZWQmIzM0OykKJiM0MztpbnQgQlBGX1BST0coaGFuZGxlX3RwX2J0Zl9udWxsYWJsZV9hcml0aCwgc3RydWN0IGJwZl90ZXN0bW9kX3Rlc3RfcmVhZF9jdHggKm51bGxhYmxlX2N0eCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSgmIzM0OyVbY3R4XSAmIzQzOz0gMSYjMzQ7IDogW2N0eF0gJiMzNDsmIzQzO3ImIzM0OyhudWxsYWJsZV9jdHgpKTsKJiM0MzsJcmV0dXJuIG51bGxhYmxlX2N0eC0mZ3Q7bGVuOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDt0cF9idGYvYnBmX3Rlc3Rtb2RfdGVzdF9udWxsYWJsZV9iYXJlX3RwJiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7aW52YWxpZCBtZW0gYWNjZXNzICYjMzk7dHJ1c3RlZF9wdHJfb3JfbnVsbF8mIzM5OyYjMzQ7KQomIzQzO2ludCBCUEZfUFJPRyhoYW5kbGVfdHBfYnRmX251bGxhYmxlX2F0b21pY19ybXcsCiYjNDM7CSAgICAgc3RydWN0IGJwZl90ZXN0bW9kX3Rlc3RfcmVhZF9jdHggKm51bGxhYmxlX2N0eCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDtyMSA9ICVbY3R4XTsmIzM0OwomIzQzOwkJICAgICAgJiMzNDt3MiA9IDE7JiMzNDsKJiM0MzsJCSAgICAgICYjMzQ7bG9jayAqKHUzMiAqKShyMSAmIzQzOyAlW2xlbl0pICYjNDM7PSB3MjsmIzM0OwomIzQzOwkJICAgICAgOgomIzQzOwkJICAgICAgOiBbY3R4XSAmIzM0O3ImIzM0OyhudWxsYWJsZV9jdHgpLAomIzQzOwkJCV9faW1tX2NvbnN0KGxlbiwKJiM0MzsJCQkJICAgIG9mZnNldG9mKHN0cnVjdCBicGZfdGVzdG1vZF90ZXN0X3JlYWRfY3R4LAomIzQzOwkJCQkJICAgICBsZW4pKQomIzQzOwkJICAgICAgOiAmIzM0O3IxJiMzNDssICYjMzQ7cjImIzM0OywgJiMzNDttZW1vcnkmIzM0Oyk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsjaWZkZWYgX19CUEZfRkVBVFVSRV9MT0FEX0FDUV9TVE9SRV9SRUwKJiM0MztTRUMoJiMzNDt0cF9idGYvYnBmX3Rlc3Rtb2RfdGVzdF9udWxsYWJsZV9iYXJlX3RwJiMzNDspCiYjNDM7X19mYWlsdXJlCiYjNDM7X19tc2coJiMzNDtCUEZfQVRPTUlDIGxvYWRzIGZyb20gUnt7WzAtOV0mIzQzO319IHRydXN0ZWRfcHRyX29yX251bGxfJiMzNDspCiYjNDM7aW50IEJQRl9QUk9HKGhhbmRsZV90cF9idGZfbnVsbGFibGVfbG9hZF9hY3F1aXJlLAomIzQzOwkgICAgIHN0cnVjdCBicGZfdGVzdG1vZF90ZXN0X3JlYWRfY3R4ICpudWxsYWJsZV9jdHgpCiYjNDM7ewomIzQzOwlyZXR1cm4gX19hdG9taWNfbG9hZF9uKCZhbXA7bnVsbGFibGVfY3R4LSZndDtsZW4sIF9fQVRPTUlDX0FDUVVJUkUpOwomIzQzO30KJiM0MzsjZW5kaWYKJiM0MzsKIGNoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RwX2J0Zl9udWxsYWJsZV9ydW50aW1lLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90cF9idGZfbnVsbGFibGVfcnVudGltZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjVjOWM3Zjk0MDQwZGMKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90cF9idGZfbnVsbGFibGVfcnVudGltZS5jCkBAIC0wLDAgJiM0MzsxLDM1IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O3ZtbGludXguaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX3RyYWNpbmcuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0Oy4uL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuaCYjMzQ7CiYjNDM7CiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwomIzQzOwomIzQzO2ludCBtb25pdG9yZWRfdGlkOwomIzQzO2ludCBjYWxsczsKJiM0MztfX3U2NCBub25udWxsX2xlbjsKJiM0MztfX3U2NCBudWxsX2xlbjsKJiM0MzsKJiM0MztTRUMoJiMzNDt0cF9idGYvYnBmX3Rlc3Rtb2RfdGVzdF9udWxsYWJsZV9iYXJlX3RwJiMzNDspCiYjNDM7aW50IEJQRl9QUk9HKGhhbmRsZV9udWxsYWJsZV9ydW50aW1lLAomIzQzOwkgICAgIHN0cnVjdCBicGZfdGVzdG1vZF90ZXN0X3JlYWRfY3R4ICpudWxsYWJsZV9jdHgpCiYjNDM7ewomIzQzOwlfX3UzMiB0aWQgPSBicGZfZ2V0X2N1cnJlbnRfcGlkX3RnaWQoKTsKJiM0MzsJX191NjQgbGVuOwomIzQzOwlpbnQgY2FsbDsKJiM0MzsKJiM0MzsJaWYgKHRpZCAhPSBtb25pdG9yZWRfdGlkKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWxlbiA9IG51bGxhYmxlX2N0eC0mZ3Q7bGVuOwomIzQzOwljYWxsID0gY2FsbHMmIzQzOyYjNDM7OwomIzQzOwomIzQzOwlpZiAoY2FsbCA9PSAwKQomIzQzOwkJbm9ubnVsbF9sZW4gPSBsZW47CiYjNDM7CWVsc2UgaWYgKGNhbGwgPT0gMSkKJiM0MzsJCW51bGxfbGVuID0gbGVuOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbHNtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbHNtLmMKaW5kZXggYzcyNGJmMzg5ZjVjNi4uZmFjMTMzZDkwZjVlNiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xzbS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sc20uYwpAQCAtMTYyLDEzICYjNDM7MTYyLDEzIEBAIF9fbmFrZWQgaW50IGRpc2FibGVkX2hvb2tfdGVzdDModm9pZCAqY3R4KQogCiBTRUMoJiMzNDtsc20vbW1hcF9maWxlJiMzNDspCiBfX2Rlc2NyaXB0aW9uKCYjMzQ7bm90IG51bGwgY2hlY2tpbmcgbnVsbGFibGUgcG9pbnRlciBpbiBicGZfbHNtX21tYXBfZmlsZSYjMzQ7KQotX19mYWlsdXJlIF9fbXNnKCYjMzQ7UjEgaW52YWxpZCBtZW0gYWNjZXNzICYjMzk7dHJ1c3RlZF9wdHJfb3JfbnVsbF8mIzM5OyYjMzQ7KQomIzQzO19fc3VjY2VzcwogaW50IEJQRl9QUk9HKG5vX251bGxfY2hlY2ssIHN0cnVjdCBmaWxlICpmaWxlKQogewotCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiYjNDM7CWlub190IGlubzsKIAotCWlub2RlID0gZmlsZS0mZ3Q7Zl9pbm9kZTsKLQlfX3NpbmsoaW5vZGUpOwomIzQzOwlpbm8gPSBmaWxlLSZndDtmX2lub2RlLSZndDtpX2lubzsKJiM0MzsJX19zaW5rKGlubyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE4OCw2ICYjNDM7MTg4LDE2IEBAIGludCBCUEZfUFJPRyhudWxsX2NoZWNrLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIAlyZXR1cm4gMDsKIH0KIAomIzQzO1NFQygmIzM0O2xzbS9tbWFwX2ZpbGUmIzM0OykKJiM0MztfX2Rlc2NyaXB0aW9uKCYjMzQ7c3RvcmUgdGhyb3VnaCB0cnVzdGVkLW9yLW51bGwgZmlsZSBpcyByZWplY3RlZCYjMzQ7KQomIzQzO19fZmFpbHVyZQomIzQzO19fbXNnKCYjMzQ7Unt7WzAtOV0mIzQzO319IGludmFsaWQgbWVtIGFjY2VzcyAmIzM5O3RydXN0ZWRfcHRyX29yX251bGxfJiMzOTsmIzM0OykKJiM0MztpbnQgQlBGX1BST0coc3RvcmVfdGhyb3VnaF90cnVzdGVkX29yX251bGxfZmlsZSwgc3RydWN0IGZpbGUgKmZpbGUpCiYjNDM7ewomIzQzOwlmaWxlLSZndDtmX2ZsYWdzID0gMDsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogU0VDKCYjMzQ7bHNtX2Nncm91cC9maWxlX29wZW4mIzM0OykKIF9fZGVzY3JpcHRpb24oJiMzNDtzbGVlcGFibGUgbHNtX2Nncm91cCBwcm9ncmFtIGlzIHJlamVjdGVkJiMzNDspCiBfX2ZhaWx1cmUgX19tc2coJiMzNDtQcm9ncmFtIG9mIHRoaXMgdHlwZSBjYW5ub3QgYmUgc2xlZXBhYmxlJiMzNDspCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdmZzX2FjY2VwdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3Zmc19hY2NlcHQuYwppbmRleCA1NTM5OGMwNDI5MGE4Li4xN2MxNTQyY2M3ZTE3IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdmZzX2FjY2VwdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl92ZnNfYWNjZXB0LmMKQEAgLTEwMCw0ICYjNDM7MTAwLDE4IEBAIGludCBCUEZfUFJPRyhpbm9kZV9yZW5hbWUsIHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKIAlyZXR1cm4gMDsKIH0KIAomIzQzO1NFQygmIzM0O2xzbS5zL2lub2RlX3JlbmFtZSYjMzQ7KQomIzQzO19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKQomIzQzO19fbXNnKCYjMzQ7Unt7WzAtOV0mIzQzO319PXRydXN0ZWRfcHRyX29yX251bGxfaW5vZGUmIzM0OykKJiM0MztpbnQgQlBGX1BST0coaW5vZGVfcmVuYW1lX25vX251bGxfY2hlY2ssIHN0cnVjdCBpbm9kZSAqb2xkX2RpciwKJiM0MzsJICAgICBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKm5ld19kaXIsCiYjNDM7CSAgICAgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSwgdW5zaWduZWQgaW50IGZsYWdzKQomIzQzO3sKJiM0MzsJaW5vX3QgaW5vID0gbmV3X2RlbnRyeS0mZ3Q7ZF9pbm9kZS0mZ3Q7aV9pbm87CiYjNDM7CiYjNDM7CWlmIChpbm8gPT0gMCkKJiM0MzsJCXJldHVybiAtRUFDQ0VTOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdmZzX3JlamVjdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3Zmc19yZWplY3QuYwppbmRleCA4ZjBjNDU0MjFmODkzLi4yYTA4MTMyNTgxODNlIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdmZzX3JlamVjdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl92ZnNfcmVqZWN0LmMKQEAgLTE1OSwxOCAmIzQzOzE1OSw0IEBAIGludCBCUEZfUFJPRyhwYXRoX2RfcGF0aF9rZnVuY19ub25fbHNtLCBzdHJ1Y3QgcGF0aCAqcGF0aCwgc3RydWN0IGZpbGUgKmYpCiAJcmV0dXJuIDA7CiB9CiAKLVNFQygmIzM0O2xzbS5zL2lub2RlX3JlbmFtZSYjMzQ7KQotX19mYWlsdXJlIF9fbXNnKCYjMzQ7aW52YWxpZCBtZW0gYWNjZXNzICYjMzk7dHJ1c3RlZF9wdHJfb3JfbnVsbF8mIzM5OyYjMzQ7KQotaW50IEJQRl9QUk9HKGlub2RlX3JlbmFtZSwgc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LAotCSAgICAgc3RydWN0IGlub2RlICpuZXdfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5LAotCSAgICAgdW5zaWduZWQgaW50IGZsYWdzKQotewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBuZXdfZGVudHJ5LSZndDtkX2lub2RlOwotCWlub190IGlubzsKLQotCWlubyA9IGlub2RlLSZndDtpX2lubzsKLQlpZiAoaW5vID09IDApCi0JCXJldHVybiAtRUFDQ0VTOwotCXJldHVybiAwOwotfQogY2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMKaW5kZXggZjc5OGJiYmI0ZDEzYy4uMmJhNmE4M2QyNDNmNSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jCkBAIC03MDIsNiAmIzQzOzcwMiw3IEBAIGJwZl90ZXN0bW9kX3Rlc3RfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGtvYmplY3QgKmtvYmosCiAJaWYgKGJwZl90ZXN0bW9kX2xvb3BfdGVzdCgxMDEpICZndDsgMTAwKQogCQl0cmFjZV9icGZfdGVzdG1vZF90ZXN0X3JlYWQoY3VycmVudCwgJmFtcDtjdHgpOwogCiYjNDM7CXRyYWNlX2JwZl90ZXN0bW9kX3Rlc3RfbnVsbGFibGVfYmFyZV90cCgmYW1wO2N0eCk7CiAJdHJhY2VfYnBmX3Rlc3Rtb2RfdGVzdF9udWxsYWJsZV9iYXJlX3RwKE5VTEwpOwogCiAJLyogTWFnaWMgbnVtYmVyIHRvIGVuYWJsZSB3cml0YWJsZSB0cCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2NoZWRfZXh0L21heWJlX251bGxfZmFpbF9kc3AuYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zY2hlZF9leHQvbWF5YmVfbnVsbF9mYWlsX2RzcC5icGYuYwppbmRleCBlYzcyNGQ3YjMzZDE4Li5lY2FhMzYzNTVjYWVjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zY2hlZF9leHQvbWF5YmVfbnVsbF9mYWlsX2RzcC5icGYuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zY2hlZF9leHQvbWF5YmVfbnVsbF9mYWlsX2RzcC5icGYuYwpAQCAtNywxNCAmIzQzOzcsMTMgQEAKIAogY2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwogCi11NjQgdnRpbWVfdGVzdDsKLQogdm9pZCBCUEZfU1RSVUNUX09QUyhtYXliZV9udWxsX3J1bm5pbmcsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHt9CiAKIHZvaWQgQlBGX1NUUlVDVF9PUFMobWF5YmVfbnVsbF9mYWlsX2Rpc3BhdGNoLCBzMzIgY3B1LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiB7Ci0JdnRpbWVfdGVzdCA9IHAtJmd0O3NjeC5kc3FfdnRpbWU7CiYjNDM7CS8qIFBvaW50ZXIgYXJpdGhtZXRpYyBvbiBhIHRydXN0ZWQtb3ItTlVMTCBwb2ludGVyIG11c3QgYmUgcmVqZWN0ZWQuICovCiYjNDM7CWFzbSB2b2xhdGlsZSgmIzM0OyVbcF0gJiM0Mzs9IDAmIzM0OyA6IFtwXSAmIzM0OyYjNDM7ciYjMzQ7KHApKTsKIH0KIAogU0VDKCYjMzQ7LnN0cnVjdF9vcHMubGluayYjMzQ7KQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyMDYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMjgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggU2VyaWVzIGZvciBLTVNBTiBOZWVkcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIHNlcmllcyBuZWNlc3NpdGF0ZXMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLCBiZXlvbmQgdGhlIHN0YW5kYXJkIEtBU0FOIGNvdmVyYWdlIHdlIGFscmVhZHkgaGF2ZS4gV2UgbmVlZCB0byBiZSBvbiB0aGUgbG9va291dCBmb3IgY29kZSBjaGFuZ2VzIHRoYXQgKmludHJvZHVjZSogb3IgKmV4cG9zZSogdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHRoZSBraW5kIG9mIGlzc3VlcyBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gY2F0Y2guCgpGaXJzdCwgSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgY2hhbmdlcy4KCjEuICBgZnMvZXhlYy5jYDogVGhpcyBjaGFuZ2UsIHNldHRpbmcgYGJwcm0tJmd0O21tID0gTlVMTGAsIGlzIGEgbWVtb3J5IG1hbmFnZW1lbnQgbGlmZWN5Y2xlIGNoYW5nZS4gSXQmIzM5O3MgYWJvdXQgcHJldmVudGluZyBVQUYgYW5kIGRhbmdsaW5nIHBvaW50ZXIgcHJvYmxlbXMuIFRoaXMgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgcHJlY2F1dGlvbjsgaG93ZXZlciwgaXQmIzM5O3MgYWJvdXQgbWFraW5nIGNvZGUgc2FmZSBub3QgYWJvdXQgaW50cm9kdWNpbmcgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBJIGRvbiYjMzk7dCBzZWUgYW55dGhpbmcgaGVyZSB0aGF0IHNjcmVhbXMgZm9yIEtNU0FOIGF0dGVudGlvbi4KCjIuICBgaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaGAsIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgOiBUaGlzIGlzIHRoZSBpbnRlcmVzdGluZyBzZWN0aW9uLiBXZSYjMzk7cmUgZ2V0dGluZyBhIGJ1bmNoIG9mIHVwZGF0ZXMgcmVsYXRlZCB0byBCUEYgYW5kIGBCVEZgLiBXZSYjMzk7cmUgZW5hYmxpbmcgc2FmZSBkZXJlZmVyZW5jaW5nIGFuZCBhbGxvd2luZyBCUEYgdG8gc2FmZWx5IGFjY2VzcyBgYnBybS0mZ3Q7bW1gLiBUaGUgYWRkaXRpb24gb2YgYGJwZl9pc190cnVzdGVkX29yX251bGxfYnRmX3B0cmAgYW5kIGFsbG93aW5nIGZhdWx0LXByb3RlY3RlZCBkZXJlZmVyZW5jZXMgc291bmRzIGxpa2UgaXQgY291bGQgcG90ZW50aWFsbHkgaW50cm9kdWNlIHN1YnRsZSBpc3N1ZXMuIFRoZSBgUFRSX1VOVFJVU1RFRGAgbWFya2luZyBpcyBpbnRlcmVzdGluZy4gV2hpbGUgdGhpcyBzZWN0aW9uIGRlYWxzIHdpdGggcG90ZW50aWFsbHkgYWNjZXNzaW5nIG1lbW9yeSwgaXQmIzM5O3MgcHJpbWFyaWx5IGFib3V0ICpjb250cm9sbGluZyogYWNjZXNzLiBUaGUgZ29hbCBhcHBlYXJzIHRvIGJlICpwcmV2ZW50aW9uKiBvZiBiYWQgdGhpbmdzIGhhcHBlbmluZywgbm90IHRoZSAqaW50cm9kdWN0aW9uKiBvZiB1bmluaXRpYWxpemVkIHJlYWQgcmlza3MuIFRoZSBjaGFuZ2VzIGFyZSBkZXNpZ25lZCB0byBwcm90ZWN0IGFnYWluc3QgZmF1bHRpbmcgYW5kIGRlcmVmZXJlbmNpbmcgbnVsbCBwb2ludGVycy4gV2UmIzM5O3JlIG1ha2luZyB0aGluZ3MgKnNhZmVyKiwgbm90IG5lY2Vzc2FyaWx5IHJpc2tpZXIgZnJvbSBhIEtNU0FOIHBlcnNwZWN0aXZlLiBXZSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGlzIGJlY2F1c2UgdGhlIGBQVFJfVU5UUlVTVEVEYCBtaWdodCBoYXZlIHVuaW5pdGlhbGl6ZWQgcmVhZC4KCjMuICBga2VybmVsL2JwZi9oZWxwZXJzLmNgOiBOb3cgd2UmIzM5O3JlIGdldHRpbmcgdG8gdGhlIGhlYXJ0IG9mIG1lbW9yeSBjb3B5aW5nOiBgYnBmX2NvcHlfZnJvbV91c2VyX21tYCBhbmQgaXRzIHN0cmluZyB2YXJpYW50LCBgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cmAuIEl0IHJlZmFjdG9ycyBgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tgIHRvIHVzZSB0aGUgbmV3IGhlbHBlciwgYW5kIHJlZ2lzdGVycyBrZnVuY3MuIFRoaXMgaXMgYSBwb3RlbnRpYWwgS01TQU4gdGFyZ2V0LiBXZSBoYXZlIGBkc3RgIG1lbW9yeSB0aGF0IHdlJiMzOTtyZSBjb3B5aW5nICppbnRvKi4gVGhlIGxvZ2ljIGluY2x1ZGVzIGNoZWNrcyBmb3IgYSBudWxsIGBtbWAsIGFuZCBzZXRzIGRzdCB0byB6ZXJvLiBTbyB0aGVyZSBpcyBhIHBvc3NpYmlsaXR5IHRoYXQgZHN0IGlzIHVuaW5pdGlhbGl6ZWQuIFRoZSBjaGVja3MgZm9yIGFuIGAhbW1gIGxvb2sgcHJvbWlzaW5nLCBidXQgbmVlZCBjb25maXJtYXRpb24uIElmIHdlIGRvbiYjMzk7dCBoYXZlIGEgdmFsaWQgYG1tYCBpdCBzZXRzIGRzdCB0byB6ZXJvLiBUaGlzIGxvb2tzIGxpa2UgYSByZWFzb25hYmxlIHByZWNhdXRpb24sIGhvd2V2ZXIsIGlmIGBtbWAgKmlzKiB2YWxpZCwgaXQmIzM5O3Mgd29ydGggY2hlY2tpbmcgYGFjY2Vzc19yZW1vdGVfdm1gLCB3aGljaCBpcyBhbiBpc3N1ZS4gV2l0aCB0aGUgYGNvcHlfcmVtb3RlX21tX3N0cmAgZnVuY3Rpb24sIHRoZXJlIGFyZSBjYXNlcyB3aGVyZSB0aGUgZGVzdGluYXRpb24gKm1pZ2h0KiBiZSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQuIEl0IHNlZW1zIGxpa2UgaXQmIzM5O3MgdGFraW5nIGV4dHJhIHN0ZXBzIHRvIGVuc3VyZSB0aGlzIGlzIGhhbmRsZWQuIFdpdGggYEJQRl9GX1BBRF9aRVJPU2Agd2UgY2FuIGJlIHNldHRpbmcgdGhlIG1lbW9yeSB0byB6ZXJvLiBOZWVkIHRvIGV4YW1pbmUgYGFjY2Vzc19yZW1vdGVfdm1gIGFuZCBgY29weV9yZW1vdGVfbW1fc3RyYCB0byB2ZXJpZnkgdGhlc2UgYXNzdW1wdGlvbnMuCgo0LiAgYG1tL21lbW9yeS5jYCwgYG1tL25vbW11LmNgLCBgbW0vdXRpbC5jYCwgYG1tL2ludGVybmFsLmhgLCBgaW5jbHVkZS9saW51eC9tbS5oYDogVGhpcyBpcyBtb3N0bHkgcmVmYWN0b3JpbmcgdGhlIHJlbW90ZSBtZW1vcnkgY29weSBmdW5jdGlvbnMsIHJlbmFtaW5nIGFuZCBhZGRpbmcgd3JhcHBlcnMuIFRoZSBrZXkgZnVuY3Rpb24gdG8gbG9vayBhdCBoZXJlIGlzIGBfX2NvcHlfcmVtb3RlX21tX3N0cmAgYW5kIGBjb3B5X3JlbW90ZV9tbV9zdHJgLiBUaGlzIGlzIHdoZXJlIHRoZSBhY3R1YWwgbWVtb3J5IGNvcHlpbmcgaGFwcGVucy4gV2UgbmVlZCB0byBleGFtaW5lIHRoaXMgY29kZSB0byBzZWUgaWYgdGhlcmUgaXMgYW55IHdpbmRvdyBpbiB3aGljaCB0aGUgZGVzdGluYXRpb24gYnVmZmVyIGlzbiYjMzk7dCBwcm9wZXJseSBpbml0aWFsaXplZC4gSWYgdGhlcmUmIzM5O3MgYSBwYXJ0aWFsIHJlYWQgb3IgTlVMLXRlcm1pbmF0aW9uIGlzc3VlIHdlIG5lZWQgdG8gYmUgdmVyeSBjb25jZXJuZWQuCgo1LiAgU2VsZnRlc3RzOiBHcmVhdCwgdGhleSBhZGRlZCB0ZXN0cyEgSG93ZXZlciwgdGVzdGluZyBpcyBub3QgZW5vdWdoLgoKSW4gc3VtbWFyeSwgSSBzZWUgdGhlIGdyZWF0ZXN0IHBvdGVudGlhbCBmb3IgS01TQU4gZXhwb3N1cmUgaW4gdGhlIGBicGZfY29weV9mcm9tX3VzZXJfbW1gIGZ1bmN0aW9ucyBhbmQgdGhlaXIgc3RyaW5nIHZhcmlhbnQuIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBfX2NvcHlfcmVtb3RlX21tX3N0cmAsIGBjb3B5X3JlbW90ZV9tbV9zdHJgLCBhbmQgdGhlIGNhbGxzIHdpdGhpbiB0aGUgbmV3IGhlbHBlciBmdW5jdGlvbnMgdG8gbWFrZSBhIGRlZmluaXRpdmUgZGV0ZXJtaW5hdGlvbi4gSSBhbHNvIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYWxsIG1lbW9yeSBpcyBpbml0aWFsaXplZCBhcHByb3ByaWF0ZWx5IGluIGBCUEZfRl9QQURfWkVST1NgLiBXaGlsZSB0aGUgaW50ZW50aW9uIHNlZW1zIHRvIGJlIHNhZmUsIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgY29kZSBpcyAqcHJvdmFibHkqIHNhZmUgZnJvbSB1bmluaXRpYWxpemVkIHJlYWQgcmlza3MuIFRoZSBCUEYgY2hhbmdlcyByZXF1aXJlIHRob3JvdWdoIGluc3BlY3Rpb24gcmVnYXJkaW5nIHRoZSB1c2Ugb2YgYFBUUl9VTlRSVVNURURgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2NvcHlfcmVtb3RlX21tX3N0ciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9pbnRlcm5hbC5oPTI2PXN0cnVjdCBoc3RhdGU7XG4tLVxubW0vaW50ZXJuYWwuaC0yOC0jaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5tbS9pbnRlcm5hbC5oOjI5OmludCBfX2NvcHlfcmVtb3RlX21tX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxubW0vaW50ZXJuYWwuaC0zMC1cdFx0XHQgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKTtcbi0tXG5tbS9tZW1vcnkuYz03MzI3PUVYUE9SVF9TWU1CT0xfR1BMKGFjY2Vzc19wcm9jZXNzX3ZtKTtcbi0tXG5tbS9tZW1vcnkuYy03MzMzLSAqL1xubW0vbWVtb3J5LmM6NzMzNDppbnQgX19jb3B5X3JlbW90ZV9tbV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbm1tL21lbW9yeS5jLTczMzUtXHRcdFx0IHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncylcbi0tXG5tbS9ub21tdS5jPTE3NDI9RVhQT1JUX1NZTUJPTF9HUEwoYWNjZXNzX3Byb2Nlc3Nfdm0pO1xuLS1cbm1tL25vbW11LmMtMTc0OC0gKi9cbm1tL25vbW11LmM6MTc0OTppbnQgX19jb3B5X3JlbW90ZV9tbV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbm1tL25vbW11LmMtMTc1MC1cdFx0XHQgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKVxuLS1cbm1tL3V0aWwuYz0xMDgwPWludCBjb3B5X3JlbW90ZV9tbV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS91dGlsLmMtMTA4NS1cbm1tL3V0aWwuYzoxMDg2Olx0cmV0dXJuIF9fY29weV9yZW1vdGVfbW1fc3RyKG1tLCBhZGRyLCBidWYsIGxlbiwgZ3VwX2ZsYWdzKTtcbm1tL3V0aWwuYy0xMDg3LX1cbi0tXG5tbS91dGlsLmM9MTEwMj1pbnQgY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vdXRpbC5jLTExMTYtXG5tbS91dGlsLmM6MTExNzpcdHJldCA9IF9fY29weV9yZW1vdGVfbW1fc3RyKG1tLCBhZGRyLCBidWYsIGxlbiwgZ3VwX2ZsYWdzKTtcbm1tL3V0aWwuYy0xMTE4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDAwNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgX19jb3B5X3JlbW90ZV9tbV9zdHJgKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYF9fY29weV9yZW1vdGVfbW1fc3RyYCBpcyBkb2luZy4gR2l2ZW4gbXkgZGVlcCBrbm93bGVkZ2Ugb2YgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIHRoZSBrZXJuZWwsIEkgaW1tZWRpYXRlbHkgdGhpbmssICYjMzQ7TGV0JiMzOTtzIGNyYWNrIG9wZW4gYG1tL21lbW9yeS5jYC4mIzM0OyBJdCYjMzk7cyBsaWtlbHkgaW4gdGhhdCBmaWxlLCBhbmQgYSBnb29kIGJldCBpcyBhcm91bmQgbGluZSA3MzM0LiBUaGF0JiMzOTtzIGEgcmVhc29uYWJsZSBzdGFydGluZyBwb2ludCwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSB3aXRoIHRoZXNlIGtpbmRzIG9mIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UuIEkgZmlndXJlIEkmIzM5O2xsIHN0YXJ0IHRoZXJlIGFuZCBzZWUgd2hhdCBqdW1wcyBvdXQuIEkmIzM5O20gbm90IGV4cGVjdGluZyBhIHF1aWNrIGFuc3dlciAtIHRoZXNlIHRoaW5ncyBhbHdheXMgdGFrZSBhIGJpdCBvZiBkaWdnaW5nIHRvIGZ1bGx5IGdyYXNwIHRoZSBudWFuY2VzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvZGUgYWN0dWFsbHkgKnNheXMqLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbW9yeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzMzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs3MzMwOlx0LypcbjczMzE6XHQgKiBDb3B5IGEgc3RyaW5nIGZyb20gYW5vdGhlciBwcm9jZXNzJiMzOTtzIGFkZHJlc3Mgc3BhY2UgYXMgZ2l2ZW4gaW4gbW0uXG43MzMyOlx0ICogSWYgdGhlcmUgaXMgYW55IGVycm9yIHJldHVybiAtRUZBVUxULlxuNzMzMzpcdCAqL1xuNzMzNDpcdGludCBfX2NvcHlfcmVtb3RlX21tX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuNzMzNTpcdFx0XHRcdCB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXG43MzM2Olx0e1xuNzMzNzpcdFx0dm9pZCAqb2xkX2J1ZiA9IGJ1ZjtcbjczMzg6XHRcdGludCBlcnIgPSAwO1xuNzMzOTpcdFxuNzM0MDpcdFx0KihjaGFyICopYnVmID0gJiMzOTtcXDAmIzM5OztcbjczNDE6XHRcbjczNDI6XHRcdGlmIChtbWFwX3JlYWRfbG9ja19raWxsYWJsZShtbSkpXG43MzQzOlx0XHRcdHJldHVybiAtRUZBVUxUO1xuNzM0NDpcdFxuNzM0NTpcdFx0YWRkciA9IHVudGFnZ2VkX2FkZHJfcmVtb3RlKG1tLCBhZGRyKTtcbjczNDY6XHRcbjczNDc6XHRcdC8qIEF2b2lkIHRyaWdnZXJpbmcgdGhlIHRlbXBvcmFyeSB3YXJuaW5nIGluIF9fZ2V0X3VzZXJfcGFnZXMgKi9cbjczNDg6XHRcdGlmICghdm1hX2xvb2t1cChtbSwgYWRkcikpIHtcbjczNDk6XHRcdFx0ZXJyID0gLUVGQVVMVDtcbjczNTA6XHRcdFx0Z290byBvdXQ7XG43MzUxOlx0XHR9XG43MzUyOlx0XG43MzUzOlx0XHR3aGlsZSAobGVuKSB7XG43MzU0Olx0XHRcdGludCBieXRlcywgb2Zmc2V0LCByZXR2YWw7XG43MzU1Olx0XHRcdHZvaWQgKm1hZGRyO1xuNzM1NjpcdFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuNzM1NzpcdFx0XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbjczNTg6XHRcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBOVUxMO1xuNzM1OTpcdFxuNzM2MDpcdFx0XHRwYWdlID0gZ2V0X3VzZXJfcGFnZV92bWFfcmVtb3RlKG1tLCBhZGRyLCBndXBfZmxhZ3MsIFx1MDAyNnZtYSk7XG43MzYxOlx0XHRcdGlmIChJU19FUlIocGFnZSkpIHtcbjczNjI6XHRcdFx0XHQvKlxuNzM2MzpcdFx0XHRcdCAqIFRyZWF0IGFzIGEgdG90YWwgZmFpbHVyZSBmb3Igbm93IHVudGlsIHdlIGRlY2lkZSBob3dcbjczNjQ6XHRcdFx0XHQgKiB0byBoYW5kbGUgdGhlIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVCBjYXNlIGFuZFxuNzM2NTpcdFx0XHRcdCAqIHN0YWNrIGV4cGFuc2lvbi5cbjczNjY6XHRcdFx0XHQgKi9cbjczNjc6XHRcdFx0XHQqKGNoYXIgKilidWYgPSAmIzM5O1xcMCYjMzk7O1xuNzM2ODpcdFx0XHRcdGVyciA9IC1FRkFVTFQ7XG43MzY5Olx0XHRcdFx0Z290byBvdXQ7XG43MzcwOlx0XHRcdH1cbjczNzE6XHRcbjczNzI6XHRcdFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xuNzM3MzpcdFx0XHRieXRlcyA9IGxlbjtcbjczNzQ6XHRcdFx0b2Zmc2V0ID0gYWRkciBcdTAwMjYgKFBBR0VfU0laRSAtIDEpO1xuNzM3NTpcdFx0XHRpZiAoYnl0ZXMgXHUwMDNlIFBBR0VfU0laRSAtIG9mZnNldClcbjczNzY6XHRcdFx0XHRieXRlcyA9IFBBR0VfU0laRSAtIG9mZnNldDtcbjczNzc6XHRcbjczNzg6XHRcdFx0bWFkZHIgPSBrbWFwX2xvY2FsX2ZvbGlvKGZvbGlvLCBmb2xpb19wYWdlX2lkeChmb2xpbywgcGFnZSkgKiBQQUdFX1NJWkUpO1xuNzM3OTpcdFx0XHRyZXR2YWwgPSBzdHJzY3B5KGJ1ZiwgbWFkZHIgJiM0Mzsgb2Zmc2V0LCBieXRlcyk7XG43MzgwOlx0XHRcdGlmIChyZXR2YWwgXHUwMDNlPSAwKSB7XG43MzgxOlx0XHRcdFx0LyogRm91bmQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nICovXG43MzgyOlx0XHRcdFx0YnVmICYjNDM7PSByZXR2YWw7XG43MzgzOlx0XHRcdFx0Zm9saW9fcmVsZWFzZV9rbWFwKGZvbGlvLCBtYWRkcik7XG43Mzg0Olx0XHRcdFx0YnJlYWs7XG43Mzg1Olx0XHRcdH1cbjczODY6XHRcbjczODc6XHRcdFx0YnVmICYjNDM7PSBieXRlcyAtIDE7XG43Mzg4Olx0XHRcdC8qXG43Mzg5Olx0XHRcdCAqIEJlY2F1c2Ugc3Ryc2NweSBhbHdheXMgTlVMIHRlcm1pbmF0ZXMgd2UgbmVlZCB0b1xuNzM5MDpcdFx0XHQgKiBjb3B5IHRoZSBsYXN0IGJ5dGUgaW4gdGhlIHBhZ2UgaWYgd2UgYXJlIGdvaW5nIHRvXG43MzkxOlx0XHRcdCAqIGxvYWQgbW9yZSBwYWdlc1xuNzM5MjpcdFx0XHQgKi9cbjczOTM6XHRcdFx0aWYgKGJ5dGVzICE9IGxlbikge1xuNzM5NDpcdFx0XHRcdGFkZHIgJiM0Mzs9IGJ5dGVzIC0gMTtcbjczOTU6XHRcdFx0XHRjb3B5X2Zyb21fdXNlcl9wYWdlKHZtYSwgcGFnZSwgYWRkciwgYnVmLCBtYWRkciAmIzQzOyAoUEFHRV9TSVpFIC0gMSksIDEpO1xuNzM5NjpcdFx0XHRcdGJ1ZiAmIzQzOz0gMTtcbjczOTc6XHRcdFx0XHRhZGRyICYjNDM7PSAxO1xuNzM5ODpcdFx0XHR9XG43Mzk5Olx0XHRcdGxlbiAtPSBieXRlcztcbjc0MDA6XHRcbjc0MDE6XHRcdFx0Zm9saW9fcmVsZWFzZV9rbWFwKGZvbGlvLCBtYWRkcik7XG43NDAyOlx0XHR9XG43NDAzOlx0XG43NDA0Olx0b3V0OlxuNzQwNTpcdFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XG43NDA2Olx0XHRpZiAoZXJyKVxuNzQwNzpcdFx0XHRyZXR1cm4gZXJyO1xuNzQwODpcdFx0cmV0dXJuIGJ1ZiAtIG9sZF9idWY7XG43NDA5Olx0fVxuNzQxMDpcdCNlbmRpZiAvKiBDT05GSUdfQlBGX1NZU0NBTEwgKi9cbjc0MTE6XHRcbjc0MTI6XHQvKlxuNzQxMzpcdCAqIFByaW50IHRoZSBuYW1lIG9mIGEgVk1BLlxuNzQxNDpcdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTQxMgoJCQkJCQkJb3V0cHV0OiAzMzUKCQkJCQkJCXRob3VnaHRzOiAyMzAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBQcm9wb3NlZCBLZXJuZWwgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBtZXRpY3Vsb3VzbHkuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggcHJpbWFyaWx5IGZvY3VzZXMgb24gcmVmYWN0b3JpbmcgYW5kIHRpZ2h0ZW5pbmcgdXAgc29tZSBCUEYgZnVuY3Rpb25hbGl0eSB3aXRoIGEgZm9jdXMgb24gc2FmZXR5IGFuZCBjb3JyZWN0bmVzcywgcmF0aGVyIHRoYW4gaW50cm9kdWNpbmcgYW55IG5vdmVsIG1lbW9yeSBpbml0aWFsaXphdGlvbiBpc3N1ZXMuIExldCYjMzk7cyBkZWx2ZSBpbnRvIHRoZSBkZXRhaWxzLgoKVGhlIGZpcnN0IHBvaW50IHRvIGNvbnNpZGVyIGlzIHRoZSByZWZhY3RvcmluZyBvZiB0aGUgQlBGIGhlbHBlcnMgdXNlZCBmb3IgY29weWluZyBkYXRhIGZyb20gdXNlciBzcGFjZS4gU3BlY2lmaWNhbGx5LCBgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tgIGFuZCBgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyYCBhcmUgYmVpbmcgcmV2YW1wZWQgdG8gdXNlIGBicGZfY29weV9mcm9tX3VzZXJfbW1gIGFuZCBgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cmAgcmVzcGVjdGl2ZWx5LCB3aGljaCBvcGVyYXRlIGRpcmVjdGx5IG9uIGBzdHJ1Y3QgbW1fc3RydWN0ICpgLiBUaGlzIGlzIGEgY2xlYXIgaW1wcm92ZW1lbnQgaW4gdGVybXMgb2YgY29kZSBvcmdhbml6YXRpb24gYW5kIHJldXNhYmlsaXR5LCBhbGxvd2luZyBmdW5jdGlvbnMgbGlrZSBgY29weV9yZW1vdGVfbW1fc3RyYCAod2hpY2ggaGFuZGxlcyB0aGUgYWN0dWFsIG1lbW9yeSB0cmFuc2ZlcikgdG8gYmUgdXNlZCB3aXRoIGRpZmZlcmVudCBtZW1vcnkgc3BhY2VzLiBJbXBvcnRhbnRseSwgdGhlIGRlc2lnbiBvZiB0aGVzZSBrZnVuY3MsIHBhcnRpY3VsYXJseSByZWdhcmRpbmcgYGRzdGAsIGlzIHdlbGwtdW5kZXJzdG9vZDogbWVtb3J5IGZvciBgZHN0YCBpcyBlaXRoZXIgemVyb2VkIG9uIGZhaWx1cmUgb3IgaW5pdGlhbGl6ZWQgdXNpbmcgaGVscGVycyBsaWtlIGBhY2Nlc3NfcmVtb3RlX3ZtYCBvciBgY29weV9yZW1vdGVfbW1fc3RyYC4gVGhlIGV4aXN0aW5nIGxvZ2ljIGZvciB6ZXJvaW5nIG91dCB0aGUgZGVzdGluYXRpb24gYnVmZmVyIG9uIGZhaWx1cmUvcGFydGlhbCBjb3B5IHJlbWFpbnMgaW50YWN0LCB3aGljaCBpcyBjcml0aWNhbC4gVGhlIGNvbmNlcm4gaGVyZSBpcyBub3QgaW50cm9kdWNpbmcgYSBjYXNlIG9mIHJlYWRpbmcgdW5pbml0aWFsaXplZCBkYXRhLgoKVGhlIGBmcmVlX2Jwcm1gIGNoYW5nZSwgd2hlcmUgYGJwcm0tJmd0O21tYCBpcyBleHBsaWNpdGx5IHNldCB0byBgTlVMTGAgKmJlZm9yZSogYG1tcHV0KG1tKWAgaXMgY2FsbGVkLCBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBhbmQgY29ycmVjdCBhcHByb2FjaCB0byBhdm9pZCBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgKFVBRikgc2NlbmFyaW9zLiBUaGlzIGV4cGxpY2l0bHkgbnVsbGlmaWVzIHRoZSBwb2ludGVyIGFmdGVyIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBvcGVyYXRpb24uIEtBU0FOIHdvdWxkIGJlIHRoZSB0b29sIHRvIGRldGVjdCBhbnkgaXNzdWVzIHJlbGF0ZWQgdG8gdGhpcyBwb2ludGVyLgoKVGhlIHZlcmlmaWVyIGNoYW5nZXMgYXJlIGFsc28gY3J1Y2lhbC4gVGhlIHBhdGNoIGlzIGFsbG93aW5nIHRoZSBCUEYgcHJvZ3JhbXMgdG8gcmVhZCB0cnVzdGVkLW9yLW51bGwgcG9pbnRlcnMsIHByb3RlY3RlZCBieSBmYXVsdC1zYWZlIG9wZXJhdGlvbnMuIFRoaXMgbWVjaGFuaXNtIHRyYW5zZm9ybXMgcG9pbnRlciBsb2FkcyBpbnRvIHByb2JlIHJlYWRzLCBhbmQgbWFya3MgdGhlIHJldHJpZXZlZCBwb2ludGVyIGFzIHVudHJ1c3RlZCwgd2hpY2ggaXMgZXNzZW50aWFsIGZvciBlbnN1cmluZyB0aGF0IEJQRiBwcm9ncmFtcyBjYW5ub3QgZGlyZWN0bHkgZGVyZWZlcmVuY2UgYXJiaXRyYXJ5IHVzZXItcHJvdmlkZWQgYWRkcmVzc2VzLiBUaGlzIGFsc28gZXh0ZW5kcyB0byB0cmVhdGluZyBgYnBybS0mZ3Q7bW1gIGFzIHRydXN0ZWQtb3ItbnVsbC4gVGhpcyBpcyBhbGwgYWJvdXQgZW5oYW5jaW5nIHRoZSBzYWZldHkgb2YgdGhlIEJQRiBlbnZpcm9ubWVudC4gSXTigJlzIGFib3V0IHZlcmlmeWluZyB3aGF0IGNhbiBiZSBhY2Nlc3NlZCB2aWEgQlBGLgoKTm93LCBjb25jZXJuaW5nIEtNU0FOLCBteSBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBzaG91bGQgKm5vdCogaW50cm9kdWNlIEtNU0FOLXJlbGV2YW50IGlzc3Vlcy4gVGhlIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgdGhhdCBjb3VsZCBiZSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgb3IgbmV3IGluc3RhbmNlcyB3aGVyZSBrZXJuZWwgZGF0YSBjb3VsZCBiZSBsZWFrZWQgdG8gdXNlciBzcGFjZSB2aWEgY29waWVzLiBUaGUgbWVtb3J5IGhhbmRsaW5nIHdpdGhpbiB0aGUgQlBGIGZ1bmN0aW9ucyBpcyBhbHJlYWR5IHJvYnVzdCBhbmQgd2VsbC1kZWZpbmVkLCB3aXRoIHplcm9pbmcgb24gZmFpbHVyZSBvciBwYWRkaW5nIGZsYWdzLiBUaGUgcG9pbnRlciBtYW5pcHVsYXRpb24gZm9jdXNlcyBvbiB2YWxpZGl0eSBhbmQgZmF1bHQgdG9sZXJhbmNlLCBub3QgaW50cm9kdWNpbmcgbWVtb3J5IGluaXRpYWxpemF0aW9uIGZsYXdzLiBLQVNBTiBhbmQgdGhlIHZlcmlmaWVyIHdpbGwgaGFuZGxlIGFueSBwb3RlbnRpYWwgVUFGLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gVGhlIGVudGlyZSBsb2dpYyBpcyBkZXNpZ25lZCB0byBwcmV2ZW50IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLgoKVGhlcmVmb3JlLCBjb25zaWRlcmluZyB0aGF0IHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBjYXNlcyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSAqY291bGQqIGJlIHJlYWQsIHdoZXJlIGRhdGEgbWlnaHQgbGVhayB0byB1c2VyIHNwYWNlLCBvciB3aGVyZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQgd2l0aG91dCBwcm9wZXIgaW5pdGlhbGl6YXRpb24sIEkgY29uY2x1ZGUgdGhhdCBgTmVlZHNLTVNBTmAgaXMgYGZhbHNlYC4gVGhlIGNoYW5nZXMgYXJlIHNhZmV0eS1mb2N1c2VkIHJlZmFjdG9yaW5nLCBhbmQgYXJlIHdlbGwgd2l0aGluIHRoZSBleGlzdGluZyBtZW1vcnkgcHJvdGVjdGlvbiBmcmFtZXdvcmssIGFuZCBhbnkgcHJvYmxlbXMgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOL3ZlcmlmaWVyIGNoZWNrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgQlBGIGtmdW5jcyBmb3IgY29weWluZyBtZW1vcnkgZnJvbSBhbiBhcmJpdHJhcnkgYHN0cnVjdCBtbV9zdHJ1Y3RgIChgYnBmX2NvcHlfZnJvbV91c2VyX21tYCBhbmQgYGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHJgKSwgcmVmYWN0b3JzIGV4aXN0aW5nIHRhc2stYmFzZWQgaGVscGVycyB0byB1c2UgdGhlc2UgZnVuY3Rpb25zLCBjbGVhcnMgYGJwcm0tXHUwMDNlbW1gIGJlZm9yZSBkcm9wcGluZyB0aGUgcmVmZXJlbmNlIGluIGBmcmVlX2Jwcm0oKWAsIGFuZCB1cGRhdGVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gYWxsb3cgZmF1bHQtcHJvdGVjdGVkIGxvYWRzIHRocm91Z2ggdHJ1c3RlZC1vci1udWxsIEJURiBwb2ludGVycyAoYGJwZl9pc190cnVzdGVkX29yX251bGxfYnRmX3B0cmApLlxuXG5LTVNBTiB2cyBLQVNBTiBBcHBsaWNhYmlsaXR5OlxuLSBLTVNBTiBkZXRlY3RzIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcC9wYWdlIG1lbW9yeSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGRpc2Nsb3N1cmUgKGluZm8tbGVha3MpLlxuLSBLQVNBTiAvIExPQ0tERVAgZGV0ZWN0IG1lbW9yeSBjb3JydXB0aW9ucywgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgYW5kIGxvY2tpbmcgZXJyb3JzLlxuLSBUaGUgbmV3IEJQRiBjb3B5IGtmdW5jcyBwcm9wZXJseSBoYW5kbGUgbWVtb3J5IGluaXRpYWxpemF0aW9uOiBhbnkgZGVzdGluYXRpb24gYnVmZmVycyBhcmUgZWl0aGVyIGZ1bGx5IHdyaXR0ZW4gb3IgZXhwbGljaXRseSB6ZXJvZWQgdmlhIGBtZW1zZXQoKWAgdXBvbiBmYWlsdXJlLCBwYXJ0aWFsIHJlYWRzLCBvciB3aGVuIGBCUEZfRl9QQURfWkVST1NgIGlzIHJlcXVlc3RlZC5cbi0gTm8gdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBzdGFjayBhbGxvY2F0aW9ucywgb3Iga2VybmVsLXRvLXVzZXIgbGVha3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC5cbi0gVmVyaWZpZXIgdHlwZSB0cmFja2luZyBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIGNoYW5nZXMgcmVsYXRlIHRvIHBvaW50ZXIgdmFsaWRpdHkgYW5kIGZhdWx0IGhhbmRsaW5nLCBhcmVhcyB3aGVyZSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzIGFyZSBhcHBsaWNhYmxlLCBub3QgS01TQU4uXG5cblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgQlBGIGtmdW5jcyBmb3IgY29weWluZyBtZW1vcnkgZnJvbSBhbiBhcmJpdHJhcnkgYHN0cnVjdCBtbV9zdHJ1Y3RgIChgYnBmX2NvcHlfZnJvbV91c2VyX21tYCBhbmQgYGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHJgKSwgcmVmYWN0b3JzIGV4aXN0aW5nIHRhc2stYmFzZWQgaGVscGVycyB0byB1c2UgdGhlc2UgZnVuY3Rpb25zLCBjbGVhcnMgYGJwcm0tXHUwMDNlbW1gIGJlZm9yZSBkcm9wcGluZyB0aGUgcmVmZXJlbmNlIGluIGBmcmVlX2Jwcm0oKWAsIGFuZCB1cGRhdGVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gYWxsb3cgZmF1bHQtcHJvdGVjdGVkIGxvYWRzIHRocm91Z2ggdHJ1c3RlZC1vci1udWxsIEJURiBwb2ludGVycyAoYGJwZl9pc190cnVzdGVkX29yX251bGxfYnRmX3B0cmApLlxuXG5LTVNBTiB2cyBLQVNBTiBBcHBsaWNhYmlsaXR5OlxuLSBLTVNBTiBkZXRlY3RzIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcC9wYWdlIG1lbW9yeSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGRpc2Nsb3N1cmUgKGluZm8tbGVha3MpLlxuLSBLQVNBTiAvIExPQ0tERVAgZGV0ZWN0IG1lbW9yeSBjb3JydXB0aW9ucywgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgYW5kIGxvY2tpbmcgZXJyb3JzLlxuLSBUaGUgbmV3IEJQRiBjb3B5IGtmdW5jcyBwcm9wZXJseSBoYW5kbGUgbWVtb3J5IGluaXRpYWxpemF0aW9uOiBhbnkgZGVzdGluYXRpb24gYnVmZmVycyBhcmUgZWl0aGVyIGZ1bGx5IHdyaXR0ZW4gb3IgZXhwbGljaXRseSB6ZXJvZWQgdmlhIGBtZW1zZXQoKWAgdXBvbiBmYWlsdXJlLCBwYXJ0aWFsIHJlYWRzLCBvciB3aGVuIGBCUEZfRl9QQURfWkVST1NgIGlzIHJlcXVlc3RlZC5cbi0gTm8gdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBzdGFjayBhbGxvY2F0aW9ucywgb3Iga2VybmVsLXRvLXVzZXIgbGVha3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC5cbi0gVmVyaWZpZXIgdHlwZSB0cmFja2luZyBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIGNoYW5nZXMgcmVsYXRlIHRvIHBvaW50ZXIgdmFsaWRpdHkgYW5kIGZhdWx0IGhhbmRsaW5nLCBhcmVhcyB3aGVyZSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzIGFyZSBhcHBsaWNhYmxlLCBub3QgS01TQU4uXG5cblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDoyMDo1NC44MDIyOTk3MDdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDA0ODY2MTMyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiREVCVUdfSU5GT19CVEZcIixcbiAgICBcIkJQRl9MU01cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfY29weV9mcm9tX3VzZXJfbW1cIixcbiAgICBcImJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHJcIixcbiAgICBcImJwZl9jb3B5X2Zyb21fdXNlcl90YXNrXCIsXG4gICAgXCJicGZfY29weV9mcm9tX3VzZXJfdGFza19zdHJcIixcbiAgICBcImNvcHlfcmVtb3RlX21tX3N0clwiLFxuICAgIFwiY29weV9yZW1vdGVfdm1fc3RyXCIsXG4gICAgXCJfX2NvcHlfcmVtb3RlX21tX3N0clwiLFxuICAgIFwiY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3NcIixcbiAgICBcInR5cGVfaXNfdHJ1c3RlZF9vcl9udWxsXCIsXG4gICAgXCJjaGVja19tZW1fYWNjZXNzXCIsXG4gICAgXCJicGZfY29udmVydF9jdHhfYWNjZXNzZXNcIixcbiAgICBcImZyZWVfYnBybVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgQlBGIGtmdW5jcyBmb3IgY29weWluZyBtZW1vcnkgZnJvbSBhbiBhcmJpdHJhcnkgYHN0cnVjdCBtbV9zdHJ1Y3RgIChgYnBmX2NvcHlfZnJvbV91c2VyX21tYCBhbmQgYGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHJgKSwgcmVmYWN0b3JzIGV4aXN0aW5nIHRhc2stYmFzZWQgaGVscGVycyB0byB1c2UgdGhlc2UgZnVuY3Rpb25zLCBjbGVhcnMgYGJwcm0tXFx1MDAzZW1tYCBiZWZvcmUgZHJvcHBpbmcgdGhlIHJlZmVyZW5jZSBpbiBgZnJlZV9icHJtKClgLCBhbmQgdXBkYXRlcyB0aGUgQlBGIHZlcmlmaWVyIHRvIGFsbG93IGZhdWx0LXByb3RlY3RlZCBsb2FkcyB0aHJvdWdoIHRydXN0ZWQtb3ItbnVsbCBCVEYgcG9pbnRlcnMgKGBicGZfaXNfdHJ1c3RlZF9vcl9udWxsX2J0Zl9wdHJgKS5cXG5cXG5LTVNBTiB2cyBLQVNBTiBBcHBsaWNhYmlsaXR5Olxcbi0gS01TQU4gZGV0ZWN0cyByZWFkcyBvZiB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAvcGFnZSBtZW1vcnkgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBkaXNjbG9zdXJlIChpbmZvLWxlYWtzKS5cXG4tIEtBU0FOIC8gTE9DS0RFUCBkZXRlY3QgbWVtb3J5IGNvcnJ1cHRpb25zLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLCBhbmQgbG9ja2luZyBlcnJvcnMuXFxuLSBUaGUgbmV3IEJQRiBjb3B5IGtmdW5jcyBwcm9wZXJseSBoYW5kbGUgbWVtb3J5IGluaXRpYWxpemF0aW9uOiBhbnkgZGVzdGluYXRpb24gYnVmZmVycyBhcmUgZWl0aGVyIGZ1bGx5IHdyaXR0ZW4gb3IgZXhwbGljaXRseSB6ZXJvZWQgdmlhIGBtZW1zZXQoKWAgdXBvbiBmYWlsdXJlLCBwYXJ0aWFsIHJlYWRzLCBvciB3aGVuIGBCUEZfRl9QQURfWkVST1NgIGlzIHJlcXVlc3RlZC5cXG4tIE5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgc3RhY2sgYWxsb2NhdGlvbnMsIG9yIGtlcm5lbC10by11c2VyIGxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuXFxuLSBWZXJpZmllciB0eXBlIHRyYWNraW5nIGFuZCByZWZlcmVuY2UgY291bnRpbmcgY2hhbmdlcyByZWxhdGUgdG8gcG9pbnRlciB2YWxpZGl0eSBhbmQgZmF1bHQgaGFuZGxpbmcsIGFyZWFzIHdoZXJlIEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMgYXJlIGFwcGxpY2FibGUsIG5vdCBLTVNBTi5cXG5cXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBzbGVlcGFibGUgQlBGIGtmdW5jcyAoYnBmX2NvcHlfZnJvbV91c2VyX21tIGFuZCBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKSwgcmVmYWN0b3JzIHJlbW90ZSBNTSBzdHJpbmcgY29weWluZyBoZWxwZXJzIGFjcm9zcyBtbS8gYW5kIGtlcm5lbC9icGYvLCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIHRvIGFsbG93IGZhdWx0LXByb3RlY3RlZCBsb2FkcyB0aHJvdWdoIHRydXN0ZWQtb3ItbnVsbCBwb2ludGVycywgYW5kIGFsdGVycyBtbSBjbGVhbnVwIGluIGZyZWVfYnBybSgpLiBUaGVzZSBjaGFuZ2VzIHRvdWNoIGNvcmUgQlBGIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBleGVjdXRpb24gcGF0aHMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzIHZpYSBCUEYgYW5kIGV4ZWMgc3lzY2FsbHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIwOjIwOjU0LjgwMjMwNTI0N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODc1MTc1MTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZGI3N2FmNjZiM2FhMDdiMTNkYzgzYWFmY2ExYjhiMGEwMjkxYTFmYlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIFNlcCA3IDIwOjIwOjUzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2V4ZWMuYyBiL2ZzL2V4ZWMuY1xcbmluZGV4IDc0NWY2ZWI1Mjc5ZTYuLjRkZGQ0MDNmZDkxYzcgMTAwNjQ0XFxuLS0tIGEvZnMvZXhlYy5jXFxuKysrIGIvZnMvZXhlYy5jXFxuQEAgLTE0NTYsOSArMTQ1NiwxMiBAQCB2b2lkIGJwcm1fZHJvcF9sb2FkZXIoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcXG4gXFxuIHN0YXRpYyB2b2lkIGZyZWVfYnBybShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxcbiB7XFxuLVxcdGlmIChicHJtLVxcdTAwM2VtbSkge1xcbitcXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGJwcm0tXFx1MDAzZW1tO1xcbitcXG4rXFx0aWYgKG1tKSB7XFxuIFxcdFxcdGFjY3RfYXJnX3NpemUoYnBybSwgMCk7XFxuLVxcdFxcdG1tcHV0KGJwcm0tXFx1MDAzZW1tKTtcXG4rXFx0XFx0YnBybS1cXHUwMDNlbW0gPSBOVUxMO1xcbitcXHRcXHRtbXB1dChtbSk7XFxuIFxcdH1cXG4gXFx0aWYgKGJwcm0tXFx1MDAzZXVzZXJfbnMpXFxuIFxcdFxcdHB1dF91c2VyX25zKGJwcm0tXFx1MDAzZXVzZXJfbnMpO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxcbmluZGV4IDk3MjdkZjVhZjgzYWIuLjRmMDMyYWQ4M2M2NzUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcXG5AQCAtMTMzOSw2ICsxMzM5LDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBicGZfaXNfcHRyX3RvX21lbV9vcl9idGZfaWQoZW51bSBicGZfcmVnX3R5cGUgdHlwZSlcXG4gXFx0fVxcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIGJvb2wgYnBmX2lzX3RydXN0ZWRfb3JfbnVsbF9idGZfcHRyKGVudW0gYnBmX3JlZ190eXBlIHR5cGUpXFxuK3tcXG4rXFx0cmV0dXJuIHR5cGUgPT0gKFBUUl9UT19CVEZfSUQgfCBQVFJfVFJVU1RFRCB8IFBUUl9NQVlCRV9OVUxMKTtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSBib29sIGJwZl9tYXlfZmF1bHRfb25fZGVyZWYoZW51bSBicGZfcmVnX3R5cGUgdHlwZSlcXG4ge1xcbiBcXHQvKlxcbkBAIC0xMzQ2LDcgKzEzNTEsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYnBmX21heV9mYXVsdF9vbl9kZXJlZihlbnVtIGJwZl9yZWdfdHlwZSB0eXBlKVxcbiBcXHQgKiBwcm90ZWN0aW9uLCB0aGF0IGlzLCB0aGUgb25lcyBicGZfY29udmVydF9jdHhfYWNjZXNzZXMoKSBoYXMgdG9cXG4gXFx0ICogdHVybiBhIEJQRl9MRFggaW50byBhIEJQRl9QUk9CRV9NRU0gb25lIGZvci5cXG4gXFx0ICovXFxuLVxcdHJldHVybiB0eXBlID09IFBUUl9UT19CVEZfSUQgfHwgKHR5cGVfZmxhZyh0eXBlKSBcXHUwMDI2IFBUUl9VTlRSVVNURUQpO1xcbitcXHRyZXR1cm4gdHlwZSA9PSBQVFJfVE9fQlRGX0lEIHx8XFxuK1xcdCAgICAgICAodHlwZV9mbGFnKHR5cGUpIFxcdTAwMjYgUFRSX1VOVFJVU1RFRCkgfHxcXG4rXFx0ICAgICAgIGJwZl9pc190cnVzdGVkX29yX251bGxfYnRmX3B0cih0eXBlKTtcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSBib29sIGJwZl9wcm9nX2hhc19hcmVuYV9jdHhfYXJnKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oXFxuaW5kZXggZGQwOWM0MzhmYTIzZS4uZDViZGUxZjcxYTk3ZSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tLmhcXG5AQCAtMzMyNiw2ICszMzI2LDggQEAgZXh0ZXJuIGludCBhY2Nlc3NfcmVtb3RlX3ZtKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdFxcdHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncyk7XFxuIFxcbiAjaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxuK2V4dGVybiBpbnQgY29weV9yZW1vdGVfbW1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuK1xcdFxcdFxcdCAgICAgIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncyk7XFxuIGV4dGVybiBpbnQgY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdFxcdFxcdCAgICAgIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncyk7XFxuICNlbmRpZlxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2hlbHBlcnMuYyBiL2tlcm5lbC9icGYvaGVscGVycy5jXFxuaW5kZXggYjNjYzVjOGZjODc1Ni4uZDNjNTY0NDM3YWQwNiAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL2hlbHBlcnMuY1xcbisrKyBiL2tlcm5lbC9icGYvaGVscGVycy5jXFxuQEAgLTMyLDYgKzMyLDEwIEBAXFxuIFxcbiAjaW5jbHVkZSBcXFwiLi4vLi4vbGliL2tzdHJ0b3guaFxcXCJcXG4gXFxuK19fYnBmX2tmdW5jIGludCBicGZfY29weV9mcm9tX3VzZXJfbW0odm9pZCAqZHN0LCB1MzIgZHN0X19zeixcXG4rXFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgdm9pZCBfX3VzZXIgKnVuc2FmZV9wdHJfX2lnbixcXG4rXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHU2NCBmbGFncyk7XFxuK1xcbiAvKiBJZiBrZXJuZWwgc3Vic3lzdGVtIGlzIGFsbG93aW5nIGVCUEYgcHJvZ3JhbXMgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uLFxcbiAgKiBpbnNpZGUgaXRzIG93biB2ZXJpZmllcl9vcHMtXFx1MDAzZWdldF9mdW5jX3Byb3RvKCkgY2FsbGJhY2sgaXQgc2hvdWxkIHJldHVyblxcbiAgKiBicGZfbWFwX2xvb2t1cF9lbGVtX3Byb3RvLCBzbyB0aGF0IHZlcmlmaWVyIGNhbiBwcm9wZXJseSBjaGVjayB0aGUgYXJndW1lbnRzXFxuQEAgLTY4MiwyMiArNjg2LDE1IEBAIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfY29weV9mcm9tX3VzZXJfcHJvdG8gPSB7XFxuIEJQRl9DQUxMXzUoYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2ssIHZvaWQgKiwgZHN0LCB1MzIsIHNpemUsXFxuIFxcdCAgIGNvbnN0IHZvaWQgX191c2VyICosIHVzZXJfcHRyLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgdHNrLCB1NjQsIGZsYWdzKVxcbiB7XFxuK1xcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0LyogZmxhZ3MgaXMgbm90IHVzZWQgeWV0ICovXFxuLVxcdGlmICh1bmxpa2VseShmbGFncykpXFxuLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi1cXG4tXFx0aWYgKHVubGlrZWx5KCFzaXplKSlcXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcbi1cXHRyZXQgPSBhY2Nlc3NfcHJvY2Vzc192bSh0c2ssICh1bnNpZ25lZCBsb25nKXVzZXJfcHRyLCBkc3QsIHNpemUsIDApO1xcbi1cXHRpZiAocmV0ID09IHNpemUpXFxuLVxcdFxcdHJldHVybiAwO1xcbitcXHRtbSA9IGdldF90YXNrX21tKHRzayk7XFxuK1xcdHJldCA9IGJwZl9jb3B5X2Zyb21fdXNlcl9tbShkc3QsIHNpemUsIHVzZXJfcHRyLCBtbSwgZmxhZ3MpO1xcbitcXHRpZiAobW0pXFxuK1xcdFxcdG1tcHV0KG1tKTtcXG4gXFxuLVxcdG1lbXNldChkc3QsIDAsIHNpemUpO1xcbi1cXHQvKiBSZXR1cm4gLUVGQVVMVCBmb3IgcGFydGlhbCByZWFkICovXFxuLVxcdHJldHVybiByZXQgXFx1MDAzYyAwID8gcmV0IDogLUVGQVVMVDtcXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3Byb3RvID0ge1xcbkBAIC0zNjU4LDYgKzM2NTUsMTAwIEBAIF9fYnBmX2tmdW5jIGludCBicGZfY29weV9mcm9tX3VzZXJfc3RyKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osIGNvbnN0IHZvaWQgX191c2VyXFxuIFxcdHJldHVybiByZXQgKyAxO1xcbiB9XFxuIFxcbisvKipcXG4rICogYnBmX2NvcHlfZnJvbV91c2VyX21tKCkgLSBDb3B5IGRhdGEgZnJvbSBhbiBhZGRyZXNzIHNwYWNlXFxuKyAqIEBkc3Q6ICAgICAgICAgICAgIERlc3RpbmF0aW9uIGFkZHJlc3MsIGluIGtlcm5lbCBzcGFjZVxcbisgKiBAZHN0X19zejogICAgICAgICBOdW1iZXIgb2YgYnl0ZXMgdG8gY29weVxcbisgKiBAdW5zYWZlX3B0cl9faWduOiBTb3VyY2UgYWRkcmVzcyBpbiB0aGUgYWRkcmVzcyBzcGFjZVxcbisgKiBAbW06ICAgICAgICAgICAgICBBZGRyZXNzIHNwYWNlIHRvIGNvcHkgZnJvbVxcbisgKiBAZmxhZ3M6ICAgICAgICAgICBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZTsgbXVzdCBiZSB6ZXJvXFxuKyAqXFxuKyAqIENvcGllcyBkYXRhIGZyb20gdGhlIHVzZXIgYWRkcmVzcyBzcGFjZSBhc3NvY2lhdGVkIHdpdGggQG1tLiBUaGUgZGVzdGluYXRpb25cXG4rICogaXMgemVyb2VkIGlmIGFuIGF0dGVtcHRlZCBjb3B5IGNhbm5vdCBiZSBjb21wbGV0ZWQgaW4gZnVsbC4gVW5zdXBwb3J0ZWRcXG4rICogZmxhZ3MgcmV0dXJuIC1FSU5WQUwgd2l0aG91dCBtb2RpZnlpbmcgQGRzdC5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FSU5WQUwgaWYgQGZsYWdzIGlzIG5vbi16ZXJvLCBvciAtRUZBVUxUIGlmIHRoZSBjb3B5XFxuKyAqIGZhaWxzIG9yIGlzIHBhcnRpYWwuXFxuKyAqL1xcbitfX2JwZl9rZnVuYyBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX21tKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osXFxuK1xcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHZvaWQgX191c2VyICp1bnNhZmVfcHRyX19pZ24sXFxuK1xcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1NjQgZmxhZ3MpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmICh1bmxpa2VseShmbGFncykpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0aWYgKHVubGlrZWx5KCFkc3RfX3N6KSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAodW5saWtlbHkoIW1tKSkge1xcbitcXHRcXHRtZW1zZXQoZHN0LCAwLCBkc3RfX3N6KTtcXG4rXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IGFjY2Vzc19yZW1vdGVfdm0obW0sICh1bnNpZ25lZCBsb25nKXVuc2FmZV9wdHJfX2lnbixcXG4rXFx0XFx0XFx0ICAgICAgIGRzdCwgZHN0X19zeiwgMCk7XFxuK1xcdGlmIChyZXQgPT0gZHN0X19zeilcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRtZW1zZXQoZHN0LCAwLCBkc3RfX3N6KTtcXG4rXFx0cmV0dXJuIHJldCBcXHUwMDNjIDAgPyByZXQgOiAtRUZBVUxUO1xcbit9XFxuK1xcbisvKipcXG4rICogYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cigpIC0gQ29weSBhIHN0cmluZyBmcm9tIGFuIGFkZHJlc3Mgc3BhY2VcXG4rICogQGRzdDogICAgICAgICAgICAgRGVzdGluYXRpb24gYWRkcmVzcywgaW4ga2VybmVsIHNwYWNlLiBUaGlzIGJ1ZmZlciBtdXN0IGJlXFxuKyAqICAgICAgICAgICAgICAgICAgIGF0IGxlYXN0IEBkc3RfX3N6IGJ5dGVzIGxvbmdcXG4rICogQGRzdF9fc3o6ICAgICAgICAgTWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gY29weSwgaW5jbHVkaW5nIHRoZSB0cmFpbGluZyBOVUxcXG4rICogQHVuc2FmZV9wdHJfX2lnbjogU291cmNlIGFkZHJlc3MgaW4gdGhlIGFkZHJlc3Mgc3BhY2VcXG4rICogQG1tOiAgICAgICAgICAgICAgQWRkcmVzcyBzcGFjZSB0byBjb3B5IGZyb21cXG4rICogQGZsYWdzOiAgICAgICAgICAgVGhlIG9ubHkgc3VwcG9ydGVkIGZsYWcgaXMgQlBGX0ZfUEFEX1pFUk9TXFxuKyAqXFxuKyAqIENvcGllcyBhIE5VTC10ZXJtaW5hdGVkIHN0cmluZyBmcm9tIHRoZSB1c2VyIGFkZHJlc3Mgc3BhY2UgYXNzb2NpYXRlZCB3aXRoXFxuKyAqIEBtbS4gSWYgdGhlIHN0cmluZyBpcyB0b28gbG9uZywgQGRzdCBpcyBzdGlsbCBOVUwtdGVybWluYXRlZCB1bmxlc3MgQGRzdF9fc3pcXG4rICogaXMgemVyby5cXG4rICpcXG4rICogSWYgdGhlIGZsYWdzIGFyZSB2YWxpZCBhbmQgQlBGX0ZfUEFEX1pFUk9TIGlzIHNldCwgdGhlIHVudXNlZCBwb3J0aW9uIG9mXFxuKyAqIEBkc3QgaXMgY2xlYXJlZCBvbiBzdWNjZXNzIGFuZCBhbGwgb2YgQGRzdCBpcyBjbGVhcmVkIG9uIGEgY29weSBmYWlsdXJlLlxcbisgKiBVbnN1cHBvcnRlZCBmbGFncyByZXR1cm4gLUVJTlZBTCB3aXRob3V0IG1vZGlmeWluZyBAZHN0LlxcbisgKlxcbisgKiBSZXR1cm46IFRoZSBudW1iZXIgb2YgY29waWVkIGJ5dGVzIGluY2x1ZGluZyB0aGUgTlVMIHRlcm1pbmF0b3Igb24gc3VjY2VzcyxcXG4rICogb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXFxuKyAqL1xcbitfX2JwZl9rZnVuYyBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cih2b2lkICpkc3QsIHUzMiBkc3RfX3N6LFxcbitcXHRcXHRcXHRcXHRcXHQgIGNvbnN0IHZvaWQgX191c2VyICp1bnNhZmVfcHRyX19pZ24sXFxuK1xcdFxcdFxcdFxcdFxcdCAgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHU2NCBmbGFncylcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKHVubGlrZWx5KGZsYWdzIFxcdTAwMjYgfkJQRl9GX1BBRF9aRVJPUykpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0aWYgKHVubGlrZWx5KGRzdF9fc3ogPT0gMCkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKHVubGlrZWx5KCFtbSkpIHtcXG4rXFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgQlBGX0ZfUEFEX1pFUk9TKVxcbitcXHRcXHRcXHRtZW1zZXQoZHN0LCAwLCBkc3RfX3N6KTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHQqKGNoYXIgKilkc3QgPSAnXFxcXDAnO1xcbitcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0ID0gY29weV9yZW1vdGVfbW1fc3RyKG1tLCAodW5zaWduZWQgbG9uZyl1bnNhZmVfcHRyX19pZ24sIGRzdCwgZHN0X19zeiwgMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdGlmIChmbGFncyBcXHUwMDI2IEJQRl9GX1BBRF9aRVJPUylcXG4rXFx0XFx0XFx0bWVtc2V0KGRzdCwgMCwgZHN0X19zeik7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChmbGFncyBcXHUwMDI2IEJQRl9GX1BBRF9aRVJPUylcXG4rXFx0XFx0bWVtc2V0KGRzdCArIHJldCwgMCwgZHN0X19zeiAtIHJldCk7XFxuK1xcbitcXHRyZXR1cm4gcmV0ICsgMTtcXG4rfVxcbitcXG4gLyoqXFxuICAqIGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3N0cigpIC0gQ29weSBhIHN0cmluZyBmcm9tIGFuIHRhc2sncyBhZGRyZXNzIHNwYWNlXFxuICAqIEBkc3Q6ICAgICAgICAgICAgIERlc3RpbmF0aW9uIGFkZHJlc3MsIGluIGtlcm5lbCBzcGFjZS4gIFRoaXMgYnVmZmVyIG11c3QgYmVcXG5AQCAtMzY4MSwyNSArMzc3MiwxNiBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBjb25zdCB2b2lkIF9fdXNlciAqdW5zYWZlX3B0cl9faWduLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHU2NCBmbGFncylcXG4ge1xcbitcXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcXG4gXFx0aW50IHJldDtcXG4gXFxuLVxcdGlmICh1bmxpa2VseShmbGFncyBcXHUwMDI2IH5CUEZfRl9QQURfWkVST1MpKVxcbi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFxuLVxcdGlmICh1bmxpa2VseShkc3RfX3N6ID09IDApKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4rXFx0bW0gPSBnZXRfdGFza19tbSh0c2spO1xcbitcXHRyZXQgPSBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKGRzdCwgZHN0X19zeiwgdW5zYWZlX3B0cl9faWduLFxcbitcXHRcXHRcXHRcXHRcXHRtbSwgZmxhZ3MpO1xcbitcXHRpZiAobW0pXFxuK1xcdFxcdG1tcHV0KG1tKTtcXG4gXFxuLVxcdHJldCA9IGNvcHlfcmVtb3RlX3ZtX3N0cih0c2ssICh1bnNpZ25lZCBsb25nKXVuc2FmZV9wdHJfX2lnbiwgZHN0LCBkc3RfX3N6LCAwKTtcXG4tXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tXFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgQlBGX0ZfUEFEX1pFUk9TKVxcbi1cXHRcXHRcXHRtZW1zZXQoZHN0LCAwLCBkc3RfX3N6KTtcXG4tXFx0XFx0cmV0dXJuIHJldDtcXG4tXFx0fVxcbi1cXG4tXFx0aWYgKGZsYWdzIFxcdTAwMjYgQlBGX0ZfUEFEX1pFUk9TKVxcbi1cXHRcXHRtZW1zZXQoZHN0ICsgcmV0LCAwLCBkc3RfX3N6IC0gcmV0KTtcXG4tXFxuLVxcdHJldHVybiByZXQgKyAxO1xcbitcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbiAvKiBLZWVwIHVuc2lnbmVkIGxvbmcgaW4gcHJvdG90eXBlIHNvIHRoYXQga2Z1bmMgaXMgdXNhYmxlIHdoZW4gZW1pdHRlZCB0b1xcbkBAIC00OTI0LDYgKzUwMDYsOCBAQCBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfYml0c19uZXcsIEtGX0lURVJfTkVXKVxcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfYml0c19uZXh0LCBLRl9JVEVSX05FWFQgfCBLRl9SRVRfTlVMTClcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX2JpdHNfZGVzdHJveSwgS0ZfSVRFUl9ERVNUUk9ZKVxcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2NvcHlfZnJvbV91c2VyX3N0ciwgS0ZfU0xFRVBBQkxFKVxcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2NvcHlfZnJvbV91c2VyX21tLCBLRl9TTEVFUEFCTEUpXFxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyLCBLRl9TTEVFUEFCTEUpXFxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfY29weV9mcm9tX3VzZXJfdGFza19zdHIsIEtGX1NMRUVQQUJMRSlcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9nZXRfa21lbV9jYWNoZSlcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX2ttZW1fY2FjaGVfbmV3LCBLRl9JVEVSX05FVyB8IEtGX1NMRUVQQUJMRSlcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXFxuaW5kZXggOWU3OTc1MGUyNDgwOC4uNjc5OWQ5ZTA4MGZjNSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5AQCAtNjAwNCw2ICs2MDA0LDEwIEBAIEJURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMKHN0cnVjdCBkZW50cnkpIHtcXG4gXFx0c3RydWN0IGlub2RlICpkX2lub2RlO1xcbiB9O1xcbiBcXG4rQlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IGxpbnV4X2JpbnBybSkge1xcbitcXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcXG4rfTtcXG4rXFxuIEJURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMKHN0cnVjdCBzb2NrZXQpIHtcXG4gXFx0c3RydWN0IHNvY2sgKnNrO1xcbiB9O1xcbkBAIC02MDU4LDYgKzYwNjIsNyBAQCBzdGF0aWMgYm9vbCB0eXBlX2lzX3RydXN0ZWRfb3JfbnVsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiB7XFxuIFxcdEJURl9UWVBFX0VNSVQoQlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IHNvY2tldCkpO1xcbiBcXHRCVEZfVFlQRV9FTUlUKEJURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMKHN0cnVjdCBkZW50cnkpKTtcXG4rXFx0QlRGX1RZUEVfRU1JVChCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTChzdHJ1Y3QgbGludXhfYmlucHJtKSk7XFxuIFxcdEJURl9UWVBFX0VNSVQoQlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IHZtX2FyZWFfc3RydWN0KSk7XFxuIFxcbiBcXHRyZXR1cm4gYnRmX25lc3RlZF90eXBlX2lzX3RydXN0ZWQoXFx1MDAyNmVudi1cXHUwMDNlbG9nLCByZWcsIGZpZWxkX25hbWUsIGJ0Zl9pZCxcXG5AQCAtNjE2OCw2ICs2MTczLDE1IEBAIHN0YXRpYyBpbnQgY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFx0aWYgKHJldCAhPSBQVFJfVE9fQlRGX0lEKSB7XFxuIFxcdFxcdC8qIGp1c3QgbWFyazsgKi9cXG4gXFxuK1xcdH0gZWxzZSBpZiAoYnBmX2lzX3RydXN0ZWRfb3JfbnVsbF9idGZfcHRyKHJlZy1cXHUwMDNldHlwZSkpIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogQW4gdW5jaGVja2VkIGxvYWQgdGhyb3VnaCBhIHRydXN0ZWQtb3ItTlVMTCBwb2ludGVyIGlzXFxuK1xcdFxcdCAqIGZhdWx0LXByb3RlY3RlZC4gQW55IHBvaW50ZXIgZGVyaXZlZCBmcm9tIHRoYXQgbG9hZCBtdXN0IGJlXFxuK1xcdFxcdCAqIHVudHJ1c3RlZCwgYXMgYSBmYXVsdCBwcm9kdWNlcyBhIE5VTEwgdmFsdWUuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRjbGVhcl90cnVzdGVkX2ZsYWdzKFxcdTAwMjZmbGFnKTtcXG4rXFx0XFx0ZmxhZyB8PSBQVFJfVU5UUlVTVEVEO1xcbitcXG4gXFx0fSBlbHNlIGlmICh0eXBlX2ZsYWcocmVnLVxcdTAwM2V0eXBlKSBcXHUwMDI2IFBUUl9VTlRSVVNURUQpIHtcXG4gXFx0XFx0LyogSWYgdGhpcyBpcyBhbiB1bnRydXN0ZWQgcG9pbnRlciwgYWxsIHBvaW50ZXJzIGZvcm1lZCBieSB3YWxraW5nIGl0XFxuIFxcdFxcdCAqIGFsc28gaW5oZXJpdCB0aGUgdW50cnVzdGVkIGZsYWcuXFxuQEAgLTY2NDQsNyArNjY1OCw4IEBAIHN0YXRpYyBpbnQgY2hlY2tfbWVtX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgsIHN0cnVjdCBiXFxuIFxcdFxcdGlmICghZXJyIFxcdTAwMjZcXHUwMDI2IHQgPT0gQlBGX1JFQUQgXFx1MDAyNlxcdTAwMjYgdmFsdWVfcmVnbm8gXFx1MDAzZT0gMClcXG4gXFx0XFx0XFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIHZhbHVlX3JlZ25vKTtcXG4gXFx0fSBlbHNlIGlmIChiYXNlX3R5cGUocmVnLVxcdTAwM2V0eXBlKSA9PSBQVFJfVE9fQlRGX0lEIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgICF0eXBlX21heV9iZV9udWxsKHJlZy1cXHUwMDNldHlwZSkpIHtcXG4rXFx0XFx0ICAgKCF0eXBlX21heV9iZV9udWxsKHJlZy1cXHUwMDNldHlwZSkgfHxcXG4rXFx0XFx0ICAgICh0ID09IEJQRl9SRUFEIFxcdTAwMjZcXHUwMDI2IGJwZl9pc190cnVzdGVkX29yX251bGxfYnRmX3B0cihyZWctXFx1MDAzZXR5cGUpKSkpIHtcXG4gXFx0XFx0ZXJyID0gY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3MoZW52LCByZWdzLCByZWcsIGFyZ25vLCBvZmYsIHNpemUsIHQsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgIHZhbHVlX3JlZ25vKTtcXG4gXFx0fSBlbHNlIGlmIChyZWctXFx1MDAzZXR5cGUgPT0gQ09OU1RfUFRSX1RPX01BUCkge1xcbmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaFxcbmluZGV4IDM4YjExNjUyMTJjOTQuLjgyNjRhMzQ2ZDE4YWYgMTAwNjQ0XFxuLS0tIGEvbW0vaW50ZXJuYWwuaFxcbisrKyBiL21tL2ludGVybmFsLmhcXG5AQCAtMjUsNiArMjUsMTEgQEBcXG4gc3RydWN0IGZvbGlvX2JhdGNoO1xcbiBzdHJ1Y3QgaHN0YXRlO1xcbiBcXG4rI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbitpbnQgX19jb3B5X3JlbW90ZV9tbV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4rXFx0XFx0XFx0IHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncyk7XFxuKyNlbmRpZlxcbitcXG4gc3RydWN0IGh1Z2VfYm9vdG1lbV9wYWdlIHtcXG4gXFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xcbiBcXHRzdHJ1Y3QgaHN0YXRlICpoc3RhdGU7XFxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcXG5pbmRleCA4YjBjMmM3MzVkM2RlLi5mZTJmNWU5ODhmYjkwIDEwMDY0NFxcbi0tLSBhL21tL21lbW9yeS5jXFxuKysrIGIvbW0vbWVtb3J5LmNcXG5AQCAtNzMzMSw4ICs3MzMxLDggQEAgRVhQT1JUX1NZTUJPTF9HUEwoYWNjZXNzX3Byb2Nlc3Nfdm0pO1xcbiAgKiBDb3B5IGEgc3RyaW5nIGZyb20gYW5vdGhlciBwcm9jZXNzJ3MgYWRkcmVzcyBzcGFjZSBhcyBnaXZlbiBpbiBtbS5cXG4gICogSWYgdGhlcmUgaXMgYW55IGVycm9yIHJldHVybiAtRUZBVUxULlxcbiAgKi9cXG4tc3RhdGljIGludCBfX2NvcHlfcmVtb3RlX3ZtX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi1cXHRcXHRcXHRcXHR2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXFxuK2ludCBfX2NvcHlfcmVtb3RlX21tX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbitcXHRcXHRcXHQgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKVxcbiB7XFxuIFxcdHZvaWQgKm9sZF9idWYgPSBidWY7XFxuIFxcdGludCBlcnIgPSAwO1xcbkBAIC03NDA3LDQzICs3NDA3LDYgQEAgc3RhdGljIGludCBfX2NvcHlfcmVtb3RlX3ZtX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHRyZXR1cm4gYnVmIC0gb2xkX2J1ZjtcXG4gfVxcbi1cXG4tLyoqXFxuLSAqIGNvcHlfcmVtb3RlX3ZtX3N0ciAtIGNvcHkgYSBzdHJpbmcgZnJvbSBhbm90aGVyIHByb2Nlc3MncyBhZGRyZXNzIHNwYWNlLlxcbi0gKiBAdHNrOlxcdHRoZSB0YXNrIG9mIHRoZSB0YXJnZXQgYWRkcmVzcyBzcGFjZVxcbi0gKiBAYWRkcjpcXHRzdGFydCBhZGRyZXNzIHRvIHJlYWQgZnJvbVxcbi0gKiBAYnVmOlxcdGRlc3RpbmF0aW9uIGJ1ZmZlclxcbi0gKiBAbGVuOlxcdG51bWJlciBvZiBieXRlcyB0byBjb3B5XFxuLSAqIEBndXBfZmxhZ3M6XFx0ZmxhZ3MgbW9kaWZ5aW5nIGxvb2t1cCBiZWhhdmlvdXJcXG4tICpcXG4tICogVGhlIGNhbGxlciBtdXN0IGhvbGQgYSByZWZlcmVuY2Ugb24gQG1tLlxcbi0gKlxcbi0gKiBSZXR1cm46IG51bWJlciBvZiBieXRlcyBjb3BpZWQgZnJvbSBAYWRkciAoc291cmNlKSB0byBAYnVmIChkZXN0aW5hdGlvbik7XFxuLSAqIG5vdCBpbmNsdWRpbmcgdGhlIHRyYWlsaW5nIE5VTC4gQWx3YXlzIGd1YXJhbnRlZWQgdG8gbGVhdmUgTlVMLXRlcm1pbmF0ZWRcXG4tICogYnVmZmVyLiBPbiBhbnkgZXJyb3IsIHJldHVybiAtRUZBVUxULlxcbi0gKi9cXG4taW50IGNvcHlfcmVtb3RlX3ZtX3N0cihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi1cXHRcXHQgICAgICAgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKVxcbi17XFxuLVxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xcbi1cXHRpbnQgcmV0O1xcbi1cXG4tXFx0aWYgKHVubGlrZWx5KGxlbiA9PSAwKSlcXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcbi1cXHRtbSA9IGdldF90YXNrX21tKHRzayk7XFxuLVxcdGlmICghbW0pIHtcXG4tXFx0XFx0KihjaGFyICopYnVmID0gJ1xcXFwwJztcXG4tXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuLVxcdH1cXG4tXFxuLVxcdHJldCA9IF9fY29weV9yZW1vdGVfdm1fc3RyKG1tLCBhZGRyLCBidWYsIGxlbiwgZ3VwX2ZsYWdzKTtcXG4tXFxuLVxcdG1tcHV0KG1tKTtcXG4tXFxuLVxcdHJldHVybiByZXQ7XFxuLX1cXG4tRVhQT1JUX1NZTUJPTF9HUEwoY29weV9yZW1vdGVfdm1fc3RyKTtcXG4gI2VuZGlmIC8qIENPTkZJR19CUEZfU1lTQ0FMTCAqL1xcbiBcXG4gLypcXG5kaWZmIC0tZ2l0IGEvbW0vbm9tbXUuYyBiL21tL25vbW11LmNcXG5pbmRleCA0OThlMDFlZTQwYjA1Li45ODU5NmU2MDMxMWYzIDEwMDY0NFxcbi0tLSBhL21tL25vbW11LmNcXG4rKysgYi9tbS9ub21tdS5jXFxuQEAgLTE3NDYsOCArMTc0Niw4IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGFjY2Vzc19wcm9jZXNzX3ZtKTtcXG4gICogQ29weSBhIHN0cmluZyBmcm9tIGFub3RoZXIgcHJvY2VzcydzIGFkZHJlc3Mgc3BhY2UgYXMgZ2l2ZW4gaW4gbW0uXFxuICAqIElmIHRoZXJlIGlzIGFueSBlcnJvciByZXR1cm4gLUVGQVVMVC5cXG4gICovXFxuLXN0YXRpYyBpbnQgX19jb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tXFx0XFx0XFx0XFx0dm9pZCAqYnVmLCBpbnQgbGVuKVxcbitpbnQgX19jb3B5X3JlbW90ZV9tbV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4rXFx0XFx0XFx0IHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncylcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIGFkZHJfZW5kO1xcbiBcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcXG5AQCAtMTc4MSw0MyArMTc4MSw2IEBAIHN0YXRpYyBpbnQgX19jb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4tXFxuLS8qKlxcbi0gKiBjb3B5X3JlbW90ZV92bV9zdHIgLSBjb3B5IGEgc3RyaW5nIGZyb20gYW5vdGhlciBwcm9jZXNzJ3MgYWRkcmVzcyBzcGFjZS5cXG4tICogQHRzazpcXHR0aGUgdGFzayBvZiB0aGUgdGFyZ2V0IGFkZHJlc3Mgc3BhY2VcXG4tICogQGFkZHI6XFx0c3RhcnQgYWRkcmVzcyB0byByZWFkIGZyb21cXG4tICogQGJ1ZjpcXHRkZXN0aW5hdGlvbiBidWZmZXJcXG4tICogQGxlbjpcXHRudW1iZXIgb2YgYnl0ZXMgdG8gY29weVxcbi0gKiBAZ3VwX2ZsYWdzOlxcdGZsYWdzIG1vZGlmeWluZyBsb29rdXAgYmVoYXZpb3VyICh1bnVzZWQpXFxuLSAqXFxuLSAqIFRoZSBjYWxsZXIgbXVzdCBob2xkIGEgcmVmZXJlbmNlIG9uIEBtbS5cXG4tICpcXG4tICogUmV0dXJuOiBudW1iZXIgb2YgYnl0ZXMgY29waWVkIGZyb20gQGFkZHIgKHNvdXJjZSkgdG8gQGJ1ZiAoZGVzdGluYXRpb24pO1xcbi0gKiBub3QgaW5jbHVkaW5nIHRoZSB0cmFpbGluZyBOVUwuIEFsd2F5cyBndWFyYW50ZWVkIHRvIGxlYXZlIE5VTC10ZXJtaW5hdGVkXFxuLSAqIGJ1ZmZlci4gT24gYW55IGVycm9yLCByZXR1cm4gLUVGQVVMVC5cXG4tICovXFxuLWludCBjb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tXFx0XFx0ICAgICAgIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncylcXG4te1xcbi1cXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcXG4tXFx0aW50IHJldDtcXG4tXFxuLVxcdGlmICh1bmxpa2VseShsZW4gPT0gMCkpXFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXG4tXFx0bW0gPSBnZXRfdGFza19tbSh0c2spO1xcbi1cXHRpZiAoIW1tKSB7XFxuLVxcdFxcdCooY2hhciAqKWJ1ZiA9ICdcXFxcMCc7XFxuLVxcdFxcdHJldHVybiAtRUZBVUxUO1xcbi1cXHR9XFxuLVxcbi1cXHRyZXQgPSBfX2NvcHlfcmVtb3RlX3ZtX3N0cihtbSwgYWRkciwgYnVmLCBsZW4pO1xcbi1cXG4tXFx0bW1wdXQobW0pO1xcbi1cXG4tXFx0cmV0dXJuIHJldDtcXG4tfVxcbi1FWFBPUlRfU1lNQk9MX0dQTChjb3B5X3JlbW90ZV92bV9zdHIpO1xcbiAjZW5kaWYgLyogQ09ORklHX0JQRl9TWVNDQUxMICovXFxuIFxcbiAvKipcXG5kaWZmIC0tZ2l0IGEvbW0vdXRpbC5jIGIvbW0vdXRpbC5jXFxuaW5kZXggYmYwNTEzZDFkM2QwOC4uMmVjYTI3YjAyNzkxZiAxMDA2NDRcXG4tLS0gYS9tbS91dGlsLmNcXG4rKysgYi9tbS91dGlsLmNcXG5AQCAtMTA2MSw2ICsxMDYxLDY4IEBAIGludCBnZXRfY21kbGluZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGNoYXIgKmJ1ZmZlciwgaW50IGJ1ZmxlbilcXG4gXFx0cmV0dXJuIHJlcztcXG4gfVxcbiBcXG4rI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbisvKipcXG4rICogY29weV9yZW1vdGVfbW1fc3RyIC0gY29weSBhIHN0cmluZyBmcm9tIGEgcmVtb3RlIGFkZHJlc3Mgc3BhY2UuXFxuKyAqIEBtbTogICAgICAgICB0aGUgcmVtb3RlIGFkZHJlc3Mgc3BhY2VcXG4rICogQGFkZHI6ICAgICAgIHN0YXJ0IGFkZHJlc3MgdG8gcmVhZCBmcm9tXFxuKyAqIEBidWY6ICAgICAgICBkZXN0aW5hdGlvbiBidWZmZXJcXG4rICogQGxlbjogICAgICAgIG51bWJlciBvZiBieXRlcyB0byBjb3B5XFxuKyAqIEBndXBfZmxhZ3M6ICBmbGFncyBtb2RpZnlpbmcgbG9va3VwIGJlaGF2aW91clxcbisgKlxcbisgKiBUaGUgY2FsbGVyIG11c3QgaG9sZCBhIHJlZmVyZW5jZSBvbiBAbW0uXFxuKyAqXFxuKyAqIFJldHVybjogbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCBmcm9tIEBhZGRyIChzb3VyY2UpIHRvIEBidWYgKGRlc3RpbmF0aW9uKSxcXG4rICogbm90IGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMLiBJZiBAbGVuIGlzIHplcm8sIHJldHVybiAwIHdpdGhvdXQgYWNjZXNzaW5nXFxuKyAqIEBidWYuIE90aGVyd2lzZSwgQGJ1ZiBpcyBhbHdheXMgTlVMLXRlcm1pbmF0ZWQuIE9uIGFueSBlcnJvciwgcmV0dXJuXFxuKyAqIC1FRkFVTFQuXFxuKyAqL1xcbitpbnQgY29weV9yZW1vdGVfbW1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuK1xcdFxcdCAgICAgICB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXFxuK3tcXG4rXFx0aWYgKHVubGlrZWx5KGxlbiA9PSAwKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXR1cm4gX19jb3B5X3JlbW90ZV9tbV9zdHIobW0sIGFkZHIsIGJ1ZiwgbGVuLCBndXBfZmxhZ3MpO1xcbit9XFxuK1xcbisvKipcXG4rICogY29weV9yZW1vdGVfdm1fc3RyIC0gY29weSBhIHN0cmluZyBmcm9tIGFub3RoZXIgcHJvY2VzcydzIGFkZHJlc3Mgc3BhY2UuXFxuKyAqIEB0c2s6XFx0dGhlIHRhc2sgb2YgdGhlIHRhcmdldCBhZGRyZXNzIHNwYWNlXFxuKyAqIEBhZGRyOlxcdHN0YXJ0IGFkZHJlc3MgdG8gcmVhZCBmcm9tXFxuKyAqIEBidWY6XFx0ZGVzdGluYXRpb24gYnVmZmVyXFxuKyAqIEBsZW46XFx0bnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHlcXG4rICogQGd1cF9mbGFnczpcXHRmbGFncyBtb2RpZnlpbmcgbG9va3VwIGJlaGF2aW91clxcbisgKlxcbisgKiBSZXR1cm46IG51bWJlciBvZiBieXRlcyBjb3BpZWQgZnJvbSBAYWRkciAoc291cmNlKSB0byBAYnVmIChkZXN0aW5hdGlvbiksXFxuKyAqIG5vdCBpbmNsdWRpbmcgdGhlIHRyYWlsaW5nIE5VTC4gSWYgQGxlbiBpcyB6ZXJvLCByZXR1cm4gMCB3aXRob3V0IGFjY2Vzc2luZ1xcbisgKiBAYnVmLiBPdGhlcndpc2UsIEBidWYgaXMgYWx3YXlzIE5VTC10ZXJtaW5hdGVkLiBPbiBhbnkgZXJyb3IsIHJldHVyblxcbisgKiAtRUZBVUxULlxcbisgKi9cXG4raW50IGNvcHlfcmVtb3RlX3ZtX3N0cihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdW5zaWduZWQgbG9uZyBhZGRyLFxcbitcXHRcXHQgICAgICAgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKVxcbit7XFxuK1xcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKHVubGlrZWx5KGxlbiA9PSAwKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRtbSA9IGdldF90YXNrX21tKHRzayk7XFxuK1xcdGlmICghbW0pIHtcXG4rXFx0XFx0KihjaGFyICopYnVmID0gJ1xcXFwwJztcXG4rXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IF9fY29weV9yZW1vdGVfbW1fc3RyKG1tLCBhZGRyLCBidWYsIGxlbiwgZ3VwX2ZsYWdzKTtcXG4rXFxuK1xcdG1tcHV0KG1tKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwoY29weV9yZW1vdGVfdm1fc3RyKTtcXG4rI2VuZGlmIC8qIENPTkZJR19CUEZfU1lTQ0FMTCAqL1xcbitcXG4gaW50IF9fd2VhayBtZW1jbXBfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UxLCBzdHJ1Y3QgcGFnZSAqcGFnZTIpXFxuIHtcXG4gXFx0Y2hhciAqYWRkcjEsICphZGRyMjtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2l0ZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9pdGVyLmNcXG5pbmRleCBjNjkwODBjYTE0ZjVhLi45OWExNmExYWRkNzBlIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9pdGVyLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfaXRlci5jXFxuQEAgLTM5LDEwICszOSwxMCBAQCBzdGF0aWMgdm9pZCB0ZXN0X2J0Zl9pZF9vcl9udWxsKHZvaWQpXFxuIFxcdHN0cnVjdCBicGZfaXRlcl90ZXN0X2tlcm4zICpza2VsO1xcbiBcXG4gXFx0c2tlbCA9IGJwZl9pdGVyX3Rlc3Rfa2VybjNfX29wZW5fYW5kX2xvYWQoKTtcXG4tXFx0aWYgKCFBU1NFUlRfRVJSX1BUUihza2VsLCBcXFwiYnBmX2l0ZXJfdGVzdF9rZXJuM19fb3Blbl9hbmRfbG9hZFxcXCIpKSB7XFxuLVxcdFxcdGJwZl9pdGVyX3Rlc3Rfa2VybjNfX2Rlc3Ryb3koc2tlbCk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcXFwiYnBmX2l0ZXJfdGVzdF9rZXJuM19fb3Blbl9hbmRfbG9hZFxcXCIpKVxcbiBcXHRcXHRyZXR1cm47XFxuLVxcdH1cXG4rXFxuK1xcdGJwZl9pdGVyX3Rlc3Rfa2VybjNfX2Rlc3Ryb3koc2tlbCk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGRvX2R1bW15X3JlYWRfb3B0cyhzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIHN0cnVjdCBicGZfaXRlcl9hdHRhY2hfb3B0cyAqb3B0cylcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY29weV9mcm9tX3VzZXJfYnBybS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvY29weV9mcm9tX3VzZXJfYnBybS5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5iMjMyNWIxOTM1NzYxXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2NvcHlfZnJvbV91c2VyX2Jwcm0uY1xcbkBAIC0wLDAgKzEsNzIgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NlcnJuby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL3dhaXQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3VuaXN0ZC5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY3Rlc3RfcHJvZ3MuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJjb3B5X2Zyb21fdXNlcl9icHJtLnNrZWwuaFxcXCJcXG4rXFxuK3ZvaWQgdGVzdF9jb3B5X2Zyb21fdXNlcl9icHJtKHZvaWQpXFxuK3tcXG4rXFx0Y2hhciBhcmcwW10gPSBcXFwiZmlyc3RcXFwiO1xcbitcXHRjaGFyIGFyZzFbXSA9IFxcXCJzZWNvbmQtYXJndW1lbnRcXFwiO1xcbitcXHRjaGFyIGVudjBbXSA9IFxcXCJTT01FX0VOVj1hXFxcIjtcXG4rXFx0Y2hhciBlbnYxW10gPSBcXFwiT1RIRVJfRU5WPXNvbWV0aGluZ1xcXCI7XFxuK1xcdHN0cnVjdCBjb3B5X2Zyb21fdXNlcl9icHJtICpza2VsO1xcbitcXHRwaWRfdCBjaGlsZDtcXG4rXFx0aW50IHN0YXR1cztcXG4rXFxuK1xcdHNrZWwgPSBjb3B5X2Zyb21fdXNlcl9icHJtX19vcGVuX2FuZF9sb2FkKCk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcXFwib3Blbl9hbmRfbG9hZFxcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHQvKlxcbitcXHQgKiBPbiAhQ09ORklHX01NVSwgZXhlYyBzdHJpbmdzIGFyZSBoZWxkIGluIGJwcm0tXFx1MDAzZXBhZ2VbXSByYXRoZXIgdGhhblxcbitcXHQgKiBiZWluZyBtYXBwZWQgaW4gYnBybS1cXHUwMDNlbW0uXFxuK1xcdCAqL1xcbitcXHRpZiAoIXNrZWwtXFx1MDAzZWtjb25maWctXFx1MDAzZUNPTkZJR19NTVUpIHtcXG4rXFx0XFx0cHJpbnRmKFxcXCIlczpTS0lQOiB0ZXN0IHJlcXVpcmVzIENPTkZJR19NTVVcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4rXFx0XFx0dGVzdF9fc2tpcCgpO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCFBU1NFUlRfT0soY29weV9mcm9tX3VzZXJfYnBybV9fYXR0YWNoKHNrZWwpLCBcXFwiYXR0YWNoXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0Y2hpbGQgPSBmb3JrKCk7XFxuK1xcdGlmICghQVNTRVJUX0dFKGNoaWxkLCAwLCBcXFwiZm9ya1xcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdGlmICghY2hpbGQpIHtcXG4rXFx0XFx0Y2hhciAqY29uc3QgYXJndltdID0geyBhcmcwLCBhcmcxLCBOVUxMIH07XFxuK1xcdFxcdGNoYXIgKmNvbnN0IGVudnBbXSA9IHsgZW52MCwgZW52MSwgTlVMTCB9O1xcbitcXG4rXFx0XFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2Vtb25pdG9yZWRfcGlkID0gZ2V0cGlkKCk7XFxuK1xcdFxcdGV4ZWN2ZShcXFwiL2Jpbi90cnVlXFxcIiwgYXJndiwgZW52cCk7XFxuK1xcdFxcdF9leGl0KGVycm5vKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCFBU1NFUlRfRVEod2FpdHBpZChjaGlsZCwgXFx1MDAyNnN0YXR1cywgMCksIGNoaWxkLCBcXFwid2FpdHBpZFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdGlmIChBU1NFUlRfVFJVRShXSUZFWElURUQoc3RhdHVzKSwgXFxcImNoaWxkX2V4aXRlZFxcXCIpKVxcbitcXHRcXHRBU1NFUlRfRVEoV0VYSVRTVEFUVVMoc3RhdHVzKSwgRVBFUk0sIFxcXCJleGVjX2Vycm5vXFxcIik7XFxuK1xcbitcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VicHJtX2FyZ2MsIDIsIFxcXCJicHJtX2FyZ2NcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlYnBybV9lbnZjLCAyLCBcXFwiYnBybV9lbnZjXFxcIik7XFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWRhdGFfbGVuX21hdGNoLCAxLCBcXFwiZGF0YV9sZW5fbWF0Y2hcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlaW52YWxpZF9mbGFnc19yZXQsIC1FSU5WQUwsIFxcXCJpbnZhbGlkX2ZsYWdzX3JldFxcXCIpO1xcbitcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2Vjb3B5X3JldCwgMCwgXFxcImNvcHlfcmV0XFxcIik7XFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXN0cl9hcmcwX3JldCwgc2l6ZW9mKGFyZzApLCBcXFwic3RyX2FyZzBfcmV0XFxcIik7XFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXN0cl9hcmcxX3JldCwgc2l6ZW9mKGFyZzEpLCBcXFwic3RyX2FyZzFfcmV0XFxcIik7XFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXN0cl9lbnYwX3JldCwgc2l6ZW9mKGVudjApLCBcXFwic3RyX2VudjBfcmV0XFxcIik7XFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXN0cl9lbnYxX3JldCwgc2l6ZW9mKGVudjEpLCBcXFwic3RyX2VudjFfcmV0XFxcIik7XFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWRhdGFfbWF0Y2gsIDEsIFxcXCJkYXRhX21hdGNoXFxcIik7XFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXN0cl9hcmdzX21hdGNoLCAxLCBcXFwic3RyX2FyZ3NfbWF0Y2hcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlc3RyX2VudnNfbWF0Y2gsIDEsIFxcXCJzdHJfZW52c19tYXRjaFxcXCIpO1xcbitcXG4rb3V0OlxcbitcXHRjb3B5X2Zyb21fdXNlcl9icHJtX19kZXN0cm95KHNrZWwpO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19tYXliZV9udWxsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfbWF5YmVfbnVsbC5jXFxuaW5kZXggMDFkYzI2MTNjOGE1MS4uNDVhZjZmMDBhZDkwOCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfbWF5YmVfbnVsbC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX21heWJlX251bGwuY1xcbkBAIC0xOSwxNSArMTksMTYgQEAgc3RhdGljIHZvaWQgbWF5YmVfbnVsbCh2b2lkKVxcbiBcXHRzdHJ1Y3Rfb3BzX21heWJlX251bGxfX2Rlc3Ryb3koc2tlbCk7XFxuIH1cXG4gXFxuLS8qIFRlc3QgdGhhdCB0aGUgdmVyaWZpZXIgcmVqZWN0cyBhIHByb2dyYW0gdGhhdCBhY2Nlc3MgYSBudWxsYWJsZSBwb2ludGVyXFxuLSAqIHdpdGhvdXQgYSBjaGVjayBiZWZvcmVoYW5kLlxcbisvKlxcbisgKiBUZXN0IHRoYXQgdGhlIHZlcmlmaWVyIGFjY2VwdHMgYSBmYXVsdC1wcm90ZWN0ZWQgcmVhZCB0aHJvdWdoIGEgbnVsbGFibGVcXG4rICogdHJ1c3RlZCBwb2ludGVyIHdpdGhvdXQgYW4gZXhwbGljaXQgTlVMTCBjaGVjay5cXG4gICovXFxuLXN0YXRpYyB2b2lkIG1heWJlX251bGxfZmFpbCh2b2lkKVxcbitzdGF0aWMgdm9pZCBtYXliZV9udWxsX25vX2NoZWNrKHZvaWQpXFxuIHtcXG4gXFx0c3RydWN0IHN0cnVjdF9vcHNfbWF5YmVfbnVsbF9mYWlsICpza2VsO1xcbiBcXG4gXFx0c2tlbCA9IHN0cnVjdF9vcHNfbWF5YmVfbnVsbF9mYWlsX19vcGVuX2FuZF9sb2FkKCk7XFxuLVxcdGlmIChBU1NFUlRfRVJSX1BUUihza2VsLCBcXFwic3RydWN0X29wc19tb2R1bGVfZmFpbF9fb3Blbl9hbmRfbG9hZFxcXCIpKVxcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXFxcInN0cnVjdF9vcHNfbWF5YmVfbnVsbF9mYWlsX19vcGVuX2FuZF9sb2FkXFxcIikpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdHN0cnVjdF9vcHNfbWF5YmVfbnVsbF9mYWlsX19kZXN0cm95KHNrZWwpO1xcbkBAIC00MSw2ICs0Miw2IEBAIHZvaWQgdGVzdF9zdHJ1Y3Rfb3BzX21heWJlX251bGwodm9pZClcXG4gXFx0ICovXFxuIFxcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJtYXliZV9udWxsXFxcIikpXFxuIFxcdFxcdG1heWJlX251bGwoKTtcXG4tXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcIm1heWJlX251bGxfZmFpbFxcXCIpKVxcbi1cXHRcXHRtYXliZV9udWxsX2ZhaWwoKTtcXG4rXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcIm1heWJlX251bGxfbm9fY2hlY2tcXFwiKSlcXG4rXFx0XFx0bWF5YmVfbnVsbF9ub19jaGVjaygpO1xcbiB9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RwX2J0Zl9udWxsYWJsZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHBfYnRmX251bGxhYmxlLmNcXG5pbmRleCBhY2NjNDJlMDFmOGE4Li44MjVmZTdhOTJkNzRmIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RwX2J0Zl9udWxsYWJsZS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHBfYnRmX251bGxhYmxlLmNcXG5AQCAtMiw2ICsyLDMxIEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjdGVzdF9wcm9ncy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXFwidGVzdF90cF9idGZfbnVsbGFibGUuc2tlbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwidGVzdF90cF9idGZfbnVsbGFibGVfcnVudGltZS5za2VsLmhcXFwiXFxuK1xcbitzdGF0aWMgdm9pZCB0ZXN0X251bGxhYmxlX3J1bnRpbWUodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgdGVzdF90cF9idGZfbnVsbGFibGVfcnVudGltZSAqc2tlbDtcXG4rXFxuK1xcdHNrZWwgPSB0ZXN0X3RwX2J0Zl9udWxsYWJsZV9ydW50aW1lX19vcGVuX2FuZF9sb2FkKCk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcXFwib3Blbl9hbmRfbG9hZFxcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZW1vbml0b3JlZF90aWQgPSBzeXNfZ2V0dGlkKCk7XFxuK1xcbitcXHRpZiAoIUFTU0VSVF9PSyh0ZXN0X3RwX2J0Zl9udWxsYWJsZV9ydW50aW1lX19hdHRhY2goc2tlbCksIFxcXCJhdHRhY2hcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRpZiAoIUFTU0VSVF9PSyh0cmlnZ2VyX21vZHVsZV90ZXN0X3JlYWQoMiksIFxcXCJ0cmlnZ2VyXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlY2FsbHMsIDIsIFxcXCJjYWxsc1xcXCIpO1xcbitcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2Vub25udWxsX2xlbiwgMiwgXFxcIm5vbm51bGxfbGVuXFxcIik7XFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZW51bGxfbGVuLCAwLCBcXFwibnVsbF9sZW5cXFwiKTtcXG4rXFxuK291dDpcXG4rXFx0dGVzdF90cF9idGZfbnVsbGFibGVfcnVudGltZV9fZGVzdHJveShza2VsKTtcXG4rfVxcbiBcXG4gdm9pZCB0ZXN0X3RwX2J0Zl9udWxsYWJsZSh2b2lkKVxcbiB7XFxuQEAgLTExLDQgKzM2LDcgQEAgdm9pZCB0ZXN0X3RwX2J0Zl9udWxsYWJsZSh2b2lkKVxcbiBcXHR9XFxuIFxcbiBcXHRSVU5fVEVTVFModGVzdF90cF9idGZfbnVsbGFibGUpO1xcbitcXG4rXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcInJ1bnRpbWVcXFwiKSlcXG4rXFx0XFx0dGVzdF9udWxsYWJsZV9ydW50aW1lKCk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2NvcHlfZnJvbV91c2VyX2Jwcm0uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9jb3B5X2Zyb21fdXNlcl9icHJtLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmIzMzRhMTU3NDE5ZTVcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2NvcHlfZnJvbV91c2VyX2Jwcm0uY1xcbkBAIC0wLDAgKzEsMTIzIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuK1xcbisjaW5jbHVkZSBcXFwidm1saW51eC5oXFxcIlxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9icGZfaGVscGVycy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl90cmFjaW5nLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NlcnJuby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiYnBmX21pc2MuaFxcXCJcXG4rXFxuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcbitcXG4rc3RhdGljIGNvbnN0IGNoYXIgZXhwZWN0ZWRfZGF0YVtdID0gXFxcImZpcnN0XFxcXDBzZWNvbmQtYXJndW1lbnRcXFxcMFxcXCJcXG4rXFx0XFx0XFx0XFx0ICAgIFxcXCJTT01FX0VOVj1hXFxcXDBPVEhFUl9FTlY9c29tZXRoaW5nXFxcIjtcXG4rc3RhdGljIGNvbnN0IGNoYXIgZXhwZWN0ZWRfYXJnMFtdID0gXFxcImZpcnN0XFxcIjtcXG4rc3RhdGljIGNvbnN0IGNoYXIgZXhwZWN0ZWRfYXJnMVtdID0gXFxcInNlY29uZC1hcmd1bWVudFxcXCI7XFxuK3N0YXRpYyBjb25zdCBjaGFyIGV4cGVjdGVkX2VudjBbXSA9IFxcXCJTT01FX0VOVj1hXFxcIjtcXG4rc3RhdGljIGNvbnN0IGNoYXIgZXhwZWN0ZWRfZW52MVtdID0gXFxcIk9USEVSX0VOVj1zb21ldGhpbmdcXFwiO1xcbitcXG4raW50IG1vbml0b3JlZF9waWQ7XFxuK2ludCBicHJtX2FyZ2M7XFxuK2ludCBicHJtX2VudmM7XFxuK2ludCBkYXRhX2xlbl9tYXRjaDtcXG4raW50IGludmFsaWRfZmxhZ3NfcmV0O1xcbitpbnQgY29weV9yZXQ7XFxuK2ludCBzdHJfYXJnMF9yZXQ7XFxuK2ludCBzdHJfYXJnMV9yZXQ7XFxuK2ludCBzdHJfZW52MF9yZXQ7XFxuK2ludCBzdHJfZW52MV9yZXQ7XFxuK2ludCBkYXRhX21hdGNoO1xcbitpbnQgc3RyX2FyZ3NfbWF0Y2g7XFxuK2ludCBzdHJfZW52c19tYXRjaDtcXG4rXFxuK2V4dGVybiBib29sIENPTkZJR19NTVUgX19rY29uZmlnIF9fd2VhaztcXG4rXFxuK2V4dGVybiBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX21tKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osXFxuK1xcdFxcdFxcdFxcdCBjb25zdCB2b2lkICp1bnNhZmVfcHRyX19pZ24sXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdTY0IGZsYWdzKSBfX2tzeW07XFxuK1xcbitleHRlcm4gaW50IGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIodm9pZCAqZHN0LCB1MzIgZHN0X19zeixcXG4rXFx0XFx0XFx0XFx0ICAgICBjb25zdCB2b2lkICp1bnNhZmVfcHRyX19pZ24sXFxuK1xcdFxcdFxcdFxcdCAgICAgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHU2NCBmbGFncykgX19rc3ltO1xcbitcXG4rU0VDKFxcXCJsc20ucy9icHJtX2NoZWNrX3NlY3VyaXR5XFxcIilcXG4raW50IEJQRl9QUk9HKGNoZWNrX2V4ZWNfYXJncywgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcXG4re1xcbitcXHR1MzIgcGlkID0gYnBmX2dldF9jdXJyZW50X3BpZF90Z2lkKCkgXFx1MDAzZVxcdTAwM2UgMzI7XFxuK1xcdGNoYXIgZGF0YVtzaXplb2YoZXhwZWN0ZWRfZGF0YSldID0ge307XFxuK1xcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xcbitcXHRjaGFyIGFyZzBbMzJdID0ge307XFxuK1xcdGNoYXIgYXJnMVszMl0gPSB7fTtcXG4rXFx0Y2hhciBlbnYwWzMyXSA9IHt9O1xcbitcXHRjaGFyIGVudjFbMzJdID0ge307XFxuK1xcdHU2NCBvZmZzZXQgPSAwO1xcbitcXHR1NjQgZGF0YV9sZW47XFxuK1xcbitcXHRpZiAoIUNPTkZJR19NTVUpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKHBpZCAhPSBtb25pdG9yZWRfcGlkKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdG1tID0gYnBybS1cXHUwMDNlbW07XFxuK1xcdGlmICghbW0pXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0YnBybV9hcmdjID0gYnBybS1cXHUwMDNlYXJnYztcXG4rXFx0YnBybV9lbnZjID0gYnBybS1cXHUwMDNlZW52YztcXG4rXFxuK1xcdC8qIHRoaXMgaXMgdGhlIHRvdGFsIHNpemUgb2YgYXJncyBhbmQgZW52cyBzdGFydGluZyBmcm9tIGJwcm0tXFx1MDAzZXAgKi9cXG4rXFx0ZGF0YV9sZW4gPSBicHJtLVxcdTAwM2VleGVjIC0gYnBybS1cXHUwMDNlcDtcXG4rXFx0ZGF0YV9sZW5fbWF0Y2ggPSBkYXRhX2xlbiA9PSBzaXplb2YoZXhwZWN0ZWRfZGF0YSk7XFxuK1xcbitcXHRpbnZhbGlkX2ZsYWdzX3JldCA9IGJwZl9jb3B5X2Zyb21fdXNlcl9tbShkYXRhLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIHNpemVvZihkYXRhKSwgKHZvaWQgKilicHJtLVxcdTAwM2VwLCBtbSwgfjBVTEwpO1xcbitcXG4rXFx0Y29weV9yZXQgPSBicGZfY29weV9mcm9tX3VzZXJfbW0oZGF0YSwgc2l6ZW9mKGRhdGEpLCAodm9pZCAqKWJwcm0tXFx1MDAzZXAsXFxuK1xcdFxcdFxcdFxcdFxcdCBtbSwgMCk7XFxuK1xcdGlmIChjb3B5X3JldClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRkYXRhX21hdGNoID1cXG4rXFx0XFx0IV9fYnVpbHRpbl9tZW1jbXAoZGF0YSwgZXhwZWN0ZWRfZGF0YSwgc2l6ZW9mKGV4cGVjdGVkX2RhdGEpKTtcXG4rXFxuK1xcdC8qIGFyZzAgaXMgYXQgYnBybS1cXHUwMDNlcCAqL1xcbitcXHRzdHJfYXJnMF9yZXQgPSBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKGFyZzAsIHNpemVvZihhcmcwKSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICh2b2lkICopKGJwcm0tXFx1MDAzZXAgKyBvZmZzZXQpLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgbW0sIEJQRl9GX1BBRF9aRVJPUyk7XFxuK1xcdGlmIChzdHJfYXJnMF9yZXQgIT0gc2l6ZW9mKGV4cGVjdGVkX2FyZzApKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0b2Zmc2V0ICs9IHN0cl9hcmcwX3JldDtcXG4rXFxuK1xcdC8qIGFyZzEgaXMgYXQgYnBybS1cXHUwMDNlcCArIHNpemVvZihhcmcwKSAqL1xcbitcXHRzdHJfYXJnMV9yZXQgPSBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKGFyZzEsIHNpemVvZihhcmcxKSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICh2b2lkICopKGJwcm0tXFx1MDAzZXAgKyBvZmZzZXQpLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgbW0sIEJQRl9GX1BBRF9aRVJPUyk7XFxuK1xcdGlmIChzdHJfYXJnMV9yZXQgIT0gc2l6ZW9mKGV4cGVjdGVkX2FyZzEpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0b2Zmc2V0ICs9IHN0cl9hcmcxX3JldDtcXG4rXFxuK1xcdC8qIGVudjAgaXMgYXQgYnBybS1cXHUwMDNlcCArIHNpemVvZihhcmcwKSArIHNpemVvZihhcmcxKSAqL1xcbitcXHRzdHJfZW52MF9yZXQgPSBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKGVudjAsIHNpemVvZihlbnYwKSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICh2b2lkICopKGJwcm0tXFx1MDAzZXAgKyBvZmZzZXQpLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgbW0sIEJQRl9GX1BBRF9aRVJPUyk7XFxuK1xcdGlmIChzdHJfZW52MF9yZXQgIT0gc2l6ZW9mKGV4cGVjdGVkX2VudjApKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0b2Zmc2V0ICs9IHN0cl9lbnYwX3JldDtcXG4rXFxuK1xcdC8qIGVudjEgaXMgYXQgYnBybS1cXHUwMDNlcCArIHNpemVvZihhcmcwKSArIHNpemVvZihhcmcxKSArIHNpemVvZihlbnYwKSAqL1xcbitcXHRzdHJfZW52MV9yZXQgPSBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKGVudjEsIHNpemVvZihlbnYxKSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICh2b2lkICopKGJwcm0tXFx1MDAzZXAgKyBvZmZzZXQpLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgbW0sIEJQRl9GX1BBRF9aRVJPUyk7XFxuK1xcdGlmIChzdHJfZW52MV9yZXQgIT0gc2l6ZW9mKGV4cGVjdGVkX2VudjEpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHN0cl9hcmdzX21hdGNoID1cXG4rXFx0XFx0IV9fYnVpbHRpbl9tZW1jbXAoYXJnMCwgZXhwZWN0ZWRfYXJnMCwgc2l6ZW9mKGV4cGVjdGVkX2FyZzApKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQhX19idWlsdGluX21lbWNtcChhcmcxLCBleHBlY3RlZF9hcmcxLCBzaXplb2YoZXhwZWN0ZWRfYXJnMSkpO1xcbitcXHRzdHJfZW52c19tYXRjaCA9XFxuK1xcdFxcdCFfX2J1aWx0aW5fbWVtY21wKGVudjAsIGV4cGVjdGVkX2VudjAsIHNpemVvZihleHBlY3RlZF9lbnYwKSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0IV9fYnVpbHRpbl9tZW1jbXAoZW52MSwgZXhwZWN0ZWRfZW52MSwgc2l6ZW9mKGV4cGVjdGVkX2VudjEpKTtcXG4rXFxuK1xcdHJldHVybiBkYXRhX21hdGNoIFxcdTAwMjZcXHUwMDI2IHN0cl9hcmdzX21hdGNoIFxcdTAwMjZcXHUwMDI2IHN0cl9lbnZzX21hdGNoID8gLUVQRVJNIDogMDtcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmF3X3RwX251bGxfZmFpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Jhd190cF9udWxsX2ZhaWwuY1xcbmluZGV4IDcyNWQ3M2M5ZmZlMTMuLjE2MzEyNDc5M2QwYTYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Jhd190cF9udWxsX2ZhaWwuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yYXdfdHBfbnVsbF9mYWlsLmNcXG5AQCAtMiwyMiArMiwzNCBAQFxcbiAvKiBDb3B5cmlnaHQgKGMpIDIwMjQgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjdm1saW51eC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcImJwZl9taXNjLmhcXFwiXFxuIFxcbiBjaGFyIF9saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG4gXFxuLS8qIEVuc3VyZSBtb2R1bGUgcGFyYW1ldGVyIGhhcyBQVFJfTUFZQkVfTlVMTCAqL1xcbitleHRlcm4gc3RydWN0IHRhc2tfc3RydWN0ICpicGZfdGFza19hY3F1aXJlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkgX19rc3ltO1xcbitleHRlcm4gdm9pZCBicGZfdGFza19yZWxlYXNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkgX19rc3ltO1xcbitcXG4rLypcXG4rICogRW5zdXJlIHRoZSBtb2R1bGUgdHJhY2Vwb2ludCBhcmd1bWVudCBpcyB0cnVzdGVkLW9yLU5VTEwgd2hpbGUgYWxsb3dpbmdcXG4rICogYSBmYXVsdC1wcm90ZWN0ZWQgcmVhZCB3aXRob3V0IGFuIGV4cGxpY2l0IE5VTEwgY2hlY2suXFxuKyAqL1xcbiBTRUMoXFxcInRwX2J0Zi9icGZfdGVzdG1vZF90ZXN0X3Jhd190cF9udWxsX3RwXFxcIilcXG4tX19mYWlsdXJlIF9fbXNnKFxcXCJSMSBpbnZhbGlkIG1lbSBhY2Nlc3MgJ3RydXN0ZWRfcHRyX29yX251bGxfJ1xcXCIpXFxuK19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxcbitfX21zZyhcXFwiUjE9dHJ1c3RlZF9wdHJfb3JfbnVsbF9za19idWZmXFxcIilcXG4gaW50IHRlc3RfcmF3X3RwX251bGxfYnBmX3Rlc3Rtb2RfdGVzdF9yYXdfdHBfbnVsbF9hcmdfMSh2b2lkICpjdHgpIHtcXG4gICAgIGFzbSB2b2xhdGlsZShcXFwicjEgPSAqKHU2NCAqKShyMSArMCk7IHIxID0gKih1NjQgKikocjEgKzApO1xcXCIgOjo6IF9fY2xvYmJlcl9hbGwpO1xcbiAgICAgcmV0dXJuIDA7XFxuIH1cXG4gXFxuLS8qIENoZWNrIE5VTEwgbWFya2luZyAqL1xcbisvKlxcbisgKiBFbnN1cmUgc2NoZWRfcGlfc2V0cHJpbydzIHNlY29uZCBhcmd1bWVudCBpcyB0cnVzdGVkLW9yLU5VTEwgd2hpbGUgYWxsb3dpbmdcXG4rICogYSBmYXVsdC1wcm90ZWN0ZWQgcmVhZCB3aXRob3V0IGFuIGV4cGxpY2l0IE5VTEwgY2hlY2suXFxuKyAqL1xcbiBTRUMoXFxcInRwX2J0Zi9zY2hlZF9waV9zZXRwcmlvXFxcIilcXG4tX19mYWlsdXJlIF9fbXNnKFxcXCJSMSBpbnZhbGlkIG1lbSBhY2Nlc3MgJ3RydXN0ZWRfcHRyX29yX251bGxfJ1xcXCIpXFxuK19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxcbitfX21zZyhcXFwiUjE9dHJ1c3RlZF9wdHJfb3JfbnVsbF90YXNrX3N0cnVjdFxcXCIpXFxuIGludCB0ZXN0X3Jhd190cF9udWxsX3NjaGVkX3BpX3NldHByaW9fYXJnXzIodm9pZCAqY3R4KSB7XFxuICAgICBhc20gdm9sYXRpbGUoXFxcInIxID0gKih1NjQgKikocjEgKzgpOyByMSA9ICoodTY0ICopKHIxICswKTtcXFwiIDo6OiBfX2Nsb2JiZXJfYWxsKTtcXG4gICAgIHJldHVybiAwO1xcbkBAIC02MCw3ICs3Miw4IEBAIGludCB0ZXN0X3RwX2J0Zl9zaWduYWxfZGVsaXZlcl9pbmZvX25vX2RlcmVmKHZvaWQgKmN0eClcXG4gfVxcbiBcXG4gU0VDKFxcXCJ0cF9idGYvc2NoZWRfcHJvY2Vzc193YWl0XFxcIilcXG4tX19mYWlsdXJlIF9fbXNnKFxcXCJSMSBpbnZhbGlkIG1lbSBhY2Nlc3MgJ3RydXN0ZWRfcHRyX29yX251bGxfJ1xcXCIpXFxuK19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxcbitfX21zZyhcXFwiUjE9dHJ1c3RlZF9wdHJfb3JfbnVsbF9waWRcXFwiKVxcbiBpbnQgdGVzdF9yYXdfdHBfbnVsbF9zY2hlZF9wcm9jZXNzX3dhaXRfYXJnXzEodm9pZCAqY3R4KVxcbiB7XFxuIFxcdGFzbSB2b2xhdGlsZShcXFwicjEgPSAqKHU2NCAqKShyMSArMCk7IHIxID0gKih1MzIgKikocjEgKzApO1xcXCIgOjo6IF9fY2xvYmJlcl9hbGwpO1xcbkBAIC03NSwzICs4OCw1OCBAQCBpbnQgdGVzdF9yYXdfdHBfbnVsbF9zY2hlZF9wcm9jZXNzX3dhaXRfYXJnXzFfY2hlY2tlZCh2b2lkICpjdHgpXFxuIFxcdFxcdCAgICAgXFxcInIxID0gKih1MzIgKikocjEgKzApO1xcXCIgOjo6IF9fY2xvYmJlcl9hbGwpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbitcXG4rU0VDKFxcXCJ0cF9idGYvc2NoZWRfcGlfc2V0cHJpb1xcXCIpXFxuK19fZmFpbHVyZSBfX2xvZ19sZXZlbCgyKVxcbitfX21zZyhcXFwiUjE9dW50cnVzdGVkX3B0cl90YXNrX3N0cnVjdFxcXCIpXFxuK19fbXNnKFxcXCJSMSBtdXN0IGJlIGEgcmN1IHBvaW50ZXJcXFwiKVxcbitpbnQgQlBGX1BST0codHJ1c3RlZF9vcl9udWxsX3dhbGtfaXNfdW50cnVzdGVkLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssXFxuK1xcdCAgICAgc3RydWN0IHRhc2tfc3RydWN0ICpwaV90YXNrKVxcbit7XFxuK1xcdHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50LCAqYWNxdWlyZWQ7XFxuK1xcbitcXHRwYXJlbnQgPSBwaV90YXNrLVxcdTAwM2VyZWFsX3BhcmVudDtcXG4rXFx0YWNxdWlyZWQgPSBicGZfdGFza19hY3F1aXJlKHBhcmVudCk7XFxuK1xcdGlmIChhY3F1aXJlZClcXG4rXFx0XFx0YnBmX3Rhc2tfcmVsZWFzZShhY3F1aXJlZCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitTRUMoXFxcInRwX2J0Zi9zY2hlZF9waV9zZXRwcmlvXFxcIilcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJSMSBtdXN0IGJlIGEgcmN1IHBvaW50ZXJcXFwiKVxcbitpbnQgQlBGX1BST0coZGVyaXZlZF9wdHJfbnVsbF9jaGVja19kb2VzX25vdF9yZXN0b3JlX3RydXN0LFxcbitcXHQgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHRhc2tfc3RydWN0ICpwaV90YXNrKVxcbit7XFxuK1xcdHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50LCAqYWNxdWlyZWQ7XFxuK1xcbitcXHRwYXJlbnQgPSBwaV90YXNrLVxcdTAwM2VyZWFsX3BhcmVudDtcXG4rXFx0aWYgKCFwYXJlbnQpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0YWNxdWlyZWQgPSBicGZfdGFza19hY3F1aXJlKHBhcmVudCk7XFxuK1xcdGlmIChhY3F1aXJlZClcXG4rXFx0XFx0YnBmX3Rhc2tfcmVsZWFzZShhY3F1aXJlZCk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLypcXG4rICogSW4gY29udHJhc3QsIGNoZWNraW5nIHRoZSBvcmlnaW5hbCB0cnVzdGVkLW9yLU5VTEwgcG9pbnRlciByZW1vdmVzXFxuKyAqIFBUUl9NQVlCRV9OVUxMIHdoaWxlIHJldGFpbmluZyBQVFJfVFJVU1RFRC5cXG4rICovXFxuK1NFQyhcXFwidHBfYnRmL3NjaGVkX3BpX3NldHByaW9cXFwiKVxcbitfX3N1Y2Nlc3NcXG4raW50IEJQRl9QUk9HKG9yaWdpbmFsX3B0cl9udWxsX2NoZWNrX3JldGFpbnNfdHJ1c3QsXFxuK1xcdCAgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBpX3Rhc2spXFxuK3tcXG4rXFx0c3RydWN0IHRhc2tfc3RydWN0ICphY3F1aXJlZDtcXG4rXFxuK1xcdGlmICghcGlfdGFzaylcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRhY3F1aXJlZCA9IGJwZl90YXNrX2FjcXVpcmUocGlfdGFzayk7XFxuK1xcdGlmIChhY3F1aXJlZClcXG4rXFx0XFx0YnBmX3Rhc2tfcmVsZWFzZShhY3F1aXJlZCk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90cF9idGZfbnVsbGFibGUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RwX2J0Zl9udWxsYWJsZS5jXFxuaW5kZXggY2YwNTQ3YTYxM2ZmYy4uYjc5MTQyMjRiYTE5NCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90cF9idGZfbnVsbGFibGUuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RwX2J0Zl9udWxsYWJsZS5jXFxuQEAgLTcsNyArNyw3IEBAXFxuICNpbmNsdWRlIFxcXCJicGZfbWlzYy5oXFxcIlxcbiBcXG4gU0VDKFxcXCJ0cF9idGYvYnBmX3Rlc3Rtb2RfdGVzdF9udWxsYWJsZV9iYXJlX3RwXFxcIilcXG4tX19mYWlsdXJlIF9fbXNnKFxcXCJSMSBpbnZhbGlkIG1lbSBhY2Nlc3MgJ3RydXN0ZWRfcHRyX29yX251bGxfJ1xcXCIpXFxuK19fc3VjY2Vzc1xcbiBpbnQgQlBGX1BST0coaGFuZGxlX3RwX2J0Zl9udWxsYWJsZV9iYXJlMSwgc3RydWN0IGJwZl90ZXN0bW9kX3Rlc3RfcmVhZF9jdHggKm51bGxhYmxlX2N0eClcXG4ge1xcbiBcXHRyZXR1cm4gbnVsbGFibGVfY3R4LVxcdTAwM2VsZW47XFxuQEAgLTIxLDQgKzIxLDQ3IEBAIGludCBCUEZfUFJPRyhoYW5kbGVfdHBfYnRmX251bGxhYmxlX2JhcmUyLCBzdHJ1Y3QgYnBmX3Rlc3Rtb2RfdGVzdF9yZWFkX2N0eCAqbnVsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitTRUMoXFxcInRwX2J0Zi9icGZfdGVzdG1vZF90ZXN0X251bGxhYmxlX2JhcmVfdHBcXFwiKVxcbitfX3N1Y2Nlc3NcXG4raW50IEJQRl9QUk9HKGhhbmRsZV90cF9idGZfbnVsbGFibGVfbWVtLCBzdHJ1Y3QgYnBmX3Rlc3Rtb2RfdGVzdF9yZWFkX2N0eCAqbnVsbGFibGVfY3R4KVxcbit7XFxuK1xcdHJldHVybiBudWxsYWJsZV9jdHgtXFx1MDAzZWJ1ZlswXTtcXG4rfVxcbitcXG4rU0VDKFxcXCJ0cF9idGYvYnBmX3Rlc3Rtb2RfdGVzdF9udWxsYWJsZV9iYXJlX3RwXFxcIilcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJwb2ludGVyIGFyaXRobWV0aWMgb24gdHJ1c3RlZF9wdHJfb3JfbnVsbF8gcHJvaGliaXRlZFxcXCIpXFxuK2ludCBCUEZfUFJPRyhoYW5kbGVfdHBfYnRmX251bGxhYmxlX2FyaXRoLCBzdHJ1Y3QgYnBmX3Rlc3Rtb2RfdGVzdF9yZWFkX2N0eCAqbnVsbGFibGVfY3R4KVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZShcXFwiJVtjdHhdICs9IDFcXFwiIDogW2N0eF0gXFxcIityXFxcIihudWxsYWJsZV9jdHgpKTtcXG4rXFx0cmV0dXJuIG51bGxhYmxlX2N0eC1cXHUwMDNlbGVuO1xcbit9XFxuK1xcbitTRUMoXFxcInRwX2J0Zi9icGZfdGVzdG1vZF90ZXN0X251bGxhYmxlX2JhcmVfdHBcXFwiKVxcbitfX2ZhaWx1cmUgX19tc2coXFxcImludmFsaWQgbWVtIGFjY2VzcyAndHJ1c3RlZF9wdHJfb3JfbnVsbF8nXFxcIilcXG4raW50IEJQRl9QUk9HKGhhbmRsZV90cF9idGZfbnVsbGFibGVfYXRvbWljX3JtdyxcXG4rXFx0ICAgICBzdHJ1Y3QgYnBmX3Rlc3Rtb2RfdGVzdF9yZWFkX2N0eCAqbnVsbGFibGVfY3R4KVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxcInIxID0gJVtjdHhdO1xcXCJcXG4rXFx0XFx0ICAgICAgXFxcIncyID0gMTtcXFwiXFxuK1xcdFxcdCAgICAgIFxcXCJsb2NrICoodTMyICopKHIxICsgJVtsZW5dKSArPSB3MjtcXFwiXFxuK1xcdFxcdCAgICAgIDpcXG4rXFx0XFx0ICAgICAgOiBbY3R4XSBcXFwiclxcXCIobnVsbGFibGVfY3R4KSxcXG4rXFx0XFx0XFx0X19pbW1fY29uc3QobGVuLFxcbitcXHRcXHRcXHRcXHQgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl90ZXN0bW9kX3Rlc3RfcmVhZF9jdHgsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgbGVuKSlcXG4rXFx0XFx0ICAgICAgOiBcXFwicjFcXFwiLCBcXFwicjJcXFwiLCBcXFwibWVtb3J5XFxcIik7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisjaWZkZWYgX19CUEZfRkVBVFVSRV9MT0FEX0FDUV9TVE9SRV9SRUxcXG4rU0VDKFxcXCJ0cF9idGYvYnBmX3Rlc3Rtb2RfdGVzdF9udWxsYWJsZV9iYXJlX3RwXFxcIilcXG4rX19mYWlsdXJlXFxuK19fbXNnKFxcXCJCUEZfQVRPTUlDIGxvYWRzIGZyb20gUnt7WzAtOV0rfX0gdHJ1c3RlZF9wdHJfb3JfbnVsbF9cXFwiKVxcbitpbnQgQlBGX1BST0coaGFuZGxlX3RwX2J0Zl9udWxsYWJsZV9sb2FkX2FjcXVpcmUsXFxuK1xcdCAgICAgc3RydWN0IGJwZl90ZXN0bW9kX3Rlc3RfcmVhZF9jdHggKm51bGxhYmxlX2N0eClcXG4re1xcbitcXHRyZXR1cm4gX19hdG9taWNfbG9hZF9uKFxcdTAwMjZudWxsYWJsZV9jdHgtXFx1MDAzZWxlbiwgX19BVE9NSUNfQUNRVUlSRSk7XFxuK31cXG4rI2VuZGlmXFxuK1xcbiBjaGFyIF9saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdHBfYnRmX251bGxhYmxlX3J1bnRpbWUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RwX2J0Zl9udWxsYWJsZV9ydW50aW1lLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjVjOWM3Zjk0MDQwZGNcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdHBfYnRmX251bGxhYmxlX3J1bnRpbWUuY1xcbkBAIC0wLDAgKzEsMzUgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rXFxuKyNpbmNsdWRlIFxcXCJ2bWxpbnV4LmhcXFwiXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiLi4vdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5oXFxcIlxcbitcXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuK1xcbitpbnQgbW9uaXRvcmVkX3RpZDtcXG4raW50IGNhbGxzO1xcbitfX3U2NCBub25udWxsX2xlbjtcXG4rX191NjQgbnVsbF9sZW47XFxuK1xcbitTRUMoXFxcInRwX2J0Zi9icGZfdGVzdG1vZF90ZXN0X251bGxhYmxlX2JhcmVfdHBcXFwiKVxcbitpbnQgQlBGX1BST0coaGFuZGxlX251bGxhYmxlX3J1bnRpbWUsXFxuK1xcdCAgICAgc3RydWN0IGJwZl90ZXN0bW9kX3Rlc3RfcmVhZF9jdHggKm51bGxhYmxlX2N0eClcXG4re1xcbitcXHRfX3UzMiB0aWQgPSBicGZfZ2V0X2N1cnJlbnRfcGlkX3RnaWQoKTtcXG4rXFx0X191NjQgbGVuO1xcbitcXHRpbnQgY2FsbDtcXG4rXFxuK1xcdGlmICh0aWQgIT0gbW9uaXRvcmVkX3RpZClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRsZW4gPSBudWxsYWJsZV9jdHgtXFx1MDAzZWxlbjtcXG4rXFx0Y2FsbCA9IGNhbGxzKys7XFxuK1xcbitcXHRpZiAoY2FsbCA9PSAwKVxcbitcXHRcXHRub25udWxsX2xlbiA9IGxlbjtcXG4rXFx0ZWxzZSBpZiAoY2FsbCA9PSAxKVxcbitcXHRcXHRudWxsX2xlbiA9IGxlbjtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sc20uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sc20uY1xcbmluZGV4IGM3MjRiZjM4OWY1YzYuLmZhYzEzM2Q5MGY1ZTYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xzbS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xzbS5jXFxuQEAgLTE2MiwxMyArMTYyLDEzIEBAIF9fbmFrZWQgaW50IGRpc2FibGVkX2hvb2tfdGVzdDModm9pZCAqY3R4KVxcbiBcXG4gU0VDKFxcXCJsc20vbW1hcF9maWxlXFxcIilcXG4gX19kZXNjcmlwdGlvbihcXFwibm90IG51bGwgY2hlY2tpbmcgbnVsbGFibGUgcG9pbnRlciBpbiBicGZfbHNtX21tYXBfZmlsZVxcXCIpXFxuLV9fZmFpbHVyZSBfX21zZyhcXFwiUjEgaW52YWxpZCBtZW0gYWNjZXNzICd0cnVzdGVkX3B0cl9vcl9udWxsXydcXFwiKVxcbitfX3N1Y2Nlc3NcXG4gaW50IEJQRl9QUk9HKG5vX251bGxfY2hlY2ssIHN0cnVjdCBmaWxlICpmaWxlKVxcbiB7XFxuLVxcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XFxuK1xcdGlub190IGlubztcXG4gXFxuLVxcdGlub2RlID0gZmlsZS1cXHUwMDNlZl9pbm9kZTtcXG4tXFx0X19zaW5rKGlub2RlKTtcXG4rXFx0aW5vID0gZmlsZS1cXHUwMDNlZl9pbm9kZS1cXHUwMDNlaV9pbm87XFxuK1xcdF9fc2luayhpbm8pO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtMTg4LDYgKzE4OCwxNiBAQCBpbnQgQlBGX1BST0cobnVsbF9jaGVjaywgc3RydWN0IGZpbGUgKmZpbGUpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitTRUMoXFxcImxzbS9tbWFwX2ZpbGVcXFwiKVxcbitfX2Rlc2NyaXB0aW9uKFxcXCJzdG9yZSB0aHJvdWdoIHRydXN0ZWQtb3ItbnVsbCBmaWxlIGlzIHJlamVjdGVkXFxcIilcXG4rX19mYWlsdXJlXFxuK19fbXNnKFxcXCJSe3tbMC05XSt9fSBpbnZhbGlkIG1lbSBhY2Nlc3MgJ3RydXN0ZWRfcHRyX29yX251bGxfJ1xcXCIpXFxuK2ludCBCUEZfUFJPRyhzdG9yZV90aHJvdWdoX3RydXN0ZWRfb3JfbnVsbF9maWxlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4re1xcbitcXHRmaWxlLVxcdTAwM2VmX2ZsYWdzID0gMDtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIFNFQyhcXFwibHNtX2Nncm91cC9maWxlX29wZW5cXFwiKVxcbiBfX2Rlc2NyaXB0aW9uKFxcXCJzbGVlcGFibGUgbHNtX2Nncm91cCBwcm9ncmFtIGlzIHJlamVjdGVkXFxcIilcXG4gX19mYWlsdXJlIF9fbXNnKFxcXCJQcm9ncmFtIG9mIHRoaXMgdHlwZSBjYW5ub3QgYmUgc2xlZXBhYmxlXFxcIilcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3Zmc19hY2NlcHQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl92ZnNfYWNjZXB0LmNcXG5pbmRleCA1NTM5OGMwNDI5MGE4Li4xN2MxNTQyY2M3ZTE3IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl92ZnNfYWNjZXB0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdmZzX2FjY2VwdC5jXFxuQEAgLTEwMCw0ICsxMDAsMTggQEAgaW50IEJQRl9QUk9HKGlub2RlX3JlbmFtZSwgc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rU0VDKFxcXCJsc20ucy9pbm9kZV9yZW5hbWVcXFwiKVxcbitfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcXG4rX19tc2coXFxcIlJ7e1swLTldK319PXRydXN0ZWRfcHRyX29yX251bGxfaW5vZGVcXFwiKVxcbitpbnQgQlBGX1BST0coaW5vZGVfcmVuYW1lX25vX251bGxfY2hlY2ssIHN0cnVjdCBpbm9kZSAqb2xkX2RpcixcXG4rXFx0ICAgICBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKm5ld19kaXIsXFxuK1xcdCAgICAgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSwgdW5zaWduZWQgaW50IGZsYWdzKVxcbit7XFxuK1xcdGlub190IGlubyA9IG5ld19kZW50cnktXFx1MDAzZWRfaW5vZGUtXFx1MDAzZWlfaW5vO1xcbitcXG4rXFx0aWYgKGlubyA9PSAwKVxcbitcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIGNoYXIgX2xpY2Vuc2VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdmZzX3JlamVjdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3Zmc19yZWplY3QuY1xcbmluZGV4IDhmMGM0NTQyMWY4OTMuLjJhMDgxMzI1ODE4M2UgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3Zmc19yZWplY3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl92ZnNfcmVqZWN0LmNcXG5AQCAtMTU5LDE4ICsxNTksNCBAQCBpbnQgQlBGX1BST0cocGF0aF9kX3BhdGhfa2Z1bmNfbm9uX2xzbSwgc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBmaWxlICpmKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tU0VDKFxcXCJsc20ucy9pbm9kZV9yZW5hbWVcXFwiKVxcbi1fX2ZhaWx1cmUgX19tc2coXFxcImludmFsaWQgbWVtIGFjY2VzcyAndHJ1c3RlZF9wdHJfb3JfbnVsbF8nXFxcIilcXG4taW50IEJQRl9QUk9HKGlub2RlX3JlbmFtZSwgc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxcbi1cXHQgICAgIHN0cnVjdCBpbm9kZSAqbmV3X2Rpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSxcXG4tXFx0ICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuLXtcXG4tXFx0c3RydWN0IGlub2RlICppbm9kZSA9IG5ld19kZW50cnktXFx1MDAzZWRfaW5vZGU7XFxuLVxcdGlub190IGlubztcXG4tXFxuLVxcdGlubyA9IGlub2RlLVxcdTAwM2VpX2lubztcXG4tXFx0aWYgKGlubyA9PSAwKVxcbi1cXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4gY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jXFxuaW5kZXggZjc5OGJiYmI0ZDEzYy4uMmJhNmE4M2QyNDNmNSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuY1xcbkBAIC03MDIsNiArNzAyLDcgQEAgYnBmX3Rlc3Rtb2RfdGVzdF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4gXFx0aWYgKGJwZl90ZXN0bW9kX2xvb3BfdGVzdCgxMDEpIFxcdTAwM2UgMTAwKVxcbiBcXHRcXHR0cmFjZV9icGZfdGVzdG1vZF90ZXN0X3JlYWQoY3VycmVudCwgXFx1MDAyNmN0eCk7XFxuIFxcbitcXHR0cmFjZV9icGZfdGVzdG1vZF90ZXN0X251bGxhYmxlX2JhcmVfdHAoXFx1MDAyNmN0eCk7XFxuIFxcdHRyYWNlX2JwZl90ZXN0bW9kX3Rlc3RfbnVsbGFibGVfYmFyZV90cChOVUxMKTtcXG4gXFxuIFxcdC8qIE1hZ2ljIG51bWJlciB0byBlbmFibGUgd3JpdGFibGUgdHAgKi9cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2NoZWRfZXh0L21heWJlX251bGxfZmFpbF9kc3AuYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zY2hlZF9leHQvbWF5YmVfbnVsbF9mYWlsX2RzcC5icGYuY1xcbmluZGV4IGVjNzI0ZDdiMzNkMTguLmVjYWEzNjM1NWNhZWMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2NoZWRfZXh0L21heWJlX251bGxfZmFpbF9kc3AuYnBmLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zY2hlZF9leHQvbWF5YmVfbnVsbF9mYWlsX2RzcC5icGYuY1xcbkBAIC03LDE0ICs3LDEzIEBAXFxuIFxcbiBjaGFyIF9saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG4gXFxuLXU2NCB2dGltZV90ZXN0O1xcbi1cXG4gdm9pZCBCUEZfU1RSVUNUX09QUyhtYXliZV9udWxsX3J1bm5pbmcsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcXG4ge31cXG4gXFxuIHZvaWQgQlBGX1NUUlVDVF9PUFMobWF5YmVfbnVsbF9mYWlsX2Rpc3BhdGNoLCBzMzIgY3B1LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXFxuIHtcXG4tXFx0dnRpbWVfdGVzdCA9IHAtXFx1MDAzZXNjeC5kc3FfdnRpbWU7XFxuK1xcdC8qIFBvaW50ZXIgYXJpdGhtZXRpYyBvbiBhIHRydXN0ZWQtb3ItTlVMTCBwb2ludGVyIG11c3QgYmUgcmVqZWN0ZWQuICovXFxuK1xcdGFzbSB2b2xhdGlsZShcXFwiJVtwXSArPSAwXFxcIiA6IFtwXSBcXFwiK3JcXFwiKHApKTtcXG4gfVxcbiBcXG4gU0VDKFxcXCIuc3RydWN0X29wcy5saW5rXFxcIilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjA6MjA6NTUuNjc4NTkxNjUzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0MTU1Nzc2NzI1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiREVCVUdfSU5GT19CVEZcIixcbiAgICBcIkJQRl9MU01cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfY29weV9mcm9tX3VzZXJfbW1cIixcbiAgICBcImJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHJcIixcbiAgICBcImJwZl9jb3B5X2Zyb21fdXNlcl90YXNrXCIsXG4gICAgXCJicGZfY29weV9mcm9tX3VzZXJfdGFza19zdHJcIixcbiAgICBcImNvcHlfcmVtb3RlX21tX3N0clwiLFxuICAgIFwiY29weV9yZW1vdGVfdm1fc3RyXCIsXG4gICAgXCJfX2NvcHlfcmVtb3RlX21tX3N0clwiLFxuICAgIFwiY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3NcIixcbiAgICBcInR5cGVfaXNfdHJ1c3RlZF9vcl9udWxsXCIsXG4gICAgXCJjaGVja19tZW1fYWNjZXNzXCIsXG4gICAgXCJicGZfY29udmVydF9jdHhfYWNjZXNzZXNcIixcbiAgICBcImZyZWVfYnBybVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IHNsZWVwYWJsZSBCUEYga2Z1bmNzIChicGZfY29weV9mcm9tX3VzZXJfbW0gYW5kIGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIpLCByZWZhY3RvcnMgcmVtb3RlIE1NIHN0cmluZyBjb3B5aW5nIGhlbHBlcnMgYWNyb3NzIG1tLyBhbmQga2VybmVsL2JwZi8sIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gYWxsb3cgZmF1bHQtcHJvdGVjdGVkIGxvYWRzIHRocm91Z2ggdHJ1c3RlZC1vci1udWxsIHBvaW50ZXJzLCBhbmQgYWx0ZXJzIG1tIGNsZWFudXAgaW4gZnJlZV9icHJtKCkuIFRoZXNlIGNoYW5nZXMgdG91Y2ggY29yZSBCUEYgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IGV4ZWN1dGlvbiBwYXRocyByZWFjaGFibGUgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMgdmlhIEJQRiBhbmQgZXhlYyBzeXNjYWxscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkYjc3YWY2NmIzYWEwN2IxM2RjODNhYWZjYTFiOGIwYTAyOTFhMWZiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAyMDoyMDo1MyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4ZWMuYyBiL2ZzL2V4ZWMuY1xuaW5kZXggNzQ1ZjZlYjUyNzllNi4uNGRkZDQwM2ZkOTFjNyAxMDA2NDRcbi0tLSBhL2ZzL2V4ZWMuY1xuKysrIGIvZnMvZXhlYy5jXG5AQCAtMTQ1Niw5ICsxNDU2LDEyIEBAIHZvaWQgYnBybV9kcm9wX2xvYWRlcihzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuIFxuIHN0YXRpYyB2b2lkIGZyZWVfYnBybShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuIHtcbi1cdGlmIChicHJtLVx1MDAzZW1tKSB7XG4rXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGJwcm0tXHUwMDNlbW07XG4rXG4rXHRpZiAobW0pIHtcbiBcdFx0YWNjdF9hcmdfc2l6ZShicHJtLCAwKTtcbi1cdFx0bW1wdXQoYnBybS1cdTAwM2VtbSk7XG4rXHRcdGJwcm0tXHUwMDNlbW0gPSBOVUxMO1xuK1x0XHRtbXB1dChtbSk7XG4gXHR9XG4gXHRpZiAoYnBybS1cdTAwM2V1c2VyX25zKVxuIFx0XHRwdXRfdXNlcl9ucyhicHJtLVx1MDAzZXVzZXJfbnMpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmggYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG5pbmRleCA5NzI3ZGY1YWY4M2FiLi40ZjAzMmFkODNjNjc1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuKysrIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuQEAgLTEzMzksNiArMTMzOSwxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYnBmX2lzX3B0cl90b19tZW1fb3JfYnRmX2lkKGVudW0gYnBmX3JlZ190eXBlIHR5cGUpXG4gXHR9XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBicGZfaXNfdHJ1c3RlZF9vcl9udWxsX2J0Zl9wdHIoZW51bSBicGZfcmVnX3R5cGUgdHlwZSlcbit7XG4rXHRyZXR1cm4gdHlwZSA9PSAoUFRSX1RPX0JURl9JRCB8IFBUUl9UUlVTVEVEIHwgUFRSX01BWUJFX05VTEwpO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIGJvb2wgYnBmX21heV9mYXVsdF9vbl9kZXJlZihlbnVtIGJwZl9yZWdfdHlwZSB0eXBlKVxuIHtcbiBcdC8qXG5AQCAtMTM0Niw3ICsxMzUxLDkgQEAgc3RhdGljIGlubGluZSBib29sIGJwZl9tYXlfZmF1bHRfb25fZGVyZWYoZW51bSBicGZfcmVnX3R5cGUgdHlwZSlcbiBcdCAqIHByb3RlY3Rpb24sIHRoYXQgaXMsIHRoZSBvbmVzIGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcygpIGhhcyB0b1xuIFx0ICogdHVybiBhIEJQRl9MRFggaW50byBhIEJQRl9QUk9CRV9NRU0gb25lIGZvci5cbiBcdCAqL1xuLVx0cmV0dXJuIHR5cGUgPT0gUFRSX1RPX0JURl9JRCB8fCAodHlwZV9mbGFnKHR5cGUpIFx1MDAyNiBQVFJfVU5UUlVTVEVEKTtcbitcdHJldHVybiB0eXBlID09IFBUUl9UT19CVEZfSUQgfHxcbitcdCAgICAgICAodHlwZV9mbGFnKHR5cGUpIFx1MDAyNiBQVFJfVU5UUlVTVEVEKSB8fFxuK1x0ICAgICAgIGJwZl9pc190cnVzdGVkX29yX251bGxfYnRmX3B0cih0eXBlKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBib29sIGJwZl9wcm9nX2hhc19hcmVuYV9jdHhfYXJnKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmhcbmluZGV4IGRkMDljNDM4ZmEyM2UuLmQ1YmRlMWY3MWE5N2UgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbW0uaFxuQEAgLTMzMjYsNiArMzMyNiw4IEBAIGV4dGVybiBpbnQgYWNjZXNzX3JlbW90ZV92bShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHR2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpO1xuIFxuICNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbitleHRlcm4gaW50IGNvcHlfcmVtb3RlX21tX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuK1x0XHRcdCAgICAgIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncyk7XG4gZXh0ZXJuIGludCBjb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0XHQgICAgICB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpO1xuICNlbmRpZlxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvaGVscGVycy5jIGIva2VybmVsL2JwZi9oZWxwZXJzLmNcbmluZGV4IGIzY2M1YzhmYzg3NTYuLmQzYzU2NDQzN2FkMDYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2hlbHBlcnMuY1xuKysrIGIva2VybmVsL2JwZi9oZWxwZXJzLmNcbkBAIC0zMiw2ICszMiwxMCBAQFxuIFxuICNpbmNsdWRlIFwiLi4vLi4vbGliL2tzdHJ0b3guaFwiXG4gXG4rX19icGZfa2Z1bmMgaW50IGJwZl9jb3B5X2Zyb21fdXNlcl9tbSh2b2lkICpkc3QsIHUzMiBkc3RfX3N6LFxuK1x0XHRcdFx0ICAgICAgY29uc3Qgdm9pZCBfX3VzZXIgKnVuc2FmZV9wdHJfX2lnbixcbitcdFx0XHRcdCAgICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1NjQgZmxhZ3MpO1xuK1xuIC8qIElmIGtlcm5lbCBzdWJzeXN0ZW0gaXMgYWxsb3dpbmcgZUJQRiBwcm9ncmFtcyB0byBjYWxsIHRoaXMgZnVuY3Rpb24sXG4gICogaW5zaWRlIGl0cyBvd24gdmVyaWZpZXJfb3BzLVx1MDAzZWdldF9mdW5jX3Byb3RvKCkgY2FsbGJhY2sgaXQgc2hvdWxkIHJldHVyblxuICAqIGJwZl9tYXBfbG9va3VwX2VsZW1fcHJvdG8sIHNvIHRoYXQgdmVyaWZpZXIgY2FuIHByb3Blcmx5IGNoZWNrIHRoZSBhcmd1bWVudHNcbkBAIC02ODIsMjIgKzY4NiwxNSBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2NvcHlfZnJvbV91c2VyX3Byb3RvID0ge1xuIEJQRl9DQUxMXzUoYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2ssIHZvaWQgKiwgZHN0LCB1MzIsIHNpemUsXG4gXHQgICBjb25zdCB2b2lkIF9fdXNlciAqLCB1c2VyX3B0ciwgc3RydWN0IHRhc2tfc3RydWN0ICosIHRzaywgdTY0LCBmbGFncylcbiB7XG4rXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcbiBcdGludCByZXQ7XG4gXG4tXHQvKiBmbGFncyBpcyBub3QgdXNlZCB5ZXQgKi9cbi1cdGlmICh1bmxpa2VseShmbGFncykpXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVxuLVx0aWYgKHVubGlrZWx5KCFzaXplKSlcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRyZXQgPSBhY2Nlc3NfcHJvY2Vzc192bSh0c2ssICh1bnNpZ25lZCBsb25nKXVzZXJfcHRyLCBkc3QsIHNpemUsIDApO1xuLVx0aWYgKHJldCA9PSBzaXplKVxuLVx0XHRyZXR1cm4gMDtcbitcdG1tID0gZ2V0X3Rhc2tfbW0odHNrKTtcbitcdHJldCA9IGJwZl9jb3B5X2Zyb21fdXNlcl9tbShkc3QsIHNpemUsIHVzZXJfcHRyLCBtbSwgZmxhZ3MpO1xuK1x0aWYgKG1tKVxuK1x0XHRtbXB1dChtbSk7XG4gXG4tXHRtZW1zZXQoZHN0LCAwLCBzaXplKTtcbi1cdC8qIFJldHVybiAtRUZBVUxUIGZvciBwYXJ0aWFsIHJlYWQgKi9cbi1cdHJldHVybiByZXQgXHUwMDNjIDAgPyByZXQgOiAtRUZBVUxUO1xuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3Byb3RvID0ge1xuQEAgLTM2NTgsNiArMzY1NSwxMDAgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9jb3B5X2Zyb21fdXNlcl9zdHIodm9pZCAqZHN0LCB1MzIgZHN0X19zeiwgY29uc3Qgdm9pZCBfX3VzZXJcbiBcdHJldHVybiByZXQgKyAxO1xuIH1cbiBcbisvKipcbisgKiBicGZfY29weV9mcm9tX3VzZXJfbW0oKSAtIENvcHkgZGF0YSBmcm9tIGFuIGFkZHJlc3Mgc3BhY2VcbisgKiBAZHN0OiAgICAgICAgICAgICBEZXN0aW5hdGlvbiBhZGRyZXNzLCBpbiBrZXJuZWwgc3BhY2VcbisgKiBAZHN0X19zejogICAgICAgICBOdW1iZXIgb2YgYnl0ZXMgdG8gY29weVxuKyAqIEB1bnNhZmVfcHRyX19pZ246IFNvdXJjZSBhZGRyZXNzIGluIHRoZSBhZGRyZXNzIHNwYWNlXG4rICogQG1tOiAgICAgICAgICAgICAgQWRkcmVzcyBzcGFjZSB0byBjb3B5IGZyb21cbisgKiBAZmxhZ3M6ICAgICAgICAgICBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZTsgbXVzdCBiZSB6ZXJvXG4rICpcbisgKiBDb3BpZXMgZGF0YSBmcm9tIHRoZSB1c2VyIGFkZHJlc3Mgc3BhY2UgYXNzb2NpYXRlZCB3aXRoIEBtbS4gVGhlIGRlc3RpbmF0aW9uXG4rICogaXMgemVyb2VkIGlmIGFuIGF0dGVtcHRlZCBjb3B5IGNhbm5vdCBiZSBjb21wbGV0ZWQgaW4gZnVsbC4gVW5zdXBwb3J0ZWRcbisgKiBmbGFncyByZXR1cm4gLUVJTlZBTCB3aXRob3V0IG1vZGlmeWluZyBAZHN0LlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FSU5WQUwgaWYgQGZsYWdzIGlzIG5vbi16ZXJvLCBvciAtRUZBVUxUIGlmIHRoZSBjb3B5XG4rICogZmFpbHMgb3IgaXMgcGFydGlhbC5cbisgKi9cbitfX2JwZl9rZnVuYyBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX21tKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osXG4rXHRcdFx0XHQgICAgICBjb25zdCB2b2lkIF9fdXNlciAqdW5zYWZlX3B0cl9faWduLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHU2NCBmbGFncylcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKHVubGlrZWx5KGZsYWdzKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpZiAodW5saWtlbHkoIWRzdF9fc3opKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmICh1bmxpa2VseSghbW0pKSB7XG4rXHRcdG1lbXNldChkc3QsIDAsIGRzdF9fc3opO1xuK1x0XHRyZXR1cm4gLUVGQVVMVDtcbitcdH1cbitcbitcdHJldCA9IGFjY2Vzc19yZW1vdGVfdm0obW0sICh1bnNpZ25lZCBsb25nKXVuc2FmZV9wdHJfX2lnbixcbitcdFx0XHQgICAgICAgZHN0LCBkc3RfX3N6LCAwKTtcbitcdGlmIChyZXQgPT0gZHN0X19zeilcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRtZW1zZXQoZHN0LCAwLCBkc3RfX3N6KTtcbitcdHJldHVybiByZXQgXHUwMDNjIDAgPyByZXQgOiAtRUZBVUxUO1xuK31cbitcbisvKipcbisgKiBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKCkgLSBDb3B5IGEgc3RyaW5nIGZyb20gYW4gYWRkcmVzcyBzcGFjZVxuKyAqIEBkc3Q6ICAgICAgICAgICAgIERlc3RpbmF0aW9uIGFkZHJlc3MsIGluIGtlcm5lbCBzcGFjZS4gVGhpcyBidWZmZXIgbXVzdCBiZVxuKyAqICAgICAgICAgICAgICAgICAgIGF0IGxlYXN0IEBkc3RfX3N6IGJ5dGVzIGxvbmdcbisgKiBAZHN0X19zejogICAgICAgICBNYXhpbXVtIG51bWJlciBvZiBieXRlcyB0byBjb3B5LCBpbmNsdWRpbmcgdGhlIHRyYWlsaW5nIE5VTFxuKyAqIEB1bnNhZmVfcHRyX19pZ246IFNvdXJjZSBhZGRyZXNzIGluIHRoZSBhZGRyZXNzIHNwYWNlXG4rICogQG1tOiAgICAgICAgICAgICAgQWRkcmVzcyBzcGFjZSB0byBjb3B5IGZyb21cbisgKiBAZmxhZ3M6ICAgICAgICAgICBUaGUgb25seSBzdXBwb3J0ZWQgZmxhZyBpcyBCUEZfRl9QQURfWkVST1NcbisgKlxuKyAqIENvcGllcyBhIE5VTC10ZXJtaW5hdGVkIHN0cmluZyBmcm9tIHRoZSB1c2VyIGFkZHJlc3Mgc3BhY2UgYXNzb2NpYXRlZCB3aXRoXG4rICogQG1tLiBJZiB0aGUgc3RyaW5nIGlzIHRvbyBsb25nLCBAZHN0IGlzIHN0aWxsIE5VTC10ZXJtaW5hdGVkIHVubGVzcyBAZHN0X19zelxuKyAqIGlzIHplcm8uXG4rICpcbisgKiBJZiB0aGUgZmxhZ3MgYXJlIHZhbGlkIGFuZCBCUEZfRl9QQURfWkVST1MgaXMgc2V0LCB0aGUgdW51c2VkIHBvcnRpb24gb2ZcbisgKiBAZHN0IGlzIGNsZWFyZWQgb24gc3VjY2VzcyBhbmQgYWxsIG9mIEBkc3QgaXMgY2xlYXJlZCBvbiBhIGNvcHkgZmFpbHVyZS5cbisgKiBVbnN1cHBvcnRlZCBmbGFncyByZXR1cm4gLUVJTlZBTCB3aXRob3V0IG1vZGlmeWluZyBAZHN0LlxuKyAqXG4rICogUmV0dXJuOiBUaGUgbnVtYmVyIG9mIGNvcGllZCBieXRlcyBpbmNsdWRpbmcgdGhlIE5VTCB0ZXJtaW5hdG9yIG9uIHN1Y2Nlc3MsXG4rICogb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXG4rICovXG4rX19icGZfa2Z1bmMgaW50IGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIodm9pZCAqZHN0LCB1MzIgZHN0X19zeixcbitcdFx0XHRcdFx0ICBjb25zdCB2b2lkIF9fdXNlciAqdW5zYWZlX3B0cl9faWduLFxuK1x0XHRcdFx0XHQgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1NjQgZmxhZ3MpXG4re1xuK1x0aW50IHJldDtcbitcbitcdGlmICh1bmxpa2VseShmbGFncyBcdTAwMjYgfkJQRl9GX1BBRF9aRVJPUykpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0aWYgKHVubGlrZWx5KGRzdF9fc3ogPT0gMCkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKHVubGlrZWx5KCFtbSkpIHtcbitcdFx0aWYgKGZsYWdzIFx1MDAyNiBCUEZfRl9QQURfWkVST1MpXG4rXHRcdFx0bWVtc2V0KGRzdCwgMCwgZHN0X19zeik7XG4rXHRcdGVsc2VcbitcdFx0XHQqKGNoYXIgKilkc3QgPSAnXFwwJztcbitcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXHR9XG4rXG4rXHRyZXQgPSBjb3B5X3JlbW90ZV9tbV9zdHIobW0sICh1bnNpZ25lZCBsb25nKXVuc2FmZV9wdHJfX2lnbiwgZHN0LCBkc3RfX3N6LCAwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApIHtcbitcdFx0aWYgKGZsYWdzIFx1MDAyNiBCUEZfRl9QQURfWkVST1MpXG4rXHRcdFx0bWVtc2V0KGRzdCwgMCwgZHN0X19zeik7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9GX1BBRF9aRVJPUylcbitcdFx0bWVtc2V0KGRzdCArIHJldCwgMCwgZHN0X19zeiAtIHJldCk7XG4rXG4rXHRyZXR1cm4gcmV0ICsgMTtcbit9XG4rXG4gLyoqXG4gICogYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyKCkgLSBDb3B5IGEgc3RyaW5nIGZyb20gYW4gdGFzaydzIGFkZHJlc3Mgc3BhY2VcbiAgKiBAZHN0OiAgICAgICAgICAgICBEZXN0aW5hdGlvbiBhZGRyZXNzLCBpbiBrZXJuZWwgc3BhY2UuICBUaGlzIGJ1ZmZlciBtdXN0IGJlXG5AQCAtMzY4MSwyNSArMzc3MiwxNiBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osXG4gXHRcdFx0XHRcdCAgICBjb25zdCB2b2lkIF9fdXNlciAqdW5zYWZlX3B0cl9faWduLFxuIFx0XHRcdFx0XHQgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHU2NCBmbGFncylcbiB7XG4rXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcbiBcdGludCByZXQ7XG4gXG4tXHRpZiAodW5saWtlbHkoZmxhZ3MgXHUwMDI2IH5CUEZfRl9QQURfWkVST1MpKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cbi1cdGlmICh1bmxpa2VseShkc3RfX3N6ID09IDApKVxuLVx0XHRyZXR1cm4gMDtcbitcdG1tID0gZ2V0X3Rhc2tfbW0odHNrKTtcbitcdHJldCA9IGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIoZHN0LCBkc3RfX3N6LCB1bnNhZmVfcHRyX19pZ24sXG4rXHRcdFx0XHRcdG1tLCBmbGFncyk7XG4rXHRpZiAobW0pXG4rXHRcdG1tcHV0KG1tKTtcbiBcbi1cdHJldCA9IGNvcHlfcmVtb3RlX3ZtX3N0cih0c2ssICh1bnNpZ25lZCBsb25nKXVuc2FmZV9wdHJfX2lnbiwgZHN0LCBkc3RfX3N6LCAwKTtcbi1cdGlmIChyZXQgXHUwMDNjIDApIHtcbi1cdFx0aWYgKGZsYWdzIFx1MDAyNiBCUEZfRl9QQURfWkVST1MpXG4tXHRcdFx0bWVtc2V0KGRzdCwgMCwgZHN0X19zeik7XG4tXHRcdHJldHVybiByZXQ7XG4tXHR9XG4tXG4tXHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9GX1BBRF9aRVJPUylcbi1cdFx0bWVtc2V0KGRzdCArIHJldCwgMCwgZHN0X19zeiAtIHJldCk7XG4tXG4tXHRyZXR1cm4gcmV0ICsgMTtcbitcdHJldHVybiByZXQ7XG4gfVxuIFxuIC8qIEtlZXAgdW5zaWduZWQgbG9uZyBpbiBwcm90b3R5cGUgc28gdGhhdCBrZnVuYyBpcyB1c2FibGUgd2hlbiBlbWl0dGVkIHRvXG5AQCAtNDkyNCw2ICs1MDA2LDggQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX2JpdHNfbmV3LCBLRl9JVEVSX05FVylcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfYml0c19uZXh0LCBLRl9JVEVSX05FWFQgfCBLRl9SRVRfTlVMTClcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfYml0c19kZXN0cm95LCBLRl9JVEVSX0RFU1RST1kpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jb3B5X2Zyb21fdXNlcl9zdHIsIEtGX1NMRUVQQUJMRSlcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2NvcHlfZnJvbV91c2VyX21tLCBLRl9TTEVFUEFCTEUpXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIsIEtGX1NMRUVQQUJMRSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyLCBLRl9TTEVFUEFCTEUpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9nZXRfa21lbV9jYWNoZSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfa21lbV9jYWNoZV9uZXcsIEtGX0lURVJfTkVXIHwgS0ZfU0xFRVBBQkxFKVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggOWU3OTc1MGUyNDgwOC4uNjc5OWQ5ZTA4MGZjNSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtNjAwNCw2ICs2MDA0LDEwIEBAIEJURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMKHN0cnVjdCBkZW50cnkpIHtcbiBcdHN0cnVjdCBpbm9kZSAqZF9pbm9kZTtcbiB9O1xuIFxuK0JURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMKHN0cnVjdCBsaW51eF9iaW5wcm0pIHtcbitcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuK307XG4rXG4gQlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IHNvY2tldCkge1xuIFx0c3RydWN0IHNvY2sgKnNrO1xuIH07XG5AQCAtNjA1OCw2ICs2MDYyLDcgQEAgc3RhdGljIGJvb2wgdHlwZV9pc190cnVzdGVkX29yX251bGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiB7XG4gXHRCVEZfVFlQRV9FTUlUKEJURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMKHN0cnVjdCBzb2NrZXQpKTtcbiBcdEJURl9UWVBFX0VNSVQoQlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IGRlbnRyeSkpO1xuK1x0QlRGX1RZUEVfRU1JVChCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTChzdHJ1Y3QgbGludXhfYmlucHJtKSk7XG4gXHRCVEZfVFlQRV9FTUlUKEJURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCkpO1xuIFxuIFx0cmV0dXJuIGJ0Zl9uZXN0ZWRfdHlwZV9pc190cnVzdGVkKFx1MDAyNmVudi1cdTAwM2Vsb2csIHJlZywgZmllbGRfbmFtZSwgYnRmX2lkLFxuQEAgLTYxNjgsNiArNjE3MywxNSBAQCBzdGF0aWMgaW50IGNoZWNrX3B0cl90b19idGZfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRpZiAocmV0ICE9IFBUUl9UT19CVEZfSUQpIHtcbiBcdFx0LyoganVzdCBtYXJrOyAqL1xuIFxuK1x0fSBlbHNlIGlmIChicGZfaXNfdHJ1c3RlZF9vcl9udWxsX2J0Zl9wdHIocmVnLVx1MDAzZXR5cGUpKSB7XG4rXHRcdC8qXG4rXHRcdCAqIEFuIHVuY2hlY2tlZCBsb2FkIHRocm91Z2ggYSB0cnVzdGVkLW9yLU5VTEwgcG9pbnRlciBpc1xuK1x0XHQgKiBmYXVsdC1wcm90ZWN0ZWQuIEFueSBwb2ludGVyIGRlcml2ZWQgZnJvbSB0aGF0IGxvYWQgbXVzdCBiZVxuK1x0XHQgKiB1bnRydXN0ZWQsIGFzIGEgZmF1bHQgcHJvZHVjZXMgYSBOVUxMIHZhbHVlLlxuK1x0XHQgKi9cbitcdFx0Y2xlYXJfdHJ1c3RlZF9mbGFncyhcdTAwMjZmbGFnKTtcbitcdFx0ZmxhZyB8PSBQVFJfVU5UUlVTVEVEO1xuK1xuIFx0fSBlbHNlIGlmICh0eXBlX2ZsYWcocmVnLVx1MDAzZXR5cGUpIFx1MDAyNiBQVFJfVU5UUlVTVEVEKSB7XG4gXHRcdC8qIElmIHRoaXMgaXMgYW4gdW50cnVzdGVkIHBvaW50ZXIsIGFsbCBwb2ludGVycyBmb3JtZWQgYnkgd2Fsa2luZyBpdFxuIFx0XHQgKiBhbHNvIGluaGVyaXQgdGhlIHVudHJ1c3RlZCBmbGFnLlxuQEAgLTY2NDQsNyArNjY1OCw4IEBAIHN0YXRpYyBpbnQgY2hlY2tfbWVtX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgsIHN0cnVjdCBiXG4gXHRcdGlmICghZXJyIFx1MDAyNlx1MDAyNiB0ID09IEJQRl9SRUFEIFx1MDAyNlx1MDAyNiB2YWx1ZV9yZWdubyBcdTAwM2U9IDApXG4gXHRcdFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIHZhbHVlX3JlZ25vKTtcbiBcdH0gZWxzZSBpZiAoYmFzZV90eXBlKHJlZy1cdTAwM2V0eXBlKSA9PSBQVFJfVE9fQlRGX0lEIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAhdHlwZV9tYXlfYmVfbnVsbChyZWctXHUwMDNldHlwZSkpIHtcbitcdFx0ICAgKCF0eXBlX21heV9iZV9udWxsKHJlZy1cdTAwM2V0eXBlKSB8fFxuK1x0XHQgICAgKHQgPT0gQlBGX1JFQUQgXHUwMDI2XHUwMDI2IGJwZl9pc190cnVzdGVkX29yX251bGxfYnRmX3B0cihyZWctXHUwMDNldHlwZSkpKSkge1xuIFx0XHRlcnIgPSBjaGVja19wdHJfdG9fYnRmX2FjY2VzcyhlbnYsIHJlZ3MsIHJlZywgYXJnbm8sIG9mZiwgc2l6ZSwgdCxcbiBcdFx0XHRcdFx0ICAgICAgdmFsdWVfcmVnbm8pO1xuIFx0fSBlbHNlIGlmIChyZWctXHUwMDNldHlwZSA9PSBDT05TVF9QVFJfVE9fTUFQKSB7XG5kaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmhcbmluZGV4IDM4YjExNjUyMTJjOTQuLjgyNjRhMzQ2ZDE4YWYgMTAwNjQ0XG4tLS0gYS9tbS9pbnRlcm5hbC5oXG4rKysgYi9tbS9pbnRlcm5hbC5oXG5AQCAtMjUsNiArMjUsMTEgQEBcbiBzdHJ1Y3QgZm9saW9fYmF0Y2g7XG4gc3RydWN0IGhzdGF0ZTtcbiBcbisjaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG4raW50IF9fY29weV9yZW1vdGVfbW1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4rXHRcdFx0IHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncyk7XG4rI2VuZGlmXG4rXG4gc3RydWN0IGh1Z2VfYm9vdG1lbV9wYWdlIHtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbiBcdHN0cnVjdCBoc3RhdGUgKmhzdGF0ZTtcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXG5pbmRleCA4YjBjMmM3MzVkM2RlLi5mZTJmNWU5ODhmYjkwIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LmNcbisrKyBiL21tL21lbW9yeS5jXG5AQCAtNzMzMSw4ICs3MzMxLDggQEAgRVhQT1JUX1NZTUJPTF9HUEwoYWNjZXNzX3Byb2Nlc3Nfdm0pO1xuICAqIENvcHkgYSBzdHJpbmcgZnJvbSBhbm90aGVyIHByb2Nlc3MncyBhZGRyZXNzIHNwYWNlIGFzIGdpdmVuIGluIG1tLlxuICAqIElmIHRoZXJlIGlzIGFueSBlcnJvciByZXR1cm4gLUVGQVVMVC5cbiAgKi9cbi1zdGF0aWMgaW50IF9fY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tXHRcdFx0XHR2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXG4raW50IF9fY29weV9yZW1vdGVfbW1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4rXHRcdFx0IHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncylcbiB7XG4gXHR2b2lkICpvbGRfYnVmID0gYnVmO1xuIFx0aW50IGVyciA9IDA7XG5AQCAtNzQwNyw0MyArNzQwNyw2IEBAIHN0YXRpYyBpbnQgX19jb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0cmV0dXJuIGVycjtcbiBcdHJldHVybiBidWYgLSBvbGRfYnVmO1xuIH1cbi1cbi0vKipcbi0gKiBjb3B5X3JlbW90ZV92bV9zdHIgLSBjb3B5IGEgc3RyaW5nIGZyb20gYW5vdGhlciBwcm9jZXNzJ3MgYWRkcmVzcyBzcGFjZS5cbi0gKiBAdHNrOlx0dGhlIHRhc2sgb2YgdGhlIHRhcmdldCBhZGRyZXNzIHNwYWNlXG4tICogQGFkZHI6XHRzdGFydCBhZGRyZXNzIHRvIHJlYWQgZnJvbVxuLSAqIEBidWY6XHRkZXN0aW5hdGlvbiBidWZmZXJcbi0gKiBAbGVuOlx0bnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHlcbi0gKiBAZ3VwX2ZsYWdzOlx0ZmxhZ3MgbW9kaWZ5aW5nIGxvb2t1cCBiZWhhdmlvdXJcbi0gKlxuLSAqIFRoZSBjYWxsZXIgbXVzdCBob2xkIGEgcmVmZXJlbmNlIG9uIEBtbS5cbi0gKlxuLSAqIFJldHVybjogbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCBmcm9tIEBhZGRyIChzb3VyY2UpIHRvIEBidWYgKGRlc3RpbmF0aW9uKTtcbi0gKiBub3QgaW5jbHVkaW5nIHRoZSB0cmFpbGluZyBOVUwuIEFsd2F5cyBndWFyYW50ZWVkIHRvIGxlYXZlIE5VTC10ZXJtaW5hdGVkXG4tICogYnVmZmVyLiBPbiBhbnkgZXJyb3IsIHJldHVybiAtRUZBVUxULlxuLSAqL1xuLWludCBjb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHVuc2lnbmVkIGxvbmcgYWRkcixcbi1cdFx0ICAgICAgIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncylcbi17XG4tXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcbi1cdGludCByZXQ7XG4tXG4tXHRpZiAodW5saWtlbHkobGVuID09IDApKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdG1tID0gZ2V0X3Rhc2tfbW0odHNrKTtcbi1cdGlmICghbW0pIHtcbi1cdFx0KihjaGFyICopYnVmID0gJ1xcMCc7XG4tXHRcdHJldHVybiAtRUZBVUxUO1xuLVx0fVxuLVxuLVx0cmV0ID0gX19jb3B5X3JlbW90ZV92bV9zdHIobW0sIGFkZHIsIGJ1ZiwgbGVuLCBndXBfZmxhZ3MpO1xuLVxuLVx0bW1wdXQobW0pO1xuLVxuLVx0cmV0dXJuIHJldDtcbi19XG4tRVhQT1JUX1NZTUJPTF9HUEwoY29weV9yZW1vdGVfdm1fc3RyKTtcbiAjZW5kaWYgLyogQ09ORklHX0JQRl9TWVNDQUxMICovXG4gXG4gLypcbmRpZmYgLS1naXQgYS9tbS9ub21tdS5jIGIvbW0vbm9tbXUuY1xuaW5kZXggNDk4ZTAxZWU0MGIwNS4uOTg1OTZlNjAzMTFmMyAxMDA2NDRcbi0tLSBhL21tL25vbW11LmNcbisrKyBiL21tL25vbW11LmNcbkBAIC0xNzQ2LDggKzE3NDYsOCBAQCBFWFBPUlRfU1lNQk9MX0dQTChhY2Nlc3NfcHJvY2Vzc192bSk7XG4gICogQ29weSBhIHN0cmluZyBmcm9tIGFub3RoZXIgcHJvY2VzcydzIGFkZHJlc3Mgc3BhY2UgYXMgZ2l2ZW4gaW4gbW0uXG4gICogSWYgdGhlcmUgaXMgYW55IGVycm9yIHJldHVybiAtRUZBVUxULlxuICAqL1xuLXN0YXRpYyBpbnQgX19jb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbi1cdFx0XHRcdHZvaWQgKmJ1ZiwgaW50IGxlbilcbitpbnQgX19jb3B5X3JlbW90ZV9tbV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbitcdFx0XHQgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgYWRkcl9lbmQ7XG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbkBAIC0xNzgxLDQzICsxNzgxLDYgQEAgc3RhdGljIGludCBfX2NvcHlfcmVtb3RlX3ZtX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbi1cbi0vKipcbi0gKiBjb3B5X3JlbW90ZV92bV9zdHIgLSBjb3B5IGEgc3RyaW5nIGZyb20gYW5vdGhlciBwcm9jZXNzJ3MgYWRkcmVzcyBzcGFjZS5cbi0gKiBAdHNrOlx0dGhlIHRhc2sgb2YgdGhlIHRhcmdldCBhZGRyZXNzIHNwYWNlXG4tICogQGFkZHI6XHRzdGFydCBhZGRyZXNzIHRvIHJlYWQgZnJvbVxuLSAqIEBidWY6XHRkZXN0aW5hdGlvbiBidWZmZXJcbi0gKiBAbGVuOlx0bnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHlcbi0gKiBAZ3VwX2ZsYWdzOlx0ZmxhZ3MgbW9kaWZ5aW5nIGxvb2t1cCBiZWhhdmlvdXIgKHVudXNlZClcbi0gKlxuLSAqIFRoZSBjYWxsZXIgbXVzdCBob2xkIGEgcmVmZXJlbmNlIG9uIEBtbS5cbi0gKlxuLSAqIFJldHVybjogbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCBmcm9tIEBhZGRyIChzb3VyY2UpIHRvIEBidWYgKGRlc3RpbmF0aW9uKTtcbi0gKiBub3QgaW5jbHVkaW5nIHRoZSB0cmFpbGluZyBOVUwuIEFsd2F5cyBndWFyYW50ZWVkIHRvIGxlYXZlIE5VTC10ZXJtaW5hdGVkXG4tICogYnVmZmVyLiBPbiBhbnkgZXJyb3IsIHJldHVybiAtRUZBVUxULlxuLSAqL1xuLWludCBjb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHVuc2lnbmVkIGxvbmcgYWRkcixcbi1cdFx0ICAgICAgIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncylcbi17XG4tXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcbi1cdGludCByZXQ7XG4tXG4tXHRpZiAodW5saWtlbHkobGVuID09IDApKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdG1tID0gZ2V0X3Rhc2tfbW0odHNrKTtcbi1cdGlmICghbW0pIHtcbi1cdFx0KihjaGFyICopYnVmID0gJ1xcMCc7XG4tXHRcdHJldHVybiAtRUZBVUxUO1xuLVx0fVxuLVxuLVx0cmV0ID0gX19jb3B5X3JlbW90ZV92bV9zdHIobW0sIGFkZHIsIGJ1ZiwgbGVuKTtcbi1cbi1cdG1tcHV0KG1tKTtcbi1cbi1cdHJldHVybiByZXQ7XG4tfVxuLUVYUE9SVF9TWU1CT0xfR1BMKGNvcHlfcmVtb3RlX3ZtX3N0cik7XG4gI2VuZGlmIC8qIENPTkZJR19CUEZfU1lTQ0FMTCAqL1xuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL21tL3V0aWwuYyBiL21tL3V0aWwuY1xuaW5kZXggYmYwNTEzZDFkM2QwOC4uMmVjYTI3YjAyNzkxZiAxMDA2NDRcbi0tLSBhL21tL3V0aWwuY1xuKysrIGIvbW0vdXRpbC5jXG5AQCAtMTA2MSw2ICsxMDYxLDY4IEBAIGludCBnZXRfY21kbGluZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGNoYXIgKmJ1ZmZlciwgaW50IGJ1ZmxlbilcbiBcdHJldHVybiByZXM7XG4gfVxuIFxuKyNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbisvKipcbisgKiBjb3B5X3JlbW90ZV9tbV9zdHIgLSBjb3B5IGEgc3RyaW5nIGZyb20gYSByZW1vdGUgYWRkcmVzcyBzcGFjZS5cbisgKiBAbW06ICAgICAgICAgdGhlIHJlbW90ZSBhZGRyZXNzIHNwYWNlXG4rICogQGFkZHI6ICAgICAgIHN0YXJ0IGFkZHJlc3MgdG8gcmVhZCBmcm9tXG4rICogQGJ1ZjogICAgICAgIGRlc3RpbmF0aW9uIGJ1ZmZlclxuKyAqIEBsZW46ICAgICAgICBudW1iZXIgb2YgYnl0ZXMgdG8gY29weVxuKyAqIEBndXBfZmxhZ3M6ICBmbGFncyBtb2RpZnlpbmcgbG9va3VwIGJlaGF2aW91clxuKyAqXG4rICogVGhlIGNhbGxlciBtdXN0IGhvbGQgYSByZWZlcmVuY2Ugb24gQG1tLlxuKyAqXG4rICogUmV0dXJuOiBudW1iZXIgb2YgYnl0ZXMgY29waWVkIGZyb20gQGFkZHIgKHNvdXJjZSkgdG8gQGJ1ZiAoZGVzdGluYXRpb24pLFxuKyAqIG5vdCBpbmNsdWRpbmcgdGhlIHRyYWlsaW5nIE5VTC4gSWYgQGxlbiBpcyB6ZXJvLCByZXR1cm4gMCB3aXRob3V0IGFjY2Vzc2luZ1xuKyAqIEBidWYuIE90aGVyd2lzZSwgQGJ1ZiBpcyBhbHdheXMgTlVMLXRlcm1pbmF0ZWQuIE9uIGFueSBlcnJvciwgcmV0dXJuXG4rICogLUVGQVVMVC5cbisgKi9cbitpbnQgY29weV9yZW1vdGVfbW1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4rXHRcdCAgICAgICB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXG4re1xuK1x0aWYgKHVubGlrZWx5KGxlbiA9PSAwKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRyZXR1cm4gX19jb3B5X3JlbW90ZV9tbV9zdHIobW0sIGFkZHIsIGJ1ZiwgbGVuLCBndXBfZmxhZ3MpO1xuK31cbitcbisvKipcbisgKiBjb3B5X3JlbW90ZV92bV9zdHIgLSBjb3B5IGEgc3RyaW5nIGZyb20gYW5vdGhlciBwcm9jZXNzJ3MgYWRkcmVzcyBzcGFjZS5cbisgKiBAdHNrOlx0dGhlIHRhc2sgb2YgdGhlIHRhcmdldCBhZGRyZXNzIHNwYWNlXG4rICogQGFkZHI6XHRzdGFydCBhZGRyZXNzIHRvIHJlYWQgZnJvbVxuKyAqIEBidWY6XHRkZXN0aW5hdGlvbiBidWZmZXJcbisgKiBAbGVuOlx0bnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHlcbisgKiBAZ3VwX2ZsYWdzOlx0ZmxhZ3MgbW9kaWZ5aW5nIGxvb2t1cCBiZWhhdmlvdXJcbisgKlxuKyAqIFJldHVybjogbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCBmcm9tIEBhZGRyIChzb3VyY2UpIHRvIEBidWYgKGRlc3RpbmF0aW9uKSxcbisgKiBub3QgaW5jbHVkaW5nIHRoZSB0cmFpbGluZyBOVUwuIElmIEBsZW4gaXMgemVybywgcmV0dXJuIDAgd2l0aG91dCBhY2Nlc3NpbmdcbisgKiBAYnVmLiBPdGhlcndpc2UsIEBidWYgaXMgYWx3YXlzIE5VTC10ZXJtaW5hdGVkLiBPbiBhbnkgZXJyb3IsIHJldHVyblxuKyAqIC1FRkFVTFQuXG4rICovXG4raW50IGNvcHlfcmVtb3RlX3ZtX3N0cihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdW5zaWduZWQgbG9uZyBhZGRyLFxuK1x0XHQgICAgICAgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKVxuK3tcbitcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuK1x0aW50IHJldDtcbitcbitcdGlmICh1bmxpa2VseShsZW4gPT0gMCkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0bW0gPSBnZXRfdGFza19tbSh0c2spO1xuK1x0aWYgKCFtbSkge1xuK1x0XHQqKGNoYXIgKilidWYgPSAnXFwwJztcbitcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXHR9XG4rXG4rXHRyZXQgPSBfX2NvcHlfcmVtb3RlX21tX3N0cihtbSwgYWRkciwgYnVmLCBsZW4sIGd1cF9mbGFncyk7XG4rXG4rXHRtbXB1dChtbSk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChjb3B5X3JlbW90ZV92bV9zdHIpO1xuKyNlbmRpZiAvKiBDT05GSUdfQlBGX1NZU0NBTEwgKi9cbitcbiBpbnQgX193ZWFrIG1lbWNtcF9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZTEsIHN0cnVjdCBwYWdlICpwYWdlMilcbiB7XG4gXHRjaGFyICphZGRyMSwgKmFkZHIyO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9pdGVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfaXRlci5jXG5pbmRleCBjNjkwODBjYTE0ZjVhLi45OWExNmExYWRkNzBlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2l0ZXIuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2l0ZXIuY1xuQEAgLTM5LDEwICszOSwxMCBAQCBzdGF0aWMgdm9pZCB0ZXN0X2J0Zl9pZF9vcl9udWxsKHZvaWQpXG4gXHRzdHJ1Y3QgYnBmX2l0ZXJfdGVzdF9rZXJuMyAqc2tlbDtcbiBcbiBcdHNrZWwgPSBicGZfaXRlcl90ZXN0X2tlcm4zX19vcGVuX2FuZF9sb2FkKCk7XG4tXHRpZiAoIUFTU0VSVF9FUlJfUFRSKHNrZWwsIFwiYnBmX2l0ZXJfdGVzdF9rZXJuM19fb3Blbl9hbmRfbG9hZFwiKSkge1xuLVx0XHRicGZfaXRlcl90ZXN0X2tlcm4zX19kZXN0cm95KHNrZWwpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwiYnBmX2l0ZXJfdGVzdF9rZXJuM19fb3Blbl9hbmRfbG9hZFwiKSlcbiBcdFx0cmV0dXJuO1xuLVx0fVxuK1xuK1x0YnBmX2l0ZXJfdGVzdF9rZXJuM19fZGVzdHJveShza2VsKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgZG9fZHVtbXlfcmVhZF9vcHRzKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgc3RydWN0IGJwZl9pdGVyX2F0dGFjaF9vcHRzICpvcHRzKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2NvcHlfZnJvbV91c2VyX2Jwcm0uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2NvcHlfZnJvbV91c2VyX2Jwcm0uY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmIyMzI1YjE5MzU3NjFcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2NvcHlfZnJvbV91c2VyX2Jwcm0uY1xuQEAgLTAsMCArMSw3MiBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rXG4rI2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy93YWl0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwiY29weV9mcm9tX3VzZXJfYnBybS5za2VsLmhcIlxuK1xuK3ZvaWQgdGVzdF9jb3B5X2Zyb21fdXNlcl9icHJtKHZvaWQpXG4re1xuK1x0Y2hhciBhcmcwW10gPSBcImZpcnN0XCI7XG4rXHRjaGFyIGFyZzFbXSA9IFwic2Vjb25kLWFyZ3VtZW50XCI7XG4rXHRjaGFyIGVudjBbXSA9IFwiU09NRV9FTlY9YVwiO1xuK1x0Y2hhciBlbnYxW10gPSBcIk9USEVSX0VOVj1zb21ldGhpbmdcIjtcbitcdHN0cnVjdCBjb3B5X2Zyb21fdXNlcl9icHJtICpza2VsO1xuK1x0cGlkX3QgY2hpbGQ7XG4rXHRpbnQgc3RhdHVzO1xuK1xuK1x0c2tlbCA9IGNvcHlfZnJvbV91c2VyX2Jwcm1fX29wZW5fYW5kX2xvYWQoKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcIm9wZW5fYW5kX2xvYWRcIikpXG4rXHRcdHJldHVybjtcbitcbitcdC8qXG4rXHQgKiBPbiAhQ09ORklHX01NVSwgZXhlYyBzdHJpbmdzIGFyZSBoZWxkIGluIGJwcm0tXHUwMDNlcGFnZVtdIHJhdGhlciB0aGFuXG4rXHQgKiBiZWluZyBtYXBwZWQgaW4gYnBybS1cdTAwM2VtbS5cbitcdCAqL1xuK1x0aWYgKCFza2VsLVx1MDAzZWtjb25maWctXHUwMDNlQ09ORklHX01NVSkge1xuK1x0XHRwcmludGYoXCIlczpTS0lQOiB0ZXN0IHJlcXVpcmVzIENPTkZJR19NTVVcXG5cIiwgX19mdW5jX18pO1xuK1x0XHR0ZXN0X19za2lwKCk7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0aWYgKCFBU1NFUlRfT0soY29weV9mcm9tX3VzZXJfYnBybV9fYXR0YWNoKHNrZWwpLCBcImF0dGFjaFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRjaGlsZCA9IGZvcmsoKTtcbitcdGlmICghQVNTRVJUX0dFKGNoaWxkLCAwLCBcImZvcmtcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0aWYgKCFjaGlsZCkge1xuK1x0XHRjaGFyICpjb25zdCBhcmd2W10gPSB7IGFyZzAsIGFyZzEsIE5VTEwgfTtcbitcdFx0Y2hhciAqY29uc3QgZW52cFtdID0geyBlbnYwLCBlbnYxLCBOVUxMIH07XG4rXG4rXHRcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZW1vbml0b3JlZF9waWQgPSBnZXRwaWQoKTtcbitcdFx0ZXhlY3ZlKFwiL2Jpbi90cnVlXCIsIGFyZ3YsIGVudnApO1xuK1x0XHRfZXhpdChlcnJubyk7XG4rXHR9XG4rXG4rXHRpZiAoIUFTU0VSVF9FUSh3YWl0cGlkKGNoaWxkLCBcdTAwMjZzdGF0dXMsIDApLCBjaGlsZCwgXCJ3YWl0cGlkXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGlmIChBU1NFUlRfVFJVRShXSUZFWElURUQoc3RhdHVzKSwgXCJjaGlsZF9leGl0ZWRcIikpXG4rXHRcdEFTU0VSVF9FUShXRVhJVFNUQVRVUyhzdGF0dXMpLCBFUEVSTSwgXCJleGVjX2Vycm5vXCIpO1xuK1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWJwcm1fYXJnYywgMiwgXCJicHJtX2FyZ2NcIik7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlYnBybV9lbnZjLCAyLCBcImJwcm1fZW52Y1wiKTtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VkYXRhX2xlbl9tYXRjaCwgMSwgXCJkYXRhX2xlbl9tYXRjaFwiKTtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VpbnZhbGlkX2ZsYWdzX3JldCwgLUVJTlZBTCwgXCJpbnZhbGlkX2ZsYWdzX3JldFwiKTtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2Vjb3B5X3JldCwgMCwgXCJjb3B5X3JldFwiKTtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VzdHJfYXJnMF9yZXQsIHNpemVvZihhcmcwKSwgXCJzdHJfYXJnMF9yZXRcIik7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlc3RyX2FyZzFfcmV0LCBzaXplb2YoYXJnMSksIFwic3RyX2FyZzFfcmV0XCIpO1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXN0cl9lbnYwX3JldCwgc2l6ZW9mKGVudjApLCBcInN0cl9lbnYwX3JldFwiKTtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VzdHJfZW52MV9yZXQsIHNpemVvZihlbnYxKSwgXCJzdHJfZW52MV9yZXRcIik7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlZGF0YV9tYXRjaCwgMSwgXCJkYXRhX21hdGNoXCIpO1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXN0cl9hcmdzX21hdGNoLCAxLCBcInN0cl9hcmdzX21hdGNoXCIpO1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXN0cl9lbnZzX21hdGNoLCAxLCBcInN0cl9lbnZzX21hdGNoXCIpO1xuK1xuK291dDpcbitcdGNvcHlfZnJvbV91c2VyX2Jwcm1fX2Rlc3Ryb3koc2tlbCk7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19tYXliZV9udWxsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfbWF5YmVfbnVsbC5jXG5pbmRleCAwMWRjMjYxM2M4YTUxLi40NWFmNmYwMGFkOTA4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX21heWJlX251bGwuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX21heWJlX251bGwuY1xuQEAgLTE5LDE1ICsxOSwxNiBAQCBzdGF0aWMgdm9pZCBtYXliZV9udWxsKHZvaWQpXG4gXHRzdHJ1Y3Rfb3BzX21heWJlX251bGxfX2Rlc3Ryb3koc2tlbCk7XG4gfVxuIFxuLS8qIFRlc3QgdGhhdCB0aGUgdmVyaWZpZXIgcmVqZWN0cyBhIHByb2dyYW0gdGhhdCBhY2Nlc3MgYSBudWxsYWJsZSBwb2ludGVyXG4tICogd2l0aG91dCBhIGNoZWNrIGJlZm9yZWhhbmQuXG4rLypcbisgKiBUZXN0IHRoYXQgdGhlIHZlcmlmaWVyIGFjY2VwdHMgYSBmYXVsdC1wcm90ZWN0ZWQgcmVhZCB0aHJvdWdoIGEgbnVsbGFibGVcbisgKiB0cnVzdGVkIHBvaW50ZXIgd2l0aG91dCBhbiBleHBsaWNpdCBOVUxMIGNoZWNrLlxuICAqL1xuLXN0YXRpYyB2b2lkIG1heWJlX251bGxfZmFpbCh2b2lkKVxuK3N0YXRpYyB2b2lkIG1heWJlX251bGxfbm9fY2hlY2sodm9pZClcbiB7XG4gXHRzdHJ1Y3Qgc3RydWN0X29wc19tYXliZV9udWxsX2ZhaWwgKnNrZWw7XG4gXG4gXHRza2VsID0gc3RydWN0X29wc19tYXliZV9udWxsX2ZhaWxfX29wZW5fYW5kX2xvYWQoKTtcbi1cdGlmIChBU1NFUlRfRVJSX1BUUihza2VsLCBcInN0cnVjdF9vcHNfbW9kdWxlX2ZhaWxfX29wZW5fYW5kX2xvYWRcIikpXG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJzdHJ1Y3Rfb3BzX21heWJlX251bGxfZmFpbF9fb3Blbl9hbmRfbG9hZFwiKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0c3RydWN0X29wc19tYXliZV9udWxsX2ZhaWxfX2Rlc3Ryb3koc2tlbCk7XG5AQCAtNDEsNiArNDIsNiBAQCB2b2lkIHRlc3Rfc3RydWN0X29wc19tYXliZV9udWxsKHZvaWQpXG4gXHQgKi9cbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwibWF5YmVfbnVsbFwiKSlcbiBcdFx0bWF5YmVfbnVsbCgpO1xuLVx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJtYXliZV9udWxsX2ZhaWxcIikpXG4tXHRcdG1heWJlX251bGxfZmFpbCgpO1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJtYXliZV9udWxsX25vX2NoZWNrXCIpKVxuK1x0XHRtYXliZV9udWxsX25vX2NoZWNrKCk7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RwX2J0Zl9udWxsYWJsZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHBfYnRmX251bGxhYmxlLmNcbmluZGV4IGFjY2M0MmUwMWY4YTguLjgyNWZlN2E5MmQ3NGYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90cF9idGZfbnVsbGFibGUuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHBfYnRmX251bGxhYmxlLmNcbkBAIC0yLDYgKzIsMzEgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbiAjaW5jbHVkZSBcInRlc3RfdHBfYnRmX251bGxhYmxlLnNrZWwuaFwiXG4rI2luY2x1ZGUgXCJ0ZXN0X3RwX2J0Zl9udWxsYWJsZV9ydW50aW1lLnNrZWwuaFwiXG4rXG4rc3RhdGljIHZvaWQgdGVzdF9udWxsYWJsZV9ydW50aW1lKHZvaWQpXG4re1xuK1x0c3RydWN0IHRlc3RfdHBfYnRmX251bGxhYmxlX3J1bnRpbWUgKnNrZWw7XG4rXG4rXHRza2VsID0gdGVzdF90cF9idGZfbnVsbGFibGVfcnVudGltZV9fb3Blbl9hbmRfbG9hZCgpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwib3Blbl9hbmRfbG9hZFwiKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlbW9uaXRvcmVkX3RpZCA9IHN5c19nZXR0aWQoKTtcbitcbitcdGlmICghQVNTRVJUX09LKHRlc3RfdHBfYnRmX251bGxhYmxlX3J1bnRpbWVfX2F0dGFjaChza2VsKSwgXCJhdHRhY2hcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0aWYgKCFBU1NFUlRfT0sodHJpZ2dlcl9tb2R1bGVfdGVzdF9yZWFkKDIpLCBcInRyaWdnZXJcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWNhbGxzLCAyLCBcImNhbGxzXCIpO1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZW5vbm51bGxfbGVuLCAyLCBcIm5vbm51bGxfbGVuXCIpO1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZW51bGxfbGVuLCAwLCBcIm51bGxfbGVuXCIpO1xuK1xuK291dDpcbitcdHRlc3RfdHBfYnRmX251bGxhYmxlX3J1bnRpbWVfX2Rlc3Ryb3koc2tlbCk7XG4rfVxuIFxuIHZvaWQgdGVzdF90cF9idGZfbnVsbGFibGUodm9pZClcbiB7XG5AQCAtMTEsNCArMzYsNyBAQCB2b2lkIHRlc3RfdHBfYnRmX251bGxhYmxlKHZvaWQpXG4gXHR9XG4gXG4gXHRSVU5fVEVTVFModGVzdF90cF9idGZfbnVsbGFibGUpO1xuK1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJydW50aW1lXCIpKVxuK1x0XHR0ZXN0X251bGxhYmxlX3J1bnRpbWUoKTtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2NvcHlfZnJvbV91c2VyX2Jwcm0uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9jb3B5X2Zyb21fdXNlcl9icHJtLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5iMzM0YTE1NzQxOWU1XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvY29weV9mcm9tX3VzZXJfYnBybS5jXG5AQCAtMCwwICsxLDEyMyBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rXG4rI2luY2x1ZGUgXCJ2bWxpbnV4LmhcIlxuK1xuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl90cmFjaW5nLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4rI2luY2x1ZGUgXCJicGZfbWlzYy5oXCJcbitcbitjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4rXG4rc3RhdGljIGNvbnN0IGNoYXIgZXhwZWN0ZWRfZGF0YVtdID0gXCJmaXJzdFxcMHNlY29uZC1hcmd1bWVudFxcMFwiXG4rXHRcdFx0XHQgICAgXCJTT01FX0VOVj1hXFwwT1RIRVJfRU5WPXNvbWV0aGluZ1wiO1xuK3N0YXRpYyBjb25zdCBjaGFyIGV4cGVjdGVkX2FyZzBbXSA9IFwiZmlyc3RcIjtcbitzdGF0aWMgY29uc3QgY2hhciBleHBlY3RlZF9hcmcxW10gPSBcInNlY29uZC1hcmd1bWVudFwiO1xuK3N0YXRpYyBjb25zdCBjaGFyIGV4cGVjdGVkX2VudjBbXSA9IFwiU09NRV9FTlY9YVwiO1xuK3N0YXRpYyBjb25zdCBjaGFyIGV4cGVjdGVkX2VudjFbXSA9IFwiT1RIRVJfRU5WPXNvbWV0aGluZ1wiO1xuK1xuK2ludCBtb25pdG9yZWRfcGlkO1xuK2ludCBicHJtX2FyZ2M7XG4raW50IGJwcm1fZW52YztcbitpbnQgZGF0YV9sZW5fbWF0Y2g7XG4raW50IGludmFsaWRfZmxhZ3NfcmV0O1xuK2ludCBjb3B5X3JldDtcbitpbnQgc3RyX2FyZzBfcmV0O1xuK2ludCBzdHJfYXJnMV9yZXQ7XG4raW50IHN0cl9lbnYwX3JldDtcbitpbnQgc3RyX2VudjFfcmV0O1xuK2ludCBkYXRhX21hdGNoO1xuK2ludCBzdHJfYXJnc19tYXRjaDtcbitpbnQgc3RyX2VudnNfbWF0Y2g7XG4rXG4rZXh0ZXJuIGJvb2wgQ09ORklHX01NVSBfX2tjb25maWcgX193ZWFrO1xuK1xuK2V4dGVybiBpbnQgYnBmX2NvcHlfZnJvbV91c2VyX21tKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osXG4rXHRcdFx0XHQgY29uc3Qgdm9pZCAqdW5zYWZlX3B0cl9faWduLFxuK1x0XHRcdFx0IHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1NjQgZmxhZ3MpIF9fa3N5bTtcbitcbitleHRlcm4gaW50IGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIodm9pZCAqZHN0LCB1MzIgZHN0X19zeixcbitcdFx0XHRcdCAgICAgY29uc3Qgdm9pZCAqdW5zYWZlX3B0cl9faWduLFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdTY0IGZsYWdzKSBfX2tzeW07XG4rXG4rU0VDKFwibHNtLnMvYnBybV9jaGVja19zZWN1cml0eVwiKVxuK2ludCBCUEZfUFJPRyhjaGVja19leGVjX2FyZ3MsIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4re1xuK1x0dTMyIHBpZCA9IGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpIFx1MDAzZVx1MDAzZSAzMjtcbitcdGNoYXIgZGF0YVtzaXplb2YoZXhwZWN0ZWRfZGF0YSldID0ge307XG4rXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcbitcdGNoYXIgYXJnMFszMl0gPSB7fTtcbitcdGNoYXIgYXJnMVszMl0gPSB7fTtcbitcdGNoYXIgZW52MFszMl0gPSB7fTtcbitcdGNoYXIgZW52MVszMl0gPSB7fTtcbitcdHU2NCBvZmZzZXQgPSAwO1xuK1x0dTY0IGRhdGFfbGVuO1xuK1xuK1x0aWYgKCFDT05GSUdfTU1VKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmIChwaWQgIT0gbW9uaXRvcmVkX3BpZClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRtbSA9IGJwcm0tXHUwMDNlbW07XG4rXHRpZiAoIW1tKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGJwcm1fYXJnYyA9IGJwcm0tXHUwMDNlYXJnYztcbitcdGJwcm1fZW52YyA9IGJwcm0tXHUwMDNlZW52YztcbitcbitcdC8qIHRoaXMgaXMgdGhlIHRvdGFsIHNpemUgb2YgYXJncyBhbmQgZW52cyBzdGFydGluZyBmcm9tIGJwcm0tXHUwMDNlcCAqL1xuK1x0ZGF0YV9sZW4gPSBicHJtLVx1MDAzZWV4ZWMgLSBicHJtLVx1MDAzZXA7XG4rXHRkYXRhX2xlbl9tYXRjaCA9IGRhdGFfbGVuID09IHNpemVvZihleHBlY3RlZF9kYXRhKTtcbitcbitcdGludmFsaWRfZmxhZ3NfcmV0ID0gYnBmX2NvcHlfZnJvbV91c2VyX21tKGRhdGEsXG4rXHRcdFx0XHRcdFx0ICBzaXplb2YoZGF0YSksICh2b2lkICopYnBybS1cdTAwM2VwLCBtbSwgfjBVTEwpO1xuK1xuK1x0Y29weV9yZXQgPSBicGZfY29weV9mcm9tX3VzZXJfbW0oZGF0YSwgc2l6ZW9mKGRhdGEpLCAodm9pZCAqKWJwcm0tXHUwMDNlcCxcbitcdFx0XHRcdFx0IG1tLCAwKTtcbitcdGlmIChjb3B5X3JldClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRkYXRhX21hdGNoID1cbitcdFx0IV9fYnVpbHRpbl9tZW1jbXAoZGF0YSwgZXhwZWN0ZWRfZGF0YSwgc2l6ZW9mKGV4cGVjdGVkX2RhdGEpKTtcbitcbitcdC8qIGFyZzAgaXMgYXQgYnBybS1cdTAwM2VwICovXG4rXHRzdHJfYXJnMF9yZXQgPSBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKGFyZzAsIHNpemVvZihhcmcwKSxcbitcdFx0XHRcdFx0XHQgKHZvaWQgKikoYnBybS1cdTAwM2VwICsgb2Zmc2V0KSxcbitcdFx0XHRcdFx0XHQgbW0sIEJQRl9GX1BBRF9aRVJPUyk7XG4rXHRpZiAoc3RyX2FyZzBfcmV0ICE9IHNpemVvZihleHBlY3RlZF9hcmcwKSlcbitcdFx0cmV0dXJuIDA7XG4rXHRvZmZzZXQgKz0gc3RyX2FyZzBfcmV0O1xuK1xuK1x0LyogYXJnMSBpcyBhdCBicHJtLVx1MDAzZXAgKyBzaXplb2YoYXJnMCkgKi9cbitcdHN0cl9hcmcxX3JldCA9IGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIoYXJnMSwgc2l6ZW9mKGFyZzEpLFxuK1x0XHRcdFx0XHRcdCAodm9pZCAqKShicHJtLVx1MDAzZXAgKyBvZmZzZXQpLFxuK1x0XHRcdFx0XHRcdCBtbSwgQlBGX0ZfUEFEX1pFUk9TKTtcbitcdGlmIChzdHJfYXJnMV9yZXQgIT0gc2l6ZW9mKGV4cGVjdGVkX2FyZzEpKVxuK1x0XHRyZXR1cm4gMDtcbitcdG9mZnNldCArPSBzdHJfYXJnMV9yZXQ7XG4rXG4rXHQvKiBlbnYwIGlzIGF0IGJwcm0tXHUwMDNlcCArIHNpemVvZihhcmcwKSArIHNpemVvZihhcmcxKSAqL1xuK1x0c3RyX2VudjBfcmV0ID0gYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cihlbnYwLCBzaXplb2YoZW52MCksXG4rXHRcdFx0XHRcdFx0ICh2b2lkICopKGJwcm0tXHUwMDNlcCArIG9mZnNldCksXG4rXHRcdFx0XHRcdFx0IG1tLCBCUEZfRl9QQURfWkVST1MpO1xuK1x0aWYgKHN0cl9lbnYwX3JldCAhPSBzaXplb2YoZXhwZWN0ZWRfZW52MCkpXG4rXHRcdHJldHVybiAwO1xuK1x0b2Zmc2V0ICs9IHN0cl9lbnYwX3JldDtcbitcbitcdC8qIGVudjEgaXMgYXQgYnBybS1cdTAwM2VwICsgc2l6ZW9mKGFyZzApICsgc2l6ZW9mKGFyZzEpICsgc2l6ZW9mKGVudjApICovXG4rXHRzdHJfZW52MV9yZXQgPSBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKGVudjEsIHNpemVvZihlbnYxKSxcbitcdFx0XHRcdFx0XHQgKHZvaWQgKikoYnBybS1cdTAwM2VwICsgb2Zmc2V0KSxcbitcdFx0XHRcdFx0XHQgbW0sIEJQRl9GX1BBRF9aRVJPUyk7XG4rXHRpZiAoc3RyX2VudjFfcmV0ICE9IHNpemVvZihleHBlY3RlZF9lbnYxKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRzdHJfYXJnc19tYXRjaCA9XG4rXHRcdCFfX2J1aWx0aW5fbWVtY21wKGFyZzAsIGV4cGVjdGVkX2FyZzAsIHNpemVvZihleHBlY3RlZF9hcmcwKSkgXHUwMDI2XHUwMDI2XG4rXHRcdCFfX2J1aWx0aW5fbWVtY21wKGFyZzEsIGV4cGVjdGVkX2FyZzEsIHNpemVvZihleHBlY3RlZF9hcmcxKSk7XG4rXHRzdHJfZW52c19tYXRjaCA9XG4rXHRcdCFfX2J1aWx0aW5fbWVtY21wKGVudjAsIGV4cGVjdGVkX2VudjAsIHNpemVvZihleHBlY3RlZF9lbnYwKSkgXHUwMDI2XHUwMDI2XG4rXHRcdCFfX2J1aWx0aW5fbWVtY21wKGVudjEsIGV4cGVjdGVkX2VudjEsIHNpemVvZihleHBlY3RlZF9lbnYxKSk7XG4rXG4rXHRyZXR1cm4gZGF0YV9tYXRjaCBcdTAwMjZcdTAwMjYgc3RyX2FyZ3NfbWF0Y2ggXHUwMDI2XHUwMDI2IHN0cl9lbnZzX21hdGNoID8gLUVQRVJNIDogMDtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Jhd190cF9udWxsX2ZhaWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yYXdfdHBfbnVsbF9mYWlsLmNcbmluZGV4IDcyNWQ3M2M5ZmZlMTMuLjE2MzEyNDc5M2QwYTYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmF3X3RwX251bGxfZmFpbC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmF3X3RwX251bGxfZmFpbC5jXG5AQCAtMiwyMiArMiwzNCBAQFxuIC8qIENvcHlyaWdodCAoYykgMjAyNCBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2N2bWxpbnV4LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXHUwMDNlXG4gI2luY2x1ZGUgXCJicGZfbWlzYy5oXCJcbiBcbiBjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4gXG4tLyogRW5zdXJlIG1vZHVsZSBwYXJhbWV0ZXIgaGFzIFBUUl9NQVlCRV9OVUxMICovXG4rZXh0ZXJuIHN0cnVjdCB0YXNrX3N0cnVjdCAqYnBmX3Rhc2tfYWNxdWlyZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIF9fa3N5bTtcbitleHRlcm4gdm9pZCBicGZfdGFza19yZWxlYXNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkgX19rc3ltO1xuK1xuKy8qXG4rICogRW5zdXJlIHRoZSBtb2R1bGUgdHJhY2Vwb2ludCBhcmd1bWVudCBpcyB0cnVzdGVkLW9yLU5VTEwgd2hpbGUgYWxsb3dpbmdcbisgKiBhIGZhdWx0LXByb3RlY3RlZCByZWFkIHdpdGhvdXQgYW4gZXhwbGljaXQgTlVMTCBjaGVjay5cbisgKi9cbiBTRUMoXCJ0cF9idGYvYnBmX3Rlc3Rtb2RfdGVzdF9yYXdfdHBfbnVsbF90cFwiKVxuLV9fZmFpbHVyZSBfX21zZyhcIlIxIGludmFsaWQgbWVtIGFjY2VzcyAndHJ1c3RlZF9wdHJfb3JfbnVsbF8nXCIpXG4rX19zdWNjZXNzIF9fbG9nX2xldmVsKDIpXG4rX19tc2coXCJSMT10cnVzdGVkX3B0cl9vcl9udWxsX3NrX2J1ZmZcIilcbiBpbnQgdGVzdF9yYXdfdHBfbnVsbF9icGZfdGVzdG1vZF90ZXN0X3Jhd190cF9udWxsX2FyZ18xKHZvaWQgKmN0eCkge1xuICAgICBhc20gdm9sYXRpbGUoXCJyMSA9ICoodTY0ICopKHIxICswKTsgcjEgPSAqKHU2NCAqKShyMSArMCk7XCIgOjo6IF9fY2xvYmJlcl9hbGwpO1xuICAgICByZXR1cm4gMDtcbiB9XG4gXG4tLyogQ2hlY2sgTlVMTCBtYXJraW5nICovXG4rLypcbisgKiBFbnN1cmUgc2NoZWRfcGlfc2V0cHJpbydzIHNlY29uZCBhcmd1bWVudCBpcyB0cnVzdGVkLW9yLU5VTEwgd2hpbGUgYWxsb3dpbmdcbisgKiBhIGZhdWx0LXByb3RlY3RlZCByZWFkIHdpdGhvdXQgYW4gZXhwbGljaXQgTlVMTCBjaGVjay5cbisgKi9cbiBTRUMoXCJ0cF9idGYvc2NoZWRfcGlfc2V0cHJpb1wiKVxuLV9fZmFpbHVyZSBfX21zZyhcIlIxIGludmFsaWQgbWVtIGFjY2VzcyAndHJ1c3RlZF9wdHJfb3JfbnVsbF8nXCIpXG4rX19zdWNjZXNzIF9fbG9nX2xldmVsKDIpXG4rX19tc2coXCJSMT10cnVzdGVkX3B0cl9vcl9udWxsX3Rhc2tfc3RydWN0XCIpXG4gaW50IHRlc3RfcmF3X3RwX251bGxfc2NoZWRfcGlfc2V0cHJpb19hcmdfMih2b2lkICpjdHgpIHtcbiAgICAgYXNtIHZvbGF0aWxlKFwicjEgPSAqKHU2NCAqKShyMSArOCk7IHIxID0gKih1NjQgKikocjEgKzApO1wiIDo6OiBfX2Nsb2JiZXJfYWxsKTtcbiAgICAgcmV0dXJuIDA7XG5AQCAtNjAsNyArNzIsOCBAQCBpbnQgdGVzdF90cF9idGZfc2lnbmFsX2RlbGl2ZXJfaW5mb19ub19kZXJlZih2b2lkICpjdHgpXG4gfVxuIFxuIFNFQyhcInRwX2J0Zi9zY2hlZF9wcm9jZXNzX3dhaXRcIilcbi1fX2ZhaWx1cmUgX19tc2coXCJSMSBpbnZhbGlkIG1lbSBhY2Nlc3MgJ3RydXN0ZWRfcHRyX29yX251bGxfJ1wiKVxuK19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxuK19fbXNnKFwiUjE9dHJ1c3RlZF9wdHJfb3JfbnVsbF9waWRcIilcbiBpbnQgdGVzdF9yYXdfdHBfbnVsbF9zY2hlZF9wcm9jZXNzX3dhaXRfYXJnXzEodm9pZCAqY3R4KVxuIHtcbiBcdGFzbSB2b2xhdGlsZShcInIxID0gKih1NjQgKikocjEgKzApOyByMSA9ICoodTMyICopKHIxICswKTtcIiA6OjogX19jbG9iYmVyX2FsbCk7XG5AQCAtNzUsMyArODgsNTggQEAgaW50IHRlc3RfcmF3X3RwX251bGxfc2NoZWRfcHJvY2Vzc193YWl0X2FyZ18xX2NoZWNrZWQodm9pZCAqY3R4KVxuIFx0XHQgICAgIFwicjEgPSAqKHUzMiAqKShyMSArMCk7XCIgOjo6IF9fY2xvYmJlcl9hbGwpO1xuIFx0cmV0dXJuIDA7XG4gfVxuK1xuK1NFQyhcInRwX2J0Zi9zY2hlZF9waV9zZXRwcmlvXCIpXG4rX19mYWlsdXJlIF9fbG9nX2xldmVsKDIpXG4rX19tc2coXCJSMT11bnRydXN0ZWRfcHRyX3Rhc2tfc3RydWN0XCIpXG4rX19tc2coXCJSMSBtdXN0IGJlIGEgcmN1IHBvaW50ZXJcIilcbitpbnQgQlBGX1BST0codHJ1c3RlZF9vcl9udWxsX3dhbGtfaXNfdW50cnVzdGVkLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssXG4rXHQgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqcGlfdGFzaylcbit7XG4rXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudCwgKmFjcXVpcmVkO1xuK1xuK1x0cGFyZW50ID0gcGlfdGFzay1cdTAwM2VyZWFsX3BhcmVudDtcbitcdGFjcXVpcmVkID0gYnBmX3Rhc2tfYWNxdWlyZShwYXJlbnQpO1xuK1x0aWYgKGFjcXVpcmVkKVxuK1x0XHRicGZfdGFza19yZWxlYXNlKGFjcXVpcmVkKTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJ0cF9idGYvc2NoZWRfcGlfc2V0cHJpb1wiKVxuK19fZmFpbHVyZSBfX21zZyhcIlIxIG11c3QgYmUgYSByY3UgcG9pbnRlclwiKVxuK2ludCBCUEZfUFJPRyhkZXJpdmVkX3B0cl9udWxsX2NoZWNrX2RvZXNfbm90X3Jlc3RvcmVfdHJ1c3QsXG4rXHQgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHRhc2tfc3RydWN0ICpwaV90YXNrKVxuK3tcbitcdHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50LCAqYWNxdWlyZWQ7XG4rXG4rXHRwYXJlbnQgPSBwaV90YXNrLVx1MDAzZXJlYWxfcGFyZW50O1xuK1x0aWYgKCFwYXJlbnQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0YWNxdWlyZWQgPSBicGZfdGFza19hY3F1aXJlKHBhcmVudCk7XG4rXHRpZiAoYWNxdWlyZWQpXG4rXHRcdGJwZl90YXNrX3JlbGVhc2UoYWNxdWlyZWQpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qXG4rICogSW4gY29udHJhc3QsIGNoZWNraW5nIHRoZSBvcmlnaW5hbCB0cnVzdGVkLW9yLU5VTEwgcG9pbnRlciByZW1vdmVzXG4rICogUFRSX01BWUJFX05VTEwgd2hpbGUgcmV0YWluaW5nIFBUUl9UUlVTVEVELlxuKyAqL1xuK1NFQyhcInRwX2J0Zi9zY2hlZF9waV9zZXRwcmlvXCIpXG4rX19zdWNjZXNzXG4raW50IEJQRl9QUk9HKG9yaWdpbmFsX3B0cl9udWxsX2NoZWNrX3JldGFpbnNfdHJ1c3QsXG4rXHQgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHRhc2tfc3RydWN0ICpwaV90YXNrKVxuK3tcbitcdHN0cnVjdCB0YXNrX3N0cnVjdCAqYWNxdWlyZWQ7XG4rXG4rXHRpZiAoIXBpX3Rhc2spXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0YWNxdWlyZWQgPSBicGZfdGFza19hY3F1aXJlKHBpX3Rhc2spO1xuK1x0aWYgKGFjcXVpcmVkKVxuK1x0XHRicGZfdGFza19yZWxlYXNlKGFjcXVpcmVkKTtcbitcbitcdHJldHVybiAwO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90cF9idGZfbnVsbGFibGUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RwX2J0Zl9udWxsYWJsZS5jXG5pbmRleCBjZjA1NDdhNjEzZmZjLi5iNzkxNDIyNGJhMTk0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdHBfYnRmX251bGxhYmxlLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RwX2J0Zl9udWxsYWJsZS5jXG5AQCAtNyw3ICs3LDcgQEBcbiAjaW5jbHVkZSBcImJwZl9taXNjLmhcIlxuIFxuIFNFQyhcInRwX2J0Zi9icGZfdGVzdG1vZF90ZXN0X251bGxhYmxlX2JhcmVfdHBcIilcbi1fX2ZhaWx1cmUgX19tc2coXCJSMSBpbnZhbGlkIG1lbSBhY2Nlc3MgJ3RydXN0ZWRfcHRyX29yX251bGxfJ1wiKVxuK19fc3VjY2Vzc1xuIGludCBCUEZfUFJPRyhoYW5kbGVfdHBfYnRmX251bGxhYmxlX2JhcmUxLCBzdHJ1Y3QgYnBmX3Rlc3Rtb2RfdGVzdF9yZWFkX2N0eCAqbnVsbGFibGVfY3R4KVxuIHtcbiBcdHJldHVybiBudWxsYWJsZV9jdHgtXHUwMDNlbGVuO1xuQEAgLTIxLDQgKzIxLDQ3IEBAIGludCBCUEZfUFJPRyhoYW5kbGVfdHBfYnRmX251bGxhYmxlX2JhcmUyLCBzdHJ1Y3QgYnBmX3Rlc3Rtb2RfdGVzdF9yZWFkX2N0eCAqbnVsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rU0VDKFwidHBfYnRmL2JwZl90ZXN0bW9kX3Rlc3RfbnVsbGFibGVfYmFyZV90cFwiKVxuK19fc3VjY2Vzc1xuK2ludCBCUEZfUFJPRyhoYW5kbGVfdHBfYnRmX251bGxhYmxlX21lbSwgc3RydWN0IGJwZl90ZXN0bW9kX3Rlc3RfcmVhZF9jdHggKm51bGxhYmxlX2N0eClcbit7XG4rXHRyZXR1cm4gbnVsbGFibGVfY3R4LVx1MDAzZWJ1ZlswXTtcbit9XG4rXG4rU0VDKFwidHBfYnRmL2JwZl90ZXN0bW9kX3Rlc3RfbnVsbGFibGVfYmFyZV90cFwiKVxuK19fZmFpbHVyZSBfX21zZyhcInBvaW50ZXIgYXJpdGhtZXRpYyBvbiB0cnVzdGVkX3B0cl9vcl9udWxsXyBwcm9oaWJpdGVkXCIpXG4raW50IEJQRl9QUk9HKGhhbmRsZV90cF9idGZfbnVsbGFibGVfYXJpdGgsIHN0cnVjdCBicGZfdGVzdG1vZF90ZXN0X3JlYWRfY3R4ICpudWxsYWJsZV9jdHgpXG4re1xuK1x0YXNtIHZvbGF0aWxlKFwiJVtjdHhdICs9IDFcIiA6IFtjdHhdIFwiK3JcIihudWxsYWJsZV9jdHgpKTtcbitcdHJldHVybiBudWxsYWJsZV9jdHgtXHUwMDNlbGVuO1xuK31cbitcbitTRUMoXCJ0cF9idGYvYnBmX3Rlc3Rtb2RfdGVzdF9udWxsYWJsZV9iYXJlX3RwXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiaW52YWxpZCBtZW0gYWNjZXNzICd0cnVzdGVkX3B0cl9vcl9udWxsXydcIilcbitpbnQgQlBGX1BST0coaGFuZGxlX3RwX2J0Zl9udWxsYWJsZV9hdG9taWNfcm13LFxuK1x0ICAgICBzdHJ1Y3QgYnBmX3Rlc3Rtb2RfdGVzdF9yZWFkX2N0eCAqbnVsbGFibGVfY3R4KVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXCJyMSA9ICVbY3R4XTtcIlxuK1x0XHQgICAgICBcIncyID0gMTtcIlxuK1x0XHQgICAgICBcImxvY2sgKih1MzIgKikocjEgKyAlW2xlbl0pICs9IHcyO1wiXG4rXHRcdCAgICAgIDpcbitcdFx0ICAgICAgOiBbY3R4XSBcInJcIihudWxsYWJsZV9jdHgpLFxuK1x0XHRcdF9faW1tX2NvbnN0KGxlbixcbitcdFx0XHRcdCAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3Rlc3Rtb2RfdGVzdF9yZWFkX2N0eCxcbitcdFx0XHRcdFx0ICAgICBsZW4pKVxuK1x0XHQgICAgICA6IFwicjFcIiwgXCJyMlwiLCBcIm1lbW9yeVwiKTtcbitcdHJldHVybiAwO1xuK31cbitcbisjaWZkZWYgX19CUEZfRkVBVFVSRV9MT0FEX0FDUV9TVE9SRV9SRUxcbitTRUMoXCJ0cF9idGYvYnBmX3Rlc3Rtb2RfdGVzdF9udWxsYWJsZV9iYXJlX3RwXCIpXG4rX19mYWlsdXJlXG4rX19tc2coXCJCUEZfQVRPTUlDIGxvYWRzIGZyb20gUnt7WzAtOV0rfX0gdHJ1c3RlZF9wdHJfb3JfbnVsbF9cIilcbitpbnQgQlBGX1BST0coaGFuZGxlX3RwX2J0Zl9udWxsYWJsZV9sb2FkX2FjcXVpcmUsXG4rXHQgICAgIHN0cnVjdCBicGZfdGVzdG1vZF90ZXN0X3JlYWRfY3R4ICpudWxsYWJsZV9jdHgpXG4re1xuK1x0cmV0dXJuIF9fYXRvbWljX2xvYWRfbihcdTAwMjZudWxsYWJsZV9jdHgtXHUwMDNlbGVuLCBfX0FUT01JQ19BQ1FVSVJFKTtcbit9XG4rI2VuZGlmXG4rXG4gY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RwX2J0Zl9udWxsYWJsZV9ydW50aW1lLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90cF9idGZfbnVsbGFibGVfcnVudGltZS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNWM5YzdmOTQwNDBkY1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdHBfYnRmX251bGxhYmxlX3J1bnRpbWUuY1xuQEAgLTAsMCArMSwzNSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rXG4rI2luY2x1ZGUgXCJ2bWxpbnV4LmhcIlxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl90cmFjaW5nLmhcdTAwM2VcbisjaW5jbHVkZSBcIi4uL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuaFwiXG4rXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuK1xuK2ludCBtb25pdG9yZWRfdGlkO1xuK2ludCBjYWxscztcbitfX3U2NCBub25udWxsX2xlbjtcbitfX3U2NCBudWxsX2xlbjtcbitcbitTRUMoXCJ0cF9idGYvYnBmX3Rlc3Rtb2RfdGVzdF9udWxsYWJsZV9iYXJlX3RwXCIpXG4raW50IEJQRl9QUk9HKGhhbmRsZV9udWxsYWJsZV9ydW50aW1lLFxuK1x0ICAgICBzdHJ1Y3QgYnBmX3Rlc3Rtb2RfdGVzdF9yZWFkX2N0eCAqbnVsbGFibGVfY3R4KVxuK3tcbitcdF9fdTMyIHRpZCA9IGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpO1xuK1x0X191NjQgbGVuO1xuK1x0aW50IGNhbGw7XG4rXG4rXHRpZiAodGlkICE9IG1vbml0b3JlZF90aWQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0bGVuID0gbnVsbGFibGVfY3R4LVx1MDAzZWxlbjtcbitcdGNhbGwgPSBjYWxscysrO1xuK1xuK1x0aWYgKGNhbGwgPT0gMClcbitcdFx0bm9ubnVsbF9sZW4gPSBsZW47XG4rXHRlbHNlIGlmIChjYWxsID09IDEpXG4rXHRcdG51bGxfbGVuID0gbGVuO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sc20uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sc20uY1xuaW5kZXggYzcyNGJmMzg5ZjVjNi4uZmFjMTMzZDkwZjVlNiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sc20uY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xzbS5jXG5AQCAtMTYyLDEzICsxNjIsMTMgQEAgX19uYWtlZCBpbnQgZGlzYWJsZWRfaG9va190ZXN0Myh2b2lkICpjdHgpXG4gXG4gU0VDKFwibHNtL21tYXBfZmlsZVwiKVxuIF9fZGVzY3JpcHRpb24oXCJub3QgbnVsbCBjaGVja2luZyBudWxsYWJsZSBwb2ludGVyIGluIGJwZl9sc21fbW1hcF9maWxlXCIpXG4tX19mYWlsdXJlIF9fbXNnKFwiUjEgaW52YWxpZCBtZW0gYWNjZXNzICd0cnVzdGVkX3B0cl9vcl9udWxsXydcIilcbitfX3N1Y2Nlc3NcbiBpbnQgQlBGX1BST0cobm9fbnVsbF9jaGVjaywgc3RydWN0IGZpbGUgKmZpbGUpXG4ge1xuLVx0c3RydWN0IGlub2RlICppbm9kZTtcbitcdGlub190IGlubztcbiBcbi1cdGlub2RlID0gZmlsZS1cdTAwM2VmX2lub2RlO1xuLVx0X19zaW5rKGlub2RlKTtcbitcdGlubyA9IGZpbGUtXHUwMDNlZl9pbm9kZS1cdTAwM2VpX2lubztcbitcdF9fc2luayhpbm8pO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTE4OCw2ICsxODgsMTYgQEAgaW50IEJQRl9QUk9HKG51bGxfY2hlY2ssIHN0cnVjdCBmaWxlICpmaWxlKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK1NFQyhcImxzbS9tbWFwX2ZpbGVcIilcbitfX2Rlc2NyaXB0aW9uKFwic3RvcmUgdGhyb3VnaCB0cnVzdGVkLW9yLW51bGwgZmlsZSBpcyByZWplY3RlZFwiKVxuK19fZmFpbHVyZVxuK19fbXNnKFwiUnt7WzAtOV0rfX0gaW52YWxpZCBtZW0gYWNjZXNzICd0cnVzdGVkX3B0cl9vcl9udWxsXydcIilcbitpbnQgQlBGX1BST0coc3RvcmVfdGhyb3VnaF90cnVzdGVkX29yX251bGxfZmlsZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4re1xuK1x0ZmlsZS1cdTAwM2VmX2ZsYWdzID0gMDtcbitcdHJldHVybiAwO1xuK31cbitcbiBTRUMoXCJsc21fY2dyb3VwL2ZpbGVfb3BlblwiKVxuIF9fZGVzY3JpcHRpb24oXCJzbGVlcGFibGUgbHNtX2Nncm91cCBwcm9ncmFtIGlzIHJlamVjdGVkXCIpXG4gX19mYWlsdXJlIF9fbXNnKFwiUHJvZ3JhbSBvZiB0aGlzIHR5cGUgY2Fubm90IGJlIHNsZWVwYWJsZVwiKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl92ZnNfYWNjZXB0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdmZzX2FjY2VwdC5jXG5pbmRleCA1NTM5OGMwNDI5MGE4Li4xN2MxNTQyY2M3ZTE3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3Zmc19hY2NlcHQuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3Zmc19hY2NlcHQuY1xuQEAgLTEwMCw0ICsxMDAsMTggQEAgaW50IEJQRl9QUk9HKGlub2RlX3JlbmFtZSwgc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK1NFQyhcImxzbS5zL2lub2RlX3JlbmFtZVwiKVxuK19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxuK19fbXNnKFwiUnt7WzAtOV0rfX09dHJ1c3RlZF9wdHJfb3JfbnVsbF9pbm9kZVwiKVxuK2ludCBCUEZfUFJPRyhpbm9kZV9yZW5hbWVfbm9fbnVsbF9jaGVjaywgc3RydWN0IGlub2RlICpvbGRfZGlyLFxuK1x0ICAgICBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKm5ld19kaXIsXG4rXHQgICAgIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnksIHVuc2lnbmVkIGludCBmbGFncylcbit7XG4rXHRpbm9fdCBpbm8gPSBuZXdfZGVudHJ5LVx1MDAzZWRfaW5vZGUtXHUwMDNlaV9pbm87XG4rXG4rXHRpZiAoaW5vID09IDApXG4rXHRcdHJldHVybiAtRUFDQ0VTO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIGNoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdmZzX3JlamVjdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3Zmc19yZWplY3QuY1xuaW5kZXggOGYwYzQ1NDIxZjg5My4uMmEwODEzMjU4MTgzZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl92ZnNfcmVqZWN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl92ZnNfcmVqZWN0LmNcbkBAIC0xNTksMTggKzE1OSw0IEBAIGludCBCUEZfUFJPRyhwYXRoX2RfcGF0aF9rZnVuY19ub25fbHNtLCBzdHJ1Y3QgcGF0aCAqcGF0aCwgc3RydWN0IGZpbGUgKmYpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tU0VDKFwibHNtLnMvaW5vZGVfcmVuYW1lXCIpXG4tX19mYWlsdXJlIF9fbXNnKFwiaW52YWxpZCBtZW0gYWNjZXNzICd0cnVzdGVkX3B0cl9vcl9udWxsXydcIilcbi1pbnQgQlBGX1BST0coaW5vZGVfcmVuYW1lLCBzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4tXHQgICAgIHN0cnVjdCBpbm9kZSAqbmV3X2Rpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSxcbi1cdCAgICAgdW5zaWduZWQgaW50IGZsYWdzKVxuLXtcbi1cdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBuZXdfZGVudHJ5LVx1MDAzZWRfaW5vZGU7XG4tXHRpbm9fdCBpbm87XG4tXG4tXHRpbm8gPSBpbm9kZS1cdTAwM2VpX2lubztcbi1cdGlmIChpbm8gPT0gMClcbi1cdFx0cmV0dXJuIC1FQUNDRVM7XG4tXHRyZXR1cm4gMDtcbi19XG4gY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jXG5pbmRleCBmNzk4YmJiYjRkMTNjLi4yYmE2YTgzZDI0M2Y1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuY1xuQEAgLTcwMiw2ICs3MDIsNyBAQCBicGZfdGVzdG1vZF90ZXN0X3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuIFx0aWYgKGJwZl90ZXN0bW9kX2xvb3BfdGVzdCgxMDEpIFx1MDAzZSAxMDApXG4gXHRcdHRyYWNlX2JwZl90ZXN0bW9kX3Rlc3RfcmVhZChjdXJyZW50LCBcdTAwMjZjdHgpO1xuIFxuK1x0dHJhY2VfYnBmX3Rlc3Rtb2RfdGVzdF9udWxsYWJsZV9iYXJlX3RwKFx1MDAyNmN0eCk7XG4gXHR0cmFjZV9icGZfdGVzdG1vZF90ZXN0X251bGxhYmxlX2JhcmVfdHAoTlVMTCk7XG4gXG4gXHQvKiBNYWdpYyBudW1iZXIgdG8gZW5hYmxlIHdyaXRhYmxlIHRwICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2NoZWRfZXh0L21heWJlX251bGxfZmFpbF9kc3AuYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zY2hlZF9leHQvbWF5YmVfbnVsbF9mYWlsX2RzcC5icGYuY1xuaW5kZXggZWM3MjRkN2IzM2QxOC4uZWNhYTM2MzU1Y2FlYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NjaGVkX2V4dC9tYXliZV9udWxsX2ZhaWxfZHNwLmJwZi5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zY2hlZF9leHQvbWF5YmVfbnVsbF9mYWlsX2RzcC5icGYuY1xuQEAgLTcsMTQgKzcsMTMgQEBcbiBcbiBjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4gXG4tdTY0IHZ0aW1lX3Rlc3Q7XG4tXG4gdm9pZCBCUEZfU1RSVUNUX09QUyhtYXliZV9udWxsX3J1bm5pbmcsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiB7fVxuIFxuIHZvaWQgQlBGX1NUUlVDVF9PUFMobWF5YmVfbnVsbF9mYWlsX2Rpc3BhdGNoLCBzMzIgY3B1LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4ge1xuLVx0dnRpbWVfdGVzdCA9IHAtXHUwMDNlc2N4LmRzcV92dGltZTtcbitcdC8qIFBvaW50ZXIgYXJpdGhtZXRpYyBvbiBhIHRydXN0ZWQtb3ItTlVMTCBwb2ludGVyIG11c3QgYmUgcmVqZWN0ZWQuICovXG4rXHRhc20gdm9sYXRpbGUoXCIlW3BdICs9IDBcIiA6IFtwXSBcIityXCIocCkpO1xuIH1cbiBcbiBTRUMoXCIuc3RydWN0X29wcy5saW5rXCIpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDoyMDo1NS42Nzg1OTQzNDRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3Mjg0MTgwNDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBQYXRjaCBmb3IgU3l6a2FsbGVyIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoICpkb2VzKiB3YXJyYW50IGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiBmb3IgZnV6emluZyBwb3RlbnRpYWwgd2l0aCBzeXprYWxsZXIuIFRoZSBjb2RlIHRvdWNoZXMgc2V2ZXJhbCBrZXkgYXJlYXMgb2YgdGhlIGtlcm5lbCwgYW5kIHRoZSBjaGFuZ2VzIGFyZSBzaWduaWZpY2FudCBlbm91Z2ggdG8gd2FycmFudCBhIGZvY3VzZWQgYXBwcm9hY2guXG5cbkZpcnN0LCBJIHNlZSBtb2RpZmljYXRpb25zIGluIGBmcy9leGVjLmNgLCBzcGVjaWZpY2FsbHkgYGZyZWVfYnBybWAuIFdoaWxlIGl0IGxvb2tzIGxpa2UgYSBzbWFsbCBjaGFuZ2UsIHNldHRpbmcgYGJwcm0tXHUwMDNlbW0gPSBOVUxMYCBiZWZvcmUgYG1tcHV0KG1tKWAgY291bGQgcG90ZW50aWFsbHkgaW50cm9kdWNlIHN1YnRsZSBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgdGhhdCBmdXp6aW5nIGNvdWxkIHVuY292ZXIuXG5cblRoZW4sIHRoZSBzZWNvbmQgc2VjdGlvbiwgZW5jb21wYXNzaW5nIGBpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oYCBhbmQgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIGlzIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZy4gVGhlIGludHJvZHVjdGlvbiBvZiBgYnBmX2lzX3RydXN0ZWRfb3JfbnVsbF9idGZfcHRyYCBhbmQgdGhlIHJlbGF0ZWQgbW9kaWZpY2F0aW9ucyB0byBgYnBmX21heV9mYXVsdF9vbl9kZXJlZmAgd2l0aGluIHRoZSBCUEYgdmVyaWZpZXIgYXJlIGhpZ2gtdmFsdWUgdGFyZ2V0cy4gVGhpcyBpbmRpY2F0ZXMgbmV3IGxvZ2ljIGZvciBoYW5kbGluZyBwb3RlbnRpYWxseSB1bnRydXN0ZWQgcG9pbnRlcnMsIHdoaWNoIGlzIGEgcHJpbWUgYXJlYSBmb3IgZnV6emluZy4gVGhlIGNoYW5nZXMgYXJvdW5kIGBCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTGAgYW5kIHRoZSBhbHRlcmF0aW9ucyBpbiBgY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3NgIGFuZCBgY2hlY2tfbWVtX2FjY2Vzc2AgcG9pbnQgdG8gcG90ZW50aWFsIG5ldyBCUEYgZmVhdHVyZXMgYW5kIHZ1bG5lcmFiaWxpdGllcy5cblxuVGhlIGFkZGl0aW9uIG9mIG5ldyBrZnVuY3MgbGlrZSBgYnBmX2NvcHlfZnJvbV91c2VyX21tYCwgYGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHJgLCBhbmQgdGhlIHJlZmFjdG9yaW5nIG9mIGV4aXN0aW5nIGZ1bmN0aW9ucyB0byB1c2UgdGhlbSAoYGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrYCwgYGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3N0cmApIGFyZSBhbHNvIG5vdGV3b3J0aHkuIFRoZSBmYWN0IHRoYXQgdGhlc2Uga2Z1bmNzIGFyZSByZWdpc3RlcmVkIGFzIGBLRl9TTEVFUEFCTEVgIHN1Z2dlc3RzIGEgbGlrZWx5IG5ldyBzZXQgb2YgZmVhdHVyZXMgb3IgZW5oYW5jZW1lbnRzIGZvciBicGYgcHJvZ3JhbXMuIFRoZSBjaGFuZ2VzIHRvIGhvdyBkYXRhIGlzIGNvcGllZCBmcm9tIHVzZXIgc3BhY2UgKnRocm91Z2gqIHRoZSBtbSBsYXllciwgYW5kIHRoZSBwb3RlbnRpYWwgZm9yIHJhY2VzIGludHJvZHVjZWQgYnkgdGhlIHVzZSBvZiBzbGVlcGFibGUga2Z1bmNzLCBpcyBzaWduaWZpY2FudCBmb3Igc2VjdXJpdHkuXG5cblRoZSBjaGFuZ2VzIGluIGBtbS9pbnRlcm5hbC5oYCwgYG1tL21lbW9yeS5jYCwgYG1tL25vbW11LmNgLCBhbmQgYG1tL3V0aWwuY2AgYXJlIGFsc28gaW1wb3J0YW50LiBUaGUgaW50cm9kdWN0aW9uIG9mIGBjb3B5X3JlbW90ZV9tbV9zdHJgIChwcmV2aW91c2x5IGBfX2NvcHlfcmVtb3RlX3ZtX3N0cmApIGFuZCBpdHMgaW50ZXJhY3Rpb25zIHdpdGggYGdldF90YXNrX21tKHRzaylgIGluZGljYXRlIG1vZGlmaWNhdGlvbnMgcmVsYXRlZCB0byByZW1vdGUgbWVtb3J5IG1hbmlwdWxhdGlvbi4gVGhpcyBjb3VsZCBoYXZlIGltcGxpY2F0aW9ucyBmb3IgbWVtb3J5IGNvcnJ1cHRpb24sIHJhY2VzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzLlxuXG5UaGUgZXhpc3RlbmNlIG9mIHRlc3RzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy8uLi5gIGFkZHMgZnVydGhlciB3ZWlnaHQgdG8gdGhlIGlkZWEgdGhhdCB0aGlzIGlzIHNpZ25pZmljYW50IGNvZGUuIFRoZSB0ZXN0cyBtYXkgbm90IGJlIGV4aGF1c3RpdmUsIHNvIGEgY2FyZWZ1bGx5IGNyYWZ0ZWQgZnV6emluZyBjYW1wYWlnbiBpcyB3b3J0aHdoaWxlLlxuXG5UaGUgZmFjdCB0aGF0IGFsbCB0aGlzIGNvZGUgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIFFFTVUvYW1kNjQgc2V0dXBzLCB2aWEgdGhlIEJQRiBzeXNjYWxsIChlQlBGIHByb2dyYW1zLCBMU00gaG9va3MsIHRyYWNlcG9pbnRzLCBzeXNjYWxscywgZXRjLikgYW5kIGBleGVjdmVgLCBpcyB0aGUga2V5IGZhY3Rvci4gVGhlIGNvcmUgQlBGIHZlcmlmaWVyLCB0aGUgQlBGIGhlbHBlcnMva2Z1bmNzLCB0aGUgbW0gZnVuY3Rpb25zLCBhbmQgZXZlbiBgZnJlZV9icHJtYCBhcmUgYWxsIHdpdGhpbiB0aGUgYXR0YWNrIHN1cmZhY2UuXG5cbkJhc2VkIG9uIHRoZSBjcml0ZXJpYSBmb3IgXCJXb3J0aEZ1enppbmc9dHJ1ZSxcIiB0aGlzIHBhdGNoIGRlZmluaXRlbHkgbWVldHMgdGhlIHJlcXVpcmVtZW50cy4gSXQgdG91Y2hlcyBjb3JlIHN1YnN5c3RlbXMgKEJQRiwgbW0pLCBpbmNsdWRlcyByZWZhY3RvcmluZ3MsIGFuZCBpbnRyb2R1Y2VzIG5ldyBsb2dpYyB3aXRoaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG5cbk5vdywgSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBLY29uZmlnIG9wdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgZm9yIEJQRiBzeXNjYWxsLCB0aGUgQlBGIHZlcmlmaWVyLCB0aGUgbmV3IGtmdW5jcywgYW5kIGV2ZXJ5dGhpbmcgZWxzZSBpbiB0aGlzIHBhdGNoLiBJJ2xsIG5lZWQgdG8gdXNlIGdyZXBwZXIgb3Igc291cmNlIGluc3BlY3Rpb24gdG8gZGV0ZXJtaW5lIGFsbCByZWxldmFudCBjb25maWcgb3B0aW9ucy4gVGhlbiBJJ2xsIGlkZW50aWZ5IHRoZSBjcml0aWNhbCBmb2N1cyBzeW1ib2xzIHRvIGZlZWQgc3l6a2FsbGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzk5NCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMzcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDoyMTowMi45NjI3Nzg2NDNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgzODI3NDI5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI5PW1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTMwLVxcbmtlcm5lbC9icGYvS2NvbmZpZzozMTpjb25maWcgQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL0tjb25maWctMzItXFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDoyMTowNS44MDEwNjA3MjFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzkxMTQ1NDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgQlBGX1NZU0NBTEwgRGVwZW5kZW5jaWVzIGluIEtjb25maWcqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMzEuIFRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljIGFuZCBkZXBlbmRlbmNpZXMgZm9yIHRoZSBgQlBGX1NZU0NBTExgIG9wdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBLY29uZmlnIHN5bWJvbHMsIGFuZCB0aHVzIGNvbmZpZ3VyYXRpb25zLCBtdXN0IGJlIGVuYWJsZWQgZm9yIEJQRiBzeXNjYWxsIHN1cHBvcnQgdG8gYmUgY29tcGlsZWQgaW50byB0aGUga2VybmVsLiBUaGlzIGlzbid0IGp1c3QgYWJvdXQgdGhlIGRpcmVjdCBkZXBlbmRlbmNpZXMsIGJ1dCBhbHNvIHRoZSBpbmRpcmVjdGx5IGltcGxpZWQgb25lcy4gSSdtIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoaW5ncyBsaWtlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyByZXF1aXJlbWVudHMgKGxpa2Ugd2hldGhlciB0aGUgYXJjaGl0ZWN0dXJlIHByb3ZpZGVzIHRoZSBuZWVkZWQgaW5mcmFzdHJ1Y3R1cmUpLCBzZWN1cml0eSBmZWF0dXJlcywgb3IgZXZlbiBvdGhlciBCUEYtcmVsYXRlZCBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGJlIGEgcHJlcmVxdWlzaXRlLiBLbm93aW5nIHRoaXMgaXMgY3J1Y2lhbCBmb3IgZGVidWdnaW5nIGJ1aWxkIHByb2JsZW1zLCB0YWlsb3JpbmcgYSBjdXN0b20ga2VybmVsIGNvbmZpZ3VyYXRpb24sIG9yIGV2ZW4gcHJlZGljdGluZyBwb3RlbnRpYWwgY29tcGF0aWJpbGl0eSBpc3N1ZXMuIEknbSBleHBlY3RpbmcgdG8gc2VlIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzIGxpbmtpbmcgdGhpcyBzeW1ib2wgdG8gc3BlY2lmaWMgaGFyZHdhcmUgZmVhdHVyZXMgb3Igb3RoZXIgbW9kdWxlcy4gVGltZSB0byBjb25maXJtIGFuZCByZWZpbmUgbXkgbWVudGFsIG1vZGVsIG9mIHdoYXQgbmVlZHMgdG8gYmUgaW4gcGxhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMDE3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjA6MjE6MDguNTkyMjA4NTk4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzMjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAzMDpcXHRcXG4gIDMxOlxcdGNvbmZpZyBCUEZfU1lTQ0FMTFxcbiAgMzI6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcbiAgMzM6XFx0XFx0c2VsZWN0IEJQRlxcbiAgMzQ6XFx0XFx0c2VsZWN0IElSUV9XT1JLXFxuICAzNTpcXHRcXHRzZWxlY3QgTkVFRF9UQVNLU19SQ1VcXG4gIDM2OlxcdFxcdHNlbGVjdCBUQVNLU19UUkFDRV9SQ1VcXG4gIDM3OlxcdFxcdHNlbGVjdCBCSU5BUllfUFJJTlRGXFxuICAzODpcXHRcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHIGlmIE5FVFxcbiAgMzk6XFx0XFx0c2VsZWN0IE5FVF9YR1JFU1MgaWYgTkVUXFxuICA0MDpcXHRcXHRzZWxlY3QgUEFHRV9QT09MIGlmIE5FVFxcbiAgNDE6XFx0XFx0ZGVmYXVsdCBuXFxuICA0MjpcXHRcXHRoZWxwXFxuICA0MzpcXHRcXHQgIEVuYWJsZSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gbWFuaXB1bGF0ZSBCUEYgcHJvZ3JhbXNcXG4gIDQ0OlxcdFxcdCAgYW5kIG1hcHMgdmlhIGZpbGUgZGVzY3JpcHRvcnMuXFxuICA0NTpcXHRcXG4gIDQ2OlxcdGNvbmZpZyBCUEZfSklUXFxuICA0NzpcXHRcXHRib29sIFxcXCJFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclxcXCJcXG4gIDQ4OlxcdFxcdGRlcGVuZHMgb24gQlBGXFxuICA0OTpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfQ0JQRl9KSVQgfHwgSEFWRV9FQlBGX0pJVFxcbiAgNTA6XFx0XFx0c2VsZWN0IEVYRUNNRU1cXG4gIDUxOlxcdFxcdGhlbHBcXG4gIDUyOlxcdFxcdCAgQlBGIHByb2dyYW1zIGFyZSBub3JtYWxseSBoYW5kbGVkIGJ5IGEgQlBGIGludGVycHJldGVyLiBUaGlzIG9wdGlvblxcbiAgNTM6XFx0XFx0ICBhbGxvd3MgdGhlIGtlcm5lbCB0byBnZW5lcmF0ZSBuYXRpdmUgY29kZSB3aGVuIGEgcHJvZ3JhbSBpcyBsb2FkZWRcXG4gIDU0OlxcdFxcdCAgaW50byB0aGUga2VybmVsLiBUaGlzIHdpbGwgc2lnbmlmaWNhbnRseSBzcGVlZC11cCBwcm9jZXNzaW5nIG9mIEJQRlxcbiAgNTU6XFx0XFx0ICBwcm9ncmFtcy5cXG4gIDU2OlxcdFxcbiAgNTc6XFx0XFx0ICBOb3RlLCBhbiBhZG1pbiBzaG91bGQgZW5hYmxlIHRoaXMgZmVhdHVyZSBjaGFuZ2luZzpcXG4gIDU4OlxcdFxcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfZW5hYmxlXFxuICA1OTpcXHRcXHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2hhcmRlbiAgIChvcHRpb25hbClcXG4gIDYwOlxcdFxcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfa2FsbHN5bXMgKG9wdGlvbmFsKVxcbiAgNjE6XFx0XFxuICA2MjpcXHRjb25maWcgQlBGX0pJVF9BTFdBWVNfT05cXG4gIDYzOlxcdFxcdGJvb2wgXFxcIlBlcm1hbmVudGx5IGVuYWJsZSBCUEYgSklUIGFuZCByZW1vdmUgQlBGIGludGVycHJldGVyXFxcIlxcbiAgNjQ6XFx0XFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTCBcXHUwMDI2XFx1MDAyNiBIQVZFX0VCUEZfSklUIFxcdTAwMjZcXHUwMDI2IEJQRl9KSVRcXG4gIDY1OlxcdFxcdGhlbHBcXG4gIDY2OlxcdFxcdCAgRW5hYmxlcyBCUEYgSklUIGFuZCByZW1vdmVzIEJQRiBpbnRlcnByZXRlciB0byBhdm9pZCBzcGVjdWxhdGl2ZVxcbiAgNjc6XFx0XFx0ICBleGVjdXRpb24gb2YgQlBGIGluc3RydWN0aW9ucyBieSB0aGUgaW50ZXJwcmV0ZXIuXFxuICA2ODpcXHRcXG4gIDY5OlxcdFxcdCAgV2hlbiBDT05GSUdfQlBGX0pJVF9BTFdBWVNfT04gaXMgZW5hYmxlZCwgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfZW5hYmxlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIwOjIxOjA4LjU5MjMxNTQ1OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNDI3NzgzNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRlYnVnZ2luZyBCVEYgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGdpdmVuIHRoYXQgd2UncmUgZGVhbGluZyB3aXRoIGJvdGggQlRGLCBhbmQgdGhlIHBvdGVudGlhbCBmb3Iga2Z1bmNzIGFuZC9vciB0cnVzdGVkIHBvaW50ZXJzLCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGhvdyBgREVCVUdfSU5GT19CVEZgIGlzIGNvbmZpZ3VyZWQuIFdlJ3JlIG9idmlvdXNseSByZWx5aW5nIG9uIEJURiBkYXRhIGZvciBzb21lIGNyaXRpY2FsIGZ1bmN0aW9uYWxpdHkgaGVyZSwgd2hldGhlciBpdCdzIHN5bWJvbCByZXNvbHV0aW9uLCB0eXBlIGluZm9ybWF0aW9uLCBvciBwb3RlbnRpYWxseSB2YWxpZGF0aW9uIHJlbGF0ZWQgdG8gdGhlc2UgbW9yZSBhZHZhbmNlZCBmZWF0dXJlcy4gU28sIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgdmVyaWZ5IHRoZSBzdGF0ZSBvZiBCVEYuIEVzc2VudGlhbGx5LCBJJ20gdGhpbmtpbmcsIFwiTGV0J3MgY2hlY2sgYERFQlVHX0lORk9fQlRGYCBhbmQgdmVyaWZ5IGl0cyBjdXJyZW50IGNvbmZpZ3VyYXRpb24gZm9yIHRoZXNlIEJURiBkZXBlbmRlbmNpZXMuXCIgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBhc3BlY3RzIG9mIEJURiBhcmUgYWN0aXZlIGFuZCBhdmFpbGFibGUuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgdmVyaWZ5aW5nIHRoYXQgdGhlIGV4cGVjdGVkIG1ldGFkYXRhIGlzIHByZXNlbnQgYW5kIGZ1bmN0aW9uaW5nIGFzIGludGVuZGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDkyOCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjA6MjE6MTAuNzM1MDk2MzQ2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NzA0NzE2NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERFQlVHX0lORk9fQlRGXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi9LY29uZmlnLmRlYnVnPTM3OD1jb25maWcgREVCVUdfSU5GT19TUExJVFxcbi0tXFxubGliL0tjb25maWcuZGVidWctMzk3LVxcbmxpYi9LY29uZmlnLmRlYnVnOjM5ODpjb25maWcgREVCVUdfSU5GT19CVEZcXG5saWIvS2NvbmZpZy5kZWJ1Zy0zOTktXFx0Ym9vbCBcXFwiR2VuZXJhdGUgQlRGIHR5cGUgaW5mb3JtYXRpb25cXFwiXFxuLS1cXG5saWIvS2NvbmZpZy5kZWJ1Zz00MTk9Y29uZmlnIFBBSE9MRV9IQVNfTEFOR19FWENMVURFXFxuLS1cXG5saWIvS2NvbmZpZy5kZWJ1Zy00MjctXFxubGliL0tjb25maWcuZGVidWc6NDI4OmNvbmZpZyBERUJVR19JTkZPX0JURl9NT0RVTEVTXFxubGliL0tjb25maWcuZGVidWctNDI5LVxcdGJvb2wgXFxcIkdlbmVyYXRlIEJURiB0eXBlIGluZm9ybWF0aW9uIGZvciBrZXJuZWwgbW9kdWxlc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjA6MjE6MTMuNDA1NTczNTA2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTcyODI0NDIzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWJ1Z2dpbmcgdGhlIERlYnVnZ2luZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIG5pdHR5LWdyaXR0eS4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBkZWJ1Z2dpbmcgY29uZmlndXJhdGlvbiwgc28gSSdtIGhlYWRpbmcgc3RyYWlnaHQgZm9yIGBsaWIvS2NvbmZpZy5kZWJ1Z2AuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIEkgbmVlZCB0byB6ZXJvIGluIG9uIGxpbmUgMzk4LiBUaGF0J3MgdXN1YWxseSB3aGVyZSB0aGUgbWVhdCBvZiBhIHNwZWNpZmljIGRlYnVnZ2luZyBzZXR0aW5nLCBvciBhIHJlbGF0ZWQgZ3JvdXBpbmcsIHRlbmRzIHRvIGJlLiBJJ3ZlIGdvdCBhIGZlZWxpbmcgdGhlIHNvbHV0aW9uIEknbSBzZWVraW5nIGlzIGdvaW5nIHRvIGJlIG5lYXJieS4gTGV0J3Mgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTMzNywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIwOjIxOjE1LjEzMzgyMjA2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4MDE4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Z1wiLFxuICBcIkZpcnN0TGluZVwiOiAzOTUsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzOTU6XFx0XFx0ICB0byBrbm93IGFib3V0IHRoZSAuZHdvIGZpbGVzIGFuZCBpbmNsdWRlIHRoZW0uXFxuIDM5NjpcXHRcXHQgIEluY29tcGF0aWJsZSB3aXRoIG9sZGVyIHZlcnNpb25zIG9mIGNjYWNoZS5cXG4gMzk3OlxcdFxcbiAzOTg6XFx0Y29uZmlnIERFQlVHX0lORk9fQlRGXFxuIDM5OTpcXHRcXHRib29sIFxcXCJHZW5lcmF0ZSBCVEYgdHlwZSBpbmZvcm1hdGlvblxcXCJcXG4gNDAwOlxcdFxcdGRlcGVuZHMgb24gIURFQlVHX0lORk9fU1BMSVQgXFx1MDAyNlxcdTAwMjYgIURFQlVHX0lORk9fUkVEVUNFRFxcbiA0MDE6XFx0XFx0ZGVwZW5kcyBvbiAhR0NDX1BMVUdJTl9SQU5EU1RSVUNUIHx8IENPTVBJTEVfVEVTVFxcbiA0MDI6XFx0XFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxcbiA0MDM6XFx0XFx0ZGVwZW5kcyBvbiBQQUhPTEVfVkVSU0lPTiBcXHUwMDNlPSAxMjJcXG4gNDA0OlxcdFxcdCMgcGFob2xlIHVzZXMgZWxmdXRpbHMsIHdoaWNoIGRvZXMgbm90IGhhdmUgc3VwcG9ydCBmb3IgSGV4YWdvbiByZWxvY2F0aW9uc1xcbiA0MDU6XFx0XFx0ZGVwZW5kcyBvbiAhSEVYQUdPTlxcbiA0MDY6XFx0XFx0aGVscFxcbiA0MDc6XFx0XFx0ICBHZW5lcmF0ZSBkZWR1cGxpY2F0ZWQgQlRGIHR5cGUgaW5mb3JtYXRpb24gZnJvbSBEV0FSRiBkZWJ1ZyBpbmZvLlxcbiA0MDg6XFx0XFx0ICBUdXJuaW5nIHRoaXMgb24gcmVxdWlyZXMgcGFob2xlIHYxLjIyIG9yIGxhdGVyLCB3aGljaCB3aWxsIGNvbnZlcnRcXG4gNDA5OlxcdFxcdCAgRFdBUkYgdHlwZSBpbmZvIGludG8gZXF1aXZhbGVudCBkZWR1cGxpY2F0ZWQgQlRGIHR5cGUgaW5mby5cXG4gNDEwOlxcdFxcbiA0MTE6XFx0Y29uZmlnIFBBSE9MRV9IQVNfQlRGX1RBR1xcbiA0MTI6XFx0XFx0ZGVmX2Jvb2wgUEFIT0xFX1ZFUlNJT04gXFx1MDAzZT0gMTIzXFxuIDQxMzpcXHRcXHRkZXBlbmRzIG9uIENDX0lTX0NMQU5HXFxuIDQxNDpcXHRcXHRoZWxwXFxuIDQxNTpcXHRcXHQgIERlY2lkZSB3aGV0aGVyIHBhaG9sZSBlbWl0cyBidGZfdGFnIGF0dHJpYnV0ZXMgKGJ0Zl90eXBlX3RhZyBhbmRcXG4gNDE2OlxcdFxcdCAgYnRmX2RlY2xfdGFnKSBvciBub3QuIEN1cnJlbnRseSBvbmx5IGNsYW5nIGNvbXBpbGVyIGltcGxlbWVudHNcXG4gNDE3OlxcdFxcdCAgdGhlc2UgYXR0cmlidXRlcywgc28gbWFrZSB0aGUgY29uZmlnIGRlcGVuZCBvbiBDQ19JU19DTEFORy5cXG4gNDE4OlxcdFxcbiA0MTk6XFx0Y29uZmlnIFBBSE9MRV9IQVNfTEFOR19FWENMVURFXFxuIDQyMDpcXHRcXHRkZWZfYm9vbCBQQUhPTEVfVkVSU0lPTiBcXHUwMDNlPSAxMjRcXG4gNDIxOlxcdFxcdGhlbHBcXG4gNDIyOlxcdFxcdCAgU3VwcG9ydCBmb3IgdGhlIC0tbGFuZ19leGNsdWRlIGZsYWcgd2hpY2ggbWFrZXMgcGFob2xlIGV4Y2x1ZGVcXG4gNDIzOlxcdFxcdCAgY29tcGlsYXRpb24gdW5pdHMgZnJvbSB0aGUgc3VwcGxpZWQgbGFuZ3VhZ2UuIFVzZWQgaW4gS2J1aWxkIHRvXFxuIDQyNDpcXHRcXHQgIG9taXQgUnVzdCBDVXMgd2hpY2ggYXJlIG5vdCBzdXBwb3J0ZWQgaW4gdmVyc2lvbiAxLjI0IG9mIHBhaG9sZSxcXG4gNDI1OlxcdFxcdCAgb3RoZXJ3aXNlIGl0IHdvdWxkIGVtaXQgbWFsZm9ybWVkIGtlcm5lbCBhbmQgbW9kdWxlIGJpbmFyaWVzIHdoZW5cXG4gNDI2OlxcdFxcdCAgdXNpbmcgREVCVUdfSU5GT19CVEZfTU9EVUxFUy5cXG4gNDI3OlxcdFxcbiA0Mjg6XFx0Y29uZmlnIERFQlVHX0lORk9fQlRGX01PRFVMRVNcXG4gNDI5OlxcdFxcdGJvb2wgXFxcIkdlbmVyYXRlIEJURiB0eXBlIGluZm9ybWF0aW9uIGZvciBrZXJuZWwgbW9kdWxlc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjA6MjE6MTUuMTM0NTA4MzVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjEyNjA3OTc3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyBCUEYgYW5kIExTTSBDb25maWd1cmF0aW9ucyoqXG5cbkFscmlnaHQsIGJlZm9yZSBkaXZpbmcgdG9vIGRlZXAsIEkgbmVlZCB0byB0YWtlIGEgc3RlcCBiYWNrIGFuZCBleGFtaW5lIHRoZSBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGltbWVkaWF0ZWx5IGNoZWNrIHRoZSByZWxldmFudCBMU00gY29uZmlncywgYW5kIHBvdGVudGlhbGx5IGFueSBCUEYgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBiZSBpbmZsdWVuY2luZyBiZWhhdmlvci4gSSBoYXZlIHRvIG1ha2Ugc3VyZSBJIGRvbid0IG92ZXJsb29rIGFueSBkZXRhaWxzLiBCUEZfTFNNIGlzIHRoZSBmaXJzdCB0aGluZyB0aGF0IGNvbWVzIHRvIG1pbmQuIEdpdmVuIHRoZSBmb2N1cyBvZiB0aGlzIGlzc3VlLCBgQlBGX0xTTWAgZmVlbHMgbGlrZSBhIGxpa2VseSBzdXNwZWN0LCBzbyBJIHNob3VsZCBpbnZlc3RpZ2F0ZSB0aGF0IGZpcnN0LiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGhvdyBpdCdzIHNldCB1cCBhbmQgaWYgdGhlcmUgYXJlIGFueSBjb25mbGljdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMTI0LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDoyMToxNy4yNjA1OTE0OThaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MDU2Mzg5NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9MU01cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTk0PXNvdXJjZSBcXFwia2VybmVsL2JwZi9wcmVsb2FkL0tjb25maWdcXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTk1LVxcbmtlcm5lbC9icGYvS2NvbmZpZzo5Njpjb25maWcgQlBGX0xTTVxcbmtlcm5lbC9icGYvS2NvbmZpZy05Ny1cXHRib29sIFxcXCJFbmFibGUgQlBGIExTTSBJbnN0cnVtZW50YXRpb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIwOjIxOjE5Ljg2NjIzNjk5OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODMxNDI2MTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkV4YW1pbmluZyBLZXJuZWwgQlBGIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMsIEkgbmVlZCB0byBzdGFydCB3aXRoIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRoZSBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlIGlzIHRoZSBvYnZpb3VzIHBsYWNlIHRvIGJlZ2luLCBzbyBsZXQncyBoZWFkIHN0cmFpZ2h0IHRoZXJlLiBTcGVjaWZpY2FsbHksIEknbGwgemVybyBpbiBhcm91bmQgbGluZSA5Ni4gVGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhleSBzdGFydCB0aGUgZGVmaW5pdGlvbnMgb2YgdGhlIGNvcmUgQlBGIGZ1bmN0aW9uYWxpdHksIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLCBzbyBJIGJldCB0aGF0J3MgYSBrZXkgc3BvdCB0byBnZXQgc3RhcnRlZCB3aXRoIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNDE2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjA6MjE6MjEuNjk3NjY2ODZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjUzNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDkwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDkwOlxcdFxcdCAgYWZmZWN0ZWQgaGFyZHdhcmUuXFxuICA5MTpcXHRcXG4gIDkyOlxcdFxcdCAgSWYgeW91IGFyZSB1bnN1cmUgaG93IHRvIGFuc3dlciB0aGlzIHF1ZXN0aW9uLCBhbnN3ZXIgWS5cXG4gIDkzOlxcdFxcbiAgOTQ6XFx0c291cmNlIFxcXCJrZXJuZWwvYnBmL3ByZWxvYWQvS2NvbmZpZ1xcXCJcXG4gIDk1OlxcdFxcbiAgOTY6XFx0Y29uZmlnIEJQRl9MU01cXG4gIDk3OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBCUEYgTFNNIEluc3RydW1lbnRhdGlvblxcXCJcXG4gIDk4OlxcdFxcdGRlcGVuZHMgb24gQlBGX0VWRU5UU1xcbiAgOTk6XFx0XFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxcbiAxMDA6XFx0XFx0ZGVwZW5kcyBvbiBTRUNVUklUWVxcbiAxMDE6XFx0XFx0ZGVwZW5kcyBvbiBCUEZfSklUXFxuIDEwMjpcXHRcXHRoZWxwXFxuIDEwMzpcXHRcXHQgIEVuYWJsZXMgaW5zdHJ1bWVudGF0aW9uIG9mIHRoZSBzZWN1cml0eSBob29rcyB3aXRoIEJQRiBwcm9ncmFtcyBmb3JcXG4gMTA0OlxcdFxcdCAgaW1wbGVtZW50aW5nIGR5bmFtaWMgTUFDIGFuZCBBdWRpdCBQb2xpY2llcy5cXG4gMTA1OlxcdFxcbiAxMDY6XFx0XFx0ICBJZiB5b3UgYXJlIHVuc3VyZSBob3cgdG8gYW5zd2VyIHRoaXMgcXVlc3Rpb24sIGFuc3dlciBOLlxcbiAxMDc6XFx0XFxuIDEwODpcXHRjb25maWcgQlBGX0pJVF9LQVNBTlxcbiAxMDk6XFx0XFx0Ym9vbFxcbiAxMTA6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX0VCUEZfSklUX0tBU0FOXFxuIDExMTpcXHRcXHRkZXBlbmRzIG9uIEtBU0FOX0dFTkVSSUNcXG4gMTEyOlxcdFxcdGRlcGVuZHMgb24gS0FTQU5fVk1BTExPQ1xcbiAxMTM6XFx0XFx0ZGVwZW5kcyBvbiBCUEZfSklUXFxuIDExNDpcXHRcXHRkZWZhdWx0IHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjA6MjE6MjEuNjk3NzMzNTZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzc2NTczNDY4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwgRnVuY3Rpb25hbGl0eSBSZXZpZXcqKlxuXG5Pa2F5LCBsZXQncyBkaXNzZWN0IHRoZXNlIGtlcm5lbCBtb2RpZmljYXRpb25zLiBNeSBpbml0aWFsIGZvY3VzIGlzIHRvIHBpbnBvaW50IHRoZSBuZXdseSBpbnRyb2R1Y2VkIG9yIGFsdGVyZWQgZnVuY3Rpb25zLiBUaGUgbGlzdCBwb2ludHMgbWUgdG93YXJkcyBzZXZlcmFsIGtleSBhcmVhczpcblxuKiAgIFRoZSBgYnBmX2NvcHlfZnJvbV91c2VyXypgIGZhbWlseSB3aXRoaW4gYGtlcm5lbC9icGYvaGVscGVycy5jYC4gV2UndmUgZ290IGBicGZfY29weV9mcm9tX3VzZXJfbW1gLCBgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cmAsIGBicGZfY29weV9mcm9tX3VzZXJfdGFza2AsIGFuZCBgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyYC4gVGhlc2UgYXJlIGNsZWFybHkgcmVsYXRlZCB0byBCUEYgcHJvZ3JhbXMgaW50ZXJhY3Rpbmcgd2l0aCB1c2VyIHNwYWNlIG1lbW9yeSwgcHJvYmFibHkgaW52b2x2aW5nIGRpZmZlcmVudCBtZW1vcnkgc3BhY2VzIGFuZCBzdHJpbmcgb3BlcmF0aW9ucy5cbiogICBJbiBgbW0vdXRpbC5jYCwgYGNvcHlfcmVtb3RlX21tX3N0cmAgYW5kIGBjb3B5X3JlbW90ZV92bV9zdHJgIHBvcCB1cC4gU2VlbXMgbGlrZSB0aGVzZSBoYXZlIHNvbWV0aGluZyB0byBkbyB3aXRoIHJlbW90ZSBtZW1vcnkgY29waWVzLCBzcGVjaWZpY2FsbHkgc3RyaW5ncyBhbmQgdmlydHVhbCBtZW1vcnkuXG4qICAgYF9fY29weV9yZW1vdGVfbW1fc3RyYCBpbiBgbW0vbWVtb3J5LmNgIGlzIGFsc28gdGhlcmUsIHdoaWNoIGlzIGxpa2VseSBhIGxvdy1sZXZlbCBoZWxwZXIgZm9yIHRoZSBhYm92ZSBmdW5jdGlvbnMuXG4qICAgVGhlbiB3ZSBoYXZlIHNvbWUgY3J1Y2lhbCB2ZXJpZmllciB1cGRhdGVzIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgOiBgY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3NgLCBgdHlwZV9pc190cnVzdGVkX29yX251bGxgLCBhbmQgYGNoZWNrX21lbV9hY2Nlc3NgLiBUaGVzZSBhcmUgYWxsIHZlcnkgaW1wb3J0YW50IGZvciBtZW1vcnkgc2FmZXR5IHdpdGhpbiBCUEYuIEl0IHNlZW1zIHRoYXQgdGhleSBoYXZlIGJlZW4gYWRkZWQgdG8gcmVzdHJpY3QgYWNjZXNzIG9mIEJQRiBwcm9ncmFtcyB0byBtZW1vcnkuXG4qICAgQW5kIGZpbmFsbHksIGBmcmVlX2Jwcm1gIGluIGBmcy9leGVjLmNgLiBUaGF0J3MgYW4gaW50ZXJlc3Rpbmcgb25lLCBsaWtlbHkgY2xlYW5pbmcgdXAgdGhlIHByb2Nlc3MgZW52aXJvbm1lbnQsIHBvdGVudGlhbGx5IGFmdGVyIGFuIGV4ZWMgY2FsbC5cblxuSSBhbHNvIG5lZWQgdG8gY2hlY2sgd2hldGhlciBgYnBmX2lzX3RydXN0ZWRfb3JfbnVsbF9idGZfcHRyYCBhbmQgYGJwZl9tYXlfZmF1bHRfb25fZGVyZWZgIGFyZSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucy4gVGhleSBhcmUgZGVjbGFyZWQgaW4gYGluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhgLCBzbyBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBzcGVjaWZpY3MuIE5vdywgd2hlcmUgaXMgYGJwZl9tYXlfZmF1bHRfb25fZGVyZWZgIGNhbGxlZD8gSSdsbCBncmVwIGZvciBpdCB0byBnZXQgdGhlIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyOTI4LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjA6MjE6MjUuNDYzNDczNzA0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTcxNzk3NDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9tYXlfZmF1bHRfb25fZGVyZWZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaD0xMzQyPXN0YXRpYyBpbmxpbmUgYm9vbCBicGZfaXNfdHJ1c3RlZF9vcl9udWxsX2J0Zl9wdHIoZW51bSBicGZfcmVnX3R5cGUgdHlwZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTM0Ni1cXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oOjEzNDc6c3RhdGljIGlubGluZSBib29sIGJwZl9tYXlfZmF1bHRfb25fZGVyZWYoZW51bSBicGZfcmVnX3R5cGUgdHlwZSlcXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTEzNDgte1xcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYz03NzM9aW50IGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy05NzgtXFx0XFx0XFx0aWYgKGJwZl9pc19wdHJfdG9fbWVtX29yX2J0Zl9pZChwdHJfdHlwZSkgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjk3OTpcXHRcXHRcXHQgICAgYnBmX21heV9mYXVsdF9vbl9kZXJlZihwdHJfdHlwZSkgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTk4MC1cXHRcXHRcXHQgICAgdHlwZSA9PSBCUEZfUkVBRCkge1xcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy05ODktXFx0XFx0XFx0fVxcbmtlcm5lbC9icGYvZml4dXBzLmM6OTkwOlxcdFxcdFxcdGlmICh2ZXJpZmllcl9idWdfaWYoYnBmX21heV9mYXVsdF9vbl9kZXJlZihwdHJfdHlwZSksIGVudixcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTk5MS1cXHRcXHRcXHRcXHRcXHQgICAgXFxcImFjY2VzcyB0byBhIGZhdWx0IHByb25lIHBvaW50ZXIgaXMgbm90IHJld3JpdHRlbiBhcyBhIHByb2JlZCBvbmVcXFwiKSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz01MTE5PXN0YXRpYyBib29sIGlzX2xvYWRfYWNxX3Vuc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgcmVnbm8sXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTEzMS1cXHQgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTEzMjpcXHRyZXR1cm4gaW5zbi1cXHUwMDNlaW1tID09IEJQRl9MT0FEX0FDUSBcXHUwMDI2XFx1MDAyNiBicGZfbWF5X2ZhdWx0X29uX2RlcmVmKHJlZy1cXHUwMDNldHlwZSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTUxMzMtfVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTYwNzI9c3RhdGljIGludCBjaGVja19wdHJfdG9fYnRmX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYxMzAtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjYxMzE6XFx0aWYgKGF0eXBlICE9IEJQRl9SRUFEIFxcdTAwMjZcXHUwMDI2IGJwZl9tYXlfZmF1bHRfb25fZGVyZWYocmVnLVxcdTAwM2V0eXBlKSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MTMyLVxcdFxcdHZlcmJvc2UoZW52LCBcXFwib25seSByZWFkIGlzIHN1cHBvcnRlZFxcXFxuXFxcIik7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjE1OS1cXHRcXHQgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjE2MDpcXHRcXHRpZiAodHlwZV9pc19hbGxvYyhyZWctXFx1MDAzZXR5cGUpIFxcdTAwMjZcXHUwMDI2ICFicGZfbWF5X2ZhdWx0X29uX2RlcmVmKHJlZy1cXHUwMDNldHlwZSkgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjE2MS1cXHRcXHQgICAgIXR5cGVfaXNfbm9uX293bmluZ19yZWYocmVnLVxcdTAwM2V0eXBlKSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE4Mjg3PXN0YXRpYyBib29sIHJlZ190eXBlX21pc21hdGNoX29rKGVudW0gYnBmX3JlZ190eXBlIHR5cGUpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgyOTgtXFx0Y2FzZSBQVFJfVE9fTUVNOlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODI5OTpcXHRcXHRyZXR1cm4gIWJwZl9tYXlfZmF1bHRfb25fZGVyZWYodHlwZSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MzAwLVxcdGRlZmF1bHQ6XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTgzMjg9c3RhdGljIGVudW0gYnBmX3JlZ190eXBlIG1lcmdlX3B0cl90eXBlcyhlbnVtIGJwZl9yZWdfdHlwZSB0eXBlX2EsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgzMzMtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE4MzM0OlxcdGlmIChicGZfbWF5X2ZhdWx0X29uX2RlcmVmKHR5cGVfYSkgfHwgYnBmX21heV9mYXVsdF9vbl9kZXJlZih0eXBlX2IpKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODMzNS1cXHRcXHR0eXBlX21lcmdlZCB8PSB0b19tZW0gPyBNRU1fUkRPTkxZIHwgUFRSX1VOVFJVU1RFRCA6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIwOjIxOjI4LjAzNTI3NzE1NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5MDY2NDkyODQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBCUEYgYW5kIE1lbW9yeSBBY2Nlc3MgZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBiYXNlZCBvbiBgYnBmX21heV9mYXVsdF9vbl9kZXJlZmAncyB1c2FnZSBhY3Jvc3MgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgYW5kIGBrZXJuZWwvYnBmL2ZpeHVwcy5jYOKAlHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGBicGZfY29udmVydF9jdHhfYWNjZXNzZXNg4oCUd2UgbmVlZCB0byBwaWNrIG91dCBzb21lIGZvY3VzZWQgc3ltYm9scyBmb3IgdGFyZ2V0ZWQgZnV6emluZy4gSSBuZWVkIHRvIGJlIHByZWNpc2UgaGVyZSwgZm9jdXNpbmcgb24gdGhlIGNoYW5nZXMsIGFuZCBhdm9pZGluZyB0aGUgdWJpcXVpdG91cy5cblxuVGhlIGxpc3QgdGhhdCBzZWVtcyBtb3N0IHJlbGV2YW50IGluY2x1ZGVzOiBgYnBmX2NvcHlfZnJvbV91c2VyX21tYCwgYGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHJgLCBgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tgLCBgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tfc3RyYCwgYGNvcHlfcmVtb3RlX21tX3N0cmAsIGBjb3B5X3JlbW90ZV92bV9zdHJgLCBgX19jb3B5X3JlbW90ZV9tbV9zdHJgLCBgY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3NgLCBgY2hlY2tfbWVtX2FjY2Vzc2AsIGB0eXBlX2lzX3RydXN0ZWRfb3JfbnVsbGAsIGBicGZfY29udmVydF9jdHhfYWNjZXNzZXNgLCBhbmQgYGZyZWVfYnBybWAuIFRoZXNlIGFsbCBzZWVtIHRvIGJlIGRpcmVjdGx5IHRvdWNoZWQsIG9yIGFkZGVkLCBhbmQgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkgaW4gdGhlIHBhdGNoLlxuXG5Ob3csIGxldCdzIHZlcmlmeSB0aGVzZSBzeW1ib2xzLiBJJ20gY2hlY2tpbmcgdGhlIG5hbWluZyBjb252ZW50aW9ucyB0byBlbnN1cmUgdGhlIHRvb2xzIGFyZSByZWZlcmVuY2luZyB0aGVtIGNvcnJlY3RseS4gRm9yIGluc3RhbmNlLCBgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tgIGlzIGBCUEZfQ0FMTF81KGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrLCAuLi4pYCBpbiBga2VybmVsL2JwZi9oZWxwZXJzLmNgLCBzbyBgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tgIHNob3VsZCBiZSBnb29kLiAgYGJwZl9jb3B5X2Zyb21fdXNlcl9tbWAgYW5kIGBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyYCBhcmUgZGVmaW5lZCB1c2luZyBgX19icGZfa2Z1bmNgLiBgY29weV9yZW1vdGVfbW1fc3RyYCBhbmQgYGNvcHlfcmVtb3RlX3ZtX3N0cmAgYXJlIGluIG1tL3V0aWwuYywgYF9fY29weV9yZW1vdGVfbW1fc3RyYCBpcyBpbiBtbS9tZW1vcnkuYyBhbmQgZmluYWxseSBgZnJlZV9icHJtYCBpcyBpbiBgZnMvZXhlYy5jYC4gSSdtIGFsc28gY29uZmlybWluZyB0aGF0IGBjaGVja19wdHJfdG9fYnRmX2FjY2Vzc2AgYW5kIGB0eXBlX2lzX3RydXN0ZWRfb3JfbnVsbGAgYXJlIHdoZXJlIEkgZXhwZWN0IHRoZW0sIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLCBhbmQgdGhhdCBgY2hlY2tfbWVtX2FjY2Vzc2AgaXMgYWxzbyBpbiBgdmVyaWZpZXIuY2AuXG5cbkknbSBhbHNvIGRvaW5nIGEgcXVpY2sgc2NhbiBvZiBga2VybmVsL2JwZi92ZXJpZmllci5jYCBmb3IgYW55IG90aGVyIG1vZGlmaWVkIGZ1bmN0aW9ucywganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgZW5zdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcsIGNvbmZpcm1pbmcgYHR5cGVfaXNfdHJ1c3RlZF9vcl9udWxsYCwgYGNoZWNrX3B0cl90b19idGZfYWNjZXNzYCwgYW5kIGBjaGVja19tZW1fYWNjZXNzYCBhcmUgdGhlIG9ubHkgcmVsZXZhbnQgZnVuY3Rpb25zLlxuXG5OZXh0LCB0aGUgS2NvbmZpZyBvcHRpb25zLCB3aGljaCBhcmUgZ29pbmcgdG8gYmUga2V5IHRvIHJlcGxpY2F0aW5nIHRoaXMuIEkgc2VlIGBCUEZfU1lTQ0FMTGAsIGBERUJVR19JTkZPX0JURmAsIGFuZCBgQlBGX0xTTWAgYXJlIHRoZSBpbXBvcnRhbnQgb25lcyBoZXJlLlxuXG5UaGUgcGF0Y2gncyByZWFzb25pbmcgaXMgc29saWQ6IG5ldyBzbGVlcGFibGUga2Z1bmNzLCByZWZhY3RvcmluZyBhY3Jvc3MgbW0gYW5kIEJQRiBoZWxwZXJzLCB0aGUgYWRkaXRpb24gb2YgdHJ1c3RlZC1vci1udWxsIHBvaW50ZXIgZGVyZWZlcmVuY2luZyBzdXBwb3J0IGluIHRoZSBCUEYgdmVyaWZpZXIsIGFuZCB0aGUgdXBkYXRlIHRvIGBmcmVlX2Jwcm1gLiBUaGVzZSBtb2RpZmljYXRpb25zIHRvdWNoIG1lbW9yeSBtYW5hZ2VtZW50LCBCUEYgdmVyaWZpY2F0aW9uLCBhbmQgcHJvY2VzcyBleGVjdXRpb24sIGFsbCBvZiB3aGljaCBhcmUgYWNjZXNzaWJsZSB2aWEgc3RhbmRhcmQgc3l6a2FsbGVyIHN5c2NhbGxzLiBUaGlzIG1ha2VzIGl0IGEgZ3JlYXQgY2FuZGlkYXRlIGZvciBmdXp6aW5nLlxuXG5NeSBjb25jbHVzaW9uOiBXb3J0aEZ1enppbmcgPSB0cnVlOyBhbmQgdGhlIGNvbmZpZ3VyYXRpb25zIGFuZCBzeW1ib2xzIGFyZSBzcG90IG9uLiBJJ20gcmVhZHkgdG8gY2FsbCB0aGUgYHNldC1yZXN1bHRzYCB0b29sIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ4MDgsIk91dHB1dFRva2VucyI6MzAxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDoyMTozNy4xMDE3NzQzNThaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzQ1NzU4MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJERUJVR19JTkZPX0JURlwiLFxuICAgIFwiQlBGX0xTTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9jb3B5X2Zyb21fdXNlcl9tbVwiLFxuICAgIFwiYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0clwiLFxuICAgIFwiYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tcIixcbiAgICBcImJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3N0clwiLFxuICAgIFwiY29weV9yZW1vdGVfbW1fc3RyXCIsXG4gICAgXCJjb3B5X3JlbW90ZV92bV9zdHJcIixcbiAgICBcIl9fY29weV9yZW1vdGVfbW1fc3RyXCIsXG4gICAgXCJjaGVja19wdHJfdG9fYnRmX2FjY2Vzc1wiLFxuICAgIFwidHlwZV9pc190cnVzdGVkX29yX251bGxcIixcbiAgICBcImNoZWNrX21lbV9hY2Nlc3NcIixcbiAgICBcImJwZl9jb252ZXJ0X2N0eF9hY2Nlc3Nlc1wiLFxuICAgIFwiZnJlZV9icHJtXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgc2xlZXBhYmxlIEJQRiBrZnVuY3MgKGJwZl9jb3B5X2Zyb21fdXNlcl9tbSBhbmQgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0ciksIHJlZmFjdG9ycyByZW1vdGUgTU0gc3RyaW5nIGNvcHlpbmcgaGVscGVycyBhY3Jvc3MgbW0vIGFuZCBrZXJuZWwvYnBmLywgbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byBhbGxvdyBmYXVsdC1wcm90ZWN0ZWQgbG9hZHMgdGhyb3VnaCB0cnVzdGVkLW9yLW51bGwgcG9pbnRlcnMsIGFuZCBhbHRlcnMgbW0gY2xlYW51cCBpbiBmcmVlX2Jwcm0oKS4gVGhlc2UgY2hhbmdlcyB0b3VjaCBjb3JlIEJQRiBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgZXhlY3V0aW9uIHBhdGhzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cyB2aWEgQlBGIGFuZCBleGVjIHN5c2NhbGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJERUJVR19JTkZPX0JURlwiLFxuICAgIFwiQlBGX0xTTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9jb3B5X2Zyb21fdXNlcl9tbVwiLFxuICAgIFwiYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0clwiLFxuICAgIFwiYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tcIixcbiAgICBcImJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3N0clwiLFxuICAgIFwiY29weV9yZW1vdGVfbW1fc3RyXCIsXG4gICAgXCJjb3B5X3JlbW90ZV92bV9zdHJcIixcbiAgICBcIl9fY29weV9yZW1vdGVfbW1fc3RyXCIsXG4gICAgXCJjaGVja19wdHJfdG9fYnRmX2FjY2Vzc1wiLFxuICAgIFwidHlwZV9pc190cnVzdGVkX29yX251bGxcIixcbiAgICBcImNoZWNrX21lbV9hY2Nlc3NcIixcbiAgICBcImJwZl9jb252ZXJ0X2N0eF9hY2Nlc3Nlc1wiLFxuICAgIFwiZnJlZV9icHJtXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgc2xlZXBhYmxlIEJQRiBrZnVuY3MgKGJwZl9jb3B5X2Zyb21fdXNlcl9tbSBhbmQgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0ciksIHJlZmFjdG9ycyByZW1vdGUgTU0gc3RyaW5nIGNvcHlpbmcgaGVscGVycyBhY3Jvc3MgbW0vIGFuZCBrZXJuZWwvYnBmLywgbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byBhbGxvdyBmYXVsdC1wcm90ZWN0ZWQgbG9hZHMgdGhyb3VnaCB0cnVzdGVkLW9yLW51bGwgcG9pbnRlcnMsIGFuZCBhbHRlcnMgbW0gY2xlYW51cCBpbiBmcmVlX2Jwcm0oKS4gVGhlc2UgY2hhbmdlcyB0b3VjaCBjb3JlIEJQRiBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgZXhlY3V0aW9uIHBhdGhzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cyB2aWEgQlBGIGFuZCBleGVjIHN5c2NhbGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDoyMTozNy4yMzYzNjU2ODVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNjE0NTc1MTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjA6MjE6MzcuMjM3MjYyMjU2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjE2MTM2NzAyOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIEJQRiBrZnVuY3MgZm9yIGNvcHlpbmcgbWVtb3J5IGZyb20gYW4gYXJiaXRyYXJ5IGBzdHJ1Y3QgbW1fc3RydWN0YCAoYGJwZl9jb3B5X2Zyb21fdXNlcl9tbWAgYW5kIGBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyYCksIHJlZmFjdG9ycyBleGlzdGluZyB0YXNrLWJhc2VkIGhlbHBlcnMgdG8gdXNlIHRoZXNlIGZ1bmN0aW9ucywgY2xlYXJzIGBicHJtLVxcdTAwM2VtbWAgYmVmb3JlIGRyb3BwaW5nIHRoZSByZWZlcmVuY2UgaW4gYGZyZWVfYnBybSgpYCwgYW5kIHVwZGF0ZXMgdGhlIEJQRiB2ZXJpZmllciB0byBhbGxvdyBmYXVsdC1wcm90ZWN0ZWQgbG9hZHMgdGhyb3VnaCB0cnVzdGVkLW9yLW51bGwgQlRGIHBvaW50ZXJzIChgYnBmX2lzX3RydXN0ZWRfb3JfbnVsbF9idGZfcHRyYCkuXFxuXFxuS01TQU4gdnMgS0FTQU4gQXBwbGljYWJpbGl0eTpcXG4tIEtNU0FOIGRldGVjdHMgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwL3BhZ2UgbWVtb3J5IGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgZGlzY2xvc3VyZSAoaW5mby1sZWFrcykuXFxuLSBLQVNBTiAvIExPQ0tERVAgZGV0ZWN0IG1lbW9yeSBjb3JydXB0aW9ucywgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgYW5kIGxvY2tpbmcgZXJyb3JzLlxcbi0gVGhlIG5ldyBCUEYgY29weSBrZnVuY3MgcHJvcGVybHkgaGFuZGxlIG1lbW9yeSBpbml0aWFsaXphdGlvbjogYW55IGRlc3RpbmF0aW9uIGJ1ZmZlcnMgYXJlIGVpdGhlciBmdWxseSB3cml0dGVuIG9yIGV4cGxpY2l0bHkgemVyb2VkIHZpYSBgbWVtc2V0KClgIHVwb24gZmFpbHVyZSwgcGFydGlhbCByZWFkcywgb3Igd2hlbiBgQlBGX0ZfUEFEX1pFUk9TYCBpcyByZXF1ZXN0ZWQuXFxuLSBObyB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIHN0YWNrIGFsbG9jYXRpb25zLCBvciBrZXJuZWwtdG8tdXNlciBsZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLlxcbi0gVmVyaWZpZXIgdHlwZSB0cmFja2luZyBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIGNoYW5nZXMgcmVsYXRlIHRvIHBvaW50ZXIgdmFsaWRpdHkgYW5kIGZhdWx0IGhhbmRsaW5nLCBhcmVhcyB3aGVyZSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzIGFyZSBhcHBsaWNhYmxlLCBub3QgS01TQU4uXFxuXFxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZGI3N2FmNjZiM2FhMDdiMTNkYzgzYWFmY2ExYjhiMGEwMjkxYTFmYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMjA6MjA6NTMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9leGVjLmMgYi9mcy9leGVjLmNcbmluZGV4IDc0NWY2ZWI1Mjc5ZTYuLjRkZGQ0MDNmZDkxYzcgMTAwNjQ0XG4tLS0gYS9mcy9leGVjLmNcbisrKyBiL2ZzL2V4ZWMuY1xuQEAgLTE0NTYsOSArMTQ1NiwxMiBAQCB2b2lkIGJwcm1fZHJvcF9sb2FkZXIoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbiBcbiBzdGF0aWMgdm9pZCBmcmVlX2Jwcm0oc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbiB7XG4tXHRpZiAoYnBybS1cdTAwM2VtbSkge1xuK1x0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBicHJtLVx1MDAzZW1tO1xuK1xuK1x0aWYgKG1tKSB7XG4gXHRcdGFjY3RfYXJnX3NpemUoYnBybSwgMCk7XG4tXHRcdG1tcHV0KGJwcm0tXHUwMDNlbW0pO1xuK1x0XHRicHJtLVx1MDAzZW1tID0gTlVMTDtcbitcdFx0bW1wdXQobW0pO1xuIFx0fVxuIFx0aWYgKGJwcm0tXHUwMDNldXNlcl9ucylcbiBcdFx0cHV0X3VzZXJfbnMoYnBybS1cdTAwM2V1c2VyX25zKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuaW5kZXggOTcyN2RmNWFmODNhYi4uNGYwMzJhZDgzYzY3NSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbkBAIC0xMzM5LDYgKzEzMzksMTEgQEAgc3RhdGljIGlubGluZSBib29sIGJwZl9pc19wdHJfdG9fbWVtX29yX2J0Zl9pZChlbnVtIGJwZl9yZWdfdHlwZSB0eXBlKVxuIFx0fVxuIH1cbiBcbitzdGF0aWMgaW5saW5lIGJvb2wgYnBmX2lzX3RydXN0ZWRfb3JfbnVsbF9idGZfcHRyKGVudW0gYnBmX3JlZ190eXBlIHR5cGUpXG4re1xuK1x0cmV0dXJuIHR5cGUgPT0gKFBUUl9UT19CVEZfSUQgfCBQVFJfVFJVU1RFRCB8IFBUUl9NQVlCRV9OVUxMKTtcbit9XG4rXG4gc3RhdGljIGlubGluZSBib29sIGJwZl9tYXlfZmF1bHRfb25fZGVyZWYoZW51bSBicGZfcmVnX3R5cGUgdHlwZSlcbiB7XG4gXHQvKlxuQEAgLTEzNDYsNyArMTM1MSw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBicGZfbWF5X2ZhdWx0X29uX2RlcmVmKGVudW0gYnBmX3JlZ190eXBlIHR5cGUpXG4gXHQgKiBwcm90ZWN0aW9uLCB0aGF0IGlzLCB0aGUgb25lcyBicGZfY29udmVydF9jdHhfYWNjZXNzZXMoKSBoYXMgdG9cbiBcdCAqIHR1cm4gYSBCUEZfTERYIGludG8gYSBCUEZfUFJPQkVfTUVNIG9uZSBmb3IuXG4gXHQgKi9cbi1cdHJldHVybiB0eXBlID09IFBUUl9UT19CVEZfSUQgfHwgKHR5cGVfZmxhZyh0eXBlKSBcdTAwMjYgUFRSX1VOVFJVU1RFRCk7XG4rXHRyZXR1cm4gdHlwZSA9PSBQVFJfVE9fQlRGX0lEIHx8XG4rXHQgICAgICAgKHR5cGVfZmxhZyh0eXBlKSBcdTAwMjYgUFRSX1VOVFJVU1RFRCkgfHxcbitcdCAgICAgICBicGZfaXNfdHJ1c3RlZF9vcl9udWxsX2J0Zl9wdHIodHlwZSk7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBicGZfcHJvZ19oYXNfYXJlbmFfY3R4X2FyZyhjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oXG5pbmRleCBkZDA5YzQzOGZhMjNlLi5kNWJkZTFmNzFhOTdlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tLmhcbkBAIC0zMzI2LDYgKzMzMjYsOCBAQCBleHRlcm4gaW50IGFjY2Vzc19yZW1vdGVfdm0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0dm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKTtcbiBcbiAjaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG4rZXh0ZXJuIGludCBjb3B5X3JlbW90ZV9tbV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbitcdFx0XHQgICAgICB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpO1xuIGV4dGVybiBpbnQgY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdFx0ICAgICAgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKTtcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2hlbHBlcnMuYyBiL2tlcm5lbC9icGYvaGVscGVycy5jXG5pbmRleCBiM2NjNWM4ZmM4NzU2Li5kM2M1NjQ0MzdhZDA2IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9oZWxwZXJzLmNcbisrKyBiL2tlcm5lbC9icGYvaGVscGVycy5jXG5AQCAtMzIsNiArMzIsMTAgQEBcbiBcbiAjaW5jbHVkZSBcIi4uLy4uL2xpYi9rc3RydG94LmhcIlxuIFxuK19fYnBmX2tmdW5jIGludCBicGZfY29weV9mcm9tX3VzZXJfbW0odm9pZCAqZHN0LCB1MzIgZHN0X19zeixcbitcdFx0XHRcdCAgICAgIGNvbnN0IHZvaWQgX191c2VyICp1bnNhZmVfcHRyX19pZ24sXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdTY0IGZsYWdzKTtcbitcbiAvKiBJZiBrZXJuZWwgc3Vic3lzdGVtIGlzIGFsbG93aW5nIGVCUEYgcHJvZ3JhbXMgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uLFxuICAqIGluc2lkZSBpdHMgb3duIHZlcmlmaWVyX29wcy1cdTAwM2VnZXRfZnVuY19wcm90bygpIGNhbGxiYWNrIGl0IHNob3VsZCByZXR1cm5cbiAgKiBicGZfbWFwX2xvb2t1cF9lbGVtX3Byb3RvLCBzbyB0aGF0IHZlcmlmaWVyIGNhbiBwcm9wZXJseSBjaGVjayB0aGUgYXJndW1lbnRzXG5AQCAtNjgyLDIyICs2ODYsMTUgQEAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9jb3B5X2Zyb21fdXNlcl9wcm90byA9IHtcbiBCUEZfQ0FMTF81KGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrLCB2b2lkICosIGRzdCwgdTMyLCBzaXplLFxuIFx0ICAgY29uc3Qgdm9pZCBfX3VzZXIgKiwgdXNlcl9wdHIsIHN0cnVjdCB0YXNrX3N0cnVjdCAqLCB0c2ssIHU2NCwgZmxhZ3MpXG4ge1xuK1x0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4gXHRpbnQgcmV0O1xuIFxuLVx0LyogZmxhZ3MgaXMgbm90IHVzZWQgeWV0ICovXG4tXHRpZiAodW5saWtlbHkoZmxhZ3MpKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cbi1cdGlmICh1bmxpa2VseSghc2l6ZSkpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0cmV0ID0gYWNjZXNzX3Byb2Nlc3Nfdm0odHNrLCAodW5zaWduZWQgbG9uZyl1c2VyX3B0ciwgZHN0LCBzaXplLCAwKTtcbi1cdGlmIChyZXQgPT0gc2l6ZSlcbi1cdFx0cmV0dXJuIDA7XG4rXHRtbSA9IGdldF90YXNrX21tKHRzayk7XG4rXHRyZXQgPSBicGZfY29weV9mcm9tX3VzZXJfbW0oZHN0LCBzaXplLCB1c2VyX3B0ciwgbW0sIGZsYWdzKTtcbitcdGlmIChtbSlcbitcdFx0bW1wdXQobW0pO1xuIFxuLVx0bWVtc2V0KGRzdCwgMCwgc2l6ZSk7XG4tXHQvKiBSZXR1cm4gLUVGQVVMVCBmb3IgcGFydGlhbCByZWFkICovXG4tXHRyZXR1cm4gcmV0IFx1MDAzYyAwID8gcmV0IDogLUVGQVVMVDtcbitcdHJldHVybiByZXQ7XG4gfVxuIFxuIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfY29weV9mcm9tX3VzZXJfdGFza19wcm90byA9IHtcbkBAIC0zNjU4LDYgKzM2NTUsMTAwIEBAIF9fYnBmX2tmdW5jIGludCBicGZfY29weV9mcm9tX3VzZXJfc3RyKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osIGNvbnN0IHZvaWQgX191c2VyXG4gXHRyZXR1cm4gcmV0ICsgMTtcbiB9XG4gXG4rLyoqXG4rICogYnBmX2NvcHlfZnJvbV91c2VyX21tKCkgLSBDb3B5IGRhdGEgZnJvbSBhbiBhZGRyZXNzIHNwYWNlXG4rICogQGRzdDogICAgICAgICAgICAgRGVzdGluYXRpb24gYWRkcmVzcywgaW4ga2VybmVsIHNwYWNlXG4rICogQGRzdF9fc3o6ICAgICAgICAgTnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHlcbisgKiBAdW5zYWZlX3B0cl9faWduOiBTb3VyY2UgYWRkcmVzcyBpbiB0aGUgYWRkcmVzcyBzcGFjZVxuKyAqIEBtbTogICAgICAgICAgICAgIEFkZHJlc3Mgc3BhY2UgdG8gY29weSBmcm9tXG4rICogQGZsYWdzOiAgICAgICAgICAgUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2U7IG11c3QgYmUgemVyb1xuKyAqXG4rICogQ29waWVzIGRhdGEgZnJvbSB0aGUgdXNlciBhZGRyZXNzIHNwYWNlIGFzc29jaWF0ZWQgd2l0aCBAbW0uIFRoZSBkZXN0aW5hdGlvblxuKyAqIGlzIHplcm9lZCBpZiBhbiBhdHRlbXB0ZWQgY29weSBjYW5ub3QgYmUgY29tcGxldGVkIGluIGZ1bGwuIFVuc3VwcG9ydGVkXG4rICogZmxhZ3MgcmV0dXJuIC1FSU5WQUwgd2l0aG91dCBtb2RpZnlpbmcgQGRzdC5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRUlOVkFMIGlmIEBmbGFncyBpcyBub24temVybywgb3IgLUVGQVVMVCBpZiB0aGUgY29weVxuKyAqIGZhaWxzIG9yIGlzIHBhcnRpYWwuXG4rICovXG4rX19icGZfa2Z1bmMgaW50IGJwZl9jb3B5X2Zyb21fdXNlcl9tbSh2b2lkICpkc3QsIHUzMiBkc3RfX3N6LFxuK1x0XHRcdFx0ICAgICAgY29uc3Qgdm9pZCBfX3VzZXIgKnVuc2FmZV9wdHJfX2lnbixcbitcdFx0XHRcdCAgICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1NjQgZmxhZ3MpXG4re1xuK1x0aW50IHJldDtcbitcbitcdGlmICh1bmxpa2VseShmbGFncykpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0aWYgKHVubGlrZWx5KCFkc3RfX3N6KSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAodW5saWtlbHkoIW1tKSkge1xuK1x0XHRtZW1zZXQoZHN0LCAwLCBkc3RfX3N6KTtcbitcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXHR9XG4rXG4rXHRyZXQgPSBhY2Nlc3NfcmVtb3RlX3ZtKG1tLCAodW5zaWduZWQgbG9uZyl1bnNhZmVfcHRyX19pZ24sXG4rXHRcdFx0ICAgICAgIGRzdCwgZHN0X19zeiwgMCk7XG4rXHRpZiAocmV0ID09IGRzdF9fc3opXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0bWVtc2V0KGRzdCwgMCwgZHN0X19zeik7XG4rXHRyZXR1cm4gcmV0IFx1MDAzYyAwID8gcmV0IDogLUVGQVVMVDtcbit9XG4rXG4rLyoqXG4rICogYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cigpIC0gQ29weSBhIHN0cmluZyBmcm9tIGFuIGFkZHJlc3Mgc3BhY2VcbisgKiBAZHN0OiAgICAgICAgICAgICBEZXN0aW5hdGlvbiBhZGRyZXNzLCBpbiBrZXJuZWwgc3BhY2UuIFRoaXMgYnVmZmVyIG11c3QgYmVcbisgKiAgICAgICAgICAgICAgICAgICBhdCBsZWFzdCBAZHN0X19zeiBieXRlcyBsb25nXG4rICogQGRzdF9fc3o6ICAgICAgICAgTWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gY29weSwgaW5jbHVkaW5nIHRoZSB0cmFpbGluZyBOVUxcbisgKiBAdW5zYWZlX3B0cl9faWduOiBTb3VyY2UgYWRkcmVzcyBpbiB0aGUgYWRkcmVzcyBzcGFjZVxuKyAqIEBtbTogICAgICAgICAgICAgIEFkZHJlc3Mgc3BhY2UgdG8gY29weSBmcm9tXG4rICogQGZsYWdzOiAgICAgICAgICAgVGhlIG9ubHkgc3VwcG9ydGVkIGZsYWcgaXMgQlBGX0ZfUEFEX1pFUk9TXG4rICpcbisgKiBDb3BpZXMgYSBOVUwtdGVybWluYXRlZCBzdHJpbmcgZnJvbSB0aGUgdXNlciBhZGRyZXNzIHNwYWNlIGFzc29jaWF0ZWQgd2l0aFxuKyAqIEBtbS4gSWYgdGhlIHN0cmluZyBpcyB0b28gbG9uZywgQGRzdCBpcyBzdGlsbCBOVUwtdGVybWluYXRlZCB1bmxlc3MgQGRzdF9fc3pcbisgKiBpcyB6ZXJvLlxuKyAqXG4rICogSWYgdGhlIGZsYWdzIGFyZSB2YWxpZCBhbmQgQlBGX0ZfUEFEX1pFUk9TIGlzIHNldCwgdGhlIHVudXNlZCBwb3J0aW9uIG9mXG4rICogQGRzdCBpcyBjbGVhcmVkIG9uIHN1Y2Nlc3MgYW5kIGFsbCBvZiBAZHN0IGlzIGNsZWFyZWQgb24gYSBjb3B5IGZhaWx1cmUuXG4rICogVW5zdXBwb3J0ZWQgZmxhZ3MgcmV0dXJuIC1FSU5WQUwgd2l0aG91dCBtb2RpZnlpbmcgQGRzdC5cbisgKlxuKyAqIFJldHVybjogVGhlIG51bWJlciBvZiBjb3BpZWQgYnl0ZXMgaW5jbHVkaW5nIHRoZSBOVUwgdGVybWluYXRvciBvbiBzdWNjZXNzLFxuKyAqIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxuKyAqL1xuK19fYnBmX2tmdW5jIGludCBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osXG4rXHRcdFx0XHRcdCAgY29uc3Qgdm9pZCBfX3VzZXIgKnVuc2FmZV9wdHJfX2lnbixcbitcdFx0XHRcdFx0ICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdTY0IGZsYWdzKVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRpZiAodW5saWtlbHkoZmxhZ3MgXHUwMDI2IH5CUEZfRl9QQURfWkVST1MpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGlmICh1bmxpa2VseShkc3RfX3N6ID09IDApKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmICh1bmxpa2VseSghbW0pKSB7XG4rXHRcdGlmIChmbGFncyBcdTAwMjYgQlBGX0ZfUEFEX1pFUk9TKVxuK1x0XHRcdG1lbXNldChkc3QsIDAsIGRzdF9fc3opO1xuK1x0XHRlbHNlXG4rXHRcdFx0KihjaGFyICopZHN0ID0gJ1xcMCc7XG4rXHRcdHJldHVybiAtRUZBVUxUO1xuK1x0fVxuK1xuK1x0cmV0ID0gY29weV9yZW1vdGVfbW1fc3RyKG1tLCAodW5zaWduZWQgbG9uZyl1bnNhZmVfcHRyX19pZ24sIGRzdCwgZHN0X19zeiwgMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4rXHRcdGlmIChmbGFncyBcdTAwMjYgQlBGX0ZfUEFEX1pFUk9TKVxuK1x0XHRcdG1lbXNldChkc3QsIDAsIGRzdF9fc3opO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0aWYgKGZsYWdzIFx1MDAyNiBCUEZfRl9QQURfWkVST1MpXG4rXHRcdG1lbXNldChkc3QgKyByZXQsIDAsIGRzdF9fc3ogLSByZXQpO1xuK1xuK1x0cmV0dXJuIHJldCArIDE7XG4rfVxuK1xuIC8qKlxuICAqIGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3N0cigpIC0gQ29weSBhIHN0cmluZyBmcm9tIGFuIHRhc2sncyBhZGRyZXNzIHNwYWNlXG4gICogQGRzdDogICAgICAgICAgICAgRGVzdGluYXRpb24gYWRkcmVzcywgaW4ga2VybmVsIHNwYWNlLiAgVGhpcyBidWZmZXIgbXVzdCBiZVxuQEAgLTM2ODEsMjUgKzM3NzIsMTYgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3N0cih2b2lkICpkc3QsIHUzMiBkc3RfX3N6LFxuIFx0XHRcdFx0XHQgICAgY29uc3Qgdm9pZCBfX3VzZXIgKnVuc2FmZV9wdHJfX2lnbixcbiBcdFx0XHRcdFx0ICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1NjQgZmxhZ3MpXG4ge1xuK1x0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4gXHRpbnQgcmV0O1xuIFxuLVx0aWYgKHVubGlrZWx5KGZsYWdzIFx1MDAyNiB+QlBGX0ZfUEFEX1pFUk9TKSlcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXG4tXHRpZiAodW5saWtlbHkoZHN0X19zeiA9PSAwKSlcbi1cdFx0cmV0dXJuIDA7XG4rXHRtbSA9IGdldF90YXNrX21tKHRzayk7XG4rXHRyZXQgPSBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKGRzdCwgZHN0X19zeiwgdW5zYWZlX3B0cl9faWduLFxuK1x0XHRcdFx0XHRtbSwgZmxhZ3MpO1xuK1x0aWYgKG1tKVxuK1x0XHRtbXB1dChtbSk7XG4gXG4tXHRyZXQgPSBjb3B5X3JlbW90ZV92bV9zdHIodHNrLCAodW5zaWduZWQgbG9uZyl1bnNhZmVfcHRyX19pZ24sIGRzdCwgZHN0X19zeiwgMCk7XG4tXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tXHRcdGlmIChmbGFncyBcdTAwMjYgQlBGX0ZfUEFEX1pFUk9TKVxuLVx0XHRcdG1lbXNldChkc3QsIDAsIGRzdF9fc3opO1xuLVx0XHRyZXR1cm4gcmV0O1xuLVx0fVxuLVxuLVx0aWYgKGZsYWdzIFx1MDAyNiBCUEZfRl9QQURfWkVST1MpXG4tXHRcdG1lbXNldChkc3QgKyByZXQsIDAsIGRzdF9fc3ogLSByZXQpO1xuLVxuLVx0cmV0dXJuIHJldCArIDE7XG4rXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiAvKiBLZWVwIHVuc2lnbmVkIGxvbmcgaW4gcHJvdG90eXBlIHNvIHRoYXQga2Z1bmMgaXMgdXNhYmxlIHdoZW4gZW1pdHRlZCB0b1xuQEAgLTQ5MjQsNiArNTAwNiw4IEBAIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfaXRlcl9iaXRzX25ldywgS0ZfSVRFUl9ORVcpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX2JpdHNfbmV4dCwgS0ZfSVRFUl9ORVhUIHwgS0ZfUkVUX05VTEwpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX2JpdHNfZGVzdHJveSwgS0ZfSVRFUl9ERVNUUk9ZKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfY29weV9mcm9tX3VzZXJfc3RyLCBLRl9TTEVFUEFCTEUpXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jb3B5X2Zyb21fdXNlcl9tbSwgS0ZfU0xFRVBBQkxFKVxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyLCBLRl9TTEVFUEFCTEUpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3N0ciwgS0ZfU0xFRVBBQkxFKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfZ2V0X2ttZW1fY2FjaGUpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX2ttZW1fY2FjaGVfbmV3LCBLRl9JVEVSX05FVyB8IEtGX1NMRUVQQUJMRSlcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IDllNzk3NTBlMjQ4MDguLjY3OTlkOWUwODBmYzUgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTYwMDQsNiArNjAwNCwxMCBAQCBCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTChzdHJ1Y3QgZGVudHJ5KSB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmRfaW5vZGU7XG4gfTtcbiBcbitCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTChzdHJ1Y3QgbGludXhfYmlucHJtKSB7XG4rXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcbit9O1xuK1xuIEJURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMKHN0cnVjdCBzb2NrZXQpIHtcbiBcdHN0cnVjdCBzb2NrICpzaztcbiB9O1xuQEAgLTYwNTgsNiArNjA2Miw3IEBAIHN0YXRpYyBib29sIHR5cGVfaXNfdHJ1c3RlZF9vcl9udWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4ge1xuIFx0QlRGX1RZUEVfRU1JVChCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTChzdHJ1Y3Qgc29ja2V0KSk7XG4gXHRCVEZfVFlQRV9FTUlUKEJURl9UWVBFX1NBRkVfVFJVU1RFRF9PUl9OVUxMKHN0cnVjdCBkZW50cnkpKTtcbitcdEJURl9UWVBFX0VNSVQoQlRGX1RZUEVfU0FGRV9UUlVTVEVEX09SX05VTEwoc3RydWN0IGxpbnV4X2JpbnBybSkpO1xuIFx0QlRGX1RZUEVfRU1JVChCVEZfVFlQRV9TQUZFX1RSVVNURURfT1JfTlVMTChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QpKTtcbiBcbiBcdHJldHVybiBidGZfbmVzdGVkX3R5cGVfaXNfdHJ1c3RlZChcdTAwMjZlbnYtXHUwMDNlbG9nLCByZWcsIGZpZWxkX25hbWUsIGJ0Zl9pZCxcbkBAIC02MTY4LDYgKzYxNzMsMTUgQEAgc3RhdGljIGludCBjaGVja19wdHJfdG9fYnRmX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0aWYgKHJldCAhPSBQVFJfVE9fQlRGX0lEKSB7XG4gXHRcdC8qIGp1c3QgbWFyazsgKi9cbiBcbitcdH0gZWxzZSBpZiAoYnBmX2lzX3RydXN0ZWRfb3JfbnVsbF9idGZfcHRyKHJlZy1cdTAwM2V0eXBlKSkge1xuK1x0XHQvKlxuK1x0XHQgKiBBbiB1bmNoZWNrZWQgbG9hZCB0aHJvdWdoIGEgdHJ1c3RlZC1vci1OVUxMIHBvaW50ZXIgaXNcbitcdFx0ICogZmF1bHQtcHJvdGVjdGVkLiBBbnkgcG9pbnRlciBkZXJpdmVkIGZyb20gdGhhdCBsb2FkIG11c3QgYmVcbitcdFx0ICogdW50cnVzdGVkLCBhcyBhIGZhdWx0IHByb2R1Y2VzIGEgTlVMTCB2YWx1ZS5cbitcdFx0ICovXG4rXHRcdGNsZWFyX3RydXN0ZWRfZmxhZ3MoXHUwMDI2ZmxhZyk7XG4rXHRcdGZsYWcgfD0gUFRSX1VOVFJVU1RFRDtcbitcbiBcdH0gZWxzZSBpZiAodHlwZV9mbGFnKHJlZy1cdTAwM2V0eXBlKSBcdTAwMjYgUFRSX1VOVFJVU1RFRCkge1xuIFx0XHQvKiBJZiB0aGlzIGlzIGFuIHVudHJ1c3RlZCBwb2ludGVyLCBhbGwgcG9pbnRlcnMgZm9ybWVkIGJ5IHdhbGtpbmcgaXRcbiBcdFx0ICogYWxzbyBpbmhlcml0IHRoZSB1bnRydXN0ZWQgZmxhZy5cbkBAIC02NjQ0LDcgKzY2NTgsOCBAQCBzdGF0aWMgaW50IGNoZWNrX21lbV9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LCBzdHJ1Y3QgYlxuIFx0XHRpZiAoIWVyciBcdTAwMjZcdTAwMjYgdCA9PSBCUEZfUkVBRCBcdTAwMjZcdTAwMjYgdmFsdWVfcmVnbm8gXHUwMDNlPSAwKVxuIFx0XHRcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCB2YWx1ZV9yZWdubyk7XG4gXHR9IGVsc2UgaWYgKGJhc2VfdHlwZShyZWctXHUwMDNldHlwZSkgPT0gUFRSX1RPX0JURl9JRCBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIXR5cGVfbWF5X2JlX251bGwocmVnLVx1MDAzZXR5cGUpKSB7XG4rXHRcdCAgICghdHlwZV9tYXlfYmVfbnVsbChyZWctXHUwMDNldHlwZSkgfHxcbitcdFx0ICAgICh0ID09IEJQRl9SRUFEIFx1MDAyNlx1MDAyNiBicGZfaXNfdHJ1c3RlZF9vcl9udWxsX2J0Zl9wdHIocmVnLVx1MDAzZXR5cGUpKSkpIHtcbiBcdFx0ZXJyID0gY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3MoZW52LCByZWdzLCByZWcsIGFyZ25vLCBvZmYsIHNpemUsIHQsXG4gXHRcdFx0XHRcdCAgICAgIHZhbHVlX3JlZ25vKTtcbiBcdH0gZWxzZSBpZiAocmVnLVx1MDAzZXR5cGUgPT0gQ09OU1RfUFRSX1RPX01BUCkge1xuZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oXG5pbmRleCAzOGIxMTY1MjEyYzk0Li44MjY0YTM0NmQxOGFmIDEwMDY0NFxuLS0tIGEvbW0vaW50ZXJuYWwuaFxuKysrIGIvbW0vaW50ZXJuYWwuaFxuQEAgLTI1LDYgKzI1LDExIEBAXG4gc3RydWN0IGZvbGlvX2JhdGNoO1xuIHN0cnVjdCBoc3RhdGU7XG4gXG4rI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxuK2ludCBfX2NvcHlfcmVtb3RlX21tX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuK1x0XHRcdCB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpO1xuKyNlbmRpZlxuK1xuIHN0cnVjdCBodWdlX2Jvb3RtZW1fcGFnZSB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4gXHRzdHJ1Y3QgaHN0YXRlICpoc3RhdGU7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xuaW5kZXggOGIwYzJjNzM1ZDNkZS4uZmUyZjVlOTg4ZmI5MCAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4rKysgYi9tbS9tZW1vcnkuY1xuQEAgLTczMzEsOCArNzMzMSw4IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGFjY2Vzc19wcm9jZXNzX3ZtKTtcbiAgKiBDb3B5IGEgc3RyaW5nIGZyb20gYW5vdGhlciBwcm9jZXNzJ3MgYWRkcmVzcyBzcGFjZSBhcyBnaXZlbiBpbiBtbS5cbiAgKiBJZiB0aGVyZSBpcyBhbnkgZXJyb3IgcmV0dXJuIC1FRkFVTFQuXG4gICovXG4tc3RhdGljIGludCBfX2NvcHlfcmVtb3RlX3ZtX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLVx0XHRcdFx0dm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKVxuK2ludCBfX2NvcHlfcmVtb3RlX21tX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuK1x0XHRcdCB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXG4ge1xuIFx0dm9pZCAqb2xkX2J1ZiA9IGJ1ZjtcbiBcdGludCBlcnIgPSAwO1xuQEAgLTc0MDcsNDMgKzc0MDcsNiBAQCBzdGF0aWMgaW50IF9fY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdHJldHVybiBlcnI7XG4gXHRyZXR1cm4gYnVmIC0gb2xkX2J1ZjtcbiB9XG4tXG4tLyoqXG4tICogY29weV9yZW1vdGVfdm1fc3RyIC0gY29weSBhIHN0cmluZyBmcm9tIGFub3RoZXIgcHJvY2VzcydzIGFkZHJlc3Mgc3BhY2UuXG4tICogQHRzazpcdHRoZSB0YXNrIG9mIHRoZSB0YXJnZXQgYWRkcmVzcyBzcGFjZVxuLSAqIEBhZGRyOlx0c3RhcnQgYWRkcmVzcyB0byByZWFkIGZyb21cbi0gKiBAYnVmOlx0ZGVzdGluYXRpb24gYnVmZmVyXG4tICogQGxlbjpcdG51bWJlciBvZiBieXRlcyB0byBjb3B5XG4tICogQGd1cF9mbGFnczpcdGZsYWdzIG1vZGlmeWluZyBsb29rdXAgYmVoYXZpb3VyXG4tICpcbi0gKiBUaGUgY2FsbGVyIG11c3QgaG9sZCBhIHJlZmVyZW5jZSBvbiBAbW0uXG4tICpcbi0gKiBSZXR1cm46IG51bWJlciBvZiBieXRlcyBjb3BpZWQgZnJvbSBAYWRkciAoc291cmNlKSB0byBAYnVmIChkZXN0aW5hdGlvbik7XG4tICogbm90IGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMLiBBbHdheXMgZ3VhcmFudGVlZCB0byBsZWF2ZSBOVUwtdGVybWluYXRlZFxuLSAqIGJ1ZmZlci4gT24gYW55IGVycm9yLCByZXR1cm4gLUVGQVVMVC5cbi0gKi9cbi1pbnQgY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tXHRcdCAgICAgICB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXG4te1xuLVx0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4tXHRpbnQgcmV0O1xuLVxuLVx0aWYgKHVubGlrZWx5KGxlbiA9PSAwKSlcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRtbSA9IGdldF90YXNrX21tKHRzayk7XG4tXHRpZiAoIW1tKSB7XG4tXHRcdCooY2hhciAqKWJ1ZiA9ICdcXDAnO1xuLVx0XHRyZXR1cm4gLUVGQVVMVDtcbi1cdH1cbi1cbi1cdHJldCA9IF9fY29weV9yZW1vdGVfdm1fc3RyKG1tLCBhZGRyLCBidWYsIGxlbiwgZ3VwX2ZsYWdzKTtcbi1cbi1cdG1tcHV0KG1tKTtcbi1cbi1cdHJldHVybiByZXQ7XG4tfVxuLUVYUE9SVF9TWU1CT0xfR1BMKGNvcHlfcmVtb3RlX3ZtX3N0cik7XG4gI2VuZGlmIC8qIENPTkZJR19CUEZfU1lTQ0FMTCAqL1xuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvbW0vbm9tbXUuYyBiL21tL25vbW11LmNcbmluZGV4IDQ5OGUwMWVlNDBiMDUuLjk4NTk2ZTYwMzExZjMgMTAwNjQ0XG4tLS0gYS9tbS9ub21tdS5jXG4rKysgYi9tbS9ub21tdS5jXG5AQCAtMTc0Niw4ICsxNzQ2LDggQEAgRVhQT1JUX1NZTUJPTF9HUEwoYWNjZXNzX3Byb2Nlc3Nfdm0pO1xuICAqIENvcHkgYSBzdHJpbmcgZnJvbSBhbm90aGVyIHByb2Nlc3MncyBhZGRyZXNzIHNwYWNlIGFzIGdpdmVuIGluIG1tLlxuICAqIElmIHRoZXJlIGlzIGFueSBlcnJvciByZXR1cm4gLUVGQVVMVC5cbiAgKi9cbi1zdGF0aWMgaW50IF9fY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tXHRcdFx0XHR2b2lkICpidWYsIGludCBsZW4pXG4raW50IF9fY29weV9yZW1vdGVfbW1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4rXHRcdFx0IHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGFkZHJfZW5kO1xuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG5AQCAtMTc4MSw0MyArMTc4MSw2IEBAIHN0YXRpYyBpbnQgX19jb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4tXG4tLyoqXG4tICogY29weV9yZW1vdGVfdm1fc3RyIC0gY29weSBhIHN0cmluZyBmcm9tIGFub3RoZXIgcHJvY2VzcydzIGFkZHJlc3Mgc3BhY2UuXG4tICogQHRzazpcdHRoZSB0YXNrIG9mIHRoZSB0YXJnZXQgYWRkcmVzcyBzcGFjZVxuLSAqIEBhZGRyOlx0c3RhcnQgYWRkcmVzcyB0byByZWFkIGZyb21cbi0gKiBAYnVmOlx0ZGVzdGluYXRpb24gYnVmZmVyXG4tICogQGxlbjpcdG51bWJlciBvZiBieXRlcyB0byBjb3B5XG4tICogQGd1cF9mbGFnczpcdGZsYWdzIG1vZGlmeWluZyBsb29rdXAgYmVoYXZpb3VyICh1bnVzZWQpXG4tICpcbi0gKiBUaGUgY2FsbGVyIG11c3QgaG9sZCBhIHJlZmVyZW5jZSBvbiBAbW0uXG4tICpcbi0gKiBSZXR1cm46IG51bWJlciBvZiBieXRlcyBjb3BpZWQgZnJvbSBAYWRkciAoc291cmNlKSB0byBAYnVmIChkZXN0aW5hdGlvbik7XG4tICogbm90IGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMLiBBbHdheXMgZ3VhcmFudGVlZCB0byBsZWF2ZSBOVUwtdGVybWluYXRlZFxuLSAqIGJ1ZmZlci4gT24gYW55IGVycm9yLCByZXR1cm4gLUVGQVVMVC5cbi0gKi9cbi1pbnQgY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tXHRcdCAgICAgICB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXG4te1xuLVx0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4tXHRpbnQgcmV0O1xuLVxuLVx0aWYgKHVubGlrZWx5KGxlbiA9PSAwKSlcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRtbSA9IGdldF90YXNrX21tKHRzayk7XG4tXHRpZiAoIW1tKSB7XG4tXHRcdCooY2hhciAqKWJ1ZiA9ICdcXDAnO1xuLVx0XHRyZXR1cm4gLUVGQVVMVDtcbi1cdH1cbi1cbi1cdHJldCA9IF9fY29weV9yZW1vdGVfdm1fc3RyKG1tLCBhZGRyLCBidWYsIGxlbik7XG4tXG4tXHRtbXB1dChtbSk7XG4tXG4tXHRyZXR1cm4gcmV0O1xuLX1cbi1FWFBPUlRfU1lNQk9MX0dQTChjb3B5X3JlbW90ZV92bV9zdHIpO1xuICNlbmRpZiAvKiBDT05GSUdfQlBGX1NZU0NBTEwgKi9cbiBcbiAvKipcbmRpZmYgLS1naXQgYS9tbS91dGlsLmMgYi9tbS91dGlsLmNcbmluZGV4IGJmMDUxM2QxZDNkMDguLjJlY2EyN2IwMjc5MWYgMTAwNjQ0XG4tLS0gYS9tbS91dGlsLmNcbisrKyBiL21tL3V0aWwuY1xuQEAgLTEwNjEsNiArMTA2MSw2OCBAQCBpbnQgZ2V0X2NtZGxpbmUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBjaGFyICpidWZmZXIsIGludCBidWZsZW4pXG4gXHRyZXR1cm4gcmVzO1xuIH1cbiBcbisjaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG4rLyoqXG4rICogY29weV9yZW1vdGVfbW1fc3RyIC0gY29weSBhIHN0cmluZyBmcm9tIGEgcmVtb3RlIGFkZHJlc3Mgc3BhY2UuXG4rICogQG1tOiAgICAgICAgIHRoZSByZW1vdGUgYWRkcmVzcyBzcGFjZVxuKyAqIEBhZGRyOiAgICAgICBzdGFydCBhZGRyZXNzIHRvIHJlYWQgZnJvbVxuKyAqIEBidWY6ICAgICAgICBkZXN0aW5hdGlvbiBidWZmZXJcbisgKiBAbGVuOiAgICAgICAgbnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHlcbisgKiBAZ3VwX2ZsYWdzOiAgZmxhZ3MgbW9kaWZ5aW5nIGxvb2t1cCBiZWhhdmlvdXJcbisgKlxuKyAqIFRoZSBjYWxsZXIgbXVzdCBob2xkIGEgcmVmZXJlbmNlIG9uIEBtbS5cbisgKlxuKyAqIFJldHVybjogbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCBmcm9tIEBhZGRyIChzb3VyY2UpIHRvIEBidWYgKGRlc3RpbmF0aW9uKSxcbisgKiBub3QgaW5jbHVkaW5nIHRoZSB0cmFpbGluZyBOVUwuIElmIEBsZW4gaXMgemVybywgcmV0dXJuIDAgd2l0aG91dCBhY2Nlc3NpbmdcbisgKiBAYnVmLiBPdGhlcndpc2UsIEBidWYgaXMgYWx3YXlzIE5VTC10ZXJtaW5hdGVkLiBPbiBhbnkgZXJyb3IsIHJldHVyblxuKyAqIC1FRkFVTFQuXG4rICovXG4raW50IGNvcHlfcmVtb3RlX21tX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuK1x0XHQgICAgICAgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKVxuK3tcbitcdGlmICh1bmxpa2VseShsZW4gPT0gMCkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIF9fY29weV9yZW1vdGVfbW1fc3RyKG1tLCBhZGRyLCBidWYsIGxlbiwgZ3VwX2ZsYWdzKTtcbit9XG4rXG4rLyoqXG4rICogY29weV9yZW1vdGVfdm1fc3RyIC0gY29weSBhIHN0cmluZyBmcm9tIGFub3RoZXIgcHJvY2VzcydzIGFkZHJlc3Mgc3BhY2UuXG4rICogQHRzazpcdHRoZSB0YXNrIG9mIHRoZSB0YXJnZXQgYWRkcmVzcyBzcGFjZVxuKyAqIEBhZGRyOlx0c3RhcnQgYWRkcmVzcyB0byByZWFkIGZyb21cbisgKiBAYnVmOlx0ZGVzdGluYXRpb24gYnVmZmVyXG4rICogQGxlbjpcdG51bWJlciBvZiBieXRlcyB0byBjb3B5XG4rICogQGd1cF9mbGFnczpcdGZsYWdzIG1vZGlmeWluZyBsb29rdXAgYmVoYXZpb3VyXG4rICpcbisgKiBSZXR1cm46IG51bWJlciBvZiBieXRlcyBjb3BpZWQgZnJvbSBAYWRkciAoc291cmNlKSB0byBAYnVmIChkZXN0aW5hdGlvbiksXG4rICogbm90IGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMLiBJZiBAbGVuIGlzIHplcm8sIHJldHVybiAwIHdpdGhvdXQgYWNjZXNzaW5nXG4rICogQGJ1Zi4gT3RoZXJ3aXNlLCBAYnVmIGlzIGFsd2F5cyBOVUwtdGVybWluYXRlZC4gT24gYW55IGVycm9yLCByZXR1cm5cbisgKiAtRUZBVUxULlxuKyAqL1xuK2ludCBjb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHVuc2lnbmVkIGxvbmcgYWRkcixcbitcdFx0ICAgICAgIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncylcbit7XG4rXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAodW5saWtlbHkobGVuID09IDApKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdG1tID0gZ2V0X3Rhc2tfbW0odHNrKTtcbitcdGlmICghbW0pIHtcbitcdFx0KihjaGFyICopYnVmID0gJ1xcMCc7XG4rXHRcdHJldHVybiAtRUZBVUxUO1xuK1x0fVxuK1xuK1x0cmV0ID0gX19jb3B5X3JlbW90ZV9tbV9zdHIobW0sIGFkZHIsIGJ1ZiwgbGVuLCBndXBfZmxhZ3MpO1xuK1xuK1x0bW1wdXQobW0pO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwoY29weV9yZW1vdGVfdm1fc3RyKTtcbisjZW5kaWYgLyogQ09ORklHX0JQRl9TWVNDQUxMICovXG4rXG4gaW50IF9fd2VhayBtZW1jbXBfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UxLCBzdHJ1Y3QgcGFnZSAqcGFnZTIpXG4ge1xuIFx0Y2hhciAqYWRkcjEsICphZGRyMjtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfaXRlci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2l0ZXIuY1xuaW5kZXggYzY5MDgwY2ExNGY1YS4uOTlhMTZhMWFkZDcwZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9pdGVyLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9pdGVyLmNcbkBAIC0zOSwxMCArMzksMTAgQEAgc3RhdGljIHZvaWQgdGVzdF9idGZfaWRfb3JfbnVsbCh2b2lkKVxuIFx0c3RydWN0IGJwZl9pdGVyX3Rlc3Rfa2VybjMgKnNrZWw7XG4gXG4gXHRza2VsID0gYnBmX2l0ZXJfdGVzdF9rZXJuM19fb3Blbl9hbmRfbG9hZCgpO1xuLVx0aWYgKCFBU1NFUlRfRVJSX1BUUihza2VsLCBcImJwZl9pdGVyX3Rlc3Rfa2VybjNfX29wZW5fYW5kX2xvYWRcIikpIHtcbi1cdFx0YnBmX2l0ZXJfdGVzdF9rZXJuM19fZGVzdHJveShza2VsKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcImJwZl9pdGVyX3Rlc3Rfa2VybjNfX29wZW5fYW5kX2xvYWRcIikpXG4gXHRcdHJldHVybjtcbi1cdH1cbitcbitcdGJwZl9pdGVyX3Rlc3Rfa2VybjNfX2Rlc3Ryb3koc2tlbCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGRvX2R1bW15X3JlYWRfb3B0cyhzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIHN0cnVjdCBicGZfaXRlcl9hdHRhY2hfb3B0cyAqb3B0cylcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jb3B5X2Zyb21fdXNlcl9icHJtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jb3B5X2Zyb21fdXNlcl9icHJtLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5iMjMyNWIxOTM1NzYxXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9jb3B5X2Zyb21fdXNlcl9icHJtLmNcbkBAIC0wLDAgKzEsNzIgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuK1xuKyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvd2FpdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcImNvcHlfZnJvbV91c2VyX2Jwcm0uc2tlbC5oXCJcbitcbit2b2lkIHRlc3RfY29weV9mcm9tX3VzZXJfYnBybSh2b2lkKVxuK3tcbitcdGNoYXIgYXJnMFtdID0gXCJmaXJzdFwiO1xuK1x0Y2hhciBhcmcxW10gPSBcInNlY29uZC1hcmd1bWVudFwiO1xuK1x0Y2hhciBlbnYwW10gPSBcIlNPTUVfRU5WPWFcIjtcbitcdGNoYXIgZW52MVtdID0gXCJPVEhFUl9FTlY9c29tZXRoaW5nXCI7XG4rXHRzdHJ1Y3QgY29weV9mcm9tX3VzZXJfYnBybSAqc2tlbDtcbitcdHBpZF90IGNoaWxkO1xuK1x0aW50IHN0YXR1cztcbitcbitcdHNrZWwgPSBjb3B5X2Zyb21fdXNlcl9icHJtX19vcGVuX2FuZF9sb2FkKCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJvcGVuX2FuZF9sb2FkXCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHQvKlxuK1x0ICogT24gIUNPTkZJR19NTVUsIGV4ZWMgc3RyaW5ncyBhcmUgaGVsZCBpbiBicHJtLVx1MDAzZXBhZ2VbXSByYXRoZXIgdGhhblxuK1x0ICogYmVpbmcgbWFwcGVkIGluIGJwcm0tXHUwMDNlbW0uXG4rXHQgKi9cbitcdGlmICghc2tlbC1cdTAwM2VrY29uZmlnLVx1MDAzZUNPTkZJR19NTVUpIHtcbitcdFx0cHJpbnRmKFwiJXM6U0tJUDogdGVzdCByZXF1aXJlcyBDT05GSUdfTU1VXFxuXCIsIF9fZnVuY19fKTtcbitcdFx0dGVzdF9fc2tpcCgpO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdGlmICghQVNTRVJUX09LKGNvcHlfZnJvbV91c2VyX2Jwcm1fX2F0dGFjaChza2VsKSwgXCJhdHRhY2hcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0Y2hpbGQgPSBmb3JrKCk7XG4rXHRpZiAoIUFTU0VSVF9HRShjaGlsZCwgMCwgXCJmb3JrXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGlmICghY2hpbGQpIHtcbitcdFx0Y2hhciAqY29uc3QgYXJndltdID0geyBhcmcwLCBhcmcxLCBOVUxMIH07XG4rXHRcdGNoYXIgKmNvbnN0IGVudnBbXSA9IHsgZW52MCwgZW52MSwgTlVMTCB9O1xuK1xuK1x0XHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vtb25pdG9yZWRfcGlkID0gZ2V0cGlkKCk7XG4rXHRcdGV4ZWN2ZShcIi9iaW4vdHJ1ZVwiLCBhcmd2LCBlbnZwKTtcbitcdFx0X2V4aXQoZXJybm8pO1xuK1x0fVxuK1xuK1x0aWYgKCFBU1NFUlRfRVEod2FpdHBpZChjaGlsZCwgXHUwMDI2c3RhdHVzLCAwKSwgY2hpbGQsIFwid2FpdHBpZFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRpZiAoQVNTRVJUX1RSVUUoV0lGRVhJVEVEKHN0YXR1cyksIFwiY2hpbGRfZXhpdGVkXCIpKVxuK1x0XHRBU1NFUlRfRVEoV0VYSVRTVEFUVVMoc3RhdHVzKSwgRVBFUk0sIFwiZXhlY19lcnJub1wiKTtcbitcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VicHJtX2FyZ2MsIDIsIFwiYnBybV9hcmdjXCIpO1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWJwcm1fZW52YywgMiwgXCJicHJtX2VudmNcIik7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlZGF0YV9sZW5fbWF0Y2gsIDEsIFwiZGF0YV9sZW5fbWF0Y2hcIik7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlaW52YWxpZF9mbGFnc19yZXQsIC1FSU5WQUwsIFwiaW52YWxpZF9mbGFnc19yZXRcIik7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlY29weV9yZXQsIDAsIFwiY29weV9yZXRcIik7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlc3RyX2FyZzBfcmV0LCBzaXplb2YoYXJnMCksIFwic3RyX2FyZzBfcmV0XCIpO1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXN0cl9hcmcxX3JldCwgc2l6ZW9mKGFyZzEpLCBcInN0cl9hcmcxX3JldFwiKTtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VzdHJfZW52MF9yZXQsIHNpemVvZihlbnYwKSwgXCJzdHJfZW52MF9yZXRcIik7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlc3RyX2VudjFfcmV0LCBzaXplb2YoZW52MSksIFwic3RyX2VudjFfcmV0XCIpO1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWRhdGFfbWF0Y2gsIDEsIFwiZGF0YV9tYXRjaFwiKTtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VzdHJfYXJnc19tYXRjaCwgMSwgXCJzdHJfYXJnc19tYXRjaFwiKTtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VzdHJfZW52c19tYXRjaCwgMSwgXCJzdHJfZW52c19tYXRjaFwiKTtcbitcbitvdXQ6XG4rXHRjb3B5X2Zyb21fdXNlcl9icHJtX19kZXN0cm95KHNrZWwpO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfbWF5YmVfbnVsbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX21heWJlX251bGwuY1xuaW5kZXggMDFkYzI2MTNjOGE1MS4uNDVhZjZmMDBhZDkwOCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19tYXliZV9udWxsLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19tYXliZV9udWxsLmNcbkBAIC0xOSwxNSArMTksMTYgQEAgc3RhdGljIHZvaWQgbWF5YmVfbnVsbCh2b2lkKVxuIFx0c3RydWN0X29wc19tYXliZV9udWxsX19kZXN0cm95KHNrZWwpO1xuIH1cbiBcbi0vKiBUZXN0IHRoYXQgdGhlIHZlcmlmaWVyIHJlamVjdHMgYSBwcm9ncmFtIHRoYXQgYWNjZXNzIGEgbnVsbGFibGUgcG9pbnRlclxuLSAqIHdpdGhvdXQgYSBjaGVjayBiZWZvcmVoYW5kLlxuKy8qXG4rICogVGVzdCB0aGF0IHRoZSB2ZXJpZmllciBhY2NlcHRzIGEgZmF1bHQtcHJvdGVjdGVkIHJlYWQgdGhyb3VnaCBhIG51bGxhYmxlXG4rICogdHJ1c3RlZCBwb2ludGVyIHdpdGhvdXQgYW4gZXhwbGljaXQgTlVMTCBjaGVjay5cbiAgKi9cbi1zdGF0aWMgdm9pZCBtYXliZV9udWxsX2ZhaWwodm9pZClcbitzdGF0aWMgdm9pZCBtYXliZV9udWxsX25vX2NoZWNrKHZvaWQpXG4ge1xuIFx0c3RydWN0IHN0cnVjdF9vcHNfbWF5YmVfbnVsbF9mYWlsICpza2VsO1xuIFxuIFx0c2tlbCA9IHN0cnVjdF9vcHNfbWF5YmVfbnVsbF9mYWlsX19vcGVuX2FuZF9sb2FkKCk7XG4tXHRpZiAoQVNTRVJUX0VSUl9QVFIoc2tlbCwgXCJzdHJ1Y3Rfb3BzX21vZHVsZV9mYWlsX19vcGVuX2FuZF9sb2FkXCIpKVxuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwic3RydWN0X29wc19tYXliZV9udWxsX2ZhaWxfX29wZW5fYW5kX2xvYWRcIikpXG4gXHRcdHJldHVybjtcbiBcbiBcdHN0cnVjdF9vcHNfbWF5YmVfbnVsbF9mYWlsX19kZXN0cm95KHNrZWwpO1xuQEAgLTQxLDYgKzQyLDYgQEAgdm9pZCB0ZXN0X3N0cnVjdF9vcHNfbWF5YmVfbnVsbCh2b2lkKVxuIFx0ICovXG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcIm1heWJlX251bGxcIikpXG4gXHRcdG1heWJlX251bGwoKTtcbi1cdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwibWF5YmVfbnVsbF9mYWlsXCIpKVxuLVx0XHRtYXliZV9udWxsX2ZhaWwoKTtcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwibWF5YmVfbnVsbF9ub19jaGVja1wiKSlcbitcdFx0bWF5YmVfbnVsbF9ub19jaGVjaygpO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90cF9idGZfbnVsbGFibGUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RwX2J0Zl9udWxsYWJsZS5jXG5pbmRleCBhY2NjNDJlMDFmOGE4Li44MjVmZTdhOTJkNzRmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHBfYnRmX251bGxhYmxlLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RwX2J0Zl9udWxsYWJsZS5jXG5AQCAtMiw2ICsyLDMxIEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4gI2luY2x1ZGUgXCJ0ZXN0X3RwX2J0Zl9udWxsYWJsZS5za2VsLmhcIlxuKyNpbmNsdWRlIFwidGVzdF90cF9idGZfbnVsbGFibGVfcnVudGltZS5za2VsLmhcIlxuK1xuK3N0YXRpYyB2b2lkIHRlc3RfbnVsbGFibGVfcnVudGltZSh2b2lkKVxuK3tcbitcdHN0cnVjdCB0ZXN0X3RwX2J0Zl9udWxsYWJsZV9ydW50aW1lICpza2VsO1xuK1xuK1x0c2tlbCA9IHRlc3RfdHBfYnRmX251bGxhYmxlX3J1bnRpbWVfX29wZW5fYW5kX2xvYWQoKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcIm9wZW5fYW5kX2xvYWRcIikpXG4rXHRcdHJldHVybjtcbitcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZW1vbml0b3JlZF90aWQgPSBzeXNfZ2V0dGlkKCk7XG4rXG4rXHRpZiAoIUFTU0VSVF9PSyh0ZXN0X3RwX2J0Zl9udWxsYWJsZV9ydW50aW1lX19hdHRhY2goc2tlbCksIFwiYXR0YWNoXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGlmICghQVNTRVJUX09LKHRyaWdnZXJfbW9kdWxlX3Rlc3RfcmVhZCgyKSwgXCJ0cmlnZ2VyXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VjYWxscywgMiwgXCJjYWxsc1wiKTtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2Vub25udWxsX2xlbiwgMiwgXCJub25udWxsX2xlblwiKTtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VudWxsX2xlbiwgMCwgXCJudWxsX2xlblwiKTtcbitcbitvdXQ6XG4rXHR0ZXN0X3RwX2J0Zl9udWxsYWJsZV9ydW50aW1lX19kZXN0cm95KHNrZWwpO1xuK31cbiBcbiB2b2lkIHRlc3RfdHBfYnRmX251bGxhYmxlKHZvaWQpXG4ge1xuQEAgLTExLDQgKzM2LDcgQEAgdm9pZCB0ZXN0X3RwX2J0Zl9udWxsYWJsZSh2b2lkKVxuIFx0fVxuIFxuIFx0UlVOX1RFU1RTKHRlc3RfdHBfYnRmX251bGxhYmxlKTtcbitcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwicnVudGltZVwiKSlcbitcdFx0dGVzdF9udWxsYWJsZV9ydW50aW1lKCk7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9jb3B5X2Zyb21fdXNlcl9icHJtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvY29weV9mcm9tX3VzZXJfYnBybS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYjMzNGExNTc0MTllNVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2NvcHlfZnJvbV91c2VyX2Jwcm0uY1xuQEAgLTAsMCArMSwxMjMgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuK1xuKyNpbmNsdWRlIFwidm1saW51eC5oXCJcbitcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuKyNpbmNsdWRlIFwiYnBmX21pc2MuaFwiXG4rXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuK1xuK3N0YXRpYyBjb25zdCBjaGFyIGV4cGVjdGVkX2RhdGFbXSA9IFwiZmlyc3RcXDBzZWNvbmQtYXJndW1lbnRcXDBcIlxuK1x0XHRcdFx0ICAgIFwiU09NRV9FTlY9YVxcME9USEVSX0VOVj1zb21ldGhpbmdcIjtcbitzdGF0aWMgY29uc3QgY2hhciBleHBlY3RlZF9hcmcwW10gPSBcImZpcnN0XCI7XG4rc3RhdGljIGNvbnN0IGNoYXIgZXhwZWN0ZWRfYXJnMVtdID0gXCJzZWNvbmQtYXJndW1lbnRcIjtcbitzdGF0aWMgY29uc3QgY2hhciBleHBlY3RlZF9lbnYwW10gPSBcIlNPTUVfRU5WPWFcIjtcbitzdGF0aWMgY29uc3QgY2hhciBleHBlY3RlZF9lbnYxW10gPSBcIk9USEVSX0VOVj1zb21ldGhpbmdcIjtcbitcbitpbnQgbW9uaXRvcmVkX3BpZDtcbitpbnQgYnBybV9hcmdjO1xuK2ludCBicHJtX2VudmM7XG4raW50IGRhdGFfbGVuX21hdGNoO1xuK2ludCBpbnZhbGlkX2ZsYWdzX3JldDtcbitpbnQgY29weV9yZXQ7XG4raW50IHN0cl9hcmcwX3JldDtcbitpbnQgc3RyX2FyZzFfcmV0O1xuK2ludCBzdHJfZW52MF9yZXQ7XG4raW50IHN0cl9lbnYxX3JldDtcbitpbnQgZGF0YV9tYXRjaDtcbitpbnQgc3RyX2FyZ3NfbWF0Y2g7XG4raW50IHN0cl9lbnZzX21hdGNoO1xuK1xuK2V4dGVybiBib29sIENPTkZJR19NTVUgX19rY29uZmlnIF9fd2VhaztcbitcbitleHRlcm4gaW50IGJwZl9jb3B5X2Zyb21fdXNlcl9tbSh2b2lkICpkc3QsIHUzMiBkc3RfX3N6LFxuK1x0XHRcdFx0IGNvbnN0IHZvaWQgKnVuc2FmZV9wdHJfX2lnbixcbitcdFx0XHRcdCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdTY0IGZsYWdzKSBfX2tzeW07XG4rXG4rZXh0ZXJuIGludCBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKHZvaWQgKmRzdCwgdTMyIGRzdF9fc3osXG4rXHRcdFx0XHQgICAgIGNvbnN0IHZvaWQgKnVuc2FmZV9wdHJfX2lnbixcbitcdFx0XHRcdCAgICAgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHU2NCBmbGFncykgX19rc3ltO1xuK1xuK1NFQyhcImxzbS5zL2Jwcm1fY2hlY2tfc2VjdXJpdHlcIilcbitpbnQgQlBGX1BST0coY2hlY2tfZXhlY19hcmdzLCBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuK3tcbitcdHUzMiBwaWQgPSBicGZfZ2V0X2N1cnJlbnRfcGlkX3RnaWQoKSBcdTAwM2VcdTAwM2UgMzI7XG4rXHRjaGFyIGRhdGFbc2l6ZW9mKGV4cGVjdGVkX2RhdGEpXSA9IHt9O1xuK1x0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4rXHRjaGFyIGFyZzBbMzJdID0ge307XG4rXHRjaGFyIGFyZzFbMzJdID0ge307XG4rXHRjaGFyIGVudjBbMzJdID0ge307XG4rXHRjaGFyIGVudjFbMzJdID0ge307XG4rXHR1NjQgb2Zmc2V0ID0gMDtcbitcdHU2NCBkYXRhX2xlbjtcbitcbitcdGlmICghQ09ORklHX01NVSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAocGlkICE9IG1vbml0b3JlZF9waWQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0bW0gPSBicHJtLVx1MDAzZW1tO1xuK1x0aWYgKCFtbSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRicHJtX2FyZ2MgPSBicHJtLVx1MDAzZWFyZ2M7XG4rXHRicHJtX2VudmMgPSBicHJtLVx1MDAzZWVudmM7XG4rXG4rXHQvKiB0aGlzIGlzIHRoZSB0b3RhbCBzaXplIG9mIGFyZ3MgYW5kIGVudnMgc3RhcnRpbmcgZnJvbSBicHJtLVx1MDAzZXAgKi9cbitcdGRhdGFfbGVuID0gYnBybS1cdTAwM2VleGVjIC0gYnBybS1cdTAwM2VwO1xuK1x0ZGF0YV9sZW5fbWF0Y2ggPSBkYXRhX2xlbiA9PSBzaXplb2YoZXhwZWN0ZWRfZGF0YSk7XG4rXG4rXHRpbnZhbGlkX2ZsYWdzX3JldCA9IGJwZl9jb3B5X2Zyb21fdXNlcl9tbShkYXRhLFxuK1x0XHRcdFx0XHRcdCAgc2l6ZW9mKGRhdGEpLCAodm9pZCAqKWJwcm0tXHUwMDNlcCwgbW0sIH4wVUxMKTtcbitcbitcdGNvcHlfcmV0ID0gYnBmX2NvcHlfZnJvbV91c2VyX21tKGRhdGEsIHNpemVvZihkYXRhKSwgKHZvaWQgKilicHJtLVx1MDAzZXAsXG4rXHRcdFx0XHRcdCBtbSwgMCk7XG4rXHRpZiAoY29weV9yZXQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0ZGF0YV9tYXRjaCA9XG4rXHRcdCFfX2J1aWx0aW5fbWVtY21wKGRhdGEsIGV4cGVjdGVkX2RhdGEsIHNpemVvZihleHBlY3RlZF9kYXRhKSk7XG4rXG4rXHQvKiBhcmcwIGlzIGF0IGJwcm0tXHUwMDNlcCAqL1xuK1x0c3RyX2FyZzBfcmV0ID0gYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cihhcmcwLCBzaXplb2YoYXJnMCksXG4rXHRcdFx0XHRcdFx0ICh2b2lkICopKGJwcm0tXHUwMDNlcCArIG9mZnNldCksXG4rXHRcdFx0XHRcdFx0IG1tLCBCUEZfRl9QQURfWkVST1MpO1xuK1x0aWYgKHN0cl9hcmcwX3JldCAhPSBzaXplb2YoZXhwZWN0ZWRfYXJnMCkpXG4rXHRcdHJldHVybiAwO1xuK1x0b2Zmc2V0ICs9IHN0cl9hcmcwX3JldDtcbitcbitcdC8qIGFyZzEgaXMgYXQgYnBybS1cdTAwM2VwICsgc2l6ZW9mKGFyZzApICovXG4rXHRzdHJfYXJnMV9yZXQgPSBicGZfY29weV9mcm9tX3VzZXJfbW1fc3RyKGFyZzEsIHNpemVvZihhcmcxKSxcbitcdFx0XHRcdFx0XHQgKHZvaWQgKikoYnBybS1cdTAwM2VwICsgb2Zmc2V0KSxcbitcdFx0XHRcdFx0XHQgbW0sIEJQRl9GX1BBRF9aRVJPUyk7XG4rXHRpZiAoc3RyX2FyZzFfcmV0ICE9IHNpemVvZihleHBlY3RlZF9hcmcxKSlcbitcdFx0cmV0dXJuIDA7XG4rXHRvZmZzZXQgKz0gc3RyX2FyZzFfcmV0O1xuK1xuK1x0LyogZW52MCBpcyBhdCBicHJtLVx1MDAzZXAgKyBzaXplb2YoYXJnMCkgKyBzaXplb2YoYXJnMSkgKi9cbitcdHN0cl9lbnYwX3JldCA9IGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHIoZW52MCwgc2l6ZW9mKGVudjApLFxuK1x0XHRcdFx0XHRcdCAodm9pZCAqKShicHJtLVx1MDAzZXAgKyBvZmZzZXQpLFxuK1x0XHRcdFx0XHRcdCBtbSwgQlBGX0ZfUEFEX1pFUk9TKTtcbitcdGlmIChzdHJfZW52MF9yZXQgIT0gc2l6ZW9mKGV4cGVjdGVkX2VudjApKVxuK1x0XHRyZXR1cm4gMDtcbitcdG9mZnNldCArPSBzdHJfZW52MF9yZXQ7XG4rXG4rXHQvKiBlbnYxIGlzIGF0IGJwcm0tXHUwMDNlcCArIHNpemVvZihhcmcwKSArIHNpemVvZihhcmcxKSArIHNpemVvZihlbnYwKSAqL1xuK1x0c3RyX2VudjFfcmV0ID0gYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cihlbnYxLCBzaXplb2YoZW52MSksXG4rXHRcdFx0XHRcdFx0ICh2b2lkICopKGJwcm0tXHUwMDNlcCArIG9mZnNldCksXG4rXHRcdFx0XHRcdFx0IG1tLCBCUEZfRl9QQURfWkVST1MpO1xuK1x0aWYgKHN0cl9lbnYxX3JldCAhPSBzaXplb2YoZXhwZWN0ZWRfZW52MSkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0c3RyX2FyZ3NfbWF0Y2ggPVxuK1x0XHQhX19idWlsdGluX21lbWNtcChhcmcwLCBleHBlY3RlZF9hcmcwLCBzaXplb2YoZXhwZWN0ZWRfYXJnMCkpIFx1MDAyNlx1MDAyNlxuK1x0XHQhX19idWlsdGluX21lbWNtcChhcmcxLCBleHBlY3RlZF9hcmcxLCBzaXplb2YoZXhwZWN0ZWRfYXJnMSkpO1xuK1x0c3RyX2VudnNfbWF0Y2ggPVxuK1x0XHQhX19idWlsdGluX21lbWNtcChlbnYwLCBleHBlY3RlZF9lbnYwLCBzaXplb2YoZXhwZWN0ZWRfZW52MCkpIFx1MDAyNlx1MDAyNlxuK1x0XHQhX19idWlsdGluX21lbWNtcChlbnYxLCBleHBlY3RlZF9lbnYxLCBzaXplb2YoZXhwZWN0ZWRfZW52MSkpO1xuK1xuK1x0cmV0dXJuIGRhdGFfbWF0Y2ggXHUwMDI2XHUwMDI2IHN0cl9hcmdzX21hdGNoIFx1MDAyNlx1MDAyNiBzdHJfZW52c19tYXRjaCA/IC1FUEVSTSA6IDA7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yYXdfdHBfbnVsbF9mYWlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmF3X3RwX251bGxfZmFpbC5jXG5pbmRleCA3MjVkNzNjOWZmZTEzLi4xNjMxMjQ3OTNkMGE2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Jhd190cF9udWxsX2ZhaWwuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Jhd190cF9udWxsX2ZhaWwuY1xuQEAgLTIsMjIgKzIsMzQgQEBcbiAvKiBDb3B5cmlnaHQgKGMpIDIwMjQgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjdm1saW51eC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFwiYnBmX21pc2MuaFwiXG4gXG4gY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuIFxuLS8qIEVuc3VyZSBtb2R1bGUgcGFyYW1ldGVyIGhhcyBQVFJfTUFZQkVfTlVMTCAqL1xuK2V4dGVybiBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmJwZl90YXNrX2FjcXVpcmUoc3RydWN0IHRhc2tfc3RydWN0ICpwKSBfX2tzeW07XG4rZXh0ZXJuIHZvaWQgYnBmX3Rhc2tfcmVsZWFzZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIF9fa3N5bTtcbitcbisvKlxuKyAqIEVuc3VyZSB0aGUgbW9kdWxlIHRyYWNlcG9pbnQgYXJndW1lbnQgaXMgdHJ1c3RlZC1vci1OVUxMIHdoaWxlIGFsbG93aW5nXG4rICogYSBmYXVsdC1wcm90ZWN0ZWQgcmVhZCB3aXRob3V0IGFuIGV4cGxpY2l0IE5VTEwgY2hlY2suXG4rICovXG4gU0VDKFwidHBfYnRmL2JwZl90ZXN0bW9kX3Rlc3RfcmF3X3RwX251bGxfdHBcIilcbi1fX2ZhaWx1cmUgX19tc2coXCJSMSBpbnZhbGlkIG1lbSBhY2Nlc3MgJ3RydXN0ZWRfcHRyX29yX251bGxfJ1wiKVxuK19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxuK19fbXNnKFwiUjE9dHJ1c3RlZF9wdHJfb3JfbnVsbF9za19idWZmXCIpXG4gaW50IHRlc3RfcmF3X3RwX251bGxfYnBmX3Rlc3Rtb2RfdGVzdF9yYXdfdHBfbnVsbF9hcmdfMSh2b2lkICpjdHgpIHtcbiAgICAgYXNtIHZvbGF0aWxlKFwicjEgPSAqKHU2NCAqKShyMSArMCk7IHIxID0gKih1NjQgKikocjEgKzApO1wiIDo6OiBfX2Nsb2JiZXJfYWxsKTtcbiAgICAgcmV0dXJuIDA7XG4gfVxuIFxuLS8qIENoZWNrIE5VTEwgbWFya2luZyAqL1xuKy8qXG4rICogRW5zdXJlIHNjaGVkX3BpX3NldHByaW8ncyBzZWNvbmQgYXJndW1lbnQgaXMgdHJ1c3RlZC1vci1OVUxMIHdoaWxlIGFsbG93aW5nXG4rICogYSBmYXVsdC1wcm90ZWN0ZWQgcmVhZCB3aXRob3V0IGFuIGV4cGxpY2l0IE5VTEwgY2hlY2suXG4rICovXG4gU0VDKFwidHBfYnRmL3NjaGVkX3BpX3NldHByaW9cIilcbi1fX2ZhaWx1cmUgX19tc2coXCJSMSBpbnZhbGlkIG1lbSBhY2Nlc3MgJ3RydXN0ZWRfcHRyX29yX251bGxfJ1wiKVxuK19fc3VjY2VzcyBfX2xvZ19sZXZlbCgyKVxuK19fbXNnKFwiUjE9dHJ1c3RlZF9wdHJfb3JfbnVsbF90YXNrX3N0cnVjdFwiKVxuIGludCB0ZXN0X3Jhd190cF9udWxsX3NjaGVkX3BpX3NldHByaW9fYXJnXzIodm9pZCAqY3R4KSB7XG4gICAgIGFzbSB2b2xhdGlsZShcInIxID0gKih1NjQgKikocjEgKzgpOyByMSA9ICoodTY0ICopKHIxICswKTtcIiA6OjogX19jbG9iYmVyX2FsbCk7XG4gICAgIHJldHVybiAwO1xuQEAgLTYwLDcgKzcyLDggQEAgaW50IHRlc3RfdHBfYnRmX3NpZ25hbF9kZWxpdmVyX2luZm9fbm9fZGVyZWYodm9pZCAqY3R4KVxuIH1cbiBcbiBTRUMoXCJ0cF9idGYvc2NoZWRfcHJvY2Vzc193YWl0XCIpXG4tX19mYWlsdXJlIF9fbXNnKFwiUjEgaW52YWxpZCBtZW0gYWNjZXNzICd0cnVzdGVkX3B0cl9vcl9udWxsXydcIilcbitfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcbitfX21zZyhcIlIxPXRydXN0ZWRfcHRyX29yX251bGxfcGlkXCIpXG4gaW50IHRlc3RfcmF3X3RwX251bGxfc2NoZWRfcHJvY2Vzc193YWl0X2FyZ18xKHZvaWQgKmN0eClcbiB7XG4gXHRhc20gdm9sYXRpbGUoXCJyMSA9ICoodTY0ICopKHIxICswKTsgcjEgPSAqKHUzMiAqKShyMSArMCk7XCIgOjo6IF9fY2xvYmJlcl9hbGwpO1xuQEAgLTc1LDMgKzg4LDU4IEBAIGludCB0ZXN0X3Jhd190cF9udWxsX3NjaGVkX3Byb2Nlc3Nfd2FpdF9hcmdfMV9jaGVja2VkKHZvaWQgKmN0eClcbiBcdFx0ICAgICBcInIxID0gKih1MzIgKikocjEgKzApO1wiIDo6OiBfX2Nsb2JiZXJfYWxsKTtcbiBcdHJldHVybiAwO1xuIH1cbitcbitTRUMoXCJ0cF9idGYvc2NoZWRfcGlfc2V0cHJpb1wiKVxuK19fZmFpbHVyZSBfX2xvZ19sZXZlbCgyKVxuK19fbXNnKFwiUjE9dW50cnVzdGVkX3B0cl90YXNrX3N0cnVjdFwiKVxuK19fbXNnKFwiUjEgbXVzdCBiZSBhIHJjdSBwb2ludGVyXCIpXG4raW50IEJQRl9QUk9HKHRydXN0ZWRfb3JfbnVsbF93YWxrX2lzX3VudHJ1c3RlZCwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLFxuK1x0ICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBpX3Rhc2spXG4re1xuK1x0c3RydWN0IHRhc2tfc3RydWN0ICpwYXJlbnQsICphY3F1aXJlZDtcbitcbitcdHBhcmVudCA9IHBpX3Rhc2stXHUwMDNlcmVhbF9wYXJlbnQ7XG4rXHRhY3F1aXJlZCA9IGJwZl90YXNrX2FjcXVpcmUocGFyZW50KTtcbitcdGlmIChhY3F1aXJlZClcbitcdFx0YnBmX3Rhc2tfcmVsZWFzZShhY3F1aXJlZCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwidHBfYnRmL3NjaGVkX3BpX3NldHByaW9cIilcbitfX2ZhaWx1cmUgX19tc2coXCJSMSBtdXN0IGJlIGEgcmN1IHBvaW50ZXJcIilcbitpbnQgQlBGX1BST0coZGVyaXZlZF9wdHJfbnVsbF9jaGVja19kb2VzX25vdF9yZXN0b3JlX3RydXN0LFxuK1x0ICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCB0YXNrX3N0cnVjdCAqcGlfdGFzaylcbit7XG4rXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudCwgKmFjcXVpcmVkO1xuK1xuK1x0cGFyZW50ID0gcGlfdGFzay1cdTAwM2VyZWFsX3BhcmVudDtcbitcdGlmICghcGFyZW50KVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGFjcXVpcmVkID0gYnBmX3Rhc2tfYWNxdWlyZShwYXJlbnQpO1xuK1x0aWYgKGFjcXVpcmVkKVxuK1x0XHRicGZfdGFza19yZWxlYXNlKGFjcXVpcmVkKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKlxuKyAqIEluIGNvbnRyYXN0LCBjaGVja2luZyB0aGUgb3JpZ2luYWwgdHJ1c3RlZC1vci1OVUxMIHBvaW50ZXIgcmVtb3Zlc1xuKyAqIFBUUl9NQVlCRV9OVUxMIHdoaWxlIHJldGFpbmluZyBQVFJfVFJVU1RFRC5cbisgKi9cbitTRUMoXCJ0cF9idGYvc2NoZWRfcGlfc2V0cHJpb1wiKVxuK19fc3VjY2Vzc1xuK2ludCBCUEZfUFJPRyhvcmlnaW5hbF9wdHJfbnVsbF9jaGVja19yZXRhaW5zX3RydXN0LFxuK1x0ICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCB0YXNrX3N0cnVjdCAqcGlfdGFzaylcbit7XG4rXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmFjcXVpcmVkO1xuK1xuK1x0aWYgKCFwaV90YXNrKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGFjcXVpcmVkID0gYnBmX3Rhc2tfYWNxdWlyZShwaV90YXNrKTtcbitcdGlmIChhY3F1aXJlZClcbitcdFx0YnBmX3Rhc2tfcmVsZWFzZShhY3F1aXJlZCk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdHBfYnRmX251bGxhYmxlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90cF9idGZfbnVsbGFibGUuY1xuaW5kZXggY2YwNTQ3YTYxM2ZmYy4uYjc5MTQyMjRiYTE5NCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RwX2J0Zl9udWxsYWJsZS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90cF9idGZfbnVsbGFibGUuY1xuQEAgLTcsNyArNyw3IEBAXG4gI2luY2x1ZGUgXCJicGZfbWlzYy5oXCJcbiBcbiBTRUMoXCJ0cF9idGYvYnBmX3Rlc3Rtb2RfdGVzdF9udWxsYWJsZV9iYXJlX3RwXCIpXG4tX19mYWlsdXJlIF9fbXNnKFwiUjEgaW52YWxpZCBtZW0gYWNjZXNzICd0cnVzdGVkX3B0cl9vcl9udWxsXydcIilcbitfX3N1Y2Nlc3NcbiBpbnQgQlBGX1BST0coaGFuZGxlX3RwX2J0Zl9udWxsYWJsZV9iYXJlMSwgc3RydWN0IGJwZl90ZXN0bW9kX3Rlc3RfcmVhZF9jdHggKm51bGxhYmxlX2N0eClcbiB7XG4gXHRyZXR1cm4gbnVsbGFibGVfY3R4LVx1MDAzZWxlbjtcbkBAIC0yMSw0ICsyMSw0NyBAQCBpbnQgQlBGX1BST0coaGFuZGxlX3RwX2J0Zl9udWxsYWJsZV9iYXJlMiwgc3RydWN0IGJwZl90ZXN0bW9kX3Rlc3RfcmVhZF9jdHggKm51bFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK1NFQyhcInRwX2J0Zi9icGZfdGVzdG1vZF90ZXN0X251bGxhYmxlX2JhcmVfdHBcIilcbitfX3N1Y2Nlc3NcbitpbnQgQlBGX1BST0coaGFuZGxlX3RwX2J0Zl9udWxsYWJsZV9tZW0sIHN0cnVjdCBicGZfdGVzdG1vZF90ZXN0X3JlYWRfY3R4ICpudWxsYWJsZV9jdHgpXG4re1xuK1x0cmV0dXJuIG51bGxhYmxlX2N0eC1cdTAwM2VidWZbMF07XG4rfVxuK1xuK1NFQyhcInRwX2J0Zi9icGZfdGVzdG1vZF90ZXN0X251bGxhYmxlX2JhcmVfdHBcIilcbitfX2ZhaWx1cmUgX19tc2coXCJwb2ludGVyIGFyaXRobWV0aWMgb24gdHJ1c3RlZF9wdHJfb3JfbnVsbF8gcHJvaGliaXRlZFwiKVxuK2ludCBCUEZfUFJPRyhoYW5kbGVfdHBfYnRmX251bGxhYmxlX2FyaXRoLCBzdHJ1Y3QgYnBmX3Rlc3Rtb2RfdGVzdF9yZWFkX2N0eCAqbnVsbGFibGVfY3R4KVxuK3tcbitcdGFzbSB2b2xhdGlsZShcIiVbY3R4XSArPSAxXCIgOiBbY3R4XSBcIityXCIobnVsbGFibGVfY3R4KSk7XG4rXHRyZXR1cm4gbnVsbGFibGVfY3R4LVx1MDAzZWxlbjtcbit9XG4rXG4rU0VDKFwidHBfYnRmL2JwZl90ZXN0bW9kX3Rlc3RfbnVsbGFibGVfYmFyZV90cFwiKVxuK19fZmFpbHVyZSBfX21zZyhcImludmFsaWQgbWVtIGFjY2VzcyAndHJ1c3RlZF9wdHJfb3JfbnVsbF8nXCIpXG4raW50IEJQRl9QUk9HKGhhbmRsZV90cF9idGZfbnVsbGFibGVfYXRvbWljX3JtdyxcbitcdCAgICAgc3RydWN0IGJwZl90ZXN0bW9kX3Rlc3RfcmVhZF9jdHggKm51bGxhYmxlX2N0eClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwicjEgPSAlW2N0eF07XCJcbitcdFx0ICAgICAgXCJ3MiA9IDE7XCJcbitcdFx0ICAgICAgXCJsb2NrICoodTMyICopKHIxICsgJVtsZW5dKSArPSB3MjtcIlxuK1x0XHQgICAgICA6XG4rXHRcdCAgICAgIDogW2N0eF0gXCJyXCIobnVsbGFibGVfY3R4KSxcbitcdFx0XHRfX2ltbV9jb25zdChsZW4sXG4rXHRcdFx0XHQgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl90ZXN0bW9kX3Rlc3RfcmVhZF9jdHgsXG4rXHRcdFx0XHRcdCAgICAgbGVuKSlcbitcdFx0ICAgICAgOiBcInIxXCIsIFwicjJcIiwgXCJtZW1vcnlcIik7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rI2lmZGVmIF9fQlBGX0ZFQVRVUkVfTE9BRF9BQ1FfU1RPUkVfUkVMXG4rU0VDKFwidHBfYnRmL2JwZl90ZXN0bW9kX3Rlc3RfbnVsbGFibGVfYmFyZV90cFwiKVxuK19fZmFpbHVyZVxuK19fbXNnKFwiQlBGX0FUT01JQyBsb2FkcyBmcm9tIFJ7e1swLTldK319IHRydXN0ZWRfcHRyX29yX251bGxfXCIpXG4raW50IEJQRl9QUk9HKGhhbmRsZV90cF9idGZfbnVsbGFibGVfbG9hZF9hY3F1aXJlLFxuK1x0ICAgICBzdHJ1Y3QgYnBmX3Rlc3Rtb2RfdGVzdF9yZWFkX2N0eCAqbnVsbGFibGVfY3R4KVxuK3tcbitcdHJldHVybiBfX2F0b21pY19sb2FkX24oXHUwMDI2bnVsbGFibGVfY3R4LVx1MDAzZWxlbiwgX19BVE9NSUNfQUNRVUlSRSk7XG4rfVxuKyNlbmRpZlxuK1xuIGNoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90cF9idGZfbnVsbGFibGVfcnVudGltZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdHBfYnRmX251bGxhYmxlX3J1bnRpbWUuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjVjOWM3Zjk0MDQwZGNcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RwX2J0Zl9udWxsYWJsZV9ydW50aW1lLmNcbkBAIC0wLDAgKzEsMzUgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuK1xuKyNpbmNsdWRlIFwidm1saW51eC5oXCJcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXHUwMDNlXG4rI2luY2x1ZGUgXCIuLi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmhcIlxuK1xuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbitcbitpbnQgbW9uaXRvcmVkX3RpZDtcbitpbnQgY2FsbHM7XG4rX191NjQgbm9ubnVsbF9sZW47XG4rX191NjQgbnVsbF9sZW47XG4rXG4rU0VDKFwidHBfYnRmL2JwZl90ZXN0bW9kX3Rlc3RfbnVsbGFibGVfYmFyZV90cFwiKVxuK2ludCBCUEZfUFJPRyhoYW5kbGVfbnVsbGFibGVfcnVudGltZSxcbitcdCAgICAgc3RydWN0IGJwZl90ZXN0bW9kX3Rlc3RfcmVhZF9jdHggKm51bGxhYmxlX2N0eClcbit7XG4rXHRfX3UzMiB0aWQgPSBicGZfZ2V0X2N1cnJlbnRfcGlkX3RnaWQoKTtcbitcdF9fdTY0IGxlbjtcbitcdGludCBjYWxsO1xuK1xuK1x0aWYgKHRpZCAhPSBtb25pdG9yZWRfdGlkKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGxlbiA9IG51bGxhYmxlX2N0eC1cdTAwM2VsZW47XG4rXHRjYWxsID0gY2FsbHMrKztcbitcbitcdGlmIChjYWxsID09IDApXG4rXHRcdG5vbm51bGxfbGVuID0gbGVuO1xuK1x0ZWxzZSBpZiAoY2FsbCA9PSAxKVxuK1x0XHRudWxsX2xlbiA9IGxlbjtcbitcbitcdHJldHVybiAwO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbHNtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbHNtLmNcbmluZGV4IGM3MjRiZjM4OWY1YzYuLmZhYzEzM2Q5MGY1ZTYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbHNtLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sc20uY1xuQEAgLTE2MiwxMyArMTYyLDEzIEBAIF9fbmFrZWQgaW50IGRpc2FibGVkX2hvb2tfdGVzdDModm9pZCAqY3R4KVxuIFxuIFNFQyhcImxzbS9tbWFwX2ZpbGVcIilcbiBfX2Rlc2NyaXB0aW9uKFwibm90IG51bGwgY2hlY2tpbmcgbnVsbGFibGUgcG9pbnRlciBpbiBicGZfbHNtX21tYXBfZmlsZVwiKVxuLV9fZmFpbHVyZSBfX21zZyhcIlIxIGludmFsaWQgbWVtIGFjY2VzcyAndHJ1c3RlZF9wdHJfb3JfbnVsbF8nXCIpXG4rX19zdWNjZXNzXG4gaW50IEJQRl9QUk9HKG5vX251bGxfY2hlY2ssIHN0cnVjdCBmaWxlICpmaWxlKVxuIHtcbi1cdHN0cnVjdCBpbm9kZSAqaW5vZGU7XG4rXHRpbm9fdCBpbm87XG4gXG4tXHRpbm9kZSA9IGZpbGUtXHUwMDNlZl9pbm9kZTtcbi1cdF9fc2luayhpbm9kZSk7XG4rXHRpbm8gPSBmaWxlLVx1MDAzZWZfaW5vZGUtXHUwMDNlaV9pbm87XG4rXHRfX3NpbmsoaW5vKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0xODgsNiArMTg4LDE2IEBAIGludCBCUEZfUFJPRyhudWxsX2NoZWNrLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcdHJldHVybiAwO1xuIH1cbiBcbitTRUMoXCJsc20vbW1hcF9maWxlXCIpXG4rX19kZXNjcmlwdGlvbihcInN0b3JlIHRocm91Z2ggdHJ1c3RlZC1vci1udWxsIGZpbGUgaXMgcmVqZWN0ZWRcIilcbitfX2ZhaWx1cmVcbitfX21zZyhcIlJ7e1swLTldK319IGludmFsaWQgbWVtIGFjY2VzcyAndHJ1c3RlZF9wdHJfb3JfbnVsbF8nXCIpXG4raW50IEJQRl9QUk9HKHN0b3JlX3Rocm91Z2hfdHJ1c3RlZF9vcl9udWxsX2ZpbGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuK3tcbitcdGZpbGUtXHUwMDNlZl9mbGFncyA9IDA7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gU0VDKFwibHNtX2Nncm91cC9maWxlX29wZW5cIilcbiBfX2Rlc2NyaXB0aW9uKFwic2xlZXBhYmxlIGxzbV9jZ3JvdXAgcHJvZ3JhbSBpcyByZWplY3RlZFwiKVxuIF9fZmFpbHVyZSBfX21zZyhcIlByb2dyYW0gb2YgdGhpcyB0eXBlIGNhbm5vdCBiZSBzbGVlcGFibGVcIilcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdmZzX2FjY2VwdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3Zmc19hY2NlcHQuY1xuaW5kZXggNTUzOThjMDQyOTBhOC4uMTdjMTU0MmNjN2UxNyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl92ZnNfYWNjZXB0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl92ZnNfYWNjZXB0LmNcbkBAIC0xMDAsNCArMTAwLDE4IEBAIGludCBCUEZfUFJPRyhpbm9kZV9yZW5hbWUsIHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbitTRUMoXCJsc20ucy9pbm9kZV9yZW5hbWVcIilcbitfX3N1Y2Nlc3MgX19sb2dfbGV2ZWwoMilcbitfX21zZyhcIlJ7e1swLTldK319PXRydXN0ZWRfcHRyX29yX251bGxfaW5vZGVcIilcbitpbnQgQlBGX1BST0coaW5vZGVfcmVuYW1lX25vX251bGxfY2hlY2ssIHN0cnVjdCBpbm9kZSAqb2xkX2RpcixcbitcdCAgICAgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpuZXdfZGlyLFxuK1x0ICAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5LCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4re1xuK1x0aW5vX3QgaW5vID0gbmV3X2RlbnRyeS1cdTAwM2VkX2lub2RlLVx1MDAzZWlfaW5vO1xuK1xuK1x0aWYgKGlubyA9PSAwKVxuK1x0XHRyZXR1cm4gLUVBQ0NFUztcbitcdHJldHVybiAwO1xuK31cbitcbiBjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3Zmc19yZWplY3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl92ZnNfcmVqZWN0LmNcbmluZGV4IDhmMGM0NTQyMWY4OTMuLjJhMDgxMzI1ODE4M2UgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdmZzX3JlamVjdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdmZzX3JlamVjdC5jXG5AQCAtMTU5LDE4ICsxNTksNCBAQCBpbnQgQlBGX1BST0cocGF0aF9kX3BhdGhfa2Z1bmNfbm9uX2xzbSwgc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBmaWxlICpmKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLVNFQyhcImxzbS5zL2lub2RlX3JlbmFtZVwiKVxuLV9fZmFpbHVyZSBfX21zZyhcImludmFsaWQgbWVtIGFjY2VzcyAndHJ1c3RlZF9wdHJfb3JfbnVsbF8nXCIpXG4taW50IEJQRl9QUk9HKGlub2RlX3JlbmFtZSwgc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxuLVx0ICAgICBzdHJ1Y3QgaW5vZGUgKm5ld19kaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnksXG4tXHQgICAgIHVuc2lnbmVkIGludCBmbGFncylcbi17XG4tXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbmV3X2RlbnRyeS1cdTAwM2VkX2lub2RlO1xuLVx0aW5vX3QgaW5vO1xuLVxuLVx0aW5vID0gaW5vZGUtXHUwMDNlaV9pbm87XG4tXHRpZiAoaW5vID09IDApXG4tXHRcdHJldHVybiAtRUFDQ0VTO1xuLVx0cmV0dXJuIDA7XG4tfVxuIGNoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuY1xuaW5kZXggZjc5OGJiYmI0ZDEzYy4uMmJhNmE4M2QyNDNmNSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcbkBAIC03MDIsNiArNzAyLDcgQEAgYnBmX3Rlc3Rtb2RfdGVzdF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qga29iamVjdCAqa29iaixcbiBcdGlmIChicGZfdGVzdG1vZF9sb29wX3Rlc3QoMTAxKSBcdTAwM2UgMTAwKVxuIFx0XHR0cmFjZV9icGZfdGVzdG1vZF90ZXN0X3JlYWQoY3VycmVudCwgXHUwMDI2Y3R4KTtcbiBcbitcdHRyYWNlX2JwZl90ZXN0bW9kX3Rlc3RfbnVsbGFibGVfYmFyZV90cChcdTAwMjZjdHgpO1xuIFx0dHJhY2VfYnBmX3Rlc3Rtb2RfdGVzdF9udWxsYWJsZV9iYXJlX3RwKE5VTEwpO1xuIFxuIFx0LyogTWFnaWMgbnVtYmVyIHRvIGVuYWJsZSB3cml0YWJsZSB0cCAqL1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NjaGVkX2V4dC9tYXliZV9udWxsX2ZhaWxfZHNwLmJwZi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2NoZWRfZXh0L21heWJlX251bGxfZmFpbF9kc3AuYnBmLmNcbmluZGV4IGVjNzI0ZDdiMzNkMTguLmVjYWEzNjM1NWNhZWMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zY2hlZF9leHQvbWF5YmVfbnVsbF9mYWlsX2RzcC5icGYuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2NoZWRfZXh0L21heWJlX251bGxfZmFpbF9kc3AuYnBmLmNcbkBAIC03LDE0ICs3LDEzIEBAXG4gXG4gY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuIFxuLXU2NCB2dGltZV90ZXN0O1xuLVxuIHZvaWQgQlBGX1NUUlVDVF9PUFMobWF5YmVfbnVsbF9ydW5uaW5nLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4ge31cbiBcbiB2b2lkIEJQRl9TVFJVQ1RfT1BTKG1heWJlX251bGxfZmFpbF9kaXNwYXRjaCwgczMyIGNwdSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuIHtcbi1cdHZ0aW1lX3Rlc3QgPSBwLVx1MDAzZXNjeC5kc3FfdnRpbWU7XG4rXHQvKiBQb2ludGVyIGFyaXRobWV0aWMgb24gYSB0cnVzdGVkLW9yLU5VTEwgcG9pbnRlciBtdXN0IGJlIHJlamVjdGVkLiAqL1xuK1x0YXNtIHZvbGF0aWxlKFwiJVtwXSArPSAwXCIgOiBbcF0gXCIrclwiKHApKTtcbiB9XG4gXG4gU0VDKFwiLnN0cnVjdF9vcHMubGlua1wiKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjA6MjE6MzcuMjM3MjYzOTU2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjgzMTc4MjIxNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBTZXJpZXMgZm9yIEtNU0FOIE5lZWRzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIHNlcmllcyBuZWNlc3NpdGF0ZXMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLCBiZXlvbmQgdGhlIHN0YW5kYXJkIEtBU0FOIGNvdmVyYWdlIHdlIGFscmVhZHkgaGF2ZS4gV2UgbmVlZCB0byBiZSBvbiB0aGUgbG9va291dCBmb3IgY29kZSBjaGFuZ2VzIHRoYXQgKmludHJvZHVjZSogb3IgKmV4cG9zZSogdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHRoZSBraW5kIG9mIGlzc3VlcyBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gY2F0Y2guXG5cbkZpcnN0LCBJJ20gZm9jdXNpbmcgb24gdGhlIGNoYW5nZXMuXG5cbjEuICBgZnMvZXhlYy5jYDogVGhpcyBjaGFuZ2UsIHNldHRpbmcgYGJwcm0tXHUwMDNlbW0gPSBOVUxMYCwgaXMgYSBtZW1vcnkgbWFuYWdlbWVudCBsaWZlY3ljbGUgY2hhbmdlLiBJdCdzIGFib3V0IHByZXZlbnRpbmcgVUFGIGFuZCBkYW5nbGluZyBwb2ludGVyIHByb2JsZW1zLiBUaGlzIHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHByZWNhdXRpb247IGhvd2V2ZXIsIGl0J3MgYWJvdXQgbWFraW5nIGNvZGUgc2FmZSBub3QgYWJvdXQgaW50cm9kdWNpbmcgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBJIGRvbid0IHNlZSBhbnl0aGluZyBoZXJlIHRoYXQgc2NyZWFtcyBmb3IgS01TQU4gYXR0ZW50aW9uLlxuXG4yLiAgYGluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhgLCBga2VybmVsL2JwZi92ZXJpZmllci5jYDogVGhpcyBpcyB0aGUgaW50ZXJlc3Rpbmcgc2VjdGlvbi4gV2UncmUgZ2V0dGluZyBhIGJ1bmNoIG9mIHVwZGF0ZXMgcmVsYXRlZCB0byBCUEYgYW5kIGBCVEZgLiBXZSdyZSBlbmFibGluZyBzYWZlIGRlcmVmZXJlbmNpbmcgYW5kIGFsbG93aW5nIEJQRiB0byBzYWZlbHkgYWNjZXNzIGBicHJtLVx1MDAzZW1tYC4gVGhlIGFkZGl0aW9uIG9mIGBicGZfaXNfdHJ1c3RlZF9vcl9udWxsX2J0Zl9wdHJgIGFuZCBhbGxvd2luZyBmYXVsdC1wcm90ZWN0ZWQgZGVyZWZlcmVuY2VzIHNvdW5kcyBsaWtlIGl0IGNvdWxkIHBvdGVudGlhbGx5IGludHJvZHVjZSBzdWJ0bGUgaXNzdWVzLiBUaGUgYFBUUl9VTlRSVVNURURgIG1hcmtpbmcgaXMgaW50ZXJlc3RpbmcuIFdoaWxlIHRoaXMgc2VjdGlvbiBkZWFscyB3aXRoIHBvdGVudGlhbGx5IGFjY2Vzc2luZyBtZW1vcnksIGl0J3MgcHJpbWFyaWx5IGFib3V0ICpjb250cm9sbGluZyogYWNjZXNzLiBUaGUgZ29hbCBhcHBlYXJzIHRvIGJlICpwcmV2ZW50aW9uKiBvZiBiYWQgdGhpbmdzIGhhcHBlbmluZywgbm90IHRoZSAqaW50cm9kdWN0aW9uKiBvZiB1bmluaXRpYWxpemVkIHJlYWQgcmlza3MuIFRoZSBjaGFuZ2VzIGFyZSBkZXNpZ25lZCB0byBwcm90ZWN0IGFnYWluc3QgZmF1bHRpbmcgYW5kIGRlcmVmZXJlbmNpbmcgbnVsbCBwb2ludGVycy4gV2UncmUgbWFraW5nIHRoaW5ncyAqc2FmZXIqLCBub3QgbmVjZXNzYXJpbHkgcmlza2llciBmcm9tIGEgS01TQU4gcGVyc3BlY3RpdmUuIFdlIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoaXMgYmVjYXVzZSB0aGUgYFBUUl9VTlRSVVNURURgIG1pZ2h0IGhhdmUgdW5pbml0aWFsaXplZCByZWFkLlxuXG4zLiAgYGtlcm5lbC9icGYvaGVscGVycy5jYDogTm93IHdlJ3JlIGdldHRpbmcgdG8gdGhlIGhlYXJ0IG9mIG1lbW9yeSBjb3B5aW5nOiBgYnBmX2NvcHlfZnJvbV91c2VyX21tYCBhbmQgaXRzIHN0cmluZyB2YXJpYW50LCBgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cmAuIEl0IHJlZmFjdG9ycyBgYnBmX2NvcHlfZnJvbV91c2VyX3Rhc2tgIHRvIHVzZSB0aGUgbmV3IGhlbHBlciwgYW5kIHJlZ2lzdGVycyBrZnVuY3MuIFRoaXMgaXMgYSBwb3RlbnRpYWwgS01TQU4gdGFyZ2V0LiBXZSBoYXZlIGBkc3RgIG1lbW9yeSB0aGF0IHdlJ3JlIGNvcHlpbmcgKmludG8qLiBUaGUgbG9naWMgaW5jbHVkZXMgY2hlY2tzIGZvciBhIG51bGwgYG1tYCwgYW5kIHNldHMgZHN0IHRvIHplcm8uIFNvIHRoZXJlIGlzIGEgcG9zc2liaWxpdHkgdGhhdCBkc3QgaXMgdW5pbml0aWFsaXplZC4gVGhlIGNoZWNrcyBmb3IgYW4gYCFtbWAgbG9vayBwcm9taXNpbmcsIGJ1dCBuZWVkIGNvbmZpcm1hdGlvbi4gSWYgd2UgZG9uJ3QgaGF2ZSBhIHZhbGlkIGBtbWAgaXQgc2V0cyBkc3QgdG8gemVyby4gVGhpcyBsb29rcyBsaWtlIGEgcmVhc29uYWJsZSBwcmVjYXV0aW9uLCBob3dldmVyLCBpZiBgbW1gICppcyogdmFsaWQsIGl0J3Mgd29ydGggY2hlY2tpbmcgYGFjY2Vzc19yZW1vdGVfdm1gLCB3aGljaCBpcyBhbiBpc3N1ZS4gV2l0aCB0aGUgYGNvcHlfcmVtb3RlX21tX3N0cmAgZnVuY3Rpb24sIHRoZXJlIGFyZSBjYXNlcyB3aGVyZSB0aGUgZGVzdGluYXRpb24gKm1pZ2h0KiBiZSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQuIEl0IHNlZW1zIGxpa2UgaXQncyB0YWtpbmcgZXh0cmEgc3RlcHMgdG8gZW5zdXJlIHRoaXMgaXMgaGFuZGxlZC4gV2l0aCBgQlBGX0ZfUEFEX1pFUk9TYCB3ZSBjYW4gYmUgc2V0dGluZyB0aGUgbWVtb3J5IHRvIHplcm8uIE5lZWQgdG8gZXhhbWluZSBgYWNjZXNzX3JlbW90ZV92bWAgYW5kIGBjb3B5X3JlbW90ZV9tbV9zdHJgIHRvIHZlcmlmeSB0aGVzZSBhc3N1bXB0aW9ucy5cblxuNC4gIGBtbS9tZW1vcnkuY2AsIGBtbS9ub21tdS5jYCwgYG1tL3V0aWwuY2AsIGBtbS9pbnRlcm5hbC5oYCwgYGluY2x1ZGUvbGludXgvbW0uaGA6IFRoaXMgaXMgbW9zdGx5IHJlZmFjdG9yaW5nIHRoZSByZW1vdGUgbWVtb3J5IGNvcHkgZnVuY3Rpb25zLCByZW5hbWluZyBhbmQgYWRkaW5nIHdyYXBwZXJzLiBUaGUga2V5IGZ1bmN0aW9uIHRvIGxvb2sgYXQgaGVyZSBpcyBgX19jb3B5X3JlbW90ZV9tbV9zdHJgIGFuZCBgY29weV9yZW1vdGVfbW1fc3RyYC4gVGhpcyBpcyB3aGVyZSB0aGUgYWN0dWFsIG1lbW9yeSBjb3B5aW5nIGhhcHBlbnMuIFdlIG5lZWQgdG8gZXhhbWluZSB0aGlzIGNvZGUgdG8gc2VlIGlmIHRoZXJlIGlzIGFueSB3aW5kb3cgaW4gd2hpY2ggdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciBpc24ndCBwcm9wZXJseSBpbml0aWFsaXplZC4gSWYgdGhlcmUncyBhIHBhcnRpYWwgcmVhZCBvciBOVUwtdGVybWluYXRpb24gaXNzdWUgd2UgbmVlZCB0byBiZSB2ZXJ5IGNvbmNlcm5lZC5cblxuNS4gIFNlbGZ0ZXN0czogR3JlYXQsIHRoZXkgYWRkZWQgdGVzdHMhIEhvd2V2ZXIsIHRlc3RpbmcgaXMgbm90IGVub3VnaC5cblxuSW4gc3VtbWFyeSwgSSBzZWUgdGhlIGdyZWF0ZXN0IHBvdGVudGlhbCBmb3IgS01TQU4gZXhwb3N1cmUgaW4gdGhlIGBicGZfY29weV9mcm9tX3VzZXJfbW1gIGZ1bmN0aW9ucyBhbmQgdGhlaXIgc3RyaW5nIHZhcmlhbnQuIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBfX2NvcHlfcmVtb3RlX21tX3N0cmAsIGBjb3B5X3JlbW90ZV9tbV9zdHJgLCBhbmQgdGhlIGNhbGxzIHdpdGhpbiB0aGUgbmV3IGhlbHBlciBmdW5jdGlvbnMgdG8gbWFrZSBhIGRlZmluaXRpdmUgZGV0ZXJtaW5hdGlvbi4gSSBhbHNvIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYWxsIG1lbW9yeSBpcyBpbml0aWFsaXplZCBhcHByb3ByaWF0ZWx5IGluIGBCUEZfRl9QQURfWkVST1NgLiBXaGlsZSB0aGUgaW50ZW50aW9uIHNlZW1zIHRvIGJlIHNhZmUsIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgY29kZSBpcyAqcHJvdmFibHkqIHNhZmUgZnJvbSB1bmluaXRpYWxpemVkIHJlYWQgcmlza3MuIFRoZSBCUEYgY2hhbmdlcyByZXF1aXJlIHRob3JvdWdoIGluc3BlY3Rpb24gcmVnYXJkaW5nIHRoZSB1c2Ugb2YgYFBUUl9VTlRSVVNURURgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzIwNiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyODIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDoyMTo0NS41NTUwOTE5MzlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxMTcyMzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fY29weV9yZW1vdGVfbW1fc3RyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9pbnRlcm5hbC5oPTI2PXN0cnVjdCBoc3RhdGU7XFxuLS1cXG5tbS9pbnRlcm5hbC5oLTI4LSNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5tbS9pbnRlcm5hbC5oOjI5OmludCBfX2NvcHlfcmVtb3RlX21tX3N0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbm1tL2ludGVybmFsLmgtMzAtXFx0XFx0XFx0IHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncyk7XFxuLS1cXG5tbS9tZW1vcnkuYz03MzI3PUVYUE9SVF9TWU1CT0xfR1BMKGFjY2Vzc19wcm9jZXNzX3ZtKTtcXG4tLVxcbm1tL21lbW9yeS5jLTczMzMtICovXFxubW0vbWVtb3J5LmM6NzMzNDppbnQgX19jb3B5X3JlbW90ZV9tbV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5tbS9tZW1vcnkuYy03MzM1LVxcdFxcdFxcdCB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXFxuLS1cXG5tbS9ub21tdS5jPTE3NDI9RVhQT1JUX1NZTUJPTF9HUEwoYWNjZXNzX3Byb2Nlc3Nfdm0pO1xcbi0tXFxubW0vbm9tbXUuYy0xNzQ4LSAqL1xcbm1tL25vbW11LmM6MTc0OTppbnQgX19jb3B5X3JlbW90ZV9tbV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5tbS9ub21tdS5jLTE3NTAtXFx0XFx0XFx0IHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncylcXG4tLVxcbm1tL3V0aWwuYz0xMDgwPWludCBjb3B5X3JlbW90ZV9tbV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL3V0aWwuYy0xMDg1LVxcbm1tL3V0aWwuYzoxMDg2OlxcdHJldHVybiBfX2NvcHlfcmVtb3RlX21tX3N0cihtbSwgYWRkciwgYnVmLCBsZW4sIGd1cF9mbGFncyk7XFxubW0vdXRpbC5jLTEwODctfVxcbi0tXFxubW0vdXRpbC5jPTExMDI9aW50IGNvcHlfcmVtb3RlX3ZtX3N0cihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vdXRpbC5jLTExMTYtXFxubW0vdXRpbC5jOjExMTc6XFx0cmV0ID0gX19jb3B5X3JlbW90ZV9tbV9zdHIobW0sIGFkZHIsIGJ1ZiwgbGVuLCBndXBfZmxhZ3MpO1xcbm1tL3V0aWwuYy0xMTE4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDoyMTo0NS42NDYyNzc3MDhaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA0Mjg5NjQ1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBfX2NvcHlfcmVtb3RlX21tX3N0cmAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBfX2NvcHlfcmVtb3RlX21tX3N0cmAgaXMgZG9pbmcuIEdpdmVuIG15IGRlZXAga25vd2xlZGdlIG9mIG1lbW9yeSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUga2VybmVsLCBJIGltbWVkaWF0ZWx5IHRoaW5rLCBcIkxldCdzIGNyYWNrIG9wZW4gYG1tL21lbW9yeS5jYC5cIiBJdCdzIGxpa2VseSBpbiB0aGF0IGZpbGUsIGFuZCBhIGdvb2QgYmV0IGlzIGFyb3VuZCBsaW5lIDczMzQuIFRoYXQncyBhIHJlYXNvbmFibGUgc3RhcnRpbmcgcG9pbnQsIGdpdmVuIG15IGV4cGVyaWVuY2Ugd2l0aCB0aGVzZSBraW5kcyBvZiBmdW5jdGlvbnMgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlLiBJIGZpZ3VyZSBJJ2xsIHN0YXJ0IHRoZXJlIGFuZCBzZWUgd2hhdCBqdW1wcyBvdXQuIEknbSBub3QgZXhwZWN0aW5nIGEgcXVpY2sgYW5zd2VyIC0gdGhlc2UgdGhpbmdzIGFsd2F5cyB0YWtlIGEgYml0IG9mIGRpZ2dpbmcgdG8gZnVsbHkgZ3Jhc3AgdGhlIG51YW5jZXMuIExldCdzIHNlZSB3aGF0IHRoZSBjb2RlIGFjdHVhbGx5ICpzYXlzKi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAwMDYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDoyMTo0Ny42ODkxNzk4OTdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc2MzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbW9yeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDczMzAsXG4gIFwiTGluZUNvdW50XCI6IDg1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjczMzA6XFx0LypcXG43MzMxOlxcdCAqIENvcHkgYSBzdHJpbmcgZnJvbSBhbm90aGVyIHByb2Nlc3MncyBhZGRyZXNzIHNwYWNlIGFzIGdpdmVuIGluIG1tLlxcbjczMzI6XFx0ICogSWYgdGhlcmUgaXMgYW55IGVycm9yIHJldHVybiAtRUZBVUxULlxcbjczMzM6XFx0ICovXFxuNzMzNDpcXHRpbnQgX19jb3B5X3JlbW90ZV9tbV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG43MzM1OlxcdFxcdFxcdFxcdCB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXFxuNzMzNjpcXHR7XFxuNzMzNzpcXHRcXHR2b2lkICpvbGRfYnVmID0gYnVmO1xcbjczMzg6XFx0XFx0aW50IGVyciA9IDA7XFxuNzMzOTpcXHRcXG43MzQwOlxcdFxcdCooY2hhciAqKWJ1ZiA9ICdcXFxcMCc7XFxuNzM0MTpcXHRcXG43MzQyOlxcdFxcdGlmIChtbWFwX3JlYWRfbG9ja19raWxsYWJsZShtbSkpXFxuNzM0MzpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG43MzQ0OlxcdFxcbjczNDU6XFx0XFx0YWRkciA9IHVudGFnZ2VkX2FkZHJfcmVtb3RlKG1tLCBhZGRyKTtcXG43MzQ2OlxcdFxcbjczNDc6XFx0XFx0LyogQXZvaWQgdHJpZ2dlcmluZyB0aGUgdGVtcG9yYXJ5IHdhcm5pbmcgaW4gX19nZXRfdXNlcl9wYWdlcyAqL1xcbjczNDg6XFx0XFx0aWYgKCF2bWFfbG9va3VwKG1tLCBhZGRyKSkge1xcbjczNDk6XFx0XFx0XFx0ZXJyID0gLUVGQVVMVDtcXG43MzUwOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjczNTE6XFx0XFx0fVxcbjczNTI6XFx0XFxuNzM1MzpcXHRcXHR3aGlsZSAobGVuKSB7XFxuNzM1NDpcXHRcXHRcXHRpbnQgYnl0ZXMsIG9mZnNldCwgcmV0dmFsO1xcbjczNTU6XFx0XFx0XFx0dm9pZCAqbWFkZHI7XFxuNzM1NjpcXHRcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbjczNTc6XFx0XFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuNzM1ODpcXHRcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IE5VTEw7XFxuNzM1OTpcXHRcXG43MzYwOlxcdFxcdFxcdHBhZ2UgPSBnZXRfdXNlcl9wYWdlX3ZtYV9yZW1vdGUobW0sIGFkZHIsIGd1cF9mbGFncywgXFx1MDAyNnZtYSk7XFxuNzM2MTpcXHRcXHRcXHRpZiAoSVNfRVJSKHBhZ2UpKSB7XFxuNzM2MjpcXHRcXHRcXHRcXHQvKlxcbjczNjM6XFx0XFx0XFx0XFx0ICogVHJlYXQgYXMgYSB0b3RhbCBmYWlsdXJlIGZvciBub3cgdW50aWwgd2UgZGVjaWRlIGhvd1xcbjczNjQ6XFx0XFx0XFx0XFx0ICogdG8gaGFuZGxlIHRoZSBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1QgY2FzZSBhbmRcXG43MzY1OlxcdFxcdFxcdFxcdCAqIHN0YWNrIGV4cGFuc2lvbi5cXG43MzY2OlxcdFxcdFxcdFxcdCAqL1xcbjczNjc6XFx0XFx0XFx0XFx0KihjaGFyICopYnVmID0gJ1xcXFwwJztcXG43MzY4OlxcdFxcdFxcdFxcdGVyciA9IC1FRkFVTFQ7XFxuNzM2OTpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG43MzcwOlxcdFxcdFxcdH1cXG43MzcxOlxcdFxcbjczNzI6XFx0XFx0XFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xcbjczNzM6XFx0XFx0XFx0Ynl0ZXMgPSBsZW47XFxuNzM3NDpcXHRcXHRcXHRvZmZzZXQgPSBhZGRyIFxcdTAwMjYgKFBBR0VfU0laRSAtIDEpO1xcbjczNzU6XFx0XFx0XFx0aWYgKGJ5dGVzIFxcdTAwM2UgUEFHRV9TSVpFIC0gb2Zmc2V0KVxcbjczNzY6XFx0XFx0XFx0XFx0Ynl0ZXMgPSBQQUdFX1NJWkUgLSBvZmZzZXQ7XFxuNzM3NzpcXHRcXG43Mzc4OlxcdFxcdFxcdG1hZGRyID0ga21hcF9sb2NhbF9mb2xpbyhmb2xpbywgZm9saW9fcGFnZV9pZHgoZm9saW8sIHBhZ2UpICogUEFHRV9TSVpFKTtcXG43Mzc5OlxcdFxcdFxcdHJldHZhbCA9IHN0cnNjcHkoYnVmLCBtYWRkciArIG9mZnNldCwgYnl0ZXMpO1xcbjczODA6XFx0XFx0XFx0aWYgKHJldHZhbCBcXHUwMDNlPSAwKSB7XFxuNzM4MTpcXHRcXHRcXHRcXHQvKiBGb3VuZCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcgKi9cXG43MzgyOlxcdFxcdFxcdFxcdGJ1ZiArPSByZXR2YWw7XFxuNzM4MzpcXHRcXHRcXHRcXHRmb2xpb19yZWxlYXNlX2ttYXAoZm9saW8sIG1hZGRyKTtcXG43Mzg0OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjczODU6XFx0XFx0XFx0fVxcbjczODY6XFx0XFxuNzM4NzpcXHRcXHRcXHRidWYgKz0gYnl0ZXMgLSAxO1xcbjczODg6XFx0XFx0XFx0LypcXG43Mzg5OlxcdFxcdFxcdCAqIEJlY2F1c2Ugc3Ryc2NweSBhbHdheXMgTlVMIHRlcm1pbmF0ZXMgd2UgbmVlZCB0b1xcbjczOTA6XFx0XFx0XFx0ICogY29weSB0aGUgbGFzdCBieXRlIGluIHRoZSBwYWdlIGlmIHdlIGFyZSBnb2luZyB0b1xcbjczOTE6XFx0XFx0XFx0ICogbG9hZCBtb3JlIHBhZ2VzXFxuNzM5MjpcXHRcXHRcXHQgKi9cXG43MzkzOlxcdFxcdFxcdGlmIChieXRlcyAhPSBsZW4pIHtcXG43Mzk0OlxcdFxcdFxcdFxcdGFkZHIgKz0gYnl0ZXMgLSAxO1xcbjczOTU6XFx0XFx0XFx0XFx0Y29weV9mcm9tX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIGFkZHIsIGJ1ZiwgbWFkZHIgKyAoUEFHRV9TSVpFIC0gMSksIDEpO1xcbjczOTY6XFx0XFx0XFx0XFx0YnVmICs9IDE7XFxuNzM5NzpcXHRcXHRcXHRcXHRhZGRyICs9IDE7XFxuNzM5ODpcXHRcXHRcXHR9XFxuNzM5OTpcXHRcXHRcXHRsZW4gLT0gYnl0ZXM7XFxuNzQwMDpcXHRcXG43NDAxOlxcdFxcdFxcdGZvbGlvX3JlbGVhc2Vfa21hcChmb2xpbywgbWFkZHIpO1xcbjc0MDI6XFx0XFx0fVxcbjc0MDM6XFx0XFxuNzQwNDpcXHRvdXQ6XFxuNzQwNTpcXHRcXHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcXG43NDA2OlxcdFxcdGlmIChlcnIpXFxuNzQwNzpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjc0MDg6XFx0XFx0cmV0dXJuIGJ1ZiAtIG9sZF9idWY7XFxuNzQwOTpcXHR9XFxuNzQxMDpcXHQjZW5kaWYgLyogQ09ORklHX0JQRl9TWVNDQUxMICovXFxuNzQxMTpcXHRcXG43NDEyOlxcdC8qXFxuNzQxMzpcXHQgKiBQcmludCB0aGUgbmFtZSBvZiBhIFZNQS5cXG43NDE0OlxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDoyMTo0Ny42ODk4NjAxMTdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTExNjEwMTU2MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIFByb3Bvc2VkIEtlcm5lbCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBtZXRpY3Vsb3VzbHkuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggcHJpbWFyaWx5IGZvY3VzZXMgb24gcmVmYWN0b3JpbmcgYW5kIHRpZ2h0ZW5pbmcgdXAgc29tZSBCUEYgZnVuY3Rpb25hbGl0eSB3aXRoIGEgZm9jdXMgb24gc2FmZXR5IGFuZCBjb3JyZWN0bmVzcywgcmF0aGVyIHRoYW4gaW50cm9kdWNpbmcgYW55IG5vdmVsIG1lbW9yeSBpbml0aWFsaXphdGlvbiBpc3N1ZXMuIExldCdzIGRlbHZlIGludG8gdGhlIGRldGFpbHMuXG5cblRoZSBmaXJzdCBwb2ludCB0byBjb25zaWRlciBpcyB0aGUgcmVmYWN0b3Jpbmcgb2YgdGhlIEJQRiBoZWxwZXJzIHVzZWQgZm9yIGNvcHlpbmcgZGF0YSBmcm9tIHVzZXIgc3BhY2UuIFNwZWNpZmljYWxseSwgYGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrYCBhbmQgYGJwZl9jb3B5X2Zyb21fdXNlcl90YXNrX3N0cmAgYXJlIGJlaW5nIHJldmFtcGVkIHRvIHVzZSBgYnBmX2NvcHlfZnJvbV91c2VyX21tYCBhbmQgYGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHJgIHJlc3BlY3RpdmVseSwgd2hpY2ggb3BlcmF0ZSBkaXJlY3RseSBvbiBgc3RydWN0IG1tX3N0cnVjdCAqYC4gVGhpcyBpcyBhIGNsZWFyIGltcHJvdmVtZW50IGluIHRlcm1zIG9mIGNvZGUgb3JnYW5pemF0aW9uIGFuZCByZXVzYWJpbGl0eSwgYWxsb3dpbmcgZnVuY3Rpb25zIGxpa2UgYGNvcHlfcmVtb3RlX21tX3N0cmAgKHdoaWNoIGhhbmRsZXMgdGhlIGFjdHVhbCBtZW1vcnkgdHJhbnNmZXIpIHRvIGJlIHVzZWQgd2l0aCBkaWZmZXJlbnQgbWVtb3J5IHNwYWNlcy4gSW1wb3J0YW50bHksIHRoZSBkZXNpZ24gb2YgdGhlc2Uga2Z1bmNzLCBwYXJ0aWN1bGFybHkgcmVnYXJkaW5nIGBkc3RgLCBpcyB3ZWxsLXVuZGVyc3Rvb2Q6IG1lbW9yeSBmb3IgYGRzdGAgaXMgZWl0aGVyIHplcm9lZCBvbiBmYWlsdXJlIG9yIGluaXRpYWxpemVkIHVzaW5nIGhlbHBlcnMgbGlrZSBgYWNjZXNzX3JlbW90ZV92bWAgb3IgYGNvcHlfcmVtb3RlX21tX3N0cmAuIFRoZSBleGlzdGluZyBsb2dpYyBmb3IgemVyb2luZyBvdXQgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciBvbiBmYWlsdXJlL3BhcnRpYWwgY29weSByZW1haW5zIGludGFjdCwgd2hpY2ggaXMgY3JpdGljYWwuIFRoZSBjb25jZXJuIGhlcmUgaXMgbm90IGludHJvZHVjaW5nIGEgY2FzZSBvZiByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgZGF0YS5cblxuVGhlIGBmcmVlX2Jwcm1gIGNoYW5nZSwgd2hlcmUgYGJwcm0tXHUwMDNlbW1gIGlzIGV4cGxpY2l0bHkgc2V0IHRvIGBOVUxMYCAqYmVmb3JlKiBgbW1wdXQobW0pYCBpcyBjYWxsZWQsIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGFuZCBjb3JyZWN0IGFwcHJvYWNoIHRvIGF2b2lkIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSAoVUFGKSBzY2VuYXJpb3MuIFRoaXMgZXhwbGljaXRseSBudWxsaWZpZXMgdGhlIHBvaW50ZXIgYWZ0ZXIgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IG9wZXJhdGlvbi4gS0FTQU4gd291bGQgYmUgdGhlIHRvb2wgdG8gZGV0ZWN0IGFueSBpc3N1ZXMgcmVsYXRlZCB0byB0aGlzIHBvaW50ZXIuXG5cblRoZSB2ZXJpZmllciBjaGFuZ2VzIGFyZSBhbHNvIGNydWNpYWwuIFRoZSBwYXRjaCBpcyBhbGxvd2luZyB0aGUgQlBGIHByb2dyYW1zIHRvIHJlYWQgdHJ1c3RlZC1vci1udWxsIHBvaW50ZXJzLCBwcm90ZWN0ZWQgYnkgZmF1bHQtc2FmZSBvcGVyYXRpb25zLiBUaGlzIG1lY2hhbmlzbSB0cmFuc2Zvcm1zIHBvaW50ZXIgbG9hZHMgaW50byBwcm9iZSByZWFkcywgYW5kIG1hcmtzIHRoZSByZXRyaWV2ZWQgcG9pbnRlciBhcyB1bnRydXN0ZWQsIHdoaWNoIGlzIGVzc2VudGlhbCBmb3IgZW5zdXJpbmcgdGhhdCBCUEYgcHJvZ3JhbXMgY2Fubm90IGRpcmVjdGx5IGRlcmVmZXJlbmNlIGFyYml0cmFyeSB1c2VyLXByb3ZpZGVkIGFkZHJlc3Nlcy4gVGhpcyBhbHNvIGV4dGVuZHMgdG8gdHJlYXRpbmcgYGJwcm0tXHUwMDNlbW1gIGFzIHRydXN0ZWQtb3ItbnVsbC4gVGhpcyBpcyBhbGwgYWJvdXQgZW5oYW5jaW5nIHRoZSBzYWZldHkgb2YgdGhlIEJQRiBlbnZpcm9ubWVudC4gSXTigJlzIGFib3V0IHZlcmlmeWluZyB3aGF0IGNhbiBiZSBhY2Nlc3NlZCB2aWEgQlBGLlxuXG5Ob3csIGNvbmNlcm5pbmcgS01TQU4sIG15IGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIHNob3VsZCAqbm90KiBpbnRyb2R1Y2UgS01TQU4tcmVsZXZhbnQgaXNzdWVzLiBUaGUgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHRoYXQgY291bGQgYmUgcGFydGlhbGx5IGluaXRpYWxpemVkIG9yIG5ldyBpbnN0YW5jZXMgd2hlcmUga2VybmVsIGRhdGEgY291bGQgYmUgbGVha2VkIHRvIHVzZXIgc3BhY2UgdmlhIGNvcGllcy4gVGhlIG1lbW9yeSBoYW5kbGluZyB3aXRoaW4gdGhlIEJQRiBmdW5jdGlvbnMgaXMgYWxyZWFkeSByb2J1c3QgYW5kIHdlbGwtZGVmaW5lZCwgd2l0aCB6ZXJvaW5nIG9uIGZhaWx1cmUgb3IgcGFkZGluZyBmbGFncy4gVGhlIHBvaW50ZXIgbWFuaXB1bGF0aW9uIGZvY3VzZXMgb24gdmFsaWRpdHkgYW5kIGZhdWx0IHRvbGVyYW5jZSwgbm90IGludHJvZHVjaW5nIG1lbW9yeSBpbml0aWFsaXphdGlvbiBmbGF3cy4gS0FTQU4gYW5kIHRoZSB2ZXJpZmllciB3aWxsIGhhbmRsZSBhbnkgcG90ZW50aWFsIFVBRiwgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIFRoZSBlbnRpcmUgbG9naWMgaXMgZGVzaWduZWQgdG8gcHJldmVudCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy5cblxuVGhlcmVmb3JlLCBjb25zaWRlcmluZyB0aGF0IHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBjYXNlcyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSAqY291bGQqIGJlIHJlYWQsIHdoZXJlIGRhdGEgbWlnaHQgbGVhayB0byB1c2VyIHNwYWNlLCBvciB3aGVyZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQgd2l0aG91dCBwcm9wZXIgaW5pdGlhbGl6YXRpb24sIEkgY29uY2x1ZGUgdGhhdCBgTmVlZHNLTVNBTmAgaXMgYGZhbHNlYC4gVGhlIGNoYW5nZXMgYXJlIHNhZmV0eS1mb2N1c2VkIHJlZmFjdG9yaW5nLCBhbmQgYXJlIHdlbGwgd2l0aGluIHRoZSBleGlzdGluZyBtZW1vcnkgcHJvdGVjdGlvbiBmcmFtZXdvcmssIGFuZCBhbnkgcHJvYmxlbXMgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOL3ZlcmlmaWVyIGNoZWNrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE0MTIsIk91dHB1dFRva2VucyI6MzM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMwMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIwOjIxOjU4Ljg1MDg5MTcwNFoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3NTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgQlBGIGtmdW5jcyBmb3IgY29weWluZyBtZW1vcnkgZnJvbSBhbiBhcmJpdHJhcnkgYHN0cnVjdCBtbV9zdHJ1Y3RgIChgYnBmX2NvcHlfZnJvbV91c2VyX21tYCBhbmQgYGJwZl9jb3B5X2Zyb21fdXNlcl9tbV9zdHJgKSwgcmVmYWN0b3JzIGV4aXN0aW5nIHRhc2stYmFzZWQgaGVscGVycyB0byB1c2UgdGhlc2UgZnVuY3Rpb25zLCBjbGVhcnMgYGJwcm0tXFx1MDAzZW1tYCBiZWZvcmUgZHJvcHBpbmcgdGhlIHJlZmVyZW5jZSBpbiBgZnJlZV9icHJtKClgLCBhbmQgdXBkYXRlcyB0aGUgQlBGIHZlcmlmaWVyIHRvIGFsbG93IGZhdWx0LXByb3RlY3RlZCBsb2FkcyB0aHJvdWdoIHRydXN0ZWQtb3ItbnVsbCBCVEYgcG9pbnRlcnMgKGBicGZfaXNfdHJ1c3RlZF9vcl9udWxsX2J0Zl9wdHJgKS5cXG5cXG5LTVNBTiB2cyBLQVNBTiBBcHBsaWNhYmlsaXR5Olxcbi0gS01TQU4gZGV0ZWN0cyByZWFkcyBvZiB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAvcGFnZSBtZW1vcnkgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBkaXNjbG9zdXJlIChpbmZvLWxlYWtzKS5cXG4tIEtBU0FOIC8gTE9DS0RFUCBkZXRlY3QgbWVtb3J5IGNvcnJ1cHRpb25zLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLCBhbmQgbG9ja2luZyBlcnJvcnMuXFxuLSBUaGUgbmV3IEJQRiBjb3B5IGtmdW5jcyBwcm9wZXJseSBoYW5kbGUgbWVtb3J5IGluaXRpYWxpemF0aW9uOiBhbnkgZGVzdGluYXRpb24gYnVmZmVycyBhcmUgZWl0aGVyIGZ1bGx5IHdyaXR0ZW4gb3IgZXhwbGljaXRseSB6ZXJvZWQgdmlhIGBtZW1zZXQoKWAgdXBvbiBmYWlsdXJlLCBwYXJ0aWFsIHJlYWRzLCBvciB3aGVuIGBCUEZfRl9QQURfWkVST1NgIGlzIHJlcXVlc3RlZC5cXG4tIE5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgc3RhY2sgYWxsb2NhdGlvbnMsIG9yIGtlcm5lbC10by11c2VyIGxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuXFxuLSBWZXJpZmllciB0eXBlIHRyYWNraW5nIGFuZCByZWZlcmVuY2UgY291bnRpbmcgY2hhbmdlcyByZWxhdGUgdG8gcG9pbnRlciB2YWxpZGl0eSBhbmQgZmF1bHQgaGFuZGxpbmcsIGFyZWFzIHdoZXJlIEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMgYXJlIGFwcGxpY2FibGUsIG5vdCBLTVNBTi5cXG5cXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBCUEYga2Z1bmNzIGZvciBjb3B5aW5nIG1lbW9yeSBmcm9tIGFuIGFyYml0cmFyeSBgc3RydWN0IG1tX3N0cnVjdGAgKGBicGZfY29weV9mcm9tX3VzZXJfbW1gIGFuZCBgYnBmX2NvcHlfZnJvbV91c2VyX21tX3N0cmApLCByZWZhY3RvcnMgZXhpc3RpbmcgdGFzay1iYXNlZCBoZWxwZXJzIHRvIHVzZSB0aGVzZSBmdW5jdGlvbnMsIGNsZWFycyBgYnBybS1cXHUwMDNlbW1gIGJlZm9yZSBkcm9wcGluZyB0aGUgcmVmZXJlbmNlIGluIGBmcmVlX2Jwcm0oKWAsIGFuZCB1cGRhdGVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gYWxsb3cgZmF1bHQtcHJvdGVjdGVkIGxvYWRzIHRocm91Z2ggdHJ1c3RlZC1vci1udWxsIEJURiBwb2ludGVycyAoYGJwZl9pc190cnVzdGVkX29yX251bGxfYnRmX3B0cmApLlxcblxcbktNU0FOIHZzIEtBU0FOIEFwcGxpY2FiaWxpdHk6XFxuLSBLTVNBTiBkZXRlY3RzIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcC9wYWdlIG1lbW9yeSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGRpc2Nsb3N1cmUgKGluZm8tbGVha3MpLlxcbi0gS0FTQU4gLyBMT0NLREVQIGRldGVjdCBtZW1vcnkgY29ycnVwdGlvbnMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMsIGFuZCBsb2NraW5nIGVycm9ycy5cXG4tIFRoZSBuZXcgQlBGIGNvcHkga2Z1bmNzIHByb3Blcmx5IGhhbmRsZSBtZW1vcnkgaW5pdGlhbGl6YXRpb246IGFueSBkZXN0aW5hdGlvbiBidWZmZXJzIGFyZSBlaXRoZXIgZnVsbHkgd3JpdHRlbiBvciBleHBsaWNpdGx5IHplcm9lZCB2aWEgYG1lbXNldCgpYCB1cG9uIGZhaWx1cmUsIHBhcnRpYWwgcmVhZHMsIG9yIHdoZW4gYEJQRl9GX1BBRF9aRVJPU2AgaXMgcmVxdWVzdGVkLlxcbi0gTm8gdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBzdGFjayBhbGxvY2F0aW9ucywgb3Iga2VybmVsLXRvLXVzZXIgbGVha3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC5cXG4tIFZlcmlmaWVyIHR5cGUgdHJhY2tpbmcgYW5kIHJlZmVyZW5jZSBjb3VudGluZyBjaGFuZ2VzIHJlbGF0ZSB0byBwb2ludGVyIHZhbGlkaXR5IGFuZCBmYXVsdCBoYW5kbGluZywgYXJlYXMgd2hlcmUgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllcyBhcmUgYXBwbGljYWJsZSwgbm90IEtNU0FOLlxcblxcblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowmrdxc[1] Phase: Succeeded StartedAt: 2026-09-07 20:22:10 +0000 UTC FinishedAt: 2026-09-07 20:22:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmrdxc[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-07 20:22:10 +0000 UTC FinishedAt: 2026-09-07 20:22:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmrdxc[2] Phase: Running StartedAt: 2026-09-07 20:22:10 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmrdxc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bpf_copy_from_user_mm","bpf_copy_from_user_mm_str","bpf_copy_from_user_task","bpf_copy_from_user_task_str","copy_remote_mm_str","copy_remote_vm_str","__copy_remote_mm_str","check_ptr_to_btf_access","type_is_trusted_or_null","check_mem_access","bpf_convert_ctx_accesses","free_bprm"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_LSM"],"series_id":"4e99b38f-3352-4c93-9dea-5d0b879102c5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Running StartedAt: 2026-09-07 20:22:10 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bpf_copy_from_user_mm","bpf_copy_from_user_mm_str","bpf_copy_from_user_task","bpf_copy_from_user_task_str","copy_remote_mm_str","copy_remote_vm_str","__copy_remote_mm_str","check_ptr_to_btf_access","type_is_trusted_or_null","check_mem_access","bpf_convert_ctx_accesses","free_bprm"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_LSM"],"series_id":"4e99b38f-3352-4c93-9dea-5d0b879102c5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowmrdxc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bpf_copy_from_user_mm","bpf_copy_from_user_mm_str","bpf_copy_from_user_task","bpf_copy_from_user_task_str","copy_remote_mm_str","copy_remote_vm_str","__copy_remote_mm_str","check_ptr_to_btf_access","type_is_trusted_or_null","check_mem_access","bpf_convert_ctx_accesses","free_bprm"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_LSM"],"series_id":"4e99b38f-3352-4c93-9dea-5d0b879102c5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-07 20:22:10 +0000 UTC FinishedAt: 2026-09-07 20:22:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmrdxc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bpf_copy_from_user_mm","bpf_copy_from_user_mm_str","bpf_copy_from_user_task","bpf_copy_from_user_task_str","copy_remote_mm_str","copy_remote_vm_str","__copy_remote_mm_str","check_ptr_to_btf_access","type_is_trusted_or_null","check_mem_access","bpf_convert_ctx_accesses","free_bprm"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_LSM"],"series_id":"4e99b38f-3352-4c93-9dea-5d0b879102c5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-07 20:22:10 +0000 UTC FinishedAt: 2026-09-07 20:22:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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-workflowmrdxc/series-workflowmrdxc-convert-artifact-4169118184/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmrdxc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bpf_copy_from_user_mm","bpf_copy_from_user_mm_str","bpf_copy_from_user_task","bpf_copy_from_user_task_str","copy_remote_mm_str","copy_remote_vm_str","__copy_remote_mm_str","check_ptr_to_btf_access","type_is_trusted_or_null","check_mem_access","bpf_convert_ctx_accesses","free_bprm"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_LSM"],"series_id":"4e99b38f-3352-4c93-9dea-5d0b879102c5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Running StartedAt: 2026-09-07 20:22:20 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmrdxc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bpf_copy_from_user_mm","bpf_copy_from_user_mm_str","bpf_copy_from_user_task","bpf_copy_from_user_task_str","copy_remote_mm_str","copy_remote_vm_str","__copy_remote_mm_str","check_ptr_to_btf_access","type_is_trusted_or_null","check_mem_access","bpf_convert_ctx_accesses","free_bprm"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_LSM"],"series_id":"4e99b38f-3352-4c93-9dea-5d0b879102c5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Running StartedAt: 2026-09-07 20:22:20 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +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:*94c23a07-05d4-4831-8ccb-e6593c9e6a73,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-workflowmrdxc/series-workflowmrdxc-convert-artifact-4169118184/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowmrdxc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bpf_copy_from_user_mm","bpf_copy_from_user_mm_str","bpf_copy_from_user_task","bpf_copy_from_user_task_str","copy_remote_mm_str","copy_remote_vm_str","__copy_remote_mm_str","check_ptr_to_btf_access","type_is_trusted_or_null","check_mem_access","bpf_convert_ctx_accesses","free_bprm"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1b7415bf70be95b9a1e7e87d544867881065613f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF","BPF_LSM"],"series_id":"4e99b38f-3352-4c93-9dea-5d0b879102c5","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Running StartedAt: 2026-09-07 20:22:20 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +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:*94c23a07-05d4-4831-8ccb-e6593c9e6a73,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-workflowmrdxc/series-workflowmrdxc-convert-artifact-4169118184/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}