Name: series-workflow5xrqt Phase: Succeeded StartedAt: 2026-07-13 06:59:07 +0000 UTC FinishedAt: 2026-07-13 09:22:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xrqt[0] Phase: Succeeded StartedAt: 2026-07-13 06:59:07 +0000 UTC FinishedAt: 2026-07-13 07:27:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xrqt[0].run-triage Phase: Succeeded StartedAt: 2026-07-13 06:59:07 +0000 UTC FinishedAt: 2026-07-13 07:27:48 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "a13c140cc289c0b7b3770bce5b3ad42ab35074aa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "a13c140cc289c0b7b3770bce5b3ad42ab35074aa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "25fe3c7d-088d-4bfc-97db-5caf3a57fb98" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_riscv_vcpu_aia_set_csr", "kvm_riscv_vcpu_general_set_csr", "kvm_riscv_vcpu_set_interrupt", "kvm_riscv_vcpu_unset_interrupt" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA3OjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fcmlzY3ZfdmNwdV9haWFfc2V0X2NzciYjMzQ7LAogICAgJiMzNDtrdm1fcmlzY3ZfdmNwdV9nZW5lcmFsX3NldF9jc3ImIzM0OywKICAgICYjMzQ7a3ZtX3Jpc2N2X3ZjcHVfc2V0X2ludGVycnVwdCYjMzQ7LAogICAgJiMzNDtrdm1fcmlzY3ZfdmNwdV91bnNldF9pbnRlcnJ1cHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgbG9ja2xlc3MgYXRvbWljIGJpdG9wcyB3aXRoIGEgcmF3IHNwaW5sb2NrIGZvciB0cmFja2luZyBwZW5kaW5nIFZDUFUgaW50ZXJydXB0cyBpbiBSSVNDLVYgS1ZNLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZmZlY3RzIGludGVycnVwdCBpbmplY3Rpb24gYW5kIHN5bmNocm9uaXphdGlvbi4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gZnVuY3Rpb25zIHRoYXQgc2V0L3Vuc2V0IGludGVycnVwdHMgYW5kIENTUnMsIHdoaWNoIGFyZSBhY2Nlc3NpYmxlIHZpYSBLVk0gaW9jdGxzIGFuZCBub3Qgb24gdGhlIGFic29sdXRlIGhvdHRlc3QgVk0gZXhpdCBwYXRoLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA3OjE0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNmYwMWUzNjk0NjliYzcwZmY2MmNiNDkwZWE2NTkyZGQwZjI5NWU3MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDEzIDA3OjE0OjU0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggNjAwMTdjZWVjOWQyYWYuLmUyZDU4MDgxNjllNDRkIDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbkBAIC0yMDksMTMgJiM0MzsyMDksMTMgQEAgc3RydWN0IGt2bV92Y3B1X2FyY2gge1xuIFx0LypcbiBcdCAqIFZDUFUgaW50ZXJydXB0c1xuIFx0ICpcbi1cdCAqIFdlIGhhdmUgYSBsb2NrbGVzcyBhcHByb2FjaCBmb3IgdHJhY2tpbmcgcGVuZGluZyBWQ1BVIGludGVycnVwdHNcbi1cdCAqIGltcGxlbWVudGVkIHVzaW5nIGF0b21pYyBiaXRvcHMuIFRoZSBpcnFzX3BlbmRpbmcgYml0bWFwIHJlcHJlc2VudFxuLVx0ICogcGVuZGluZyBpbnRlcnJ1cHRzIHdoZXJlYXMgaXJxc19wZW5kaW5nX21hc2sgcmVwcmVzZW50IGJpdHMgY2hhbmdlZFxuLVx0ICogaW4gaXJxc19wZW5kaW5nLiBPdXIgYXBwcm9hY2ggaXMgbW9kZWxlZCBhcm91bmQgbXVsdGlwbGUgcHJvZHVjZXJcbi1cdCAqIGFuZCBzaW5nbGUgY29uc3VtZXIgcHJvYmxlbSB3aGVyZSB0aGUgY29uc3VtZXIgaXMgdGhlIFZDUFUgaXRzZWxmLlxuJiM0MztcdCAqIFRoZSBpcnFzX3BlbmRpbmcgYml0bWFwIHJlcHJlc2VudHMgcGVuZGluZyBpbnRlcnJ1cHRzIHdoZXJlYXNcbiYjNDM7XHQgKiBpcnFzX3BlbmRpbmdfbWFzayByZXByZXNlbnRzIGJpdHMgY2hhbmdlZCBpbiBpcnFzX3BlbmRpbmcuIFVwZGF0ZXNcbiYjNDM7XHQgKiB0byB0aGVzZSBiaXRtYXBzIGFyZSBzZXJpYWxpemVkIHNvIHZjcHUgaW50ZXJydXB0IHN5bmMvZmx1c2ggY2Fubm90XG4mIzQzO1x0ICogZHJvcCBhIG5ld2x5IGluamVjdGVkIGludGVycnVwdCB3aGlsZSBzeW5jaW5nIGd1ZXN0LXZpc2libGUgSFZJUC5cbiBcdCAqL1xuICNkZWZpbmUgS1ZNX1JJU0NWX1ZDUFVfTlJfSVJRU1x0NjRcbiYjNDM7XHRyYXdfc3BpbmxvY2tfdCBpcnFzX3BlbmRpbmdfbG9jaztcbiBcdERFQ0xBUkVfQklUTUFQKGlycXNfcGVuZGluZywgS1ZNX1JJU0NWX1ZDUFVfTlJfSVJRUyk7XG4gXHRERUNMQVJFX0JJVE1BUChpcnFzX3BlbmRpbmdfbWFzaywgS1ZNX1JJU0NWX1ZDUFVfTlJfSVJRUyk7XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vYWlhLmMgYi9hcmNoL3Jpc2N2L2t2bS9haWEuY1xuaW5kZXggYmFmYjAwOWM1Y2U1NTkuLjIyNWU0YWVkODFhMzc3IDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9rdm0vYWlhLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3Yva3ZtL2FpYS5jXG5AQCAtNTMsMTIgJiM0Mzs1MywxNSBAQCB2b2lkIGt2bV9yaXNjdl92Y3B1X2FpYV9mbHVzaF9pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHN0cnVjdCBrdm1fdmNwdV9haWFfY3NyICpjc3IgPSBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guYWlhX2NvbnRleHQuZ3Vlc3RfY3NyO1xuIFx0dW5zaWduZWQgbG9uZyBtYXNrLCB2YWw7XG4gXG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2spO1xuJiM0MztcbiBcdGlmICgha3ZtX3Jpc2N2X2FpYV9hdmFpbGFibGUoKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0aWYgKFJFQURfT05DRSh2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2tbMV0pKSB7XG4tXHRcdG1hc2sgPSB4Y2hnX2FjcXVpcmUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19tYXNrWzFdLCAwKTtcbi1cdFx0dmFsID0gUkVBRF9PTkNFKHZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdbMV0pIFx1MDAyNiBtYXNrO1xuJiM0MztcdG1hc2sgPSB2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2tbMV07XG4mIzQzO1x0aWYgKG1hc2spIHtcbiYjNDM7XHRcdHZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFza1sxXSA9IDA7XG4mIzQzO1x0XHR2YWwgPSB2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nWzFdIFx1MDAyNiBtYXNrO1xuIFxuIFx0XHRjc3ItXHUwMDNlaHZpcGggXHUwMDI2PSB+bWFzaztcbiBcdFx0Y3NyLVx1MDAzZWh2aXBoIHw9IHZhbDtcbkBAIC02OSw2ICYjNDM7NzIsOCBAQCB2b2lkIGt2bV9yaXNjdl92Y3B1X2FpYV9zeW5jX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHN0cnVjdCBrdm1fdmNwdV9haWFfY3NyICpjc3IgPSBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guYWlhX2NvbnRleHQuZ3Vlc3RfY3NyO1xuIFxuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19sb2NrKTtcbiYjNDM7XG4gXHRpZiAoa3ZtX3Jpc2N2X2FpYV9hdmFpbGFibGUoKSlcbiBcdFx0Y3NyLVx1MDAzZXZzaWVoID0gbmNzcl9yZWFkKENTUl9WU0lFSCk7XG4gfVxuQEAgLTc4LDExICYjNDM7ODMsMTMgQEAgYm9vbCBrdm1fcmlzY3ZfdmNwdV9haWFfaGFzX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgbWFzaylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHNlaXA7XG4gXG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2spO1xuJiM0MztcbiBcdGlmICgha3ZtX3Jpc2N2X2FpYV9hdmFpbGFibGUoKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuICNpZmRlZiBDT05GSUdfMzJCSVRcbi1cdGlmIChSRUFEX09OQ0UodmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ1sxXSkgXHUwMDI2XG4mIzQzO1x0aWYgKHZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdbMV0gXHUwMDI2XG4gXHQgICAgKHZjcHUtXHUwMDNlYXJjaC5haWFfY29udGV4dC5ndWVzdF9jc3IudnNpZWggXHUwMDI2IHVwcGVyXzMyX2JpdHMobWFzaykpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiAjZW5kaWZcbkBAIC0yMDcsNiAmIzQzOzIxNCw5IEBAIGludCBrdm1fcmlzY3ZfdmNwdV9haWFfc2V0X2NzcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4ge1xuIFx0c3RydWN0IGt2bV92Y3B1X2FpYV9jc3IgKmNzciA9IFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5haWFfY29udGV4dC5ndWVzdF9jc3I7XG4gXHR1bnNpZ25lZCBsb25nIHJlZ3NfbWF4ID0gc2l6ZW9mKHN0cnVjdCBrdm1fcmlzY3ZfYWlhX2NzcikgLyBzaXplb2YodW5zaWduZWQgbG9uZyk7XG4mIzQzOyNpZmRlZiBDT05GSUdfMzJCSVRcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MzsjZW5kaWZcbiBcbiBcdGlmICghcmlzY3ZfaXNhX2V4dGVuc2lvbl9hdmFpbGFibGUodmNwdS1cdTAwM2VhcmNoLmlzYSwgU1NBSUEpKVxuIFx0XHRyZXR1cm4gLUVOT0VOVDtcbkBAIC0yMTYsMTEgJiM0MzsyMjYsMTggQEAgaW50IGt2bV9yaXNjdl92Y3B1X2FpYV9zZXRfY3NyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdHJlZ19udW0gPSBhcnJheV9pbmRleF9ub3NwZWMocmVnX251bSwgcmVnc19tYXgpO1xuIFxuIFx0aWYgKGt2bV9yaXNjdl9haWFfYXZhaWxhYmxlKCkpIHtcbi1cdFx0KCh1bnNpZ25lZCBsb25nICopY3NyKVtyZWdfbnVtXSA9IHZhbDtcbi1cbiAjaWZkZWYgQ09ORklHXzMyQklUXG4tXHRcdGlmIChyZWdfbnVtID09IEtWTV9SRUdfUklTQ1ZfQ1NSX0FJQV9SRUcoc2lwaCkpXG4tXHRcdFx0V1JJVEVfT05DRSh2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2tbMV0sIDApO1xuJiM0MztcdFx0aWYgKHJlZ19udW0gPT0gS1ZNX1JFR19SSVNDVl9DU1JfQUlBX1JFRyhzaXBoKSkge1xuJiM0MztcdFx0XHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7XG4mIzQzO1x0XHRcdCgodW5zaWduZWQgbG9uZyAqKWNzcilbcmVnX251bV0gPSB2YWw7XG4mIzQzO1x0XHRcdHZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFza1sxXSA9IDA7XG4mIzQzO1x0XHRcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbG9jayxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgZmxhZ3MpO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0KCh1bnNpZ25lZCBsb25nICopY3NyKVtyZWdfbnVtXSA9IHZhbDtcbiYjNDM7XHRcdH1cbiYjNDM7I2Vsc2VcbiYjNDM7XHRcdCgodW5zaWduZWQgbG9uZyAqKWNzcilbcmVnX251bV0gPSB2YWw7XG4gI2VuZGlmXG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vdmNwdS5jIGIvYXJjaC9yaXNjdi9rdm0vdmNwdS5jXG5pbmRleCBjZjZlMjMxZTc2ZTI1NC4uN2Q4ZDIwODM5ZDQ2ZWUgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS92Y3B1LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3Yva3ZtL3ZjcHUuY1xuQEAgLTgwLDYgJiM0Mzs4MCw3IEBAIHN0YXRpYyB2b2lkIGt2bV9yaXNjdl92Y3B1X2NvbnRleHRfcmVzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFxuIHN0YXRpYyB2b2lkIGt2bV9yaXNjdl9yZXNldF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBrdm1fc2JpX3Jlc2V0KVxuIHtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0Ym9vbCBsb2FkZWQ7XG4gXG4gXHQvKipcbkBAIC0xMDQsOCAmIzQzOzEwNSwxMCBAQCBzdGF0aWMgdm9pZCBrdm1fcmlzY3ZfcmVzZXRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wga3ZtX3NiaV9yZXNldClcbiBcbiBcdGt2bV9yaXNjdl92Y3B1X2FpYV9yZXNldCh2Y3B1KTtcbiBcbiYjNDM7XHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7XG4gXHRiaXRtYXBfemVybyh2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nLCBLVk1fUklTQ1ZfVkNQVV9OUl9JUlFTKTtcbiBcdGJpdG1hcF96ZXJvKHZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFzaywgS1ZNX1JJU0NWX1ZDUFVfTlJfSVJRUyk7XG4mIzQzO1x0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7XG4gXG4gXHRrdm1fcmlzY3ZfdmNwdV9wbXVfcmVzZXQodmNwdSk7XG4gXG5AQCAtMTUxLDYgJiM0MzsxNTQsNyBAQCBpbnQga3ZtX2FyY2hfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIFx0LyogU2V0dXAgVkNQVSBoZmVuY2UgcXVldWUgKi9cbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5oZmVuY2VfbG9jayk7XG4mIzQzO1x0cmF3X3NwaW5fbG9ja19pbml0KFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbG9jayk7XG4gXG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gucmVzZXRfc3RhdGUubG9jayk7XG4gXG5AQCAtMzUyLDEwICYjNDM7MzU2LDEzIEBAIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfZmx1c2hfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IGt2bV92Y3B1X2NzciAqY3NyID0gXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmd1ZXN0X2NzcjtcbiBcdHVuc2lnbmVkIGxvbmcgbWFzaywgdmFsO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXG4tXHRpZiAoUkVBRF9PTkNFKHZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFza1swXSkpIHtcbi1cdFx0bWFzayA9IHhjaGdfYWNxdWlyZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2tbMF0sIDApO1xuLVx0XHR2YWwgPSBSRUFEX09OQ0UodmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ1swXSkgXHUwMDI2IG1hc2s7XG4mIzQzO1x0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpO1xuJiM0MztcdG1hc2sgPSB2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2tbMF07XG4mIzQzO1x0aWYgKG1hc2spIHtcbiYjNDM7XHRcdHZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFza1swXSA9IDA7XG4mIzQzO1x0XHR2YWwgPSB2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nWzBdIFx1MDAyNiBtYXNrO1xuIFxuIFx0XHRjc3ItXHUwMDNlaHZpcCBcdTAwMjY9IH5tYXNrO1xuIFx0XHRjc3ItXHUwMDNlaHZpcCB8PSB2YWw7XG5AQCAtMzYzLDExICYjNDM7MzcwLDEzIEBAIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfZmx1c2hfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gXHQvKiBGbHVzaCBBSUEgaGlnaCBpbnRlcnJ1cHRzICovXG4gXHRrdm1fcmlzY3ZfdmNwdV9haWFfZmx1c2hfaW50ZXJydXB0cyh2Y3B1KTtcbiYjNDM7XHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTtcbiB9XG4gXG4gdm9pZCBrdm1fcmlzY3ZfdmNwdV9zeW5jX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgaHZpcDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0c3RydWN0IGt2bV92Y3B1X2FyY2ggKnYgPSBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2g7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHVfY3NyICpjc3IgPSBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guZ3Vlc3RfY3NyO1xuIFxuQEAgLTM3NiwyNyAmIzQzOzM4NSwyOSBAQCB2b2lkIGt2bV9yaXNjdl92Y3B1X3N5bmNfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gXHQvKiBTeW5jLXVwIEhWSVAuVlNTSVAgYml0IGNoYW5nZXMgZG9lcyBieSBHdWVzdCAqL1xuIFx0aHZpcCA9IG5jc3JfcmVhZChDU1JfSFZJUCk7XG4mIzQzO1x0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnYtXHUwMDNlaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTtcbiBcdGlmICgoY3NyLVx1MDAzZWh2aXAgXiBodmlwKSBcdTAwMjYgKDFVTCBcdTAwM2NcdTAwM2MgSVJRX1ZTX1NPRlQpKSB7XG4gXHRcdGlmIChodmlwIFx1MDAyNiAoMVVMIFx1MDAzY1x1MDAzYyBJUlFfVlNfU09GVCkpIHtcbi1cdFx0XHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoSVJRX1ZTX1NPRlQsXG4tXHRcdFx0XHRcdCAgICAgIHYtXHUwMDNlaXJxc19wZW5kaW5nX21hc2spKVxuLVx0XHRcdFx0c2V0X2JpdChJUlFfVlNfU09GVCwgdi1cdTAwM2VpcnFzX3BlbmRpbmcpO1xuJiM0MztcdFx0XHRpZiAoIV9fdGVzdF9hbmRfc2V0X2JpdChJUlFfVlNfU09GVCxcbiYjNDM7XHRcdFx0XHRcdFx0di1cdTAwM2VpcnFzX3BlbmRpbmdfbWFzaykpXG4mIzQzO1x0XHRcdFx0X19zZXRfYml0KElSUV9WU19TT0ZULCB2LVx1MDAzZWlycXNfcGVuZGluZyk7XG4gXHRcdH0gZWxzZSB7XG4tXHRcdFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KElSUV9WU19TT0ZULFxuLVx0XHRcdFx0XHQgICAgICB2LVx1MDAzZWlycXNfcGVuZGluZ19tYXNrKSlcbi1cdFx0XHRcdGNsZWFyX2JpdChJUlFfVlNfU09GVCwgdi1cdTAwM2VpcnFzX3BlbmRpbmcpO1xuJiM0MztcdFx0XHRpZiAoIV9fdGVzdF9hbmRfc2V0X2JpdChJUlFfVlNfU09GVCxcbiYjNDM7XHRcdFx0XHRcdFx0di1cdTAwM2VpcnFzX3BlbmRpbmdfbWFzaykpXG4mIzQzO1x0XHRcdFx0X19jbGVhcl9iaXQoSVJRX1ZTX1NPRlQsIHYtXHUwMDNlaXJxc19wZW5kaW5nKTtcbiBcdFx0fVxuIFx0fVxuIFxuIFx0LyogU3luYyB1cCB0aGUgSFZJUC5MQ09GSVAgYml0IGNoYW5nZXMgKG9ubHkgY2xlYXIpIGJ5IHRoZSBndWVzdCAqL1xuIFx0aWYgKChjc3ItXHUwMDNlaHZpcCBeIGh2aXApIFx1MDAyNiAoMVVMIFx1MDAzY1x1MDAzYyBJUlFfUE1VX09WRikpIHtcbiBcdFx0aWYgKCEoaHZpcCBcdTAwMjYgKDFVTCBcdTAwM2NcdTAwM2MgSVJRX1BNVV9PVkYpKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgICF0ZXN0X2FuZF9zZXRfYml0KElSUV9QTVVfT1ZGLCB2LVx1MDAzZWlycXNfcGVuZGluZ19tYXNrKSlcbi1cdFx0XHRjbGVhcl9iaXQoSVJRX1BNVV9PVkYsIHYtXHUwMDNlaXJxc19wZW5kaW5nKTtcbiYjNDM7XHRcdCAgICAhX190ZXN0X2FuZF9zZXRfYml0KElSUV9QTVVfT1ZGLCB2LVx1MDAzZWlycXNfcGVuZGluZ19tYXNrKSlcbiYjNDM7XHRcdFx0X19jbGVhcl9iaXQoSVJRX1BNVV9PVkYsIHYtXHUwMDNlaXJxc19wZW5kaW5nKTtcbiBcdH1cbiBcbiBcdC8qIFN5bmMtdXAgQUlBIGhpZ2ggaW50ZXJydXB0cyAqL1xuIFx0a3ZtX3Jpc2N2X3ZjcHVfYWlhX3N5bmNfaW50ZXJydXB0cyh2Y3B1KTtcbiYjNDM7XHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ2LVx1MDAzZWlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7XG4gXG4gXHQvKiBTeW5jLXVwIHRpbWVyIENTUnMgKi9cbiBcdGt2bV9yaXNjdl92Y3B1X3RpbWVyX3N5bmModmNwdSk7XG5AQCAtNDA0LDYgJiM0Mzs0MTUsOCBAQCB2b2lkIGt2bV9yaXNjdl92Y3B1X3N5bmNfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gaW50IGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgaXJxKVxuIHtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcbiBcdC8qXG4gXHQgKiBXZSBvbmx5IGFsbG93IFZTLW1vZGUgc29mdHdhcmUsIHRpbWVyLCBhbmQgZXh0ZXJuYWxcbiBcdCAqIGludGVycnVwdHMgd2hlbiBpcnEgaXMgb25lIG9mIHRoZSBsb2NhbCBpbnRlcnJ1cHRzXG5AQCAtNDE2LDkgJiM0Mzs0MjksMTAgQEAgaW50IGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgaXJxKVxuIFx0ICAgIGlycSAhPSBJUlFfUE1VX09WRilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRzZXRfYml0KGlycSwgdmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZyk7XG4tXHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcbi1cdHNldF9iaXQoaXJxLCB2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2spO1xuJiM0MztcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTtcbiYjNDM7XHRfX3NldF9iaXQoaXJxLCB2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nKTtcbiYjNDM7XHRfX3NldF9iaXQoaXJxLCB2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2spO1xuJiM0MztcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpO1xuIFxuIFx0a3ZtX3ZjcHVfa2ljayh2Y3B1KTtcbiBcbkBAIC00MjcsNiAmIzQzOzQ0MSw4IEBAIGludCBrdm1fcmlzY3ZfdmNwdV9zZXRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IGlycSlcbiBcbiBpbnQga3ZtX3Jpc2N2X3ZjcHVfdW5zZXRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IGlycSlcbiB7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XG4gXHQvKlxuIFx0ICogV2Ugb25seSBhbGxvdyBWUy1tb2RlIHNvZnR3YXJlLCB0aW1lciwgY291bnRlciBvdmVyZmxvdyBhbmQgZXh0ZXJuYWxcbiBcdCAqIGludGVycnVwdHMgd2hlbiBpcnEgaXMgb25lIG9mIHRoZSBsb2NhbCBpbnRlcnJ1cHRzXG5AQCAtNDM5LDI2ICYjNDM7NDU1LDMzIEBAIGludCBrdm1fcmlzY3ZfdmNwdV91bnNldF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgaXJxKVxuIFx0ICAgIGlycSAhPSBJUlFfUE1VX09WRilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRjbGVhcl9iaXQoaXJxLCB2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nKTtcbi1cdHNtcF9tYl9fYmVmb3JlX2F0b21pYygpO1xuLVx0c2V0X2JpdChpcnEsIHZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFzayk7XG4mIzQzO1x0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpO1xuJiM0MztcdF9fY2xlYXJfYml0KGlycSwgdmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZyk7XG4mIzQzO1x0X19zZXRfYml0KGlycSwgdmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19tYXNrKTtcbiYjNDM7XHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbiBcbiBib29sIGt2bV9yaXNjdl92Y3B1X2hhc19pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IG1hc2spXG4ge1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHR1bnNpZ25lZCBsb25nIGllO1xuJiM0MztcdGJvb2wgcmV0O1xuIFxuJiM0MztcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTtcbiBcdGllID0gKCh2Y3B1LVx1MDAzZWFyY2guZ3Vlc3RfY3NyLnZzaWUgXHUwMDI2IFZTSVBfVkFMSURfTUFTSylcbiBcdFx0XHUwMDNjXHUwMDNjIFZTSVBfVE9fSFZJUF9TSElGVCkgXHUwMDI2ICh1bnNpZ25lZCBsb25nKW1hc2s7XG4gXHRpZSB8PSB2Y3B1LVx1MDAzZWFyY2guZ3Vlc3RfY3NyLnZzaWUgXHUwMDI2IH5JUlFfTE9DQUxfTUFTSyBcdTAwMjZcbiBcdFx0KHVuc2lnbmVkIGxvbmcpbWFzaztcbi1cdGlmIChSRUFEX09OQ0UodmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ1swXSkgXHUwMDI2IGllKVxuLVx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRyZXQgPSB2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nWzBdIFx1MDAyNiBpZTtcbiBcbiBcdC8qIENoZWNrIEFJQSBoaWdoIGludGVycnVwdHMgKi9cbi1cdHJldHVybiBrdm1fcmlzY3ZfdmNwdV9haWFfaGFzX2ludGVycnVwdHModmNwdSwgbWFzayk7XG4mIzQzO1x0aWYgKCFyZXQpXG4mIzQzO1x0XHRyZXQgPSBrdm1fcmlzY3ZfdmNwdV9haWFfaGFzX2ludGVycnVwdHModmNwdSwgbWFzayk7XG4mIzQzO1x0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4gfVxuIFxuIHZvaWQgX19rdm1fcmlzY3ZfdmNwdV9wb3dlcl9vZmYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmMgYi9hcmNoL3Jpc2N2L2t2bS92Y3B1X29uZXJlZy5jXG5pbmRleCBiYjkyMGU4OTIzYzkzMC4uY2JhMzY4Mjk0NGI2OTQgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS92Y3B1X29uZXJlZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2t2bS92Y3B1X29uZXJlZy5jXG5AQCAtMjk4LDYgJiM0MzsyOTgsNyBAQCBzdGF0aWMgaW50IGt2bV9yaXNjdl92Y3B1X2dlbmVyYWxfc2V0X2NzcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4ge1xuIFx0c3RydWN0IGt2bV92Y3B1X2NzciAqY3NyID0gXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmd1ZXN0X2NzcjtcbiBcdHVuc2lnbmVkIGxvbmcgcmVnc19tYXggPSBzaXplb2Yoc3RydWN0IGt2bV9yaXNjdl9jc3IpIC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXG4gXHRpZiAocmVnX251bSBcdTAwM2U9IHJlZ3NfbWF4KVxuIFx0XHRyZXR1cm4gLUVOT0VOVDtcbkBAIC0zMDksMTAgJiM0MzszMTAsMTQgQEAgc3RhdGljIGludCBrdm1fcmlzY3ZfdmNwdV9nZW5lcmFsX3NldF9jc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0XHRyZWdfdmFsIFx1MDAzY1x1MDAzYz0gVlNJUF9UT19IVklQX1NISUZUO1xuIFx0fVxuIFxuLVx0KCh1bnNpZ25lZCBsb25nICopY3NyKVtyZWdfbnVtXSA9IHJlZ192YWw7XG4tXG4tXHRpZiAocmVnX251bSA9PSBLVk1fUkVHX1JJU0NWX0NTUl9SRUcoc2lwKSlcbi1cdFx0V1JJVEVfT05DRSh2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2tbMF0sIDApO1xuJiM0MztcdGlmIChyZWdfbnVtID09IEtWTV9SRUdfUklTQ1ZfQ1NSX1JFRyhzaXApKSB7XG4mIzQzO1x0XHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7XG4mIzQzO1x0XHQoKHVuc2lnbmVkIGxvbmcgKiljc3IpW3JlZ19udW1dID0gcmVnX3ZhbDtcbiYjNDM7XHRcdHZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFza1swXSA9IDA7XG4mIzQzO1x0XHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0KCh1bnNpZ25lZCBsb25nICopY3NyKVtyZWdfbnVtXSA9IHJlZ192YWw7XG4mIzQzO1x0fVxuIFxuIFx0cmV0dXJuIDA7XG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA3OjE0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjEybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fcmlzY3ZfdmNwdV9haWFfc2V0X2NzciYjMzQ7LAogICAgJiMzNDtrdm1fcmlzY3ZfdmNwdV9nZW5lcmFsX3NldF9jc3ImIzM0OywKICAgICYjMzQ7a3ZtX3Jpc2N2X3ZjcHVfc2V0X2ludGVycnVwdCYjMzQ7LAogICAgJiMzNDtrdm1fcmlzY3ZfdmNwdV91bnNldF9pbnRlcnJ1cHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgbG9ja2xlc3MgYXRvbWljIGJpdG9wcyB3aXRoIGEgcmF3IHNwaW5sb2NrIGZvciB0cmFja2luZyBwZW5kaW5nIFZDUFUgaW50ZXJydXB0cyBpbiBSSVNDLVYgS1ZNLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZmZlY3RzIGludGVycnVwdCBpbmplY3Rpb24gYW5kIHN5bmNocm9uaXphdGlvbi4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gZnVuY3Rpb25zIHRoYXQgc2V0L3Vuc2V0IGludGVycnVwdHMgYW5kIENTUnMsIHdoaWNoIGFyZSBhY2Nlc3NpYmxlIHZpYSBLVk0gaW9jdGxzIGFuZCBub3Qgb24gdGhlIGFic29sdXRlIGhvdHRlc3QgVk0gZXhpdCBwYXRoLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2ZjAxZTM2OTQ2OWJjNzBmZjYyY2I0OTBlYTY1OTJkZDBmMjk1ZTcyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBKdWwgMTMgMDc6MTQ6NTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKaW5kZXggNjAwMTdjZWVjOWQyYWYuLmUyZDU4MDgxNjllNDRkIDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCkBAIC0yMDksMTMgJiM0MzsyMDksMTMgQEAgc3RydWN0IGt2bV92Y3B1X2FyY2ggewogCS8qCiAJICogVkNQVSBpbnRlcnJ1cHRzCiAJICoKLQkgKiBXZSBoYXZlIGEgbG9ja2xlc3MgYXBwcm9hY2ggZm9yIHRyYWNraW5nIHBlbmRpbmcgVkNQVSBpbnRlcnJ1cHRzCi0JICogaW1wbGVtZW50ZWQgdXNpbmcgYXRvbWljIGJpdG9wcy4gVGhlIGlycXNfcGVuZGluZyBiaXRtYXAgcmVwcmVzZW50Ci0JICogcGVuZGluZyBpbnRlcnJ1cHRzIHdoZXJlYXMgaXJxc19wZW5kaW5nX21hc2sgcmVwcmVzZW50IGJpdHMgY2hhbmdlZAotCSAqIGluIGlycXNfcGVuZGluZy4gT3VyIGFwcHJvYWNoIGlzIG1vZGVsZWQgYXJvdW5kIG11bHRpcGxlIHByb2R1Y2VyCi0JICogYW5kIHNpbmdsZSBjb25zdW1lciBwcm9ibGVtIHdoZXJlIHRoZSBjb25zdW1lciBpcyB0aGUgVkNQVSBpdHNlbGYuCiYjNDM7CSAqIFRoZSBpcnFzX3BlbmRpbmcgYml0bWFwIHJlcHJlc2VudHMgcGVuZGluZyBpbnRlcnJ1cHRzIHdoZXJlYXMKJiM0MzsJICogaXJxc19wZW5kaW5nX21hc2sgcmVwcmVzZW50cyBiaXRzIGNoYW5nZWQgaW4gaXJxc19wZW5kaW5nLiBVcGRhdGVzCiYjNDM7CSAqIHRvIHRoZXNlIGJpdG1hcHMgYXJlIHNlcmlhbGl6ZWQgc28gdmNwdSBpbnRlcnJ1cHQgc3luYy9mbHVzaCBjYW5ub3QKJiM0MzsJICogZHJvcCBhIG5ld2x5IGluamVjdGVkIGludGVycnVwdCB3aGlsZSBzeW5jaW5nIGd1ZXN0LXZpc2libGUgSFZJUC4KIAkgKi8KICNkZWZpbmUgS1ZNX1JJU0NWX1ZDUFVfTlJfSVJRUwk2NAomIzQzOwlyYXdfc3BpbmxvY2tfdCBpcnFzX3BlbmRpbmdfbG9jazsKIAlERUNMQVJFX0JJVE1BUChpcnFzX3BlbmRpbmcsIEtWTV9SSVNDVl9WQ1BVX05SX0lSUVMpOwogCURFQ0xBUkVfQklUTUFQKGlycXNfcGVuZGluZ19tYXNrLCBLVk1fUklTQ1ZfVkNQVV9OUl9JUlFTKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vYWlhLmMgYi9hcmNoL3Jpc2N2L2t2bS9haWEuYwppbmRleCBiYWZiMDA5YzVjZTU1OS4uMjI1ZTRhZWQ4MWEzNzcgMTAwNjQ0Ci0tLSBhL2FyY2gvcmlzY3Yva3ZtL2FpYS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3Yva3ZtL2FpYS5jCkBAIC01MywxMiAmIzQzOzUzLDE1IEBAIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfYWlhX2ZsdXNoX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCXN0cnVjdCBrdm1fdmNwdV9haWFfY3NyICpjc3IgPSAmYW1wO3ZjcHUtJmd0O2FyY2guYWlhX2NvbnRleHQuZ3Vlc3RfY3NyOwogCXVuc2lnbmVkIGxvbmcgbWFzaywgdmFsOwogCiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDt2Y3B1LSZndDthcmNoLmlycXNfcGVuZGluZ19sb2NrKTsKJiM0MzsKIAlpZiAoIWt2bV9yaXNjdl9haWFfYXZhaWxhYmxlKCkpCiAJCXJldHVybjsKIAotCWlmIChSRUFEX09OQ0UodmNwdS0mZ3Q7YXJjaC5pcnFzX3BlbmRpbmdfbWFza1sxXSkpIHsKLQkJbWFzayA9IHhjaGdfYWNxdWlyZSgmYW1wO3ZjcHUtJmd0O2FyY2guaXJxc19wZW5kaW5nX21hc2tbMV0sIDApOwotCQl2YWwgPSBSRUFEX09OQ0UodmNwdS0mZ3Q7YXJjaC5pcnFzX3BlbmRpbmdbMV0pICZhbXA7IG1hc2s7CiYjNDM7CW1hc2sgPSB2Y3B1LSZndDthcmNoLmlycXNfcGVuZGluZ19tYXNrWzFdOwomIzQzOwlpZiAobWFzaykgewomIzQzOwkJdmNwdS0mZ3Q7YXJjaC5pcnFzX3BlbmRpbmdfbWFza1sxXSA9IDA7CiYjNDM7CQl2YWwgPSB2Y3B1LSZndDthcmNoLmlycXNfcGVuZGluZ1sxXSAmYW1wOyBtYXNrOwogCiAJCWNzci0mZ3Q7aHZpcGggJmFtcDs9IH5tYXNrOwogCQljc3ItJmd0O2h2aXBoIHw9IHZhbDsKQEAgLTY5LDYgJiM0Mzs3Miw4IEBAIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfYWlhX3N5bmNfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJc3RydWN0IGt2bV92Y3B1X2FpYV9jc3IgKmNzciA9ICZhbXA7dmNwdS0mZ3Q7YXJjaC5haWFfY29udGV4dC5ndWVzdF9jc3I7CiAKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3ZjcHUtJmd0O2FyY2guaXJxc19wZW5kaW5nX2xvY2spOwomIzQzOwogCWlmIChrdm1fcmlzY3ZfYWlhX2F2YWlsYWJsZSgpKQogCQljc3ItJmd0O3ZzaWVoID0gbmNzcl9yZWFkKENTUl9WU0lFSCk7CiB9CkBAIC03OCwxMSAmIzQzOzgzLDEzIEBAIGJvb2wga3ZtX3Jpc2N2X3ZjcHVfYWlhX2hhc19pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IG1hc2spCiB7CiAJdW5zaWduZWQgbG9uZyBzZWlwOwogCiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDt2Y3B1LSZndDthcmNoLmlycXNfcGVuZGluZ19sb2NrKTsKJiM0MzsKIAlpZiAoIWt2bV9yaXNjdl9haWFfYXZhaWxhYmxlKCkpCiAJCXJldHVybiBmYWxzZTsKIAogI2lmZGVmIENPTkZJR18zMkJJVAotCWlmIChSRUFEX09OQ0UodmNwdS0mZ3Q7YXJjaC5pcnFzX3BlbmRpbmdbMV0pICZhbXA7CiYjNDM7CWlmICh2Y3B1LSZndDthcmNoLmlycXNfcGVuZGluZ1sxXSAmYW1wOwogCSAgICAodmNwdS0mZ3Q7YXJjaC5haWFfY29udGV4dC5ndWVzdF9jc3IudnNpZWggJmFtcDsgdXBwZXJfMzJfYml0cyhtYXNrKSkpCiAJCXJldHVybiB0cnVlOwogI2VuZGlmCkBAIC0yMDcsNiAmIzQzOzIxNCw5IEBAIGludCBrdm1fcmlzY3ZfdmNwdV9haWFfc2V0X2NzcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiB7CiAJc3RydWN0IGt2bV92Y3B1X2FpYV9jc3IgKmNzciA9ICZhbXA7dmNwdS0mZ3Q7YXJjaC5haWFfY29udGV4dC5ndWVzdF9jc3I7CiAJdW5zaWduZWQgbG9uZyByZWdzX21heCA9IHNpemVvZihzdHJ1Y3Qga3ZtX3Jpc2N2X2FpYV9jc3IpIC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOwomIzQzOyNpZmRlZiBDT05GSUdfMzJCSVQKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsjZW5kaWYKIAogCWlmICghcmlzY3ZfaXNhX2V4dGVuc2lvbl9hdmFpbGFibGUodmNwdS0mZ3Q7YXJjaC5pc2EsIFNTQUlBKSkKIAkJcmV0dXJuIC1FTk9FTlQ7CkBAIC0yMTYsMTEgJiM0MzsyMjYsMTggQEAgaW50IGt2bV9yaXNjdl92Y3B1X2FpYV9zZXRfY3NyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAlyZWdfbnVtID0gYXJyYXlfaW5kZXhfbm9zcGVjKHJlZ19udW0sIHJlZ3NfbWF4KTsKIAogCWlmIChrdm1fcmlzY3ZfYWlhX2F2YWlsYWJsZSgpKSB7Ci0JCSgodW5zaWduZWQgbG9uZyAqKWNzcilbcmVnX251bV0gPSB2YWw7Ci0KICNpZmRlZiBDT05GSUdfMzJCSVQKLQkJaWYgKHJlZ19udW0gPT0gS1ZNX1JFR19SSVNDVl9DU1JfQUlBX1JFRyhzaXBoKSkKLQkJCVdSSVRFX09OQ0UodmNwdS0mZ3Q7YXJjaC5pcnFzX3BlbmRpbmdfbWFza1sxXSwgMCk7CiYjNDM7CQlpZiAocmVnX251bSA9PSBLVk1fUkVHX1JJU0NWX0NTUl9BSUFfUkVHKHNpcGgpKSB7CiYjNDM7CQkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZhbXA7dmNwdS0mZ3Q7YXJjaC5pcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpOwomIzQzOwkJCSgodW5zaWduZWQgbG9uZyAqKWNzcilbcmVnX251bV0gPSB2YWw7CiYjNDM7CQkJdmNwdS0mZ3Q7YXJjaC5pcnFzX3BlbmRpbmdfbWFza1sxXSA9IDA7CiYjNDM7CQkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDt2Y3B1LSZndDthcmNoLmlycXNfcGVuZGluZ19sb2NrLAomIzQzOwkJCQkJCSAgIGZsYWdzKTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJKCh1bnNpZ25lZCBsb25nICopY3NyKVtyZWdfbnVtXSA9IHZhbDsKJiM0MzsJCX0KJiM0MzsjZWxzZQomIzQzOwkJKCh1bnNpZ25lZCBsb25nICopY3NyKVtyZWdfbnVtXSA9IHZhbDsKICNlbmRpZgogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vdmNwdS5jIGIvYXJjaC9yaXNjdi9rdm0vdmNwdS5jCmluZGV4IGNmNmUyMzFlNzZlMjU0Li43ZDhkMjA4MzlkNDZlZSAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9rdm0vdmNwdS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3Yva3ZtL3ZjcHUuYwpAQCAtODAsNiAmIzQzOzgwLDcgQEAgc3RhdGljIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfY29udGV4dF9yZXNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAKIHN0YXRpYyB2b2lkIGt2bV9yaXNjdl9yZXNldF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBrdm1fc2JpX3Jlc2V0KQogewomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWJvb2wgbG9hZGVkOwogCiAJLyoqCkBAIC0xMDQsOCAmIzQzOzEwNSwxMCBAQCBzdGF0aWMgdm9pZCBrdm1fcmlzY3ZfcmVzZXRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wga3ZtX3NiaV9yZXNldCkKIAogCWt2bV9yaXNjdl92Y3B1X2FpYV9yZXNldCh2Y3B1KTsKIAomIzQzOwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDt2Y3B1LSZndDthcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7CiAJYml0bWFwX3plcm8odmNwdS0mZ3Q7YXJjaC5pcnFzX3BlbmRpbmcsIEtWTV9SSVNDVl9WQ1BVX05SX0lSUVMpOwogCWJpdG1hcF96ZXJvKHZjcHUtJmd0O2FyY2guaXJxc19wZW5kaW5nX21hc2ssIEtWTV9SSVNDVl9WQ1BVX05SX0lSUVMpOwomIzQzOwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3ZjcHUtJmd0O2FyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTsKIAogCWt2bV9yaXNjdl92Y3B1X3BtdV9yZXNldCh2Y3B1KTsKIApAQCAtMTUxLDYgJiM0MzsxNTQsNyBAQCBpbnQga3ZtX2FyY2hfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiAJLyogU2V0dXAgVkNQVSBoZmVuY2UgcXVldWUgKi8KIAlzcGluX2xvY2tfaW5pdCgmYW1wO3ZjcHUtJmd0O2FyY2guaGZlbmNlX2xvY2spOwomIzQzOwlyYXdfc3Bpbl9sb2NrX2luaXQoJmFtcDt2Y3B1LSZndDthcmNoLmlycXNfcGVuZGluZ19sb2NrKTsKIAogCXNwaW5fbG9ja19pbml0KCZhbXA7dmNwdS0mZ3Q7YXJjaC5yZXNldF9zdGF0ZS5sb2NrKTsKIApAQCAtMzUyLDEwICYjNDM7MzU2LDEzIEBAIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfZmx1c2hfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJc3RydWN0IGt2bV92Y3B1X2NzciAqY3NyID0gJmFtcDt2Y3B1LSZndDthcmNoLmd1ZXN0X2NzcjsKIAl1bnNpZ25lZCBsb25nIG1hc2ssIHZhbDsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmIChSRUFEX09OQ0UodmNwdS0mZ3Q7YXJjaC5pcnFzX3BlbmRpbmdfbWFza1swXSkpIHsKLQkJbWFzayA9IHhjaGdfYWNxdWlyZSgmYW1wO3ZjcHUtJmd0O2FyY2guaXJxc19wZW5kaW5nX21hc2tbMF0sIDApOwotCQl2YWwgPSBSRUFEX09OQ0UodmNwdS0mZ3Q7YXJjaC5pcnFzX3BlbmRpbmdbMF0pICZhbXA7IG1hc2s7CiYjNDM7CXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3ZjcHUtJmd0O2FyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTsKJiM0MzsJbWFzayA9IHZjcHUtJmd0O2FyY2guaXJxc19wZW5kaW5nX21hc2tbMF07CiYjNDM7CWlmIChtYXNrKSB7CiYjNDM7CQl2Y3B1LSZndDthcmNoLmlycXNfcGVuZGluZ19tYXNrWzBdID0gMDsKJiM0MzsJCXZhbCA9IHZjcHUtJmd0O2FyY2guaXJxc19wZW5kaW5nWzBdICZhbXA7IG1hc2s7CiAKIAkJY3NyLSZndDtodmlwICZhbXA7PSB+bWFzazsKIAkJY3NyLSZndDtodmlwIHw9IHZhbDsKQEAgLTM2MywxMSAmIzQzOzM3MCwxMyBAQCB2b2lkIGt2bV9yaXNjdl92Y3B1X2ZsdXNoX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiAJLyogRmx1c2ggQUlBIGhpZ2ggaW50ZXJydXB0cyAqLwogCWt2bV9yaXNjdl92Y3B1X2FpYV9mbHVzaF9pbnRlcnJ1cHRzKHZjcHUpOwomIzQzOwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3ZjcHUtJmd0O2FyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTsKIH0KIAogdm9pZCBrdm1fcmlzY3ZfdmNwdV9zeW5jX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXVuc2lnbmVkIGxvbmcgaHZpcDsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaCAqdiA9ICZhbXA7dmNwdS0mZ3Q7YXJjaDsKIAlzdHJ1Y3Qga3ZtX3ZjcHVfY3NyICpjc3IgPSAmYW1wO3ZjcHUtJmd0O2FyY2guZ3Vlc3RfY3NyOwogCkBAIC0zNzYsMjcgJiM0MzszODUsMjkgQEAgdm9pZCBrdm1fcmlzY3ZfdmNwdV9zeW5jX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiAJLyogU3luYy11cCBIVklQLlZTU0lQIGJpdCBjaGFuZ2VzIGRvZXMgYnkgR3Vlc3QgKi8KIAlodmlwID0gbmNzcl9yZWFkKENTUl9IVklQKTsKJiM0MzsJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZhbXA7di0mZ3Q7aXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTsKIAlpZiAoKGNzci0mZ3Q7aHZpcCBeIGh2aXApICZhbXA7ICgxVUwgJmx0OyZsdDsgSVJRX1ZTX1NPRlQpKSB7CiAJCWlmIChodmlwICZhbXA7ICgxVUwgJmx0OyZsdDsgSVJRX1ZTX1NPRlQpKSB7Ci0JCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoSVJRX1ZTX1NPRlQsCi0JCQkJCSAgICAgIHYtJmd0O2lycXNfcGVuZGluZ19tYXNrKSkKLQkJCQlzZXRfYml0KElSUV9WU19TT0ZULCB2LSZndDtpcnFzX3BlbmRpbmcpOwomIzQzOwkJCWlmICghX190ZXN0X2FuZF9zZXRfYml0KElSUV9WU19TT0ZULAomIzQzOwkJCQkJCXYtJmd0O2lycXNfcGVuZGluZ19tYXNrKSkKJiM0MzsJCQkJX19zZXRfYml0KElSUV9WU19TT0ZULCB2LSZndDtpcnFzX3BlbmRpbmcpOwogCQl9IGVsc2UgewotCQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KElSUV9WU19TT0ZULAotCQkJCQkgICAgICB2LSZndDtpcnFzX3BlbmRpbmdfbWFzaykpCi0JCQkJY2xlYXJfYml0KElSUV9WU19TT0ZULCB2LSZndDtpcnFzX3BlbmRpbmcpOwomIzQzOwkJCWlmICghX190ZXN0X2FuZF9zZXRfYml0KElSUV9WU19TT0ZULAomIzQzOwkJCQkJCXYtJmd0O2lycXNfcGVuZGluZ19tYXNrKSkKJiM0MzsJCQkJX19jbGVhcl9iaXQoSVJRX1ZTX1NPRlQsIHYtJmd0O2lycXNfcGVuZGluZyk7CiAJCX0KIAl9CiAKIAkvKiBTeW5jIHVwIHRoZSBIVklQLkxDT0ZJUCBiaXQgY2hhbmdlcyAob25seSBjbGVhcikgYnkgdGhlIGd1ZXN0ICovCiAJaWYgKChjc3ItJmd0O2h2aXAgXiBodmlwKSAmYW1wOyAoMVVMICZsdDsmbHQ7IElSUV9QTVVfT1ZGKSkgewogCQlpZiAoIShodmlwICZhbXA7ICgxVUwgJmx0OyZsdDsgSVJRX1BNVV9PVkYpKSAmYW1wOyZhbXA7Ci0JCSAgICAhdGVzdF9hbmRfc2V0X2JpdChJUlFfUE1VX09WRiwgdi0mZ3Q7aXJxc19wZW5kaW5nX21hc2spKQotCQkJY2xlYXJfYml0KElSUV9QTVVfT1ZGLCB2LSZndDtpcnFzX3BlbmRpbmcpOwomIzQzOwkJICAgICFfX3Rlc3RfYW5kX3NldF9iaXQoSVJRX1BNVV9PVkYsIHYtJmd0O2lycXNfcGVuZGluZ19tYXNrKSkKJiM0MzsJCQlfX2NsZWFyX2JpdChJUlFfUE1VX09WRiwgdi0mZ3Q7aXJxc19wZW5kaW5nKTsKIAl9CiAKIAkvKiBTeW5jLXVwIEFJQSBoaWdoIGludGVycnVwdHMgKi8KIAlrdm1fcmlzY3ZfdmNwdV9haWFfc3luY19pbnRlcnJ1cHRzKHZjcHUpOwomIzQzOwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3YtJmd0O2lycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7CiAKIAkvKiBTeW5jLXVwIHRpbWVyIENTUnMgKi8KIAlrdm1fcmlzY3ZfdmNwdV90aW1lcl9zeW5jKHZjcHUpOwpAQCAtNDA0LDYgJiM0Mzs0MTUsOCBAQCB2b2lkIGt2bV9yaXNjdl92Y3B1X3N5bmNfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAKIGludCBrdm1fcmlzY3ZfdmNwdV9zZXRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IGlycSkKIHsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsKIAkvKgogCSAqIFdlIG9ubHkgYWxsb3cgVlMtbW9kZSBzb2Z0d2FyZSwgdGltZXIsIGFuZCBleHRlcm5hbAogCSAqIGludGVycnVwdHMgd2hlbiBpcnEgaXMgb25lIG9mIHRoZSBsb2NhbCBpbnRlcnJ1cHRzCkBAIC00MTYsOSAmIzQzOzQyOSwxMCBAQCBpbnQga3ZtX3Jpc2N2X3ZjcHVfc2V0X2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBpcnEpCiAJICAgIGlycSAhPSBJUlFfUE1VX09WRikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlzZXRfYml0KGlycSwgdmNwdS0mZ3Q7YXJjaC5pcnFzX3BlbmRpbmcpOwotCXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOwotCXNldF9iaXQoaXJxLCB2Y3B1LSZndDthcmNoLmlycXNfcGVuZGluZ19tYXNrKTsKJiM0MzsJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZhbXA7dmNwdS0mZ3Q7YXJjaC5pcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpOwomIzQzOwlfX3NldF9iaXQoaXJxLCB2Y3B1LSZndDthcmNoLmlycXNfcGVuZGluZyk7CiYjNDM7CV9fc2V0X2JpdChpcnEsIHZjcHUtJmd0O2FyY2guaXJxc19wZW5kaW5nX21hc2spOwomIzQzOwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3ZjcHUtJmd0O2FyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTsKIAogCWt2bV92Y3B1X2tpY2sodmNwdSk7CiAKQEAgLTQyNyw2ICYjNDM7NDQxLDggQEAgaW50IGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgaXJxKQogCiBpbnQga3ZtX3Jpc2N2X3ZjcHVfdW5zZXRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IGlycSkKIHsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsKIAkvKgogCSAqIFdlIG9ubHkgYWxsb3cgVlMtbW9kZSBzb2Z0d2FyZSwgdGltZXIsIGNvdW50ZXIgb3ZlcmZsb3cgYW5kIGV4dGVybmFsCiAJICogaW50ZXJydXB0cyB3aGVuIGlycSBpcyBvbmUgb2YgdGhlIGxvY2FsIGludGVycnVwdHMKQEAgLTQzOSwyNiAmIzQzOzQ1NSwzMyBAQCBpbnQga3ZtX3Jpc2N2X3ZjcHVfdW5zZXRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IGlycSkKIAkgICAgaXJxICE9IElSUV9QTVVfT1ZGKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWNsZWFyX2JpdChpcnEsIHZjcHUtJmd0O2FyY2guaXJxc19wZW5kaW5nKTsKLQlzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTsKLQlzZXRfYml0KGlycSwgdmNwdS0mZ3Q7YXJjaC5pcnFzX3BlbmRpbmdfbWFzayk7CiYjNDM7CXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3ZjcHUtJmd0O2FyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTsKJiM0MzsJX19jbGVhcl9iaXQoaXJxLCB2Y3B1LSZndDthcmNoLmlycXNfcGVuZGluZyk7CiYjNDM7CV9fc2V0X2JpdChpcnEsIHZjcHUtJmd0O2FyY2guaXJxc19wZW5kaW5nX21hc2spOwomIzQzOwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3ZjcHUtJmd0O2FyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiAwOwogfQogCiBib29sIGt2bV9yaXNjdl92Y3B1X2hhc19pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IG1hc2spCiB7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgbG9uZyBpZTsKJiM0MzsJYm9vbCByZXQ7CiAKJiM0MzsJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZhbXA7dmNwdS0mZ3Q7YXJjaC5pcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpOwogCWllID0gKCh2Y3B1LSZndDthcmNoLmd1ZXN0X2Nzci52c2llICZhbXA7IFZTSVBfVkFMSURfTUFTSykKIAkJJmx0OyZsdDsgVlNJUF9UT19IVklQX1NISUZUKSAmYW1wOyAodW5zaWduZWQgbG9uZyltYXNrOwogCWllIHw9IHZjcHUtJmd0O2FyY2guZ3Vlc3RfY3NyLnZzaWUgJmFtcDsgfklSUV9MT0NBTF9NQVNLICZhbXA7CiAJCSh1bnNpZ25lZCBsb25nKW1hc2s7Ci0JaWYgKFJFQURfT05DRSh2Y3B1LSZndDthcmNoLmlycXNfcGVuZGluZ1swXSkgJmFtcDsgaWUpCi0JCXJldHVybiB0cnVlOwomIzQzOwlyZXQgPSB2Y3B1LSZndDthcmNoLmlycXNfcGVuZGluZ1swXSAmYW1wOyBpZTsKIAogCS8qIENoZWNrIEFJQSBoaWdoIGludGVycnVwdHMgKi8KLQlyZXR1cm4ga3ZtX3Jpc2N2X3ZjcHVfYWlhX2hhc19pbnRlcnJ1cHRzKHZjcHUsIG1hc2spOwomIzQzOwlpZiAoIXJldCkKJiM0MzsJCXJldCA9IGt2bV9yaXNjdl92Y3B1X2FpYV9oYXNfaW50ZXJydXB0cyh2Y3B1LCBtYXNrKTsKJiM0MzsJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDt2Y3B1LSZndDthcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiB9CiAKIHZvaWQgX19rdm1fcmlzY3ZfdmNwdV9wb3dlcl9vZmYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vdmNwdV9vbmVyZWcuYyBiL2FyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmMKaW5kZXggYmI5MjBlODkyM2M5MzAuLmNiYTM2ODI5NDRiNjk0IDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L2t2bS92Y3B1X29uZXJlZy5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmMKQEAgLTI5OCw2ICYjNDM7Mjk4LDcgQEAgc3RhdGljIGludCBrdm1fcmlzY3ZfdmNwdV9nZW5lcmFsX3NldF9jc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogewogCXN0cnVjdCBrdm1fdmNwdV9jc3IgKmNzciA9ICZhbXA7dmNwdS0mZ3Q7YXJjaC5ndWVzdF9jc3I7CiAJdW5zaWduZWQgbG9uZyByZWdzX21heCA9IHNpemVvZihzdHJ1Y3Qga3ZtX3Jpc2N2X2NzcikgLyBzaXplb2YodW5zaWduZWQgbG9uZyk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAocmVnX251bSAmZ3Q7PSByZWdzX21heCkKIAkJcmV0dXJuIC1FTk9FTlQ7CkBAIC0zMDksMTAgJiM0MzszMTAsMTQgQEAgc3RhdGljIGludCBrdm1fcmlzY3ZfdmNwdV9nZW5lcmFsX3NldF9jc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCQlyZWdfdmFsICZsdDsmbHQ7PSBWU0lQX1RPX0hWSVBfU0hJRlQ7CiAJfQogCi0JKCh1bnNpZ25lZCBsb25nICopY3NyKVtyZWdfbnVtXSA9IHJlZ192YWw7Ci0KLQlpZiAocmVnX251bSA9PSBLVk1fUkVHX1JJU0NWX0NTUl9SRUcoc2lwKSkKLQkJV1JJVEVfT05DRSh2Y3B1LSZndDthcmNoLmlycXNfcGVuZGluZ19tYXNrWzBdLCAwKTsKJiM0MzsJaWYgKHJlZ19udW0gPT0gS1ZNX1JFR19SSVNDVl9DU1JfUkVHKHNpcCkpIHsKJiM0MzsJCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3ZjcHUtJmd0O2FyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTsKJiM0MzsJCSgodW5zaWduZWQgbG9uZyAqKWNzcilbcmVnX251bV0gPSByZWdfdmFsOwomIzQzOwkJdmNwdS0mZ3Q7YXJjaC5pcnFzX3BlbmRpbmdfbWFza1swXSA9IDA7CiYjNDM7CQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3ZjcHUtJmd0O2FyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCSgodW5zaWduZWQgbG9uZyAqKWNzcilbcmVnX251bV0gPSByZWdfdmFsOwomIzQzOwl9CiAKIAlyZXR1cm4gMDsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDc6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ3NAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDUwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJJU0MtViBLVk0gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSBSSVNDLVYgS1ZNIGltcGxlbWVudGF0aW9uLiBJdCYjMzk7cyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlLCBhcyBpdCBzZWVtcyB0byBiZSBtb3ZpbmcgZnJvbSBhIGxvY2tsZXNzIGFwcHJvYWNoIHVzaW5nIGF0b21pYyBiaXQgb3BlcmF0aW9ucyBmb3IgaGFuZGxpbmcgYGlycXNfcGVuZGluZ2AgYW5kIGBpcnFzX3BlbmRpbmdfbWFza2AgYml0bWFwcyB0byB1c2luZyBhIGByYXdfc3BpbmxvY2tfdCBpcnFzX3BlbmRpbmdfbG9ja2Agd2l0aGluIGBzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaGAuIFRoaXMgcmVwbGFjZXMgdGhlIHByZXZpb3VzIG1ldGhvZCBvZiBzeW5jaHJvbml6YXRpb24gd2hpY2ggdXNlZCBhdG9taWMgYml0b3BzLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBhbmQgZGVmaW5pdGVseSB3YXJyYW50cyBzb21lIHNlcmlvdXMgZnV6emluZy4KCk15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHVuZGVyc3RhbmRpbmcgdGhlIHNjb3BlIG9mIHRoaXMgY2hhbmdlIGFuZCBpZGVudGlmeWluZyB0aGUga2V5IGZ1bmN0aW9ucyBhZmZlY3RlZC4gTGV0JiMzOTtzIHNlZSwgaXQmIzM5O3MgbW9kaWZ5aW5nIHNldmVyYWwgZmlsZXM6IGBhcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhgLCBgYXJjaC9yaXNjdi9rdm0vYWlhLmNgLCBgYXJjaC9yaXNjdi9rdm0vdmNwdS5jYCwgYW5kIGBhcmNoL3Jpc2N2L2t2bS92Y3B1X29uZXJlZy5jYC4gVGhhdCBnaXZlcyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuCgpOb3csIGxldCYjMzk7cyBpZGVudGlmeSB0aG9zZSBmdW5jdGlvbnMgc28gdGhleSBjYW4gYmUgYWRkZWQgdG8gdGhlIGBGb2N1c1N5bWJvbHNgIGxpc3QuIEZyb20gYGFpYS5jYCwgd2UmIzM5O3ZlIGdvdCBga3ZtX3Jpc2N2X3ZjcHVfYWlhX2ZsdXNoX2ludGVycnVwdHNgLCBga3ZtX3Jpc2N2X3ZjcHVfYWlhX3N5bmNfaW50ZXJydXB0c2AsIGBrdm1fcmlzY3ZfdmNwdV9haWFfaGFzX2ludGVycnVwdHNgLCBhbmQgYGt2bV9yaXNjdl92Y3B1X2FpYV9zZXRfY3NyYC4gTmV4dCwgZnJvbSBgdmNwdS5jYDogYGt2bV9yaXNjdl9yZXNldF92Y3B1YCwgYGt2bV9hcmNoX3ZjcHVfY3JlYXRlYCwgYGt2bV9yaXNjdl92Y3B1X2ZsdXNoX2ludGVycnVwdHNgLCBga3ZtX3Jpc2N2X3ZjcHVfc3luY19pbnRlcnJ1cHRzYCwgYGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHRgLCBga3ZtX3Jpc2N2X3ZjcHVfdW5zZXRfaW50ZXJydXB0YCwgYW5kIGBrdm1fcmlzY3ZfdmNwdV9oYXNfaW50ZXJydXB0c2AuIEZpbmFsbHksIGZyb20gYHZjcHVfb25lcmVnLmNgOiBga3ZtX3Jpc2N2X3ZjcHVfZ2VuZXJhbF9zZXRfY3NyYC4gR290IGl0LgoKQmVmb3JlIEkgZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIGl0c2VsZiwgSSBzaG91bGQgY2hlY2sgdGhlIEtjb25maWcgb3B0aW9ucyByZXF1aXJlZCBmb3IgdGhpcyBwYXRjaCB0byBiZSBlbmFibGVkLiBJdCYjMzk7cyBsb2NhdGVkIGluIGBhcmNoL3Jpc2N2L2t2bS9gLCBzbyBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgaW4gYGFyY2gvcmlzY3YvYCBhbmQgYGFyY2gvcmlzY3Yva3ZtL2AgdG8gZGV0ZXJtaW5lIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gVGhhdCYjMzk7bGwgYmUgaW1wb3J0YW50IGZvciByZXByb2R1Y3Rpb24gYW5kIGZ1enppbmcgZW52aXJvbm1lbnQgc2V0dXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDc6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3YvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctMTktXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1cbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctMjEtXHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwNzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjUwCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS1ZNIENvbmZpZ3VyYXRpb24gZm9yIFJJU0MtViBBcmNoaXRlY3R1cmUqKgoKT2theSwgc28gdGhlIGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGBLVk1gIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiB0aGlzIGlzIHRoZSAqb25seSogY29uZmlndXJhdGlvbiBpbnZvbHZlZC4gTGV0IG1lIGNoZWNrIGZvciBvdGhlcnMgdGhhdCBtaWdodCBiZSByZWxldmFudC4gVGhlIHBhdGNoIG1lbnRpb25zIGAjaWZkZWYgQ09ORklHXzMyQklUYCB3aXRoaW4gYGFyY2gvcmlzY3Yva3ZtL2FpYS5jYC4gTXkgaW5pdGlhbCByZWFjdGlvbiBpcyB0aGF0IGl0IG1pZ2h0IGJlIHRpZWQgdG8gYSAzMi1iaXQgYXJjaGl0ZWN0dXJlLiBIb3dldmVyLCBhIGNsb3NlciBsb29rIHN1Z2dlc3RzIHRoYXQmIzM5O3Mgbm90IHRoZSBjYXNlOyBpdCYjMzk7cyBqdXN0IGFuIGBpZmRlZmAuIFRoZSA2NC1iaXQgY29kZSBoYXMgY2hhbmdlcyBhcyB3ZWxsLCBzbyBpdCYjMzk7cyBub3QgZXhjbHVzaXZlbHkgZm9yIDMyLWJpdC4gVGh1cywgYENPTkZJR18zMkJJVGAgaXNuJiMzOTt0IGEgKnJlcXVpcmVtZW50KiBmb3IgdGhpcyBwYXRjaC4KCk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBzb3VyY2UgZmlsZXMgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gbG9naWMsIGluIHRoaXMgY2FzZSBgYXJjaC9yaXNjdi9rdm0vYWlhLmNgIGFuZCBgYXJjaC9yaXNjdi9rdm0vdmNwdS5jYC4gVGhlIGFpbSBoZXJlIGlzIHRvIHNlZSB3aGF0IHBvcnRpb25zIGFyZSBhY3R1YWxseSBhZmZlY3RlZCBieSBhbnkgcG90ZW50aWFsIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGFuZCBlbnN1cmUgZnVsbCBjb3ZlcmFnZSBpcyBnYWluZWQgZnJvbSB0aGUgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwNzoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthaWFcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL01ha2VmaWxlPTEwPW9iai0kKENPTkZJR19LVk0pICYjNDM7PSBrdm0ub1xuLS1cbmFyY2gvcmlzY3Yva3ZtL01ha2VmaWxlLTEyLSMgT3JkZXJlZCBhbHBoYWJldGljYWxseVxuYXJjaC9yaXNjdi9rdm0vTWFrZWZpbGU6MTM6a3ZtLXkgJiM0Mzs9IGFpYS5vXG5hcmNoL3Jpc2N2L2t2bS9NYWtlZmlsZS0xNC1rdm0teSAmIzQzOz0gYWlhX2FwbGljLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwNzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTQ0CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMjgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIEtWTSBDb25maWd1cmF0aW9uIGFuZCBJbnRlcnJ1cHQgSGFuZGxpbmcqKgoKT2theSwgc28gaXQgbG9va3MgbGlrZSBgS1ZNYCBpcyB0aGUgb25seSBjb25maWd1cmF0aW9uIEkgbmVlZCB0byBjb25zaWRlciBmb3IgdGhpcy4gVGltZSB0byBnZXQgbGFzZXItZm9jdXNlZCBvbiB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zLiBMZXQgbWUgZmlsdGVyIHRob3NlIG91dCB0byBtYWtlIHRoaXMgbWFuYWdlYWJsZS4gQWxyaWdodCwgaGVyZSYjMzk7cyBhIHdvcmtpbmcgbGlzdDogYGt2bV9yaXNjdl92Y3B1X2FpYV9mbHVzaF9pbnRlcnJ1cHRzYCwgYGt2bV9yaXNjdl92Y3B1X2FpYV9zeW5jX2ludGVycnVwdHNgLCBga3ZtX3Jpc2N2X3ZjcHVfYWlhX2hhc19pbnRlcnJ1cHRzYCwgYGt2bV9yaXNjdl92Y3B1X2FpYV9zZXRfY3NyYCwgYGt2bV9yaXNjdl9yZXNldF92Y3B1YCwgYGt2bV9hcmNoX3ZjcHVfY3JlYXRlYCwgYGt2bV9yaXNjdl92Y3B1X2ZsdXNoX2ludGVycnVwdHNgLCBga3ZtX3Jpc2N2X3ZjcHVfc3luY19pbnRlcnJ1cHRzYCwgYGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHRgLCBga3ZtX3Jpc2N2X3ZjcHVfdW5zZXRfaW50ZXJydXB0YCwgYGt2bV9yaXNjdl92Y3B1X2hhc19pbnRlcnJ1cHRzYCwgYW5kIGBrdm1fcmlzY3ZfdmNwdV9nZW5lcmFsX3NldF9jc3JgLgoKTm93LCBJJiMzOTttIHRoaW5raW5nIHNvbWUgb2YgdGhlc2UgYXJlIHByb2JhYmx5IGhvdCBwYXRocywgc3BlY2lmaWNhbGx5LCBga3ZtX3Jpc2N2X3ZjcHVfZmx1c2hfaW50ZXJydXB0c2AsIGBrdm1fcmlzY3ZfdmNwdV9zeW5jX2ludGVycnVwdHNgLCBhbmQgYGt2bV9yaXNjdl92Y3B1X2hhc19pbnRlcnJ1cHRzYCBqdW1wIG91dCBpbW1lZGlhdGVseS4gVGhlc2UgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cyBmb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgaW4gYSB2aXJ0dWFsaXplZCBpbnRlcnJ1cHQgc3lzdGVtLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gY2hlY2sgaWYgdGhlc2UgYXJlIGludm9rZWQgZGlyZWN0bHkgd2l0aGluIHRoZSBWTSBleGl0IGxvb3AuIFRoYXQmIzM5O2xsIGJlIGEga2V5IGluZGljYXRvciBvZiB0aGVpciBwb3RlbnRpYWwgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA3OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9yaXNjdl92Y3B1X2ZsdXNoX2ludGVycnVwdHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vdmNwdS5jPTM1MD1pbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcmVncyAqcmVncylcbi0tXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmMtMzU0LVxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jOjM1NTp2b2lkIGt2bV9yaXNjdl92Y3B1X2ZsdXNoX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jLTM1Ni17XG4tLVxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jPTg1Mz1pbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYy05MzgtXHRcdCAqL1xuYXJjaC9yaXNjdi9rdm0vdmNwdS5jOjkzOTpcdFx0a3ZtX3Jpc2N2X3ZjcHVfZmx1c2hfaW50ZXJydXB0cyh2Y3B1KTtcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYy05NDAtXG4tLVxuYXJjaC9yaXNjdi9rdm0vdmNwdV9vbmVyZWcuYz0yNzM9c3RhdGljIGludCBrdm1fcmlzY3ZfdmNwdV9nZW5lcmFsX2dldF9jc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmMtMjg1LVx0aWYgKHJlZ19udW0gPT0gS1ZNX1JFR19SSVNDVl9DU1JfUkVHKHNpcCkpIHtcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmM6Mjg2Olx0XHRrdm1fcmlzY3ZfdmNwdV9mbHVzaF9pbnRlcnJ1cHRzKHZjcHUpO1xuYXJjaC9yaXNjdi9rdm0vdmNwdV9vbmVyZWcuYy0yODctXHRcdCpvdXRfdmFsID0gKGNzci1cdTAwM2VodmlwIFx1MDAzZVx1MDAzZSBWU0lQX1RPX0hWSVBfU0hJRlQpIFx1MDAyNiBWU0lQX1ZBTElEX01BU0s7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDc6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTI3MgoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3NpbmcgYXMgYW4gZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIEludGVycnVwdCBIYW5kbGluZyB3aXRoaW4gdGhlIEtWTS9SSVNDLVYgVmlydHVhbCBNYWNoaW5lKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUuLi4gU28sIGZyb20gd2hhdCBJJiMzOTttIHBpZWNpbmcgdG9nZXRoZXIsIGJhc2VkIG9uIGhvdyB0aGUgY29kZSBmbG93cywgaXQgc2VlbXMgcHJldHR5IGNsZWFyIHRoYXQgYGt2bV9yaXNjdl92Y3B1X2ZsdXNoX2ludGVycnVwdHNgICpkZWZpbml0ZWx5KiBnZXRzIGNhbGxlZCB3aXRoaW4gYGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuYC4gVGhhdCYjMzk7cyBub3QgZW50aXJlbHkgc3VycHJpc2luZywgZ2l2ZW4gdGhlIHJvbGUgb2YgYGlvY3RsX3J1bmAgYXMgdGhlIG1haW4gbG9vcC4gVGhhdCBtYWtlcyBzZW5zZSBmb3IgaGFuZGxpbmcgcGVuZGluZyBpbnRlcnJ1cHRzLCBwcmV2ZW50aW5nIHN0YWxlIGludGVycnVwdHMsIGFuZCBlbnN1cmluZyB0aGUgVkNQVSBvcGVyYXRlcyBjbGVhbmx5LgoKQW5kLCB0aGlua2luZyBhYm91dCBob3cgaW50ZXJydXB0cyBhcmUgaGFuZGxlZCBpbiB0aGlzIGVudmlyb25tZW50LCBJJiMzOTttIHZpcnR1YWxseSBjZXJ0YWluIGBrdm1fcmlzY3ZfdmNwdV9zeW5jX2ludGVycnVwdHNgIGlzIGFsc28gbGlrZWx5IGNhbGxlZCB3aXRoaW4gdGhhdCBzYW1lIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAgZnVuY3Rpb24uIEl0JiMzOTtzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIGVuc3VyZSB0aGF0IHRoZSBWQ1BVJiMzOTtzIGludGVycnVwdCBzdGF0ZSBpcyBzeW5jaHJvbml6ZWQgd2l0aCB0aGUgaG9zdCwgaXNuJiMzOTt0IGl0PyBHb3R0YSBtYWtlIHN1cmUgZXZlcnl0aGluZyYjMzk7cyBpbiBzeW5jIHRvIGF2b2lkIGFueSB3ZWlyZG5lc3Mgd2l0aCB0aGUgZ3Vlc3QuIEdvdHRhIGtlZXAgdGhhdCBpbnRlcnJ1cHQgcGlwZWxpbmUgY2xlYW4hIFNvLCB0aG9zZSB0d28gYXJlIHByb2JhYmx5IGEga2V5IHBhcnQgb2YgdGhlIHJ1biBsb29wIGludGVycnVwdCBwcm9jZXNzaW5nIHN0cmF0ZWd5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwNzoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fcmlzY3ZfdmNwdV9zeW5jX2ludGVycnVwdHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vdmNwdS5jPTM1NT12b2lkIGt2bV9yaXNjdl92Y3B1X2ZsdXNoX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYy0zNzUtXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmM6Mzc2OnZvaWQga3ZtX3Jpc2N2X3ZjcHVfc3luY19pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYy0zNzcte1xuLS1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYz04NTM9aW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmMtOTcxLVx0XHQvKiBTeW5jdXAgaW50ZXJydXB0cyBzdGF0ZSB3aXRoIEhXICovXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmM6OTcyOlx0XHRrdm1fcmlzY3ZfdmNwdV9zeW5jX2ludGVycnVwdHModmNwdSk7XG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmMtOTczLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwNzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTAwCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBob3QgcGF0aHMgcmVsYXRlZCB0byBSSVNDLVYgS1ZNIGludGVycnVwdHMuCgoqKkRpdmluZyBEZWVwIGludG8gS1ZNIFJJU0MtViBJbnRlcnJ1cHQgSGFuZGxpbmcqKgoKUmlnaHQsIGxldCYjMzk7cyBzZWUsIGBrdm1fcmlzY3ZfdmNwdV9mbHVzaF9pbnRlcnJ1cHRzYCBhbmQgYGt2bV9yaXNjdl92Y3B1X3N5bmNfaW50ZXJydXB0c2AgYXJlIGtub3duIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIOKAkyBubyBzdXJwcmlzZXMgdGhlcmUsIHRoZXkmIzM5O3JlIGFsd2F5cyBnb2luZyB0byBiZS4gVGhleSYjMzk7cmUgY2VudHJhbCB0byBpbnRlcnJ1cHQgZGVsaXZlcnksIHNvIHdlJiMzOTtyZSBjb25zdGFudGx5IG9wdGltaXppbmcgdGhvc2UuIEJ1dCwgSSYjMzk7bSB0aGlua2luZywgd2hhdCBhYm91dCBga3ZtX3Jpc2N2X3ZjcHVfaGFzX2ludGVycnVwdHNgPyBJdCBpcyBwcm9iYWJseSBsZXNzIG9mIGFuIGlzc3VlLCBidXQgbWF5YmUgd2UgaGF2ZSBhbiBvcHBvcnR1bml0eSB0byBvcHRpbWl6ZSB0aGF0LiBXZSBtaWdodCBiZSBhYmxlIHRvIG1ha2Ugc29tZSBnYWlucywgZXZlbiBpZiB0aGV5JiMzOTtyZSBzbWFsbC4gSXQmIzM5O3MgdGhlIGtpbmQgb2YgdGhpbmcgdGhhdCBjb3VsZCBjb250cmlidXRlIHRvIGEgY3VtdWxhdGl2ZSBpbXByb3ZlbWVudCBvdmVyYWxsLiBBbHdheXMgaW1wb3J0YW50IHRvIHJlLWV2YWx1YXRlIHRoZSBsb3cgaGFuZ2luZyBmcnVpdCwgZXZlbiB0aG91Z2ggaXQmIzM5O3MgbGVzcyBpbXBhY3RmdWwgdGhhbiB0aGUgYmlnIG9uZXMuIEdvdHRhIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgbm90IHNwZW5kaW5nIHRvbyBtdWNoIHRpbWUgaGVyZSwgaG93ZXZlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDc6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3Jpc2N2X3ZjcHVfaGFzX2ludGVycnVwdHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vdmNwdS5jPTIyMT1pbnQga3ZtX2FyY2hfdmNwdV9ydW5uYWJsZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmMtMjIyLXtcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYzoyMjM6XHRyZXR1cm4gKGt2bV9yaXNjdl92Y3B1X2hhc19pbnRlcnJ1cHRzKHZjcHUsIC0xVUxMKSBcdTAwMjZcdTAwMjZcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYy0yMjQtXHRcdCFrdm1fcmlzY3ZfdmNwdV9zdG9wcGVkKHZjcHUpIFx1MDAyNlx1MDAyNiAhdmNwdS1cdTAwM2VhcmNoLnBhdXNlKTtcbi0tXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmM9NDQyPWludCBrdm1fcmlzY3ZfdmNwdV91bnNldF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgaXJxKVxuLS1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYy00NjUtXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmM6NDY2OmJvb2wga3ZtX3Jpc2N2X3ZjcHVfaGFzX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgbWFzaylcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYy00Njcte1xuLS1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfdGltZXIuYz0xMzA9Ym9vbCBrdm1fcmlzY3ZfdmNwdV90aW1lcl9wZW5kaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3RpbWVyLmMtMTM1LVx0aWYgKCFrdm1fcmlzY3ZfZGVsdGFfY3ljbGVzMm5zKHQtXHUwMDNlbmV4dF9jeWNsZXMsIGd0LCB0KSB8fFxuYXJjaC9yaXNjdi9rdm0vdmNwdV90aW1lci5jOjEzNjpcdCAgICBrdm1fcmlzY3ZfdmNwdV9oYXNfaW50ZXJydXB0cyh2Y3B1LCAxVUwgXHUwMDNjXHUwMDNjIElSUV9WU19USU1FUikpXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3RpbWVyLmMtMTM3LVx0XHRyZXR1cm4gdHJ1ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDc6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2NzcKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgUG90ZW50aWFsIEJvdHRsZW5lY2tzIGluIEtWTS9SSVNDLVYgUGVyZm9ybWFuY2UqKgoKQWxyaWdodCwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gd2l0aGluIHRoZSBSSVNDLVYgS1ZNIGltcGxlbWVudGF0aW9uLiBJJiMzOTt2ZSBiZWVuIGZvY3VzaW5nIG9uIHRoZSBjcml0aWNhbCBwYXRocywgYW5kIGBrdm1fYXJjaF92Y3B1X3J1bm5hYmxlYCBpcyBkZWZpbml0ZWx5IHNjcmVhbWluZyBvdXQgYXMgYSBwb3RlbnRpYWwgYm90dGxlbmVjay4gV2UmIzM5O3JlIHNwZW5kaW5nIGEgbG90IG9mIHRpbWUgdGhlcmUsIHNvIGl0IGRlbWFuZHMgY2FyZWZ1bCBzY3J1dGlueS4KCkJ1dCwgSSBhbHNvIG5lZWQgdG8gYnJvYWRlbiB0aGUgZm9jdXMuIFdlIHNob3VsZG4mIzM5O3QgbmVnbGVjdCBvdGhlciBwb3RlbnRpYWxseSBoaWdoLWZyZXF1ZW5jeSByb3V0aW5lcy4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBiZSBsb29raW5nIGF0IGBrdm1fcmlzY3ZfdmNwdV9zZXRfaW50ZXJydXB0YCBhbmQgYGt2bV9yaXNjdl92Y3B1X3Vuc2V0X2ludGVycnVwdGAuIEludGVycnVwdCBoYW5kbGluZyBpcyBmdW5kYW1lbnRhbCwgYW5kIGlmIHRob3NlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGZyZXF1ZW50bHksIHRoZXkgY291bGQgZWFzaWx5IGJlY29tZSBwZXJmb3JtYW5jZSBsaW1pdGVycy4gSSBuZWVkIHRvIHByb2ZpbGUgYW5kIGJlbmNobWFyayB0aGVzZSBhcmVhcyBhcyB3ZWxsLCB0byBnZXQgYSBob2xpc3RpYyB2aWV3IG9mIHRoZSBwZXJmb3JtYW5jZSBsYW5kc2NhcGUuIFRoZXJlIG1pZ2h0IGJlIHNvbWUgbG93LWhhbmdpbmcgZnJ1aXQgaW4gdGhlcmUuIEdvdHRhIGxvb2sgZXZlcnl3aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDc6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3Jpc2N2X3ZjcHVfc2V0X2ludGVycnVwdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS9haWFfaW1zaWMuYz02MTQ9c3RhdGljIHZvaWQgaW1zaWNfc3dmaWxlX2V4dGlycV91cGRhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvcmlzY3Yva3ZtL2FpYV9pbXNpYy5jLTYyOS1cdCAgICBpbXNpY19tcmlmX3RvcGVpKG1yaWYsIGltc2ljLVx1MDAzZW5yX2VpeCwgaW1zaWMtXHUwMDNlbnJfbXNpcykpXG5hcmNoL3Jpc2N2L2t2bS9haWFfaW1zaWMuYzo2MzA6XHRcdGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHQodmNwdSwgSVJRX1ZTX0VYVCk7XG5hcmNoL3Jpc2N2L2t2bS9haWFfaW1zaWMuYy02MzEtXHRlbHNlXG4tLVxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jPTI0OT1sb25nIGt2bV9hcmNoX3ZjcHVfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCxcbi0tXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmMtMjYxLVx0XHRpZiAoaXJxLmlycSA9PSBLVk1fSU5URVJSVVBUX1NFVClcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYzoyNjI6XHRcdFx0cmV0dXJuIGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHQodmNwdSwgSVJRX1ZTX0VYVCk7XG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmMtMjYzLVx0XHRlbHNlXG4tLVxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jPTM3Nj12b2lkIGt2bV9yaXNjdl92Y3B1X3N5bmNfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jLTQxNS1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYzo0MTY6aW50IGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgaXJxKVxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jLTQxNy17XG4tLVxuYXJjaC9yaXNjdi9rdm0vdmNwdV9wbXUuYz0yOTM9c3RhdGljIHZvaWQga3ZtX3Jpc2N2X3BtdV9vdmVyZmxvdyhzdHJ1Y3QgcGVyZl9ldmVudCAqcGVyZl9ldmVudCxcbi0tXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3BtdS5jLTMyOC1cdHNldF9iaXQocG1jLVx1MDAzZWlkeCwga3ZwbXUtXHUwMDNlcG1jX292ZXJmbG93bik7XG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3BtdS5jOjMyOTpcdGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHQodmNwdSwgSVJRX1BNVV9PVkYpO1xuYXJjaC9yaXNjdi9rdm0vdmNwdV9wbXUuYy0zMzAtXG4tLVxuYXJjaC9yaXNjdi9rdm0vdmNwdV9zYmlfcmVwbGFjZS5jPTQ1PXN0YXRpYyBpbnQga3ZtX3NiaV9leHRfaXBpX2hhbmRsZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3J1biAqcnVuLFxuLS1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfc2JpX3JlcGxhY2UuYy03MS1cdFx0fVxuYXJjaC9yaXNjdi9rdm0vdmNwdV9zYmlfcmVwbGFjZS5jOjcyOlx0XHRyZXQgPSBrdm1fcmlzY3ZfdmNwdV9zZXRfaW50ZXJydXB0KHRtcCwgSVJRX1ZTX1NPRlQpO1xuYXJjaC9yaXNjdi9rdm0vdmNwdV9zYmlfcmVwbGFjZS5jLTczLVx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfc2JpX3YwMS5jPTE2PXN0YXRpYyBpbnQga3ZtX3NiaV9leHRfdjAxX2hhbmRsZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3J1biAqcnVuLFxuLS1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfc2JpX3YwMS5jLTU5LVx0XHRcdFx0Y29udGludWU7XG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV92MDEuYzo2MDpcdFx0XHRyZXQgPSBrdm1fcmlzY3ZfdmNwdV9zZXRfaW50ZXJydXB0KHJ2Y3B1LCBJUlFfVlNfU09GVCk7XG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV92MDEuYy02MS1cdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfdGltZXIuYz00Mz1zdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQga3ZtX3Jpc2N2X3ZjcHVfaHJ0aW1lcl9leHBpcmVkKHN0cnVjdCBocnRpbWVyICpoKVxuLS1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfdGltZXIuYy01Ni1cdHQtXHUwMDNlbmV4dF9zZXQgPSBmYWxzZTtcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfdGltZXIuYzo1NzpcdGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHQodmNwdSwgSVJRX1ZTX1RJTUVSKTtcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfdGltZXIuYy01OC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDc6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwNjQKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQ29uc2lkZXJpbmcgSW50ZXJydXB0IEhhbmRsaW5nIGluIHRoZSBSSVNDLVYgS1ZNIEltcGxlbWVudGF0aW9uKioKClJpZ2h0LCBga3ZtX3Jpc2N2X3ZjcHVfc2V0X2ludGVycnVwdGAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQsIGFzIEkgcmVjYWxsLCBmcm9tIGEgdmFyaWV0eSBvZiBzb3VyY2VzIHdpdGhpbiB0aGUgS1ZNL1JJU0MtViBpbXBsZW1lbnRhdGlvbiDigJMgaW9jdGwgY2FsbHMsIHRpbWVyIGV2ZW50cywgaW50ZXItcHJvY2Vzc29yIGludGVycnVwdHMgKElQSXMpLCBldmVuIFBNVSBvdmVyZmxvdyBldmVudHMsIGFtb25nIG90aGVycy4gVGhhdCBtYWtlcyBzZW5zZSwgaXTigJlzIHRoZSBwcmltYXJ5IG1lY2hhbmlzbSB0byBpbmplY3QgYW4gaW50ZXJydXB0IGludG8gYSB2Q1BVLgoKQnV0IHdhaXQgYSBzZWNvbmQuLi4gSWYgd2UgaGF2ZSBhIGNsZWFyIGZ1bmN0aW9uIHRvICpzZXQqIGFuIGludGVycnVwdCwgd2hhdCYjMzk7cyB0aGUgY29ycmVzcG9uZGluZyBmdW5jdGlvbiB0byAqdW5zZXQqIGFuIGludGVycnVwdD8gV2hlcmUgYW5kIHdoZW4gZG9lcyBga3ZtX3Jpc2N2X3ZjcHVfdW5zZXRfaW50ZXJydXB0YCBjb21lIGludG8gcGxheSwgb3IgaXMgdGhlcmUgYW4gYWx0ZXJuYXRpdmUgbWVjaGFuaXNtIGZvciBjbGVhcmluZyBhbiBpbnRlcnJ1cHQgdGhhdCBJIHNob3VsZCBrZWVwIGluIG1pbmQ/IEkgbmVlZCB0byB0aGluayB0aGlzIHRocm91Z2guIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGludGVycnVwdCBsaWZlY3ljbGUgbWFuYWdlbWVudC4gSXMgaXQgaGFuZGxlZCBpbXBsaWNpdGx5IHRocm91Z2ggb3RoZXIgbWVjaGFuaXNtcywgbGlrZSB3aGVuIHRoZSB2Q1BVIGFja25vd2xlZGdlcyB0aGUgaW50ZXJydXB0LCBvciBkbyB3ZSBoYXZlIGFuIGV4cGxpY2l0IGZ1bmN0aW9uIHNwZWNpZmljYWxseSBmb3IgZGUtYXNzZXJ0aW5nIGFuIGludGVycnVwdD8gSSBzaG91bGQgcHJvYmFibHkgcmV2aWV3IHRoZSBpbnRlcnJ1cHQgaGFuZGxpbmcgY29kZSBwYXRoIGFuZCBjb250cm9sIGZsb3cgbW9yZSBjYXJlZnVsbHkgdG8gYmUgc3VyZSBJIHVuZGVyc3RhbmQgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDc6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3Jpc2N2X3ZjcHVfdW5zZXRfaW50ZXJydXB0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL2FpYV9pbXNpYy5jPTYxND1zdGF0aWMgdm9pZCBpbXNpY19zd2ZpbGVfZXh0aXJxX3VwZGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9yaXNjdi9rdm0vYWlhX2ltc2ljLmMtNjMxLVx0ZWxzZVxuYXJjaC9yaXNjdi9rdm0vYWlhX2ltc2ljLmM6NjMyOlx0XHRrdm1fcmlzY3ZfdmNwdV91bnNldF9pbnRlcnJ1cHQodmNwdSwgSVJRX1ZTX0VYVCk7XG5hcmNoL3Jpc2N2L2t2bS9haWFfaW1zaWMuYy02MzMtXG4tLVxuYXJjaC9yaXNjdi9rdm0vYWlhX2ltc2ljLmM9NjM3PXN0YXRpYyB2b2lkIGltc2ljX3N3ZmlsZV9yZWFkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBjbGVhcixcbi0tXG5hcmNoL3Jpc2N2L2t2bS9haWFfaW1zaWMuYy02NTEtXHRcdG1lbXNldChpbXNpYy1cdTAwM2Vzd2ZpbGUsIDAsIHNpemVvZigqaW1zaWMtXHUwMDNlc3dmaWxlKSk7XG5hcmNoL3Jpc2N2L2t2bS9haWFfaW1zaWMuYzo2NTI6XHRcdGt2bV9yaXNjdl92Y3B1X3Vuc2V0X2ludGVycnVwdCh2Y3B1LCBJUlFfVlNfRVhUKTtcbmFyY2gvcmlzY3Yva3ZtL2FpYV9pbXNpYy5jLTY1My1cdH1cbi0tXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmM9MjQ5PWxvbmcga3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLFxuLS1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYy0yNjMtXHRcdGVsc2VcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYzoyNjQ6XHRcdFx0cmV0dXJuIGt2bV9yaXNjdl92Y3B1X3Vuc2V0X2ludGVycnVwdCh2Y3B1LCBJUlFfVlNfRVhUKTtcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYy0yNjUtXHR9XG4tLVxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jPTQxNj1pbnQga3ZtX3Jpc2N2X3ZjcHVfc2V0X2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBpcnEpXG4tLVxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jLTQ0MS1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYzo0NDI6aW50IGt2bV9yaXNjdl92Y3B1X3Vuc2V0X2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBpcnEpXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmMtNDQzLXtcbi0tXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV92MDEuYz0xNj1zdGF0aWMgaW50IGt2bV9zYmlfZXh0X3YwMV9oYW5kbGVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKnJ1bixcbi0tXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV92MDEuYy00NS1cdGNhc2UgU0JJX0VYVF8wXzFfQ0xFQVJfSVBJOlxuYXJjaC9yaXNjdi9rdm0vdmNwdV9zYmlfdjAxLmM6NDY6XHRcdHJldCA9IGt2bV9yaXNjdl92Y3B1X3Vuc2V0X2ludGVycnVwdCh2Y3B1LCBJUlFfVlNfU09GVCk7XG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV92MDEuYy00Ny1cdFx0YnJlYWs7XG4tLVxuYXJjaC9yaXNjdi9rdm0vdmNwdV90aW1lci5jPTg1PXN0YXRpYyBpbnQga3ZtX3Jpc2N2X3ZjcHVfdXBkYXRlX2hydGltZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgbmN5Y2xlcylcbi0tXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3RpbWVyLmMtOTMtXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3RpbWVyLmM6OTQ6XHRrdm1fcmlzY3ZfdmNwdV91bnNldF9pbnRlcnJ1cHQodmNwdSwgSVJRX1ZTX1RJTUVSKTtcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfdGltZXIuYy05NS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDc6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyOTAKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhc3Nlc3NtZW50IG9mIHRoZSBzaXR1YXRpb246CgoqKlRhcmdldGluZyBJbnRlcnJ1cHQgSGFuZGxpbmcgJmFtcDsgQ1NSIFVwZGF0ZXMgaW4gdGhlIFJJU0MtViBLVk0gSW1wbGVtZW50YXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIG1vc3QgcmVsZXZhbnQgZnVuY3Rpb25zIGZvciB0aGlzIHBhcnRpY3VsYXIgaXNzdWUuIEZyb20gbXkgZXhwZXJpZW5jZSB3aXRoIHRoZSBLVk0gUklTQy1WIGNvZGUsIGBrdm1fcmlzY3ZfdmNwdV9zZXRfaW50ZXJydXB0YCBhbmQgYGt2bV9yaXNjdl92Y3B1X3Vuc2V0X2ludGVycnVwdGAgYXJlIGRlZmluaXRlbHkgc3Ryb25nIGNvbnRlbmRlcnMgZm9yIGludmVzdGlnYXRpb24uIFRoZXkmIzM5O3JlIGNlbnRyYWwgdG8gaG93IGludGVycnVwdHMgYXJlIG1hbmFnZWQgd2l0aGluIHRoZSB2aXJ0dWFsIENQVSBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyB0aGVyZS4gQmV5b25kIGludGVycnVwdCBzZXR0aW5nIGFuZCB1bnNldHRpbmcsIEkgc2hvdWxkIGxvb2sgYXQgaG93IENTUiB1cGRhdGVzIGFyZSBpbXBsZW1lbnRlZC4KClRoYXQgYnJpbmdzIG1lIHRvIGBrdm1fcmlzY3ZfdmNwdV9haWFfc2V0X2NzcmAgYW5kIGBrdm1fcmlzY3ZfdmNwdV9nZW5lcmFsX3NldF9jc3JgLiBUaGVzZSBzZWVtIGxpa2UgdGhleSBjb3VsZCBiZSB2ZXJ5IGltcG9ydGFudCwgdG9vLiBJIG5lZWQgdG8gY2hlY2sgaG93IHRoZSBBSUEtcmVsYXRlZCBDU1JzIGFyZSBiZWluZyBoYW5kbGVkLiBUaGVzZSBjb3VsZCBiZSBpbnZvbHZlZCwgc3BlY2lmaWNhbGx5IHRoZSBBSUEgQ1NScy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYGt2bV9yaXNjdl92Y3B1X2FpYV9zZXRfY3NyYC4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoYXQgZnVuY3Rpb24gYW5kIHRyYWNlIHRoZSBkYXRhIGZsb3c7IHRoYXQgaXMgd2hlcmUgSSYjMzk7bGwgYmVnaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA3OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9yaXNjdl92Y3B1X2FpYV9zZXRfY3NyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL2FpYS5jPTE5MD1pbnQga3ZtX3Jpc2N2X3ZjcHVfYWlhX2dldF9jc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gvcmlzY3Yva3ZtL2FpYS5jLTIxMC1cbmFyY2gvcmlzY3Yva3ZtL2FpYS5jOjIxMTppbnQga3ZtX3Jpc2N2X3ZjcHVfYWlhX3NldF9jc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuYXJjaC9yaXNjdi9rdm0vYWlhLmMtMjEyLVx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIHJlZ19udW0sXG4tLVxuYXJjaC9yaXNjdi9rdm0vdmNwdV9vbmVyZWcuYz00MDI9c3RhdGljIGludCBrdm1fcmlzY3ZfdmNwdV9zZXRfcmVnX2NzcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC9yaXNjdi9rdm0vdmNwdV9vbmVyZWcuYy00MjUtXHRjYXNlIEtWTV9SRUdfUklTQ1ZfQ1NSX0FJQTpcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmM6NDI2Olx0XHRyYyA9IGt2bV9yaXNjdl92Y3B1X2FpYV9zZXRfY3NyKHZjcHUsIHJlZ19udW0sIHJlZ192YWwpO1xuYXJjaC9yaXNjdi9rdm0vdmNwdV9vbmVyZWcuYy00MjctXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwNzoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5ODcKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA2NDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgRnV6emluZyBUYXJnZXQgU2VsZWN0aW9uIGZvciBSSVNDLVYgS1ZNIEludGVycnVwdCBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGZ1enppbmcgdGhpcyBSSVNDLVYgS1ZNIGludGVycnVwdCBoYW5kbGluZyBjaGFuZ2UsIHdoaWNoIGludm9sdmVzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYSBzcGlubG9jayB0byByZXBsYWNlIGxvY2tsZXNzIGF0b21pYyBiaXQgb3BlcmF0aW9ucy4gVGhlIGdvYWwgaXMgdG8gZm9jdXMgb24gZnVuY3Rpb25zIHRoYXQgZGlyZWN0bHkgaW50ZXJhY3Qgd2l0aCB0aGUgbmV3bHkgYWRkZWQgbG9jayBhbmQgbW9kaWZpZWQgYml0bWFwcy4gQmFzZWQgb24gdGhlIGNvZGUsIGBrdm1fcmlzY3ZfdmNwdV9nZW5lcmFsX3NldF9jc3JgIGlzIGNhbGxlZCBmcm9tIGBrdm1fcmlzY3ZfdmNwdV9zZXRfcmVnX2NzcmAsIHdoaWNoLCBjb252ZW5pZW50bHksIGlzIHRyaWdnZXJlZCBieSB0aGUgYEtWTV9TRVRfT05FX1JFR2AgaW9jdGwuIFRoaXMgaW9jdGwgcGF0aCBpcyBpZGVhbCBmb3IgZnV6emluZy4KCkxldCYjMzk7cyBicmVhayBkb3duIG15IHRhcmdldCBzZWxlY3Rpb24gcHJvY2Vzcy4gRmlyc3QsIEkgd2FudCB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IGFyZSBhY2Nlc3NpYmxlIGFuZCBhZmZlY3RlZCBieSB0aGUgY2hhbmdlcy4gSSYjMzk7dmUgcGlucG9pbnRlZCBhIGZldzoKCiogICBga3ZtX3Jpc2N2X3ZjcHVfYWlhX3NldF9jc3JgCiogICBga3ZtX3Jpc2N2X3ZjcHVfZ2VuZXJhbF9zZXRfY3NyYAoqICAgYGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHRgCiogICBga3ZtX3Jpc2N2X3ZjcHVfdW5zZXRfaW50ZXJydXB0YAoKVGhlc2UgYXJlbiYjMzk7dCB0aGUgYWJzb2x1dGUgaG90dGVzdCBwYXRocywgbGlrZSB0aGUgVk0gZXhpdCBsb29wLCB3aGljaCBpcyBhIGtleSBjb25zaWRlcmF0aW9uLiBJIHdhbnQgdG8gYXZvaWQgZnVuY3Rpb25zIHRoYXQgYXJlIHBhcnQgb2YgdGhlIGNvcmUgVk0gZXhpdCBsb29wIHRvIGdldCBhIGJyb2FkZXIgdGVzdCBkaXN0cmlidXRpb24uCgpOb3csIEkgY29uc2lkZXJlZCBga3ZtX3Jpc2N2X3ZjcHVfZmx1c2hfaW50ZXJydXB0c2AgYW5kIGBrdm1fcmlzY3ZfdmNwdV9zeW5jX2ludGVycnVwdHNgLCBidXQgdGhvc2UgYXJlIHJpZ2h0IGluIHRoZSBWTSBleGl0IGxvb3AsIGFuZCBJIHdhbnQgdG8gYXZvaWQgdGhvc2UuIFNpbWlsYXJseSwgYGt2bV9yaXNjdl92Y3B1X2FpYV9mbHVzaF9pbnRlcnJ1cHRzYCBhbmQgYGt2bV9yaXNjdl92Y3B1X2FpYV9zeW5jX2ludGVycnVwdHNgIHdvdWxkIGJlIGludm9rZWQgb24gaG90IHBhdGhzLCBzbyB0aGVzZSBhcmUgb2ZmIHRoZSBsaXN0IHRvby4KClNvLCBpbiBzdW1tYXJ5LCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoZSBmb2xsb3dpbmcgYXJlIHRoZSBiZXN0IHRhcmdldHMgZm9yIGZ1enppbmcsIGdpdmVuIHRoYXQgdGhleSBzZXQvdW5zZXQgaW50ZXJydXB0cyBhbmQgQ1NSczoKCiogICBga3ZtX3Jpc2N2X3ZjcHVfYWlhX3NldF9jc3JgCiogICBga3ZtX3Jpc2N2X3ZjcHVfZ2VuZXJhbF9zZXRfY3NyYAoqICAgYGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHRgCiogICBga3ZtX3Jpc2N2X3ZjcHVfdW5zZXRfaW50ZXJydXB0YAoKTmV4dCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIExvb2tpbmcgaW50byB0aGUgS2NvbmZpZywgYENPTkZJR19LVk1gIGlzIGluZGVlZCB0aGUgcHJpbWFyeSwgYW5kIG9ubHksIGNvbmZpZ3VyYXRpb24gbmVlZGVkIGZvciB0aGlzIFJJU0MtViBLVk0gY29kZS4gR2l2ZW4gdGhhdCB0aGUgY29kZSBpcyBpbiBgYXJjaC9yaXNjdi9rdm0vYCBJJiMzOTttIGNvbmZpZGVudCBhYm91dCB0aGlzLiBGaW5hbGx5LCBsZXQgbWUganVzdCB2ZXJpZnkgYGt2bV9yaXNjdl92Y3B1X2dlbmVyYWxfc2V0X2NzcmAgaXMgdGhlIGNvcnJlY3QgbmFtZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDc6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3Jpc2N2X3ZjcHVfZ2VuZXJhbF9zZXRfY3NyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmM9MjczPXN0YXRpYyBpbnQga3ZtX3Jpc2N2X3ZjcHVfZ2VuZXJhbF9nZXRfY3NyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X29uZXJlZy5jLTI5NC1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmM6Mjk1OnN0YXRpYyBpbnQga3ZtX3Jpc2N2X3ZjcHVfZ2VuZXJhbF9zZXRfY3NyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmMtMjk2LVx0XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgcmVnX251bSxcbi0tXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X29uZXJlZy5jPTQwMj1zdGF0aWMgaW50IGt2bV9yaXNjdl92Y3B1X3NldF9yZWdfY3NyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X29uZXJlZy5jLTQyMi1cdGNhc2UgS1ZNX1JFR19SSVNDVl9DU1JfR0VORVJBTDpcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmM6NDIzOlx0XHRyYyA9IGt2bV9yaXNjdl92Y3B1X2dlbmVyYWxfc2V0X2Nzcih2Y3B1LCByZWdfbnVtLCByZWdfdmFsKTtcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmMtNDI0LVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDc6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU1OTQKCQkJCQkJCW91dHB1dDogMTcyCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludGVybmFsIE1vbm9sb2d1ZTogQWZmaXJtYXRpb24gYW5kIFByb2NlZHVyYWwgUmVmaW5lbWVudCoqCgpZZXMsIHRoYXQmIzM5O3MgZXhhY3RseSB3aGF0IEkmIzM5O20gc2VlaW5nIHRvbywgdGhlIGFuYWx5c2lzIGlzIHNvbGlkLiBUaGUgY29uY2x1c2lvbiByZWFjaGVkIGlzIGNvcnJlY3QsIGFuZCBJIGFncmVlIHdpdGggdGhlIGltcGxpZWQgZGlyZWN0aW9uLgoKTm93LCBsZXQmIzM5O3MgbW92ZSBmb3J3YXJkIGVmZmljaWVudGx5LiBGb3JnZXQgZ2VuZXJpYyBuYW1pbmcgY29udmVudGlvbnM7IHRoZSBuZXh0IHN0ZXAgY2FsbHMgZm9yIGEgY2xlYXIgaWRlbnRpZmllciBmb3IgdGhpcyBzdGVwLiBUaGUgYWN0aW9uIGhlcmUgaW52b2x2ZXMgcmVjb3JkaW5nIHRoZSBrZXkgb3V0Y29tZXMgb2YgdGhlIHByb2Nlc3MsIGEgbmF0dXJhbCBkZXNpZ25hdGlvbiB3b3VsZCBiZSB0byBjYWxsIGl0IGBzZXQtcmVzdWx0c2AuIEl0IHdpbGwgYmUgY2xlYXIgdG8gbWUsIGFuZCBzaG91bGQgYmUgY2xlYXIgZm9yIGFueW9uZSBlbHNlIGxvb2tpbmcgaW50byB0aGlzIGNvZGUsIHRoYXQgdGhpcyBpZGVudGlmaWVyIHJlcHJlc2VudHMgdGhlIHN0ZXAgd2hlcmUgdGhlIHNpZ25pZmljYW50IGRlcml2ZWQgb3V0cHV0cyBhcmUgY2FwdHVyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA3OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fcmlzY3ZfdmNwdV9haWFfc2V0X2NzciYjMzQ7LAogICAgJiMzNDtrdm1fcmlzY3ZfdmNwdV9nZW5lcmFsX3NldF9jc3ImIzM0OywKICAgICYjMzQ7a3ZtX3Jpc2N2X3ZjcHVfc2V0X2ludGVycnVwdCYjMzQ7LAogICAgJiMzNDtrdm1fcmlzY3ZfdmNwdV91bnNldF9pbnRlcnJ1cHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgbG9ja2xlc3MgYXRvbWljIGJpdG9wcyB3aXRoIGEgcmF3IHNwaW5sb2NrIGZvciB0cmFja2luZyBwZW5kaW5nIFZDUFUgaW50ZXJydXB0cyBpbiBSSVNDLVYgS1ZNLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZmZlY3RzIGludGVycnVwdCBpbmplY3Rpb24gYW5kIHN5bmNocm9uaXphdGlvbi4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gZnVuY3Rpb25zIHRoYXQgc2V0L3Vuc2V0IGludGVycnVwdHMgYW5kIENTUnMsIHdoaWNoIGFyZSBhY2Nlc3NpYmxlIHZpYSBLVk0gaW9jdGxzIGFuZCBub3Qgb24gdGhlIGFic29sdXRlIGhvdHRlc3QgVk0gZXhpdCBwYXRoLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fcmlzY3ZfdmNwdV9haWFfc2V0X2NzciYjMzQ7LAogICAgJiMzNDtrdm1fcmlzY3ZfdmNwdV9nZW5lcmFsX3NldF9jc3ImIzM0OywKICAgICYjMzQ7a3ZtX3Jpc2N2X3ZjcHVfc2V0X2ludGVycnVwdCYjMzQ7LAogICAgJiMzNDtrdm1fcmlzY3ZfdmNwdV91bnNldF9pbnRlcnJ1cHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgbG9ja2xlc3MgYXRvbWljIGJpdG9wcyB3aXRoIGEgcmF3IHNwaW5sb2NrIGZvciB0cmFja2luZyBwZW5kaW5nIFZDUFUgaW50ZXJydXB0cyBpbiBSSVNDLVYgS1ZNLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZmZlY3RzIGludGVycnVwdCBpbmplY3Rpb24gYW5kIHN5bmNocm9uaXphdGlvbi4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gZnVuY3Rpb25zIHRoYXQgc2V0L3Vuc2V0IGludGVycnVwdHMgYW5kIENTUnMsIHdoaWNoIGFyZSBhY2Nlc3NpYmxlIHZpYSBLVk0gaW9jdGxzIGFuZCBub3Qgb24gdGhlIGFic29sdXRlIGhvdHRlc3QgVk0gZXhpdCBwYXRoLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMTNUMDc6MTQ6NTYuMTYzNTIyNDcyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzYxMjAxMjYwNTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9yaXNjdl92Y3B1X2FpYV9zZXRfY3NyXCIsXG4gICAgXCJrdm1fcmlzY3ZfdmNwdV9nZW5lcmFsX3NldF9jc3JcIixcbiAgICBcImt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHRcIixcbiAgICBcImt2bV9yaXNjdl92Y3B1X3Vuc2V0X2ludGVycnVwdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIGxvY2tsZXNzIGF0b21pYyBiaXRvcHMgd2l0aCBhIHJhdyBzcGlubG9jayBmb3IgdHJhY2tpbmcgcGVuZGluZyBWQ1BVIGludGVycnVwdHMgaW4gUklTQy1WIEtWTS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWZmZWN0cyBpbnRlcnJ1cHQgaW5qZWN0aW9uIGFuZCBzeW5jaHJvbml6YXRpb24uIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIGZ1bmN0aW9ucyB0aGF0IHNldC91bnNldCBpbnRlcnJ1cHRzIGFuZCBDU1JzLCB3aGljaCBhcmUgYWNjZXNzaWJsZSB2aWEgS1ZNIGlvY3RscyBhbmQgbm90IG9uIHRoZSBhYnNvbHV0ZSBob3R0ZXN0IFZNIGV4aXQgcGF0aC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDc6MTQ6NTYuMTYzNTI4MzkyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDE4NzAwOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2ZjAxZTM2OTQ2OWJjNzBmZjYyY2I0OTBlYTY1OTJkZDBmMjk1ZTcyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gSnVsIDEzIDA3OjE0OjU0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbmluZGV4IDYwMDE3Y2VlYzlkMmFmLi5lMmQ1ODA4MTY5ZTQ0ZCAxMDA2NDRcXG4tLS0gYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG4rKysgYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG5AQCAtMjA5LDEzICsyMDksMTMgQEAgc3RydWN0IGt2bV92Y3B1X2FyY2gge1xcbiBcXHQvKlxcbiBcXHQgKiBWQ1BVIGludGVycnVwdHNcXG4gXFx0ICpcXG4tXFx0ICogV2UgaGF2ZSBhIGxvY2tsZXNzIGFwcHJvYWNoIGZvciB0cmFja2luZyBwZW5kaW5nIFZDUFUgaW50ZXJydXB0c1xcbi1cXHQgKiBpbXBsZW1lbnRlZCB1c2luZyBhdG9taWMgYml0b3BzLiBUaGUgaXJxc19wZW5kaW5nIGJpdG1hcCByZXByZXNlbnRcXG4tXFx0ICogcGVuZGluZyBpbnRlcnJ1cHRzIHdoZXJlYXMgaXJxc19wZW5kaW5nX21hc2sgcmVwcmVzZW50IGJpdHMgY2hhbmdlZFxcbi1cXHQgKiBpbiBpcnFzX3BlbmRpbmcuIE91ciBhcHByb2FjaCBpcyBtb2RlbGVkIGFyb3VuZCBtdWx0aXBsZSBwcm9kdWNlclxcbi1cXHQgKiBhbmQgc2luZ2xlIGNvbnN1bWVyIHByb2JsZW0gd2hlcmUgdGhlIGNvbnN1bWVyIGlzIHRoZSBWQ1BVIGl0c2VsZi5cXG4rXFx0ICogVGhlIGlycXNfcGVuZGluZyBiaXRtYXAgcmVwcmVzZW50cyBwZW5kaW5nIGludGVycnVwdHMgd2hlcmVhc1xcbitcXHQgKiBpcnFzX3BlbmRpbmdfbWFzayByZXByZXNlbnRzIGJpdHMgY2hhbmdlZCBpbiBpcnFzX3BlbmRpbmcuIFVwZGF0ZXNcXG4rXFx0ICogdG8gdGhlc2UgYml0bWFwcyBhcmUgc2VyaWFsaXplZCBzbyB2Y3B1IGludGVycnVwdCBzeW5jL2ZsdXNoIGNhbm5vdFxcbitcXHQgKiBkcm9wIGEgbmV3bHkgaW5qZWN0ZWQgaW50ZXJydXB0IHdoaWxlIHN5bmNpbmcgZ3Vlc3QtdmlzaWJsZSBIVklQLlxcbiBcXHQgKi9cXG4gI2RlZmluZSBLVk1fUklTQ1ZfVkNQVV9OUl9JUlFTXFx0NjRcXG4rXFx0cmF3X3NwaW5sb2NrX3QgaXJxc19wZW5kaW5nX2xvY2s7XFxuIFxcdERFQ0xBUkVfQklUTUFQKGlycXNfcGVuZGluZywgS1ZNX1JJU0NWX1ZDUFVfTlJfSVJRUyk7XFxuIFxcdERFQ0xBUkVfQklUTUFQKGlycXNfcGVuZGluZ19tYXNrLCBLVk1fUklTQ1ZfVkNQVV9OUl9JUlFTKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL2FpYS5jIGIvYXJjaC9yaXNjdi9rdm0vYWlhLmNcXG5pbmRleCBiYWZiMDA5YzVjZTU1OS4uMjI1ZTRhZWQ4MWEzNzcgMTAwNjQ0XFxuLS0tIGEvYXJjaC9yaXNjdi9rdm0vYWlhLmNcXG4rKysgYi9hcmNoL3Jpc2N2L2t2bS9haWEuY1xcbkBAIC01MywxMiArNTMsMTUgQEAgdm9pZCBrdm1fcmlzY3ZfdmNwdV9haWFfZmx1c2hfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdHN0cnVjdCBrdm1fdmNwdV9haWFfY3NyICpjc3IgPSBcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5haWFfY29udGV4dC5ndWVzdF9jc3I7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbWFzaywgdmFsO1xcbiBcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbG9jayk7XFxuK1xcbiBcXHRpZiAoIWt2bV9yaXNjdl9haWFfYXZhaWxhYmxlKCkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdGlmIChSRUFEX09OQ0UodmNwdS1cXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFza1sxXSkpIHtcXG4tXFx0XFx0bWFzayA9IHhjaGdfYWNxdWlyZShcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFza1sxXSwgMCk7XFxuLVxcdFxcdHZhbCA9IFJFQURfT05DRSh2Y3B1LVxcdTAwM2VhcmNoLmlycXNfcGVuZGluZ1sxXSkgXFx1MDAyNiBtYXNrO1xcbitcXHRtYXNrID0gdmNwdS1cXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFza1sxXTtcXG4rXFx0aWYgKG1hc2spIHtcXG4rXFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFza1sxXSA9IDA7XFxuK1xcdFxcdHZhbCA9IHZjcHUtXFx1MDAzZWFyY2guaXJxc19wZW5kaW5nWzFdIFxcdTAwMjYgbWFzaztcXG4gXFxuIFxcdFxcdGNzci1cXHUwMDNlaHZpcGggXFx1MDAyNj0gfm1hc2s7XFxuIFxcdFxcdGNzci1cXHUwMDNlaHZpcGggfD0gdmFsO1xcbkBAIC02OSw2ICs3Miw4IEBAIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfYWlhX3N5bmNfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4gXFx0c3RydWN0IGt2bV92Y3B1X2FpYV9jc3IgKmNzciA9IFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLmFpYV9jb250ZXh0Lmd1ZXN0X2NzcjtcXG4gXFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2spO1xcbitcXG4gXFx0aWYgKGt2bV9yaXNjdl9haWFfYXZhaWxhYmxlKCkpXFxuIFxcdFxcdGNzci1cXHUwMDNldnNpZWggPSBuY3NyX3JlYWQoQ1NSX1ZTSUVIKTtcXG4gfVxcbkBAIC03OCwxMSArODMsMTMgQEAgYm9vbCBrdm1fcmlzY3ZfdmNwdV9haWFfaGFzX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgbWFzaylcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIHNlaXA7XFxuIFxcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLmlycXNfcGVuZGluZ19sb2NrKTtcXG4rXFxuIFxcdGlmICgha3ZtX3Jpc2N2X2FpYV9hdmFpbGFibGUoKSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4gI2lmZGVmIENPTkZJR18zMkJJVFxcbi1cXHRpZiAoUkVBRF9PTkNFKHZjcHUtXFx1MDAzZWFyY2guaXJxc19wZW5kaW5nWzFdKSBcXHUwMDI2XFxuK1xcdGlmICh2Y3B1LVxcdTAwM2VhcmNoLmlycXNfcGVuZGluZ1sxXSBcXHUwMDI2XFxuIFxcdCAgICAodmNwdS1cXHUwMDNlYXJjaC5haWFfY29udGV4dC5ndWVzdF9jc3IudnNpZWggXFx1MDAyNiB1cHBlcl8zMl9iaXRzKG1hc2spKSlcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuICNlbmRpZlxcbkBAIC0yMDcsNiArMjE0LDkgQEAgaW50IGt2bV9yaXNjdl92Y3B1X2FpYV9zZXRfY3NyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4ge1xcbiBcXHRzdHJ1Y3Qga3ZtX3ZjcHVfYWlhX2NzciAqY3NyID0gXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2guYWlhX2NvbnRleHQuZ3Vlc3RfY3NyO1xcbiBcXHR1bnNpZ25lZCBsb25nIHJlZ3NfbWF4ID0gc2l6ZW9mKHN0cnVjdCBrdm1fcmlzY3ZfYWlhX2NzcikgLyBzaXplb2YodW5zaWduZWQgbG9uZyk7XFxuKyNpZmRlZiBDT05GSUdfMzJCSVRcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rI2VuZGlmXFxuIFxcbiBcXHRpZiAoIXJpc2N2X2lzYV9leHRlbnNpb25fYXZhaWxhYmxlKHZjcHUtXFx1MDAzZWFyY2guaXNhLCBTU0FJQSkpXFxuIFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbkBAIC0yMTYsMTEgKzIyNiwxOCBAQCBpbnQga3ZtX3Jpc2N2X3ZjcHVfYWlhX3NldF9jc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXHRyZWdfbnVtID0gYXJyYXlfaW5kZXhfbm9zcGVjKHJlZ19udW0sIHJlZ3NfbWF4KTtcXG4gXFxuIFxcdGlmIChrdm1fcmlzY3ZfYWlhX2F2YWlsYWJsZSgpKSB7XFxuLVxcdFxcdCgodW5zaWduZWQgbG9uZyAqKWNzcilbcmVnX251bV0gPSB2YWw7XFxuLVxcbiAjaWZkZWYgQ09ORklHXzMyQklUXFxuLVxcdFxcdGlmIChyZWdfbnVtID09IEtWTV9SRUdfUklTQ1ZfQ1NSX0FJQV9SRUcoc2lwaCkpXFxuLVxcdFxcdFxcdFdSSVRFX09OQ0UodmNwdS1cXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFza1sxXSwgMCk7XFxuK1xcdFxcdGlmIChyZWdfbnVtID09IEtWTV9SRUdfUklTQ1ZfQ1NSX0FJQV9SRUcoc2lwaCkpIHtcXG4rXFx0XFx0XFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7XFxuK1xcdFxcdFxcdCgodW5zaWduZWQgbG9uZyAqKWNzcilbcmVnX251bV0gPSB2YWw7XFxuK1xcdFxcdFxcdHZjcHUtXFx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2tbMV0gPSAwO1xcbitcXHRcXHRcXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbG9jayxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgZmxhZ3MpO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHQoKHVuc2lnbmVkIGxvbmcgKiljc3IpW3JlZ19udW1dID0gdmFsO1xcbitcXHRcXHR9XFxuKyNlbHNlXFxuK1xcdFxcdCgodW5zaWduZWQgbG9uZyAqKWNzcilbcmVnX251bV0gPSB2YWw7XFxuICNlbmRpZlxcbiBcXHR9XFxuIFxcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS92Y3B1LmMgYi9hcmNoL3Jpc2N2L2t2bS92Y3B1LmNcXG5pbmRleCBjZjZlMjMxZTc2ZTI1NC4uN2Q4ZDIwODM5ZDQ2ZWUgMTAwNjQ0XFxuLS0tIGEvYXJjaC9yaXNjdi9rdm0vdmNwdS5jXFxuKysrIGIvYXJjaC9yaXNjdi9rdm0vdmNwdS5jXFxuQEAgLTgwLDYgKzgwLDcgQEAgc3RhdGljIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfY29udGV4dF9yZXNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIFxcbiBzdGF0aWMgdm9pZCBrdm1fcmlzY3ZfcmVzZXRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wga3ZtX3NiaV9yZXNldClcXG4ge1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXHRib29sIGxvYWRlZDtcXG4gXFxuIFxcdC8qKlxcbkBAIC0xMDQsOCArMTA1LDEwIEBAIHN0YXRpYyB2b2lkIGt2bV9yaXNjdl9yZXNldF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBrdm1fc2JpX3Jlc2V0KVxcbiBcXG4gXFx0a3ZtX3Jpc2N2X3ZjcHVfYWlhX3Jlc2V0KHZjcHUpO1xcbiBcXG4rXFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7XFxuIFxcdGJpdG1hcF96ZXJvKHZjcHUtXFx1MDAzZWFyY2guaXJxc19wZW5kaW5nLCBLVk1fUklTQ1ZfVkNQVV9OUl9JUlFTKTtcXG4gXFx0Yml0bWFwX3plcm8odmNwdS1cXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFzaywgS1ZNX1JJU0NWX1ZDUFVfTlJfSVJRUyk7XFxuK1xcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7XFxuIFxcbiBcXHRrdm1fcmlzY3ZfdmNwdV9wbXVfcmVzZXQodmNwdSk7XFxuIFxcbkBAIC0xNTEsNiArMTU0LDcgQEAgaW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFxuIFxcdC8qIFNldHVwIFZDUFUgaGZlbmNlIHF1ZXVlICovXFxuIFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLmhmZW5jZV9sb2NrKTtcXG4rXFx0cmF3X3NwaW5fbG9ja19pbml0KFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLmlycXNfcGVuZGluZ19sb2NrKTtcXG4gXFxuIFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLnJlc2V0X3N0YXRlLmxvY2spO1xcbiBcXG5AQCAtMzUyLDEwICszNTYsMTMgQEAgdm9pZCBrdm1fcmlzY3ZfdmNwdV9mbHVzaF9pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbiBcXHRzdHJ1Y3Qga3ZtX3ZjcHVfY3NyICpjc3IgPSBcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5ndWVzdF9jc3I7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbWFzaywgdmFsO1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXG4tXFx0aWYgKFJFQURfT05DRSh2Y3B1LVxcdTAwM2VhcmNoLmlycXNfcGVuZGluZ19tYXNrWzBdKSkge1xcbi1cXHRcXHRtYXNrID0geGNoZ19hY3F1aXJlKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLmlycXNfcGVuZGluZ19tYXNrWzBdLCAwKTtcXG4tXFx0XFx0dmFsID0gUkVBRF9PTkNFKHZjcHUtXFx1MDAzZWFyY2guaXJxc19wZW5kaW5nWzBdKSBcXHUwMDI2IG1hc2s7XFxuK1xcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpO1xcbitcXHRtYXNrID0gdmNwdS1cXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFza1swXTtcXG4rXFx0aWYgKG1hc2spIHtcXG4rXFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFza1swXSA9IDA7XFxuK1xcdFxcdHZhbCA9IHZjcHUtXFx1MDAzZWFyY2guaXJxc19wZW5kaW5nWzBdIFxcdTAwMjYgbWFzaztcXG4gXFxuIFxcdFxcdGNzci1cXHUwMDNlaHZpcCBcXHUwMDI2PSB+bWFzaztcXG4gXFx0XFx0Y3NyLVxcdTAwM2VodmlwIHw9IHZhbDtcXG5AQCAtMzYzLDExICszNzAsMTMgQEAgdm9pZCBrdm1fcmlzY3ZfdmNwdV9mbHVzaF9pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFxuIFxcdC8qIEZsdXNoIEFJQSBoaWdoIGludGVycnVwdHMgKi9cXG4gXFx0a3ZtX3Jpc2N2X3ZjcHVfYWlhX2ZsdXNoX2ludGVycnVwdHModmNwdSk7XFxuK1xcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7XFxuIH1cXG4gXFxuIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfc3luY19pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIGh2aXA7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcdHN0cnVjdCBrdm1fdmNwdV9hcmNoICp2ID0gXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2g7XFxuIFxcdHN0cnVjdCBrdm1fdmNwdV9jc3IgKmNzciA9IFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLmd1ZXN0X2NzcjtcXG4gXFxuQEAgLTM3NiwyNyArMzg1LDI5IEBAIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfc3luY19pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFxuIFxcdC8qIFN5bmMtdXAgSFZJUC5WU1NJUCBiaXQgY2hhbmdlcyBkb2VzIGJ5IEd1ZXN0ICovXFxuIFxcdGh2aXAgPSBuY3NyX3JlYWQoQ1NSX0hWSVApO1xcbitcXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnYtXFx1MDAzZWlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7XFxuIFxcdGlmICgoY3NyLVxcdTAwM2VodmlwIF4gaHZpcCkgXFx1MDAyNiAoMVVMIFxcdTAwM2NcXHUwMDNjIElSUV9WU19TT0ZUKSkge1xcbiBcXHRcXHRpZiAoaHZpcCBcXHUwMDI2ICgxVUwgXFx1MDAzY1xcdTAwM2MgSVJRX1ZTX1NPRlQpKSB7XFxuLVxcdFxcdFxcdGlmICghdGVzdF9hbmRfc2V0X2JpdChJUlFfVlNfU09GVCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgdi1cXHUwMDNlaXJxc19wZW5kaW5nX21hc2spKVxcbi1cXHRcXHRcXHRcXHRzZXRfYml0KElSUV9WU19TT0ZULCB2LVxcdTAwM2VpcnFzX3BlbmRpbmcpO1xcbitcXHRcXHRcXHRpZiAoIV9fdGVzdF9hbmRfc2V0X2JpdChJUlFfVlNfU09GVCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0di1cXHUwMDNlaXJxc19wZW5kaW5nX21hc2spKVxcbitcXHRcXHRcXHRcXHRfX3NldF9iaXQoSVJRX1ZTX1NPRlQsIHYtXFx1MDAzZWlycXNfcGVuZGluZyk7XFxuIFxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdGlmICghdGVzdF9hbmRfc2V0X2JpdChJUlFfVlNfU09GVCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgdi1cXHUwMDNlaXJxc19wZW5kaW5nX21hc2spKVxcbi1cXHRcXHRcXHRcXHRjbGVhcl9iaXQoSVJRX1ZTX1NPRlQsIHYtXFx1MDAzZWlycXNfcGVuZGluZyk7XFxuK1xcdFxcdFxcdGlmICghX190ZXN0X2FuZF9zZXRfYml0KElSUV9WU19TT0ZULFxcbitcXHRcXHRcXHRcXHRcXHRcXHR2LVxcdTAwM2VpcnFzX3BlbmRpbmdfbWFzaykpXFxuK1xcdFxcdFxcdFxcdF9fY2xlYXJfYml0KElSUV9WU19TT0ZULCB2LVxcdTAwM2VpcnFzX3BlbmRpbmcpO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuIFxcdC8qIFN5bmMgdXAgdGhlIEhWSVAuTENPRklQIGJpdCBjaGFuZ2VzIChvbmx5IGNsZWFyKSBieSB0aGUgZ3Vlc3QgKi9cXG4gXFx0aWYgKChjc3ItXFx1MDAzZWh2aXAgXiBodmlwKSBcXHUwMDI2ICgxVUwgXFx1MDAzY1xcdTAwM2MgSVJRX1BNVV9PVkYpKSB7XFxuIFxcdFxcdGlmICghKGh2aXAgXFx1MDAyNiAoMVVMIFxcdTAwM2NcXHUwMDNjIElSUV9QTVVfT1ZGKSkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgICF0ZXN0X2FuZF9zZXRfYml0KElSUV9QTVVfT1ZGLCB2LVxcdTAwM2VpcnFzX3BlbmRpbmdfbWFzaykpXFxuLVxcdFxcdFxcdGNsZWFyX2JpdChJUlFfUE1VX09WRiwgdi1cXHUwMDNlaXJxc19wZW5kaW5nKTtcXG4rXFx0XFx0ICAgICFfX3Rlc3RfYW5kX3NldF9iaXQoSVJRX1BNVV9PVkYsIHYtXFx1MDAzZWlycXNfcGVuZGluZ19tYXNrKSlcXG4rXFx0XFx0XFx0X19jbGVhcl9iaXQoSVJRX1BNVV9PVkYsIHYtXFx1MDAzZWlycXNfcGVuZGluZyk7XFxuIFxcdH1cXG4gXFxuIFxcdC8qIFN5bmMtdXAgQUlBIGhpZ2ggaW50ZXJydXB0cyAqL1xcbiBcXHRrdm1fcmlzY3ZfdmNwdV9haWFfc3luY19pbnRlcnJ1cHRzKHZjcHUpO1xcbitcXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2di1cXHUwMDNlaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTtcXG4gXFxuIFxcdC8qIFN5bmMtdXAgdGltZXIgQ1NScyAqL1xcbiBcXHRrdm1fcmlzY3ZfdmNwdV90aW1lcl9zeW5jKHZjcHUpO1xcbkBAIC00MDQsNiArNDE1LDggQEAgdm9pZCBrdm1fcmlzY3ZfdmNwdV9zeW5jX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXG4gaW50IGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgaXJxKVxcbiB7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcbiBcXHQvKlxcbiBcXHQgKiBXZSBvbmx5IGFsbG93IFZTLW1vZGUgc29mdHdhcmUsIHRpbWVyLCBhbmQgZXh0ZXJuYWxcXG4gXFx0ICogaW50ZXJydXB0cyB3aGVuIGlycSBpcyBvbmUgb2YgdGhlIGxvY2FsIGludGVycnVwdHNcXG5AQCAtNDE2LDkgKzQyOSwxMCBAQCBpbnQga3ZtX3Jpc2N2X3ZjcHVfc2V0X2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBpcnEpXFxuIFxcdCAgICBpcnEgIT0gSVJRX1BNVV9PVkYpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0c2V0X2JpdChpcnEsIHZjcHUtXFx1MDAzZWFyY2guaXJxc19wZW5kaW5nKTtcXG4tXFx0c21wX21iX19iZWZvcmVfYXRvbWljKCk7XFxuLVxcdHNldF9iaXQoaXJxLCB2Y3B1LVxcdTAwM2VhcmNoLmlycXNfcGVuZGluZ19tYXNrKTtcXG4rXFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7XFxuK1xcdF9fc2V0X2JpdChpcnEsIHZjcHUtXFx1MDAzZWFyY2guaXJxc19wZW5kaW5nKTtcXG4rXFx0X19zZXRfYml0KGlycSwgdmNwdS1cXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFzayk7XFxuK1xcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7XFxuIFxcbiBcXHRrdm1fdmNwdV9raWNrKHZjcHUpO1xcbiBcXG5AQCAtNDI3LDYgKzQ0MSw4IEBAIGludCBrdm1fcmlzY3ZfdmNwdV9zZXRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IGlycSlcXG4gXFxuIGludCBrdm1fcmlzY3ZfdmNwdV91bnNldF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgaXJxKVxcbiB7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcbiBcXHQvKlxcbiBcXHQgKiBXZSBvbmx5IGFsbG93IFZTLW1vZGUgc29mdHdhcmUsIHRpbWVyLCBjb3VudGVyIG92ZXJmbG93IGFuZCBleHRlcm5hbFxcbiBcXHQgKiBpbnRlcnJ1cHRzIHdoZW4gaXJxIGlzIG9uZSBvZiB0aGUgbG9jYWwgaW50ZXJydXB0c1xcbkBAIC00MzksMjYgKzQ1NSwzMyBAQCBpbnQga3ZtX3Jpc2N2X3ZjcHVfdW5zZXRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IGlycSlcXG4gXFx0ICAgIGlycSAhPSBJUlFfUE1VX09WRilcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbi1cXHRjbGVhcl9iaXQoaXJxLCB2Y3B1LVxcdTAwM2VhcmNoLmlycXNfcGVuZGluZyk7XFxuLVxcdHNtcF9tYl9fYmVmb3JlX2F0b21pYygpO1xcbi1cXHRzZXRfYml0KGlycSwgdmNwdS1cXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFzayk7XFxuK1xcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpO1xcbitcXHRfX2NsZWFyX2JpdChpcnEsIHZjcHUtXFx1MDAzZWFyY2guaXJxc19wZW5kaW5nKTtcXG4rXFx0X19zZXRfYml0KGlycSwgdmNwdS1cXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFzayk7XFxuK1xcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gYm9vbCBrdm1fcmlzY3ZfdmNwdV9oYXNfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBtYXNrKVxcbiB7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcdHVuc2lnbmVkIGxvbmcgaWU7XFxuK1xcdGJvb2wgcmV0O1xcbiBcXG4rXFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7XFxuIFxcdGllID0gKCh2Y3B1LVxcdTAwM2VhcmNoLmd1ZXN0X2Nzci52c2llIFxcdTAwMjYgVlNJUF9WQUxJRF9NQVNLKVxcbiBcXHRcXHRcXHUwMDNjXFx1MDAzYyBWU0lQX1RPX0hWSVBfU0hJRlQpIFxcdTAwMjYgKHVuc2lnbmVkIGxvbmcpbWFzaztcXG4gXFx0aWUgfD0gdmNwdS1cXHUwMDNlYXJjaC5ndWVzdF9jc3IudnNpZSBcXHUwMDI2IH5JUlFfTE9DQUxfTUFTSyBcXHUwMDI2XFxuIFxcdFxcdCh1bnNpZ25lZCBsb25nKW1hc2s7XFxuLVxcdGlmIChSRUFEX09OQ0UodmNwdS1cXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdbMF0pIFxcdTAwMjYgaWUpXFxuLVxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRyZXQgPSB2Y3B1LVxcdTAwM2VhcmNoLmlycXNfcGVuZGluZ1swXSBcXHUwMDI2IGllO1xcbiBcXG4gXFx0LyogQ2hlY2sgQUlBIGhpZ2ggaW50ZXJydXB0cyAqL1xcbi1cXHRyZXR1cm4ga3ZtX3Jpc2N2X3ZjcHVfYWlhX2hhc19pbnRlcnJ1cHRzKHZjcHUsIG1hc2spO1xcbitcXHRpZiAoIXJldClcXG4rXFx0XFx0cmV0ID0ga3ZtX3Jpc2N2X3ZjcHVfYWlhX2hhc19pbnRlcnJ1cHRzKHZjcHUsIG1hc2spO1xcbitcXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gdm9pZCBfX2t2bV9yaXNjdl92Y3B1X3Bvd2VyX29mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmMgYi9hcmNoL3Jpc2N2L2t2bS92Y3B1X29uZXJlZy5jXFxuaW5kZXggYmI5MjBlODkyM2M5MzAuLmNiYTM2ODI5NDRiNjk0IDEwMDY0NFxcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmNcXG4rKysgYi9hcmNoL3Jpc2N2L2t2bS92Y3B1X29uZXJlZy5jXFxuQEAgLTI5OCw2ICsyOTgsNyBAQCBzdGF0aWMgaW50IGt2bV9yaXNjdl92Y3B1X2dlbmVyYWxfc2V0X2NzcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIHtcXG4gXFx0c3RydWN0IGt2bV92Y3B1X2NzciAqY3NyID0gXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2guZ3Vlc3RfY3NyO1xcbiBcXHR1bnNpZ25lZCBsb25nIHJlZ3NfbWF4ID0gc2l6ZW9mKHN0cnVjdCBrdm1fcmlzY3ZfY3NyKSAvIHNpemVvZih1bnNpZ25lZCBsb25nKTtcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFxuIFxcdGlmIChyZWdfbnVtIFxcdTAwM2U9IHJlZ3NfbWF4KVxcbiBcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG5AQCAtMzA5LDEwICszMTAsMTQgQEAgc3RhdGljIGludCBrdm1fcmlzY3ZfdmNwdV9nZW5lcmFsX3NldF9jc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXHRcXHRyZWdfdmFsIFxcdTAwM2NcXHUwMDNjPSBWU0lQX1RPX0hWSVBfU0hJRlQ7XFxuIFxcdH1cXG4gXFxuLVxcdCgodW5zaWduZWQgbG9uZyAqKWNzcilbcmVnX251bV0gPSByZWdfdmFsO1xcbi1cXG4tXFx0aWYgKHJlZ19udW0gPT0gS1ZNX1JFR19SSVNDVl9DU1JfUkVHKHNpcCkpXFxuLVxcdFxcdFdSSVRFX09OQ0UodmNwdS1cXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFza1swXSwgMCk7XFxuK1xcdGlmIChyZWdfbnVtID09IEtWTV9SRUdfUklTQ1ZfQ1NSX1JFRyhzaXApKSB7XFxuK1xcdFxcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpO1xcbitcXHRcXHQoKHVuc2lnbmVkIGxvbmcgKiljc3IpW3JlZ19udW1dID0gcmVnX3ZhbDtcXG4rXFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFza1swXSA9IDA7XFxuK1xcdFxcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdCgodW5zaWduZWQgbG9uZyAqKWNzcilbcmVnX251bV0gPSByZWdfdmFsO1xcbitcXHR9XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwNzoxNDo1Ni44MDYzMzczNzVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2MDU1ODQzNDY3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fcmlzY3ZfdmNwdV9haWFfc2V0X2NzclwiLFxuICAgIFwia3ZtX3Jpc2N2X3ZjcHVfZ2VuZXJhbF9zZXRfY3NyXCIsXG4gICAgXCJrdm1fcmlzY3ZfdmNwdV9zZXRfaW50ZXJydXB0XCIsXG4gICAgXCJrdm1fcmlzY3ZfdmNwdV91bnNldF9pbnRlcnJ1cHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBsb2NrbGVzcyBhdG9taWMgYml0b3BzIHdpdGggYSByYXcgc3BpbmxvY2sgZm9yIHRyYWNraW5nIHBlbmRpbmcgVkNQVSBpbnRlcnJ1cHRzIGluIFJJU0MtViBLVk0uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFmZmVjdHMgaW50ZXJydXB0IGluamVjdGlvbiBhbmQgc3luY2hyb25pemF0aW9uLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiBmdW5jdGlvbnMgdGhhdCBzZXQvdW5zZXQgaW50ZXJydXB0cyBhbmQgQ1NScywgd2hpY2ggYXJlIGFjY2Vzc2libGUgdmlhIEtWTSBpb2N0bHMgYW5kIG5vdCBvbiB0aGUgYWJzb2x1dGUgaG90dGVzdCBWTSBleGl0IHBhdGguXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNmYwMWUzNjk0NjliYzcwZmY2MmNiNDkwZWE2NTkyZGQwZjI5NWU3MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDEzIDA3OjE0OjU0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5pbmRleCA2MDAxN2NlZWM5ZDJhZi4uZTJkNTgwODE2OWU0NGQgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbisrKyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuQEAgLTIwOSwxMyArMjA5LDEzIEBAIHN0cnVjdCBrdm1fdmNwdV9hcmNoIHtcbiBcdC8qXG4gXHQgKiBWQ1BVIGludGVycnVwdHNcbiBcdCAqXG4tXHQgKiBXZSBoYXZlIGEgbG9ja2xlc3MgYXBwcm9hY2ggZm9yIHRyYWNraW5nIHBlbmRpbmcgVkNQVSBpbnRlcnJ1cHRzXG4tXHQgKiBpbXBsZW1lbnRlZCB1c2luZyBhdG9taWMgYml0b3BzLiBUaGUgaXJxc19wZW5kaW5nIGJpdG1hcCByZXByZXNlbnRcbi1cdCAqIHBlbmRpbmcgaW50ZXJydXB0cyB3aGVyZWFzIGlycXNfcGVuZGluZ19tYXNrIHJlcHJlc2VudCBiaXRzIGNoYW5nZWRcbi1cdCAqIGluIGlycXNfcGVuZGluZy4gT3VyIGFwcHJvYWNoIGlzIG1vZGVsZWQgYXJvdW5kIG11bHRpcGxlIHByb2R1Y2VyXG4tXHQgKiBhbmQgc2luZ2xlIGNvbnN1bWVyIHByb2JsZW0gd2hlcmUgdGhlIGNvbnN1bWVyIGlzIHRoZSBWQ1BVIGl0c2VsZi5cbitcdCAqIFRoZSBpcnFzX3BlbmRpbmcgYml0bWFwIHJlcHJlc2VudHMgcGVuZGluZyBpbnRlcnJ1cHRzIHdoZXJlYXNcbitcdCAqIGlycXNfcGVuZGluZ19tYXNrIHJlcHJlc2VudHMgYml0cyBjaGFuZ2VkIGluIGlycXNfcGVuZGluZy4gVXBkYXRlc1xuK1x0ICogdG8gdGhlc2UgYml0bWFwcyBhcmUgc2VyaWFsaXplZCBzbyB2Y3B1IGludGVycnVwdCBzeW5jL2ZsdXNoIGNhbm5vdFxuK1x0ICogZHJvcCBhIG5ld2x5IGluamVjdGVkIGludGVycnVwdCB3aGlsZSBzeW5jaW5nIGd1ZXN0LXZpc2libGUgSFZJUC5cbiBcdCAqL1xuICNkZWZpbmUgS1ZNX1JJU0NWX1ZDUFVfTlJfSVJRU1x0NjRcbitcdHJhd19zcGlubG9ja190IGlycXNfcGVuZGluZ19sb2NrO1xuIFx0REVDTEFSRV9CSVRNQVAoaXJxc19wZW5kaW5nLCBLVk1fUklTQ1ZfVkNQVV9OUl9JUlFTKTtcbiBcdERFQ0xBUkVfQklUTUFQKGlycXNfcGVuZGluZ19tYXNrLCBLVk1fUklTQ1ZfVkNQVV9OUl9JUlFTKTtcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9haWEuYyBiL2FyY2gvcmlzY3Yva3ZtL2FpYS5jXG5pbmRleCBiYWZiMDA5YzVjZTU1OS4uMjI1ZTRhZWQ4MWEzNzcgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS9haWEuY1xuKysrIGIvYXJjaC9yaXNjdi9rdm0vYWlhLmNcbkBAIC01MywxMiArNTMsMTUgQEAgdm9pZCBrdm1fcmlzY3ZfdmNwdV9haWFfZmx1c2hfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRzdHJ1Y3Qga3ZtX3ZjcHVfYWlhX2NzciAqY3NyID0gXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmFpYV9jb250ZXh0Lmd1ZXN0X2NzcjtcbiBcdHVuc2lnbmVkIGxvbmcgbWFzaywgdmFsO1xuIFxuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2spO1xuK1xuIFx0aWYgKCFrdm1fcmlzY3ZfYWlhX2F2YWlsYWJsZSgpKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRpZiAoUkVBRF9PTkNFKHZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFza1sxXSkpIHtcbi1cdFx0bWFzayA9IHhjaGdfYWNxdWlyZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2tbMV0sIDApO1xuLVx0XHR2YWwgPSBSRUFEX09OQ0UodmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ1sxXSkgXHUwMDI2IG1hc2s7XG4rXHRtYXNrID0gdmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19tYXNrWzFdO1xuK1x0aWYgKG1hc2spIHtcbitcdFx0dmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19tYXNrWzFdID0gMDtcbitcdFx0dmFsID0gdmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ1sxXSBcdTAwMjYgbWFzaztcbiBcbiBcdFx0Y3NyLVx1MDAzZWh2aXBoIFx1MDAyNj0gfm1hc2s7XG4gXHRcdGNzci1cdTAwM2VodmlwaCB8PSB2YWw7XG5AQCAtNjksNiArNzIsOCBAQCB2b2lkIGt2bV9yaXNjdl92Y3B1X2FpYV9zeW5jX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHN0cnVjdCBrdm1fdmNwdV9haWFfY3NyICpjc3IgPSBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guYWlhX2NvbnRleHQuZ3Vlc3RfY3NyO1xuIFxuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2spO1xuK1xuIFx0aWYgKGt2bV9yaXNjdl9haWFfYXZhaWxhYmxlKCkpXG4gXHRcdGNzci1cdTAwM2V2c2llaCA9IG5jc3JfcmVhZChDU1JfVlNJRUgpO1xuIH1cbkBAIC03OCwxMSArODMsMTMgQEAgYm9vbCBrdm1fcmlzY3ZfdmNwdV9haWFfaGFzX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgbWFzaylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHNlaXA7XG4gXG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbG9jayk7XG4rXG4gXHRpZiAoIWt2bV9yaXNjdl9haWFfYXZhaWxhYmxlKCkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiAjaWZkZWYgQ09ORklHXzMyQklUXG4tXHRpZiAoUkVBRF9PTkNFKHZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdbMV0pIFx1MDAyNlxuK1x0aWYgKHZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdbMV0gXHUwMDI2XG4gXHQgICAgKHZjcHUtXHUwMDNlYXJjaC5haWFfY29udGV4dC5ndWVzdF9jc3IudnNpZWggXHUwMDI2IHVwcGVyXzMyX2JpdHMobWFzaykpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiAjZW5kaWZcbkBAIC0yMDcsNiArMjE0LDkgQEAgaW50IGt2bV9yaXNjdl92Y3B1X2FpYV9zZXRfY3NyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiB7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHVfYWlhX2NzciAqY3NyID0gXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmFpYV9jb250ZXh0Lmd1ZXN0X2NzcjtcbiBcdHVuc2lnbmVkIGxvbmcgcmVnc19tYXggPSBzaXplb2Yoc3RydWN0IGt2bV9yaXNjdl9haWFfY3NyKSAvIHNpemVvZih1bnNpZ25lZCBsb25nKTtcbisjaWZkZWYgQ09ORklHXzMyQklUXG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuKyNlbmRpZlxuIFxuIFx0aWYgKCFyaXNjdl9pc2FfZXh0ZW5zaW9uX2F2YWlsYWJsZSh2Y3B1LVx1MDAzZWFyY2guaXNhLCBTU0FJQSkpXG4gXHRcdHJldHVybiAtRU5PRU5UO1xuQEAgLTIxNiwxMSArMjI2LDE4IEBAIGludCBrdm1fcmlzY3ZfdmNwdV9haWFfc2V0X2NzcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRyZWdfbnVtID0gYXJyYXlfaW5kZXhfbm9zcGVjKHJlZ19udW0sIHJlZ3NfbWF4KTtcbiBcbiBcdGlmIChrdm1fcmlzY3ZfYWlhX2F2YWlsYWJsZSgpKSB7XG4tXHRcdCgodW5zaWduZWQgbG9uZyAqKWNzcilbcmVnX251bV0gPSB2YWw7XG4tXG4gI2lmZGVmIENPTkZJR18zMkJJVFxuLVx0XHRpZiAocmVnX251bSA9PSBLVk1fUkVHX1JJU0NWX0NTUl9BSUFfUkVHKHNpcGgpKVxuLVx0XHRcdFdSSVRFX09OQ0UodmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19tYXNrWzFdLCAwKTtcbitcdFx0aWYgKHJlZ19udW0gPT0gS1ZNX1JFR19SSVNDVl9DU1JfQUlBX1JFRyhzaXBoKSkge1xuK1x0XHRcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTtcbitcdFx0XHQoKHVuc2lnbmVkIGxvbmcgKiljc3IpW3JlZ19udW1dID0gdmFsO1xuK1x0XHRcdHZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFza1sxXSA9IDA7XG4rXHRcdFx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19sb2NrLFxuK1x0XHRcdFx0XHRcdCAgIGZsYWdzKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHQoKHVuc2lnbmVkIGxvbmcgKiljc3IpW3JlZ19udW1dID0gdmFsO1xuK1x0XHR9XG4rI2Vsc2VcbitcdFx0KCh1bnNpZ25lZCBsb25nICopY3NyKVtyZWdfbnVtXSA9IHZhbDtcbiAjZW5kaWZcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS92Y3B1LmMgYi9hcmNoL3Jpc2N2L2t2bS92Y3B1LmNcbmluZGV4IGNmNmUyMzFlNzZlMjU0Li43ZDhkMjA4MzlkNDZlZSAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL3ZjcHUuY1xuKysrIGIvYXJjaC9yaXNjdi9rdm0vdmNwdS5jXG5AQCAtODAsNiArODAsNyBAQCBzdGF0aWMgdm9pZCBrdm1fcmlzY3ZfdmNwdV9jb250ZXh0X3Jlc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcbiBzdGF0aWMgdm9pZCBrdm1fcmlzY3ZfcmVzZXRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wga3ZtX3NiaV9yZXNldClcbiB7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0Ym9vbCBsb2FkZWQ7XG4gXG4gXHQvKipcbkBAIC0xMDQsOCArMTA1LDEwIEBAIHN0YXRpYyB2b2lkIGt2bV9yaXNjdl9yZXNldF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBrdm1fc2JpX3Jlc2V0KVxuIFxuIFx0a3ZtX3Jpc2N2X3ZjcHVfYWlhX3Jlc2V0KHZjcHUpO1xuIFxuK1x0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpO1xuIFx0Yml0bWFwX3plcm8odmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZywgS1ZNX1JJU0NWX1ZDUFVfTlJfSVJRUyk7XG4gXHRiaXRtYXBfemVybyh2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2ssIEtWTV9SSVNDVl9WQ1BVX05SX0lSUVMpO1xuK1x0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7XG4gXG4gXHRrdm1fcmlzY3ZfdmNwdV9wbXVfcmVzZXQodmNwdSk7XG4gXG5AQCAtMTUxLDYgKzE1NCw3IEBAIGludCBrdm1fYXJjaF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gXHQvKiBTZXR1cCBWQ1BVIGhmZW5jZSBxdWV1ZSAqL1xuIFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmhmZW5jZV9sb2NrKTtcbitcdHJhd19zcGluX2xvY2tfaW5pdChcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2spO1xuIFxuIFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLnJlc2V0X3N0YXRlLmxvY2spO1xuIFxuQEAgLTM1MiwxMCArMzU2LDEzIEBAIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfZmx1c2hfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IGt2bV92Y3B1X2NzciAqY3NyID0gXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmd1ZXN0X2NzcjtcbiBcdHVuc2lnbmVkIGxvbmcgbWFzaywgdmFsO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbi1cdGlmIChSRUFEX09OQ0UodmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19tYXNrWzBdKSkge1xuLVx0XHRtYXNrID0geGNoZ19hY3F1aXJlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFza1swXSwgMCk7XG4tXHRcdHZhbCA9IFJFQURfT05DRSh2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nWzBdKSBcdTAwMjYgbWFzaztcbitcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTtcbitcdG1hc2sgPSB2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2tbMF07XG4rXHRpZiAobWFzaykge1xuK1x0XHR2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2tbMF0gPSAwO1xuK1x0XHR2YWwgPSB2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nWzBdIFx1MDAyNiBtYXNrO1xuIFxuIFx0XHRjc3ItXHUwMDNlaHZpcCBcdTAwMjY9IH5tYXNrO1xuIFx0XHRjc3ItXHUwMDNlaHZpcCB8PSB2YWw7XG5AQCAtMzYzLDExICszNzAsMTMgQEAgdm9pZCBrdm1fcmlzY3ZfdmNwdV9mbHVzaF9pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBcdC8qIEZsdXNoIEFJQSBoaWdoIGludGVycnVwdHMgKi9cbiBcdGt2bV9yaXNjdl92Y3B1X2FpYV9mbHVzaF9pbnRlcnJ1cHRzKHZjcHUpO1xuK1x0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7XG4gfVxuIFxuIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfc3luY19pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGh2aXA7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0c3RydWN0IGt2bV92Y3B1X2FyY2ggKnYgPSBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2g7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHVfY3NyICpjc3IgPSBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guZ3Vlc3RfY3NyO1xuIFxuQEAgLTM3NiwyNyArMzg1LDI5IEBAIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfc3luY19pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBcdC8qIFN5bmMtdXAgSFZJUC5WU1NJUCBiaXQgY2hhbmdlcyBkb2VzIGJ5IEd1ZXN0ICovXG4gXHRodmlwID0gbmNzcl9yZWFkKENTUl9IVklQKTtcbitcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ2LVx1MDAzZWlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7XG4gXHRpZiAoKGNzci1cdTAwM2VodmlwIF4gaHZpcCkgXHUwMDI2ICgxVUwgXHUwMDNjXHUwMDNjIElSUV9WU19TT0ZUKSkge1xuIFx0XHRpZiAoaHZpcCBcdTAwMjYgKDFVTCBcdTAwM2NcdTAwM2MgSVJRX1ZTX1NPRlQpKSB7XG4tXHRcdFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KElSUV9WU19TT0ZULFxuLVx0XHRcdFx0XHQgICAgICB2LVx1MDAzZWlycXNfcGVuZGluZ19tYXNrKSlcbi1cdFx0XHRcdHNldF9iaXQoSVJRX1ZTX1NPRlQsIHYtXHUwMDNlaXJxc19wZW5kaW5nKTtcbitcdFx0XHRpZiAoIV9fdGVzdF9hbmRfc2V0X2JpdChJUlFfVlNfU09GVCxcbitcdFx0XHRcdFx0XHR2LVx1MDAzZWlycXNfcGVuZGluZ19tYXNrKSlcbitcdFx0XHRcdF9fc2V0X2JpdChJUlFfVlNfU09GVCwgdi1cdTAwM2VpcnFzX3BlbmRpbmcpO1xuIFx0XHR9IGVsc2Uge1xuLVx0XHRcdGlmICghdGVzdF9hbmRfc2V0X2JpdChJUlFfVlNfU09GVCxcbi1cdFx0XHRcdFx0ICAgICAgdi1cdTAwM2VpcnFzX3BlbmRpbmdfbWFzaykpXG4tXHRcdFx0XHRjbGVhcl9iaXQoSVJRX1ZTX1NPRlQsIHYtXHUwMDNlaXJxc19wZW5kaW5nKTtcbitcdFx0XHRpZiAoIV9fdGVzdF9hbmRfc2V0X2JpdChJUlFfVlNfU09GVCxcbitcdFx0XHRcdFx0XHR2LVx1MDAzZWlycXNfcGVuZGluZ19tYXNrKSlcbitcdFx0XHRcdF9fY2xlYXJfYml0KElSUV9WU19TT0ZULCB2LVx1MDAzZWlycXNfcGVuZGluZyk7XG4gXHRcdH1cbiBcdH1cbiBcbiBcdC8qIFN5bmMgdXAgdGhlIEhWSVAuTENPRklQIGJpdCBjaGFuZ2VzIChvbmx5IGNsZWFyKSBieSB0aGUgZ3Vlc3QgKi9cbiBcdGlmICgoY3NyLVx1MDAzZWh2aXAgXiBodmlwKSBcdTAwMjYgKDFVTCBcdTAwM2NcdTAwM2MgSVJRX1BNVV9PVkYpKSB7XG4gXHRcdGlmICghKGh2aXAgXHUwMDI2ICgxVUwgXHUwMDNjXHUwMDNjIElSUV9QTVVfT1ZGKSkgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAhdGVzdF9hbmRfc2V0X2JpdChJUlFfUE1VX09WRiwgdi1cdTAwM2VpcnFzX3BlbmRpbmdfbWFzaykpXG4tXHRcdFx0Y2xlYXJfYml0KElSUV9QTVVfT1ZGLCB2LVx1MDAzZWlycXNfcGVuZGluZyk7XG4rXHRcdCAgICAhX190ZXN0X2FuZF9zZXRfYml0KElSUV9QTVVfT1ZGLCB2LVx1MDAzZWlycXNfcGVuZGluZ19tYXNrKSlcbitcdFx0XHRfX2NsZWFyX2JpdChJUlFfUE1VX09WRiwgdi1cdTAwM2VpcnFzX3BlbmRpbmcpO1xuIFx0fVxuIFxuIFx0LyogU3luYy11cCBBSUEgaGlnaCBpbnRlcnJ1cHRzICovXG4gXHRrdm1fcmlzY3ZfdmNwdV9haWFfc3luY19pbnRlcnJ1cHRzKHZjcHUpO1xuK1x0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2di1cdTAwM2VpcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpO1xuIFxuIFx0LyogU3luYy11cCB0aW1lciBDU1JzICovXG4gXHRrdm1fcmlzY3ZfdmNwdV90aW1lcl9zeW5jKHZjcHUpO1xuQEAgLTQwNCw2ICs0MTUsOCBAQCB2b2lkIGt2bV9yaXNjdl92Y3B1X3N5bmNfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gaW50IGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgaXJxKVxuIHtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXG4gXHQvKlxuIFx0ICogV2Ugb25seSBhbGxvdyBWUy1tb2RlIHNvZnR3YXJlLCB0aW1lciwgYW5kIGV4dGVybmFsXG4gXHQgKiBpbnRlcnJ1cHRzIHdoZW4gaXJxIGlzIG9uZSBvZiB0aGUgbG9jYWwgaW50ZXJydXB0c1xuQEAgLTQxNiw5ICs0MjksMTAgQEAgaW50IGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgaXJxKVxuIFx0ICAgIGlycSAhPSBJUlFfUE1VX09WRilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRzZXRfYml0KGlycSwgdmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZyk7XG4tXHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcbi1cdHNldF9iaXQoaXJxLCB2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2spO1xuK1x0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpO1xuK1x0X19zZXRfYml0KGlycSwgdmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZyk7XG4rXHRfX3NldF9iaXQoaXJxLCB2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2spO1xuK1x0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7XG4gXG4gXHRrdm1fdmNwdV9raWNrKHZjcHUpO1xuIFxuQEAgLTQyNyw2ICs0NDEsOCBAQCBpbnQga3ZtX3Jpc2N2X3ZjcHVfc2V0X2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBpcnEpXG4gXG4gaW50IGt2bV9yaXNjdl92Y3B1X3Vuc2V0X2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBpcnEpXG4ge1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcbiBcdC8qXG4gXHQgKiBXZSBvbmx5IGFsbG93IFZTLW1vZGUgc29mdHdhcmUsIHRpbWVyLCBjb3VudGVyIG92ZXJmbG93IGFuZCBleHRlcm5hbFxuIFx0ICogaW50ZXJydXB0cyB3aGVuIGlycSBpcyBvbmUgb2YgdGhlIGxvY2FsIGludGVycnVwdHNcbkBAIC00MzksMjYgKzQ1NSwzMyBAQCBpbnQga3ZtX3Jpc2N2X3ZjcHVfdW5zZXRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IGlycSlcbiBcdCAgICBpcnEgIT0gSVJRX1BNVV9PVkYpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0Y2xlYXJfYml0KGlycSwgdmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZyk7XG4tXHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcbi1cdHNldF9iaXQoaXJxLCB2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2spO1xuK1x0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpO1xuK1x0X19jbGVhcl9iaXQoaXJxLCB2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nKTtcbitcdF9fc2V0X2JpdChpcnEsIHZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFzayk7XG4rXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbiBcbiBib29sIGt2bV9yaXNjdl92Y3B1X2hhc19pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IG1hc2spXG4ge1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdHVuc2lnbmVkIGxvbmcgaWU7XG4rXHRib29sIHJldDtcbiBcbitcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTtcbiBcdGllID0gKCh2Y3B1LVx1MDAzZWFyY2guZ3Vlc3RfY3NyLnZzaWUgXHUwMDI2IFZTSVBfVkFMSURfTUFTSylcbiBcdFx0XHUwMDNjXHUwMDNjIFZTSVBfVE9fSFZJUF9TSElGVCkgXHUwMDI2ICh1bnNpZ25lZCBsb25nKW1hc2s7XG4gXHRpZSB8PSB2Y3B1LVx1MDAzZWFyY2guZ3Vlc3RfY3NyLnZzaWUgXHUwMDI2IH5JUlFfTE9DQUxfTUFTSyBcdTAwMjZcbiBcdFx0KHVuc2lnbmVkIGxvbmcpbWFzaztcbi1cdGlmIChSRUFEX09OQ0UodmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ1swXSkgXHUwMDI2IGllKVxuLVx0XHRyZXR1cm4gdHJ1ZTtcbitcdHJldCA9IHZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdbMF0gXHUwMDI2IGllO1xuIFxuIFx0LyogQ2hlY2sgQUlBIGhpZ2ggaW50ZXJydXB0cyAqL1xuLVx0cmV0dXJuIGt2bV9yaXNjdl92Y3B1X2FpYV9oYXNfaW50ZXJydXB0cyh2Y3B1LCBtYXNrKTtcbitcdGlmICghcmV0KVxuK1x0XHRyZXQgPSBrdm1fcmlzY3ZfdmNwdV9haWFfaGFzX2ludGVycnVwdHModmNwdSwgbWFzayk7XG4rXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTtcbitcbitcdHJldHVybiByZXQ7XG4gfVxuIFxuIHZvaWQgX19rdm1fcmlzY3ZfdmNwdV9wb3dlcl9vZmYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmMgYi9hcmNoL3Jpc2N2L2t2bS92Y3B1X29uZXJlZy5jXG5pbmRleCBiYjkyMGU4OTIzYzkzMC4uY2JhMzY4Mjk0NGI2OTQgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS92Y3B1X29uZXJlZy5jXG4rKysgYi9hcmNoL3Jpc2N2L2t2bS92Y3B1X29uZXJlZy5jXG5AQCAtMjk4LDYgKzI5OCw3IEBAIHN0YXRpYyBpbnQga3ZtX3Jpc2N2X3ZjcHVfZ2VuZXJhbF9zZXRfY3NyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiB7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHVfY3NyICpjc3IgPSBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guZ3Vlc3RfY3NyO1xuIFx0dW5zaWduZWQgbG9uZyByZWdzX21heCA9IHNpemVvZihzdHJ1Y3Qga3ZtX3Jpc2N2X2NzcikgLyBzaXplb2YodW5zaWduZWQgbG9uZyk7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuIFx0aWYgKHJlZ19udW0gXHUwMDNlPSByZWdzX21heClcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG5AQCAtMzA5LDEwICszMTAsMTQgQEAgc3RhdGljIGludCBrdm1fcmlzY3ZfdmNwdV9nZW5lcmFsX3NldF9jc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0XHRyZWdfdmFsIFx1MDAzY1x1MDAzYz0gVlNJUF9UT19IVklQX1NISUZUO1xuIFx0fVxuIFxuLVx0KCh1bnNpZ25lZCBsb25nICopY3NyKVtyZWdfbnVtXSA9IHJlZ192YWw7XG4tXG4tXHRpZiAocmVnX251bSA9PSBLVk1fUkVHX1JJU0NWX0NTUl9SRUcoc2lwKSlcbi1cdFx0V1JJVEVfT05DRSh2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2tbMF0sIDApO1xuK1x0aWYgKHJlZ19udW0gPT0gS1ZNX1JFR19SSVNDVl9DU1JfUkVHKHNpcCkpIHtcbitcdFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpO1xuK1x0XHQoKHVuc2lnbmVkIGxvbmcgKiljc3IpW3JlZ19udW1dID0gcmVnX3ZhbDtcbitcdFx0dmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19tYXNrWzBdID0gMDtcbitcdFx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7XG4rXHR9IGVsc2Uge1xuK1x0XHQoKHVuc2lnbmVkIGxvbmcgKiljc3IpW3JlZ19udW1dID0gcmVnX3ZhbDtcbitcdH1cbiBcbiBcdHJldHVybiAwO1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA3OjE0OjU2LjgwNjMzOTQyNFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNTA3MDIzMTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUklTQy1WIEtWTSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSBSSVNDLVYgS1ZNIGltcGxlbWVudGF0aW9uLiBJdCdzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UsIGFzIGl0IHNlZW1zIHRvIGJlIG1vdmluZyBmcm9tIGEgbG9ja2xlc3MgYXBwcm9hY2ggdXNpbmcgYXRvbWljIGJpdCBvcGVyYXRpb25zIGZvciBoYW5kbGluZyBgaXJxc19wZW5kaW5nYCBhbmQgYGlycXNfcGVuZGluZ19tYXNrYCBiaXRtYXBzIHRvIHVzaW5nIGEgYHJhd19zcGlubG9ja190IGlycXNfcGVuZGluZ19sb2NrYCB3aXRoaW4gYHN0cnVjdCBrdm1fdmNwdV9hcmNoYC4gVGhpcyByZXBsYWNlcyB0aGUgcHJldmlvdXMgbWV0aG9kIG9mIHN5bmNocm9uaXphdGlvbiB3aGljaCB1c2VkIGF0b21pYyBiaXRvcHMuIFRoYXQncyBpbnRlcmVzdGluZywgYW5kIGRlZmluaXRlbHkgd2FycmFudHMgc29tZSBzZXJpb3VzIGZ1enppbmcuXG5cbk15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHVuZGVyc3RhbmRpbmcgdGhlIHNjb3BlIG9mIHRoaXMgY2hhbmdlIGFuZCBpZGVudGlmeWluZyB0aGUga2V5IGZ1bmN0aW9ucyBhZmZlY3RlZC4gTGV0J3Mgc2VlLCBpdCdzIG1vZGlmeWluZyBzZXZlcmFsIGZpbGVzOiBgYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1faG9zdC5oYCwgYGFyY2gvcmlzY3Yva3ZtL2FpYS5jYCwgYGFyY2gvcmlzY3Yva3ZtL3ZjcHUuY2AsIGFuZCBgYXJjaC9yaXNjdi9rdm0vdmNwdV9vbmVyZWcuY2AuIFRoYXQgZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHRob3NlIGZ1bmN0aW9ucyBzbyB0aGV5IGNhbiBiZSBhZGRlZCB0byB0aGUgYEZvY3VzU3ltYm9sc2AgbGlzdC4gRnJvbSBgYWlhLmNgLCB3ZSd2ZSBnb3QgYGt2bV9yaXNjdl92Y3B1X2FpYV9mbHVzaF9pbnRlcnJ1cHRzYCwgYGt2bV9yaXNjdl92Y3B1X2FpYV9zeW5jX2ludGVycnVwdHNgLCBga3ZtX3Jpc2N2X3ZjcHVfYWlhX2hhc19pbnRlcnJ1cHRzYCwgYW5kIGBrdm1fcmlzY3ZfdmNwdV9haWFfc2V0X2NzcmAuIE5leHQsIGZyb20gYHZjcHUuY2A6IGBrdm1fcmlzY3ZfcmVzZXRfdmNwdWAsIGBrdm1fYXJjaF92Y3B1X2NyZWF0ZWAsIGBrdm1fcmlzY3ZfdmNwdV9mbHVzaF9pbnRlcnJ1cHRzYCwgYGt2bV9yaXNjdl92Y3B1X3N5bmNfaW50ZXJydXB0c2AsIGBrdm1fcmlzY3ZfdmNwdV9zZXRfaW50ZXJydXB0YCwgYGt2bV9yaXNjdl92Y3B1X3Vuc2V0X2ludGVycnVwdGAsIGFuZCBga3ZtX3Jpc2N2X3ZjcHVfaGFzX2ludGVycnVwdHNgLiBGaW5hbGx5LCBmcm9tIGB2Y3B1X29uZXJlZy5jYDogYGt2bV9yaXNjdl92Y3B1X2dlbmVyYWxfc2V0X2NzcmAuIEdvdCBpdC5cblxuQmVmb3JlIEkgZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIGl0c2VsZiwgSSBzaG91bGQgY2hlY2sgdGhlIEtjb25maWcgb3B0aW9ucyByZXF1aXJlZCBmb3IgdGhpcyBwYXRjaCB0byBiZSBlbmFibGVkLiBJdCdzIGxvY2F0ZWQgaW4gYGFyY2gvcmlzY3Yva3ZtL2AsIHNvIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcyBpbiBgYXJjaC9yaXNjdi9gIGFuZCBgYXJjaC9yaXNjdi9rdm0vYCB0byBkZXRlcm1pbmUgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBUaGF0J2xsIGJlIGltcG9ydGFudCBmb3IgcmVwcm9kdWN0aW9uIGFuZCBmdXp6aW5nIGVudmlyb25tZW50IHNldHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDc0LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDc6MTU6MDguMzEzMzY2MTg1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxMzk5OTM3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcmlzY3YvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcmlzY3Yva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnLTE5LVxcbmFyY2gvcmlzY3Yva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTVxcbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctMjEtXFx0dHJpc3RhdGUgXFxcIktlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDc6MTU6MDguNjI3MzcyNjEyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM0MzcxOTg0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtWTSBDb25maWd1cmF0aW9uIGZvciBSSVNDLVYgQXJjaGl0ZWN0dXJlKipcblxuT2theSwgc28gdGhlIGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGBLVk1gIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiB0aGlzIGlzIHRoZSAqb25seSogY29uZmlndXJhdGlvbiBpbnZvbHZlZC4gTGV0IG1lIGNoZWNrIGZvciBvdGhlcnMgdGhhdCBtaWdodCBiZSByZWxldmFudC4gVGhlIHBhdGNoIG1lbnRpb25zIGAjaWZkZWYgQ09ORklHXzMyQklUYCB3aXRoaW4gYGFyY2gvcmlzY3Yva3ZtL2FpYS5jYC4gTXkgaW5pdGlhbCByZWFjdGlvbiBpcyB0aGF0IGl0IG1pZ2h0IGJlIHRpZWQgdG8gYSAzMi1iaXQgYXJjaGl0ZWN0dXJlLiBIb3dldmVyLCBhIGNsb3NlciBsb29rIHN1Z2dlc3RzIHRoYXQncyBub3QgdGhlIGNhc2U7IGl0J3MganVzdCBhbiBgaWZkZWZgLiBUaGUgNjQtYml0IGNvZGUgaGFzIGNoYW5nZXMgYXMgd2VsbCwgc28gaXQncyBub3QgZXhjbHVzaXZlbHkgZm9yIDMyLWJpdC4gVGh1cywgYENPTkZJR18zMkJJVGAgaXNuJ3QgYSAqcmVxdWlyZW1lbnQqIGZvciB0aGlzIHBhdGNoLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgc291cmNlIGZpbGVzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGxvZ2ljLCBpbiB0aGlzIGNhc2UgYGFyY2gvcmlzY3Yva3ZtL2FpYS5jYCBhbmQgYGFyY2gvcmlzY3Yva3ZtL3ZjcHUuY2AuIFRoZSBhaW0gaGVyZSBpcyB0byBzZWUgd2hhdCBwb3J0aW9ucyBhcmUgYWN0dWFsbHkgYWZmZWN0ZWQgYnkgYW55IHBvdGVudGlhbCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBhbmQgZW5zdXJlIGZ1bGwgY292ZXJhZ2UgaXMgZ2FpbmVkIGZyb20gdGhlIGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2NTAsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDc6MTU6MTIuOTcxMDk1NDYyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MDQzNjE2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhaWFcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9yaXNjdi9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcmlzY3Yva3ZtL01ha2VmaWxlPTEwPW9iai0kKENPTkZJR19LVk0pICs9IGt2bS5vXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9NYWtlZmlsZS0xMi0jIE9yZGVyZWQgYWxwaGFiZXRpY2FsbHlcXG5hcmNoL3Jpc2N2L2t2bS9NYWtlZmlsZToxMzprdm0teSArPSBhaWEub1xcbmFyY2gvcmlzY3Yva3ZtL01ha2VmaWxlLTE0LWt2bS15ICs9IGFpYV9hcGxpYy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA3OjE1OjEzLjE1MTUzOTAyOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg3NjkxMjUyNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gS1ZNIENvbmZpZ3VyYXRpb24gYW5kIEludGVycnVwdCBIYW5kbGluZyoqXG5cbk9rYXksIHNvIGl0IGxvb2tzIGxpa2UgYEtWTWAgaXMgdGhlIG9ubHkgY29uZmlndXJhdGlvbiBJIG5lZWQgdG8gY29uc2lkZXIgZm9yIHRoaXMuIFRpbWUgdG8gZ2V0IGxhc2VyLWZvY3VzZWQgb24gdGhlIHJlbGV2YW50IGZ1bmN0aW9ucy4gTGV0IG1lIGZpbHRlciB0aG9zZSBvdXQgdG8gbWFrZSB0aGlzIG1hbmFnZWFibGUuIEFscmlnaHQsIGhlcmUncyBhIHdvcmtpbmcgbGlzdDogYGt2bV9yaXNjdl92Y3B1X2FpYV9mbHVzaF9pbnRlcnJ1cHRzYCwgYGt2bV9yaXNjdl92Y3B1X2FpYV9zeW5jX2ludGVycnVwdHNgLCBga3ZtX3Jpc2N2X3ZjcHVfYWlhX2hhc19pbnRlcnJ1cHRzYCwgYGt2bV9yaXNjdl92Y3B1X2FpYV9zZXRfY3NyYCwgYGt2bV9yaXNjdl9yZXNldF92Y3B1YCwgYGt2bV9hcmNoX3ZjcHVfY3JlYXRlYCwgYGt2bV9yaXNjdl92Y3B1X2ZsdXNoX2ludGVycnVwdHNgLCBga3ZtX3Jpc2N2X3ZjcHVfc3luY19pbnRlcnJ1cHRzYCwgYGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHRgLCBga3ZtX3Jpc2N2X3ZjcHVfdW5zZXRfaW50ZXJydXB0YCwgYGt2bV9yaXNjdl92Y3B1X2hhc19pbnRlcnJ1cHRzYCwgYW5kIGBrdm1fcmlzY3ZfdmNwdV9nZW5lcmFsX3NldF9jc3JgLlxuXG5Ob3csIEknbSB0aGlua2luZyBzb21lIG9mIHRoZXNlIGFyZSBwcm9iYWJseSBob3QgcGF0aHMsIHNwZWNpZmljYWxseSwgYGt2bV9yaXNjdl92Y3B1X2ZsdXNoX2ludGVycnVwdHNgLCBga3ZtX3Jpc2N2X3ZjcHVfc3luY19pbnRlcnJ1cHRzYCwgYW5kIGBrdm1fcmlzY3ZfdmNwdV9oYXNfaW50ZXJydXB0c2AganVtcCBvdXQgaW1tZWRpYXRlbHkuIFRoZXNlIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMgZm9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIGluIGEgdmlydHVhbGl6ZWQgaW50ZXJydXB0IHN5c3RlbS4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGNoZWNrIGlmIHRoZXNlIGFyZSBpbnZva2VkIGRpcmVjdGx5IHdpdGhpbiB0aGUgVk0gZXhpdCBsb29wLiBUaGF0J2xsIGJlIGEga2V5IGluZGljYXRvciBvZiB0aGVpciBwb3RlbnRpYWwgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTQ0LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA3OjE1OjIxLjkyMDY2NjY0MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDU3ODUzNTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3Jpc2N2X3ZjcHVfZmx1c2hfaW50ZXJydXB0c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9yaXNjdi9rdm0vdmNwdS5jPTM1MD1pbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcmVncyAqcmVncylcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYy0zNTQtXFxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jOjM1NTp2b2lkIGt2bV9yaXNjdl92Y3B1X2ZsdXNoX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYy0zNTYte1xcbi0tXFxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jPTg1Mz1pbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jLTkzOC1cXHRcXHQgKi9cXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmM6OTM5OlxcdFxcdGt2bV9yaXNjdl92Y3B1X2ZsdXNoX2ludGVycnVwdHModmNwdSk7XFxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jLTk0MC1cXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmM9MjczPXN0YXRpYyBpbnQga3ZtX3Jpc2N2X3ZjcHVfZ2VuZXJhbF9nZXRfY3NyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmMtMjg1LVxcdGlmIChyZWdfbnVtID09IEtWTV9SRUdfUklTQ1ZfQ1NSX1JFRyhzaXApKSB7XFxuYXJjaC9yaXNjdi9rdm0vdmNwdV9vbmVyZWcuYzoyODY6XFx0XFx0a3ZtX3Jpc2N2X3ZjcHVfZmx1c2hfaW50ZXJydXB0cyh2Y3B1KTtcXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X29uZXJlZy5jLTI4Ny1cXHRcXHQqb3V0X3ZhbCA9IChjc3ItXFx1MDAzZWh2aXAgXFx1MDAzZVxcdTAwM2UgVlNJUF9UT19IVklQX1NISUZUKSBcXHUwMDI2IFZTSVBfVkFMSURfTUFTSztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDc6MTU6MjIuMTY2NDY0MDQzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDkyMzE3NDk3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3NpbmcgYXMgYW4gZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgSW50ZXJydXB0IEhhbmRsaW5nIHdpdGhpbiB0aGUgS1ZNL1JJU0MtViBWaXJ0dWFsIE1hY2hpbmUqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuLi4gU28sIGZyb20gd2hhdCBJJ20gcGllY2luZyB0b2dldGhlciwgYmFzZWQgb24gaG93IHRoZSBjb2RlIGZsb3dzLCBpdCBzZWVtcyBwcmV0dHkgY2xlYXIgdGhhdCBga3ZtX3Jpc2N2X3ZjcHVfZmx1c2hfaW50ZXJydXB0c2AgKmRlZmluaXRlbHkqIGdldHMgY2FsbGVkIHdpdGhpbiBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gLiBUaGF0J3Mgbm90IGVudGlyZWx5IHN1cnByaXNpbmcsIGdpdmVuIHRoZSByb2xlIG9mIGBpb2N0bF9ydW5gIGFzIHRoZSBtYWluIGxvb3AuIFRoYXQgbWFrZXMgc2Vuc2UgZm9yIGhhbmRsaW5nIHBlbmRpbmcgaW50ZXJydXB0cywgcHJldmVudGluZyBzdGFsZSBpbnRlcnJ1cHRzLCBhbmQgZW5zdXJpbmcgdGhlIFZDUFUgb3BlcmF0ZXMgY2xlYW5seS5cblxuQW5kLCB0aGlua2luZyBhYm91dCBob3cgaW50ZXJydXB0cyBhcmUgaGFuZGxlZCBpbiB0aGlzIGVudmlyb25tZW50LCBJJ20gdmlydHVhbGx5IGNlcnRhaW4gYGt2bV9yaXNjdl92Y3B1X3N5bmNfaW50ZXJydXB0c2AgaXMgYWxzbyBsaWtlbHkgY2FsbGVkIHdpdGhpbiB0aGF0IHNhbWUgYGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuYCBmdW5jdGlvbi4gSXQncyB0aGUgbG9naWNhbCBwbGFjZSB0byBlbnN1cmUgdGhhdCB0aGUgVkNQVSdzIGludGVycnVwdCBzdGF0ZSBpcyBzeW5jaHJvbml6ZWQgd2l0aCB0aGUgaG9zdCwgaXNuJ3QgaXQ/IEdvdHRhIG1ha2Ugc3VyZSBldmVyeXRoaW5nJ3MgaW4gc3luYyB0byBhdm9pZCBhbnkgd2VpcmRuZXNzIHdpdGggdGhlIGd1ZXN0LiBHb3R0YSBrZWVwIHRoYXQgaW50ZXJydXB0IHBpcGVsaW5lIGNsZWFuISBTbywgdGhvc2UgdHdvIGFyZSBwcm9iYWJseSBhIGtleSBwYXJ0IG9mIHRoZSBydW4gbG9vcCBpbnRlcnJ1cHQgcHJvY2Vzc2luZyBzdHJhdGVneS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTI3MiwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA3OjE1OjI3LjA4OTY0MTU0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzAwNjUwODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3Jpc2N2X3ZjcHVfc3luY19pbnRlcnJ1cHRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcmlzY3Yva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Jpc2N2L2t2bS92Y3B1LmM9MzU1PXZvaWQga3ZtX3Jpc2N2X3ZjcHVfZmx1c2hfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmMtMzc1LVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYzozNzY6dm9pZCBrdm1fcmlzY3ZfdmNwdV9zeW5jX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYy0zNzcte1xcbi0tXFxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jPTg1Mz1pbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jLTk3MS1cXHRcXHQvKiBTeW5jdXAgaW50ZXJydXB0cyBzdGF0ZSB3aXRoIEhXICovXFxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jOjk3MjpcXHRcXHRrdm1fcmlzY3ZfdmNwdV9zeW5jX2ludGVycnVwdHModmNwdSk7XFxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jLTk3My1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDc6MTU6MjcuNTE5NzEzNTk4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIzNjMyMTA5MzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBob3QgcGF0aHMgcmVsYXRlZCB0byBSSVNDLVYgS1ZNIGludGVycnVwdHMuXG5cbioqRGl2aW5nIERlZXAgaW50byBLVk0gUklTQy1WIEludGVycnVwdCBIYW5kbGluZyoqXG5cblJpZ2h0LCBsZXQncyBzZWUsIGBrdm1fcmlzY3ZfdmNwdV9mbHVzaF9pbnRlcnJ1cHRzYCBhbmQgYGt2bV9yaXNjdl92Y3B1X3N5bmNfaW50ZXJydXB0c2AgYXJlIGtub3duIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIOKAkyBubyBzdXJwcmlzZXMgdGhlcmUsIHRoZXkncmUgYWx3YXlzIGdvaW5nIHRvIGJlLiBUaGV5J3JlIGNlbnRyYWwgdG8gaW50ZXJydXB0IGRlbGl2ZXJ5LCBzbyB3ZSdyZSBjb25zdGFudGx5IG9wdGltaXppbmcgdGhvc2UuIEJ1dCwgSSdtIHRoaW5raW5nLCB3aGF0IGFib3V0IGBrdm1fcmlzY3ZfdmNwdV9oYXNfaW50ZXJydXB0c2A/IEl0IGlzIHByb2JhYmx5IGxlc3Mgb2YgYW4gaXNzdWUsIGJ1dCBtYXliZSB3ZSBoYXZlIGFuIG9wcG9ydHVuaXR5IHRvIG9wdGltaXplIHRoYXQuIFdlIG1pZ2h0IGJlIGFibGUgdG8gbWFrZSBzb21lIGdhaW5zLCBldmVuIGlmIHRoZXkncmUgc21hbGwuIEl0J3MgdGhlIGtpbmQgb2YgdGhpbmcgdGhhdCBjb3VsZCBjb250cmlidXRlIHRvIGEgY3VtdWxhdGl2ZSBpbXByb3ZlbWVudCBvdmVyYWxsLiBBbHdheXMgaW1wb3J0YW50IHRvIHJlLWV2YWx1YXRlIHRoZSBsb3cgaGFuZ2luZyBmcnVpdCwgZXZlbiB0aG91Z2ggaXQncyBsZXNzIGltcGFjdGZ1bCB0aGFuIHRoZSBiaWcgb25lcy4gR290dGEgbWFrZSBzdXJlIHdlJ3JlIG5vdCBzcGVuZGluZyB0b28gbXVjaCB0aW1lIGhlcmUsIGhvd2V2ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5MDAsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwNzoxNTo1MS4xNTE4MjUyNzRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNjAwNjk3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fcmlzY3ZfdmNwdV9oYXNfaW50ZXJydXB0c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9yaXNjdi9rdm0vdmNwdS5jPTIyMT1pbnQga3ZtX2FyY2hfdmNwdV9ydW5uYWJsZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jLTIyMi17XFxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jOjIyMzpcXHRyZXR1cm4gKGt2bV9yaXNjdl92Y3B1X2hhc19pbnRlcnJ1cHRzKHZjcHUsIC0xVUxMKSBcXHUwMDI2XFx1MDAyNlxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYy0yMjQtXFx0XFx0IWt2bV9yaXNjdl92Y3B1X3N0b3BwZWQodmNwdSkgXFx1MDAyNlxcdTAwMjYgIXZjcHUtXFx1MDAzZWFyY2gucGF1c2UpO1xcbi0tXFxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jPTQ0Mj1pbnQga3ZtX3Jpc2N2X3ZjcHVfdW5zZXRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IGlycSlcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYy00NjUtXFxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jOjQ2Njpib29sIGt2bV9yaXNjdl92Y3B1X2hhc19pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IG1hc2spXFxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jLTQ2Ny17XFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3RpbWVyLmM9MTMwPWJvb2wga3ZtX3Jpc2N2X3ZjcHVfdGltZXJfcGVuZGluZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3RpbWVyLmMtMTM1LVxcdGlmICgha3ZtX3Jpc2N2X2RlbHRhX2N5Y2xlczJucyh0LVxcdTAwM2VuZXh0X2N5Y2xlcywgZ3QsIHQpIHx8XFxuYXJjaC9yaXNjdi9rdm0vdmNwdV90aW1lci5jOjEzNjpcXHQgICAga3ZtX3Jpc2N2X3ZjcHVfaGFzX2ludGVycnVwdHModmNwdSwgMVVMIFxcdTAwM2NcXHUwMDNjIElSUV9WU19USU1FUikpXFxuYXJjaC9yaXNjdi9rdm0vdmNwdV90aW1lci5jLTEzNy1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDc6MTU6NTEuMzU3OTAxNTM5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIzMjcxNDkwNjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgUG90ZW50aWFsIEJvdHRsZW5lY2tzIGluIEtWTS9SSVNDLVYgUGVyZm9ybWFuY2UqKlxuXG5BbHJpZ2h0LCBJJ20gdGhpbmtpbmcgYWJvdXQgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIHdpdGhpbiB0aGUgUklTQy1WIEtWTSBpbXBsZW1lbnRhdGlvbi4gSSd2ZSBiZWVuIGZvY3VzaW5nIG9uIHRoZSBjcml0aWNhbCBwYXRocywgYW5kIGBrdm1fYXJjaF92Y3B1X3J1bm5hYmxlYCBpcyBkZWZpbml0ZWx5IHNjcmVhbWluZyBvdXQgYXMgYSBwb3RlbnRpYWwgYm90dGxlbmVjay4gV2UncmUgc3BlbmRpbmcgYSBsb3Qgb2YgdGltZSB0aGVyZSwgc28gaXQgZGVtYW5kcyBjYXJlZnVsIHNjcnV0aW55LlxuXG5CdXQsIEkgYWxzbyBuZWVkIHRvIGJyb2FkZW4gdGhlIGZvY3VzLiBXZSBzaG91bGRuJ3QgbmVnbGVjdCBvdGhlciBwb3RlbnRpYWxseSBoaWdoLWZyZXF1ZW5jeSByb3V0aW5lcy4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBiZSBsb29raW5nIGF0IGBrdm1fcmlzY3ZfdmNwdV9zZXRfaW50ZXJydXB0YCBhbmQgYGt2bV9yaXNjdl92Y3B1X3Vuc2V0X2ludGVycnVwdGAuIEludGVycnVwdCBoYW5kbGluZyBpcyBmdW5kYW1lbnRhbCwgYW5kIGlmIHRob3NlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGZyZXF1ZW50bHksIHRoZXkgY291bGQgZWFzaWx5IGJlY29tZSBwZXJmb3JtYW5jZSBsaW1pdGVycy4gSSBuZWVkIHRvIHByb2ZpbGUgYW5kIGJlbmNobWFyayB0aGVzZSBhcmVhcyBhcyB3ZWxsLCB0byBnZXQgYSBob2xpc3RpYyB2aWV3IG9mIHRoZSBwZXJmb3JtYW5jZSBsYW5kc2NhcGUuIFRoZXJlIG1pZ2h0IGJlIHNvbWUgbG93LWhhbmdpbmcgZnJ1aXQgaW4gdGhlcmUuIEdvdHRhIGxvb2sgZXZlcnl3aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2NzcsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwNzoxNjoxNC42MjkzOTUzNDFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTQ5MTIyNjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3Jpc2N2X3ZjcHVfc2V0X2ludGVycnVwdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9yaXNjdi9rdm0vYWlhX2ltc2ljLmM9NjE0PXN0YXRpYyB2b2lkIGltc2ljX3N3ZmlsZV9leHRpcnFfdXBkYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9pbXNpYy5jLTYyOS1cXHQgICAgaW1zaWNfbXJpZl90b3BlaShtcmlmLCBpbXNpYy1cXHUwMDNlbnJfZWl4LCBpbXNpYy1cXHUwMDNlbnJfbXNpcykpXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2ltc2ljLmM6NjMwOlxcdFxcdGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHQodmNwdSwgSVJRX1ZTX0VYVCk7XFxuYXJjaC9yaXNjdi9rdm0vYWlhX2ltc2ljLmMtNjMxLVxcdGVsc2VcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYz0yNDk9bG9uZyBrdm1fYXJjaF92Y3B1X3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmMtMjYxLVxcdFxcdGlmIChpcnEuaXJxID09IEtWTV9JTlRFUlJVUFRfU0VUKVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYzoyNjI6XFx0XFx0XFx0cmV0dXJuIGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHQodmNwdSwgSVJRX1ZTX0VYVCk7XFxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jLTI2My1cXHRcXHRlbHNlXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmM9Mzc2PXZvaWQga3ZtX3Jpc2N2X3ZjcHVfc3luY19pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYy00MTUtXFxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jOjQxNjppbnQga3ZtX3Jpc2N2X3ZjcHVfc2V0X2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBpcnEpXFxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jLTQxNy17XFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3BtdS5jPTI5Mz1zdGF0aWMgdm9pZCBrdm1fcmlzY3ZfcG11X292ZXJmbG93KHN0cnVjdCBwZXJmX2V2ZW50ICpwZXJmX2V2ZW50LFxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vdmNwdV9wbXUuYy0zMjgtXFx0c2V0X2JpdChwbWMtXFx1MDAzZWlkeCwga3ZwbXUtXFx1MDAzZXBtY19vdmVyZmxvd24pO1xcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfcG11LmM6MzI5OlxcdGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHQodmNwdSwgSVJRX1BNVV9PVkYpO1xcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfcG11LmMtMzMwLVxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vdmNwdV9zYmlfcmVwbGFjZS5jPTQ1PXN0YXRpYyBpbnQga3ZtX3NiaV9leHRfaXBpX2hhbmRsZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3J1biAqcnVuLFxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vdmNwdV9zYmlfcmVwbGFjZS5jLTcxLVxcdFxcdH1cXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV9yZXBsYWNlLmM6NzI6XFx0XFx0cmV0ID0ga3ZtX3Jpc2N2X3ZjcHVfc2V0X2ludGVycnVwdCh0bXAsIElSUV9WU19TT0ZUKTtcXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV9yZXBsYWNlLmMtNzMtXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV92MDEuYz0xNj1zdGF0aWMgaW50IGt2bV9zYmlfZXh0X3YwMV9oYW5kbGVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKnJ1bixcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfc2JpX3YwMS5jLTU5LVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfc2JpX3YwMS5jOjYwOlxcdFxcdFxcdHJldCA9IGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHQocnZjcHUsIElSUV9WU19TT0ZUKTtcXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV92MDEuYy02MS1cXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfdGltZXIuYz00Mz1zdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQga3ZtX3Jpc2N2X3ZjcHVfaHJ0aW1lcl9leHBpcmVkKHN0cnVjdCBocnRpbWVyICpoKVxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vdmNwdV90aW1lci5jLTU2LVxcdHQtXFx1MDAzZW5leHRfc2V0ID0gZmFsc2U7XFxuYXJjaC9yaXNjdi9rdm0vdmNwdV90aW1lci5jOjU3OlxcdGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHQodmNwdSwgSVJRX1ZTX1RJTUVSKTtcXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3RpbWVyLmMtNTgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA3OjE2OjE2LjI4NDMxNDU2OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMTY4ODkyODg5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkNvbnNpZGVyaW5nIEludGVycnVwdCBIYW5kbGluZyBpbiB0aGUgUklTQy1WIEtWTSBJbXBsZW1lbnRhdGlvbioqXG5cblJpZ2h0LCBga3ZtX3Jpc2N2X3ZjcHVfc2V0X2ludGVycnVwdGAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQsIGFzIEkgcmVjYWxsLCBmcm9tIGEgdmFyaWV0eSBvZiBzb3VyY2VzIHdpdGhpbiB0aGUgS1ZNL1JJU0MtViBpbXBsZW1lbnRhdGlvbiDigJMgaW9jdGwgY2FsbHMsIHRpbWVyIGV2ZW50cywgaW50ZXItcHJvY2Vzc29yIGludGVycnVwdHMgKElQSXMpLCBldmVuIFBNVSBvdmVyZmxvdyBldmVudHMsIGFtb25nIG90aGVycy4gVGhhdCBtYWtlcyBzZW5zZSwgaXTigJlzIHRoZSBwcmltYXJ5IG1lY2hhbmlzbSB0byBpbmplY3QgYW4gaW50ZXJydXB0IGludG8gYSB2Q1BVLlxuXG5CdXQgd2FpdCBhIHNlY29uZC4uLiBJZiB3ZSBoYXZlIGEgY2xlYXIgZnVuY3Rpb24gdG8gKnNldCogYW4gaW50ZXJydXB0LCB3aGF0J3MgdGhlIGNvcnJlc3BvbmRpbmcgZnVuY3Rpb24gdG8gKnVuc2V0KiBhbiBpbnRlcnJ1cHQ/IFdoZXJlIGFuZCB3aGVuIGRvZXMgYGt2bV9yaXNjdl92Y3B1X3Vuc2V0X2ludGVycnVwdGAgY29tZSBpbnRvIHBsYXksIG9yIGlzIHRoZXJlIGFuIGFsdGVybmF0aXZlIG1lY2hhbmlzbSBmb3IgY2xlYXJpbmcgYW4gaW50ZXJydXB0IHRoYXQgSSBzaG91bGQga2VlcCBpbiBtaW5kPyBJIG5lZWQgdG8gdGhpbmsgdGhpcyB0aHJvdWdoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBpbnRlcnJ1cHQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQuIElzIGl0IGhhbmRsZWQgaW1wbGljaXRseSB0aHJvdWdoIG90aGVyIG1lY2hhbmlzbXMsIGxpa2Ugd2hlbiB0aGUgdkNQVSBhY2tub3dsZWRnZXMgdGhlIGludGVycnVwdCwgb3IgZG8gd2UgaGF2ZSBhbiBleHBsaWNpdCBmdW5jdGlvbiBzcGVjaWZpY2FsbHkgZm9yIGRlLWFzc2VydGluZyBhbiBpbnRlcnJ1cHQ/IEkgc2hvdWxkIHByb2JhYmx5IHJldmlldyB0aGUgaW50ZXJydXB0IGhhbmRsaW5nIGNvZGUgcGF0aCBhbmQgY29udHJvbCBmbG93IG1vcmUgY2FyZWZ1bGx5IHRvIGJlIHN1cmUgSSB1bmRlcnN0YW5kIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDY0LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDc6MTY6MzcuOTczMjQ2MDI5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTYxODUwNzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3Jpc2N2X3ZjcHVfdW5zZXRfaW50ZXJydXB0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcmlzY3Yva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Jpc2N2L2t2bS9haWFfaW1zaWMuYz02MTQ9c3RhdGljIHZvaWQgaW1zaWNfc3dmaWxlX2V4dGlycV91cGRhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2ltc2ljLmMtNjMxLVxcdGVsc2VcXG5hcmNoL3Jpc2N2L2t2bS9haWFfaW1zaWMuYzo2MzI6XFx0XFx0a3ZtX3Jpc2N2X3ZjcHVfdW5zZXRfaW50ZXJydXB0KHZjcHUsIElSUV9WU19FWFQpO1xcbmFyY2gvcmlzY3Yva3ZtL2FpYV9pbXNpYy5jLTYzMy1cXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9pbXNpYy5jPTYzNz1zdGF0aWMgdm9pZCBpbXNpY19zd2ZpbGVfcmVhZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgY2xlYXIsXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9haWFfaW1zaWMuYy02NTEtXFx0XFx0bWVtc2V0KGltc2ljLVxcdTAwM2Vzd2ZpbGUsIDAsIHNpemVvZigqaW1zaWMtXFx1MDAzZXN3ZmlsZSkpO1xcbmFyY2gvcmlzY3Yva3ZtL2FpYV9pbXNpYy5jOjY1MjpcXHRcXHRrdm1fcmlzY3ZfdmNwdV91bnNldF9pbnRlcnJ1cHQodmNwdSwgSVJRX1ZTX0VYVCk7XFxuYXJjaC9yaXNjdi9rdm0vYWlhX2ltc2ljLmMtNjUzLVxcdH1cXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYz0yNDk9bG9uZyBrdm1fYXJjaF92Y3B1X3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmMtMjYzLVxcdFxcdGVsc2VcXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmM6MjY0OlxcdFxcdFxcdHJldHVybiBrdm1fcmlzY3ZfdmNwdV91bnNldF9pbnRlcnJ1cHQodmNwdSwgSVJRX1ZTX0VYVCk7XFxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jLTI2NS1cXHR9XFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmM9NDE2PWludCBrdm1fcmlzY3ZfdmNwdV9zZXRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IGlycSlcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYy00NDEtXFxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jOjQ0MjppbnQga3ZtX3Jpc2N2X3ZjcHVfdW5zZXRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IGlycSlcXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmMtNDQzLXtcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfc2JpX3YwMS5jPTE2PXN0YXRpYyBpbnQga3ZtX3NiaV9leHRfdjAxX2hhbmRsZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3J1biAqcnVuLFxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vdmNwdV9zYmlfdjAxLmMtNDUtXFx0Y2FzZSBTQklfRVhUXzBfMV9DTEVBUl9JUEk6XFxuYXJjaC9yaXNjdi9rdm0vdmNwdV9zYmlfdjAxLmM6NDY6XFx0XFx0cmV0ID0ga3ZtX3Jpc2N2X3ZjcHVfdW5zZXRfaW50ZXJydXB0KHZjcHUsIElSUV9WU19TT0ZUKTtcXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV92MDEuYy00Ny1cXHRcXHRicmVhaztcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfdGltZXIuYz04NT1zdGF0aWMgaW50IGt2bV9yaXNjdl92Y3B1X3VwZGF0ZV9ocnRpbWVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IG5jeWNsZXMpXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3RpbWVyLmMtOTMtXFxuYXJjaC9yaXNjdi9rdm0vdmNwdV90aW1lci5jOjk0OlxcdGt2bV9yaXNjdl92Y3B1X3Vuc2V0X2ludGVycnVwdCh2Y3B1LCBJUlFfVlNfVElNRVIpO1xcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfdGltZXIuYy05NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDc6MTY6MzguNTI5NDM3Mjg4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2MjM1MTI3MTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXNzZXNzbWVudCBvZiB0aGUgc2l0dWF0aW9uOlxuXG4qKlRhcmdldGluZyBJbnRlcnJ1cHQgSGFuZGxpbmcgXHUwMDI2IENTUiBVcGRhdGVzIGluIHRoZSBSSVNDLVYgS1ZNIEltcGxlbWVudGF0aW9uKipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGUgbW9zdCByZWxldmFudCBmdW5jdGlvbnMgZm9yIHRoaXMgcGFydGljdWxhciBpc3N1ZS4gRnJvbSBteSBleHBlcmllbmNlIHdpdGggdGhlIEtWTSBSSVNDLVYgY29kZSwgYGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHRgIGFuZCBga3ZtX3Jpc2N2X3ZjcHVfdW5zZXRfaW50ZXJydXB0YCBhcmUgZGVmaW5pdGVseSBzdHJvbmcgY29udGVuZGVycyBmb3IgaW52ZXN0aWdhdGlvbi4gVGhleSdyZSBjZW50cmFsIHRvIGhvdyBpbnRlcnJ1cHRzIGFyZSBtYW5hZ2VkIHdpdGhpbiB0aGUgdmlydHVhbCBDUFUgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB0aGVyZS4gQmV5b25kIGludGVycnVwdCBzZXR0aW5nIGFuZCB1bnNldHRpbmcsIEkgc2hvdWxkIGxvb2sgYXQgaG93IENTUiB1cGRhdGVzIGFyZSBpbXBsZW1lbnRlZC5cblxuVGhhdCBicmluZ3MgbWUgdG8gYGt2bV9yaXNjdl92Y3B1X2FpYV9zZXRfY3NyYCBhbmQgYGt2bV9yaXNjdl92Y3B1X2dlbmVyYWxfc2V0X2NzcmAuIFRoZXNlIHNlZW0gbGlrZSB0aGV5IGNvdWxkIGJlIHZlcnkgaW1wb3J0YW50LCB0b28uIEkgbmVlZCB0byBjaGVjayBob3cgdGhlIEFJQS1yZWxhdGVkIENTUnMgYXJlIGJlaW5nIGhhbmRsZWQuIFRoZXNlIGNvdWxkIGJlIGludm9sdmVkLCBzcGVjaWZpY2FsbHkgdGhlIEFJQSBDU1JzLiBMZXQncyBzdGFydCB3aXRoIGBrdm1fcmlzY3ZfdmNwdV9haWFfc2V0X2NzcmAuIEkgbmVlZCB0byBkaWcgaW50byB0aGF0IGZ1bmN0aW9uIGFuZCB0cmFjZSB0aGUgZGF0YSBmbG93OyB0aGF0IGlzIHdoZXJlIEknbGwgYmVnaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjkwLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDc6MTY6NTQuNzY0NTY3MDg5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDY3Njc0OTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3Jpc2N2X3ZjcHVfYWlhX3NldF9jc3JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9yaXNjdi9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcmlzY3Yva3ZtL2FpYS5jPTE5MD1pbnQga3ZtX3Jpc2N2X3ZjcHVfYWlhX2dldF9jc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vYWlhLmMtMjEwLVxcbmFyY2gvcmlzY3Yva3ZtL2FpYS5jOjIxMTppbnQga3ZtX3Jpc2N2X3ZjcHVfYWlhX3NldF9jc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbmFyY2gvcmlzY3Yva3ZtL2FpYS5jLTIxMi1cXHRcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyByZWdfbnVtLFxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vdmNwdV9vbmVyZWcuYz00MDI9c3RhdGljIGludCBrdm1fcmlzY3ZfdmNwdV9zZXRfcmVnX2NzcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X29uZXJlZy5jLTQyNS1cXHRjYXNlIEtWTV9SRUdfUklTQ1ZfQ1NSX0FJQTpcXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X29uZXJlZy5jOjQyNjpcXHRcXHRyYyA9IGt2bV9yaXNjdl92Y3B1X2FpYV9zZXRfY3NyKHZjcHUsIHJlZ19udW0sIHJlZ192YWwpO1xcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmMtNDI3LVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwNzoxNjo1NS4zNzEzNDI2NTVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM3MDA2MzY3OTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEZ1enppbmcgVGFyZ2V0IFNlbGVjdGlvbiBmb3IgUklTQy1WIEtWTSBJbnRlcnJ1cHQgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgZnV6emluZyB0aGlzIFJJU0MtViBLVk0gaW50ZXJydXB0IGhhbmRsaW5nIGNoYW5nZSwgd2hpY2ggaW52b2x2ZXMgdGhlIGludHJvZHVjdGlvbiBvZiBhIHNwaW5sb2NrIHRvIHJlcGxhY2UgbG9ja2xlc3MgYXRvbWljIGJpdCBvcGVyYXRpb25zLiBUaGUgZ29hbCBpcyB0byBmb2N1cyBvbiBmdW5jdGlvbnMgdGhhdCBkaXJlY3RseSBpbnRlcmFjdCB3aXRoIHRoZSBuZXdseSBhZGRlZCBsb2NrIGFuZCBtb2RpZmllZCBiaXRtYXBzLiBCYXNlZCBvbiB0aGUgY29kZSwgYGt2bV9yaXNjdl92Y3B1X2dlbmVyYWxfc2V0X2NzcmAgaXMgY2FsbGVkIGZyb20gYGt2bV9yaXNjdl92Y3B1X3NldF9yZWdfY3NyYCwgd2hpY2gsIGNvbnZlbmllbnRseSwgaXMgdHJpZ2dlcmVkIGJ5IHRoZSBgS1ZNX1NFVF9PTkVfUkVHYCBpb2N0bC4gVGhpcyBpb2N0bCBwYXRoIGlzIGlkZWFsIGZvciBmdXp6aW5nLlxuXG5MZXQncyBicmVhayBkb3duIG15IHRhcmdldCBzZWxlY3Rpb24gcHJvY2Vzcy4gRmlyc3QsIEkgd2FudCB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IGFyZSBhY2Nlc3NpYmxlIGFuZCBhZmZlY3RlZCBieSB0aGUgY2hhbmdlcy4gSSd2ZSBwaW5wb2ludGVkIGEgZmV3OlxuXG4qICAgYGt2bV9yaXNjdl92Y3B1X2FpYV9zZXRfY3NyYFxuKiAgIGBrdm1fcmlzY3ZfdmNwdV9nZW5lcmFsX3NldF9jc3JgXG4qICAgYGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHRgXG4qICAgYGt2bV9yaXNjdl92Y3B1X3Vuc2V0X2ludGVycnVwdGBcblxuVGhlc2UgYXJlbid0IHRoZSBhYnNvbHV0ZSBob3R0ZXN0IHBhdGhzLCBsaWtlIHRoZSBWTSBleGl0IGxvb3AsIHdoaWNoIGlzIGEga2V5IGNvbnNpZGVyYXRpb24uIEkgd2FudCB0byBhdm9pZCBmdW5jdGlvbnMgdGhhdCBhcmUgcGFydCBvZiB0aGUgY29yZSBWTSBleGl0IGxvb3AgdG8gZ2V0IGEgYnJvYWRlciB0ZXN0IGRpc3RyaWJ1dGlvbi5cblxuTm93LCBJIGNvbnNpZGVyZWQgYGt2bV9yaXNjdl92Y3B1X2ZsdXNoX2ludGVycnVwdHNgIGFuZCBga3ZtX3Jpc2N2X3ZjcHVfc3luY19pbnRlcnJ1cHRzYCwgYnV0IHRob3NlIGFyZSByaWdodCBpbiB0aGUgVk0gZXhpdCBsb29wLCBhbmQgSSB3YW50IHRvIGF2b2lkIHRob3NlLiBTaW1pbGFybHksIGBrdm1fcmlzY3ZfdmNwdV9haWFfZmx1c2hfaW50ZXJydXB0c2AgYW5kIGBrdm1fcmlzY3ZfdmNwdV9haWFfc3luY19pbnRlcnJ1cHRzYCB3b3VsZCBiZSBpbnZva2VkIG9uIGhvdCBwYXRocywgc28gdGhlc2UgYXJlIG9mZiB0aGUgbGlzdCB0b28uXG5cblNvLCBpbiBzdW1tYXJ5LCBJJ20gY29uZmlkZW50IHRoYXQgdGhlIGZvbGxvd2luZyBhcmUgdGhlIGJlc3QgdGFyZ2V0cyBmb3IgZnV6emluZywgZ2l2ZW4gdGhhdCB0aGV5IHNldC91bnNldCBpbnRlcnJ1cHRzIGFuZCBDU1JzOlxuXG4qICAgYGt2bV9yaXNjdl92Y3B1X2FpYV9zZXRfY3NyYFxuKiAgIGBrdm1fcmlzY3ZfdmNwdV9nZW5lcmFsX3NldF9jc3JgXG4qICAgYGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHRgXG4qICAgYGt2bV9yaXNjdl92Y3B1X3Vuc2V0X2ludGVycnVwdGBcblxuTmV4dCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIExvb2tpbmcgaW50byB0aGUgS2NvbmZpZywgYENPTkZJR19LVk1gIGlzIGluZGVlZCB0aGUgcHJpbWFyeSwgYW5kIG9ubHksIGNvbmZpZ3VyYXRpb24gbmVlZGVkIGZvciB0aGlzIFJJU0MtViBLVk0gY29kZS4gR2l2ZW4gdGhhdCB0aGUgY29kZSBpcyBpbiBgYXJjaC9yaXNjdi9rdm0vYCBJJ20gY29uZmlkZW50IGFib3V0IHRoaXMuIEZpbmFsbHksIGxldCBtZSBqdXN0IHZlcmlmeSBga3ZtX3Jpc2N2X3ZjcHVfZ2VuZXJhbF9zZXRfY3NyYCBpcyB0aGUgY29ycmVjdCBuYW1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzk4NywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwNzoyNzozMi4zNzc3MTQwNjdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyMDk3NzQ2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fcmlzY3ZfdmNwdV9nZW5lcmFsX3NldF9jc3JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9yaXNjdi9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmM9MjczPXN0YXRpYyBpbnQga3ZtX3Jpc2N2X3ZjcHVfZ2VuZXJhbF9nZXRfY3NyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmMtMjk0LVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmM6Mjk1OnN0YXRpYyBpbnQga3ZtX3Jpc2N2X3ZjcHVfZ2VuZXJhbF9zZXRfY3NyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X29uZXJlZy5jLTI5Ni1cXHRcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgcmVnX251bSxcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmM9NDAyPXN0YXRpYyBpbnQga3ZtX3Jpc2N2X3ZjcHVfc2V0X3JlZ19jc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vdmNwdV9vbmVyZWcuYy00MjItXFx0Y2FzZSBLVk1fUkVHX1JJU0NWX0NTUl9HRU5FUkFMOlxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmM6NDIzOlxcdFxcdHJjID0ga3ZtX3Jpc2N2X3ZjcHVfZ2VuZXJhbF9zZXRfY3NyKHZjcHUsIHJlZ19udW0sIHJlZ192YWwpO1xcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmMtNDI0LVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwNzoyNzozMi42OTg2OTc1NTNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQwMjcxMzU2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludGVybmFsIE1vbm9sb2d1ZTogQWZmaXJtYXRpb24gYW5kIFByb2NlZHVyYWwgUmVmaW5lbWVudCoqXG5cblllcywgdGhhdCdzIGV4YWN0bHkgd2hhdCBJJ20gc2VlaW5nIHRvbywgdGhlIGFuYWx5c2lzIGlzIHNvbGlkLiBUaGUgY29uY2x1c2lvbiByZWFjaGVkIGlzIGNvcnJlY3QsIGFuZCBJIGFncmVlIHdpdGggdGhlIGltcGxpZWQgZGlyZWN0aW9uLlxuXG5Ob3csIGxldCdzIG1vdmUgZm9yd2FyZCBlZmZpY2llbnRseS4gRm9yZ2V0IGdlbmVyaWMgbmFtaW5nIGNvbnZlbnRpb25zOyB0aGUgbmV4dCBzdGVwIGNhbGxzIGZvciBhIGNsZWFyIGlkZW50aWZpZXIgZm9yIHRoaXMgc3RlcC4gVGhlIGFjdGlvbiBoZXJlIGludm9sdmVzIHJlY29yZGluZyB0aGUga2V5IG91dGNvbWVzIG9mIHRoZSBwcm9jZXNzLCBhIG5hdHVyYWwgZGVzaWduYXRpb24gd291bGQgYmUgdG8gY2FsbCBpdCBgc2V0LXJlc3VsdHNgLiBJdCB3aWxsIGJlIGNsZWFyIHRvIG1lLCBhbmQgc2hvdWxkIGJlIGNsZWFyIGZvciBhbnlvbmUgZWxzZSBsb29raW5nIGludG8gdGhpcyBjb2RlLCB0aGF0IHRoaXMgaWRlbnRpZmllciByZXByZXNlbnRzIHRoZSBzdGVwIHdoZXJlIHRoZSBzaWduaWZpY2FudCBkZXJpdmVkIG91dHB1dHMgYXJlIGNhcHR1cmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTU5NCwiT3V0cHV0VG9rZW5zIjoxNzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwNzoyNzozNy4xMDE0MTM2NzhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjMzNTM3OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9yaXNjdl92Y3B1X2FpYV9zZXRfY3NyXCIsXG4gICAgXCJrdm1fcmlzY3ZfdmNwdV9nZW5lcmFsX3NldF9jc3JcIixcbiAgICBcImt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHRcIixcbiAgICBcImt2bV9yaXNjdl92Y3B1X3Vuc2V0X2ludGVycnVwdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIGxvY2tsZXNzIGF0b21pYyBiaXRvcHMgd2l0aCBhIHJhdyBzcGlubG9jayBmb3IgdHJhY2tpbmcgcGVuZGluZyBWQ1BVIGludGVycnVwdHMgaW4gUklTQy1WIEtWTS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWZmZWN0cyBpbnRlcnJ1cHQgaW5qZWN0aW9uIGFuZCBzeW5jaHJvbml6YXRpb24uIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIGZ1bmN0aW9ucyB0aGF0IHNldC91bnNldCBpbnRlcnJ1cHRzIGFuZCBDU1JzLCB3aGljaCBhcmUgYWNjZXNzaWJsZSB2aWEgS1ZNIGlvY3RscyBhbmQgbm90IG9uIHRoZSBhYnNvbHV0ZSBob3R0ZXN0IFZNIGV4aXQgcGF0aC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fcmlzY3ZfdmNwdV9haWFfc2V0X2NzclwiLFxuICAgIFwia3ZtX3Jpc2N2X3ZjcHVfZ2VuZXJhbF9zZXRfY3NyXCIsXG4gICAgXCJrdm1fcmlzY3ZfdmNwdV9zZXRfaW50ZXJydXB0XCIsXG4gICAgXCJrdm1fcmlzY3ZfdmNwdV91bnNldF9pbnRlcnJ1cHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBsb2NrbGVzcyBhdG9taWMgYml0b3BzIHdpdGggYSByYXcgc3BpbmxvY2sgZm9yIHRyYWNraW5nIHBlbmRpbmcgVkNQVSBpbnRlcnJ1cHRzIGluIFJJU0MtViBLVk0uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFmZmVjdHMgaW50ZXJydXB0IGluamVjdGlvbiBhbmQgc3luY2hyb25pemF0aW9uLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiBmdW5jdGlvbnMgdGhhdCBzZXQvdW5zZXQgaW50ZXJydXB0cyBhbmQgQ1NScywgd2hpY2ggYXJlIGFjY2Vzc2libGUgdmlhIEtWTSBpb2N0bHMgYW5kIG5vdCBvbiB0aGUgYWJzb2x1dGUgaG90dGVzdCBWTSBleGl0IHBhdGguXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow5xrqt[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-13 06:59:07 +0000 UTC FinishedAt: 2026-07-13 07:27:38 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "a13c140cc289c0b7b3770bce5b3ad42ab35074aa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "a13c140cc289c0b7b3770bce5b3ad42ab35074aa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "25fe3c7d-088d-4bfc-97db-5caf3a57fb98" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_riscv_vcpu_aia_set_csr", "kvm_riscv_vcpu_general_set_csr", "kvm_riscv_vcpu_set_interrupt", "kvm_riscv_vcpu_unset_interrupt" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA3OjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fcmlzY3ZfdmNwdV9haWFfc2V0X2NzciYjMzQ7LAogICAgJiMzNDtrdm1fcmlzY3ZfdmNwdV9nZW5lcmFsX3NldF9jc3ImIzM0OywKICAgICYjMzQ7a3ZtX3Jpc2N2X3ZjcHVfc2V0X2ludGVycnVwdCYjMzQ7LAogICAgJiMzNDtrdm1fcmlzY3ZfdmNwdV91bnNldF9pbnRlcnJ1cHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgbG9ja2xlc3MgYXRvbWljIGJpdG9wcyB3aXRoIGEgcmF3IHNwaW5sb2NrIGZvciB0cmFja2luZyBwZW5kaW5nIFZDUFUgaW50ZXJydXB0cyBpbiBSSVNDLVYgS1ZNLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZmZlY3RzIGludGVycnVwdCBpbmplY3Rpb24gYW5kIHN5bmNocm9uaXphdGlvbi4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gZnVuY3Rpb25zIHRoYXQgc2V0L3Vuc2V0IGludGVycnVwdHMgYW5kIENTUnMsIHdoaWNoIGFyZSBhY2Nlc3NpYmxlIHZpYSBLVk0gaW9jdGxzIGFuZCBub3Qgb24gdGhlIGFic29sdXRlIGhvdHRlc3QgVk0gZXhpdCBwYXRoLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA3OjE0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNmYwMWUzNjk0NjliYzcwZmY2MmNiNDkwZWE2NTkyZGQwZjI5NWU3MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDEzIDA3OjE0OjU0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggNjAwMTdjZWVjOWQyYWYuLmUyZDU4MDgxNjllNDRkIDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbkBAIC0yMDksMTMgJiM0MzsyMDksMTMgQEAgc3RydWN0IGt2bV92Y3B1X2FyY2gge1xuIFx0LypcbiBcdCAqIFZDUFUgaW50ZXJydXB0c1xuIFx0ICpcbi1cdCAqIFdlIGhhdmUgYSBsb2NrbGVzcyBhcHByb2FjaCBmb3IgdHJhY2tpbmcgcGVuZGluZyBWQ1BVIGludGVycnVwdHNcbi1cdCAqIGltcGxlbWVudGVkIHVzaW5nIGF0b21pYyBiaXRvcHMuIFRoZSBpcnFzX3BlbmRpbmcgYml0bWFwIHJlcHJlc2VudFxuLVx0ICogcGVuZGluZyBpbnRlcnJ1cHRzIHdoZXJlYXMgaXJxc19wZW5kaW5nX21hc2sgcmVwcmVzZW50IGJpdHMgY2hhbmdlZFxuLVx0ICogaW4gaXJxc19wZW5kaW5nLiBPdXIgYXBwcm9hY2ggaXMgbW9kZWxlZCBhcm91bmQgbXVsdGlwbGUgcHJvZHVjZXJcbi1cdCAqIGFuZCBzaW5nbGUgY29uc3VtZXIgcHJvYmxlbSB3aGVyZSB0aGUgY29uc3VtZXIgaXMgdGhlIFZDUFUgaXRzZWxmLlxuJiM0MztcdCAqIFRoZSBpcnFzX3BlbmRpbmcgYml0bWFwIHJlcHJlc2VudHMgcGVuZGluZyBpbnRlcnJ1cHRzIHdoZXJlYXNcbiYjNDM7XHQgKiBpcnFzX3BlbmRpbmdfbWFzayByZXByZXNlbnRzIGJpdHMgY2hhbmdlZCBpbiBpcnFzX3BlbmRpbmcuIFVwZGF0ZXNcbiYjNDM7XHQgKiB0byB0aGVzZSBiaXRtYXBzIGFyZSBzZXJpYWxpemVkIHNvIHZjcHUgaW50ZXJydXB0IHN5bmMvZmx1c2ggY2Fubm90XG4mIzQzO1x0ICogZHJvcCBhIG5ld2x5IGluamVjdGVkIGludGVycnVwdCB3aGlsZSBzeW5jaW5nIGd1ZXN0LXZpc2libGUgSFZJUC5cbiBcdCAqL1xuICNkZWZpbmUgS1ZNX1JJU0NWX1ZDUFVfTlJfSVJRU1x0NjRcbiYjNDM7XHRyYXdfc3BpbmxvY2tfdCBpcnFzX3BlbmRpbmdfbG9jaztcbiBcdERFQ0xBUkVfQklUTUFQKGlycXNfcGVuZGluZywgS1ZNX1JJU0NWX1ZDUFVfTlJfSVJRUyk7XG4gXHRERUNMQVJFX0JJVE1BUChpcnFzX3BlbmRpbmdfbWFzaywgS1ZNX1JJU0NWX1ZDUFVfTlJfSVJRUyk7XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vYWlhLmMgYi9hcmNoL3Jpc2N2L2t2bS9haWEuY1xuaW5kZXggYmFmYjAwOWM1Y2U1NTkuLjIyNWU0YWVkODFhMzc3IDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9rdm0vYWlhLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3Yva3ZtL2FpYS5jXG5AQCAtNTMsMTIgJiM0Mzs1MywxNSBAQCB2b2lkIGt2bV9yaXNjdl92Y3B1X2FpYV9mbHVzaF9pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHN0cnVjdCBrdm1fdmNwdV9haWFfY3NyICpjc3IgPSBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guYWlhX2NvbnRleHQuZ3Vlc3RfY3NyO1xuIFx0dW5zaWduZWQgbG9uZyBtYXNrLCB2YWw7XG4gXG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2spO1xuJiM0MztcbiBcdGlmICgha3ZtX3Jpc2N2X2FpYV9hdmFpbGFibGUoKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0aWYgKFJFQURfT05DRSh2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2tbMV0pKSB7XG4tXHRcdG1hc2sgPSB4Y2hnX2FjcXVpcmUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19tYXNrWzFdLCAwKTtcbi1cdFx0dmFsID0gUkVBRF9PTkNFKHZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdbMV0pIFx1MDAyNiBtYXNrO1xuJiM0MztcdG1hc2sgPSB2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2tbMV07XG4mIzQzO1x0aWYgKG1hc2spIHtcbiYjNDM7XHRcdHZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFza1sxXSA9IDA7XG4mIzQzO1x0XHR2YWwgPSB2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nWzFdIFx1MDAyNiBtYXNrO1xuIFxuIFx0XHRjc3ItXHUwMDNlaHZpcGggXHUwMDI2PSB+bWFzaztcbiBcdFx0Y3NyLVx1MDAzZWh2aXBoIHw9IHZhbDtcbkBAIC02OSw2ICYjNDM7NzIsOCBAQCB2b2lkIGt2bV9yaXNjdl92Y3B1X2FpYV9zeW5jX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHN0cnVjdCBrdm1fdmNwdV9haWFfY3NyICpjc3IgPSBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guYWlhX2NvbnRleHQuZ3Vlc3RfY3NyO1xuIFxuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19sb2NrKTtcbiYjNDM7XG4gXHRpZiAoa3ZtX3Jpc2N2X2FpYV9hdmFpbGFibGUoKSlcbiBcdFx0Y3NyLVx1MDAzZXZzaWVoID0gbmNzcl9yZWFkKENTUl9WU0lFSCk7XG4gfVxuQEAgLTc4LDExICYjNDM7ODMsMTMgQEAgYm9vbCBrdm1fcmlzY3ZfdmNwdV9haWFfaGFzX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgbWFzaylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHNlaXA7XG4gXG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2spO1xuJiM0MztcbiBcdGlmICgha3ZtX3Jpc2N2X2FpYV9hdmFpbGFibGUoKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuICNpZmRlZiBDT05GSUdfMzJCSVRcbi1cdGlmIChSRUFEX09OQ0UodmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ1sxXSkgXHUwMDI2XG4mIzQzO1x0aWYgKHZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdbMV0gXHUwMDI2XG4gXHQgICAgKHZjcHUtXHUwMDNlYXJjaC5haWFfY29udGV4dC5ndWVzdF9jc3IudnNpZWggXHUwMDI2IHVwcGVyXzMyX2JpdHMobWFzaykpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiAjZW5kaWZcbkBAIC0yMDcsNiAmIzQzOzIxNCw5IEBAIGludCBrdm1fcmlzY3ZfdmNwdV9haWFfc2V0X2NzcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4ge1xuIFx0c3RydWN0IGt2bV92Y3B1X2FpYV9jc3IgKmNzciA9IFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5haWFfY29udGV4dC5ndWVzdF9jc3I7XG4gXHR1bnNpZ25lZCBsb25nIHJlZ3NfbWF4ID0gc2l6ZW9mKHN0cnVjdCBrdm1fcmlzY3ZfYWlhX2NzcikgLyBzaXplb2YodW5zaWduZWQgbG9uZyk7XG4mIzQzOyNpZmRlZiBDT05GSUdfMzJCSVRcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MzsjZW5kaWZcbiBcbiBcdGlmICghcmlzY3ZfaXNhX2V4dGVuc2lvbl9hdmFpbGFibGUodmNwdS1cdTAwM2VhcmNoLmlzYSwgU1NBSUEpKVxuIFx0XHRyZXR1cm4gLUVOT0VOVDtcbkBAIC0yMTYsMTEgJiM0MzsyMjYsMTggQEAgaW50IGt2bV9yaXNjdl92Y3B1X2FpYV9zZXRfY3NyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdHJlZ19udW0gPSBhcnJheV9pbmRleF9ub3NwZWMocmVnX251bSwgcmVnc19tYXgpO1xuIFxuIFx0aWYgKGt2bV9yaXNjdl9haWFfYXZhaWxhYmxlKCkpIHtcbi1cdFx0KCh1bnNpZ25lZCBsb25nICopY3NyKVtyZWdfbnVtXSA9IHZhbDtcbi1cbiAjaWZkZWYgQ09ORklHXzMyQklUXG4tXHRcdGlmIChyZWdfbnVtID09IEtWTV9SRUdfUklTQ1ZfQ1NSX0FJQV9SRUcoc2lwaCkpXG4tXHRcdFx0V1JJVEVfT05DRSh2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2tbMV0sIDApO1xuJiM0MztcdFx0aWYgKHJlZ19udW0gPT0gS1ZNX1JFR19SSVNDVl9DU1JfQUlBX1JFRyhzaXBoKSkge1xuJiM0MztcdFx0XHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7XG4mIzQzO1x0XHRcdCgodW5zaWduZWQgbG9uZyAqKWNzcilbcmVnX251bV0gPSB2YWw7XG4mIzQzO1x0XHRcdHZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFza1sxXSA9IDA7XG4mIzQzO1x0XHRcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbG9jayxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgZmxhZ3MpO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0KCh1bnNpZ25lZCBsb25nICopY3NyKVtyZWdfbnVtXSA9IHZhbDtcbiYjNDM7XHRcdH1cbiYjNDM7I2Vsc2VcbiYjNDM7XHRcdCgodW5zaWduZWQgbG9uZyAqKWNzcilbcmVnX251bV0gPSB2YWw7XG4gI2VuZGlmXG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vdmNwdS5jIGIvYXJjaC9yaXNjdi9rdm0vdmNwdS5jXG5pbmRleCBjZjZlMjMxZTc2ZTI1NC4uN2Q4ZDIwODM5ZDQ2ZWUgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS92Y3B1LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3Yva3ZtL3ZjcHUuY1xuQEAgLTgwLDYgJiM0Mzs4MCw3IEBAIHN0YXRpYyB2b2lkIGt2bV9yaXNjdl92Y3B1X2NvbnRleHRfcmVzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFxuIHN0YXRpYyB2b2lkIGt2bV9yaXNjdl9yZXNldF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBrdm1fc2JpX3Jlc2V0KVxuIHtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0Ym9vbCBsb2FkZWQ7XG4gXG4gXHQvKipcbkBAIC0xMDQsOCAmIzQzOzEwNSwxMCBAQCBzdGF0aWMgdm9pZCBrdm1fcmlzY3ZfcmVzZXRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wga3ZtX3NiaV9yZXNldClcbiBcbiBcdGt2bV9yaXNjdl92Y3B1X2FpYV9yZXNldCh2Y3B1KTtcbiBcbiYjNDM7XHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7XG4gXHRiaXRtYXBfemVybyh2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nLCBLVk1fUklTQ1ZfVkNQVV9OUl9JUlFTKTtcbiBcdGJpdG1hcF96ZXJvKHZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFzaywgS1ZNX1JJU0NWX1ZDUFVfTlJfSVJRUyk7XG4mIzQzO1x0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7XG4gXG4gXHRrdm1fcmlzY3ZfdmNwdV9wbXVfcmVzZXQodmNwdSk7XG4gXG5AQCAtMTUxLDYgJiM0MzsxNTQsNyBAQCBpbnQga3ZtX2FyY2hfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIFx0LyogU2V0dXAgVkNQVSBoZmVuY2UgcXVldWUgKi9cbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5oZmVuY2VfbG9jayk7XG4mIzQzO1x0cmF3X3NwaW5fbG9ja19pbml0KFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbG9jayk7XG4gXG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gucmVzZXRfc3RhdGUubG9jayk7XG4gXG5AQCAtMzUyLDEwICYjNDM7MzU2LDEzIEBAIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfZmx1c2hfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IGt2bV92Y3B1X2NzciAqY3NyID0gXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmd1ZXN0X2NzcjtcbiBcdHVuc2lnbmVkIGxvbmcgbWFzaywgdmFsO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXG4tXHRpZiAoUkVBRF9PTkNFKHZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFza1swXSkpIHtcbi1cdFx0bWFzayA9IHhjaGdfYWNxdWlyZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2tbMF0sIDApO1xuLVx0XHR2YWwgPSBSRUFEX09OQ0UodmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ1swXSkgXHUwMDI2IG1hc2s7XG4mIzQzO1x0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpO1xuJiM0MztcdG1hc2sgPSB2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2tbMF07XG4mIzQzO1x0aWYgKG1hc2spIHtcbiYjNDM7XHRcdHZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFza1swXSA9IDA7XG4mIzQzO1x0XHR2YWwgPSB2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nWzBdIFx1MDAyNiBtYXNrO1xuIFxuIFx0XHRjc3ItXHUwMDNlaHZpcCBcdTAwMjY9IH5tYXNrO1xuIFx0XHRjc3ItXHUwMDNlaHZpcCB8PSB2YWw7XG5AQCAtMzYzLDExICYjNDM7MzcwLDEzIEBAIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfZmx1c2hfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gXHQvKiBGbHVzaCBBSUEgaGlnaCBpbnRlcnJ1cHRzICovXG4gXHRrdm1fcmlzY3ZfdmNwdV9haWFfZmx1c2hfaW50ZXJydXB0cyh2Y3B1KTtcbiYjNDM7XHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTtcbiB9XG4gXG4gdm9pZCBrdm1fcmlzY3ZfdmNwdV9zeW5jX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgaHZpcDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0c3RydWN0IGt2bV92Y3B1X2FyY2ggKnYgPSBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2g7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHVfY3NyICpjc3IgPSBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guZ3Vlc3RfY3NyO1xuIFxuQEAgLTM3NiwyNyAmIzQzOzM4NSwyOSBAQCB2b2lkIGt2bV9yaXNjdl92Y3B1X3N5bmNfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gXHQvKiBTeW5jLXVwIEhWSVAuVlNTSVAgYml0IGNoYW5nZXMgZG9lcyBieSBHdWVzdCAqL1xuIFx0aHZpcCA9IG5jc3JfcmVhZChDU1JfSFZJUCk7XG4mIzQzO1x0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnYtXHUwMDNlaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTtcbiBcdGlmICgoY3NyLVx1MDAzZWh2aXAgXiBodmlwKSBcdTAwMjYgKDFVTCBcdTAwM2NcdTAwM2MgSVJRX1ZTX1NPRlQpKSB7XG4gXHRcdGlmIChodmlwIFx1MDAyNiAoMVVMIFx1MDAzY1x1MDAzYyBJUlFfVlNfU09GVCkpIHtcbi1cdFx0XHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoSVJRX1ZTX1NPRlQsXG4tXHRcdFx0XHRcdCAgICAgIHYtXHUwMDNlaXJxc19wZW5kaW5nX21hc2spKVxuLVx0XHRcdFx0c2V0X2JpdChJUlFfVlNfU09GVCwgdi1cdTAwM2VpcnFzX3BlbmRpbmcpO1xuJiM0MztcdFx0XHRpZiAoIV9fdGVzdF9hbmRfc2V0X2JpdChJUlFfVlNfU09GVCxcbiYjNDM7XHRcdFx0XHRcdFx0di1cdTAwM2VpcnFzX3BlbmRpbmdfbWFzaykpXG4mIzQzO1x0XHRcdFx0X19zZXRfYml0KElSUV9WU19TT0ZULCB2LVx1MDAzZWlycXNfcGVuZGluZyk7XG4gXHRcdH0gZWxzZSB7XG4tXHRcdFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KElSUV9WU19TT0ZULFxuLVx0XHRcdFx0XHQgICAgICB2LVx1MDAzZWlycXNfcGVuZGluZ19tYXNrKSlcbi1cdFx0XHRcdGNsZWFyX2JpdChJUlFfVlNfU09GVCwgdi1cdTAwM2VpcnFzX3BlbmRpbmcpO1xuJiM0MztcdFx0XHRpZiAoIV9fdGVzdF9hbmRfc2V0X2JpdChJUlFfVlNfU09GVCxcbiYjNDM7XHRcdFx0XHRcdFx0di1cdTAwM2VpcnFzX3BlbmRpbmdfbWFzaykpXG4mIzQzO1x0XHRcdFx0X19jbGVhcl9iaXQoSVJRX1ZTX1NPRlQsIHYtXHUwMDNlaXJxc19wZW5kaW5nKTtcbiBcdFx0fVxuIFx0fVxuIFxuIFx0LyogU3luYyB1cCB0aGUgSFZJUC5MQ09GSVAgYml0IGNoYW5nZXMgKG9ubHkgY2xlYXIpIGJ5IHRoZSBndWVzdCAqL1xuIFx0aWYgKChjc3ItXHUwMDNlaHZpcCBeIGh2aXApIFx1MDAyNiAoMVVMIFx1MDAzY1x1MDAzYyBJUlFfUE1VX09WRikpIHtcbiBcdFx0aWYgKCEoaHZpcCBcdTAwMjYgKDFVTCBcdTAwM2NcdTAwM2MgSVJRX1BNVV9PVkYpKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgICF0ZXN0X2FuZF9zZXRfYml0KElSUV9QTVVfT1ZGLCB2LVx1MDAzZWlycXNfcGVuZGluZ19tYXNrKSlcbi1cdFx0XHRjbGVhcl9iaXQoSVJRX1BNVV9PVkYsIHYtXHUwMDNlaXJxc19wZW5kaW5nKTtcbiYjNDM7XHRcdCAgICAhX190ZXN0X2FuZF9zZXRfYml0KElSUV9QTVVfT1ZGLCB2LVx1MDAzZWlycXNfcGVuZGluZ19tYXNrKSlcbiYjNDM7XHRcdFx0X19jbGVhcl9iaXQoSVJRX1BNVV9PVkYsIHYtXHUwMDNlaXJxc19wZW5kaW5nKTtcbiBcdH1cbiBcbiBcdC8qIFN5bmMtdXAgQUlBIGhpZ2ggaW50ZXJydXB0cyAqL1xuIFx0a3ZtX3Jpc2N2X3ZjcHVfYWlhX3N5bmNfaW50ZXJydXB0cyh2Y3B1KTtcbiYjNDM7XHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ2LVx1MDAzZWlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7XG4gXG4gXHQvKiBTeW5jLXVwIHRpbWVyIENTUnMgKi9cbiBcdGt2bV9yaXNjdl92Y3B1X3RpbWVyX3N5bmModmNwdSk7XG5AQCAtNDA0LDYgJiM0Mzs0MTUsOCBAQCB2b2lkIGt2bV9yaXNjdl92Y3B1X3N5bmNfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gaW50IGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgaXJxKVxuIHtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcbiBcdC8qXG4gXHQgKiBXZSBvbmx5IGFsbG93IFZTLW1vZGUgc29mdHdhcmUsIHRpbWVyLCBhbmQgZXh0ZXJuYWxcbiBcdCAqIGludGVycnVwdHMgd2hlbiBpcnEgaXMgb25lIG9mIHRoZSBsb2NhbCBpbnRlcnJ1cHRzXG5AQCAtNDE2LDkgJiM0Mzs0MjksMTAgQEAgaW50IGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgaXJxKVxuIFx0ICAgIGlycSAhPSBJUlFfUE1VX09WRilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRzZXRfYml0KGlycSwgdmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZyk7XG4tXHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcbi1cdHNldF9iaXQoaXJxLCB2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2spO1xuJiM0MztcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTtcbiYjNDM7XHRfX3NldF9iaXQoaXJxLCB2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nKTtcbiYjNDM7XHRfX3NldF9iaXQoaXJxLCB2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2spO1xuJiM0MztcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpO1xuIFxuIFx0a3ZtX3ZjcHVfa2ljayh2Y3B1KTtcbiBcbkBAIC00MjcsNiAmIzQzOzQ0MSw4IEBAIGludCBrdm1fcmlzY3ZfdmNwdV9zZXRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IGlycSlcbiBcbiBpbnQga3ZtX3Jpc2N2X3ZjcHVfdW5zZXRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IGlycSlcbiB7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XG4gXHQvKlxuIFx0ICogV2Ugb25seSBhbGxvdyBWUy1tb2RlIHNvZnR3YXJlLCB0aW1lciwgY291bnRlciBvdmVyZmxvdyBhbmQgZXh0ZXJuYWxcbiBcdCAqIGludGVycnVwdHMgd2hlbiBpcnEgaXMgb25lIG9mIHRoZSBsb2NhbCBpbnRlcnJ1cHRzXG5AQCAtNDM5LDI2ICYjNDM7NDU1LDMzIEBAIGludCBrdm1fcmlzY3ZfdmNwdV91bnNldF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgaXJxKVxuIFx0ICAgIGlycSAhPSBJUlFfUE1VX09WRilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRjbGVhcl9iaXQoaXJxLCB2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nKTtcbi1cdHNtcF9tYl9fYmVmb3JlX2F0b21pYygpO1xuLVx0c2V0X2JpdChpcnEsIHZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFzayk7XG4mIzQzO1x0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpO1xuJiM0MztcdF9fY2xlYXJfYml0KGlycSwgdmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZyk7XG4mIzQzO1x0X19zZXRfYml0KGlycSwgdmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19tYXNrKTtcbiYjNDM7XHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbiBcbiBib29sIGt2bV9yaXNjdl92Y3B1X2hhc19pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IG1hc2spXG4ge1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHR1bnNpZ25lZCBsb25nIGllO1xuJiM0MztcdGJvb2wgcmV0O1xuIFxuJiM0MztcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTtcbiBcdGllID0gKCh2Y3B1LVx1MDAzZWFyY2guZ3Vlc3RfY3NyLnZzaWUgXHUwMDI2IFZTSVBfVkFMSURfTUFTSylcbiBcdFx0XHUwMDNjXHUwMDNjIFZTSVBfVE9fSFZJUF9TSElGVCkgXHUwMDI2ICh1bnNpZ25lZCBsb25nKW1hc2s7XG4gXHRpZSB8PSB2Y3B1LVx1MDAzZWFyY2guZ3Vlc3RfY3NyLnZzaWUgXHUwMDI2IH5JUlFfTE9DQUxfTUFTSyBcdTAwMjZcbiBcdFx0KHVuc2lnbmVkIGxvbmcpbWFzaztcbi1cdGlmIChSRUFEX09OQ0UodmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ1swXSkgXHUwMDI2IGllKVxuLVx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRyZXQgPSB2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nWzBdIFx1MDAyNiBpZTtcbiBcbiBcdC8qIENoZWNrIEFJQSBoaWdoIGludGVycnVwdHMgKi9cbi1cdHJldHVybiBrdm1fcmlzY3ZfdmNwdV9haWFfaGFzX2ludGVycnVwdHModmNwdSwgbWFzayk7XG4mIzQzO1x0aWYgKCFyZXQpXG4mIzQzO1x0XHRyZXQgPSBrdm1fcmlzY3ZfdmNwdV9haWFfaGFzX2ludGVycnVwdHModmNwdSwgbWFzayk7XG4mIzQzO1x0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4gfVxuIFxuIHZvaWQgX19rdm1fcmlzY3ZfdmNwdV9wb3dlcl9vZmYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmMgYi9hcmNoL3Jpc2N2L2t2bS92Y3B1X29uZXJlZy5jXG5pbmRleCBiYjkyMGU4OTIzYzkzMC4uY2JhMzY4Mjk0NGI2OTQgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS92Y3B1X29uZXJlZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2t2bS92Y3B1X29uZXJlZy5jXG5AQCAtMjk4LDYgJiM0MzsyOTgsNyBAQCBzdGF0aWMgaW50IGt2bV9yaXNjdl92Y3B1X2dlbmVyYWxfc2V0X2NzcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4ge1xuIFx0c3RydWN0IGt2bV92Y3B1X2NzciAqY3NyID0gXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmd1ZXN0X2NzcjtcbiBcdHVuc2lnbmVkIGxvbmcgcmVnc19tYXggPSBzaXplb2Yoc3RydWN0IGt2bV9yaXNjdl9jc3IpIC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXG4gXHRpZiAocmVnX251bSBcdTAwM2U9IHJlZ3NfbWF4KVxuIFx0XHRyZXR1cm4gLUVOT0VOVDtcbkBAIC0zMDksMTAgJiM0MzszMTAsMTQgQEAgc3RhdGljIGludCBrdm1fcmlzY3ZfdmNwdV9nZW5lcmFsX3NldF9jc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0XHRyZWdfdmFsIFx1MDAzY1x1MDAzYz0gVlNJUF9UT19IVklQX1NISUZUO1xuIFx0fVxuIFxuLVx0KCh1bnNpZ25lZCBsb25nICopY3NyKVtyZWdfbnVtXSA9IHJlZ192YWw7XG4tXG4tXHRpZiAocmVnX251bSA9PSBLVk1fUkVHX1JJU0NWX0NTUl9SRUcoc2lwKSlcbi1cdFx0V1JJVEVfT05DRSh2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2tbMF0sIDApO1xuJiM0MztcdGlmIChyZWdfbnVtID09IEtWTV9SRUdfUklTQ1ZfQ1NSX1JFRyhzaXApKSB7XG4mIzQzO1x0XHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7XG4mIzQzO1x0XHQoKHVuc2lnbmVkIGxvbmcgKiljc3IpW3JlZ19udW1dID0gcmVnX3ZhbDtcbiYjNDM7XHRcdHZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFza1swXSA9IDA7XG4mIzQzO1x0XHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0KCh1bnNpZ25lZCBsb25nICopY3NyKVtyZWdfbnVtXSA9IHJlZ192YWw7XG4mIzQzO1x0fVxuIFxuIFx0cmV0dXJuIDA7XG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA3OjE0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjEybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fcmlzY3ZfdmNwdV9haWFfc2V0X2NzciYjMzQ7LAogICAgJiMzNDtrdm1fcmlzY3ZfdmNwdV9nZW5lcmFsX3NldF9jc3ImIzM0OywKICAgICYjMzQ7a3ZtX3Jpc2N2X3ZjcHVfc2V0X2ludGVycnVwdCYjMzQ7LAogICAgJiMzNDtrdm1fcmlzY3ZfdmNwdV91bnNldF9pbnRlcnJ1cHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgbG9ja2xlc3MgYXRvbWljIGJpdG9wcyB3aXRoIGEgcmF3IHNwaW5sb2NrIGZvciB0cmFja2luZyBwZW5kaW5nIFZDUFUgaW50ZXJydXB0cyBpbiBSSVNDLVYgS1ZNLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZmZlY3RzIGludGVycnVwdCBpbmplY3Rpb24gYW5kIHN5bmNocm9uaXphdGlvbi4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gZnVuY3Rpb25zIHRoYXQgc2V0L3Vuc2V0IGludGVycnVwdHMgYW5kIENTUnMsIHdoaWNoIGFyZSBhY2Nlc3NpYmxlIHZpYSBLVk0gaW9jdGxzIGFuZCBub3Qgb24gdGhlIGFic29sdXRlIGhvdHRlc3QgVk0gZXhpdCBwYXRoLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2ZjAxZTM2OTQ2OWJjNzBmZjYyY2I0OTBlYTY1OTJkZDBmMjk1ZTcyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBKdWwgMTMgMDc6MTQ6NTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKaW5kZXggNjAwMTdjZWVjOWQyYWYuLmUyZDU4MDgxNjllNDRkIDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCkBAIC0yMDksMTMgJiM0MzsyMDksMTMgQEAgc3RydWN0IGt2bV92Y3B1X2FyY2ggewogCS8qCiAJICogVkNQVSBpbnRlcnJ1cHRzCiAJICoKLQkgKiBXZSBoYXZlIGEgbG9ja2xlc3MgYXBwcm9hY2ggZm9yIHRyYWNraW5nIHBlbmRpbmcgVkNQVSBpbnRlcnJ1cHRzCi0JICogaW1wbGVtZW50ZWQgdXNpbmcgYXRvbWljIGJpdG9wcy4gVGhlIGlycXNfcGVuZGluZyBiaXRtYXAgcmVwcmVzZW50Ci0JICogcGVuZGluZyBpbnRlcnJ1cHRzIHdoZXJlYXMgaXJxc19wZW5kaW5nX21hc2sgcmVwcmVzZW50IGJpdHMgY2hhbmdlZAotCSAqIGluIGlycXNfcGVuZGluZy4gT3VyIGFwcHJvYWNoIGlzIG1vZGVsZWQgYXJvdW5kIG11bHRpcGxlIHByb2R1Y2VyCi0JICogYW5kIHNpbmdsZSBjb25zdW1lciBwcm9ibGVtIHdoZXJlIHRoZSBjb25zdW1lciBpcyB0aGUgVkNQVSBpdHNlbGYuCiYjNDM7CSAqIFRoZSBpcnFzX3BlbmRpbmcgYml0bWFwIHJlcHJlc2VudHMgcGVuZGluZyBpbnRlcnJ1cHRzIHdoZXJlYXMKJiM0MzsJICogaXJxc19wZW5kaW5nX21hc2sgcmVwcmVzZW50cyBiaXRzIGNoYW5nZWQgaW4gaXJxc19wZW5kaW5nLiBVcGRhdGVzCiYjNDM7CSAqIHRvIHRoZXNlIGJpdG1hcHMgYXJlIHNlcmlhbGl6ZWQgc28gdmNwdSBpbnRlcnJ1cHQgc3luYy9mbHVzaCBjYW5ub3QKJiM0MzsJICogZHJvcCBhIG5ld2x5IGluamVjdGVkIGludGVycnVwdCB3aGlsZSBzeW5jaW5nIGd1ZXN0LXZpc2libGUgSFZJUC4KIAkgKi8KICNkZWZpbmUgS1ZNX1JJU0NWX1ZDUFVfTlJfSVJRUwk2NAomIzQzOwlyYXdfc3BpbmxvY2tfdCBpcnFzX3BlbmRpbmdfbG9jazsKIAlERUNMQVJFX0JJVE1BUChpcnFzX3BlbmRpbmcsIEtWTV9SSVNDVl9WQ1BVX05SX0lSUVMpOwogCURFQ0xBUkVfQklUTUFQKGlycXNfcGVuZGluZ19tYXNrLCBLVk1fUklTQ1ZfVkNQVV9OUl9JUlFTKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vYWlhLmMgYi9hcmNoL3Jpc2N2L2t2bS9haWEuYwppbmRleCBiYWZiMDA5YzVjZTU1OS4uMjI1ZTRhZWQ4MWEzNzcgMTAwNjQ0Ci0tLSBhL2FyY2gvcmlzY3Yva3ZtL2FpYS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3Yva3ZtL2FpYS5jCkBAIC01MywxMiAmIzQzOzUzLDE1IEBAIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfYWlhX2ZsdXNoX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCXN0cnVjdCBrdm1fdmNwdV9haWFfY3NyICpjc3IgPSAmYW1wO3ZjcHUtJmd0O2FyY2guYWlhX2NvbnRleHQuZ3Vlc3RfY3NyOwogCXVuc2lnbmVkIGxvbmcgbWFzaywgdmFsOwogCiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDt2Y3B1LSZndDthcmNoLmlycXNfcGVuZGluZ19sb2NrKTsKJiM0MzsKIAlpZiAoIWt2bV9yaXNjdl9haWFfYXZhaWxhYmxlKCkpCiAJCXJldHVybjsKIAotCWlmIChSRUFEX09OQ0UodmNwdS0mZ3Q7YXJjaC5pcnFzX3BlbmRpbmdfbWFza1sxXSkpIHsKLQkJbWFzayA9IHhjaGdfYWNxdWlyZSgmYW1wO3ZjcHUtJmd0O2FyY2guaXJxc19wZW5kaW5nX21hc2tbMV0sIDApOwotCQl2YWwgPSBSRUFEX09OQ0UodmNwdS0mZ3Q7YXJjaC5pcnFzX3BlbmRpbmdbMV0pICZhbXA7IG1hc2s7CiYjNDM7CW1hc2sgPSB2Y3B1LSZndDthcmNoLmlycXNfcGVuZGluZ19tYXNrWzFdOwomIzQzOwlpZiAobWFzaykgewomIzQzOwkJdmNwdS0mZ3Q7YXJjaC5pcnFzX3BlbmRpbmdfbWFza1sxXSA9IDA7CiYjNDM7CQl2YWwgPSB2Y3B1LSZndDthcmNoLmlycXNfcGVuZGluZ1sxXSAmYW1wOyBtYXNrOwogCiAJCWNzci0mZ3Q7aHZpcGggJmFtcDs9IH5tYXNrOwogCQljc3ItJmd0O2h2aXBoIHw9IHZhbDsKQEAgLTY5LDYgJiM0Mzs3Miw4IEBAIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfYWlhX3N5bmNfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJc3RydWN0IGt2bV92Y3B1X2FpYV9jc3IgKmNzciA9ICZhbXA7dmNwdS0mZ3Q7YXJjaC5haWFfY29udGV4dC5ndWVzdF9jc3I7CiAKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3ZjcHUtJmd0O2FyY2guaXJxc19wZW5kaW5nX2xvY2spOwomIzQzOwogCWlmIChrdm1fcmlzY3ZfYWlhX2F2YWlsYWJsZSgpKQogCQljc3ItJmd0O3ZzaWVoID0gbmNzcl9yZWFkKENTUl9WU0lFSCk7CiB9CkBAIC03OCwxMSAmIzQzOzgzLDEzIEBAIGJvb2wga3ZtX3Jpc2N2X3ZjcHVfYWlhX2hhc19pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IG1hc2spCiB7CiAJdW5zaWduZWQgbG9uZyBzZWlwOwogCiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDt2Y3B1LSZndDthcmNoLmlycXNfcGVuZGluZ19sb2NrKTsKJiM0MzsKIAlpZiAoIWt2bV9yaXNjdl9haWFfYXZhaWxhYmxlKCkpCiAJCXJldHVybiBmYWxzZTsKIAogI2lmZGVmIENPTkZJR18zMkJJVAotCWlmIChSRUFEX09OQ0UodmNwdS0mZ3Q7YXJjaC5pcnFzX3BlbmRpbmdbMV0pICZhbXA7CiYjNDM7CWlmICh2Y3B1LSZndDthcmNoLmlycXNfcGVuZGluZ1sxXSAmYW1wOwogCSAgICAodmNwdS0mZ3Q7YXJjaC5haWFfY29udGV4dC5ndWVzdF9jc3IudnNpZWggJmFtcDsgdXBwZXJfMzJfYml0cyhtYXNrKSkpCiAJCXJldHVybiB0cnVlOwogI2VuZGlmCkBAIC0yMDcsNiAmIzQzOzIxNCw5IEBAIGludCBrdm1fcmlzY3ZfdmNwdV9haWFfc2V0X2NzcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiB7CiAJc3RydWN0IGt2bV92Y3B1X2FpYV9jc3IgKmNzciA9ICZhbXA7dmNwdS0mZ3Q7YXJjaC5haWFfY29udGV4dC5ndWVzdF9jc3I7CiAJdW5zaWduZWQgbG9uZyByZWdzX21heCA9IHNpemVvZihzdHJ1Y3Qga3ZtX3Jpc2N2X2FpYV9jc3IpIC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOwomIzQzOyNpZmRlZiBDT05GSUdfMzJCSVQKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsjZW5kaWYKIAogCWlmICghcmlzY3ZfaXNhX2V4dGVuc2lvbl9hdmFpbGFibGUodmNwdS0mZ3Q7YXJjaC5pc2EsIFNTQUlBKSkKIAkJcmV0dXJuIC1FTk9FTlQ7CkBAIC0yMTYsMTEgJiM0MzsyMjYsMTggQEAgaW50IGt2bV9yaXNjdl92Y3B1X2FpYV9zZXRfY3NyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAlyZWdfbnVtID0gYXJyYXlfaW5kZXhfbm9zcGVjKHJlZ19udW0sIHJlZ3NfbWF4KTsKIAogCWlmIChrdm1fcmlzY3ZfYWlhX2F2YWlsYWJsZSgpKSB7Ci0JCSgodW5zaWduZWQgbG9uZyAqKWNzcilbcmVnX251bV0gPSB2YWw7Ci0KICNpZmRlZiBDT05GSUdfMzJCSVQKLQkJaWYgKHJlZ19udW0gPT0gS1ZNX1JFR19SSVNDVl9DU1JfQUlBX1JFRyhzaXBoKSkKLQkJCVdSSVRFX09OQ0UodmNwdS0mZ3Q7YXJjaC5pcnFzX3BlbmRpbmdfbWFza1sxXSwgMCk7CiYjNDM7CQlpZiAocmVnX251bSA9PSBLVk1fUkVHX1JJU0NWX0NTUl9BSUFfUkVHKHNpcGgpKSB7CiYjNDM7CQkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZhbXA7dmNwdS0mZ3Q7YXJjaC5pcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpOwomIzQzOwkJCSgodW5zaWduZWQgbG9uZyAqKWNzcilbcmVnX251bV0gPSB2YWw7CiYjNDM7CQkJdmNwdS0mZ3Q7YXJjaC5pcnFzX3BlbmRpbmdfbWFza1sxXSA9IDA7CiYjNDM7CQkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDt2Y3B1LSZndDthcmNoLmlycXNfcGVuZGluZ19sb2NrLAomIzQzOwkJCQkJCSAgIGZsYWdzKTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJKCh1bnNpZ25lZCBsb25nICopY3NyKVtyZWdfbnVtXSA9IHZhbDsKJiM0MzsJCX0KJiM0MzsjZWxzZQomIzQzOwkJKCh1bnNpZ25lZCBsb25nICopY3NyKVtyZWdfbnVtXSA9IHZhbDsKICNlbmRpZgogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vdmNwdS5jIGIvYXJjaC9yaXNjdi9rdm0vdmNwdS5jCmluZGV4IGNmNmUyMzFlNzZlMjU0Li43ZDhkMjA4MzlkNDZlZSAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9rdm0vdmNwdS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3Yva3ZtL3ZjcHUuYwpAQCAtODAsNiAmIzQzOzgwLDcgQEAgc3RhdGljIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfY29udGV4dF9yZXNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAKIHN0YXRpYyB2b2lkIGt2bV9yaXNjdl9yZXNldF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBrdm1fc2JpX3Jlc2V0KQogewomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWJvb2wgbG9hZGVkOwogCiAJLyoqCkBAIC0xMDQsOCAmIzQzOzEwNSwxMCBAQCBzdGF0aWMgdm9pZCBrdm1fcmlzY3ZfcmVzZXRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wga3ZtX3NiaV9yZXNldCkKIAogCWt2bV9yaXNjdl92Y3B1X2FpYV9yZXNldCh2Y3B1KTsKIAomIzQzOwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDt2Y3B1LSZndDthcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7CiAJYml0bWFwX3plcm8odmNwdS0mZ3Q7YXJjaC5pcnFzX3BlbmRpbmcsIEtWTV9SSVNDVl9WQ1BVX05SX0lSUVMpOwogCWJpdG1hcF96ZXJvKHZjcHUtJmd0O2FyY2guaXJxc19wZW5kaW5nX21hc2ssIEtWTV9SSVNDVl9WQ1BVX05SX0lSUVMpOwomIzQzOwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3ZjcHUtJmd0O2FyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTsKIAogCWt2bV9yaXNjdl92Y3B1X3BtdV9yZXNldCh2Y3B1KTsKIApAQCAtMTUxLDYgJiM0MzsxNTQsNyBAQCBpbnQga3ZtX2FyY2hfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiAJLyogU2V0dXAgVkNQVSBoZmVuY2UgcXVldWUgKi8KIAlzcGluX2xvY2tfaW5pdCgmYW1wO3ZjcHUtJmd0O2FyY2guaGZlbmNlX2xvY2spOwomIzQzOwlyYXdfc3Bpbl9sb2NrX2luaXQoJmFtcDt2Y3B1LSZndDthcmNoLmlycXNfcGVuZGluZ19sb2NrKTsKIAogCXNwaW5fbG9ja19pbml0KCZhbXA7dmNwdS0mZ3Q7YXJjaC5yZXNldF9zdGF0ZS5sb2NrKTsKIApAQCAtMzUyLDEwICYjNDM7MzU2LDEzIEBAIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfZmx1c2hfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJc3RydWN0IGt2bV92Y3B1X2NzciAqY3NyID0gJmFtcDt2Y3B1LSZndDthcmNoLmd1ZXN0X2NzcjsKIAl1bnNpZ25lZCBsb25nIG1hc2ssIHZhbDsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmIChSRUFEX09OQ0UodmNwdS0mZ3Q7YXJjaC5pcnFzX3BlbmRpbmdfbWFza1swXSkpIHsKLQkJbWFzayA9IHhjaGdfYWNxdWlyZSgmYW1wO3ZjcHUtJmd0O2FyY2guaXJxc19wZW5kaW5nX21hc2tbMF0sIDApOwotCQl2YWwgPSBSRUFEX09OQ0UodmNwdS0mZ3Q7YXJjaC5pcnFzX3BlbmRpbmdbMF0pICZhbXA7IG1hc2s7CiYjNDM7CXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3ZjcHUtJmd0O2FyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTsKJiM0MzsJbWFzayA9IHZjcHUtJmd0O2FyY2guaXJxc19wZW5kaW5nX21hc2tbMF07CiYjNDM7CWlmIChtYXNrKSB7CiYjNDM7CQl2Y3B1LSZndDthcmNoLmlycXNfcGVuZGluZ19tYXNrWzBdID0gMDsKJiM0MzsJCXZhbCA9IHZjcHUtJmd0O2FyY2guaXJxc19wZW5kaW5nWzBdICZhbXA7IG1hc2s7CiAKIAkJY3NyLSZndDtodmlwICZhbXA7PSB+bWFzazsKIAkJY3NyLSZndDtodmlwIHw9IHZhbDsKQEAgLTM2MywxMSAmIzQzOzM3MCwxMyBAQCB2b2lkIGt2bV9yaXNjdl92Y3B1X2ZsdXNoX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiAJLyogRmx1c2ggQUlBIGhpZ2ggaW50ZXJydXB0cyAqLwogCWt2bV9yaXNjdl92Y3B1X2FpYV9mbHVzaF9pbnRlcnJ1cHRzKHZjcHUpOwomIzQzOwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3ZjcHUtJmd0O2FyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTsKIH0KIAogdm9pZCBrdm1fcmlzY3ZfdmNwdV9zeW5jX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXVuc2lnbmVkIGxvbmcgaHZpcDsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaCAqdiA9ICZhbXA7dmNwdS0mZ3Q7YXJjaDsKIAlzdHJ1Y3Qga3ZtX3ZjcHVfY3NyICpjc3IgPSAmYW1wO3ZjcHUtJmd0O2FyY2guZ3Vlc3RfY3NyOwogCkBAIC0zNzYsMjcgJiM0MzszODUsMjkgQEAgdm9pZCBrdm1fcmlzY3ZfdmNwdV9zeW5jX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiAJLyogU3luYy11cCBIVklQLlZTU0lQIGJpdCBjaGFuZ2VzIGRvZXMgYnkgR3Vlc3QgKi8KIAlodmlwID0gbmNzcl9yZWFkKENTUl9IVklQKTsKJiM0MzsJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZhbXA7di0mZ3Q7aXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTsKIAlpZiAoKGNzci0mZ3Q7aHZpcCBeIGh2aXApICZhbXA7ICgxVUwgJmx0OyZsdDsgSVJRX1ZTX1NPRlQpKSB7CiAJCWlmIChodmlwICZhbXA7ICgxVUwgJmx0OyZsdDsgSVJRX1ZTX1NPRlQpKSB7Ci0JCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoSVJRX1ZTX1NPRlQsCi0JCQkJCSAgICAgIHYtJmd0O2lycXNfcGVuZGluZ19tYXNrKSkKLQkJCQlzZXRfYml0KElSUV9WU19TT0ZULCB2LSZndDtpcnFzX3BlbmRpbmcpOwomIzQzOwkJCWlmICghX190ZXN0X2FuZF9zZXRfYml0KElSUV9WU19TT0ZULAomIzQzOwkJCQkJCXYtJmd0O2lycXNfcGVuZGluZ19tYXNrKSkKJiM0MzsJCQkJX19zZXRfYml0KElSUV9WU19TT0ZULCB2LSZndDtpcnFzX3BlbmRpbmcpOwogCQl9IGVsc2UgewotCQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KElSUV9WU19TT0ZULAotCQkJCQkgICAgICB2LSZndDtpcnFzX3BlbmRpbmdfbWFzaykpCi0JCQkJY2xlYXJfYml0KElSUV9WU19TT0ZULCB2LSZndDtpcnFzX3BlbmRpbmcpOwomIzQzOwkJCWlmICghX190ZXN0X2FuZF9zZXRfYml0KElSUV9WU19TT0ZULAomIzQzOwkJCQkJCXYtJmd0O2lycXNfcGVuZGluZ19tYXNrKSkKJiM0MzsJCQkJX19jbGVhcl9iaXQoSVJRX1ZTX1NPRlQsIHYtJmd0O2lycXNfcGVuZGluZyk7CiAJCX0KIAl9CiAKIAkvKiBTeW5jIHVwIHRoZSBIVklQLkxDT0ZJUCBiaXQgY2hhbmdlcyAob25seSBjbGVhcikgYnkgdGhlIGd1ZXN0ICovCiAJaWYgKChjc3ItJmd0O2h2aXAgXiBodmlwKSAmYW1wOyAoMVVMICZsdDsmbHQ7IElSUV9QTVVfT1ZGKSkgewogCQlpZiAoIShodmlwICZhbXA7ICgxVUwgJmx0OyZsdDsgSVJRX1BNVV9PVkYpKSAmYW1wOyZhbXA7Ci0JCSAgICAhdGVzdF9hbmRfc2V0X2JpdChJUlFfUE1VX09WRiwgdi0mZ3Q7aXJxc19wZW5kaW5nX21hc2spKQotCQkJY2xlYXJfYml0KElSUV9QTVVfT1ZGLCB2LSZndDtpcnFzX3BlbmRpbmcpOwomIzQzOwkJICAgICFfX3Rlc3RfYW5kX3NldF9iaXQoSVJRX1BNVV9PVkYsIHYtJmd0O2lycXNfcGVuZGluZ19tYXNrKSkKJiM0MzsJCQlfX2NsZWFyX2JpdChJUlFfUE1VX09WRiwgdi0mZ3Q7aXJxc19wZW5kaW5nKTsKIAl9CiAKIAkvKiBTeW5jLXVwIEFJQSBoaWdoIGludGVycnVwdHMgKi8KIAlrdm1fcmlzY3ZfdmNwdV9haWFfc3luY19pbnRlcnJ1cHRzKHZjcHUpOwomIzQzOwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3YtJmd0O2lycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7CiAKIAkvKiBTeW5jLXVwIHRpbWVyIENTUnMgKi8KIAlrdm1fcmlzY3ZfdmNwdV90aW1lcl9zeW5jKHZjcHUpOwpAQCAtNDA0LDYgJiM0Mzs0MTUsOCBAQCB2b2lkIGt2bV9yaXNjdl92Y3B1X3N5bmNfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAKIGludCBrdm1fcmlzY3ZfdmNwdV9zZXRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IGlycSkKIHsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsKIAkvKgogCSAqIFdlIG9ubHkgYWxsb3cgVlMtbW9kZSBzb2Z0d2FyZSwgdGltZXIsIGFuZCBleHRlcm5hbAogCSAqIGludGVycnVwdHMgd2hlbiBpcnEgaXMgb25lIG9mIHRoZSBsb2NhbCBpbnRlcnJ1cHRzCkBAIC00MTYsOSAmIzQzOzQyOSwxMCBAQCBpbnQga3ZtX3Jpc2N2X3ZjcHVfc2V0X2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBpcnEpCiAJICAgIGlycSAhPSBJUlFfUE1VX09WRikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlzZXRfYml0KGlycSwgdmNwdS0mZ3Q7YXJjaC5pcnFzX3BlbmRpbmcpOwotCXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOwotCXNldF9iaXQoaXJxLCB2Y3B1LSZndDthcmNoLmlycXNfcGVuZGluZ19tYXNrKTsKJiM0MzsJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZhbXA7dmNwdS0mZ3Q7YXJjaC5pcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpOwomIzQzOwlfX3NldF9iaXQoaXJxLCB2Y3B1LSZndDthcmNoLmlycXNfcGVuZGluZyk7CiYjNDM7CV9fc2V0X2JpdChpcnEsIHZjcHUtJmd0O2FyY2guaXJxc19wZW5kaW5nX21hc2spOwomIzQzOwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3ZjcHUtJmd0O2FyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTsKIAogCWt2bV92Y3B1X2tpY2sodmNwdSk7CiAKQEAgLTQyNyw2ICYjNDM7NDQxLDggQEAgaW50IGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgaXJxKQogCiBpbnQga3ZtX3Jpc2N2X3ZjcHVfdW5zZXRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IGlycSkKIHsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsKIAkvKgogCSAqIFdlIG9ubHkgYWxsb3cgVlMtbW9kZSBzb2Z0d2FyZSwgdGltZXIsIGNvdW50ZXIgb3ZlcmZsb3cgYW5kIGV4dGVybmFsCiAJICogaW50ZXJydXB0cyB3aGVuIGlycSBpcyBvbmUgb2YgdGhlIGxvY2FsIGludGVycnVwdHMKQEAgLTQzOSwyNiAmIzQzOzQ1NSwzMyBAQCBpbnQga3ZtX3Jpc2N2X3ZjcHVfdW5zZXRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IGlycSkKIAkgICAgaXJxICE9IElSUV9QTVVfT1ZGKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWNsZWFyX2JpdChpcnEsIHZjcHUtJmd0O2FyY2guaXJxc19wZW5kaW5nKTsKLQlzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTsKLQlzZXRfYml0KGlycSwgdmNwdS0mZ3Q7YXJjaC5pcnFzX3BlbmRpbmdfbWFzayk7CiYjNDM7CXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3ZjcHUtJmd0O2FyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTsKJiM0MzsJX19jbGVhcl9iaXQoaXJxLCB2Y3B1LSZndDthcmNoLmlycXNfcGVuZGluZyk7CiYjNDM7CV9fc2V0X2JpdChpcnEsIHZjcHUtJmd0O2FyY2guaXJxc19wZW5kaW5nX21hc2spOwomIzQzOwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3ZjcHUtJmd0O2FyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiAwOwogfQogCiBib29sIGt2bV9yaXNjdl92Y3B1X2hhc19pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IG1hc2spCiB7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgbG9uZyBpZTsKJiM0MzsJYm9vbCByZXQ7CiAKJiM0MzsJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZhbXA7dmNwdS0mZ3Q7YXJjaC5pcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpOwogCWllID0gKCh2Y3B1LSZndDthcmNoLmd1ZXN0X2Nzci52c2llICZhbXA7IFZTSVBfVkFMSURfTUFTSykKIAkJJmx0OyZsdDsgVlNJUF9UT19IVklQX1NISUZUKSAmYW1wOyAodW5zaWduZWQgbG9uZyltYXNrOwogCWllIHw9IHZjcHUtJmd0O2FyY2guZ3Vlc3RfY3NyLnZzaWUgJmFtcDsgfklSUV9MT0NBTF9NQVNLICZhbXA7CiAJCSh1bnNpZ25lZCBsb25nKW1hc2s7Ci0JaWYgKFJFQURfT05DRSh2Y3B1LSZndDthcmNoLmlycXNfcGVuZGluZ1swXSkgJmFtcDsgaWUpCi0JCXJldHVybiB0cnVlOwomIzQzOwlyZXQgPSB2Y3B1LSZndDthcmNoLmlycXNfcGVuZGluZ1swXSAmYW1wOyBpZTsKIAogCS8qIENoZWNrIEFJQSBoaWdoIGludGVycnVwdHMgKi8KLQlyZXR1cm4ga3ZtX3Jpc2N2X3ZjcHVfYWlhX2hhc19pbnRlcnJ1cHRzKHZjcHUsIG1hc2spOwomIzQzOwlpZiAoIXJldCkKJiM0MzsJCXJldCA9IGt2bV9yaXNjdl92Y3B1X2FpYV9oYXNfaW50ZXJydXB0cyh2Y3B1LCBtYXNrKTsKJiM0MzsJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDt2Y3B1LSZndDthcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiB9CiAKIHZvaWQgX19rdm1fcmlzY3ZfdmNwdV9wb3dlcl9vZmYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vdmNwdV9vbmVyZWcuYyBiL2FyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmMKaW5kZXggYmI5MjBlODkyM2M5MzAuLmNiYTM2ODI5NDRiNjk0IDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L2t2bS92Y3B1X29uZXJlZy5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmMKQEAgLTI5OCw2ICYjNDM7Mjk4LDcgQEAgc3RhdGljIGludCBrdm1fcmlzY3ZfdmNwdV9nZW5lcmFsX3NldF9jc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogewogCXN0cnVjdCBrdm1fdmNwdV9jc3IgKmNzciA9ICZhbXA7dmNwdS0mZ3Q7YXJjaC5ndWVzdF9jc3I7CiAJdW5zaWduZWQgbG9uZyByZWdzX21heCA9IHNpemVvZihzdHJ1Y3Qga3ZtX3Jpc2N2X2NzcikgLyBzaXplb2YodW5zaWduZWQgbG9uZyk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAocmVnX251bSAmZ3Q7PSByZWdzX21heCkKIAkJcmV0dXJuIC1FTk9FTlQ7CkBAIC0zMDksMTAgJiM0MzszMTAsMTQgQEAgc3RhdGljIGludCBrdm1fcmlzY3ZfdmNwdV9nZW5lcmFsX3NldF9jc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCQlyZWdfdmFsICZsdDsmbHQ7PSBWU0lQX1RPX0hWSVBfU0hJRlQ7CiAJfQogCi0JKCh1bnNpZ25lZCBsb25nICopY3NyKVtyZWdfbnVtXSA9IHJlZ192YWw7Ci0KLQlpZiAocmVnX251bSA9PSBLVk1fUkVHX1JJU0NWX0NTUl9SRUcoc2lwKSkKLQkJV1JJVEVfT05DRSh2Y3B1LSZndDthcmNoLmlycXNfcGVuZGluZ19tYXNrWzBdLCAwKTsKJiM0MzsJaWYgKHJlZ19udW0gPT0gS1ZNX1JFR19SSVNDVl9DU1JfUkVHKHNpcCkpIHsKJiM0MzsJCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3ZjcHUtJmd0O2FyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTsKJiM0MzsJCSgodW5zaWduZWQgbG9uZyAqKWNzcilbcmVnX251bV0gPSByZWdfdmFsOwomIzQzOwkJdmNwdS0mZ3Q7YXJjaC5pcnFzX3BlbmRpbmdfbWFza1swXSA9IDA7CiYjNDM7CQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3ZjcHUtJmd0O2FyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCSgodW5zaWduZWQgbG9uZyAqKWNzcilbcmVnX251bV0gPSByZWdfdmFsOwomIzQzOwl9CiAKIAlyZXR1cm4gMDsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDc6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ3NAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDUwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJJU0MtViBLVk0gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSBSSVNDLVYgS1ZNIGltcGxlbWVudGF0aW9uLiBJdCYjMzk7cyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlLCBhcyBpdCBzZWVtcyB0byBiZSBtb3ZpbmcgZnJvbSBhIGxvY2tsZXNzIGFwcHJvYWNoIHVzaW5nIGF0b21pYyBiaXQgb3BlcmF0aW9ucyBmb3IgaGFuZGxpbmcgYGlycXNfcGVuZGluZ2AgYW5kIGBpcnFzX3BlbmRpbmdfbWFza2AgYml0bWFwcyB0byB1c2luZyBhIGByYXdfc3BpbmxvY2tfdCBpcnFzX3BlbmRpbmdfbG9ja2Agd2l0aGluIGBzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaGAuIFRoaXMgcmVwbGFjZXMgdGhlIHByZXZpb3VzIG1ldGhvZCBvZiBzeW5jaHJvbml6YXRpb24gd2hpY2ggdXNlZCBhdG9taWMgYml0b3BzLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBhbmQgZGVmaW5pdGVseSB3YXJyYW50cyBzb21lIHNlcmlvdXMgZnV6emluZy4KCk15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHVuZGVyc3RhbmRpbmcgdGhlIHNjb3BlIG9mIHRoaXMgY2hhbmdlIGFuZCBpZGVudGlmeWluZyB0aGUga2V5IGZ1bmN0aW9ucyBhZmZlY3RlZC4gTGV0JiMzOTtzIHNlZSwgaXQmIzM5O3MgbW9kaWZ5aW5nIHNldmVyYWwgZmlsZXM6IGBhcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhgLCBgYXJjaC9yaXNjdi9rdm0vYWlhLmNgLCBgYXJjaC9yaXNjdi9rdm0vdmNwdS5jYCwgYW5kIGBhcmNoL3Jpc2N2L2t2bS92Y3B1X29uZXJlZy5jYC4gVGhhdCBnaXZlcyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuCgpOb3csIGxldCYjMzk7cyBpZGVudGlmeSB0aG9zZSBmdW5jdGlvbnMgc28gdGhleSBjYW4gYmUgYWRkZWQgdG8gdGhlIGBGb2N1c1N5bWJvbHNgIGxpc3QuIEZyb20gYGFpYS5jYCwgd2UmIzM5O3ZlIGdvdCBga3ZtX3Jpc2N2X3ZjcHVfYWlhX2ZsdXNoX2ludGVycnVwdHNgLCBga3ZtX3Jpc2N2X3ZjcHVfYWlhX3N5bmNfaW50ZXJydXB0c2AsIGBrdm1fcmlzY3ZfdmNwdV9haWFfaGFzX2ludGVycnVwdHNgLCBhbmQgYGt2bV9yaXNjdl92Y3B1X2FpYV9zZXRfY3NyYC4gTmV4dCwgZnJvbSBgdmNwdS5jYDogYGt2bV9yaXNjdl9yZXNldF92Y3B1YCwgYGt2bV9hcmNoX3ZjcHVfY3JlYXRlYCwgYGt2bV9yaXNjdl92Y3B1X2ZsdXNoX2ludGVycnVwdHNgLCBga3ZtX3Jpc2N2X3ZjcHVfc3luY19pbnRlcnJ1cHRzYCwgYGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHRgLCBga3ZtX3Jpc2N2X3ZjcHVfdW5zZXRfaW50ZXJydXB0YCwgYW5kIGBrdm1fcmlzY3ZfdmNwdV9oYXNfaW50ZXJydXB0c2AuIEZpbmFsbHksIGZyb20gYHZjcHVfb25lcmVnLmNgOiBga3ZtX3Jpc2N2X3ZjcHVfZ2VuZXJhbF9zZXRfY3NyYC4gR290IGl0LgoKQmVmb3JlIEkgZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIGl0c2VsZiwgSSBzaG91bGQgY2hlY2sgdGhlIEtjb25maWcgb3B0aW9ucyByZXF1aXJlZCBmb3IgdGhpcyBwYXRjaCB0byBiZSBlbmFibGVkLiBJdCYjMzk7cyBsb2NhdGVkIGluIGBhcmNoL3Jpc2N2L2t2bS9gLCBzbyBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgaW4gYGFyY2gvcmlzY3YvYCBhbmQgYGFyY2gvcmlzY3Yva3ZtL2AgdG8gZGV0ZXJtaW5lIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gVGhhdCYjMzk7bGwgYmUgaW1wb3J0YW50IGZvciByZXByb2R1Y3Rpb24gYW5kIGZ1enppbmcgZW52aXJvbm1lbnQgc2V0dXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDc6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3YvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctMTktXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1cbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctMjEtXHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwNzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjUwCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS1ZNIENvbmZpZ3VyYXRpb24gZm9yIFJJU0MtViBBcmNoaXRlY3R1cmUqKgoKT2theSwgc28gdGhlIGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGBLVk1gIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiB0aGlzIGlzIHRoZSAqb25seSogY29uZmlndXJhdGlvbiBpbnZvbHZlZC4gTGV0IG1lIGNoZWNrIGZvciBvdGhlcnMgdGhhdCBtaWdodCBiZSByZWxldmFudC4gVGhlIHBhdGNoIG1lbnRpb25zIGAjaWZkZWYgQ09ORklHXzMyQklUYCB3aXRoaW4gYGFyY2gvcmlzY3Yva3ZtL2FpYS5jYC4gTXkgaW5pdGlhbCByZWFjdGlvbiBpcyB0aGF0IGl0IG1pZ2h0IGJlIHRpZWQgdG8gYSAzMi1iaXQgYXJjaGl0ZWN0dXJlLiBIb3dldmVyLCBhIGNsb3NlciBsb29rIHN1Z2dlc3RzIHRoYXQmIzM5O3Mgbm90IHRoZSBjYXNlOyBpdCYjMzk7cyBqdXN0IGFuIGBpZmRlZmAuIFRoZSA2NC1iaXQgY29kZSBoYXMgY2hhbmdlcyBhcyB3ZWxsLCBzbyBpdCYjMzk7cyBub3QgZXhjbHVzaXZlbHkgZm9yIDMyLWJpdC4gVGh1cywgYENPTkZJR18zMkJJVGAgaXNuJiMzOTt0IGEgKnJlcXVpcmVtZW50KiBmb3IgdGhpcyBwYXRjaC4KCk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBzb3VyY2UgZmlsZXMgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gbG9naWMsIGluIHRoaXMgY2FzZSBgYXJjaC9yaXNjdi9rdm0vYWlhLmNgIGFuZCBgYXJjaC9yaXNjdi9rdm0vdmNwdS5jYC4gVGhlIGFpbSBoZXJlIGlzIHRvIHNlZSB3aGF0IHBvcnRpb25zIGFyZSBhY3R1YWxseSBhZmZlY3RlZCBieSBhbnkgcG90ZW50aWFsIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGFuZCBlbnN1cmUgZnVsbCBjb3ZlcmFnZSBpcyBnYWluZWQgZnJvbSB0aGUgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwNzoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthaWFcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL01ha2VmaWxlPTEwPW9iai0kKENPTkZJR19LVk0pICYjNDM7PSBrdm0ub1xuLS1cbmFyY2gvcmlzY3Yva3ZtL01ha2VmaWxlLTEyLSMgT3JkZXJlZCBhbHBoYWJldGljYWxseVxuYXJjaC9yaXNjdi9rdm0vTWFrZWZpbGU6MTM6a3ZtLXkgJiM0Mzs9IGFpYS5vXG5hcmNoL3Jpc2N2L2t2bS9NYWtlZmlsZS0xNC1rdm0teSAmIzQzOz0gYWlhX2FwbGljLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwNzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTQ0CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMjgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIEtWTSBDb25maWd1cmF0aW9uIGFuZCBJbnRlcnJ1cHQgSGFuZGxpbmcqKgoKT2theSwgc28gaXQgbG9va3MgbGlrZSBgS1ZNYCBpcyB0aGUgb25seSBjb25maWd1cmF0aW9uIEkgbmVlZCB0byBjb25zaWRlciBmb3IgdGhpcy4gVGltZSB0byBnZXQgbGFzZXItZm9jdXNlZCBvbiB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zLiBMZXQgbWUgZmlsdGVyIHRob3NlIG91dCB0byBtYWtlIHRoaXMgbWFuYWdlYWJsZS4gQWxyaWdodCwgaGVyZSYjMzk7cyBhIHdvcmtpbmcgbGlzdDogYGt2bV9yaXNjdl92Y3B1X2FpYV9mbHVzaF9pbnRlcnJ1cHRzYCwgYGt2bV9yaXNjdl92Y3B1X2FpYV9zeW5jX2ludGVycnVwdHNgLCBga3ZtX3Jpc2N2X3ZjcHVfYWlhX2hhc19pbnRlcnJ1cHRzYCwgYGt2bV9yaXNjdl92Y3B1X2FpYV9zZXRfY3NyYCwgYGt2bV9yaXNjdl9yZXNldF92Y3B1YCwgYGt2bV9hcmNoX3ZjcHVfY3JlYXRlYCwgYGt2bV9yaXNjdl92Y3B1X2ZsdXNoX2ludGVycnVwdHNgLCBga3ZtX3Jpc2N2X3ZjcHVfc3luY19pbnRlcnJ1cHRzYCwgYGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHRgLCBga3ZtX3Jpc2N2X3ZjcHVfdW5zZXRfaW50ZXJydXB0YCwgYGt2bV9yaXNjdl92Y3B1X2hhc19pbnRlcnJ1cHRzYCwgYW5kIGBrdm1fcmlzY3ZfdmNwdV9nZW5lcmFsX3NldF9jc3JgLgoKTm93LCBJJiMzOTttIHRoaW5raW5nIHNvbWUgb2YgdGhlc2UgYXJlIHByb2JhYmx5IGhvdCBwYXRocywgc3BlY2lmaWNhbGx5LCBga3ZtX3Jpc2N2X3ZjcHVfZmx1c2hfaW50ZXJydXB0c2AsIGBrdm1fcmlzY3ZfdmNwdV9zeW5jX2ludGVycnVwdHNgLCBhbmQgYGt2bV9yaXNjdl92Y3B1X2hhc19pbnRlcnJ1cHRzYCBqdW1wIG91dCBpbW1lZGlhdGVseS4gVGhlc2UgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cyBmb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgaW4gYSB2aXJ0dWFsaXplZCBpbnRlcnJ1cHQgc3lzdGVtLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gY2hlY2sgaWYgdGhlc2UgYXJlIGludm9rZWQgZGlyZWN0bHkgd2l0aGluIHRoZSBWTSBleGl0IGxvb3AuIFRoYXQmIzM5O2xsIGJlIGEga2V5IGluZGljYXRvciBvZiB0aGVpciBwb3RlbnRpYWwgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA3OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9yaXNjdl92Y3B1X2ZsdXNoX2ludGVycnVwdHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vdmNwdS5jPTM1MD1pbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcmVncyAqcmVncylcbi0tXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmMtMzU0LVxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jOjM1NTp2b2lkIGt2bV9yaXNjdl92Y3B1X2ZsdXNoX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jLTM1Ni17XG4tLVxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jPTg1Mz1pbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYy05MzgtXHRcdCAqL1xuYXJjaC9yaXNjdi9rdm0vdmNwdS5jOjkzOTpcdFx0a3ZtX3Jpc2N2X3ZjcHVfZmx1c2hfaW50ZXJydXB0cyh2Y3B1KTtcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYy05NDAtXG4tLVxuYXJjaC9yaXNjdi9rdm0vdmNwdV9vbmVyZWcuYz0yNzM9c3RhdGljIGludCBrdm1fcmlzY3ZfdmNwdV9nZW5lcmFsX2dldF9jc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmMtMjg1LVx0aWYgKHJlZ19udW0gPT0gS1ZNX1JFR19SSVNDVl9DU1JfUkVHKHNpcCkpIHtcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmM6Mjg2Olx0XHRrdm1fcmlzY3ZfdmNwdV9mbHVzaF9pbnRlcnJ1cHRzKHZjcHUpO1xuYXJjaC9yaXNjdi9rdm0vdmNwdV9vbmVyZWcuYy0yODctXHRcdCpvdXRfdmFsID0gKGNzci1cdTAwM2VodmlwIFx1MDAzZVx1MDAzZSBWU0lQX1RPX0hWSVBfU0hJRlQpIFx1MDAyNiBWU0lQX1ZBTElEX01BU0s7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDc6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTI3MgoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3NpbmcgYXMgYW4gZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIEludGVycnVwdCBIYW5kbGluZyB3aXRoaW4gdGhlIEtWTS9SSVNDLVYgVmlydHVhbCBNYWNoaW5lKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUuLi4gU28sIGZyb20gd2hhdCBJJiMzOTttIHBpZWNpbmcgdG9nZXRoZXIsIGJhc2VkIG9uIGhvdyB0aGUgY29kZSBmbG93cywgaXQgc2VlbXMgcHJldHR5IGNsZWFyIHRoYXQgYGt2bV9yaXNjdl92Y3B1X2ZsdXNoX2ludGVycnVwdHNgICpkZWZpbml0ZWx5KiBnZXRzIGNhbGxlZCB3aXRoaW4gYGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuYC4gVGhhdCYjMzk7cyBub3QgZW50aXJlbHkgc3VycHJpc2luZywgZ2l2ZW4gdGhlIHJvbGUgb2YgYGlvY3RsX3J1bmAgYXMgdGhlIG1haW4gbG9vcC4gVGhhdCBtYWtlcyBzZW5zZSBmb3IgaGFuZGxpbmcgcGVuZGluZyBpbnRlcnJ1cHRzLCBwcmV2ZW50aW5nIHN0YWxlIGludGVycnVwdHMsIGFuZCBlbnN1cmluZyB0aGUgVkNQVSBvcGVyYXRlcyBjbGVhbmx5LgoKQW5kLCB0aGlua2luZyBhYm91dCBob3cgaW50ZXJydXB0cyBhcmUgaGFuZGxlZCBpbiB0aGlzIGVudmlyb25tZW50LCBJJiMzOTttIHZpcnR1YWxseSBjZXJ0YWluIGBrdm1fcmlzY3ZfdmNwdV9zeW5jX2ludGVycnVwdHNgIGlzIGFsc28gbGlrZWx5IGNhbGxlZCB3aXRoaW4gdGhhdCBzYW1lIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmAgZnVuY3Rpb24uIEl0JiMzOTtzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIGVuc3VyZSB0aGF0IHRoZSBWQ1BVJiMzOTtzIGludGVycnVwdCBzdGF0ZSBpcyBzeW5jaHJvbml6ZWQgd2l0aCB0aGUgaG9zdCwgaXNuJiMzOTt0IGl0PyBHb3R0YSBtYWtlIHN1cmUgZXZlcnl0aGluZyYjMzk7cyBpbiBzeW5jIHRvIGF2b2lkIGFueSB3ZWlyZG5lc3Mgd2l0aCB0aGUgZ3Vlc3QuIEdvdHRhIGtlZXAgdGhhdCBpbnRlcnJ1cHQgcGlwZWxpbmUgY2xlYW4hIFNvLCB0aG9zZSB0d28gYXJlIHByb2JhYmx5IGEga2V5IHBhcnQgb2YgdGhlIHJ1biBsb29wIGludGVycnVwdCBwcm9jZXNzaW5nIHN0cmF0ZWd5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwNzoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fcmlzY3ZfdmNwdV9zeW5jX2ludGVycnVwdHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vdmNwdS5jPTM1NT12b2lkIGt2bV9yaXNjdl92Y3B1X2ZsdXNoX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYy0zNzUtXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmM6Mzc2OnZvaWQga3ZtX3Jpc2N2X3ZjcHVfc3luY19pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYy0zNzcte1xuLS1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYz04NTM9aW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmMtOTcxLVx0XHQvKiBTeW5jdXAgaW50ZXJydXB0cyBzdGF0ZSB3aXRoIEhXICovXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmM6OTcyOlx0XHRrdm1fcmlzY3ZfdmNwdV9zeW5jX2ludGVycnVwdHModmNwdSk7XG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmMtOTczLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwNzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTAwCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBob3QgcGF0aHMgcmVsYXRlZCB0byBSSVNDLVYgS1ZNIGludGVycnVwdHMuCgoqKkRpdmluZyBEZWVwIGludG8gS1ZNIFJJU0MtViBJbnRlcnJ1cHQgSGFuZGxpbmcqKgoKUmlnaHQsIGxldCYjMzk7cyBzZWUsIGBrdm1fcmlzY3ZfdmNwdV9mbHVzaF9pbnRlcnJ1cHRzYCBhbmQgYGt2bV9yaXNjdl92Y3B1X3N5bmNfaW50ZXJydXB0c2AgYXJlIGtub3duIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIOKAkyBubyBzdXJwcmlzZXMgdGhlcmUsIHRoZXkmIzM5O3JlIGFsd2F5cyBnb2luZyB0byBiZS4gVGhleSYjMzk7cmUgY2VudHJhbCB0byBpbnRlcnJ1cHQgZGVsaXZlcnksIHNvIHdlJiMzOTtyZSBjb25zdGFudGx5IG9wdGltaXppbmcgdGhvc2UuIEJ1dCwgSSYjMzk7bSB0aGlua2luZywgd2hhdCBhYm91dCBga3ZtX3Jpc2N2X3ZjcHVfaGFzX2ludGVycnVwdHNgPyBJdCBpcyBwcm9iYWJseSBsZXNzIG9mIGFuIGlzc3VlLCBidXQgbWF5YmUgd2UgaGF2ZSBhbiBvcHBvcnR1bml0eSB0byBvcHRpbWl6ZSB0aGF0LiBXZSBtaWdodCBiZSBhYmxlIHRvIG1ha2Ugc29tZSBnYWlucywgZXZlbiBpZiB0aGV5JiMzOTtyZSBzbWFsbC4gSXQmIzM5O3MgdGhlIGtpbmQgb2YgdGhpbmcgdGhhdCBjb3VsZCBjb250cmlidXRlIHRvIGEgY3VtdWxhdGl2ZSBpbXByb3ZlbWVudCBvdmVyYWxsLiBBbHdheXMgaW1wb3J0YW50IHRvIHJlLWV2YWx1YXRlIHRoZSBsb3cgaGFuZ2luZyBmcnVpdCwgZXZlbiB0aG91Z2ggaXQmIzM5O3MgbGVzcyBpbXBhY3RmdWwgdGhhbiB0aGUgYmlnIG9uZXMuIEdvdHRhIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgbm90IHNwZW5kaW5nIHRvbyBtdWNoIHRpbWUgaGVyZSwgaG93ZXZlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDc6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3Jpc2N2X3ZjcHVfaGFzX2ludGVycnVwdHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vdmNwdS5jPTIyMT1pbnQga3ZtX2FyY2hfdmNwdV9ydW5uYWJsZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmMtMjIyLXtcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYzoyMjM6XHRyZXR1cm4gKGt2bV9yaXNjdl92Y3B1X2hhc19pbnRlcnJ1cHRzKHZjcHUsIC0xVUxMKSBcdTAwMjZcdTAwMjZcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYy0yMjQtXHRcdCFrdm1fcmlzY3ZfdmNwdV9zdG9wcGVkKHZjcHUpIFx1MDAyNlx1MDAyNiAhdmNwdS1cdTAwM2VhcmNoLnBhdXNlKTtcbi0tXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmM9NDQyPWludCBrdm1fcmlzY3ZfdmNwdV91bnNldF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgaXJxKVxuLS1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYy00NjUtXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmM6NDY2OmJvb2wga3ZtX3Jpc2N2X3ZjcHVfaGFzX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgbWFzaylcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYy00Njcte1xuLS1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfdGltZXIuYz0xMzA9Ym9vbCBrdm1fcmlzY3ZfdmNwdV90aW1lcl9wZW5kaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3RpbWVyLmMtMTM1LVx0aWYgKCFrdm1fcmlzY3ZfZGVsdGFfY3ljbGVzMm5zKHQtXHUwMDNlbmV4dF9jeWNsZXMsIGd0LCB0KSB8fFxuYXJjaC9yaXNjdi9rdm0vdmNwdV90aW1lci5jOjEzNjpcdCAgICBrdm1fcmlzY3ZfdmNwdV9oYXNfaW50ZXJydXB0cyh2Y3B1LCAxVUwgXHUwMDNjXHUwMDNjIElSUV9WU19USU1FUikpXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3RpbWVyLmMtMTM3LVx0XHRyZXR1cm4gdHJ1ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDc6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2NzcKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgUG90ZW50aWFsIEJvdHRsZW5lY2tzIGluIEtWTS9SSVNDLVYgUGVyZm9ybWFuY2UqKgoKQWxyaWdodCwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gd2l0aGluIHRoZSBSSVNDLVYgS1ZNIGltcGxlbWVudGF0aW9uLiBJJiMzOTt2ZSBiZWVuIGZvY3VzaW5nIG9uIHRoZSBjcml0aWNhbCBwYXRocywgYW5kIGBrdm1fYXJjaF92Y3B1X3J1bm5hYmxlYCBpcyBkZWZpbml0ZWx5IHNjcmVhbWluZyBvdXQgYXMgYSBwb3RlbnRpYWwgYm90dGxlbmVjay4gV2UmIzM5O3JlIHNwZW5kaW5nIGEgbG90IG9mIHRpbWUgdGhlcmUsIHNvIGl0IGRlbWFuZHMgY2FyZWZ1bCBzY3J1dGlueS4KCkJ1dCwgSSBhbHNvIG5lZWQgdG8gYnJvYWRlbiB0aGUgZm9jdXMuIFdlIHNob3VsZG4mIzM5O3QgbmVnbGVjdCBvdGhlciBwb3RlbnRpYWxseSBoaWdoLWZyZXF1ZW5jeSByb3V0aW5lcy4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBiZSBsb29raW5nIGF0IGBrdm1fcmlzY3ZfdmNwdV9zZXRfaW50ZXJydXB0YCBhbmQgYGt2bV9yaXNjdl92Y3B1X3Vuc2V0X2ludGVycnVwdGAuIEludGVycnVwdCBoYW5kbGluZyBpcyBmdW5kYW1lbnRhbCwgYW5kIGlmIHRob3NlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGZyZXF1ZW50bHksIHRoZXkgY291bGQgZWFzaWx5IGJlY29tZSBwZXJmb3JtYW5jZSBsaW1pdGVycy4gSSBuZWVkIHRvIHByb2ZpbGUgYW5kIGJlbmNobWFyayB0aGVzZSBhcmVhcyBhcyB3ZWxsLCB0byBnZXQgYSBob2xpc3RpYyB2aWV3IG9mIHRoZSBwZXJmb3JtYW5jZSBsYW5kc2NhcGUuIFRoZXJlIG1pZ2h0IGJlIHNvbWUgbG93LWhhbmdpbmcgZnJ1aXQgaW4gdGhlcmUuIEdvdHRhIGxvb2sgZXZlcnl3aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDc6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3Jpc2N2X3ZjcHVfc2V0X2ludGVycnVwdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS9haWFfaW1zaWMuYz02MTQ9c3RhdGljIHZvaWQgaW1zaWNfc3dmaWxlX2V4dGlycV91cGRhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvcmlzY3Yva3ZtL2FpYV9pbXNpYy5jLTYyOS1cdCAgICBpbXNpY19tcmlmX3RvcGVpKG1yaWYsIGltc2ljLVx1MDAzZW5yX2VpeCwgaW1zaWMtXHUwMDNlbnJfbXNpcykpXG5hcmNoL3Jpc2N2L2t2bS9haWFfaW1zaWMuYzo2MzA6XHRcdGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHQodmNwdSwgSVJRX1ZTX0VYVCk7XG5hcmNoL3Jpc2N2L2t2bS9haWFfaW1zaWMuYy02MzEtXHRlbHNlXG4tLVxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jPTI0OT1sb25nIGt2bV9hcmNoX3ZjcHVfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCxcbi0tXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmMtMjYxLVx0XHRpZiAoaXJxLmlycSA9PSBLVk1fSU5URVJSVVBUX1NFVClcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYzoyNjI6XHRcdFx0cmV0dXJuIGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHQodmNwdSwgSVJRX1ZTX0VYVCk7XG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmMtMjYzLVx0XHRlbHNlXG4tLVxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jPTM3Nj12b2lkIGt2bV9yaXNjdl92Y3B1X3N5bmNfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jLTQxNS1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYzo0MTY6aW50IGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgaXJxKVxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jLTQxNy17XG4tLVxuYXJjaC9yaXNjdi9rdm0vdmNwdV9wbXUuYz0yOTM9c3RhdGljIHZvaWQga3ZtX3Jpc2N2X3BtdV9vdmVyZmxvdyhzdHJ1Y3QgcGVyZl9ldmVudCAqcGVyZl9ldmVudCxcbi0tXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3BtdS5jLTMyOC1cdHNldF9iaXQocG1jLVx1MDAzZWlkeCwga3ZwbXUtXHUwMDNlcG1jX292ZXJmbG93bik7XG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3BtdS5jOjMyOTpcdGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHQodmNwdSwgSVJRX1BNVV9PVkYpO1xuYXJjaC9yaXNjdi9rdm0vdmNwdV9wbXUuYy0zMzAtXG4tLVxuYXJjaC9yaXNjdi9rdm0vdmNwdV9zYmlfcmVwbGFjZS5jPTQ1PXN0YXRpYyBpbnQga3ZtX3NiaV9leHRfaXBpX2hhbmRsZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3J1biAqcnVuLFxuLS1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfc2JpX3JlcGxhY2UuYy03MS1cdFx0fVxuYXJjaC9yaXNjdi9rdm0vdmNwdV9zYmlfcmVwbGFjZS5jOjcyOlx0XHRyZXQgPSBrdm1fcmlzY3ZfdmNwdV9zZXRfaW50ZXJydXB0KHRtcCwgSVJRX1ZTX1NPRlQpO1xuYXJjaC9yaXNjdi9rdm0vdmNwdV9zYmlfcmVwbGFjZS5jLTczLVx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfc2JpX3YwMS5jPTE2PXN0YXRpYyBpbnQga3ZtX3NiaV9leHRfdjAxX2hhbmRsZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3J1biAqcnVuLFxuLS1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfc2JpX3YwMS5jLTU5LVx0XHRcdFx0Y29udGludWU7XG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV92MDEuYzo2MDpcdFx0XHRyZXQgPSBrdm1fcmlzY3ZfdmNwdV9zZXRfaW50ZXJydXB0KHJ2Y3B1LCBJUlFfVlNfU09GVCk7XG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV92MDEuYy02MS1cdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfdGltZXIuYz00Mz1zdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQga3ZtX3Jpc2N2X3ZjcHVfaHJ0aW1lcl9leHBpcmVkKHN0cnVjdCBocnRpbWVyICpoKVxuLS1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfdGltZXIuYy01Ni1cdHQtXHUwMDNlbmV4dF9zZXQgPSBmYWxzZTtcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfdGltZXIuYzo1NzpcdGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHQodmNwdSwgSVJRX1ZTX1RJTUVSKTtcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfdGltZXIuYy01OC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDc6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwNjQKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQ29uc2lkZXJpbmcgSW50ZXJydXB0IEhhbmRsaW5nIGluIHRoZSBSSVNDLVYgS1ZNIEltcGxlbWVudGF0aW9uKioKClJpZ2h0LCBga3ZtX3Jpc2N2X3ZjcHVfc2V0X2ludGVycnVwdGAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQsIGFzIEkgcmVjYWxsLCBmcm9tIGEgdmFyaWV0eSBvZiBzb3VyY2VzIHdpdGhpbiB0aGUgS1ZNL1JJU0MtViBpbXBsZW1lbnRhdGlvbiDigJMgaW9jdGwgY2FsbHMsIHRpbWVyIGV2ZW50cywgaW50ZXItcHJvY2Vzc29yIGludGVycnVwdHMgKElQSXMpLCBldmVuIFBNVSBvdmVyZmxvdyBldmVudHMsIGFtb25nIG90aGVycy4gVGhhdCBtYWtlcyBzZW5zZSwgaXTigJlzIHRoZSBwcmltYXJ5IG1lY2hhbmlzbSB0byBpbmplY3QgYW4gaW50ZXJydXB0IGludG8gYSB2Q1BVLgoKQnV0IHdhaXQgYSBzZWNvbmQuLi4gSWYgd2UgaGF2ZSBhIGNsZWFyIGZ1bmN0aW9uIHRvICpzZXQqIGFuIGludGVycnVwdCwgd2hhdCYjMzk7cyB0aGUgY29ycmVzcG9uZGluZyBmdW5jdGlvbiB0byAqdW5zZXQqIGFuIGludGVycnVwdD8gV2hlcmUgYW5kIHdoZW4gZG9lcyBga3ZtX3Jpc2N2X3ZjcHVfdW5zZXRfaW50ZXJydXB0YCBjb21lIGludG8gcGxheSwgb3IgaXMgdGhlcmUgYW4gYWx0ZXJuYXRpdmUgbWVjaGFuaXNtIGZvciBjbGVhcmluZyBhbiBpbnRlcnJ1cHQgdGhhdCBJIHNob3VsZCBrZWVwIGluIG1pbmQ/IEkgbmVlZCB0byB0aGluayB0aGlzIHRocm91Z2guIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGludGVycnVwdCBsaWZlY3ljbGUgbWFuYWdlbWVudC4gSXMgaXQgaGFuZGxlZCBpbXBsaWNpdGx5IHRocm91Z2ggb3RoZXIgbWVjaGFuaXNtcywgbGlrZSB3aGVuIHRoZSB2Q1BVIGFja25vd2xlZGdlcyB0aGUgaW50ZXJydXB0LCBvciBkbyB3ZSBoYXZlIGFuIGV4cGxpY2l0IGZ1bmN0aW9uIHNwZWNpZmljYWxseSBmb3IgZGUtYXNzZXJ0aW5nIGFuIGludGVycnVwdD8gSSBzaG91bGQgcHJvYmFibHkgcmV2aWV3IHRoZSBpbnRlcnJ1cHQgaGFuZGxpbmcgY29kZSBwYXRoIGFuZCBjb250cm9sIGZsb3cgbW9yZSBjYXJlZnVsbHkgdG8gYmUgc3VyZSBJIHVuZGVyc3RhbmQgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDc6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3Jpc2N2X3ZjcHVfdW5zZXRfaW50ZXJydXB0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL2FpYV9pbXNpYy5jPTYxND1zdGF0aWMgdm9pZCBpbXNpY19zd2ZpbGVfZXh0aXJxX3VwZGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9yaXNjdi9rdm0vYWlhX2ltc2ljLmMtNjMxLVx0ZWxzZVxuYXJjaC9yaXNjdi9rdm0vYWlhX2ltc2ljLmM6NjMyOlx0XHRrdm1fcmlzY3ZfdmNwdV91bnNldF9pbnRlcnJ1cHQodmNwdSwgSVJRX1ZTX0VYVCk7XG5hcmNoL3Jpc2N2L2t2bS9haWFfaW1zaWMuYy02MzMtXG4tLVxuYXJjaC9yaXNjdi9rdm0vYWlhX2ltc2ljLmM9NjM3PXN0YXRpYyB2b2lkIGltc2ljX3N3ZmlsZV9yZWFkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBjbGVhcixcbi0tXG5hcmNoL3Jpc2N2L2t2bS9haWFfaW1zaWMuYy02NTEtXHRcdG1lbXNldChpbXNpYy1cdTAwM2Vzd2ZpbGUsIDAsIHNpemVvZigqaW1zaWMtXHUwMDNlc3dmaWxlKSk7XG5hcmNoL3Jpc2N2L2t2bS9haWFfaW1zaWMuYzo2NTI6XHRcdGt2bV9yaXNjdl92Y3B1X3Vuc2V0X2ludGVycnVwdCh2Y3B1LCBJUlFfVlNfRVhUKTtcbmFyY2gvcmlzY3Yva3ZtL2FpYV9pbXNpYy5jLTY1My1cdH1cbi0tXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmM9MjQ5PWxvbmcga3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLFxuLS1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYy0yNjMtXHRcdGVsc2VcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYzoyNjQ6XHRcdFx0cmV0dXJuIGt2bV9yaXNjdl92Y3B1X3Vuc2V0X2ludGVycnVwdCh2Y3B1LCBJUlFfVlNfRVhUKTtcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYy0yNjUtXHR9XG4tLVxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jPTQxNj1pbnQga3ZtX3Jpc2N2X3ZjcHVfc2V0X2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBpcnEpXG4tLVxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jLTQ0MS1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYzo0NDI6aW50IGt2bV9yaXNjdl92Y3B1X3Vuc2V0X2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBpcnEpXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmMtNDQzLXtcbi0tXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV92MDEuYz0xNj1zdGF0aWMgaW50IGt2bV9zYmlfZXh0X3YwMV9oYW5kbGVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKnJ1bixcbi0tXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV92MDEuYy00NS1cdGNhc2UgU0JJX0VYVF8wXzFfQ0xFQVJfSVBJOlxuYXJjaC9yaXNjdi9rdm0vdmNwdV9zYmlfdjAxLmM6NDY6XHRcdHJldCA9IGt2bV9yaXNjdl92Y3B1X3Vuc2V0X2ludGVycnVwdCh2Y3B1LCBJUlFfVlNfU09GVCk7XG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV92MDEuYy00Ny1cdFx0YnJlYWs7XG4tLVxuYXJjaC9yaXNjdi9rdm0vdmNwdV90aW1lci5jPTg1PXN0YXRpYyBpbnQga3ZtX3Jpc2N2X3ZjcHVfdXBkYXRlX2hydGltZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgbmN5Y2xlcylcbi0tXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3RpbWVyLmMtOTMtXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3RpbWVyLmM6OTQ6XHRrdm1fcmlzY3ZfdmNwdV91bnNldF9pbnRlcnJ1cHQodmNwdSwgSVJRX1ZTX1RJTUVSKTtcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfdGltZXIuYy05NS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDc6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyOTAKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhc3Nlc3NtZW50IG9mIHRoZSBzaXR1YXRpb246CgoqKlRhcmdldGluZyBJbnRlcnJ1cHQgSGFuZGxpbmcgJmFtcDsgQ1NSIFVwZGF0ZXMgaW4gdGhlIFJJU0MtViBLVk0gSW1wbGVtZW50YXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIG1vc3QgcmVsZXZhbnQgZnVuY3Rpb25zIGZvciB0aGlzIHBhcnRpY3VsYXIgaXNzdWUuIEZyb20gbXkgZXhwZXJpZW5jZSB3aXRoIHRoZSBLVk0gUklTQy1WIGNvZGUsIGBrdm1fcmlzY3ZfdmNwdV9zZXRfaW50ZXJydXB0YCBhbmQgYGt2bV9yaXNjdl92Y3B1X3Vuc2V0X2ludGVycnVwdGAgYXJlIGRlZmluaXRlbHkgc3Ryb25nIGNvbnRlbmRlcnMgZm9yIGludmVzdGlnYXRpb24uIFRoZXkmIzM5O3JlIGNlbnRyYWwgdG8gaG93IGludGVycnVwdHMgYXJlIG1hbmFnZWQgd2l0aGluIHRoZSB2aXJ0dWFsIENQVSBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyB0aGVyZS4gQmV5b25kIGludGVycnVwdCBzZXR0aW5nIGFuZCB1bnNldHRpbmcsIEkgc2hvdWxkIGxvb2sgYXQgaG93IENTUiB1cGRhdGVzIGFyZSBpbXBsZW1lbnRlZC4KClRoYXQgYnJpbmdzIG1lIHRvIGBrdm1fcmlzY3ZfdmNwdV9haWFfc2V0X2NzcmAgYW5kIGBrdm1fcmlzY3ZfdmNwdV9nZW5lcmFsX3NldF9jc3JgLiBUaGVzZSBzZWVtIGxpa2UgdGhleSBjb3VsZCBiZSB2ZXJ5IGltcG9ydGFudCwgdG9vLiBJIG5lZWQgdG8gY2hlY2sgaG93IHRoZSBBSUEtcmVsYXRlZCBDU1JzIGFyZSBiZWluZyBoYW5kbGVkLiBUaGVzZSBjb3VsZCBiZSBpbnZvbHZlZCwgc3BlY2lmaWNhbGx5IHRoZSBBSUEgQ1NScy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYGt2bV9yaXNjdl92Y3B1X2FpYV9zZXRfY3NyYC4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoYXQgZnVuY3Rpb24gYW5kIHRyYWNlIHRoZSBkYXRhIGZsb3c7IHRoYXQgaXMgd2hlcmUgSSYjMzk7bGwgYmVnaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA3OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9yaXNjdl92Y3B1X2FpYV9zZXRfY3NyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL2FpYS5jPTE5MD1pbnQga3ZtX3Jpc2N2X3ZjcHVfYWlhX2dldF9jc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gvcmlzY3Yva3ZtL2FpYS5jLTIxMC1cbmFyY2gvcmlzY3Yva3ZtL2FpYS5jOjIxMTppbnQga3ZtX3Jpc2N2X3ZjcHVfYWlhX3NldF9jc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuYXJjaC9yaXNjdi9rdm0vYWlhLmMtMjEyLVx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIHJlZ19udW0sXG4tLVxuYXJjaC9yaXNjdi9rdm0vdmNwdV9vbmVyZWcuYz00MDI9c3RhdGljIGludCBrdm1fcmlzY3ZfdmNwdV9zZXRfcmVnX2NzcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC9yaXNjdi9rdm0vdmNwdV9vbmVyZWcuYy00MjUtXHRjYXNlIEtWTV9SRUdfUklTQ1ZfQ1NSX0FJQTpcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmM6NDI2Olx0XHRyYyA9IGt2bV9yaXNjdl92Y3B1X2FpYV9zZXRfY3NyKHZjcHUsIHJlZ19udW0sIHJlZ192YWwpO1xuYXJjaC9yaXNjdi9rdm0vdmNwdV9vbmVyZWcuYy00MjctXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwNzoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5ODcKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA2NDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgRnV6emluZyBUYXJnZXQgU2VsZWN0aW9uIGZvciBSSVNDLVYgS1ZNIEludGVycnVwdCBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGZ1enppbmcgdGhpcyBSSVNDLVYgS1ZNIGludGVycnVwdCBoYW5kbGluZyBjaGFuZ2UsIHdoaWNoIGludm9sdmVzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYSBzcGlubG9jayB0byByZXBsYWNlIGxvY2tsZXNzIGF0b21pYyBiaXQgb3BlcmF0aW9ucy4gVGhlIGdvYWwgaXMgdG8gZm9jdXMgb24gZnVuY3Rpb25zIHRoYXQgZGlyZWN0bHkgaW50ZXJhY3Qgd2l0aCB0aGUgbmV3bHkgYWRkZWQgbG9jayBhbmQgbW9kaWZpZWQgYml0bWFwcy4gQmFzZWQgb24gdGhlIGNvZGUsIGBrdm1fcmlzY3ZfdmNwdV9nZW5lcmFsX3NldF9jc3JgIGlzIGNhbGxlZCBmcm9tIGBrdm1fcmlzY3ZfdmNwdV9zZXRfcmVnX2NzcmAsIHdoaWNoLCBjb252ZW5pZW50bHksIGlzIHRyaWdnZXJlZCBieSB0aGUgYEtWTV9TRVRfT05FX1JFR2AgaW9jdGwuIFRoaXMgaW9jdGwgcGF0aCBpcyBpZGVhbCBmb3IgZnV6emluZy4KCkxldCYjMzk7cyBicmVhayBkb3duIG15IHRhcmdldCBzZWxlY3Rpb24gcHJvY2Vzcy4gRmlyc3QsIEkgd2FudCB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IGFyZSBhY2Nlc3NpYmxlIGFuZCBhZmZlY3RlZCBieSB0aGUgY2hhbmdlcy4gSSYjMzk7dmUgcGlucG9pbnRlZCBhIGZldzoKCiogICBga3ZtX3Jpc2N2X3ZjcHVfYWlhX3NldF9jc3JgCiogICBga3ZtX3Jpc2N2X3ZjcHVfZ2VuZXJhbF9zZXRfY3NyYAoqICAgYGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHRgCiogICBga3ZtX3Jpc2N2X3ZjcHVfdW5zZXRfaW50ZXJydXB0YAoKVGhlc2UgYXJlbiYjMzk7dCB0aGUgYWJzb2x1dGUgaG90dGVzdCBwYXRocywgbGlrZSB0aGUgVk0gZXhpdCBsb29wLCB3aGljaCBpcyBhIGtleSBjb25zaWRlcmF0aW9uLiBJIHdhbnQgdG8gYXZvaWQgZnVuY3Rpb25zIHRoYXQgYXJlIHBhcnQgb2YgdGhlIGNvcmUgVk0gZXhpdCBsb29wIHRvIGdldCBhIGJyb2FkZXIgdGVzdCBkaXN0cmlidXRpb24uCgpOb3csIEkgY29uc2lkZXJlZCBga3ZtX3Jpc2N2X3ZjcHVfZmx1c2hfaW50ZXJydXB0c2AgYW5kIGBrdm1fcmlzY3ZfdmNwdV9zeW5jX2ludGVycnVwdHNgLCBidXQgdGhvc2UgYXJlIHJpZ2h0IGluIHRoZSBWTSBleGl0IGxvb3AsIGFuZCBJIHdhbnQgdG8gYXZvaWQgdGhvc2UuIFNpbWlsYXJseSwgYGt2bV9yaXNjdl92Y3B1X2FpYV9mbHVzaF9pbnRlcnJ1cHRzYCBhbmQgYGt2bV9yaXNjdl92Y3B1X2FpYV9zeW5jX2ludGVycnVwdHNgIHdvdWxkIGJlIGludm9rZWQgb24gaG90IHBhdGhzLCBzbyB0aGVzZSBhcmUgb2ZmIHRoZSBsaXN0IHRvby4KClNvLCBpbiBzdW1tYXJ5LCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoZSBmb2xsb3dpbmcgYXJlIHRoZSBiZXN0IHRhcmdldHMgZm9yIGZ1enppbmcsIGdpdmVuIHRoYXQgdGhleSBzZXQvdW5zZXQgaW50ZXJydXB0cyBhbmQgQ1NSczoKCiogICBga3ZtX3Jpc2N2X3ZjcHVfYWlhX3NldF9jc3JgCiogICBga3ZtX3Jpc2N2X3ZjcHVfZ2VuZXJhbF9zZXRfY3NyYAoqICAgYGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHRgCiogICBga3ZtX3Jpc2N2X3ZjcHVfdW5zZXRfaW50ZXJydXB0YAoKTmV4dCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIExvb2tpbmcgaW50byB0aGUgS2NvbmZpZywgYENPTkZJR19LVk1gIGlzIGluZGVlZCB0aGUgcHJpbWFyeSwgYW5kIG9ubHksIGNvbmZpZ3VyYXRpb24gbmVlZGVkIGZvciB0aGlzIFJJU0MtViBLVk0gY29kZS4gR2l2ZW4gdGhhdCB0aGUgY29kZSBpcyBpbiBgYXJjaC9yaXNjdi9rdm0vYCBJJiMzOTttIGNvbmZpZGVudCBhYm91dCB0aGlzLiBGaW5hbGx5LCBsZXQgbWUganVzdCB2ZXJpZnkgYGt2bV9yaXNjdl92Y3B1X2dlbmVyYWxfc2V0X2NzcmAgaXMgdGhlIGNvcnJlY3QgbmFtZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDc6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3Jpc2N2X3ZjcHVfZ2VuZXJhbF9zZXRfY3NyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmM9MjczPXN0YXRpYyBpbnQga3ZtX3Jpc2N2X3ZjcHVfZ2VuZXJhbF9nZXRfY3NyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X29uZXJlZy5jLTI5NC1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmM6Mjk1OnN0YXRpYyBpbnQga3ZtX3Jpc2N2X3ZjcHVfZ2VuZXJhbF9zZXRfY3NyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmMtMjk2LVx0XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgcmVnX251bSxcbi0tXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X29uZXJlZy5jPTQwMj1zdGF0aWMgaW50IGt2bV9yaXNjdl92Y3B1X3NldF9yZWdfY3NyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X29uZXJlZy5jLTQyMi1cdGNhc2UgS1ZNX1JFR19SSVNDVl9DU1JfR0VORVJBTDpcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmM6NDIzOlx0XHRyYyA9IGt2bV9yaXNjdl92Y3B1X2dlbmVyYWxfc2V0X2Nzcih2Y3B1LCByZWdfbnVtLCByZWdfdmFsKTtcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmMtNDI0LVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDc6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU1OTQKCQkJCQkJCW91dHB1dDogMTcyCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludGVybmFsIE1vbm9sb2d1ZTogQWZmaXJtYXRpb24gYW5kIFByb2NlZHVyYWwgUmVmaW5lbWVudCoqCgpZZXMsIHRoYXQmIzM5O3MgZXhhY3RseSB3aGF0IEkmIzM5O20gc2VlaW5nIHRvbywgdGhlIGFuYWx5c2lzIGlzIHNvbGlkLiBUaGUgY29uY2x1c2lvbiByZWFjaGVkIGlzIGNvcnJlY3QsIGFuZCBJIGFncmVlIHdpdGggdGhlIGltcGxpZWQgZGlyZWN0aW9uLgoKTm93LCBsZXQmIzM5O3MgbW92ZSBmb3J3YXJkIGVmZmljaWVudGx5LiBGb3JnZXQgZ2VuZXJpYyBuYW1pbmcgY29udmVudGlvbnM7IHRoZSBuZXh0IHN0ZXAgY2FsbHMgZm9yIGEgY2xlYXIgaWRlbnRpZmllciBmb3IgdGhpcyBzdGVwLiBUaGUgYWN0aW9uIGhlcmUgaW52b2x2ZXMgcmVjb3JkaW5nIHRoZSBrZXkgb3V0Y29tZXMgb2YgdGhlIHByb2Nlc3MsIGEgbmF0dXJhbCBkZXNpZ25hdGlvbiB3b3VsZCBiZSB0byBjYWxsIGl0IGBzZXQtcmVzdWx0c2AuIEl0IHdpbGwgYmUgY2xlYXIgdG8gbWUsIGFuZCBzaG91bGQgYmUgY2xlYXIgZm9yIGFueW9uZSBlbHNlIGxvb2tpbmcgaW50byB0aGlzIGNvZGUsIHRoYXQgdGhpcyBpZGVudGlmaWVyIHJlcHJlc2VudHMgdGhlIHN0ZXAgd2hlcmUgdGhlIHNpZ25pZmljYW50IGRlcml2ZWQgb3V0cHV0cyBhcmUgY2FwdHVyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA3OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fcmlzY3ZfdmNwdV9haWFfc2V0X2NzciYjMzQ7LAogICAgJiMzNDtrdm1fcmlzY3ZfdmNwdV9nZW5lcmFsX3NldF9jc3ImIzM0OywKICAgICYjMzQ7a3ZtX3Jpc2N2X3ZjcHVfc2V0X2ludGVycnVwdCYjMzQ7LAogICAgJiMzNDtrdm1fcmlzY3ZfdmNwdV91bnNldF9pbnRlcnJ1cHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgbG9ja2xlc3MgYXRvbWljIGJpdG9wcyB3aXRoIGEgcmF3IHNwaW5sb2NrIGZvciB0cmFja2luZyBwZW5kaW5nIFZDUFUgaW50ZXJydXB0cyBpbiBSSVNDLVYgS1ZNLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZmZlY3RzIGludGVycnVwdCBpbmplY3Rpb24gYW5kIHN5bmNocm9uaXphdGlvbi4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gZnVuY3Rpb25zIHRoYXQgc2V0L3Vuc2V0IGludGVycnVwdHMgYW5kIENTUnMsIHdoaWNoIGFyZSBhY2Nlc3NpYmxlIHZpYSBLVk0gaW9jdGxzIGFuZCBub3Qgb24gdGhlIGFic29sdXRlIGhvdHRlc3QgVk0gZXhpdCBwYXRoLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fcmlzY3ZfdmNwdV9haWFfc2V0X2NzciYjMzQ7LAogICAgJiMzNDtrdm1fcmlzY3ZfdmNwdV9nZW5lcmFsX3NldF9jc3ImIzM0OywKICAgICYjMzQ7a3ZtX3Jpc2N2X3ZjcHVfc2V0X2ludGVycnVwdCYjMzQ7LAogICAgJiMzNDtrdm1fcmlzY3ZfdmNwdV91bnNldF9pbnRlcnJ1cHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgbG9ja2xlc3MgYXRvbWljIGJpdG9wcyB3aXRoIGEgcmF3IHNwaW5sb2NrIGZvciB0cmFja2luZyBwZW5kaW5nIFZDUFUgaW50ZXJydXB0cyBpbiBSSVNDLVYgS1ZNLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZmZlY3RzIGludGVycnVwdCBpbmplY3Rpb24gYW5kIHN5bmNocm9uaXphdGlvbi4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gZnVuY3Rpb25zIHRoYXQgc2V0L3Vuc2V0IGludGVycnVwdHMgYW5kIENTUnMsIHdoaWNoIGFyZSBhY2Nlc3NpYmxlIHZpYSBLVk0gaW9jdGxzIGFuZCBub3Qgb24gdGhlIGFic29sdXRlIGhvdHRlc3QgVk0gZXhpdCBwYXRoLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMTNUMDc6MTQ6NTYuMTYzNTIyNDcyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzYxMjAxMjYwNTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9yaXNjdl92Y3B1X2FpYV9zZXRfY3NyXCIsXG4gICAgXCJrdm1fcmlzY3ZfdmNwdV9nZW5lcmFsX3NldF9jc3JcIixcbiAgICBcImt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHRcIixcbiAgICBcImt2bV9yaXNjdl92Y3B1X3Vuc2V0X2ludGVycnVwdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIGxvY2tsZXNzIGF0b21pYyBiaXRvcHMgd2l0aCBhIHJhdyBzcGlubG9jayBmb3IgdHJhY2tpbmcgcGVuZGluZyBWQ1BVIGludGVycnVwdHMgaW4gUklTQy1WIEtWTS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWZmZWN0cyBpbnRlcnJ1cHQgaW5qZWN0aW9uIGFuZCBzeW5jaHJvbml6YXRpb24uIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIGZ1bmN0aW9ucyB0aGF0IHNldC91bnNldCBpbnRlcnJ1cHRzIGFuZCBDU1JzLCB3aGljaCBhcmUgYWNjZXNzaWJsZSB2aWEgS1ZNIGlvY3RscyBhbmQgbm90IG9uIHRoZSBhYnNvbHV0ZSBob3R0ZXN0IFZNIGV4aXQgcGF0aC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDc6MTQ6NTYuMTYzNTI4MzkyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDE4NzAwOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2ZjAxZTM2OTQ2OWJjNzBmZjYyY2I0OTBlYTY1OTJkZDBmMjk1ZTcyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gSnVsIDEzIDA3OjE0OjU0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbmluZGV4IDYwMDE3Y2VlYzlkMmFmLi5lMmQ1ODA4MTY5ZTQ0ZCAxMDA2NDRcXG4tLS0gYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG4rKysgYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG5AQCAtMjA5LDEzICsyMDksMTMgQEAgc3RydWN0IGt2bV92Y3B1X2FyY2gge1xcbiBcXHQvKlxcbiBcXHQgKiBWQ1BVIGludGVycnVwdHNcXG4gXFx0ICpcXG4tXFx0ICogV2UgaGF2ZSBhIGxvY2tsZXNzIGFwcHJvYWNoIGZvciB0cmFja2luZyBwZW5kaW5nIFZDUFUgaW50ZXJydXB0c1xcbi1cXHQgKiBpbXBsZW1lbnRlZCB1c2luZyBhdG9taWMgYml0b3BzLiBUaGUgaXJxc19wZW5kaW5nIGJpdG1hcCByZXByZXNlbnRcXG4tXFx0ICogcGVuZGluZyBpbnRlcnJ1cHRzIHdoZXJlYXMgaXJxc19wZW5kaW5nX21hc2sgcmVwcmVzZW50IGJpdHMgY2hhbmdlZFxcbi1cXHQgKiBpbiBpcnFzX3BlbmRpbmcuIE91ciBhcHByb2FjaCBpcyBtb2RlbGVkIGFyb3VuZCBtdWx0aXBsZSBwcm9kdWNlclxcbi1cXHQgKiBhbmQgc2luZ2xlIGNvbnN1bWVyIHByb2JsZW0gd2hlcmUgdGhlIGNvbnN1bWVyIGlzIHRoZSBWQ1BVIGl0c2VsZi5cXG4rXFx0ICogVGhlIGlycXNfcGVuZGluZyBiaXRtYXAgcmVwcmVzZW50cyBwZW5kaW5nIGludGVycnVwdHMgd2hlcmVhc1xcbitcXHQgKiBpcnFzX3BlbmRpbmdfbWFzayByZXByZXNlbnRzIGJpdHMgY2hhbmdlZCBpbiBpcnFzX3BlbmRpbmcuIFVwZGF0ZXNcXG4rXFx0ICogdG8gdGhlc2UgYml0bWFwcyBhcmUgc2VyaWFsaXplZCBzbyB2Y3B1IGludGVycnVwdCBzeW5jL2ZsdXNoIGNhbm5vdFxcbitcXHQgKiBkcm9wIGEgbmV3bHkgaW5qZWN0ZWQgaW50ZXJydXB0IHdoaWxlIHN5bmNpbmcgZ3Vlc3QtdmlzaWJsZSBIVklQLlxcbiBcXHQgKi9cXG4gI2RlZmluZSBLVk1fUklTQ1ZfVkNQVV9OUl9JUlFTXFx0NjRcXG4rXFx0cmF3X3NwaW5sb2NrX3QgaXJxc19wZW5kaW5nX2xvY2s7XFxuIFxcdERFQ0xBUkVfQklUTUFQKGlycXNfcGVuZGluZywgS1ZNX1JJU0NWX1ZDUFVfTlJfSVJRUyk7XFxuIFxcdERFQ0xBUkVfQklUTUFQKGlycXNfcGVuZGluZ19tYXNrLCBLVk1fUklTQ1ZfVkNQVV9OUl9JUlFTKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL2FpYS5jIGIvYXJjaC9yaXNjdi9rdm0vYWlhLmNcXG5pbmRleCBiYWZiMDA5YzVjZTU1OS4uMjI1ZTRhZWQ4MWEzNzcgMTAwNjQ0XFxuLS0tIGEvYXJjaC9yaXNjdi9rdm0vYWlhLmNcXG4rKysgYi9hcmNoL3Jpc2N2L2t2bS9haWEuY1xcbkBAIC01MywxMiArNTMsMTUgQEAgdm9pZCBrdm1fcmlzY3ZfdmNwdV9haWFfZmx1c2hfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdHN0cnVjdCBrdm1fdmNwdV9haWFfY3NyICpjc3IgPSBcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5haWFfY29udGV4dC5ndWVzdF9jc3I7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbWFzaywgdmFsO1xcbiBcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbG9jayk7XFxuK1xcbiBcXHRpZiAoIWt2bV9yaXNjdl9haWFfYXZhaWxhYmxlKCkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdGlmIChSRUFEX09OQ0UodmNwdS1cXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFza1sxXSkpIHtcXG4tXFx0XFx0bWFzayA9IHhjaGdfYWNxdWlyZShcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFza1sxXSwgMCk7XFxuLVxcdFxcdHZhbCA9IFJFQURfT05DRSh2Y3B1LVxcdTAwM2VhcmNoLmlycXNfcGVuZGluZ1sxXSkgXFx1MDAyNiBtYXNrO1xcbitcXHRtYXNrID0gdmNwdS1cXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFza1sxXTtcXG4rXFx0aWYgKG1hc2spIHtcXG4rXFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFza1sxXSA9IDA7XFxuK1xcdFxcdHZhbCA9IHZjcHUtXFx1MDAzZWFyY2guaXJxc19wZW5kaW5nWzFdIFxcdTAwMjYgbWFzaztcXG4gXFxuIFxcdFxcdGNzci1cXHUwMDNlaHZpcGggXFx1MDAyNj0gfm1hc2s7XFxuIFxcdFxcdGNzci1cXHUwMDNlaHZpcGggfD0gdmFsO1xcbkBAIC02OSw2ICs3Miw4IEBAIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfYWlhX3N5bmNfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4gXFx0c3RydWN0IGt2bV92Y3B1X2FpYV9jc3IgKmNzciA9IFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLmFpYV9jb250ZXh0Lmd1ZXN0X2NzcjtcXG4gXFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2spO1xcbitcXG4gXFx0aWYgKGt2bV9yaXNjdl9haWFfYXZhaWxhYmxlKCkpXFxuIFxcdFxcdGNzci1cXHUwMDNldnNpZWggPSBuY3NyX3JlYWQoQ1NSX1ZTSUVIKTtcXG4gfVxcbkBAIC03OCwxMSArODMsMTMgQEAgYm9vbCBrdm1fcmlzY3ZfdmNwdV9haWFfaGFzX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgbWFzaylcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIHNlaXA7XFxuIFxcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLmlycXNfcGVuZGluZ19sb2NrKTtcXG4rXFxuIFxcdGlmICgha3ZtX3Jpc2N2X2FpYV9hdmFpbGFibGUoKSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4gI2lmZGVmIENPTkZJR18zMkJJVFxcbi1cXHRpZiAoUkVBRF9PTkNFKHZjcHUtXFx1MDAzZWFyY2guaXJxc19wZW5kaW5nWzFdKSBcXHUwMDI2XFxuK1xcdGlmICh2Y3B1LVxcdTAwM2VhcmNoLmlycXNfcGVuZGluZ1sxXSBcXHUwMDI2XFxuIFxcdCAgICAodmNwdS1cXHUwMDNlYXJjaC5haWFfY29udGV4dC5ndWVzdF9jc3IudnNpZWggXFx1MDAyNiB1cHBlcl8zMl9iaXRzKG1hc2spKSlcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuICNlbmRpZlxcbkBAIC0yMDcsNiArMjE0LDkgQEAgaW50IGt2bV9yaXNjdl92Y3B1X2FpYV9zZXRfY3NyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4ge1xcbiBcXHRzdHJ1Y3Qga3ZtX3ZjcHVfYWlhX2NzciAqY3NyID0gXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2guYWlhX2NvbnRleHQuZ3Vlc3RfY3NyO1xcbiBcXHR1bnNpZ25lZCBsb25nIHJlZ3NfbWF4ID0gc2l6ZW9mKHN0cnVjdCBrdm1fcmlzY3ZfYWlhX2NzcikgLyBzaXplb2YodW5zaWduZWQgbG9uZyk7XFxuKyNpZmRlZiBDT05GSUdfMzJCSVRcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rI2VuZGlmXFxuIFxcbiBcXHRpZiAoIXJpc2N2X2lzYV9leHRlbnNpb25fYXZhaWxhYmxlKHZjcHUtXFx1MDAzZWFyY2guaXNhLCBTU0FJQSkpXFxuIFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbkBAIC0yMTYsMTEgKzIyNiwxOCBAQCBpbnQga3ZtX3Jpc2N2X3ZjcHVfYWlhX3NldF9jc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXHRyZWdfbnVtID0gYXJyYXlfaW5kZXhfbm9zcGVjKHJlZ19udW0sIHJlZ3NfbWF4KTtcXG4gXFxuIFxcdGlmIChrdm1fcmlzY3ZfYWlhX2F2YWlsYWJsZSgpKSB7XFxuLVxcdFxcdCgodW5zaWduZWQgbG9uZyAqKWNzcilbcmVnX251bV0gPSB2YWw7XFxuLVxcbiAjaWZkZWYgQ09ORklHXzMyQklUXFxuLVxcdFxcdGlmIChyZWdfbnVtID09IEtWTV9SRUdfUklTQ1ZfQ1NSX0FJQV9SRUcoc2lwaCkpXFxuLVxcdFxcdFxcdFdSSVRFX09OQ0UodmNwdS1cXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFza1sxXSwgMCk7XFxuK1xcdFxcdGlmIChyZWdfbnVtID09IEtWTV9SRUdfUklTQ1ZfQ1NSX0FJQV9SRUcoc2lwaCkpIHtcXG4rXFx0XFx0XFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7XFxuK1xcdFxcdFxcdCgodW5zaWduZWQgbG9uZyAqKWNzcilbcmVnX251bV0gPSB2YWw7XFxuK1xcdFxcdFxcdHZjcHUtXFx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2tbMV0gPSAwO1xcbitcXHRcXHRcXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbG9jayxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgZmxhZ3MpO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHQoKHVuc2lnbmVkIGxvbmcgKiljc3IpW3JlZ19udW1dID0gdmFsO1xcbitcXHRcXHR9XFxuKyNlbHNlXFxuK1xcdFxcdCgodW5zaWduZWQgbG9uZyAqKWNzcilbcmVnX251bV0gPSB2YWw7XFxuICNlbmRpZlxcbiBcXHR9XFxuIFxcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS92Y3B1LmMgYi9hcmNoL3Jpc2N2L2t2bS92Y3B1LmNcXG5pbmRleCBjZjZlMjMxZTc2ZTI1NC4uN2Q4ZDIwODM5ZDQ2ZWUgMTAwNjQ0XFxuLS0tIGEvYXJjaC9yaXNjdi9rdm0vdmNwdS5jXFxuKysrIGIvYXJjaC9yaXNjdi9rdm0vdmNwdS5jXFxuQEAgLTgwLDYgKzgwLDcgQEAgc3RhdGljIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfY29udGV4dF9yZXNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIFxcbiBzdGF0aWMgdm9pZCBrdm1fcmlzY3ZfcmVzZXRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wga3ZtX3NiaV9yZXNldClcXG4ge1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXHRib29sIGxvYWRlZDtcXG4gXFxuIFxcdC8qKlxcbkBAIC0xMDQsOCArMTA1LDEwIEBAIHN0YXRpYyB2b2lkIGt2bV9yaXNjdl9yZXNldF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBrdm1fc2JpX3Jlc2V0KVxcbiBcXG4gXFx0a3ZtX3Jpc2N2X3ZjcHVfYWlhX3Jlc2V0KHZjcHUpO1xcbiBcXG4rXFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7XFxuIFxcdGJpdG1hcF96ZXJvKHZjcHUtXFx1MDAzZWFyY2guaXJxc19wZW5kaW5nLCBLVk1fUklTQ1ZfVkNQVV9OUl9JUlFTKTtcXG4gXFx0Yml0bWFwX3plcm8odmNwdS1cXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFzaywgS1ZNX1JJU0NWX1ZDUFVfTlJfSVJRUyk7XFxuK1xcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7XFxuIFxcbiBcXHRrdm1fcmlzY3ZfdmNwdV9wbXVfcmVzZXQodmNwdSk7XFxuIFxcbkBAIC0xNTEsNiArMTU0LDcgQEAgaW50IGt2bV9hcmNoX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFxuIFxcdC8qIFNldHVwIFZDUFUgaGZlbmNlIHF1ZXVlICovXFxuIFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLmhmZW5jZV9sb2NrKTtcXG4rXFx0cmF3X3NwaW5fbG9ja19pbml0KFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLmlycXNfcGVuZGluZ19sb2NrKTtcXG4gXFxuIFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLnJlc2V0X3N0YXRlLmxvY2spO1xcbiBcXG5AQCAtMzUyLDEwICszNTYsMTMgQEAgdm9pZCBrdm1fcmlzY3ZfdmNwdV9mbHVzaF9pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbiBcXHRzdHJ1Y3Qga3ZtX3ZjcHVfY3NyICpjc3IgPSBcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5ndWVzdF9jc3I7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbWFzaywgdmFsO1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXG4tXFx0aWYgKFJFQURfT05DRSh2Y3B1LVxcdTAwM2VhcmNoLmlycXNfcGVuZGluZ19tYXNrWzBdKSkge1xcbi1cXHRcXHRtYXNrID0geGNoZ19hY3F1aXJlKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLmlycXNfcGVuZGluZ19tYXNrWzBdLCAwKTtcXG4tXFx0XFx0dmFsID0gUkVBRF9PTkNFKHZjcHUtXFx1MDAzZWFyY2guaXJxc19wZW5kaW5nWzBdKSBcXHUwMDI2IG1hc2s7XFxuK1xcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpO1xcbitcXHRtYXNrID0gdmNwdS1cXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFza1swXTtcXG4rXFx0aWYgKG1hc2spIHtcXG4rXFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFza1swXSA9IDA7XFxuK1xcdFxcdHZhbCA9IHZjcHUtXFx1MDAzZWFyY2guaXJxc19wZW5kaW5nWzBdIFxcdTAwMjYgbWFzaztcXG4gXFxuIFxcdFxcdGNzci1cXHUwMDNlaHZpcCBcXHUwMDI2PSB+bWFzaztcXG4gXFx0XFx0Y3NyLVxcdTAwM2VodmlwIHw9IHZhbDtcXG5AQCAtMzYzLDExICszNzAsMTMgQEAgdm9pZCBrdm1fcmlzY3ZfdmNwdV9mbHVzaF9pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFxuIFxcdC8qIEZsdXNoIEFJQSBoaWdoIGludGVycnVwdHMgKi9cXG4gXFx0a3ZtX3Jpc2N2X3ZjcHVfYWlhX2ZsdXNoX2ludGVycnVwdHModmNwdSk7XFxuK1xcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7XFxuIH1cXG4gXFxuIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfc3luY19pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIGh2aXA7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcdHN0cnVjdCBrdm1fdmNwdV9hcmNoICp2ID0gXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2g7XFxuIFxcdHN0cnVjdCBrdm1fdmNwdV9jc3IgKmNzciA9IFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLmd1ZXN0X2NzcjtcXG4gXFxuQEAgLTM3NiwyNyArMzg1LDI5IEBAIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfc3luY19pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFxuIFxcdC8qIFN5bmMtdXAgSFZJUC5WU1NJUCBiaXQgY2hhbmdlcyBkb2VzIGJ5IEd1ZXN0ICovXFxuIFxcdGh2aXAgPSBuY3NyX3JlYWQoQ1NSX0hWSVApO1xcbitcXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnYtXFx1MDAzZWlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7XFxuIFxcdGlmICgoY3NyLVxcdTAwM2VodmlwIF4gaHZpcCkgXFx1MDAyNiAoMVVMIFxcdTAwM2NcXHUwMDNjIElSUV9WU19TT0ZUKSkge1xcbiBcXHRcXHRpZiAoaHZpcCBcXHUwMDI2ICgxVUwgXFx1MDAzY1xcdTAwM2MgSVJRX1ZTX1NPRlQpKSB7XFxuLVxcdFxcdFxcdGlmICghdGVzdF9hbmRfc2V0X2JpdChJUlFfVlNfU09GVCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgdi1cXHUwMDNlaXJxc19wZW5kaW5nX21hc2spKVxcbi1cXHRcXHRcXHRcXHRzZXRfYml0KElSUV9WU19TT0ZULCB2LVxcdTAwM2VpcnFzX3BlbmRpbmcpO1xcbitcXHRcXHRcXHRpZiAoIV9fdGVzdF9hbmRfc2V0X2JpdChJUlFfVlNfU09GVCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0di1cXHUwMDNlaXJxc19wZW5kaW5nX21hc2spKVxcbitcXHRcXHRcXHRcXHRfX3NldF9iaXQoSVJRX1ZTX1NPRlQsIHYtXFx1MDAzZWlycXNfcGVuZGluZyk7XFxuIFxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdGlmICghdGVzdF9hbmRfc2V0X2JpdChJUlFfVlNfU09GVCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgdi1cXHUwMDNlaXJxc19wZW5kaW5nX21hc2spKVxcbi1cXHRcXHRcXHRcXHRjbGVhcl9iaXQoSVJRX1ZTX1NPRlQsIHYtXFx1MDAzZWlycXNfcGVuZGluZyk7XFxuK1xcdFxcdFxcdGlmICghX190ZXN0X2FuZF9zZXRfYml0KElSUV9WU19TT0ZULFxcbitcXHRcXHRcXHRcXHRcXHRcXHR2LVxcdTAwM2VpcnFzX3BlbmRpbmdfbWFzaykpXFxuK1xcdFxcdFxcdFxcdF9fY2xlYXJfYml0KElSUV9WU19TT0ZULCB2LVxcdTAwM2VpcnFzX3BlbmRpbmcpO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuIFxcdC8qIFN5bmMgdXAgdGhlIEhWSVAuTENPRklQIGJpdCBjaGFuZ2VzIChvbmx5IGNsZWFyKSBieSB0aGUgZ3Vlc3QgKi9cXG4gXFx0aWYgKChjc3ItXFx1MDAzZWh2aXAgXiBodmlwKSBcXHUwMDI2ICgxVUwgXFx1MDAzY1xcdTAwM2MgSVJRX1BNVV9PVkYpKSB7XFxuIFxcdFxcdGlmICghKGh2aXAgXFx1MDAyNiAoMVVMIFxcdTAwM2NcXHUwMDNjIElSUV9QTVVfT1ZGKSkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgICF0ZXN0X2FuZF9zZXRfYml0KElSUV9QTVVfT1ZGLCB2LVxcdTAwM2VpcnFzX3BlbmRpbmdfbWFzaykpXFxuLVxcdFxcdFxcdGNsZWFyX2JpdChJUlFfUE1VX09WRiwgdi1cXHUwMDNlaXJxc19wZW5kaW5nKTtcXG4rXFx0XFx0ICAgICFfX3Rlc3RfYW5kX3NldF9iaXQoSVJRX1BNVV9PVkYsIHYtXFx1MDAzZWlycXNfcGVuZGluZ19tYXNrKSlcXG4rXFx0XFx0XFx0X19jbGVhcl9iaXQoSVJRX1BNVV9PVkYsIHYtXFx1MDAzZWlycXNfcGVuZGluZyk7XFxuIFxcdH1cXG4gXFxuIFxcdC8qIFN5bmMtdXAgQUlBIGhpZ2ggaW50ZXJydXB0cyAqL1xcbiBcXHRrdm1fcmlzY3ZfdmNwdV9haWFfc3luY19pbnRlcnJ1cHRzKHZjcHUpO1xcbitcXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2di1cXHUwMDNlaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTtcXG4gXFxuIFxcdC8qIFN5bmMtdXAgdGltZXIgQ1NScyAqL1xcbiBcXHRrdm1fcmlzY3ZfdmNwdV90aW1lcl9zeW5jKHZjcHUpO1xcbkBAIC00MDQsNiArNDE1LDggQEAgdm9pZCBrdm1fcmlzY3ZfdmNwdV9zeW5jX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXG4gaW50IGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgaXJxKVxcbiB7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcbiBcXHQvKlxcbiBcXHQgKiBXZSBvbmx5IGFsbG93IFZTLW1vZGUgc29mdHdhcmUsIHRpbWVyLCBhbmQgZXh0ZXJuYWxcXG4gXFx0ICogaW50ZXJydXB0cyB3aGVuIGlycSBpcyBvbmUgb2YgdGhlIGxvY2FsIGludGVycnVwdHNcXG5AQCAtNDE2LDkgKzQyOSwxMCBAQCBpbnQga3ZtX3Jpc2N2X3ZjcHVfc2V0X2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBpcnEpXFxuIFxcdCAgICBpcnEgIT0gSVJRX1BNVV9PVkYpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0c2V0X2JpdChpcnEsIHZjcHUtXFx1MDAzZWFyY2guaXJxc19wZW5kaW5nKTtcXG4tXFx0c21wX21iX19iZWZvcmVfYXRvbWljKCk7XFxuLVxcdHNldF9iaXQoaXJxLCB2Y3B1LVxcdTAwM2VhcmNoLmlycXNfcGVuZGluZ19tYXNrKTtcXG4rXFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7XFxuK1xcdF9fc2V0X2JpdChpcnEsIHZjcHUtXFx1MDAzZWFyY2guaXJxc19wZW5kaW5nKTtcXG4rXFx0X19zZXRfYml0KGlycSwgdmNwdS1cXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFzayk7XFxuK1xcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7XFxuIFxcbiBcXHRrdm1fdmNwdV9raWNrKHZjcHUpO1xcbiBcXG5AQCAtNDI3LDYgKzQ0MSw4IEBAIGludCBrdm1fcmlzY3ZfdmNwdV9zZXRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IGlycSlcXG4gXFxuIGludCBrdm1fcmlzY3ZfdmNwdV91bnNldF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgaXJxKVxcbiB7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcbiBcXHQvKlxcbiBcXHQgKiBXZSBvbmx5IGFsbG93IFZTLW1vZGUgc29mdHdhcmUsIHRpbWVyLCBjb3VudGVyIG92ZXJmbG93IGFuZCBleHRlcm5hbFxcbiBcXHQgKiBpbnRlcnJ1cHRzIHdoZW4gaXJxIGlzIG9uZSBvZiB0aGUgbG9jYWwgaW50ZXJydXB0c1xcbkBAIC00MzksMjYgKzQ1NSwzMyBAQCBpbnQga3ZtX3Jpc2N2X3ZjcHVfdW5zZXRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IGlycSlcXG4gXFx0ICAgIGlycSAhPSBJUlFfUE1VX09WRilcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbi1cXHRjbGVhcl9iaXQoaXJxLCB2Y3B1LVxcdTAwM2VhcmNoLmlycXNfcGVuZGluZyk7XFxuLVxcdHNtcF9tYl9fYmVmb3JlX2F0b21pYygpO1xcbi1cXHRzZXRfYml0KGlycSwgdmNwdS1cXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFzayk7XFxuK1xcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpO1xcbitcXHRfX2NsZWFyX2JpdChpcnEsIHZjcHUtXFx1MDAzZWFyY2guaXJxc19wZW5kaW5nKTtcXG4rXFx0X19zZXRfYml0KGlycSwgdmNwdS1cXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFzayk7XFxuK1xcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gYm9vbCBrdm1fcmlzY3ZfdmNwdV9oYXNfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBtYXNrKVxcbiB7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcdHVuc2lnbmVkIGxvbmcgaWU7XFxuK1xcdGJvb2wgcmV0O1xcbiBcXG4rXFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7XFxuIFxcdGllID0gKCh2Y3B1LVxcdTAwM2VhcmNoLmd1ZXN0X2Nzci52c2llIFxcdTAwMjYgVlNJUF9WQUxJRF9NQVNLKVxcbiBcXHRcXHRcXHUwMDNjXFx1MDAzYyBWU0lQX1RPX0hWSVBfU0hJRlQpIFxcdTAwMjYgKHVuc2lnbmVkIGxvbmcpbWFzaztcXG4gXFx0aWUgfD0gdmNwdS1cXHUwMDNlYXJjaC5ndWVzdF9jc3IudnNpZSBcXHUwMDI2IH5JUlFfTE9DQUxfTUFTSyBcXHUwMDI2XFxuIFxcdFxcdCh1bnNpZ25lZCBsb25nKW1hc2s7XFxuLVxcdGlmIChSRUFEX09OQ0UodmNwdS1cXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdbMF0pIFxcdTAwMjYgaWUpXFxuLVxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRyZXQgPSB2Y3B1LVxcdTAwM2VhcmNoLmlycXNfcGVuZGluZ1swXSBcXHUwMDI2IGllO1xcbiBcXG4gXFx0LyogQ2hlY2sgQUlBIGhpZ2ggaW50ZXJydXB0cyAqL1xcbi1cXHRyZXR1cm4ga3ZtX3Jpc2N2X3ZjcHVfYWlhX2hhc19pbnRlcnJ1cHRzKHZjcHUsIG1hc2spO1xcbitcXHRpZiAoIXJldClcXG4rXFx0XFx0cmV0ID0ga3ZtX3Jpc2N2X3ZjcHVfYWlhX2hhc19pbnRlcnJ1cHRzKHZjcHUsIG1hc2spO1xcbitcXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gdm9pZCBfX2t2bV9yaXNjdl92Y3B1X3Bvd2VyX29mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmMgYi9hcmNoL3Jpc2N2L2t2bS92Y3B1X29uZXJlZy5jXFxuaW5kZXggYmI5MjBlODkyM2M5MzAuLmNiYTM2ODI5NDRiNjk0IDEwMDY0NFxcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmNcXG4rKysgYi9hcmNoL3Jpc2N2L2t2bS92Y3B1X29uZXJlZy5jXFxuQEAgLTI5OCw2ICsyOTgsNyBAQCBzdGF0aWMgaW50IGt2bV9yaXNjdl92Y3B1X2dlbmVyYWxfc2V0X2NzcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIHtcXG4gXFx0c3RydWN0IGt2bV92Y3B1X2NzciAqY3NyID0gXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2guZ3Vlc3RfY3NyO1xcbiBcXHR1bnNpZ25lZCBsb25nIHJlZ3NfbWF4ID0gc2l6ZW9mKHN0cnVjdCBrdm1fcmlzY3ZfY3NyKSAvIHNpemVvZih1bnNpZ25lZCBsb25nKTtcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFxuIFxcdGlmIChyZWdfbnVtIFxcdTAwM2U9IHJlZ3NfbWF4KVxcbiBcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG5AQCAtMzA5LDEwICszMTAsMTQgQEAgc3RhdGljIGludCBrdm1fcmlzY3ZfdmNwdV9nZW5lcmFsX3NldF9jc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXHRcXHRyZWdfdmFsIFxcdTAwM2NcXHUwMDNjPSBWU0lQX1RPX0hWSVBfU0hJRlQ7XFxuIFxcdH1cXG4gXFxuLVxcdCgodW5zaWduZWQgbG9uZyAqKWNzcilbcmVnX251bV0gPSByZWdfdmFsO1xcbi1cXG4tXFx0aWYgKHJlZ19udW0gPT0gS1ZNX1JFR19SSVNDVl9DU1JfUkVHKHNpcCkpXFxuLVxcdFxcdFdSSVRFX09OQ0UodmNwdS1cXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFza1swXSwgMCk7XFxuK1xcdGlmIChyZWdfbnVtID09IEtWTV9SRUdfUklTQ1ZfQ1NSX1JFRyhzaXApKSB7XFxuK1xcdFxcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpO1xcbitcXHRcXHQoKHVuc2lnbmVkIGxvbmcgKiljc3IpW3JlZ19udW1dID0gcmVnX3ZhbDtcXG4rXFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFza1swXSA9IDA7XFxuK1xcdFxcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdCgodW5zaWduZWQgbG9uZyAqKWNzcilbcmVnX251bV0gPSByZWdfdmFsO1xcbitcXHR9XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwNzoxNDo1Ni44MDYzMzczNzVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2MDU1ODQzNDY3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fcmlzY3ZfdmNwdV9haWFfc2V0X2NzclwiLFxuICAgIFwia3ZtX3Jpc2N2X3ZjcHVfZ2VuZXJhbF9zZXRfY3NyXCIsXG4gICAgXCJrdm1fcmlzY3ZfdmNwdV9zZXRfaW50ZXJydXB0XCIsXG4gICAgXCJrdm1fcmlzY3ZfdmNwdV91bnNldF9pbnRlcnJ1cHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBsb2NrbGVzcyBhdG9taWMgYml0b3BzIHdpdGggYSByYXcgc3BpbmxvY2sgZm9yIHRyYWNraW5nIHBlbmRpbmcgVkNQVSBpbnRlcnJ1cHRzIGluIFJJU0MtViBLVk0uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFmZmVjdHMgaW50ZXJydXB0IGluamVjdGlvbiBhbmQgc3luY2hyb25pemF0aW9uLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiBmdW5jdGlvbnMgdGhhdCBzZXQvdW5zZXQgaW50ZXJydXB0cyBhbmQgQ1NScywgd2hpY2ggYXJlIGFjY2Vzc2libGUgdmlhIEtWTSBpb2N0bHMgYW5kIG5vdCBvbiB0aGUgYWJzb2x1dGUgaG90dGVzdCBWTSBleGl0IHBhdGguXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNmYwMWUzNjk0NjliYzcwZmY2MmNiNDkwZWE2NTkyZGQwZjI5NWU3MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDEzIDA3OjE0OjU0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5pbmRleCA2MDAxN2NlZWM5ZDJhZi4uZTJkNTgwODE2OWU0NGQgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbisrKyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuQEAgLTIwOSwxMyArMjA5LDEzIEBAIHN0cnVjdCBrdm1fdmNwdV9hcmNoIHtcbiBcdC8qXG4gXHQgKiBWQ1BVIGludGVycnVwdHNcbiBcdCAqXG4tXHQgKiBXZSBoYXZlIGEgbG9ja2xlc3MgYXBwcm9hY2ggZm9yIHRyYWNraW5nIHBlbmRpbmcgVkNQVSBpbnRlcnJ1cHRzXG4tXHQgKiBpbXBsZW1lbnRlZCB1c2luZyBhdG9taWMgYml0b3BzLiBUaGUgaXJxc19wZW5kaW5nIGJpdG1hcCByZXByZXNlbnRcbi1cdCAqIHBlbmRpbmcgaW50ZXJydXB0cyB3aGVyZWFzIGlycXNfcGVuZGluZ19tYXNrIHJlcHJlc2VudCBiaXRzIGNoYW5nZWRcbi1cdCAqIGluIGlycXNfcGVuZGluZy4gT3VyIGFwcHJvYWNoIGlzIG1vZGVsZWQgYXJvdW5kIG11bHRpcGxlIHByb2R1Y2VyXG4tXHQgKiBhbmQgc2luZ2xlIGNvbnN1bWVyIHByb2JsZW0gd2hlcmUgdGhlIGNvbnN1bWVyIGlzIHRoZSBWQ1BVIGl0c2VsZi5cbitcdCAqIFRoZSBpcnFzX3BlbmRpbmcgYml0bWFwIHJlcHJlc2VudHMgcGVuZGluZyBpbnRlcnJ1cHRzIHdoZXJlYXNcbitcdCAqIGlycXNfcGVuZGluZ19tYXNrIHJlcHJlc2VudHMgYml0cyBjaGFuZ2VkIGluIGlycXNfcGVuZGluZy4gVXBkYXRlc1xuK1x0ICogdG8gdGhlc2UgYml0bWFwcyBhcmUgc2VyaWFsaXplZCBzbyB2Y3B1IGludGVycnVwdCBzeW5jL2ZsdXNoIGNhbm5vdFxuK1x0ICogZHJvcCBhIG5ld2x5IGluamVjdGVkIGludGVycnVwdCB3aGlsZSBzeW5jaW5nIGd1ZXN0LXZpc2libGUgSFZJUC5cbiBcdCAqL1xuICNkZWZpbmUgS1ZNX1JJU0NWX1ZDUFVfTlJfSVJRU1x0NjRcbitcdHJhd19zcGlubG9ja190IGlycXNfcGVuZGluZ19sb2NrO1xuIFx0REVDTEFSRV9CSVRNQVAoaXJxc19wZW5kaW5nLCBLVk1fUklTQ1ZfVkNQVV9OUl9JUlFTKTtcbiBcdERFQ0xBUkVfQklUTUFQKGlycXNfcGVuZGluZ19tYXNrLCBLVk1fUklTQ1ZfVkNQVV9OUl9JUlFTKTtcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9haWEuYyBiL2FyY2gvcmlzY3Yva3ZtL2FpYS5jXG5pbmRleCBiYWZiMDA5YzVjZTU1OS4uMjI1ZTRhZWQ4MWEzNzcgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS9haWEuY1xuKysrIGIvYXJjaC9yaXNjdi9rdm0vYWlhLmNcbkBAIC01MywxMiArNTMsMTUgQEAgdm9pZCBrdm1fcmlzY3ZfdmNwdV9haWFfZmx1c2hfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRzdHJ1Y3Qga3ZtX3ZjcHVfYWlhX2NzciAqY3NyID0gXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmFpYV9jb250ZXh0Lmd1ZXN0X2NzcjtcbiBcdHVuc2lnbmVkIGxvbmcgbWFzaywgdmFsO1xuIFxuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2spO1xuK1xuIFx0aWYgKCFrdm1fcmlzY3ZfYWlhX2F2YWlsYWJsZSgpKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRpZiAoUkVBRF9PTkNFKHZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFza1sxXSkpIHtcbi1cdFx0bWFzayA9IHhjaGdfYWNxdWlyZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2tbMV0sIDApO1xuLVx0XHR2YWwgPSBSRUFEX09OQ0UodmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ1sxXSkgXHUwMDI2IG1hc2s7XG4rXHRtYXNrID0gdmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19tYXNrWzFdO1xuK1x0aWYgKG1hc2spIHtcbitcdFx0dmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19tYXNrWzFdID0gMDtcbitcdFx0dmFsID0gdmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ1sxXSBcdTAwMjYgbWFzaztcbiBcbiBcdFx0Y3NyLVx1MDAzZWh2aXBoIFx1MDAyNj0gfm1hc2s7XG4gXHRcdGNzci1cdTAwM2VodmlwaCB8PSB2YWw7XG5AQCAtNjksNiArNzIsOCBAQCB2b2lkIGt2bV9yaXNjdl92Y3B1X2FpYV9zeW5jX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdHN0cnVjdCBrdm1fdmNwdV9haWFfY3NyICpjc3IgPSBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guYWlhX2NvbnRleHQuZ3Vlc3RfY3NyO1xuIFxuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2spO1xuK1xuIFx0aWYgKGt2bV9yaXNjdl9haWFfYXZhaWxhYmxlKCkpXG4gXHRcdGNzci1cdTAwM2V2c2llaCA9IG5jc3JfcmVhZChDU1JfVlNJRUgpO1xuIH1cbkBAIC03OCwxMSArODMsMTMgQEAgYm9vbCBrdm1fcmlzY3ZfdmNwdV9haWFfaGFzX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgbWFzaylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHNlaXA7XG4gXG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbG9jayk7XG4rXG4gXHRpZiAoIWt2bV9yaXNjdl9haWFfYXZhaWxhYmxlKCkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiAjaWZkZWYgQ09ORklHXzMyQklUXG4tXHRpZiAoUkVBRF9PTkNFKHZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdbMV0pIFx1MDAyNlxuK1x0aWYgKHZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdbMV0gXHUwMDI2XG4gXHQgICAgKHZjcHUtXHUwMDNlYXJjaC5haWFfY29udGV4dC5ndWVzdF9jc3IudnNpZWggXHUwMDI2IHVwcGVyXzMyX2JpdHMobWFzaykpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiAjZW5kaWZcbkBAIC0yMDcsNiArMjE0LDkgQEAgaW50IGt2bV9yaXNjdl92Y3B1X2FpYV9zZXRfY3NyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiB7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHVfYWlhX2NzciAqY3NyID0gXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmFpYV9jb250ZXh0Lmd1ZXN0X2NzcjtcbiBcdHVuc2lnbmVkIGxvbmcgcmVnc19tYXggPSBzaXplb2Yoc3RydWN0IGt2bV9yaXNjdl9haWFfY3NyKSAvIHNpemVvZih1bnNpZ25lZCBsb25nKTtcbisjaWZkZWYgQ09ORklHXzMyQklUXG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuKyNlbmRpZlxuIFxuIFx0aWYgKCFyaXNjdl9pc2FfZXh0ZW5zaW9uX2F2YWlsYWJsZSh2Y3B1LVx1MDAzZWFyY2guaXNhLCBTU0FJQSkpXG4gXHRcdHJldHVybiAtRU5PRU5UO1xuQEAgLTIxNiwxMSArMjI2LDE4IEBAIGludCBrdm1fcmlzY3ZfdmNwdV9haWFfc2V0X2NzcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRyZWdfbnVtID0gYXJyYXlfaW5kZXhfbm9zcGVjKHJlZ19udW0sIHJlZ3NfbWF4KTtcbiBcbiBcdGlmIChrdm1fcmlzY3ZfYWlhX2F2YWlsYWJsZSgpKSB7XG4tXHRcdCgodW5zaWduZWQgbG9uZyAqKWNzcilbcmVnX251bV0gPSB2YWw7XG4tXG4gI2lmZGVmIENPTkZJR18zMkJJVFxuLVx0XHRpZiAocmVnX251bSA9PSBLVk1fUkVHX1JJU0NWX0NTUl9BSUFfUkVHKHNpcGgpKVxuLVx0XHRcdFdSSVRFX09OQ0UodmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19tYXNrWzFdLCAwKTtcbitcdFx0aWYgKHJlZ19udW0gPT0gS1ZNX1JFR19SSVNDVl9DU1JfQUlBX1JFRyhzaXBoKSkge1xuK1x0XHRcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTtcbitcdFx0XHQoKHVuc2lnbmVkIGxvbmcgKiljc3IpW3JlZ19udW1dID0gdmFsO1xuK1x0XHRcdHZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFza1sxXSA9IDA7XG4rXHRcdFx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19sb2NrLFxuK1x0XHRcdFx0XHRcdCAgIGZsYWdzKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHQoKHVuc2lnbmVkIGxvbmcgKiljc3IpW3JlZ19udW1dID0gdmFsO1xuK1x0XHR9XG4rI2Vsc2VcbitcdFx0KCh1bnNpZ25lZCBsb25nICopY3NyKVtyZWdfbnVtXSA9IHZhbDtcbiAjZW5kaWZcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS92Y3B1LmMgYi9hcmNoL3Jpc2N2L2t2bS92Y3B1LmNcbmluZGV4IGNmNmUyMzFlNzZlMjU0Li43ZDhkMjA4MzlkNDZlZSAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL3ZjcHUuY1xuKysrIGIvYXJjaC9yaXNjdi9rdm0vdmNwdS5jXG5AQCAtODAsNiArODAsNyBAQCBzdGF0aWMgdm9pZCBrdm1fcmlzY3ZfdmNwdV9jb250ZXh0X3Jlc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcbiBzdGF0aWMgdm9pZCBrdm1fcmlzY3ZfcmVzZXRfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wga3ZtX3NiaV9yZXNldClcbiB7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0Ym9vbCBsb2FkZWQ7XG4gXG4gXHQvKipcbkBAIC0xMDQsOCArMTA1LDEwIEBAIHN0YXRpYyB2b2lkIGt2bV9yaXNjdl9yZXNldF92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBrdm1fc2JpX3Jlc2V0KVxuIFxuIFx0a3ZtX3Jpc2N2X3ZjcHVfYWlhX3Jlc2V0KHZjcHUpO1xuIFxuK1x0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpO1xuIFx0Yml0bWFwX3plcm8odmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZywgS1ZNX1JJU0NWX1ZDUFVfTlJfSVJRUyk7XG4gXHRiaXRtYXBfemVybyh2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2ssIEtWTV9SSVNDVl9WQ1BVX05SX0lSUVMpO1xuK1x0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7XG4gXG4gXHRrdm1fcmlzY3ZfdmNwdV9wbXVfcmVzZXQodmNwdSk7XG4gXG5AQCAtMTUxLDYgKzE1NCw3IEBAIGludCBrdm1fYXJjaF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gXHQvKiBTZXR1cCBWQ1BVIGhmZW5jZSBxdWV1ZSAqL1xuIFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmhmZW5jZV9sb2NrKTtcbitcdHJhd19zcGluX2xvY2tfaW5pdChcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2spO1xuIFxuIFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLnJlc2V0X3N0YXRlLmxvY2spO1xuIFxuQEAgLTM1MiwxMCArMzU2LDEzIEBAIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfZmx1c2hfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IGt2bV92Y3B1X2NzciAqY3NyID0gXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmd1ZXN0X2NzcjtcbiBcdHVuc2lnbmVkIGxvbmcgbWFzaywgdmFsO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbi1cdGlmIChSRUFEX09OQ0UodmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19tYXNrWzBdKSkge1xuLVx0XHRtYXNrID0geGNoZ19hY3F1aXJlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFza1swXSwgMCk7XG4tXHRcdHZhbCA9IFJFQURfT05DRSh2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nWzBdKSBcdTAwMjYgbWFzaztcbitcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTtcbitcdG1hc2sgPSB2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2tbMF07XG4rXHRpZiAobWFzaykge1xuK1x0XHR2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2tbMF0gPSAwO1xuK1x0XHR2YWwgPSB2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nWzBdIFx1MDAyNiBtYXNrO1xuIFxuIFx0XHRjc3ItXHUwMDNlaHZpcCBcdTAwMjY9IH5tYXNrO1xuIFx0XHRjc3ItXHUwMDNlaHZpcCB8PSB2YWw7XG5AQCAtMzYzLDExICszNzAsMTMgQEAgdm9pZCBrdm1fcmlzY3ZfdmNwdV9mbHVzaF9pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBcdC8qIEZsdXNoIEFJQSBoaWdoIGludGVycnVwdHMgKi9cbiBcdGt2bV9yaXNjdl92Y3B1X2FpYV9mbHVzaF9pbnRlcnJ1cHRzKHZjcHUpO1xuK1x0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7XG4gfVxuIFxuIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfc3luY19pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGh2aXA7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0c3RydWN0IGt2bV92Y3B1X2FyY2ggKnYgPSBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2g7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHVfY3NyICpjc3IgPSBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guZ3Vlc3RfY3NyO1xuIFxuQEAgLTM3NiwyNyArMzg1LDI5IEBAIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfc3luY19pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBcdC8qIFN5bmMtdXAgSFZJUC5WU1NJUCBiaXQgY2hhbmdlcyBkb2VzIGJ5IEd1ZXN0ICovXG4gXHRodmlwID0gbmNzcl9yZWFkKENTUl9IVklQKTtcbitcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ2LVx1MDAzZWlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7XG4gXHRpZiAoKGNzci1cdTAwM2VodmlwIF4gaHZpcCkgXHUwMDI2ICgxVUwgXHUwMDNjXHUwMDNjIElSUV9WU19TT0ZUKSkge1xuIFx0XHRpZiAoaHZpcCBcdTAwMjYgKDFVTCBcdTAwM2NcdTAwM2MgSVJRX1ZTX1NPRlQpKSB7XG4tXHRcdFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KElSUV9WU19TT0ZULFxuLVx0XHRcdFx0XHQgICAgICB2LVx1MDAzZWlycXNfcGVuZGluZ19tYXNrKSlcbi1cdFx0XHRcdHNldF9iaXQoSVJRX1ZTX1NPRlQsIHYtXHUwMDNlaXJxc19wZW5kaW5nKTtcbitcdFx0XHRpZiAoIV9fdGVzdF9hbmRfc2V0X2JpdChJUlFfVlNfU09GVCxcbitcdFx0XHRcdFx0XHR2LVx1MDAzZWlycXNfcGVuZGluZ19tYXNrKSlcbitcdFx0XHRcdF9fc2V0X2JpdChJUlFfVlNfU09GVCwgdi1cdTAwM2VpcnFzX3BlbmRpbmcpO1xuIFx0XHR9IGVsc2Uge1xuLVx0XHRcdGlmICghdGVzdF9hbmRfc2V0X2JpdChJUlFfVlNfU09GVCxcbi1cdFx0XHRcdFx0ICAgICAgdi1cdTAwM2VpcnFzX3BlbmRpbmdfbWFzaykpXG4tXHRcdFx0XHRjbGVhcl9iaXQoSVJRX1ZTX1NPRlQsIHYtXHUwMDNlaXJxc19wZW5kaW5nKTtcbitcdFx0XHRpZiAoIV9fdGVzdF9hbmRfc2V0X2JpdChJUlFfVlNfU09GVCxcbitcdFx0XHRcdFx0XHR2LVx1MDAzZWlycXNfcGVuZGluZ19tYXNrKSlcbitcdFx0XHRcdF9fY2xlYXJfYml0KElSUV9WU19TT0ZULCB2LVx1MDAzZWlycXNfcGVuZGluZyk7XG4gXHRcdH1cbiBcdH1cbiBcbiBcdC8qIFN5bmMgdXAgdGhlIEhWSVAuTENPRklQIGJpdCBjaGFuZ2VzIChvbmx5IGNsZWFyKSBieSB0aGUgZ3Vlc3QgKi9cbiBcdGlmICgoY3NyLVx1MDAzZWh2aXAgXiBodmlwKSBcdTAwMjYgKDFVTCBcdTAwM2NcdTAwM2MgSVJRX1BNVV9PVkYpKSB7XG4gXHRcdGlmICghKGh2aXAgXHUwMDI2ICgxVUwgXHUwMDNjXHUwMDNjIElSUV9QTVVfT1ZGKSkgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAhdGVzdF9hbmRfc2V0X2JpdChJUlFfUE1VX09WRiwgdi1cdTAwM2VpcnFzX3BlbmRpbmdfbWFzaykpXG4tXHRcdFx0Y2xlYXJfYml0KElSUV9QTVVfT1ZGLCB2LVx1MDAzZWlycXNfcGVuZGluZyk7XG4rXHRcdCAgICAhX190ZXN0X2FuZF9zZXRfYml0KElSUV9QTVVfT1ZGLCB2LVx1MDAzZWlycXNfcGVuZGluZ19tYXNrKSlcbitcdFx0XHRfX2NsZWFyX2JpdChJUlFfUE1VX09WRiwgdi1cdTAwM2VpcnFzX3BlbmRpbmcpO1xuIFx0fVxuIFxuIFx0LyogU3luYy11cCBBSUEgaGlnaCBpbnRlcnJ1cHRzICovXG4gXHRrdm1fcmlzY3ZfdmNwdV9haWFfc3luY19pbnRlcnJ1cHRzKHZjcHUpO1xuK1x0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2di1cdTAwM2VpcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpO1xuIFxuIFx0LyogU3luYy11cCB0aW1lciBDU1JzICovXG4gXHRrdm1fcmlzY3ZfdmNwdV90aW1lcl9zeW5jKHZjcHUpO1xuQEAgLTQwNCw2ICs0MTUsOCBAQCB2b2lkIGt2bV9yaXNjdl92Y3B1X3N5bmNfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gaW50IGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgaXJxKVxuIHtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXG4gXHQvKlxuIFx0ICogV2Ugb25seSBhbGxvdyBWUy1tb2RlIHNvZnR3YXJlLCB0aW1lciwgYW5kIGV4dGVybmFsXG4gXHQgKiBpbnRlcnJ1cHRzIHdoZW4gaXJxIGlzIG9uZSBvZiB0aGUgbG9jYWwgaW50ZXJydXB0c1xuQEAgLTQxNiw5ICs0MjksMTAgQEAgaW50IGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgaXJxKVxuIFx0ICAgIGlycSAhPSBJUlFfUE1VX09WRilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRzZXRfYml0KGlycSwgdmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZyk7XG4tXHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcbi1cdHNldF9iaXQoaXJxLCB2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2spO1xuK1x0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpO1xuK1x0X19zZXRfYml0KGlycSwgdmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZyk7XG4rXHRfX3NldF9iaXQoaXJxLCB2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2spO1xuK1x0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7XG4gXG4gXHRrdm1fdmNwdV9raWNrKHZjcHUpO1xuIFxuQEAgLTQyNyw2ICs0NDEsOCBAQCBpbnQga3ZtX3Jpc2N2X3ZjcHVfc2V0X2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBpcnEpXG4gXG4gaW50IGt2bV9yaXNjdl92Y3B1X3Vuc2V0X2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBpcnEpXG4ge1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcbiBcdC8qXG4gXHQgKiBXZSBvbmx5IGFsbG93IFZTLW1vZGUgc29mdHdhcmUsIHRpbWVyLCBjb3VudGVyIG92ZXJmbG93IGFuZCBleHRlcm5hbFxuIFx0ICogaW50ZXJydXB0cyB3aGVuIGlycSBpcyBvbmUgb2YgdGhlIGxvY2FsIGludGVycnVwdHNcbkBAIC00MzksMjYgKzQ1NSwzMyBAQCBpbnQga3ZtX3Jpc2N2X3ZjcHVfdW5zZXRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IGlycSlcbiBcdCAgICBpcnEgIT0gSVJRX1BNVV9PVkYpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0Y2xlYXJfYml0KGlycSwgdmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZyk7XG4tXHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcbi1cdHNldF9iaXQoaXJxLCB2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2spO1xuK1x0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpO1xuK1x0X19jbGVhcl9iaXQoaXJxLCB2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nKTtcbitcdF9fc2V0X2JpdChpcnEsIHZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbWFzayk7XG4rXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbiBcbiBib29sIGt2bV9yaXNjdl92Y3B1X2hhc19pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IG1hc2spXG4ge1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdHVuc2lnbmVkIGxvbmcgaWU7XG4rXHRib29sIHJldDtcbiBcbitcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTtcbiBcdGllID0gKCh2Y3B1LVx1MDAzZWFyY2guZ3Vlc3RfY3NyLnZzaWUgXHUwMDI2IFZTSVBfVkFMSURfTUFTSylcbiBcdFx0XHUwMDNjXHUwMDNjIFZTSVBfVE9fSFZJUF9TSElGVCkgXHUwMDI2ICh1bnNpZ25lZCBsb25nKW1hc2s7XG4gXHRpZSB8PSB2Y3B1LVx1MDAzZWFyY2guZ3Vlc3RfY3NyLnZzaWUgXHUwMDI2IH5JUlFfTE9DQUxfTUFTSyBcdTAwMjZcbiBcdFx0KHVuc2lnbmVkIGxvbmcpbWFzaztcbi1cdGlmIChSRUFEX09OQ0UodmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ1swXSkgXHUwMDI2IGllKVxuLVx0XHRyZXR1cm4gdHJ1ZTtcbitcdHJldCA9IHZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdbMF0gXHUwMDI2IGllO1xuIFxuIFx0LyogQ2hlY2sgQUlBIGhpZ2ggaW50ZXJydXB0cyAqL1xuLVx0cmV0dXJuIGt2bV9yaXNjdl92Y3B1X2FpYV9oYXNfaW50ZXJydXB0cyh2Y3B1LCBtYXNrKTtcbitcdGlmICghcmV0KVxuK1x0XHRyZXQgPSBrdm1fcmlzY3ZfdmNwdV9haWFfaGFzX2ludGVycnVwdHModmNwdSwgbWFzayk7XG4rXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX2xvY2ssIGZsYWdzKTtcbitcbitcdHJldHVybiByZXQ7XG4gfVxuIFxuIHZvaWQgX19rdm1fcmlzY3ZfdmNwdV9wb3dlcl9vZmYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmMgYi9hcmNoL3Jpc2N2L2t2bS92Y3B1X29uZXJlZy5jXG5pbmRleCBiYjkyMGU4OTIzYzkzMC4uY2JhMzY4Mjk0NGI2OTQgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS92Y3B1X29uZXJlZy5jXG4rKysgYi9hcmNoL3Jpc2N2L2t2bS92Y3B1X29uZXJlZy5jXG5AQCAtMjk4LDYgKzI5OCw3IEBAIHN0YXRpYyBpbnQga3ZtX3Jpc2N2X3ZjcHVfZ2VuZXJhbF9zZXRfY3NyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiB7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHVfY3NyICpjc3IgPSBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guZ3Vlc3RfY3NyO1xuIFx0dW5zaWduZWQgbG9uZyByZWdzX21heCA9IHNpemVvZihzdHJ1Y3Qga3ZtX3Jpc2N2X2NzcikgLyBzaXplb2YodW5zaWduZWQgbG9uZyk7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuIFx0aWYgKHJlZ19udW0gXHUwMDNlPSByZWdzX21heClcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG5AQCAtMzA5LDEwICszMTAsMTQgQEAgc3RhdGljIGludCBrdm1fcmlzY3ZfdmNwdV9nZW5lcmFsX3NldF9jc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0XHRyZWdfdmFsIFx1MDAzY1x1MDAzYz0gVlNJUF9UT19IVklQX1NISUZUO1xuIFx0fVxuIFxuLVx0KCh1bnNpZ25lZCBsb25nICopY3NyKVtyZWdfbnVtXSA9IHJlZ192YWw7XG4tXG4tXHRpZiAocmVnX251bSA9PSBLVk1fUkVHX1JJU0NWX0NTUl9SRUcoc2lwKSlcbi1cdFx0V1JJVEVfT05DRSh2Y3B1LVx1MDAzZWFyY2guaXJxc19wZW5kaW5nX21hc2tbMF0sIDApO1xuK1x0aWYgKHJlZ19udW0gPT0gS1ZNX1JFR19SSVNDVl9DU1JfUkVHKHNpcCkpIHtcbitcdFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5pcnFzX3BlbmRpbmdfbG9jaywgZmxhZ3MpO1xuK1x0XHQoKHVuc2lnbmVkIGxvbmcgKiljc3IpW3JlZ19udW1dID0gcmVnX3ZhbDtcbitcdFx0dmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19tYXNrWzBdID0gMDtcbitcdFx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmlycXNfcGVuZGluZ19sb2NrLCBmbGFncyk7XG4rXHR9IGVsc2Uge1xuK1x0XHQoKHVuc2lnbmVkIGxvbmcgKiljc3IpW3JlZ19udW1dID0gcmVnX3ZhbDtcbitcdH1cbiBcbiBcdHJldHVybiAwO1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA3OjE0OjU2LjgwNjMzOTQyNFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNTA3MDIzMTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUklTQy1WIEtWTSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSBSSVNDLVYgS1ZNIGltcGxlbWVudGF0aW9uLiBJdCdzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UsIGFzIGl0IHNlZW1zIHRvIGJlIG1vdmluZyBmcm9tIGEgbG9ja2xlc3MgYXBwcm9hY2ggdXNpbmcgYXRvbWljIGJpdCBvcGVyYXRpb25zIGZvciBoYW5kbGluZyBgaXJxc19wZW5kaW5nYCBhbmQgYGlycXNfcGVuZGluZ19tYXNrYCBiaXRtYXBzIHRvIHVzaW5nIGEgYHJhd19zcGlubG9ja190IGlycXNfcGVuZGluZ19sb2NrYCB3aXRoaW4gYHN0cnVjdCBrdm1fdmNwdV9hcmNoYC4gVGhpcyByZXBsYWNlcyB0aGUgcHJldmlvdXMgbWV0aG9kIG9mIHN5bmNocm9uaXphdGlvbiB3aGljaCB1c2VkIGF0b21pYyBiaXRvcHMuIFRoYXQncyBpbnRlcmVzdGluZywgYW5kIGRlZmluaXRlbHkgd2FycmFudHMgc29tZSBzZXJpb3VzIGZ1enppbmcuXG5cbk15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHVuZGVyc3RhbmRpbmcgdGhlIHNjb3BlIG9mIHRoaXMgY2hhbmdlIGFuZCBpZGVudGlmeWluZyB0aGUga2V5IGZ1bmN0aW9ucyBhZmZlY3RlZC4gTGV0J3Mgc2VlLCBpdCdzIG1vZGlmeWluZyBzZXZlcmFsIGZpbGVzOiBgYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1faG9zdC5oYCwgYGFyY2gvcmlzY3Yva3ZtL2FpYS5jYCwgYGFyY2gvcmlzY3Yva3ZtL3ZjcHUuY2AsIGFuZCBgYXJjaC9yaXNjdi9rdm0vdmNwdV9vbmVyZWcuY2AuIFRoYXQgZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHRob3NlIGZ1bmN0aW9ucyBzbyB0aGV5IGNhbiBiZSBhZGRlZCB0byB0aGUgYEZvY3VzU3ltYm9sc2AgbGlzdC4gRnJvbSBgYWlhLmNgLCB3ZSd2ZSBnb3QgYGt2bV9yaXNjdl92Y3B1X2FpYV9mbHVzaF9pbnRlcnJ1cHRzYCwgYGt2bV9yaXNjdl92Y3B1X2FpYV9zeW5jX2ludGVycnVwdHNgLCBga3ZtX3Jpc2N2X3ZjcHVfYWlhX2hhc19pbnRlcnJ1cHRzYCwgYW5kIGBrdm1fcmlzY3ZfdmNwdV9haWFfc2V0X2NzcmAuIE5leHQsIGZyb20gYHZjcHUuY2A6IGBrdm1fcmlzY3ZfcmVzZXRfdmNwdWAsIGBrdm1fYXJjaF92Y3B1X2NyZWF0ZWAsIGBrdm1fcmlzY3ZfdmNwdV9mbHVzaF9pbnRlcnJ1cHRzYCwgYGt2bV9yaXNjdl92Y3B1X3N5bmNfaW50ZXJydXB0c2AsIGBrdm1fcmlzY3ZfdmNwdV9zZXRfaW50ZXJydXB0YCwgYGt2bV9yaXNjdl92Y3B1X3Vuc2V0X2ludGVycnVwdGAsIGFuZCBga3ZtX3Jpc2N2X3ZjcHVfaGFzX2ludGVycnVwdHNgLiBGaW5hbGx5LCBmcm9tIGB2Y3B1X29uZXJlZy5jYDogYGt2bV9yaXNjdl92Y3B1X2dlbmVyYWxfc2V0X2NzcmAuIEdvdCBpdC5cblxuQmVmb3JlIEkgZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIGl0c2VsZiwgSSBzaG91bGQgY2hlY2sgdGhlIEtjb25maWcgb3B0aW9ucyByZXF1aXJlZCBmb3IgdGhpcyBwYXRjaCB0byBiZSBlbmFibGVkLiBJdCdzIGxvY2F0ZWQgaW4gYGFyY2gvcmlzY3Yva3ZtL2AsIHNvIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcyBpbiBgYXJjaC9yaXNjdi9gIGFuZCBgYXJjaC9yaXNjdi9rdm0vYCB0byBkZXRlcm1pbmUgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBUaGF0J2xsIGJlIGltcG9ydGFudCBmb3IgcmVwcm9kdWN0aW9uIGFuZCBmdXp6aW5nIGVudmlyb25tZW50IHNldHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDc0LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDc6MTU6MDguMzEzMzY2MTg1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxMzk5OTM3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcmlzY3YvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcmlzY3Yva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnLTE5LVxcbmFyY2gvcmlzY3Yva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTVxcbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctMjEtXFx0dHJpc3RhdGUgXFxcIktlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDc6MTU6MDguNjI3MzcyNjEyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM0MzcxOTg0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtWTSBDb25maWd1cmF0aW9uIGZvciBSSVNDLVYgQXJjaGl0ZWN0dXJlKipcblxuT2theSwgc28gdGhlIGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGBLVk1gIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiB0aGlzIGlzIHRoZSAqb25seSogY29uZmlndXJhdGlvbiBpbnZvbHZlZC4gTGV0IG1lIGNoZWNrIGZvciBvdGhlcnMgdGhhdCBtaWdodCBiZSByZWxldmFudC4gVGhlIHBhdGNoIG1lbnRpb25zIGAjaWZkZWYgQ09ORklHXzMyQklUYCB3aXRoaW4gYGFyY2gvcmlzY3Yva3ZtL2FpYS5jYC4gTXkgaW5pdGlhbCByZWFjdGlvbiBpcyB0aGF0IGl0IG1pZ2h0IGJlIHRpZWQgdG8gYSAzMi1iaXQgYXJjaGl0ZWN0dXJlLiBIb3dldmVyLCBhIGNsb3NlciBsb29rIHN1Z2dlc3RzIHRoYXQncyBub3QgdGhlIGNhc2U7IGl0J3MganVzdCBhbiBgaWZkZWZgLiBUaGUgNjQtYml0IGNvZGUgaGFzIGNoYW5nZXMgYXMgd2VsbCwgc28gaXQncyBub3QgZXhjbHVzaXZlbHkgZm9yIDMyLWJpdC4gVGh1cywgYENPTkZJR18zMkJJVGAgaXNuJ3QgYSAqcmVxdWlyZW1lbnQqIGZvciB0aGlzIHBhdGNoLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgc291cmNlIGZpbGVzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGxvZ2ljLCBpbiB0aGlzIGNhc2UgYGFyY2gvcmlzY3Yva3ZtL2FpYS5jYCBhbmQgYGFyY2gvcmlzY3Yva3ZtL3ZjcHUuY2AuIFRoZSBhaW0gaGVyZSBpcyB0byBzZWUgd2hhdCBwb3J0aW9ucyBhcmUgYWN0dWFsbHkgYWZmZWN0ZWQgYnkgYW55IHBvdGVudGlhbCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBhbmQgZW5zdXJlIGZ1bGwgY292ZXJhZ2UgaXMgZ2FpbmVkIGZyb20gdGhlIGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2NTAsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDc6MTU6MTIuOTcxMDk1NDYyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MDQzNjE2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhaWFcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9yaXNjdi9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcmlzY3Yva3ZtL01ha2VmaWxlPTEwPW9iai0kKENPTkZJR19LVk0pICs9IGt2bS5vXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9NYWtlZmlsZS0xMi0jIE9yZGVyZWQgYWxwaGFiZXRpY2FsbHlcXG5hcmNoL3Jpc2N2L2t2bS9NYWtlZmlsZToxMzprdm0teSArPSBhaWEub1xcbmFyY2gvcmlzY3Yva3ZtL01ha2VmaWxlLTE0LWt2bS15ICs9IGFpYV9hcGxpYy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA3OjE1OjEzLjE1MTUzOTAyOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg3NjkxMjUyNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gS1ZNIENvbmZpZ3VyYXRpb24gYW5kIEludGVycnVwdCBIYW5kbGluZyoqXG5cbk9rYXksIHNvIGl0IGxvb2tzIGxpa2UgYEtWTWAgaXMgdGhlIG9ubHkgY29uZmlndXJhdGlvbiBJIG5lZWQgdG8gY29uc2lkZXIgZm9yIHRoaXMuIFRpbWUgdG8gZ2V0IGxhc2VyLWZvY3VzZWQgb24gdGhlIHJlbGV2YW50IGZ1bmN0aW9ucy4gTGV0IG1lIGZpbHRlciB0aG9zZSBvdXQgdG8gbWFrZSB0aGlzIG1hbmFnZWFibGUuIEFscmlnaHQsIGhlcmUncyBhIHdvcmtpbmcgbGlzdDogYGt2bV9yaXNjdl92Y3B1X2FpYV9mbHVzaF9pbnRlcnJ1cHRzYCwgYGt2bV9yaXNjdl92Y3B1X2FpYV9zeW5jX2ludGVycnVwdHNgLCBga3ZtX3Jpc2N2X3ZjcHVfYWlhX2hhc19pbnRlcnJ1cHRzYCwgYGt2bV9yaXNjdl92Y3B1X2FpYV9zZXRfY3NyYCwgYGt2bV9yaXNjdl9yZXNldF92Y3B1YCwgYGt2bV9hcmNoX3ZjcHVfY3JlYXRlYCwgYGt2bV9yaXNjdl92Y3B1X2ZsdXNoX2ludGVycnVwdHNgLCBga3ZtX3Jpc2N2X3ZjcHVfc3luY19pbnRlcnJ1cHRzYCwgYGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHRgLCBga3ZtX3Jpc2N2X3ZjcHVfdW5zZXRfaW50ZXJydXB0YCwgYGt2bV9yaXNjdl92Y3B1X2hhc19pbnRlcnJ1cHRzYCwgYW5kIGBrdm1fcmlzY3ZfdmNwdV9nZW5lcmFsX3NldF9jc3JgLlxuXG5Ob3csIEknbSB0aGlua2luZyBzb21lIG9mIHRoZXNlIGFyZSBwcm9iYWJseSBob3QgcGF0aHMsIHNwZWNpZmljYWxseSwgYGt2bV9yaXNjdl92Y3B1X2ZsdXNoX2ludGVycnVwdHNgLCBga3ZtX3Jpc2N2X3ZjcHVfc3luY19pbnRlcnJ1cHRzYCwgYW5kIGBrdm1fcmlzY3ZfdmNwdV9oYXNfaW50ZXJydXB0c2AganVtcCBvdXQgaW1tZWRpYXRlbHkuIFRoZXNlIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMgZm9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIGluIGEgdmlydHVhbGl6ZWQgaW50ZXJydXB0IHN5c3RlbS4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGNoZWNrIGlmIHRoZXNlIGFyZSBpbnZva2VkIGRpcmVjdGx5IHdpdGhpbiB0aGUgVk0gZXhpdCBsb29wLiBUaGF0J2xsIGJlIGEga2V5IGluZGljYXRvciBvZiB0aGVpciBwb3RlbnRpYWwgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTQ0LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA3OjE1OjIxLjkyMDY2NjY0MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDU3ODUzNTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3Jpc2N2X3ZjcHVfZmx1c2hfaW50ZXJydXB0c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9yaXNjdi9rdm0vdmNwdS5jPTM1MD1pbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcmVncyAqcmVncylcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYy0zNTQtXFxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jOjM1NTp2b2lkIGt2bV9yaXNjdl92Y3B1X2ZsdXNoX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYy0zNTYte1xcbi0tXFxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jPTg1Mz1pbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jLTkzOC1cXHRcXHQgKi9cXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmM6OTM5OlxcdFxcdGt2bV9yaXNjdl92Y3B1X2ZsdXNoX2ludGVycnVwdHModmNwdSk7XFxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jLTk0MC1cXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmM9MjczPXN0YXRpYyBpbnQga3ZtX3Jpc2N2X3ZjcHVfZ2VuZXJhbF9nZXRfY3NyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmMtMjg1LVxcdGlmIChyZWdfbnVtID09IEtWTV9SRUdfUklTQ1ZfQ1NSX1JFRyhzaXApKSB7XFxuYXJjaC9yaXNjdi9rdm0vdmNwdV9vbmVyZWcuYzoyODY6XFx0XFx0a3ZtX3Jpc2N2X3ZjcHVfZmx1c2hfaW50ZXJydXB0cyh2Y3B1KTtcXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X29uZXJlZy5jLTI4Ny1cXHRcXHQqb3V0X3ZhbCA9IChjc3ItXFx1MDAzZWh2aXAgXFx1MDAzZVxcdTAwM2UgVlNJUF9UT19IVklQX1NISUZUKSBcXHUwMDI2IFZTSVBfVkFMSURfTUFTSztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDc6MTU6MjIuMTY2NDY0MDQzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDkyMzE3NDk3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3NpbmcgYXMgYW4gZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgSW50ZXJydXB0IEhhbmRsaW5nIHdpdGhpbiB0aGUgS1ZNL1JJU0MtViBWaXJ0dWFsIE1hY2hpbmUqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuLi4gU28sIGZyb20gd2hhdCBJJ20gcGllY2luZyB0b2dldGhlciwgYmFzZWQgb24gaG93IHRoZSBjb2RlIGZsb3dzLCBpdCBzZWVtcyBwcmV0dHkgY2xlYXIgdGhhdCBga3ZtX3Jpc2N2X3ZjcHVfZmx1c2hfaW50ZXJydXB0c2AgKmRlZmluaXRlbHkqIGdldHMgY2FsbGVkIHdpdGhpbiBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gLiBUaGF0J3Mgbm90IGVudGlyZWx5IHN1cnByaXNpbmcsIGdpdmVuIHRoZSByb2xlIG9mIGBpb2N0bF9ydW5gIGFzIHRoZSBtYWluIGxvb3AuIFRoYXQgbWFrZXMgc2Vuc2UgZm9yIGhhbmRsaW5nIHBlbmRpbmcgaW50ZXJydXB0cywgcHJldmVudGluZyBzdGFsZSBpbnRlcnJ1cHRzLCBhbmQgZW5zdXJpbmcgdGhlIFZDUFUgb3BlcmF0ZXMgY2xlYW5seS5cblxuQW5kLCB0aGlua2luZyBhYm91dCBob3cgaW50ZXJydXB0cyBhcmUgaGFuZGxlZCBpbiB0aGlzIGVudmlyb25tZW50LCBJJ20gdmlydHVhbGx5IGNlcnRhaW4gYGt2bV9yaXNjdl92Y3B1X3N5bmNfaW50ZXJydXB0c2AgaXMgYWxzbyBsaWtlbHkgY2FsbGVkIHdpdGhpbiB0aGF0IHNhbWUgYGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuYCBmdW5jdGlvbi4gSXQncyB0aGUgbG9naWNhbCBwbGFjZSB0byBlbnN1cmUgdGhhdCB0aGUgVkNQVSdzIGludGVycnVwdCBzdGF0ZSBpcyBzeW5jaHJvbml6ZWQgd2l0aCB0aGUgaG9zdCwgaXNuJ3QgaXQ/IEdvdHRhIG1ha2Ugc3VyZSBldmVyeXRoaW5nJ3MgaW4gc3luYyB0byBhdm9pZCBhbnkgd2VpcmRuZXNzIHdpdGggdGhlIGd1ZXN0LiBHb3R0YSBrZWVwIHRoYXQgaW50ZXJydXB0IHBpcGVsaW5lIGNsZWFuISBTbywgdGhvc2UgdHdvIGFyZSBwcm9iYWJseSBhIGtleSBwYXJ0IG9mIHRoZSBydW4gbG9vcCBpbnRlcnJ1cHQgcHJvY2Vzc2luZyBzdHJhdGVneS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTI3MiwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA3OjE1OjI3LjA4OTY0MTU0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzAwNjUwODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3Jpc2N2X3ZjcHVfc3luY19pbnRlcnJ1cHRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcmlzY3Yva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Jpc2N2L2t2bS92Y3B1LmM9MzU1PXZvaWQga3ZtX3Jpc2N2X3ZjcHVfZmx1c2hfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmMtMzc1LVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYzozNzY6dm9pZCBrdm1fcmlzY3ZfdmNwdV9zeW5jX2ludGVycnVwdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYy0zNzcte1xcbi0tXFxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jPTg1Mz1pbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jLTk3MS1cXHRcXHQvKiBTeW5jdXAgaW50ZXJydXB0cyBzdGF0ZSB3aXRoIEhXICovXFxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jOjk3MjpcXHRcXHRrdm1fcmlzY3ZfdmNwdV9zeW5jX2ludGVycnVwdHModmNwdSk7XFxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jLTk3My1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDc6MTU6MjcuNTE5NzEzNTk4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIzNjMyMTA5MzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBob3QgcGF0aHMgcmVsYXRlZCB0byBSSVNDLVYgS1ZNIGludGVycnVwdHMuXG5cbioqRGl2aW5nIERlZXAgaW50byBLVk0gUklTQy1WIEludGVycnVwdCBIYW5kbGluZyoqXG5cblJpZ2h0LCBsZXQncyBzZWUsIGBrdm1fcmlzY3ZfdmNwdV9mbHVzaF9pbnRlcnJ1cHRzYCBhbmQgYGt2bV9yaXNjdl92Y3B1X3N5bmNfaW50ZXJydXB0c2AgYXJlIGtub3duIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIOKAkyBubyBzdXJwcmlzZXMgdGhlcmUsIHRoZXkncmUgYWx3YXlzIGdvaW5nIHRvIGJlLiBUaGV5J3JlIGNlbnRyYWwgdG8gaW50ZXJydXB0IGRlbGl2ZXJ5LCBzbyB3ZSdyZSBjb25zdGFudGx5IG9wdGltaXppbmcgdGhvc2UuIEJ1dCwgSSdtIHRoaW5raW5nLCB3aGF0IGFib3V0IGBrdm1fcmlzY3ZfdmNwdV9oYXNfaW50ZXJydXB0c2A/IEl0IGlzIHByb2JhYmx5IGxlc3Mgb2YgYW4gaXNzdWUsIGJ1dCBtYXliZSB3ZSBoYXZlIGFuIG9wcG9ydHVuaXR5IHRvIG9wdGltaXplIHRoYXQuIFdlIG1pZ2h0IGJlIGFibGUgdG8gbWFrZSBzb21lIGdhaW5zLCBldmVuIGlmIHRoZXkncmUgc21hbGwuIEl0J3MgdGhlIGtpbmQgb2YgdGhpbmcgdGhhdCBjb3VsZCBjb250cmlidXRlIHRvIGEgY3VtdWxhdGl2ZSBpbXByb3ZlbWVudCBvdmVyYWxsLiBBbHdheXMgaW1wb3J0YW50IHRvIHJlLWV2YWx1YXRlIHRoZSBsb3cgaGFuZ2luZyBmcnVpdCwgZXZlbiB0aG91Z2ggaXQncyBsZXNzIGltcGFjdGZ1bCB0aGFuIHRoZSBiaWcgb25lcy4gR290dGEgbWFrZSBzdXJlIHdlJ3JlIG5vdCBzcGVuZGluZyB0b28gbXVjaCB0aW1lIGhlcmUsIGhvd2V2ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5MDAsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwNzoxNTo1MS4xNTE4MjUyNzRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNjAwNjk3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fcmlzY3ZfdmNwdV9oYXNfaW50ZXJydXB0c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9yaXNjdi9rdm0vdmNwdS5jPTIyMT1pbnQga3ZtX2FyY2hfdmNwdV9ydW5uYWJsZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jLTIyMi17XFxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jOjIyMzpcXHRyZXR1cm4gKGt2bV9yaXNjdl92Y3B1X2hhc19pbnRlcnJ1cHRzKHZjcHUsIC0xVUxMKSBcXHUwMDI2XFx1MDAyNlxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYy0yMjQtXFx0XFx0IWt2bV9yaXNjdl92Y3B1X3N0b3BwZWQodmNwdSkgXFx1MDAyNlxcdTAwMjYgIXZjcHUtXFx1MDAzZWFyY2gucGF1c2UpO1xcbi0tXFxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jPTQ0Mj1pbnQga3ZtX3Jpc2N2X3ZjcHVfdW5zZXRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IGlycSlcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYy00NjUtXFxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jOjQ2Njpib29sIGt2bV9yaXNjdl92Y3B1X2hhc19pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IG1hc2spXFxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jLTQ2Ny17XFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3RpbWVyLmM9MTMwPWJvb2wga3ZtX3Jpc2N2X3ZjcHVfdGltZXJfcGVuZGluZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3RpbWVyLmMtMTM1LVxcdGlmICgha3ZtX3Jpc2N2X2RlbHRhX2N5Y2xlczJucyh0LVxcdTAwM2VuZXh0X2N5Y2xlcywgZ3QsIHQpIHx8XFxuYXJjaC9yaXNjdi9rdm0vdmNwdV90aW1lci5jOjEzNjpcXHQgICAga3ZtX3Jpc2N2X3ZjcHVfaGFzX2ludGVycnVwdHModmNwdSwgMVVMIFxcdTAwM2NcXHUwMDNjIElSUV9WU19USU1FUikpXFxuYXJjaC9yaXNjdi9rdm0vdmNwdV90aW1lci5jLTEzNy1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDc6MTU6NTEuMzU3OTAxNTM5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIzMjcxNDkwNjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgUG90ZW50aWFsIEJvdHRsZW5lY2tzIGluIEtWTS9SSVNDLVYgUGVyZm9ybWFuY2UqKlxuXG5BbHJpZ2h0LCBJJ20gdGhpbmtpbmcgYWJvdXQgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIHdpdGhpbiB0aGUgUklTQy1WIEtWTSBpbXBsZW1lbnRhdGlvbi4gSSd2ZSBiZWVuIGZvY3VzaW5nIG9uIHRoZSBjcml0aWNhbCBwYXRocywgYW5kIGBrdm1fYXJjaF92Y3B1X3J1bm5hYmxlYCBpcyBkZWZpbml0ZWx5IHNjcmVhbWluZyBvdXQgYXMgYSBwb3RlbnRpYWwgYm90dGxlbmVjay4gV2UncmUgc3BlbmRpbmcgYSBsb3Qgb2YgdGltZSB0aGVyZSwgc28gaXQgZGVtYW5kcyBjYXJlZnVsIHNjcnV0aW55LlxuXG5CdXQsIEkgYWxzbyBuZWVkIHRvIGJyb2FkZW4gdGhlIGZvY3VzLiBXZSBzaG91bGRuJ3QgbmVnbGVjdCBvdGhlciBwb3RlbnRpYWxseSBoaWdoLWZyZXF1ZW5jeSByb3V0aW5lcy4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBiZSBsb29raW5nIGF0IGBrdm1fcmlzY3ZfdmNwdV9zZXRfaW50ZXJydXB0YCBhbmQgYGt2bV9yaXNjdl92Y3B1X3Vuc2V0X2ludGVycnVwdGAuIEludGVycnVwdCBoYW5kbGluZyBpcyBmdW5kYW1lbnRhbCwgYW5kIGlmIHRob3NlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGZyZXF1ZW50bHksIHRoZXkgY291bGQgZWFzaWx5IGJlY29tZSBwZXJmb3JtYW5jZSBsaW1pdGVycy4gSSBuZWVkIHRvIHByb2ZpbGUgYW5kIGJlbmNobWFyayB0aGVzZSBhcmVhcyBhcyB3ZWxsLCB0byBnZXQgYSBob2xpc3RpYyB2aWV3IG9mIHRoZSBwZXJmb3JtYW5jZSBsYW5kc2NhcGUuIFRoZXJlIG1pZ2h0IGJlIHNvbWUgbG93LWhhbmdpbmcgZnJ1aXQgaW4gdGhlcmUuIEdvdHRhIGxvb2sgZXZlcnl3aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2NzcsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwNzoxNjoxNC42MjkzOTUzNDFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTQ5MTIyNjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3Jpc2N2X3ZjcHVfc2V0X2ludGVycnVwdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9yaXNjdi9rdm0vYWlhX2ltc2ljLmM9NjE0PXN0YXRpYyB2b2lkIGltc2ljX3N3ZmlsZV9leHRpcnFfdXBkYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9pbXNpYy5jLTYyOS1cXHQgICAgaW1zaWNfbXJpZl90b3BlaShtcmlmLCBpbXNpYy1cXHUwMDNlbnJfZWl4LCBpbXNpYy1cXHUwMDNlbnJfbXNpcykpXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2ltc2ljLmM6NjMwOlxcdFxcdGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHQodmNwdSwgSVJRX1ZTX0VYVCk7XFxuYXJjaC9yaXNjdi9rdm0vYWlhX2ltc2ljLmMtNjMxLVxcdGVsc2VcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYz0yNDk9bG9uZyBrdm1fYXJjaF92Y3B1X3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmMtMjYxLVxcdFxcdGlmIChpcnEuaXJxID09IEtWTV9JTlRFUlJVUFRfU0VUKVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYzoyNjI6XFx0XFx0XFx0cmV0dXJuIGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHQodmNwdSwgSVJRX1ZTX0VYVCk7XFxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jLTI2My1cXHRcXHRlbHNlXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmM9Mzc2PXZvaWQga3ZtX3Jpc2N2X3ZjcHVfc3luY19pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYy00MTUtXFxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jOjQxNjppbnQga3ZtX3Jpc2N2X3ZjcHVfc2V0X2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBpcnEpXFxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jLTQxNy17XFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3BtdS5jPTI5Mz1zdGF0aWMgdm9pZCBrdm1fcmlzY3ZfcG11X292ZXJmbG93KHN0cnVjdCBwZXJmX2V2ZW50ICpwZXJmX2V2ZW50LFxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vdmNwdV9wbXUuYy0zMjgtXFx0c2V0X2JpdChwbWMtXFx1MDAzZWlkeCwga3ZwbXUtXFx1MDAzZXBtY19vdmVyZmxvd24pO1xcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfcG11LmM6MzI5OlxcdGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHQodmNwdSwgSVJRX1BNVV9PVkYpO1xcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfcG11LmMtMzMwLVxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vdmNwdV9zYmlfcmVwbGFjZS5jPTQ1PXN0YXRpYyBpbnQga3ZtX3NiaV9leHRfaXBpX2hhbmRsZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3J1biAqcnVuLFxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vdmNwdV9zYmlfcmVwbGFjZS5jLTcxLVxcdFxcdH1cXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV9yZXBsYWNlLmM6NzI6XFx0XFx0cmV0ID0ga3ZtX3Jpc2N2X3ZjcHVfc2V0X2ludGVycnVwdCh0bXAsIElSUV9WU19TT0ZUKTtcXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV9yZXBsYWNlLmMtNzMtXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV92MDEuYz0xNj1zdGF0aWMgaW50IGt2bV9zYmlfZXh0X3YwMV9oYW5kbGVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKnJ1bixcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfc2JpX3YwMS5jLTU5LVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfc2JpX3YwMS5jOjYwOlxcdFxcdFxcdHJldCA9IGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHQocnZjcHUsIElSUV9WU19TT0ZUKTtcXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV92MDEuYy02MS1cXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfdGltZXIuYz00Mz1zdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQga3ZtX3Jpc2N2X3ZjcHVfaHJ0aW1lcl9leHBpcmVkKHN0cnVjdCBocnRpbWVyICpoKVxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vdmNwdV90aW1lci5jLTU2LVxcdHQtXFx1MDAzZW5leHRfc2V0ID0gZmFsc2U7XFxuYXJjaC9yaXNjdi9rdm0vdmNwdV90aW1lci5jOjU3OlxcdGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHQodmNwdSwgSVJRX1ZTX1RJTUVSKTtcXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3RpbWVyLmMtNTgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA3OjE2OjE2LjI4NDMxNDU2OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMTY4ODkyODg5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkNvbnNpZGVyaW5nIEludGVycnVwdCBIYW5kbGluZyBpbiB0aGUgUklTQy1WIEtWTSBJbXBsZW1lbnRhdGlvbioqXG5cblJpZ2h0LCBga3ZtX3Jpc2N2X3ZjcHVfc2V0X2ludGVycnVwdGAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQsIGFzIEkgcmVjYWxsLCBmcm9tIGEgdmFyaWV0eSBvZiBzb3VyY2VzIHdpdGhpbiB0aGUgS1ZNL1JJU0MtViBpbXBsZW1lbnRhdGlvbiDigJMgaW9jdGwgY2FsbHMsIHRpbWVyIGV2ZW50cywgaW50ZXItcHJvY2Vzc29yIGludGVycnVwdHMgKElQSXMpLCBldmVuIFBNVSBvdmVyZmxvdyBldmVudHMsIGFtb25nIG90aGVycy4gVGhhdCBtYWtlcyBzZW5zZSwgaXTigJlzIHRoZSBwcmltYXJ5IG1lY2hhbmlzbSB0byBpbmplY3QgYW4gaW50ZXJydXB0IGludG8gYSB2Q1BVLlxuXG5CdXQgd2FpdCBhIHNlY29uZC4uLiBJZiB3ZSBoYXZlIGEgY2xlYXIgZnVuY3Rpb24gdG8gKnNldCogYW4gaW50ZXJydXB0LCB3aGF0J3MgdGhlIGNvcnJlc3BvbmRpbmcgZnVuY3Rpb24gdG8gKnVuc2V0KiBhbiBpbnRlcnJ1cHQ/IFdoZXJlIGFuZCB3aGVuIGRvZXMgYGt2bV9yaXNjdl92Y3B1X3Vuc2V0X2ludGVycnVwdGAgY29tZSBpbnRvIHBsYXksIG9yIGlzIHRoZXJlIGFuIGFsdGVybmF0aXZlIG1lY2hhbmlzbSBmb3IgY2xlYXJpbmcgYW4gaW50ZXJydXB0IHRoYXQgSSBzaG91bGQga2VlcCBpbiBtaW5kPyBJIG5lZWQgdG8gdGhpbmsgdGhpcyB0aHJvdWdoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBpbnRlcnJ1cHQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQuIElzIGl0IGhhbmRsZWQgaW1wbGljaXRseSB0aHJvdWdoIG90aGVyIG1lY2hhbmlzbXMsIGxpa2Ugd2hlbiB0aGUgdkNQVSBhY2tub3dsZWRnZXMgdGhlIGludGVycnVwdCwgb3IgZG8gd2UgaGF2ZSBhbiBleHBsaWNpdCBmdW5jdGlvbiBzcGVjaWZpY2FsbHkgZm9yIGRlLWFzc2VydGluZyBhbiBpbnRlcnJ1cHQ/IEkgc2hvdWxkIHByb2JhYmx5IHJldmlldyB0aGUgaW50ZXJydXB0IGhhbmRsaW5nIGNvZGUgcGF0aCBhbmQgY29udHJvbCBmbG93IG1vcmUgY2FyZWZ1bGx5IHRvIGJlIHN1cmUgSSB1bmRlcnN0YW5kIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDY0LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDc6MTY6MzcuOTczMjQ2MDI5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTYxODUwNzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3Jpc2N2X3ZjcHVfdW5zZXRfaW50ZXJydXB0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcmlzY3Yva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Jpc2N2L2t2bS9haWFfaW1zaWMuYz02MTQ9c3RhdGljIHZvaWQgaW1zaWNfc3dmaWxlX2V4dGlycV91cGRhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vYWlhX2ltc2ljLmMtNjMxLVxcdGVsc2VcXG5hcmNoL3Jpc2N2L2t2bS9haWFfaW1zaWMuYzo2MzI6XFx0XFx0a3ZtX3Jpc2N2X3ZjcHVfdW5zZXRfaW50ZXJydXB0KHZjcHUsIElSUV9WU19FWFQpO1xcbmFyY2gvcmlzY3Yva3ZtL2FpYV9pbXNpYy5jLTYzMy1cXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL2FpYV9pbXNpYy5jPTYzNz1zdGF0aWMgdm9pZCBpbXNpY19zd2ZpbGVfcmVhZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgY2xlYXIsXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9haWFfaW1zaWMuYy02NTEtXFx0XFx0bWVtc2V0KGltc2ljLVxcdTAwM2Vzd2ZpbGUsIDAsIHNpemVvZigqaW1zaWMtXFx1MDAzZXN3ZmlsZSkpO1xcbmFyY2gvcmlzY3Yva3ZtL2FpYV9pbXNpYy5jOjY1MjpcXHRcXHRrdm1fcmlzY3ZfdmNwdV91bnNldF9pbnRlcnJ1cHQodmNwdSwgSVJRX1ZTX0VYVCk7XFxuYXJjaC9yaXNjdi9rdm0vYWlhX2ltc2ljLmMtNjUzLVxcdH1cXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYz0yNDk9bG9uZyBrdm1fYXJjaF92Y3B1X3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmMtMjYzLVxcdFxcdGVsc2VcXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmM6MjY0OlxcdFxcdFxcdHJldHVybiBrdm1fcmlzY3ZfdmNwdV91bnNldF9pbnRlcnJ1cHQodmNwdSwgSVJRX1ZTX0VYVCk7XFxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jLTI2NS1cXHR9XFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmM9NDE2PWludCBrdm1fcmlzY3ZfdmNwdV9zZXRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IGlycSlcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYy00NDEtXFxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jOjQ0MjppbnQga3ZtX3Jpc2N2X3ZjcHVfdW5zZXRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IGlycSlcXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmMtNDQzLXtcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfc2JpX3YwMS5jPTE2PXN0YXRpYyBpbnQga3ZtX3NiaV9leHRfdjAxX2hhbmRsZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3J1biAqcnVuLFxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vdmNwdV9zYmlfdjAxLmMtNDUtXFx0Y2FzZSBTQklfRVhUXzBfMV9DTEVBUl9JUEk6XFxuYXJjaC9yaXNjdi9rdm0vdmNwdV9zYmlfdjAxLmM6NDY6XFx0XFx0cmV0ID0ga3ZtX3Jpc2N2X3ZjcHVfdW5zZXRfaW50ZXJydXB0KHZjcHUsIElSUV9WU19TT0ZUKTtcXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3NiaV92MDEuYy00Ny1cXHRcXHRicmVhaztcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfdGltZXIuYz04NT1zdGF0aWMgaW50IGt2bV9yaXNjdl92Y3B1X3VwZGF0ZV9ocnRpbWVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IG5jeWNsZXMpXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X3RpbWVyLmMtOTMtXFxuYXJjaC9yaXNjdi9rdm0vdmNwdV90aW1lci5jOjk0OlxcdGt2bV9yaXNjdl92Y3B1X3Vuc2V0X2ludGVycnVwdCh2Y3B1LCBJUlFfVlNfVElNRVIpO1xcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfdGltZXIuYy05NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDc6MTY6MzguNTI5NDM3Mjg4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2MjM1MTI3MTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXNzZXNzbWVudCBvZiB0aGUgc2l0dWF0aW9uOlxuXG4qKlRhcmdldGluZyBJbnRlcnJ1cHQgSGFuZGxpbmcgXHUwMDI2IENTUiBVcGRhdGVzIGluIHRoZSBSSVNDLVYgS1ZNIEltcGxlbWVudGF0aW9uKipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGUgbW9zdCByZWxldmFudCBmdW5jdGlvbnMgZm9yIHRoaXMgcGFydGljdWxhciBpc3N1ZS4gRnJvbSBteSBleHBlcmllbmNlIHdpdGggdGhlIEtWTSBSSVNDLVYgY29kZSwgYGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHRgIGFuZCBga3ZtX3Jpc2N2X3ZjcHVfdW5zZXRfaW50ZXJydXB0YCBhcmUgZGVmaW5pdGVseSBzdHJvbmcgY29udGVuZGVycyBmb3IgaW52ZXN0aWdhdGlvbi4gVGhleSdyZSBjZW50cmFsIHRvIGhvdyBpbnRlcnJ1cHRzIGFyZSBtYW5hZ2VkIHdpdGhpbiB0aGUgdmlydHVhbCBDUFUgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB0aGVyZS4gQmV5b25kIGludGVycnVwdCBzZXR0aW5nIGFuZCB1bnNldHRpbmcsIEkgc2hvdWxkIGxvb2sgYXQgaG93IENTUiB1cGRhdGVzIGFyZSBpbXBsZW1lbnRlZC5cblxuVGhhdCBicmluZ3MgbWUgdG8gYGt2bV9yaXNjdl92Y3B1X2FpYV9zZXRfY3NyYCBhbmQgYGt2bV9yaXNjdl92Y3B1X2dlbmVyYWxfc2V0X2NzcmAuIFRoZXNlIHNlZW0gbGlrZSB0aGV5IGNvdWxkIGJlIHZlcnkgaW1wb3J0YW50LCB0b28uIEkgbmVlZCB0byBjaGVjayBob3cgdGhlIEFJQS1yZWxhdGVkIENTUnMgYXJlIGJlaW5nIGhhbmRsZWQuIFRoZXNlIGNvdWxkIGJlIGludm9sdmVkLCBzcGVjaWZpY2FsbHkgdGhlIEFJQSBDU1JzLiBMZXQncyBzdGFydCB3aXRoIGBrdm1fcmlzY3ZfdmNwdV9haWFfc2V0X2NzcmAuIEkgbmVlZCB0byBkaWcgaW50byB0aGF0IGZ1bmN0aW9uIGFuZCB0cmFjZSB0aGUgZGF0YSBmbG93OyB0aGF0IGlzIHdoZXJlIEknbGwgYmVnaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjkwLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDc6MTY6NTQuNzY0NTY3MDg5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDY3Njc0OTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3Jpc2N2X3ZjcHVfYWlhX3NldF9jc3JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9yaXNjdi9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcmlzY3Yva3ZtL2FpYS5jPTE5MD1pbnQga3ZtX3Jpc2N2X3ZjcHVfYWlhX2dldF9jc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vYWlhLmMtMjEwLVxcbmFyY2gvcmlzY3Yva3ZtL2FpYS5jOjIxMTppbnQga3ZtX3Jpc2N2X3ZjcHVfYWlhX3NldF9jc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbmFyY2gvcmlzY3Yva3ZtL2FpYS5jLTIxMi1cXHRcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyByZWdfbnVtLFxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vdmNwdV9vbmVyZWcuYz00MDI9c3RhdGljIGludCBrdm1fcmlzY3ZfdmNwdV9zZXRfcmVnX2NzcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X29uZXJlZy5jLTQyNS1cXHRjYXNlIEtWTV9SRUdfUklTQ1ZfQ1NSX0FJQTpcXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X29uZXJlZy5jOjQyNjpcXHRcXHRyYyA9IGt2bV9yaXNjdl92Y3B1X2FpYV9zZXRfY3NyKHZjcHUsIHJlZ19udW0sIHJlZ192YWwpO1xcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmMtNDI3LVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwNzoxNjo1NS4zNzEzNDI2NTVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM3MDA2MzY3OTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEZ1enppbmcgVGFyZ2V0IFNlbGVjdGlvbiBmb3IgUklTQy1WIEtWTSBJbnRlcnJ1cHQgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgZnV6emluZyB0aGlzIFJJU0MtViBLVk0gaW50ZXJydXB0IGhhbmRsaW5nIGNoYW5nZSwgd2hpY2ggaW52b2x2ZXMgdGhlIGludHJvZHVjdGlvbiBvZiBhIHNwaW5sb2NrIHRvIHJlcGxhY2UgbG9ja2xlc3MgYXRvbWljIGJpdCBvcGVyYXRpb25zLiBUaGUgZ29hbCBpcyB0byBmb2N1cyBvbiBmdW5jdGlvbnMgdGhhdCBkaXJlY3RseSBpbnRlcmFjdCB3aXRoIHRoZSBuZXdseSBhZGRlZCBsb2NrIGFuZCBtb2RpZmllZCBiaXRtYXBzLiBCYXNlZCBvbiB0aGUgY29kZSwgYGt2bV9yaXNjdl92Y3B1X2dlbmVyYWxfc2V0X2NzcmAgaXMgY2FsbGVkIGZyb20gYGt2bV9yaXNjdl92Y3B1X3NldF9yZWdfY3NyYCwgd2hpY2gsIGNvbnZlbmllbnRseSwgaXMgdHJpZ2dlcmVkIGJ5IHRoZSBgS1ZNX1NFVF9PTkVfUkVHYCBpb2N0bC4gVGhpcyBpb2N0bCBwYXRoIGlzIGlkZWFsIGZvciBmdXp6aW5nLlxuXG5MZXQncyBicmVhayBkb3duIG15IHRhcmdldCBzZWxlY3Rpb24gcHJvY2Vzcy4gRmlyc3QsIEkgd2FudCB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IGFyZSBhY2Nlc3NpYmxlIGFuZCBhZmZlY3RlZCBieSB0aGUgY2hhbmdlcy4gSSd2ZSBwaW5wb2ludGVkIGEgZmV3OlxuXG4qICAgYGt2bV9yaXNjdl92Y3B1X2FpYV9zZXRfY3NyYFxuKiAgIGBrdm1fcmlzY3ZfdmNwdV9nZW5lcmFsX3NldF9jc3JgXG4qICAgYGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHRgXG4qICAgYGt2bV9yaXNjdl92Y3B1X3Vuc2V0X2ludGVycnVwdGBcblxuVGhlc2UgYXJlbid0IHRoZSBhYnNvbHV0ZSBob3R0ZXN0IHBhdGhzLCBsaWtlIHRoZSBWTSBleGl0IGxvb3AsIHdoaWNoIGlzIGEga2V5IGNvbnNpZGVyYXRpb24uIEkgd2FudCB0byBhdm9pZCBmdW5jdGlvbnMgdGhhdCBhcmUgcGFydCBvZiB0aGUgY29yZSBWTSBleGl0IGxvb3AgdG8gZ2V0IGEgYnJvYWRlciB0ZXN0IGRpc3RyaWJ1dGlvbi5cblxuTm93LCBJIGNvbnNpZGVyZWQgYGt2bV9yaXNjdl92Y3B1X2ZsdXNoX2ludGVycnVwdHNgIGFuZCBga3ZtX3Jpc2N2X3ZjcHVfc3luY19pbnRlcnJ1cHRzYCwgYnV0IHRob3NlIGFyZSByaWdodCBpbiB0aGUgVk0gZXhpdCBsb29wLCBhbmQgSSB3YW50IHRvIGF2b2lkIHRob3NlLiBTaW1pbGFybHksIGBrdm1fcmlzY3ZfdmNwdV9haWFfZmx1c2hfaW50ZXJydXB0c2AgYW5kIGBrdm1fcmlzY3ZfdmNwdV9haWFfc3luY19pbnRlcnJ1cHRzYCB3b3VsZCBiZSBpbnZva2VkIG9uIGhvdCBwYXRocywgc28gdGhlc2UgYXJlIG9mZiB0aGUgbGlzdCB0b28uXG5cblNvLCBpbiBzdW1tYXJ5LCBJJ20gY29uZmlkZW50IHRoYXQgdGhlIGZvbGxvd2luZyBhcmUgdGhlIGJlc3QgdGFyZ2V0cyBmb3IgZnV6emluZywgZ2l2ZW4gdGhhdCB0aGV5IHNldC91bnNldCBpbnRlcnJ1cHRzIGFuZCBDU1JzOlxuXG4qICAgYGt2bV9yaXNjdl92Y3B1X2FpYV9zZXRfY3NyYFxuKiAgIGBrdm1fcmlzY3ZfdmNwdV9nZW5lcmFsX3NldF9jc3JgXG4qICAgYGt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHRgXG4qICAgYGt2bV9yaXNjdl92Y3B1X3Vuc2V0X2ludGVycnVwdGBcblxuTmV4dCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIExvb2tpbmcgaW50byB0aGUgS2NvbmZpZywgYENPTkZJR19LVk1gIGlzIGluZGVlZCB0aGUgcHJpbWFyeSwgYW5kIG9ubHksIGNvbmZpZ3VyYXRpb24gbmVlZGVkIGZvciB0aGlzIFJJU0MtViBLVk0gY29kZS4gR2l2ZW4gdGhhdCB0aGUgY29kZSBpcyBpbiBgYXJjaC9yaXNjdi9rdm0vYCBJJ20gY29uZmlkZW50IGFib3V0IHRoaXMuIEZpbmFsbHksIGxldCBtZSBqdXN0IHZlcmlmeSBga3ZtX3Jpc2N2X3ZjcHVfZ2VuZXJhbF9zZXRfY3NyYCBpcyB0aGUgY29ycmVjdCBuYW1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzk4NywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwNzoyNzozMi4zNzc3MTQwNjdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyMDk3NzQ2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fcmlzY3ZfdmNwdV9nZW5lcmFsX3NldF9jc3JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9yaXNjdi9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmM9MjczPXN0YXRpYyBpbnQga3ZtX3Jpc2N2X3ZjcHVfZ2VuZXJhbF9nZXRfY3NyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmMtMjk0LVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmM6Mjk1OnN0YXRpYyBpbnQga3ZtX3Jpc2N2X3ZjcHVfZ2VuZXJhbF9zZXRfY3NyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X29uZXJlZy5jLTI5Ni1cXHRcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgcmVnX251bSxcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmM9NDAyPXN0YXRpYyBpbnQga3ZtX3Jpc2N2X3ZjcHVfc2V0X3JlZ19jc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vdmNwdV9vbmVyZWcuYy00MjItXFx0Y2FzZSBLVk1fUkVHX1JJU0NWX0NTUl9HRU5FUkFMOlxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmM6NDIzOlxcdFxcdHJjID0ga3ZtX3Jpc2N2X3ZjcHVfZ2VuZXJhbF9zZXRfY3NyKHZjcHUsIHJlZ19udW0sIHJlZ192YWwpO1xcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfb25lcmVnLmMtNDI0LVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwNzoyNzozMi42OTg2OTc1NTNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQwMjcxMzU2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludGVybmFsIE1vbm9sb2d1ZTogQWZmaXJtYXRpb24gYW5kIFByb2NlZHVyYWwgUmVmaW5lbWVudCoqXG5cblllcywgdGhhdCdzIGV4YWN0bHkgd2hhdCBJJ20gc2VlaW5nIHRvbywgdGhlIGFuYWx5c2lzIGlzIHNvbGlkLiBUaGUgY29uY2x1c2lvbiByZWFjaGVkIGlzIGNvcnJlY3QsIGFuZCBJIGFncmVlIHdpdGggdGhlIGltcGxpZWQgZGlyZWN0aW9uLlxuXG5Ob3csIGxldCdzIG1vdmUgZm9yd2FyZCBlZmZpY2llbnRseS4gRm9yZ2V0IGdlbmVyaWMgbmFtaW5nIGNvbnZlbnRpb25zOyB0aGUgbmV4dCBzdGVwIGNhbGxzIGZvciBhIGNsZWFyIGlkZW50aWZpZXIgZm9yIHRoaXMgc3RlcC4gVGhlIGFjdGlvbiBoZXJlIGludm9sdmVzIHJlY29yZGluZyB0aGUga2V5IG91dGNvbWVzIG9mIHRoZSBwcm9jZXNzLCBhIG5hdHVyYWwgZGVzaWduYXRpb24gd291bGQgYmUgdG8gY2FsbCBpdCBgc2V0LXJlc3VsdHNgLiBJdCB3aWxsIGJlIGNsZWFyIHRvIG1lLCBhbmQgc2hvdWxkIGJlIGNsZWFyIGZvciBhbnlvbmUgZWxzZSBsb29raW5nIGludG8gdGhpcyBjb2RlLCB0aGF0IHRoaXMgaWRlbnRpZmllciByZXByZXNlbnRzIHRoZSBzdGVwIHdoZXJlIHRoZSBzaWduaWZpY2FudCBkZXJpdmVkIG91dHB1dHMgYXJlIGNhcHR1cmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTU5NCwiT3V0cHV0VG9rZW5zIjoxNzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwNzoyNzozNy4xMDE0MTM2NzhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjMzNTM3OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9yaXNjdl92Y3B1X2FpYV9zZXRfY3NyXCIsXG4gICAgXCJrdm1fcmlzY3ZfdmNwdV9nZW5lcmFsX3NldF9jc3JcIixcbiAgICBcImt2bV9yaXNjdl92Y3B1X3NldF9pbnRlcnJ1cHRcIixcbiAgICBcImt2bV9yaXNjdl92Y3B1X3Vuc2V0X2ludGVycnVwdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIGxvY2tsZXNzIGF0b21pYyBiaXRvcHMgd2l0aCBhIHJhdyBzcGlubG9jayBmb3IgdHJhY2tpbmcgcGVuZGluZyBWQ1BVIGludGVycnVwdHMgaW4gUklTQy1WIEtWTS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWZmZWN0cyBpbnRlcnJ1cHQgaW5qZWN0aW9uIGFuZCBzeW5jaHJvbml6YXRpb24uIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIGZ1bmN0aW9ucyB0aGF0IHNldC91bnNldCBpbnRlcnJ1cHRzIGFuZCBDU1JzLCB3aGljaCBhcmUgYWNjZXNzaWJsZSB2aWEgS1ZNIGlvY3RscyBhbmQgbm90IG9uIHRoZSBhYnNvbHV0ZSBob3R0ZXN0IFZNIGV4aXQgcGF0aC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fcmlzY3ZfdmNwdV9haWFfc2V0X2NzclwiLFxuICAgIFwia3ZtX3Jpc2N2X3ZjcHVfZ2VuZXJhbF9zZXRfY3NyXCIsXG4gICAgXCJrdm1fcmlzY3ZfdmNwdV9zZXRfaW50ZXJydXB0XCIsXG4gICAgXCJrdm1fcmlzY3ZfdmNwdV91bnNldF9pbnRlcnJ1cHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBsb2NrbGVzcyBhdG9taWMgYml0b3BzIHdpdGggYSByYXcgc3BpbmxvY2sgZm9yIHRyYWNraW5nIHBlbmRpbmcgVkNQVSBpbnRlcnJ1cHRzIGluIFJJU0MtViBLVk0uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFmZmVjdHMgaW50ZXJydXB0IGluamVjdGlvbiBhbmQgc3luY2hyb25pemF0aW9uLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiBmdW5jdGlvbnMgdGhhdCBzZXQvdW5zZXQgaW50ZXJydXB0cyBhbmQgQ1NScywgd2hpY2ggYXJlIGFjY2Vzc2libGUgdmlhIEtWTSBpb2N0bHMgYW5kIG5vdCBvbiB0aGUgYWJzb2x1dGUgaG90dGVzdCBWTSBleGl0IHBhdGguXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow5xrqt[1] Phase: Succeeded StartedAt: 2026-07-13 07:27:48 +0000 UTC FinishedAt: 2026-07-13 07:27:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xrqt[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-13 07:27:48 +0000 UTC FinishedAt: 2026-07-13 07:27:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xrqt[2] Phase: Succeeded StartedAt: 2026-07-13 07:27:48 +0000 UTC FinishedAt: 2026-07-13 09:22:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xrqt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_aia_set_csr","kvm_riscv_vcpu_general_set_csr","kvm_riscv_vcpu_set_interrupt","kvm_riscv_vcpu_unset_interrupt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"25fe3c7d-088d-4bfc-97db-5caf3a57fb98","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-13 07:27:48 +0000 UTC FinishedAt: 2026-07-13 09:22:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_aia_set_csr","kvm_riscv_vcpu_general_set_csr","kvm_riscv_vcpu_set_interrupt","kvm_riscv_vcpu_unset_interrupt"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"25fe3c7d-088d-4bfc-97db-5caf3a57fb98","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow5xrqt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_aia_set_csr","kvm_riscv_vcpu_general_set_csr","kvm_riscv_vcpu_set_interrupt","kvm_riscv_vcpu_unset_interrupt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"25fe3c7d-088d-4bfc-97db-5caf3a57fb98","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-13 07:27:48 +0000 UTC FinishedAt: 2026-07-13 07:27:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xrqt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_aia_set_csr","kvm_riscv_vcpu_general_set_csr","kvm_riscv_vcpu_set_interrupt","kvm_riscv_vcpu_unset_interrupt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"25fe3c7d-088d-4bfc-97db-5caf3a57fb98","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-13 07:27:48 +0000 UTC FinishedAt: 2026-07-13 07:27:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflow5xrqt/series-workflow5xrqt-convert-artifact-2784333715/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5xrqt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_aia_set_csr","kvm_riscv_vcpu_general_set_csr","kvm_riscv_vcpu_set_interrupt","kvm_riscv_vcpu_unset_interrupt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"25fe3c7d-088d-4bfc-97db-5caf3a57fb98","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-13 07:27:58 +0000 UTC FinishedAt: 2026-07-13 08:18:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xrqt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_aia_set_csr","kvm_riscv_vcpu_general_set_csr","kvm_riscv_vcpu_set_interrupt","kvm_riscv_vcpu_unset_interrupt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"25fe3c7d-088d-4bfc-97db-5caf3a57fb98","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-13 07:27:58 +0000 UTC FinishedAt: 2026-07-13 08:18:39 +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:*0a27fe50-2067-46de-b3fa-ed8ef87a2c2d,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-workflow5xrqt/series-workflow5xrqt-convert-artifact-2784333715/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "63b4e7a0-e1da-4fb5-83e5-46ff50057422", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5xrqt/series-workflow5xrqt-build-action-1934208193/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5xrqt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_aia_set_csr","kvm_riscv_vcpu_general_set_csr","kvm_riscv_vcpu_set_interrupt","kvm_riscv_vcpu_unset_interrupt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"25fe3c7d-088d-4bfc-97db-5caf3a57fb98","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-13 07:27:58 +0000 UTC FinishedAt: 2026-07-13 08:16:43 +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:*0a27fe50-2067-46de-b3fa-ed8ef87a2c2d,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-workflow5xrqt/series-workflow5xrqt-convert-artifact-2784333715/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "63b4e7a0-e1da-4fb5-83e5-46ff50057422", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5xrqt/series-workflow5xrqt-build-action-1934208193/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5xrqt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_aia_set_csr","kvm_riscv_vcpu_general_set_csr","kvm_riscv_vcpu_set_interrupt","kvm_riscv_vcpu_unset_interrupt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"25fe3c7d-088d-4bfc-97db-5caf3a57fb98","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-13 08:18:39 +0000 UTC FinishedAt: 2026-07-13 08:18:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xrqt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_aia_set_csr","kvm_riscv_vcpu_general_set_csr","kvm_riscv_vcpu_set_interrupt","kvm_riscv_vcpu_unset_interrupt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"25fe3c7d-088d-4bfc-97db-5caf3a57fb98","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-13 08:18:39 +0000 UTC FinishedAt: 2026-07-13 08:18:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xrqt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_aia_set_csr","kvm_riscv_vcpu_general_set_csr","kvm_riscv_vcpu_set_interrupt","kvm_riscv_vcpu_unset_interrupt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"25fe3c7d-088d-4bfc-97db-5caf3a57fb98","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-13 08:18:39 +0000 UTC FinishedAt: 2026-07-13 08:19:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xrqt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_aia_set_csr","kvm_riscv_vcpu_general_set_csr","kvm_riscv_vcpu_set_interrupt","kvm_riscv_vcpu_unset_interrupt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"25fe3c7d-088d-4bfc-97db-5caf3a57fb98","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-13 08:18:39 +0000 UTC FinishedAt: 2026-07-13 08:18:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"25fe3c7d-088d-4bfc-97db-5caf3a57fb98","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflow5xrqt/series-workflow5xrqt-convert-artifact-3524226442/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5xrqt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_aia_set_csr","kvm_riscv_vcpu_general_set_csr","kvm_riscv_vcpu_set_interrupt","kvm_riscv_vcpu_unset_interrupt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"25fe3c7d-088d-4bfc-97db-5caf3a57fb98","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-13 08:19:00 +0000 UTC FinishedAt: 2026-07-13 08:21:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xrqt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_aia_set_csr","kvm_riscv_vcpu_general_set_csr","kvm_riscv_vcpu_set_interrupt","kvm_riscv_vcpu_unset_interrupt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"25fe3c7d-088d-4bfc-97db-5caf3a57fb98","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-13 08:19:00 +0000 UTC FinishedAt: 2026-07-13 08:20:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*63b4e7a0-e1da-4fb5-83e5-46ff50057422,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5xrqt/series-workflow5xrqt-build-action-1934208193/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5xrqt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_aia_set_csr","kvm_riscv_vcpu_general_set_csr","kvm_riscv_vcpu_set_interrupt","kvm_riscv_vcpu_unset_interrupt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"25fe3c7d-088d-4bfc-97db-5caf3a57fb98","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-13 08:21:04 +0000 UTC FinishedAt: 2026-07-13 08:21:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xrqt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_aia_set_csr","kvm_riscv_vcpu_general_set_csr","kvm_riscv_vcpu_set_interrupt","kvm_riscv_vcpu_unset_interrupt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"25fe3c7d-088d-4bfc-97db-5caf3a57fb98","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-13 08:21:04 +0000 UTC FinishedAt: 2026-07-13 08:21:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xrqt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_aia_set_csr","kvm_riscv_vcpu_general_set_csr","kvm_riscv_vcpu_set_interrupt","kvm_riscv_vcpu_unset_interrupt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"25fe3c7d-088d-4bfc-97db-5caf3a57fb98","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-13 08:21:04 +0000 UTC FinishedAt: 2026-07-13 09:16:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xrqt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_aia_set_csr","kvm_riscv_vcpu_general_set_csr","kvm_riscv_vcpu_set_interrupt","kvm_riscv_vcpu_unset_interrupt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"25fe3c7d-088d-4bfc-97db-5caf3a57fb98","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-13 08:21:04 +0000 UTC FinishedAt: 2026-07-13 09:16:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*0a27fe50-2067-46de-b3fa-ed8ef87a2c2d,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-workflow5xrqt/series-workflow5xrqt-convert-artifact-3524226442/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "f0e0aa09-61d0-468e-abcd-ca8a677cb041", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5xrqt/series-workflow5xrqt-build-action-3712920494/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5xrqt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_aia_set_csr","kvm_riscv_vcpu_general_set_csr","kvm_riscv_vcpu_set_interrupt","kvm_riscv_vcpu_unset_interrupt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"25fe3c7d-088d-4bfc-97db-5caf3a57fb98","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-13 08:21:04 +0000 UTC FinishedAt: 2026-07-13 09:15:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*0a27fe50-2067-46de-b3fa-ed8ef87a2c2d,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-workflow5xrqt/series-workflow5xrqt-convert-artifact-3524226442/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "f0e0aa09-61d0-468e-abcd-ca8a677cb041", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5xrqt/series-workflow5xrqt-build-action-3712920494/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5xrqt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_aia_set_csr","kvm_riscv_vcpu_general_set_csr","kvm_riscv_vcpu_set_interrupt","kvm_riscv_vcpu_unset_interrupt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"25fe3c7d-088d-4bfc-97db-5caf3a57fb98","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-13 09:16:03 +0000 UTC FinishedAt: 2026-07-13 09:16:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xrqt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_aia_set_csr","kvm_riscv_vcpu_general_set_csr","kvm_riscv_vcpu_set_interrupt","kvm_riscv_vcpu_unset_interrupt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"25fe3c7d-088d-4bfc-97db-5caf3a57fb98","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-13 09:16:03 +0000 UTC FinishedAt: 2026-07-13 09:16:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xrqt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_aia_set_csr","kvm_riscv_vcpu_general_set_csr","kvm_riscv_vcpu_set_interrupt","kvm_riscv_vcpu_unset_interrupt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"25fe3c7d-088d-4bfc-97db-5caf3a57fb98","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-13 09:16:03 +0000 UTC FinishedAt: 2026-07-13 09:18:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xrqt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_aia_set_csr","kvm_riscv_vcpu_general_set_csr","kvm_riscv_vcpu_set_interrupt","kvm_riscv_vcpu_unset_interrupt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"25fe3c7d-088d-4bfc-97db-5caf3a57fb98","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-13 09:16:03 +0000 UTC FinishedAt: 2026-07-13 09:18:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f0e0aa09-61d0-468e-abcd-ca8a677cb041,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5xrqt/series-workflow5xrqt-build-action-3712920494/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5xrqt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_aia_set_csr","kvm_riscv_vcpu_general_set_csr","kvm_riscv_vcpu_set_interrupt","kvm_riscv_vcpu_unset_interrupt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"25fe3c7d-088d-4bfc-97db-5caf3a57fb98","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-13 09:18:22 +0000 UTC FinishedAt: 2026-07-13 09:22:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xrqt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_aia_set_csr","kvm_riscv_vcpu_general_set_csr","kvm_riscv_vcpu_set_interrupt","kvm_riscv_vcpu_unset_interrupt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"25fe3c7d-088d-4bfc-97db-5caf3a57fb98","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-13 09:18:22 +0000 UTC FinishedAt: 2026-07-13 09:22:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_aia_set_csr","kvm_riscv_vcpu_general_set_csr","kvm_riscv_vcpu_set_interrupt","kvm_riscv_vcpu_unset_interrupt"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*63b4e7a0-e1da-4fb5-83e5-46ff50057422,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f0e0aa09-61d0-468e-abcd-ca8a677cb041,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5xrqt/series-workflow5xrqt-build-action-1934208193/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5xrqt/series-workflow5xrqt-build-action-3712920494/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow5xrqt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_aia_set_csr","kvm_riscv_vcpu_general_set_csr","kvm_riscv_vcpu_set_interrupt","kvm_riscv_vcpu_unset_interrupt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"25fe3c7d-088d-4bfc-97db-5caf3a57fb98","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-13 09:18:22 +0000 UTC FinishedAt: 2026-07-13 09:18:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xrqt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_aia_set_csr","kvm_riscv_vcpu_general_set_csr","kvm_riscv_vcpu_set_interrupt","kvm_riscv_vcpu_unset_interrupt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"25fe3c7d-088d-4bfc-97db-5caf3a57fb98","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-13 09:18:22 +0000 UTC FinishedAt: 2026-07-13 09:18:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_aia_set_csr","kvm_riscv_vcpu_general_set_csr","kvm_riscv_vcpu_set_interrupt","kvm_riscv_vcpu_unset_interrupt"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5xrqt/series-workflow5xrqt-convert-artifact-3819652639/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5xrqt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_aia_set_csr","kvm_riscv_vcpu_general_set_csr","kvm_riscv_vcpu_set_interrupt","kvm_riscv_vcpu_unset_interrupt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"25fe3c7d-088d-4bfc-97db-5caf3a57fb98","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-13 09:18:22 +0000 UTC FinishedAt: 2026-07-13 09:18:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xrqt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_aia_set_csr","kvm_riscv_vcpu_general_set_csr","kvm_riscv_vcpu_set_interrupt","kvm_riscv_vcpu_unset_interrupt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"25fe3c7d-088d-4bfc-97db-5caf3a57fb98","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-13 09:18:22 +0000 UTC FinishedAt: 2026-07-13 09:18:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xrqt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_aia_set_csr","kvm_riscv_vcpu_general_set_csr","kvm_riscv_vcpu_set_interrupt","kvm_riscv_vcpu_unset_interrupt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"25fe3c7d-088d-4bfc-97db-5caf3a57fb98","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-13 09:18:23 +0000 UTC FinishedAt: 2026-07-13 09:18:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xrqt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_aia_set_csr","kvm_riscv_vcpu_general_set_csr","kvm_riscv_vcpu_set_interrupt","kvm_riscv_vcpu_unset_interrupt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"25fe3c7d-088d-4bfc-97db-5caf3a57fb98","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-13 09:18:52 +0000 UTC FinishedAt: 2026-07-13 09:22:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xrqt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_vcpu_aia_set_csr","kvm_riscv_vcpu_general_set_csr","kvm_riscv_vcpu_set_interrupt","kvm_riscv_vcpu_unset_interrupt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"25fe3c7d-088d-4bfc-97db-5caf3a57fb98","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-13 09:18:52 +0000 UTC FinishedAt: 2026-07-13 09:21:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*63b4e7a0-e1da-4fb5-83e5-46ff50057422,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f0e0aa09-61d0-468e-abcd-ca8a677cb041,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5xrqt/series-workflow5xrqt-build-action-1934208193/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5xrqt/series-workflow5xrqt-build-action-3712920494/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5xrqt/series-workflow5xrqt-convert-artifact-3819652639/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,}