Name: series-workflowqwsk2 Phase: Succeeded StartedAt: 2026-07-12 12:31:30 +0000 UTC FinishedAt: 2026-07-12 17:12:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqwsk2[0] Phase: Succeeded StartedAt: 2026-07-12 12:31:30 +0000 UTC FinishedAt: 2026-07-12 12:56:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqwsk2[0].run-triage Phase: Succeeded StartedAt: 2026-07-12 12:31:30 +0000 UTC FinishedAt: 2026-07-12 12:56:18 +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": "44696aa3a489d2baf58efa61b37833f100072bee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HFSPLUS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "44696aa3a489d2baf58efa61b37833f100072bee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HFSPLUS_FS" ], "series_id": "687cfb4e-23ce-4968-9f74-b5e0990727be" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "__hfs_brec_find", "hfs_brec_find", "hfs_bnode_find", "hfs_brec_lenoff", "hfs_brec_keylen", "hfs_brec_remove" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDEyOjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hGU1BMVVNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2hmc19icmVjX2ZpbmQmIzM0OywKICAgICYjMzQ7aGZzX2JyZWNfZmluZCYjMzQ7LAogICAgJiMzNDtoZnNfYm5vZGVfZmluZCYjMzQ7LAogICAgJiMzNDtoZnNfYnJlY19sZW5vZmYmIzM0OywKICAgICYjMzQ7aGZzX2JyZWNfa2V5bGVuJiMzNDssCiAgICAmIzM0O2hmc19icmVjX3JlbW92ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyBhbmQgdmFsaWRhdGlvbiB0byBIRlMmIzQzOyBiLXRyZWUgbm9kZSBhbmQgcmVjb3JkIGhhbmRsaW5nIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyB3aGVuIGRlYWxpbmcgd2l0aCBjb3JydXB0ZWQgZmlsZXN5c3RlbSBpbWFnZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgSEZTJiM0MzsgZmlsZXN5c3RlbSBkcml2ZXIgdGhhdCBpcyByZWFjaGFibGUgYnkgbW91bnRpbmcgYW5kIGludGVyYWN0aW5nIHdpdGggY3JhZnRlZCBIRlMmIzQzOyBpbWFnZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMTI6NTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmOWVmMzkyMWU3ZTVhNjEzZWM4NzYwYzYxZTViOWM0MmNjYzE4Y2FkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBKdWwgMTIgMTI6NTU6MjggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9iZmluZC5jIGIvZnMvaGZzcGx1cy9iZmluZC5jXG5pbmRleCA5YTU1ZmE2ZDUyOTQyOS4uYTUzOTFmZjA3YzcwZjYgMTAwNjQ0XG4tLS0gYS9mcy9oZnNwbHVzL2JmaW5kLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2hmc3BsdXMvYmZpbmQuY1xuQEAgLTE4LDYgJiM0MzsxOCw3IEBAIGludCBoZnNfZmluZF9pbml0KHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUsIHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZClcbiBcbiBcdGZkLVx1MDAzZXRyZWUgPSB0cmVlO1xuIFx0ZmQtXHUwMDNlYm5vZGUgPSBOVUxMO1xuJiM0MztcdGhmc19maW5kX3Jlc2V0KGZkKTtcbiBcdHB0ciA9IGt6YWxsb2ModHJlZS1cdTAwM2VtYXhfa2V5X2xlbiAqIDIgJiM0MzsgNCwgR0ZQX0tFUk5FTCk7XG4gXHRpZiAoIXB0cilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG5AQCAtMTA2LDEyICYjNDM7MTA3LDE0IEBAIGludCBfX2hmc19icmVjX2ZpbmQoc3RydWN0IGhmc19ibm9kZSAqYm5vZGUsIHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCxcbiBcdHUxNiBvZmYsIGxlbiwga2V5bGVuO1xuIFx0aW50IHJlYztcbiBcdGludCBiLCBlO1xuLVx0aW50IHJlcztcbiYjNDM7XHRpbnQgcmVzID0gLUVOT0VOVDtcbiBcbiBcdEJVR19PTighcmVjX2ZvdW5kKTtcbiYjNDM7XHRpZiAoIWhmc19ibm9kZV9udW1fcmVjc192YWxpZChibm9kZSkpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1xuIFx0YiA9IDA7XG4gXHRlID0gYm5vZGUtXHUwMDNlbnVtX3JlY3MgLSAxO1xuLVx0cmVzID0gLUVOT0VOVDtcbiBcdGRvIHtcbiBcdFx0cmVjID0gKGUgJiM0MzsgYikgLyAyO1xuIFx0XHRsZW4gPSBoZnNfYnJlY19sZW5vZmYoYm5vZGUsIHJlYywgXHUwMDI2b2ZmKTtcbkBAIC0xNTgsMTEgJiM0MzsxNjEsNyBAQCBpbnQgaGZzX2JyZWNfZmluZChzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQsIHNlYXJjaF9zdHJhdGVneV90IGRvX2tleV9jb21wYXJlKVxuIFx0X19iZTMyIGRhdGE7XG4gXHRpbnQgaGVpZ2h0LCByZXM7XG4gXG4tXHRmZC1cdTAwM2VyZWNvcmQgPSAtMTtcbi1cdGZkLVx1MDAzZWtleW9mZnNldCA9IC0xO1xuLVx0ZmQtXHUwMDNla2V5bGVuZ3RoID0gLTE7XG4tXHRmZC1cdTAwM2VlbnRyeW9mZnNldCA9IC0xO1xuLVx0ZmQtXHUwMDNlZW50cnlsZW5ndGggPSAtMTtcbiYjNDM7XHRoZnNfZmluZF9yZXNldChmZCk7XG4gXG4gXHR0cmVlID0gZmQtXHUwMDNldHJlZTtcbiBcdGlmIChmZC1cdTAwM2Vibm9kZSlcbmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2Jub2RlLmMgYi9mcy9oZnNwbHVzL2Jub2RlLmNcbmluZGV4IGQwODhmYjdlYjBkZmEzLi5mMTg1YzAxMmQwOTAyNiAxMDA2NDRcbi0tLSBhL2ZzL2hmc3BsdXMvYm5vZGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9ibm9kZS5jXG5AQCAtMzUyLDE1ICYjNDM7MzUyLDIyIEBAIHZvaWQgaGZzX2Jub2RlX2R1bXAoc3RydWN0IGhmc19ibm9kZSAqbm9kZSlcbiBcdHN0cnVjdCBoZnNfYm5vZGVfZGVzYyBkZXNjO1xuIFx0X19iZTMyIGNuaWQ7XG4gXHRpbnQgaSwgb2ZmLCBrZXlfb2ZmO1xuJiM0MztcdHUxNiBudW1fcmVjcztcbiBcbiBcdGhmc19kYmcoXCYjMzQ7bm9kZSAlZFxcblwmIzM0Oywgbm9kZS1cdTAwM2V0aGlzKTtcbiBcdGhmc19ibm9kZV9yZWFkKG5vZGUsIFx1MDAyNmRlc2MsIDAsIHNpemVvZihkZXNjKSk7XG4mIzQzO1x0bnVtX3JlY3MgPSBub2RlLVx1MDAzZW51bV9yZWNzO1xuIFx0aGZzX2RiZyhcJiMzNDtuZXh0ICVkLCBwcmV2ICVkLCB0eXBlICVkLCBoZWlnaHQgJWQsIG51bV9yZWNzICVkXFxuXCYjMzQ7LFxuIFx0XHRiZTMyX3RvX2NwdShkZXNjLm5leHQpLCBiZTMyX3RvX2NwdShkZXNjLnByZXYpLFxuIFx0XHRkZXNjLnR5cGUsIGRlc2MuaGVpZ2h0LCBiZTE2X3RvX2NwdShkZXNjLm51bV9yZWNzKSk7XG4gXG4mIzQzO1x0aWYgKCFoZnNfYm5vZGVfbnVtX3JlY3NfdmFsaWQobm9kZSkpIHtcbiYjNDM7XHRcdGhmc19kYmcoXCYjMzQ7aW52YWxpZCBudW1fcmVjcyAldVxcblwmIzM0OywgbnVtX3JlY3MpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRvZmYgPSBub2RlLVx1MDAzZXRyZWUtXHUwMDNlbm9kZV9zaXplIC0gMjtcbi1cdGZvciAoaSA9IGJlMTZfdG9fY3B1KGRlc2MubnVtX3JlY3MpOyBpIFx1MDAzZT0gMDsgb2ZmIC09IDIsIGktLSkge1xuJiM0MztcdGZvciAoaSA9IG51bV9yZWNzOyBpIFx1MDAzZT0gMDsgb2ZmIC09IDIsIGktLSkge1xuIFx0XHRrZXlfb2ZmID0gaGZzX2Jub2RlX3JlYWRfdTE2KG5vZGUsIG9mZik7XG4gXHRcdGhmc19kYmcoXCYjMzQ7IGtleV9vZmYgJWRcJiMzNDssIGtleV9vZmYpO1xuIFx0XHRpZiAoaSBcdTAwMjZcdTAwMjYgbm9kZS1cdTAwM2V0eXBlID09IEhGU19OT0RFX0lOREVYKSB7XG5AQCAtNTc5LDYgJiM0Mzs1ODYsOSBAQCBzdHJ1Y3QgaGZzX2Jub2RlICpoZnNfYm5vZGVfZmluZChzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlLCB1MzIgbnVtKVxuIFx0XHRnb3RvIG5vZGVfZXJyb3I7XG4gXHR9XG4gXG4mIzQzO1x0aWYgKCFoZnNfYm5vZGVfbnVtX3JlY3NfdmFsaWQobm9kZSkpXG4mIzQzO1x0XHRnb3RvIG5vZGVfZXJyb3I7XG4mIzQzO1xuIFx0cmVjX29mZiA9IHRyZWUtXHUwMDNlbm9kZV9zaXplIC0gMjtcbiBcdG9mZiA9IGhmc19ibm9kZV9yZWFkX3UxNihub2RlLCByZWNfb2ZmKTtcbiBcdGlmIChvZmYgIT0gc2l6ZW9mKHN0cnVjdCBoZnNfYm5vZGVfZGVzYykpXG5AQCAtNTg2LDkgJiM0Mzs1OTYsNyBAQCBzdHJ1Y3QgaGZzX2Jub2RlICpoZnNfYm5vZGVfZmluZChzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlLCB1MzIgbnVtKVxuIFx0Zm9yIChpID0gMTsgaSBcdTAwM2M9IG5vZGUtXHUwMDNlbnVtX3JlY3M7IG9mZiA9IG5leHRfb2ZmLCBpJiM0MzsmIzQzOykge1xuIFx0XHRyZWNfb2ZmIC09IDI7XG4gXHRcdG5leHRfb2ZmID0gaGZzX2Jub2RlX3JlYWRfdTE2KG5vZGUsIHJlY19vZmYpO1xuLVx0XHRpZiAobmV4dF9vZmYgXHUwMDNjPSBvZmYgfHxcbi1cdFx0ICAgIG5leHRfb2ZmIFx1MDAzZSB0cmVlLVx1MDAzZW5vZGVfc2l6ZSB8fFxuLVx0XHQgICAgbmV4dF9vZmYgXHUwMDI2IDEpXG4mIzQzO1x0XHRpZiAoIWhmc19icmVjX3JhbmdlX3ZhbGlkKG5vZGUsIG9mZiwgbmV4dF9vZmYsIHJlY19vZmYpKVxuIFx0XHRcdGdvdG8gbm9kZV9lcnJvcjtcbiBcdFx0ZW50cnlfc2l6ZSA9IG5leHRfb2ZmIC0gb2ZmO1xuIFx0XHRpZiAobm9kZS1cdTAwM2V0eXBlICE9IEhGU19OT0RFX0lOREVYIFx1MDAyNlx1MDAyNlxuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvYnJlYy5jIGIvZnMvaGZzcGx1cy9icmVjLmNcbmluZGV4IGUzZGY4OTI4NDA3OWRiLi4zMTEyYzNiY2Y5Y2Y4ZCAxMDA2NDRcbi0tLSBhL2ZzL2hmc3BsdXMvYnJlYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9oZnNwbHVzL2JyZWMuY1xuQEAgLTIwLDM1ICYjNDM7MjAsNDEgQEAgc3RhdGljIGludCBoZnNfYnRyZWVfaW5jX2hlaWdodChzdHJ1Y3QgaGZzX2J0cmVlICopO1xuIHUxNiBoZnNfYnJlY19sZW5vZmYoc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgdTE2IHJlYywgdTE2ICpvZmYpXG4ge1xuIFx0X19iZTE2IHJldHZhbFsyXTtcbi1cdHUxNiBkYXRhb2ZmO1xuJiM0MztcdHUxNiBkYXRhX29mZjtcbiYjNDM7XHR1MTYgbmV4dF9vZmY7XG4gXG4tXHRkYXRhb2ZmID0gbm9kZS1cdTAwM2V0cmVlLVx1MDAzZW5vZGVfc2l6ZSAtIChyZWMgJiM0MzsgMikgKiAyO1xuLVx0aGZzX2Jub2RlX3JlYWQobm9kZSwgcmV0dmFsLCBkYXRhb2ZmLCA0KTtcbiYjNDM7XHRpZiAoIWhmc19icmVjX3JlY29yZF92YWxpZChub2RlLCByZWMpKSB7XG4mIzQzO1x0XHQqb2ZmID0gMDtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZGF0YV9vZmYgPSBub2RlLVx1MDAzZXRyZWUtXHUwMDNlbm9kZV9zaXplIC0gKHJlYyAmIzQzOyAyKSAqIDI7XG4mIzQzO1x0aGZzX2Jub2RlX3JlYWQobm9kZSwgcmV0dmFsLCBkYXRhX29mZiwgNCk7XG4gXHQqb2ZmID0gYmUxNl90b19jcHUocmV0dmFsWzFdKTtcbi1cdHJldHVybiBiZTE2X3RvX2NwdShyZXR2YWxbMF0pIC0gKm9mZjtcbiYjNDM7XHRuZXh0X29mZiA9IGJlMTZfdG9fY3B1KHJldHZhbFswXSk7XG4mIzQzO1x0aWYgKCFoZnNfYnJlY19yYW5nZV92YWxpZChub2RlLCAqb2ZmLCBuZXh0X29mZiwgZGF0YV9vZmYpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0cmV0dXJuIG5leHRfb2ZmIC0gKm9mZjtcbiB9XG4gXG4gLyogR2V0IHRoZSBsZW5ndGggb2YgdGhlIGtleSBmcm9tIGEga2V5ZWQgcmVjb3JkICovXG4gdTE2IGhmc19icmVjX2tleWxlbihzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCB1MTYgcmVjKVxuIHtcbi1cdHUxNiByZXR2YWwsIHJlY29mZjtcbiYjNDM7XHR1MTYgcmV0dmFsLCByZWNvZmYsIGxlbjtcbiBcbiBcdGlmIChub2RlLVx1MDAzZXR5cGUgIT0gSEZTX05PREVfSU5ERVggXHUwMDI2XHUwMDI2IG5vZGUtXHUwMDNldHlwZSAhPSBIRlNfTk9ERV9MRUFGKVxuIFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRpZiAoIWhmc19icmVjX3JlY29yZF92YWxpZChub2RlLCByZWMpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4gXG4gXHRpZiAoKG5vZGUtXHUwMDNldHlwZSA9PSBIRlNfTk9ERV9JTkRFWCkgXHUwMDI2XHUwMDI2XG4gXHQgICAhKG5vZGUtXHUwMDNldHJlZS1cdTAwM2VhdHRyaWJ1dGVzIFx1MDAyNiBIRlNfVFJFRV9WQVJJRFhLRVlTKSBcdTAwMjZcdTAwMjZcbiBcdCAgIChub2RlLVx1MDAzZXRyZWUtXHUwMDNlY25pZCAhPSBIRlNQTFVTX0FUVFJfQ05JRCkpIHtcbiBcdFx0cmV0dmFsID0gbm9kZS1cdTAwM2V0cmVlLVx1MDAzZW1heF9rZXlfbGVuICYjNDM7IDI7XG4gXHR9IGVsc2Uge1xuLVx0XHRyZWNvZmYgPSBoZnNfYm5vZGVfcmVhZF91MTYobm9kZSxcbi1cdFx0XHRub2RlLVx1MDAzZXRyZWUtXHUwMDNlbm9kZV9zaXplIC0gKHJlYyAmIzQzOyAxKSAqIDIpO1xuLVx0XHRpZiAoIXJlY29mZilcbi1cdFx0XHRyZXR1cm4gMDtcbi1cdFx0aWYgKHJlY29mZiBcdTAwM2Ugbm9kZS1cdTAwM2V0cmVlLVx1MDAzZW5vZGVfc2l6ZSAtIDIpIHtcbi1cdFx0XHRwcl9lcnIoXCYjMzQ7cmVjb2ZmICVkIHRvbyBsYXJnZVxcblwmIzM0OywgcmVjb2ZmKTtcbiYjNDM7XHRcdGxlbiA9IGhmc19icmVjX2xlbm9mZihub2RlLCByZWMsIFx1MDAyNnJlY29mZik7XG4mIzQzO1x0XHRpZiAobGVuID09IDApXG4gXHRcdFx0cmV0dXJuIDA7XG4tXHRcdH1cbiBcbiBcdFx0cmV0dmFsID0gaGZzX2Jub2RlX3JlYWRfdTE2KG5vZGUsIHJlY29mZikgJiM0MzsgMjtcbiBcdFx0aWYgKHJldHZhbCBcdTAwM2Ugbm9kZS1cdTAwM2V0cmVlLVx1MDAzZW1heF9rZXlfbGVuICYjNDM7IDIpIHtcbkBAIC0xODUsMTAgJiM0MzsxOTEsMTUgQEAgaW50IGhmc19icmVjX3JlbW92ZShzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpXG4gXHR0cmVlID0gZmQtXHUwMDNldHJlZTtcbiBcdG5vZGUgPSBmZC1cdTAwM2Vibm9kZTtcbiBhZ2FpbjpcbiYjNDM7XHRpZiAoIWhmc19icmVjX3JlY29yZF92YWxpZChub2RlLCBmZC1cdTAwM2VyZWNvcmQpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU87XG4mIzQzO1xuIFx0cmVjX29mZiA9IHRyZWUtXHUwMDNlbm9kZV9zaXplIC0gKGZkLVx1MDAzZXJlY29yZCAmIzQzOyAyKSAqIDI7XG4gXHRlbmRfb2ZmID0gdHJlZS1cdTAwM2Vub2RlX3NpemUgLSAobm9kZS1cdTAwM2VudW1fcmVjcyAmIzQzOyAxKSAqIDI7XG4gXG4gXHRpZiAobm9kZS1cdTAwM2V0eXBlID09IEhGU19OT0RFX0xFQUYpIHtcbiYjNDM7XHRcdGlmICh0cmVlLVx1MDAzZWxlYWZfY291bnQgPT0gMClcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU87XG4gXHRcdHRyZWUtXHUwMDNlbGVhZl9jb3VudC0tO1xuIFx0XHRtYXJrX2lub2RlX2RpcnR5KHRyZWUtXHUwMDNlaW5vZGUpO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaGZzcGx1c19mcy5oIGIvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmhcbmluZGV4IGVjMDRiODJhZDkyNzg3Li5kODdkNTVhMzVkMjU4YiAxMDA2NDRcbi0tLSBhL2ZzL2hmc3BsdXMvaGZzcGx1c19mcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaFxuQEAgLTU4Nyw2ICYjNDM7NTg3LDc4IEBAIGJvb2wgaXNfYm5vZGVfb2Zmc2V0X3ZhbGlkKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsIHUzMiBvZmYpXG4gXHRyZXR1cm4gaXNfdmFsaWQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lXG4mIzQzO2Jvb2wgaGZzX2Jub2RlX251bV9yZWNzX3ZhbGlkKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUpXG4mIzQzO3tcbiYjNDM7XHR1MzIgbm9kZV9zaXplO1xuJiM0MztcdHUzMiB0YWJsZV9zaXplO1xuJiM0MztcdHUzMiBhcmVhX3NpemU7XG4mIzQzO1x0dTMyIHJlY19zaXplID0gc2l6ZW9mKF9fYmUxNik7XG4mIzQzO1x0dTMyIGRlc2Nfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaGZzX2Jub2RlX2Rlc2MpO1xuJiM0MztcbiYjNDM7XHRpZiAoIW5vZGUgfHwgIW5vZGUtXHUwMDNldHJlZSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0bm9kZV9zaXplID0gbm9kZS1cdTAwM2V0cmVlLVx1MDAzZW5vZGVfc2l6ZTtcbiYjNDM7XHRpZiAobm9kZV9zaXplIFx1MDAzYyBkZXNjX3NpemUpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGFyZWFfc2l6ZSA9IG5vZGVfc2l6ZSAtIGRlc2Nfc2l6ZTtcbiYjNDM7XHR0YWJsZV9zaXplID0gKCh1MzIpbm9kZS1cdTAwM2VudW1fcmVjcyAmIzQzOyAxKSAqIHJlY19zaXplO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gdGFibGVfc2l6ZSBcdTAwM2M9IGFyZWFfc2l6ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZVxuJiM0Mztib29sIGhmc19icmVjX3JlY29yZF92YWxpZChzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCBpbnQgcmVjb3JkKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFoZnNfYm5vZGVfbnVtX3JlY3NfdmFsaWQobm9kZSkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0aWYgKHJlY29yZCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJlY29yZCBcdTAwM2Mgbm9kZS1cdTAwM2VudW1fcmVjcztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZVxuJiM0Mztib29sIGhmc19icmVjX3JhbmdlX3ZhbGlkKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsIHUxNiBvZmYsIHUxNiBuZXh0X29mZixcbiYjNDM7XHRcdFx0ICB1MTYgcmVjX29mZilcbiYjNDM7e1xuJiM0MztcdHUzMiB0YWJsZV9zaXplO1xuJiM0MztcdHUzMiB0YWJsZV9zdGFydDtcbiYjNDM7XHR1MzIgcmVjX3NpemUgPSBzaXplb2YoX19iZTE2KTtcbiYjNDM7XHR1MzIgZGVzY19zaXplID0gc2l6ZW9mKHN0cnVjdCBoZnNfYm5vZGVfZGVzYyk7XG4mIzQzO1xuJiM0MztcdGlmICghbm9kZSB8fCAhbm9kZS1cdTAwM2V0cmVlKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRpZiAob2ZmIFx1MDAzYyBkZXNjX3NpemUgfHwgKG9mZiBcdTAwMjYgMSkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmIChuZXh0X29mZiBcdTAwM2M9IG9mZiB8fFxuJiM0MztcdFx0bmV4dF9vZmYgXHUwMDNlIG5vZGUtXHUwMDNldHJlZS1cdTAwM2Vub2RlX3NpemUgfHxcbiYjNDM7XHRcdG5leHRfb2ZmIFx1MDAzZSByZWNfb2ZmIHx8XG4mIzQzO1x0XHQobmV4dF9vZmYgXHUwMDI2IDEpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHR0YWJsZV9zaXplID0gKCh1MzIpbm9kZS1cdTAwM2VudW1fcmVjcyAmIzQzOyAxKSAqIHJlY19zaXplO1xuJiM0MztcdHRhYmxlX3N0YXJ0ID0gbm9kZS1cdTAwM2V0cmVlLVx1MDAzZW5vZGVfc2l6ZSAtIHRhYmxlX3NpemU7XG4mIzQzO1x0aWYgKG5leHRfb2ZmIFx1MDAzZSB0YWJsZV9zdGFydClcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmVcbiYjNDM7dm9pZCBoZnNfZmluZF9yZXNldChzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpXG4mIzQzO3tcbiYjNDM7XHRmZC1cdTAwM2VyZWNvcmQgPSAtMTtcbiYjNDM7XHRmZC1cdTAwM2VrZXlvZmZzZXQgPSAtMTtcbiYjNDM7XHRmZC1cdTAwM2VrZXlsZW5ndGggPSAtMTtcbiYjNDM7XHRmZC1cdTAwM2VlbnRyeW9mZnNldCA9IC0xO1xuJiM0MztcdGZkLVx1MDAzZWVudHJ5bGVuZ3RoID0gLTE7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZVxuIHUzMiBjaGVja19hbmRfY29ycmVjdF9yZXF1ZXN0ZWRfbGVuZ3RoKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsIHUzMiBvZmYsIHUzMiBsZW4pXG4ge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDEyOjU1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hGU1BMVVNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2hmc19icmVjX2ZpbmQmIzM0OywKICAgICYjMzQ7aGZzX2JyZWNfZmluZCYjMzQ7LAogICAgJiMzNDtoZnNfYm5vZGVfZmluZCYjMzQ7LAogICAgJiMzNDtoZnNfYnJlY19sZW5vZmYmIzM0OywKICAgICYjMzQ7aGZzX2JyZWNfa2V5bGVuJiMzNDssCiAgICAmIzM0O2hmc19icmVjX3JlbW92ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyBhbmQgdmFsaWRhdGlvbiB0byBIRlMmIzQzOyBiLXRyZWUgbm9kZSBhbmQgcmVjb3JkIGhhbmRsaW5nIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyB3aGVuIGRlYWxpbmcgd2l0aCBjb3JydXB0ZWQgZmlsZXN5c3RlbSBpbWFnZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgSEZTJiM0MzsgZmlsZXN5c3RlbSBkcml2ZXIgdGhhdCBpcyByZWFjaGFibGUgYnkgbW91bnRpbmcgYW5kIGludGVyYWN0aW5nIHdpdGggY3JhZnRlZCBIRlMmIzQzOyBpbWFnZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY5ZWYzOTIxZTdlNWE2MTNlYzg3NjBjNjFlNWI5YzQyY2NjMThjYWQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEp1bCAxMiAxMjo1NToyOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvYmZpbmQuYyBiL2ZzL2hmc3BsdXMvYmZpbmQuYwppbmRleCA5YTU1ZmE2ZDUyOTQyOS4uYTUzOTFmZjA3YzcwZjYgMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvYmZpbmQuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9oZnNwbHVzL2JmaW5kLmMKQEAgLTE4LDYgJiM0MzsxOCw3IEBAIGludCBoZnNfZmluZF9pbml0KHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUsIHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCkKIAogCWZkLSZndDt0cmVlID0gdHJlZTsKIAlmZC0mZ3Q7Ym5vZGUgPSBOVUxMOwomIzQzOwloZnNfZmluZF9yZXNldChmZCk7CiAJcHRyID0ga3phbGxvYyh0cmVlLSZndDttYXhfa2V5X2xlbiAqIDIgJiM0MzsgNCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwdHIpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTA2LDEyICYjNDM7MTA3LDE0IEBAIGludCBfX2hmc19icmVjX2ZpbmQoc3RydWN0IGhmc19ibm9kZSAqYm5vZGUsIHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCwKIAl1MTYgb2ZmLCBsZW4sIGtleWxlbjsKIAlpbnQgcmVjOwogCWludCBiLCBlOwotCWludCByZXM7CiYjNDM7CWludCByZXMgPSAtRU5PRU5UOwogCiAJQlVHX09OKCFyZWNfZm91bmQpOwomIzQzOwlpZiAoIWhmc19ibm9kZV9udW1fcmVjc192YWxpZChibm9kZSkpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CiAJYiA9IDA7CiAJZSA9IGJub2RlLSZndDtudW1fcmVjcyAtIDE7Ci0JcmVzID0gLUVOT0VOVDsKIAlkbyB7CiAJCXJlYyA9IChlICYjNDM7IGIpIC8gMjsKIAkJbGVuID0gaGZzX2JyZWNfbGVub2ZmKGJub2RlLCByZWMsICZhbXA7b2ZmKTsKQEAgLTE1OCwxMSAmIzQzOzE2MSw3IEBAIGludCBoZnNfYnJlY19maW5kKHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCwgc2VhcmNoX3N0cmF0ZWd5X3QgZG9fa2V5X2NvbXBhcmUpCiAJX19iZTMyIGRhdGE7CiAJaW50IGhlaWdodCwgcmVzOwogCi0JZmQtJmd0O3JlY29yZCA9IC0xOwotCWZkLSZndDtrZXlvZmZzZXQgPSAtMTsKLQlmZC0mZ3Q7a2V5bGVuZ3RoID0gLTE7Ci0JZmQtJmd0O2VudHJ5b2Zmc2V0ID0gLTE7Ci0JZmQtJmd0O2VudHJ5bGVuZ3RoID0gLTE7CiYjNDM7CWhmc19maW5kX3Jlc2V0KGZkKTsKIAogCXRyZWUgPSBmZC0mZ3Q7dHJlZTsKIAlpZiAoZmQtJmd0O2Jub2RlKQpkaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9ibm9kZS5jIGIvZnMvaGZzcGx1cy9ibm9kZS5jCmluZGV4IGQwODhmYjdlYjBkZmEzLi5mMTg1YzAxMmQwOTAyNiAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy9ibm9kZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2hmc3BsdXMvYm5vZGUuYwpAQCAtMzUyLDE1ICYjNDM7MzUyLDIyIEBAIHZvaWQgaGZzX2Jub2RlX2R1bXAoc3RydWN0IGhmc19ibm9kZSAqbm9kZSkKIAlzdHJ1Y3QgaGZzX2Jub2RlX2Rlc2MgZGVzYzsKIAlfX2JlMzIgY25pZDsKIAlpbnQgaSwgb2ZmLCBrZXlfb2ZmOwomIzQzOwl1MTYgbnVtX3JlY3M7CiAKIAloZnNfZGJnKCYjMzQ7bm9kZSAlZFxuJiMzNDssIG5vZGUtJmd0O3RoaXMpOwogCWhmc19ibm9kZV9yZWFkKG5vZGUsICZhbXA7ZGVzYywgMCwgc2l6ZW9mKGRlc2MpKTsKJiM0MzsJbnVtX3JlY3MgPSBub2RlLSZndDtudW1fcmVjczsKIAloZnNfZGJnKCYjMzQ7bmV4dCAlZCwgcHJldiAlZCwgdHlwZSAlZCwgaGVpZ2h0ICVkLCBudW1fcmVjcyAlZFxuJiMzNDssCiAJCWJlMzJfdG9fY3B1KGRlc2MubmV4dCksIGJlMzJfdG9fY3B1KGRlc2MucHJldiksCiAJCWRlc2MudHlwZSwgZGVzYy5oZWlnaHQsIGJlMTZfdG9fY3B1KGRlc2MubnVtX3JlY3MpKTsKIAomIzQzOwlpZiAoIWhmc19ibm9kZV9udW1fcmVjc192YWxpZChub2RlKSkgewomIzQzOwkJaGZzX2RiZygmIzM0O2ludmFsaWQgbnVtX3JlY3MgJXVcbiYjMzQ7LCBudW1fcmVjcyk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKIAlvZmYgPSBub2RlLSZndDt0cmVlLSZndDtub2RlX3NpemUgLSAyOwotCWZvciAoaSA9IGJlMTZfdG9fY3B1KGRlc2MubnVtX3JlY3MpOyBpICZndDs9IDA7IG9mZiAtPSAyLCBpLS0pIHsKJiM0MzsJZm9yIChpID0gbnVtX3JlY3M7IGkgJmd0Oz0gMDsgb2ZmIC09IDIsIGktLSkgewogCQlrZXlfb2ZmID0gaGZzX2Jub2RlX3JlYWRfdTE2KG5vZGUsIG9mZik7CiAJCWhmc19kYmcoJiMzNDsga2V5X29mZiAlZCYjMzQ7LCBrZXlfb2ZmKTsKIAkJaWYgKGkgJmFtcDsmYW1wOyBub2RlLSZndDt0eXBlID09IEhGU19OT0RFX0lOREVYKSB7CkBAIC01NzksNiAmIzQzOzU4Niw5IEBAIHN0cnVjdCBoZnNfYm5vZGUgKmhmc19ibm9kZV9maW5kKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUsIHUzMiBudW0pCiAJCWdvdG8gbm9kZV9lcnJvcjsKIAl9CiAKJiM0MzsJaWYgKCFoZnNfYm5vZGVfbnVtX3JlY3NfdmFsaWQobm9kZSkpCiYjNDM7CQlnb3RvIG5vZGVfZXJyb3I7CiYjNDM7CiAJcmVjX29mZiA9IHRyZWUtJmd0O25vZGVfc2l6ZSAtIDI7CiAJb2ZmID0gaGZzX2Jub2RlX3JlYWRfdTE2KG5vZGUsIHJlY19vZmYpOwogCWlmIChvZmYgIT0gc2l6ZW9mKHN0cnVjdCBoZnNfYm5vZGVfZGVzYykpCkBAIC01ODYsOSAmIzQzOzU5Niw3IEBAIHN0cnVjdCBoZnNfYm5vZGUgKmhmc19ibm9kZV9maW5kKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUsIHUzMiBudW0pCiAJZm9yIChpID0gMTsgaSAmbHQ7PSBub2RlLSZndDtudW1fcmVjczsgb2ZmID0gbmV4dF9vZmYsIGkmIzQzOyYjNDM7KSB7CiAJCXJlY19vZmYgLT0gMjsKIAkJbmV4dF9vZmYgPSBoZnNfYm5vZGVfcmVhZF91MTYobm9kZSwgcmVjX29mZik7Ci0JCWlmIChuZXh0X29mZiAmbHQ7PSBvZmYgfHwKLQkJICAgIG5leHRfb2ZmICZndDsgdHJlZS0mZ3Q7bm9kZV9zaXplIHx8Ci0JCSAgICBuZXh0X29mZiAmYW1wOyAxKQomIzQzOwkJaWYgKCFoZnNfYnJlY19yYW5nZV92YWxpZChub2RlLCBvZmYsIG5leHRfb2ZmLCByZWNfb2ZmKSkKIAkJCWdvdG8gbm9kZV9lcnJvcjsKIAkJZW50cnlfc2l6ZSA9IG5leHRfb2ZmIC0gb2ZmOwogCQlpZiAobm9kZS0mZ3Q7dHlwZSAhPSBIRlNfTk9ERV9JTkRFWCAmYW1wOyZhbXA7CmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2JyZWMuYyBiL2ZzL2hmc3BsdXMvYnJlYy5jCmluZGV4IGUzZGY4OTI4NDA3OWRiLi4zMTEyYzNiY2Y5Y2Y4ZCAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy9icmVjLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9icmVjLmMKQEAgLTIwLDM1ICYjNDM7MjAsNDEgQEAgc3RhdGljIGludCBoZnNfYnRyZWVfaW5jX2hlaWdodChzdHJ1Y3QgaGZzX2J0cmVlICopOwogdTE2IGhmc19icmVjX2xlbm9mZihzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCB1MTYgcmVjLCB1MTYgKm9mZikKIHsKIAlfX2JlMTYgcmV0dmFsWzJdOwotCXUxNiBkYXRhb2ZmOwomIzQzOwl1MTYgZGF0YV9vZmY7CiYjNDM7CXUxNiBuZXh0X29mZjsKIAotCWRhdGFvZmYgPSBub2RlLSZndDt0cmVlLSZndDtub2RlX3NpemUgLSAocmVjICYjNDM7IDIpICogMjsKLQloZnNfYm5vZGVfcmVhZChub2RlLCByZXR2YWwsIGRhdGFvZmYsIDQpOwomIzQzOwlpZiAoIWhmc19icmVjX3JlY29yZF92YWxpZChub2RlLCByZWMpKSB7CiYjNDM7CQkqb2ZmID0gMDsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CWRhdGFfb2ZmID0gbm9kZS0mZ3Q7dHJlZS0mZ3Q7bm9kZV9zaXplIC0gKHJlYyAmIzQzOyAyKSAqIDI7CiYjNDM7CWhmc19ibm9kZV9yZWFkKG5vZGUsIHJldHZhbCwgZGF0YV9vZmYsIDQpOwogCSpvZmYgPSBiZTE2X3RvX2NwdShyZXR2YWxbMV0pOwotCXJldHVybiBiZTE2X3RvX2NwdShyZXR2YWxbMF0pIC0gKm9mZjsKJiM0MzsJbmV4dF9vZmYgPSBiZTE2X3RvX2NwdShyZXR2YWxbMF0pOwomIzQzOwlpZiAoIWhmc19icmVjX3JhbmdlX3ZhbGlkKG5vZGUsICpvZmYsIG5leHRfb2ZmLCBkYXRhX29mZikpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIG5leHRfb2ZmIC0gKm9mZjsKIH0KIAogLyogR2V0IHRoZSBsZW5ndGggb2YgdGhlIGtleSBmcm9tIGEga2V5ZWQgcmVjb3JkICovCiB1MTYgaGZzX2JyZWNfa2V5bGVuKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsIHUxNiByZWMpCiB7Ci0JdTE2IHJldHZhbCwgcmVjb2ZmOwomIzQzOwl1MTYgcmV0dmFsLCByZWNvZmYsIGxlbjsKIAogCWlmIChub2RlLSZndDt0eXBlICE9IEhGU19OT0RFX0lOREVYICZhbXA7JmFtcDsgbm9kZS0mZ3Q7dHlwZSAhPSBIRlNfTk9ERV9MRUFGKQogCQlyZXR1cm4gMDsKJiM0MzsJaWYgKCFoZnNfYnJlY19yZWNvcmRfdmFsaWQobm9kZSwgcmVjKSkKJiM0MzsJCXJldHVybiAwOwogCiAJaWYgKChub2RlLSZndDt0eXBlID09IEhGU19OT0RFX0lOREVYKSAmYW1wOyZhbXA7CiAJICAgIShub2RlLSZndDt0cmVlLSZndDthdHRyaWJ1dGVzICZhbXA7IEhGU19UUkVFX1ZBUklEWEtFWVMpICZhbXA7JmFtcDsKIAkgICAobm9kZS0mZ3Q7dHJlZS0mZ3Q7Y25pZCAhPSBIRlNQTFVTX0FUVFJfQ05JRCkpIHsKIAkJcmV0dmFsID0gbm9kZS0mZ3Q7dHJlZS0mZ3Q7bWF4X2tleV9sZW4gJiM0MzsgMjsKIAl9IGVsc2UgewotCQlyZWNvZmYgPSBoZnNfYm5vZGVfcmVhZF91MTYobm9kZSwKLQkJCW5vZGUtJmd0O3RyZWUtJmd0O25vZGVfc2l6ZSAtIChyZWMgJiM0MzsgMSkgKiAyKTsKLQkJaWYgKCFyZWNvZmYpCi0JCQlyZXR1cm4gMDsKLQkJaWYgKHJlY29mZiAmZ3Q7IG5vZGUtJmd0O3RyZWUtJmd0O25vZGVfc2l6ZSAtIDIpIHsKLQkJCXByX2VycigmIzM0O3JlY29mZiAlZCB0b28gbGFyZ2VcbiYjMzQ7LCByZWNvZmYpOwomIzQzOwkJbGVuID0gaGZzX2JyZWNfbGVub2ZmKG5vZGUsIHJlYywgJmFtcDtyZWNvZmYpOwomIzQzOwkJaWYgKGxlbiA9PSAwKQogCQkJcmV0dXJuIDA7Ci0JCX0KIAogCQlyZXR2YWwgPSBoZnNfYm5vZGVfcmVhZF91MTYobm9kZSwgcmVjb2ZmKSAmIzQzOyAyOwogCQlpZiAocmV0dmFsICZndDsgbm9kZS0mZ3Q7dHJlZS0mZ3Q7bWF4X2tleV9sZW4gJiM0MzsgMikgewpAQCAtMTg1LDEwICYjNDM7MTkxLDE1IEBAIGludCBoZnNfYnJlY19yZW1vdmUoc3RydWN0IGhmc19maW5kX2RhdGEgKmZkKQogCXRyZWUgPSBmZC0mZ3Q7dHJlZTsKIAlub2RlID0gZmQtJmd0O2Jub2RlOwogYWdhaW46CiYjNDM7CWlmICghaGZzX2JyZWNfcmVjb3JkX3ZhbGlkKG5vZGUsIGZkLSZndDtyZWNvcmQpKQomIzQzOwkJcmV0dXJuIC1FSU87CiYjNDM7CiAJcmVjX29mZiA9IHRyZWUtJmd0O25vZGVfc2l6ZSAtIChmZC0mZ3Q7cmVjb3JkICYjNDM7IDIpICogMjsKIAllbmRfb2ZmID0gdHJlZS0mZ3Q7bm9kZV9zaXplIC0gKG5vZGUtJmd0O251bV9yZWNzICYjNDM7IDEpICogMjsKIAogCWlmIChub2RlLSZndDt0eXBlID09IEhGU19OT0RFX0xFQUYpIHsKJiM0MzsJCWlmICh0cmVlLSZndDtsZWFmX2NvdW50ID09IDApCiYjNDM7CQkJcmV0dXJuIC1FSU87CiAJCXRyZWUtJmd0O2xlYWZfY291bnQtLTsKIAkJbWFya19pbm9kZV9kaXJ0eSh0cmVlLSZndDtpbm9kZSk7CiAJfQpkaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmggYi9mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaAppbmRleCBlYzA0YjgyYWQ5Mjc4Ny4uZDg3ZDU1YTM1ZDI1OGIgMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvaGZzcGx1c19mcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2hmc3BsdXMvaGZzcGx1c19mcy5oCkBAIC01ODcsNiAmIzQzOzU4Nyw3OCBAQCBib29sIGlzX2Jub2RlX29mZnNldF92YWxpZChzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCB1MzIgb2ZmKQogCXJldHVybiBpc192YWxpZDsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUKJiM0Mztib29sIGhmc19ibm9kZV9udW1fcmVjc192YWxpZChzdHJ1Y3QgaGZzX2Jub2RlICpub2RlKQomIzQzO3sKJiM0MzsJdTMyIG5vZGVfc2l6ZTsKJiM0MzsJdTMyIHRhYmxlX3NpemU7CiYjNDM7CXUzMiBhcmVhX3NpemU7CiYjNDM7CXUzMiByZWNfc2l6ZSA9IHNpemVvZihfX2JlMTYpOwomIzQzOwl1MzIgZGVzY19zaXplID0gc2l6ZW9mKHN0cnVjdCBoZnNfYm5vZGVfZGVzYyk7CiYjNDM7CiYjNDM7CWlmICghbm9kZSB8fCAhbm9kZS0mZ3Q7dHJlZSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJbm9kZV9zaXplID0gbm9kZS0mZ3Q7dHJlZS0mZ3Q7bm9kZV9zaXplOwomIzQzOwlpZiAobm9kZV9zaXplICZsdDsgZGVzY19zaXplKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlhcmVhX3NpemUgPSBub2RlX3NpemUgLSBkZXNjX3NpemU7CiYjNDM7CXRhYmxlX3NpemUgPSAoKHUzMilub2RlLSZndDtudW1fcmVjcyAmIzQzOyAxKSAqIHJlY19zaXplOwomIzQzOwomIzQzOwlyZXR1cm4gdGFibGVfc2l6ZSAmbHQ7PSBhcmVhX3NpemU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUKJiM0Mztib29sIGhmc19icmVjX3JlY29yZF92YWxpZChzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCBpbnQgcmVjb3JkKQomIzQzO3sKJiM0MzsJaWYgKCFoZnNfYm5vZGVfbnVtX3JlY3NfdmFsaWQobm9kZSkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CWlmIChyZWNvcmQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlyZXR1cm4gcmVjb3JkICZsdDsgbm9kZS0mZ3Q7bnVtX3JlY3M7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUKJiM0Mztib29sIGhmc19icmVjX3JhbmdlX3ZhbGlkKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsIHUxNiBvZmYsIHUxNiBuZXh0X29mZiwKJiM0MzsJCQkgIHUxNiByZWNfb2ZmKQomIzQzO3sKJiM0MzsJdTMyIHRhYmxlX3NpemU7CiYjNDM7CXUzMiB0YWJsZV9zdGFydDsKJiM0MzsJdTMyIHJlY19zaXplID0gc2l6ZW9mKF9fYmUxNik7CiYjNDM7CXUzMiBkZXNjX3NpemUgPSBzaXplb2Yoc3RydWN0IGhmc19ibm9kZV9kZXNjKTsKJiM0MzsKJiM0MzsJaWYgKCFub2RlIHx8ICFub2RlLSZndDt0cmVlKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAob2ZmICZsdDsgZGVzY19zaXplIHx8IChvZmYgJmFtcDsgMSkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlmIChuZXh0X29mZiAmbHQ7PSBvZmYgfHwKJiM0MzsJCW5leHRfb2ZmICZndDsgbm9kZS0mZ3Q7dHJlZS0mZ3Q7bm9kZV9zaXplIHx8CiYjNDM7CQluZXh0X29mZiAmZ3Q7IHJlY19vZmYgfHwKJiM0MzsJCShuZXh0X29mZiAmYW1wOyAxKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJdGFibGVfc2l6ZSA9ICgodTMyKW5vZGUtJmd0O251bV9yZWNzICYjNDM7IDEpICogcmVjX3NpemU7CiYjNDM7CXRhYmxlX3N0YXJ0ID0gbm9kZS0mZ3Q7dHJlZS0mZ3Q7bm9kZV9zaXplIC0gdGFibGVfc2l6ZTsKJiM0MzsJaWYgKG5leHRfb2ZmICZndDsgdGFibGVfc3RhcnQpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lCiYjNDM7dm9pZCBoZnNfZmluZF9yZXNldChzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpCiYjNDM7ewomIzQzOwlmZC0mZ3Q7cmVjb3JkID0gLTE7CiYjNDM7CWZkLSZndDtrZXlvZmZzZXQgPSAtMTsKJiM0MzsJZmQtJmd0O2tleWxlbmd0aCA9IC0xOwomIzQzOwlmZC0mZ3Q7ZW50cnlvZmZzZXQgPSAtMTsKJiM0MzsJZmQtJmd0O2VudHJ5bGVuZ3RoID0gLTE7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZQogdTMyIGNoZWNrX2FuZF9jb3JyZWN0X3JlcXVlc3RlZF9sZW5ndGgoc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgdTMyIG9mZiwgdTMyIGxlbikKIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMTI6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk3MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDM2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBIRlMmIzQzOyBWYWxpZGF0aW9uIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyBpbnRyb2R1Y2luZyBzb21lIGNyaXRpY2FsIHZhbGlkYXRpb24gZnVuY3Rpb25zIHRvIHRoZSBIRlMmIzQzOyBiLXRyZWUgaGFuZGxpbmcuIFRoaXMgaXMgcmlnaHQgdXAgbXkgYWxsZXk7IEkmIzM5O3ZlIHNlZW4gZW5vdWdoIG9mIHRoZXNlIGZpbGVzeXN0ZW0gZHJpdmVyIGlzc3VlcyB0byBrbm93IHRoaXMgaXMgYSBnb29kIHRoaW5nLiBUaGV5JiMzOTtyZSB0b3VjaGluZyBgYmZpbmQuY2AsIGBibm9kZS5jYCwgYGJyZWMuY2AsIGFuZCB0aGUgaGVhZGVyIGZpbGUsIHdoaWNoIHRlbGxzIG1lIHRoZXkmIzM5O3JlIGZvY3VzaW5nIG9uIHRoZSBjb3JlIGItdHJlZSBvcGVyYXRpb25zLiBUaGUgbmV3IGZ1bmN0aW9ucywgYGhmc19ibm9kZV9udW1fcmVjc192YWxpZCgpYCwgYGhmc19icmVjX3JlY29yZF92YWxpZCgpYCwgYGhmc19icmVjX3JhbmdlX3ZhbGlkKClgLCBhbmQgYGhmc19maW5kX3Jlc2V0KClgLCBhcmUgZ29pbmcgdG8gYmUga2V5IGluIHByZXZlbnRpbmcgdGhvc2UgbmFzdHkgb3V0LW9mLWJvdW5kcyByZWFkcyBhbmQgd3JpdGVzLCBhbmQgb3RoZXIgbWVtb3J5IGNvcnJ1cHRpb24sIHRoYXQgd2UmIzM5O3JlIGFsd2F5cyB3b3JyaWVkIGFib3V0IHdpdGggY29ycnVwdGVkIGZpbGVzeXN0ZW0gaW1hZ2VzLgoKVGhleSYjMzk7cmUgaW50ZWdyYXRpbmcgdGhlc2UgdmFsaWRhdGlvbnMgaW50byBzZXZlcmFsIGNyaXRpY2FsIGFyZWFzOiBgX19oZnNfYnJlY19maW5kYCwgYGhmc19icmVjX2ZpbmRgLCBgaGZzX2Jub2RlX2R1bXBgLCBgaGZzX2Jub2RlX2ZpbmRgLCBgaGZzX2JyZWNfbGVub2ZmYCwgYGhmc19icmVjX2tleWxlbmAsIGFuZCBgaGZzX2JyZWNfcmVtb3ZlYC4gVGhpcyBpcyBhIHByZXR0eSB0aG9yb3VnaCBpbnRlZ3JhdGlvbiwgd2hpY2ggaXMgZXhhY3RseSB3aGF0IEkgbGlrZSB0byBzZWUuIFRoaXMgbG9va3MgbGlrZSBhIHNvbGlkIGZ1bmN0aW9uYWwgY2hhbmdlOyBpdCYjMzk7cyAqZGVmaW5pdGVseSogZ29pbmcgdG8gaW1wcm92ZSB0aGUgcm9idXN0bmVzcyBvZiB0aGUgZHJpdmVyLgoKVGhlIHBhdGNoJiMzOTtzIGFuYWx5c2lzIHRoYXQgdGhlIHBhdGhzIGFyZSByZWFjaGFibGUgYnkgbW91bnRpbmcgYSBjcmFmdGVkIGltYWdlIGlzIHNwb3Qgb24uIFRoYXQgbWFrZXMgaXQgYSBwZXJmZWN0IHRhcmdldCBmb3IgZnV6emluZy4gTm93LCBsZXQmIzM5O3Mgc2VlLCB3aGF0IGRvIEkgbmVlZCB0byB0ZXN0IHRoaXM/IEFoLCB5ZXMsIHRoZSBIRlMmIzQzOyBmaWxlc3lzdGVtIGlzIGVuYWJsZWQgd2l0aCBgQ09ORklHX0hGU1BMVVNfRlNgLiBJJiMzOTtsbCBjb25maXJtIHRoYXQgaW4gYGZzL2hmc3BsdXMvS2NvbmZpZ2AganVzdCB0byBiZSBjb21wbGV0ZWx5IHN1cmUsIGJ1dCBpdCBsb29rcyBsaWtlIGEgZ29vZCBzdGFydCBmb3IgZ2V0dGluZyB0aGlzIHRoaW5nIHRlc3RlZC4gVGltZSB0byBzdGFydCBjcmFmdGluZyBzb21lIGZ1enppbmcgaGFybmVzc2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDEyOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBIRlNQTFVTX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaGZzcGx1cy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2hmc3BsdXMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvaGZzcGx1cy9LY29uZmlnOjI6Y29uZmlnIEhGU1BMVVNfRlNcbmZzL2hmc3BsdXMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7QXBwbGUgRXh0ZW5kZWQgSEZTIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAxMjo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODcwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzIFN5bWJvbCBDYW5kaWRhdGUgU2VsZWN0aW9uIGZvciBIRlMmIzQzOyoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgZm9jdXNpbmcgb24gSEZTJiM0MzssIGFuZCB0aGUgY29uZmlnIHdlJiMzOTtyZSB1c2luZyBpcyBgSEZTUExVU19GU2AuIEdvdCBpdC4gTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBmb2N1cyBzeW1ib2xzLiBJJiMzOTt2ZSBpZGVudGlmaWVkIGEgbGlzdCBvZiBtb2RpZmllZCBmdW5jdGlvbnMsIGFuZCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZXkmIzM5O3JlIHJlbGV2YW50IGZvciBvdXIgcHVycG9zZXM6CgoqICAgYF9faGZzX2JyZWNfZmluZGAKKiAgIGBoZnNfYnJlY19maW5kYAoqICAgYGhmc19ibm9kZV9kdW1wYAoqICAgYGhmc19ibm9kZV9maW5kYAoqICAgYGhmc19icmVjX2xlbm9mZmAKKiAgIGBoZnNfYnJlY19rZXlsZW5gCiogICBgaGZzX2JyZWNfcmVtb3ZlYAoKTXkgbmV4dCBzdGVwIGlzIHRvIGV2YWx1YXRlIGlmIHRoZXNlIGZ1bmN0aW9ucyByZXByZXNlbnQgaG90LXBhdGggb3BlcmF0aW9ucyB3aXRoaW4gdGhlIGtlcm5lbC4gQmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZywgYGhmc19icmVjX2ZpbmRgLCBgX19oZnNfYnJlY19maW5kYCwgYGhmc19ibm9kZV9maW5kYCwgYGhmc19icmVjX2xlbm9mZmAsIGBoZnNfYnJlY19rZXlsZW5gLCBhbmQgYGhmc19icmVjX3JlbW92ZWAgYXJlIGludGVncmFsIHRvIHRoZSBIRlMmIzQzOyBiLXRyZWUgaW1wbGVtZW50YXRpb24uIFRoYXQgbWVhbnMgdGhleSBhcmUgY2FsbGVkIHdoZW4gZGVhbGluZyB3aXRoIGZpbGUgbG9va3VwcywgcmVhZHMsIGFuZCB3cml0ZXMsIGFtb25nc3Qgb3RoZXIgdGhpbmdzLiBXaGlsZSB0aGV5JiMzOTtyZSBwcm9iYWJseSBoaXQgZnJlcXVlbnRseSBkdXJpbmcgSEZTJiM0Mzsgb3BlcmF0aW9ucywgdGhleSYjMzk7cmUgc3BlY2lmaWMgdG8gSEZTJiM0MzsgYW5kIG5vdCBnZW5lcmljIGtlcm5lbCBob3QtcGF0aHMgbGlrZSBga21hbGxvY2Agb3IgYHNjaGVkdWxlYC4gVGhlcmVmb3JlLCB0aGV5JiMzOTtyZSBnb29kIGNhbmRpZGF0ZXMgZm9yIGBGb2N1c1N5bWJvbHNgLgoKU28gdGhlIGluaXRpYWwgbGlzdCBvZiBmb2N1cyBzeW1ib2xzIGlzOgoKKiAgIGBfX2hmc19icmVjX2ZpbmRgCiogICBgaGZzX2JyZWNfZmluZGAKKiAgIGBoZnNfYm5vZGVfZHVtcGAKKiAgIGBoZnNfYm5vZGVfZmluZGAKKiAgIGBoZnNfYnJlY19sZW5vZmZgCiogICBgaGZzX2JyZWNfa2V5bGVuYAoqICAgYGhmc19icmVjX3JlbW92ZWAKCkhvbGQgb24gYSBzZWNvbmQuIGBoZnNfYm5vZGVfZHVtcGAuLi4gdGhhdCBzb3VuZHMgc3VzcGljaW91c2x5IGxpa2UgYSBkZWJ1ZyBmdW5jdGlvbi4gV2UgbmVlZCB0byB2ZXJpZnkgd2hldGhlciBpdCYjMzk7cyBjb21waWxlZCBpbiBieSBkZWZhdWx0IG9yIGlmIGl0IHJlcXVpcmVzIGEgc3BlY2lmaWMgZGVidWcgY29uZmlndXJhdGlvbiBmbGFnLiBXZSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUga2VybmVsIGNvbmZpZyBmb3IgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAxMjo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtoZnNfYm5vZGVfZHVtcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2hmc3BsdXMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2hmc3BsdXMvYm5vZGUuYz0yMzA9dm9pZCBoZnNfYm5vZGVfbW92ZShzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCB1MzIgZHN0LCB1MzIgc3JjLCB1MzIgbGVuKVxuLS1cbmZzL2hmc3BsdXMvYm5vZGUuYy0zNDktXG5mcy9oZnNwbHVzL2Jub2RlLmM6MzUwOnZvaWQgaGZzX2Jub2RlX2R1bXAoc3RydWN0IGhmc19ibm9kZSAqbm9kZSlcbmZzL2hmc3BsdXMvYm5vZGUuYy0zNTEte1xuLS1cbmZzL2hmc3BsdXMvYnJlYy5jPTY5PWludCBoZnNfYnJlY19pbnNlcnQoc3RydWN0IGhmc19maW5kX2RhdGEgKmZkLCB2b2lkICplbnRyeSwgdTMyIGVudHJ5X2xlbilcbi0tXG5mcy9oZnNwbHVzL2JyZWMuYy05NS1cdG5vZGUgPSBmZC1cdTAwM2Vibm9kZTtcbmZzL2hmc3BsdXMvYnJlYy5jOjk2Olx0aGZzX2Jub2RlX2R1bXAobm9kZSk7XG5mcy9oZnNwbHVzL2JyZWMuYy05Ny1cdC8qIGdldCBsYXN0IG9mZnNldCAqL1xuLS1cbmZzL2hmc3BsdXMvYnJlYy5jLTEzOS1cdGhmc19ibm9kZV93cml0ZShub2RlLCBlbnRyeSwgZGF0YV9vZmYgJiM0Mzsga2V5X2xlbiwgZW50cnlfbGVuKTtcbmZzL2hmc3BsdXMvYnJlYy5jOjE0MDpcdGhmc19ibm9kZV9kdW1wKG5vZGUpO1xuZnMvaGZzcGx1cy9icmVjLmMtMTQxLVxuLS1cbmZzL2hmc3BsdXMvYnJlYy5jPTE4NT1pbnQgaGZzX2JyZWNfcmVtb3ZlKHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZClcbi0tXG5mcy9oZnNwbHVzL2JyZWMuYy0yMDUtXHR9XG5mcy9oZnNwbHVzL2JyZWMuYzoyMDY6XHRoZnNfYm5vZGVfZHVtcChub2RlKTtcbmZzL2hmc3BsdXMvYnJlYy5jLTIwNy1cdGhmc19kYmcoXCYjMzQ7cmVjICVkLCBsZW4gJWRcXG5cJiMzNDssXG4tLVxuZnMvaGZzcGx1cy9icmVjLmMtMjM5LXNraXA6XG5mcy9oZnNwbHVzL2JyZWMuYzoyNDA6XHRoZnNfYm5vZGVfZHVtcChub2RlKTtcbmZzL2hmc3BsdXMvYnJlYy5jLTI0MS1cdGlmICghZmQtXHUwMDNlcmVjb3JkKVxuLS1cbmZzL2hmc3BsdXMvYnJlYy5jPTI0Nj1zdGF0aWMgc3RydWN0IGhmc19ibm9kZSAqaGZzX2Jub2RlX3NwbGl0KHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZClcbi0tXG5mcy9oZnNwbHVzL2JyZWMuYy0zNjctXG5mcy9oZnNwbHVzL2JyZWMuYzozNjg6XHRoZnNfYm5vZGVfZHVtcChub2RlKTtcbmZzL2hmc3BsdXMvYnJlYy5jOjM2OTpcdGhmc19ibm9kZV9kdW1wKG5ld19ub2RlKTtcbmZzL2hmc3BsdXMvYnJlYy5jLTM3MC1cdGhmc19ibm9kZV9wdXQobm9kZSk7XG4tLVxuZnMvaGZzcGx1cy9icmVjLmM9Mzc1PXN0YXRpYyBpbnQgaGZzX2JyZWNfdXBkYXRlX3BhcmVudChzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpXG4tLVxuZnMvaGZzcGx1cy9icmVjLmMtMzk1LVx0XHRyZXR1cm4gLUVOT0VOVDtcbmZzL2hmc3BsdXMvYnJlYy5jOjM5NjpcdGhmc19ibm9kZV9kdW1wKHBhcmVudCk7XG5mcy9oZnNwbHVzL2JyZWMuYy0zOTctXHRyZWMgPSBmZC1cdTAwM2VyZWNvcmQ7XG4tLVxuZnMvaGZzcGx1cy9icmVjLmMtNDQyLVx0aGZzX2Jub2RlX2NvcHkocGFyZW50LCBmZC1cdTAwM2VrZXlvZmZzZXQsIG5vZGUsIDE0LCBuZXdrZXlsZW4pO1xuZnMvaGZzcGx1cy9icmVjLmM6NDQzOlx0aGZzX2Jub2RlX2R1bXAocGFyZW50KTtcbmZzL2hmc3BsdXMvYnJlYy5jLTQ0NC1cbi0tXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaD0yODA9c3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBoZnNwbHVzX21pbl9pb19zaXplKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgtMzAwLSNkZWZpbmUgaGZzX2Jub2RlX21vdmUgaGZzcGx1c19ibm9kZV9tb3ZlXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaDozMDE6I2RlZmluZSBoZnNfYm5vZGVfZHVtcCBoZnNwbHVzX2Jub2RlX2R1bXBcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oLTMwMi0jZGVmaW5lIGhmc19ibm9kZV91bmxpbmsgaGZzcGx1c19ibm9kZV91bmxpbmtcbi0tXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaD0zODA9dm9pZCBoZnNfYm5vZGVfbW92ZShzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCB1MzIgZHN0LCB1MzIgc3JjLCB1MzIgbGVuKTtcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oOjM4MTp2b2lkIGhmc19ibm9kZV9kdW1wKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUpO1xuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgtMzgyLXZvaWQgaGZzX2Jub2RlX3VubGluayhzdHJ1Y3QgaGZzX2Jub2RlICpub2RlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAxMjo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTA1CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgaGZzX2Jub2RlX2R1bXAgRnVuY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGhmc19ibm9kZV9kdW1wYCBmdW5jdGlvbiBpbiB0aGUgSEZTIGNvZGUsIGFuZCBpdCYjMzk7cyBwb3BwaW5nIHVwIGluIGEgZmV3IGtleSBwbGFjZXM6IGBoZnNfYnJlY19pbnNlcnRgLCBgaGZzX2JyZWNfcmVtb3ZlYCwgYGhmc19ibm9kZV9zcGxpdGAsIGFuZCBgaGZzX2JyZWNfdXBkYXRlX3BhcmVudGAuIE15IGZpcnN0IHRob3VnaHQgaXMsIHRoaXMgc21lbGxzIGxpa2UgYSBkZWJ1Z2dpbmcgdG9vbC4gVGhlIHdheSBpdCYjMzk7cyB1c2VkIGluIHRoZXNlIGNvcmUgcmVjb3JkIG1hbmFnZW1lbnQgYW5kIGItdHJlZSBtYW5pcHVsYXRpb24gcm91dGluZXMgaXMgcHJldHR5IHRlbGxpbmcuIEhvd2V2ZXIsIHNvbWV0aGluZyYjMzk7cyBub3QgcXVpdGUgcmlnaHQuIEl0IHNlZW1zIHRvIGJlIHVuY29uZGl0aW9uYWxseSBjb21waWxlZCwgb3IgYXQgbGVhc3QsIHRoYXQmIzM5O3Mgd2hhdCBpdCBpbml0aWFsbHkgbG9va3MgbGlrZS4gSSYjMzk7ZCBiZXR0ZXIgZG91YmxlIGNoZWNrIHRoYXQuIE9oIHdhaXQhIEkgcmVtZW1iZXIuLi4gYGhmc19kYmdgIGlzIGEgbWFjcm8hIEkgbmVlZCB0byBzZWUgd2hhdCB0aGF0IG1hY3JvIGV4cGFuZHMgdG8gdG8gdW5kZXJzdGFuZCBpZiB0aGlzIGlzICphY3R1YWxseSogdW5jb25kaXRpb25hbGx5IGNvbXBpbGVkLCBvciBqdXN0IGNvbmRpdGlvbmFsbHkgdGhyb3VnaCB0aGUgbWFjcm8uIExldCBtZSBnbyBjaGVjay4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDEyOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVmaW5lIGhmc19kYmcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9oZnNwbHVzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMTI6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODI2MAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBIRlMmIzQzOyBEZWJ1Z2dpbmcgTGFuZHNjYXBlKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGN1cnJlbnQgc3RhdGUgb2YgZGVidWdnaW5nIHdpdGhpbiB0aGUgSEZTJiM0MzsgZmlsZXN5c3RlbSBpbXBsZW1lbnRhdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgaGZzX2RiZ2AuIFNlZW1zIGxpa2UgYSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LCBjb25zaWRlcmluZyBpdCYjMzk7cyBwcm9iYWJseSB0aGUgbWFzdGVyIGRlYnVnZ2luZyBmbGFnIG9yIHN0cnVjdHVyZSBmb3IgdGhlIEhGUyYjNDM7IGxheWVyLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gaWYgaXQmIzM5O3MgYSBzaW1wbGUgYm9vbGVhbiwgYSBiaXRtYXNrLCBvciBwZXJoYXBzIGEgbW9yZSBzb3BoaXN0aWNhdGVkIGRhdGEgc3RydWN0dXJlIGhvbGRpbmcgdmFyaW91cyBkZWJ1ZyBsZXZlbHMgb3IgY2F0ZWdvcmllcy4gTG9jYXRpbmcgaXQgd2l0aGluIGBmcy9oZnNwbHVzL2hmc3BsdXNfZnMuaGAgbWFrZXMgcGVyZmVjdCBzZW5zZTsgdGhlIGhlYWRlciBmaWxlIGlzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgZ2xvYmFsIGRlY2xhcmF0aW9ucyBhbmQgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBmb3IgdGhlIGZpbGVzeXN0ZW0gaXRzZWxmLiBGcm9tIHRoZXJlLCBJIGNhbiBhbmFseXplIHRoZSB1c2FnZXMgb2YgdGhhdCBzdHJ1Y3R1cmUgYWNyb3NzIHRoZSBzb3VyY2UgdHJlZSwgb3IgcG90ZW50aWFsbHksIGRlYnVnIG9wdGlvbnMsIGxpa2Uga2VybmVsIHBhcmFtZXRlcnMsIHRoYXQgbWF5IGVmZmVjdCBpdHMgc3RhdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDEyOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGZzX2RiZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2hmc3BsdXMvaGZzcGx1c19mcy5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMTI6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODUzNwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgaGF2aW5nIGl0OgoKKipEaWdnaW5nIGludG8gdGhlIEhGUyYjNDM7IENvZGViYXNlKioKCkFscmlnaHQsIHNvIEkmIzM5O20gdHJ5aW5nIHRvIHBpbnBvaW50IHdoZXJlIHRoaXMgcGFydGljdWxhciBkZWZpbml0aW9uIHJlc2lkZXMuIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCBpdCBtaWdodCBiZSB0dWNrZWQgYXdheSBpbiBgZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmhgLCBidXQgZXhwZXJpZW5jZSB0ZWxscyBtZSBpdCBjb3VsZCBiZSBkZWZpbmVkIHNsaWdodGx5IGRpZmZlcmVudGx5IG9yIGV2ZW4gZGVjbGFyZWQgaW4gYSByZWxhdGVkIGhlYWRlci4gVG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGNhc3QgYSB3aWRlciBuZXQuIEEgZ29vZCBzdGFydGluZyBwb2ludCBpcyB0byBmb2N1cyBteSBzZWFyY2gsIHNvIEkmIzM5O2xsIGdyZXAgZm9yIGBoZnNfZGJnYCB3aXRoaW4gdGhlIGBmcy9oZnNwbHVzL2AgZGlyZWN0b3J5LiBUaGF0IHNob3VsZCBxdWlja2x5IHJldmVhbCB3aGVyZSB0aGlzIHRoaW5nIGlzIGhpZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMTI6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGZzX2RiZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2hmc3BsdXMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2hmc3BsdXMvYXR0cmlidXRlcy5jPTk3PXN0YXRpYyBpbnQgaGZzcGx1c19hdHRyX2J1aWxkX3JlY29yZChoZnNwbHVzX2F0dHJfZW50cnkgKmVudHJ5LCBpbnQgcmVjb3JkX3R5cGUsXG4tLVxuZnMvaGZzcGx1cy9hdHRyaWJ1dGVzLmMtMTIxLVx0XHRlbHNlIHtcbmZzL2hmc3BsdXMvYXR0cmlidXRlcy5jOjEyMjpcdFx0XHRoZnNfZGJnKFwmIzM0O3ZhbHVlIHNpemUgJXp1IGlzIHRvbyBiaWdcXG5cJiMzNDssIHNpemUpO1xuZnMvaGZzcGx1cy9hdHRyaWJ1dGVzLmMtMTIzLVx0XHRcdHJldHVybiBIRlNQTFVTX0lOVkFMSURfQVRUUl9SRUNPUkQ7XG4tLVxuZnMvaGZzcGx1cy9hdHRyaWJ1dGVzLmM9MTQwPWludCBoZnNwbHVzX2ZpbmRfYXR0cihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgY25pZCxcbi0tXG5mcy9oZnNwbHVzL2F0dHJpYnV0ZXMuYy0xNDQtXG5mcy9oZnNwbHVzL2F0dHJpYnV0ZXMuYzoxNDU6XHRoZnNfZGJnKFwmIzM0O25hbWUgJXMsIGNuaWQgJWRcXG5cJiMzNDssIG5hbWUgPyBuYW1lIDogTlVMTCwgY25pZCk7XG5mcy9oZnNwbHVzL2F0dHJpYnV0ZXMuYy0xNDYtXG4tLVxuZnMvaGZzcGx1cy9hdHRyaWJ1dGVzLmM9MTgwPWludCBoZnNwbHVzX2F0dHJfZXhpc3RzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUpXG4tLVxuZnMvaGZzcGx1cy9hdHRyaWJ1dGVzLmMtMTg1LVxuZnMvaGZzcGx1cy9hdHRyaWJ1dGVzLmM6MTg2Olx0aGZzX2RiZyhcJiMzNDtuYW1lICVzLCBpbm8gJWxsdVxcblwmIzM0OyxcbmZzL2hmc3BsdXMvYXR0cmlidXRlcy5jLTE4Ny1cdFx0bmFtZSA/IG5hbWUgOiBOVUxMLCBpbm9kZS1cdTAwM2VpX2lubyk7XG4tLVxuZnMvaGZzcGx1cy9hdHRyaWJ1dGVzLmM9MjA5PWludCBoZnNwbHVzX2NyZWF0ZV9hdHRyX25vbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLFxuLS1cbmZzL2hmc3BsdXMvYXR0cmlidXRlcy5jLTIxNy1cbmZzL2hmc3BsdXMvYXR0cmlidXRlcy5jOjIxODpcdGhmc19kYmcoXCYjMzQ7bmFtZSAlcywgaW5vICVsbHVcXG5cJiMzNDssXG5mcy9oZnNwbHVzL2F0dHJpYnV0ZXMuYy0yMTktXHRcdG5hbWUgPyBuYW1lIDogTlVMTCwgaW5vZGUtXHUwMDNlaV9pbm8pO1xuLS1cbmZzL2hmc3BsdXMvYXR0cmlidXRlcy5jLTIzOC1cdFx0XHRlcnIgPSAtRUlOVkFMO1xuZnMvaGZzcGx1cy9hdHRyaWJ1dGVzLmM6MjM5Olx0XHRoZnNfZGJnKFwmIzM0O3VuYWJsZSB0byBzdG9yZSB2YWx1ZTogZXJyICVkXFxuXCYjMzQ7LCBlcnIpO1xuZnMvaGZzcGx1cy9hdHRyaWJ1dGVzLmMtMjQwLVx0XHRyZXR1cm4gZXJyO1xuLS1cbmZzL2hmc3BsdXMvYXR0cmlidXRlcy5jLTI1MS1cdGlmIChlcnIpIHtcbmZzL2hmc3BsdXMvYXR0cmlidXRlcy5jOjI1MjpcdFx0aGZzX2RiZyhcJiMzNDt1bmFibGUgdG8gc3RvcmUgdmFsdWU6IGVyciAlZFxcblwmIzM0OywgZXJyKTtcbmZzL2hmc3BsdXMvYXR0cmlidXRlcy5jLTI1My1cdFx0cmV0dXJuIGVycjtcbi0tXG5mcy9oZnNwbHVzL2F0dHJpYnV0ZXMuYz0yNjI9aW50IGhmc3BsdXNfY3JlYXRlX2F0dHIoc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9oZnNwbHVzL2F0dHJpYnV0ZXMuYy0yNzAtXG5mcy9oZnNwbHVzL2F0dHJpYnV0ZXMuYzoyNzE6XHRoZnNfZGJnKFwmIzM0O25hbWUgJXMsIGlubyAlbGx1XFxuXCYjMzQ7LFxuZnMvaGZzcGx1cy9hdHRyaWJ1dGVzLmMtMjcyLVx0XHRuYW1lID8gbmFtZSA6IE5VTEwsIGlub2RlLVx1MDAzZWlfaW5vKTtcbi0tXG5mcy9oZnNwbHVzL2F0dHJpYnV0ZXMuYz0zNTA9aW50IGhmc3BsdXNfZGVsZXRlX2F0dHJfbm9sb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsXG4tLVxuZnMvaGZzcGx1cy9hdHRyaWJ1dGVzLmMtMzU1LVxuZnMvaGZzcGx1cy9hdHRyaWJ1dGVzLmM6MzU2Olx0aGZzX2RiZyhcJiMzNDtuYW1lICVzLCBpbm8gJWxsdVxcblwmIzM0OyxcbmZzL2hmc3BsdXMvYXR0cmlidXRlcy5jLTM1Ny1cdFx0bmFtZSA/IG5hbWUgOiBOVUxMLCBpbm9kZS1cdTAwM2VpX2lubyk7XG4tLVxuZnMvaGZzcGx1cy9hdHRyaWJ1dGVzLmM9MzgzPWludCBoZnNwbHVzX2RlbGV0ZV9hdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUpXG4tLVxuZnMvaGZzcGx1cy9hdHRyaWJ1dGVzLmMtMzg4LVxuZnMvaGZzcGx1cy9hdHRyaWJ1dGVzLmM6Mzg5Olx0aGZzX2RiZyhcJiMzNDtuYW1lICVzLCBpbm8gJWxsdVxcblwmIzM0OyxcbmZzL2hmc3BsdXMvYXR0cmlidXRlcy5jLTM5MC1cdFx0bmFtZSA/IG5hbWUgOiBOVUxMLCBpbm9kZS1cdTAwM2VpX2lubyk7XG4tLVxuZnMvaGZzcGx1cy9hdHRyaWJ1dGVzLmM9NDE1PWludCBoZnNwbHVzX2RlbGV0ZV9hbGxfYXR0cnMoc3RydWN0IGlub2RlICpkaXIsIHUzMiBjbmlkKVxuLS1cbmZzL2hmc3BsdXMvYXR0cmlidXRlcy5jLTQxOS1cbmZzL2hmc3BsdXMvYXR0cmlidXRlcy5jOjQyMDpcdGhmc19kYmcoXCYjMzQ7Y25pZCAlZFxcblwmIzM0OywgY25pZCk7XG5mcy9oZnNwbHVzL2F0dHJpYnV0ZXMuYy00MjEtXG4tLVxuZnMvaGZzcGx1cy9hdHRyaWJ1dGVzLmM9NDU0PWludCBoZnNwbHVzX3JlcGxhY2VfYXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2hmc3BsdXMvYXR0cmlidXRlcy5jLTQ2Mi1cbmZzL2hmc3BsdXMvYXR0cmlidXRlcy5jOjQ2MzpcdGhmc19kYmcoXCYjMzQ7bmFtZSAlcywgaW5vICVsbHVcXG5cJiMzNDssXG5mcy9oZnNwbHVzL2F0dHJpYnV0ZXMuYy00NjQtXHRcdG5hbWUgPyBuYW1lIDogTlVMTCwgaW5vZGUtXHUwMDNlaV9pbm8pO1xuLS1cbmZzL2hmc3BsdXMvYmZpbmQuYz0xNT1pbnQgaGZzX2ZpbmRfaW5pdChzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlLCBzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpXG4tLVxuZnMvaGZzcGx1cy9iZmluZC5jLTI2LVx0ZmQtXHUwMDNla2V5ID0gcHRyICYjNDM7IHRyZWUtXHUwMDNlbWF4X2tleV9sZW4gJiM0MzsgMjtcbmZzL2hmc3BsdXMvYmZpbmQuYzoyNzpcdGhmc19kYmcoXCYjMzQ7Y25pZCAlZCwgY2FsbGVyICVwc1xcblwmIzM0OyxcbmZzL2hmc3BsdXMvYmZpbmQuYy0yOC1cdFx0dHJlZS1cdTAwM2VjbmlkLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpO1xuLS1cbmZzL2hmc3BsdXMvYmZpbmQuYz0zND12b2lkIGhmc19maW5kX2V4aXQoc3RydWN0IGhmc19maW5kX2RhdGEgKmZkKVxuLS1cbmZzL2hmc3BsdXMvYmZpbmQuYy0zNy1cdGtmcmVlKGZkLVx1MDAzZXNlYXJjaF9rZXkpO1xuZnMvaGZzcGx1cy9iZmluZC5jOjM4Olx0aGZzX2RiZyhcJiMzNDtjbmlkICVkLCBjYWxsZXIgJXBzXFxuXCYjMzQ7LFxuZnMvaGZzcGx1cy9iZmluZC5jLTM5LVx0XHRmZC1cdTAwM2V0cmVlLVx1MDAzZWNuaWQsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7XG4tLVxuZnMvaGZzcGx1cy9iaXRtYXAuYz0xOT1pbnQgaGZzcGx1c19ibG9ja19hbGxvY2F0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2l6ZSxcbi0tXG5mcy9oZnNwbHVzL2JpdG1hcC5jLTMzLVxuZnMvaGZzcGx1cy9iaXRtYXAuYzozNDpcdGhmc19kYmcoXCYjMzQ7c2l6ZSAldSwgb2Zmc2V0ICV1LCBsZW4gJXVcXG5cJiMzNDssIHNpemUsIG9mZnNldCwgbGVuKTtcbmZzL2hmc3BsdXMvYml0bWFwLmMtMzUtXHRtdXRleF9sb2NrKFx1MDAyNnNiaS1cdTAwM2VhbGxvY19tdXRleCk7XG4tLVxuZnMvaGZzcGx1cy9iaXRtYXAuYy05Mi1cdH1cbmZzL2hmc3BsdXMvYml0bWFwLmM6OTM6XHRoZnNfZGJnKFwmIzM0O2JpdG1hcCBmdWxsXFxuXCYjMzQ7KTtcbmZzL2hmc3BsdXMvYml0bWFwLmMtOTQtXHRzdGFydCA9IHNpemU7XG4tLVxuZnMvaGZzcGx1cy9iaXRtYXAuYy05OS1cdGlmIChzdGFydCBcdTAwM2U9IHNpemUpIHtcbmZzL2hmc3BsdXMvYml0bWFwLmM6MTAwOlx0XHRoZnNfZGJnKFwmIzM0O2JpdG1hcCBmdWxsXFxuXCYjMzQ7KTtcbmZzL2hmc3BsdXMvYml0bWFwLmMtMTAxLVx0XHRnb3RvIG91dDtcbi0tXG5mcy9oZnNwbHVzL2JpdG1hcC5jLTE1Ny1cdGhmc3BsdXNfbWFya19tZGJfZGlydHkoc2IpO1xuZnMvaGZzcGx1cy9iaXRtYXAuYzoxNTg6XHRoZnNfZGJnKFwmIzM0O3N0YXJ0ICV1LCBtYXggJXVcXG5cJiMzNDssIHN0YXJ0LCAqbWF4KTtcbmZzL2hmc3BsdXMvYml0bWFwLmMtMTU5LW91dDpcbi0tXG5mcy9oZnNwbHVzL2JpdG1hcC5jPTE2ND1pbnQgaGZzcGx1c19ibG9ja19mcmVlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBvZmZzZXQsIHUzMiBjb3VudClcbi0tXG5mcy9oZnNwbHVzL2JpdG1hcC5jLTE3Ni1cbmZzL2hmc3BsdXMvYml0bWFwLmM6MTc3Olx0aGZzX2RiZyhcJiMzNDtvZmZzZXQgJXUsIGNvdW50ICV1XFxuXCYjMzQ7LCBvZmZzZXQsIGNvdW50KTtcbmZzL2hmc3BsdXMvYml0bWFwLmMtMTc4LVx0LyogYXJlIGFsbCBvZiB0aGUgYml0cyBpbiByYW5nZT8gKi9cbi0tXG5mcy9oZnNwbHVzL2Jub2RlLmM9MTcyPXZvaWQgaGZzX2Jub2RlX2NvcHkoc3RydWN0IGhmc19ibm9kZSAqZHN0X25vZGUsIHUzMiBkc3QsXG4tLVxuZnMvaGZzcGx1cy9ibm9kZS5jLTE3Ny1cbmZzL2hmc3BsdXMvYm5vZGUuYzoxNzg6XHRoZnNfZGJnKFwmIzM0O2RzdCAldSwgc3JjICV1LCBsZW4gJXVcXG5cJiMzNDssIGRzdCwgc3JjLCBsZW4pO1xuZnMvaGZzcGx1cy9ibm9kZS5jLTE3OS1cdGlmICghbGVuKVxuLS1cbmZzL2hmc3BsdXMvYm5vZGUuYz0yMzA9dm9pZCBoZnNfYm5vZGVfbW92ZShzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCB1MzIgZHN0LCB1MzIgc3JjLCB1MzIgbGVuKVxuLS1cbmZzL2hmc3BsdXMvYm5vZGUuYy0yMzUtXG5mcy9oZnNwbHVzL2Jub2RlLmM6MjM2Olx0aGZzX2RiZyhcJiMzNDtkc3QgJXUsIHNyYyAldSwgbGVuICV1XFxuXCYjMzQ7LCBkc3QsIHNyYywgbGVuKTtcbmZzL2hmc3BsdXMvYm5vZGUuYy0yMzctXHRpZiAoIWxlbilcbi0tXG5mcy9oZnNwbHVzL2Jub2RlLmM9MzUwPXZvaWQgaGZzX2Jub2RlX2R1bXAoc3RydWN0IGhmc19ibm9kZSAqbm9kZSlcbi0tXG5mcy9oZnNwbHVzL2Jub2RlLmMtMzU2LVxuZnMvaGZzcGx1cy9ibm9kZS5jOjM1NzpcdGhmc19kYmcoXCYjMzQ7bm9kZSAlZFxcblwmIzM0Oywgbm9kZS1cdTAwM2V0aGlzKTtcbmZzL2hmc3BsdXMvYm5vZGUuYy0zNTgtXHRoZnNfYm5vZGVfcmVhZChub2RlLCBcdTAwMjZkZXNjLCAwLCBzaXplb2YoZGVzYykpO1xuZnMvaGZzcGx1cy9ibm9kZS5jLTM1OS1cdG51bV9yZWNzID0gbm9kZS1cdTAwM2VudW1fcmVjcztcbmZzL2hmc3BsdXMvYm5vZGUuYzozNjA6XHRoZnNfZGJnKFwmIzM0O25leHQgJWQsIHByZXYgJWQsIHR5cGUgJWQsIGhlaWdodCAlZCwgbnVtX3JlY3MgJWRcXG5cJiMzNDssXG5mcy9oZnNwbHVzL2Jub2RlLmMtMzYxLVx0XHRiZTMyX3RvX2NwdShkZXNjLm5leHQpLCBiZTMyX3RvX2NwdShkZXNjLnByZXYpLFxuLS1cbmZzL2hmc3BsdXMvYm5vZGUuYy0zNjQtXHRpZiAoIWhmc19ibm9kZV9udW1fcmVjc192YWxpZChub2RlKSkge1xuZnMvaGZzcGx1cy9ibm9kZS5jOjM2NTpcdFx0aGZzX2RiZyhcJiMzNDtpbnZhbGlkIG51bV9yZWNzICV1XFxuXCYjMzQ7LCBudW1fcmVjcyk7XG5mcy9oZnNwbHVzL2Jub2RlLmMtMzY2LVx0XHRyZXR1cm47XG4tLVxuZnMvaGZzcGx1cy9ibm9kZS5jLTM3MS1cdFx0a2V5X29mZiA9IGhmc19ibm9kZV9yZWFkX3UxNihub2RlLCBvZmYpO1xuZnMvaGZzcGx1cy9ibm9kZS5jOjM3MjpcdFx0aGZzX2RiZyhcJiMzNDsga2V5X29mZiAlZFwmIzM0Oywga2V5X29mZik7XG5mcy9oZnNwbHVzL2Jub2RlLmMtMzczLVx0XHRpZiAoaSBcdTAwMjZcdTAwMjYgbm9kZS1cdTAwM2V0eXBlID09IEhGU19OT0RFX0lOREVYKSB7XG4tLVxuZnMvaGZzcGx1cy9ibm9kZS5jLTM4MC1cdFx0XHRcdHRtcCA9IG5vZGUtXHUwMDNldHJlZS1cdTAwM2VtYXhfa2V5X2xlbiAmIzQzOyAyO1xuZnMvaGZzcGx1cy9ibm9kZS5jOjM4MTpcdFx0XHRoZnNfZGJnKFwmIzM0OyAoJWRcJiMzNDssIHRtcCk7XG5mcy9oZnNwbHVzL2Jub2RlLmMtMzgyLVx0XHRcdGhmc19ibm9kZV9yZWFkKG5vZGUsIFx1MDAyNmNuaWQsIGtleV9vZmYgJiM0MzsgdG1wLCA0KTtcbmZzL2hmc3BsdXMvYm5vZGUuYzozODM6XHRcdFx0aGZzX2RiZyhcJiMzNDssIGNuaWQgJWQpXCYjMzQ7LCBiZTMyX3RvX2NwdShjbmlkKSk7XG5mcy9oZnNwbHVzL2Jub2RlLmMtMzg0LVx0XHR9IGVsc2UgaWYgKGkgXHUwMDI2XHUwMDI2IG5vZGUtXHUwMDNldHlwZSA9PSBIRlNfTk9ERV9MRUFGKSB7XG4tLVxuZnMvaGZzcGx1cy9ibm9kZS5jLTM4Ny1cdFx0XHR0bXAgPSBoZnNfYm5vZGVfcmVhZF91MTYobm9kZSwga2V5X29mZik7XG5mcy9oZnNwbHVzL2Jub2RlLmM6Mzg4Olx0XHRcdGhmc19kYmcoXCYjMzQ7ICglZClcJiMzNDssIHRtcCk7XG5mcy9oZnNwbHVzL2Jub2RlLmMtMzg5LVx0XHR9XG5mcy9oZnNwbHVzL2Jub2RlLmMtMzkwLVx0fVxuZnMvaGZzcGx1cy9ibm9kZS5jOjM5MTpcdGhmc19kYmcoXCYjMzQ7XFxuXCYjMzQ7KTtcbmZzL2hmc3BsdXMvYm5vZGUuYy0zOTItfVxuLS1cbmZzL2hmc3BsdXMvYm5vZGUuYz0zOTQ9dm9pZCBoZnNfYm5vZGVfdW5saW5rKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUpXG4tLVxuZnMvaGZzcGx1cy9ibm9kZS5jLTQyNi1cdGlmICghbm9kZS1cdTAwM2VwcmV2IFx1MDAyNlx1MDAyNiAhbm9kZS1cdTAwM2VuZXh0KVxuZnMvaGZzcGx1cy9ibm9kZS5jOjQyNzpcdFx0aGZzX2RiZyhcJiMzNDtidHJlZSBkZWxldGUgbGV2ZWxcXG5cJiMzNDspO1xuZnMvaGZzcGx1cy9ibm9kZS5jLTQyOC1cdGlmICghbm9kZS1cdTAwM2VwYXJlbnQpIHtcbi0tXG5mcy9oZnNwbHVzL2Jub2RlLmM9NDYyPXN0YXRpYyBzdHJ1Y3QgaGZzX2Jub2RlICpfX2hmc19ibm9kZV9jcmVhdGUoc3RydWN0IGhmc19idHJlZSAqdHJlZSwgdTMyIGNuaWQpXG4tLVxuZnMvaGZzcGx1cy9ibm9kZS5jLTQ4Mi1cdGF0b21pY19zZXQoXHUwMDI2bm9kZS1cdTAwM2VyZWZjbnQsIDEpO1xuZnMvaGZzcGx1cy9ibm9kZS5jOjQ4MzpcdGhmc19kYmcoXCYjMzQ7Y25pZCAlZCwgbm9kZSAlZCwgcmVmY250IDFcXG5cJiMzNDssXG5mcy9oZnNwbHVzL2Jub2RlLmMtNDg0LVx0XHRub2RlLVx1MDAzZXRyZWUtXHUwMDNlY25pZCwgbm9kZS1cdTAwM2V0aGlzKTtcbi0tXG5mcy9oZnNwbHVzL2Jub2RlLmM9NTIwPXZvaWQgaGZzX2Jub2RlX3VuaGFzaChzdHJ1Y3QgaGZzX2Jub2RlICpub2RlKVxuLS1cbmZzL2hmc3BsdXMvYm5vZGUuYy01MjMtXG5mcy9oZnNwbHVzL2Jub2RlLmM6NTI0Olx0aGZzX2RiZyhcJiMzNDtjbmlkICVkLCBub2RlICVkLCByZWZjbnQgJWRcXG5cJiMzNDssXG5mcy9oZnNwbHVzL2Jub2RlLmMtNTI1LVx0XHRub2RlLVx1MDAzZXRyZWUtXHUwMDNlY25pZCwgbm9kZS1cdTAwM2V0aGlzLCBhdG9taWNfcmVhZChcdTAwMjZub2RlLVx1MDAzZXJlZmNudCkpO1xuLS1cbmZzL2hmc3BsdXMvYm5vZGUuYz02Njc9dm9pZCBoZnNfYm5vZGVfZ2V0KHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUpXG4tLVxuZnMvaGZzcGx1cy9ibm9kZS5jLTY3MC1cdFx0YXRvbWljX2luYyhcdTAwMjZub2RlLVx1MDAzZXJlZmNudCk7XG5mcy9oZnNwbHVzL2Jub2RlLmM6NjcxOlx0XHRoZnNfZGJnKFwmIzM0O2NuaWQgJWQsIG5vZGUgJWQsIHJlZmNudCAlZFxcblwmIzM0OyxcbmZzL2hmc3BsdXMvYm5vZGUuYy02NzItXHRcdFx0bm9kZS1cdTAwM2V0cmVlLVx1MDAzZWNuaWQsIG5vZGUtXHUwMDNldGhpcyxcbi0tXG5mcy9oZnNwbHVzL2Jub2RlLmM9Njc4PXZvaWQgaGZzX2Jub2RlX3B1dChzdHJ1Y3QgaGZzX2Jub2RlICpub2RlKVxuLS1cbmZzL2hmc3BsdXMvYm5vZGUuYy02ODMtXG5mcy9oZnNwbHVzL2Jub2RlLmM6Njg0Olx0XHRoZnNfZGJnKFwmIzM0O2NuaWQgJWQsIG5vZGUgJWQsIHJlZmNudCAlZFxcblwmIzM0OyxcbmZzL2hmc3BsdXMvYm5vZGUuYy02ODUtXHRcdFx0bm9kZS1cdTAwM2V0cmVlLVx1MDAzZWNuaWQsIG5vZGUtXHUwMDNldGhpcyxcbi0tXG5mcy9oZnNwbHVzL2JyZWMuYz02OT1pbnQgaGZzX2JyZWNfaW5zZXJ0KHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCwgdm9pZCAqZW50cnksIHUzMiBlbnRyeV9sZW4pXG4tLVxuZnMvaGZzcGx1cy9icmVjLmMtMTAwLVx0ZW5kX3JlY19vZmYgLT0gMjtcbmZzL2hmc3BsdXMvYnJlYy5jOjEwMTpcdGhmc19kYmcoXCYjMzQ7cmVjICVkLCBzaXplICVkLCBlbmRfb2ZmICVkLCBlbmRfcmVjX29mZiAlZFxcblwmIzM0OyxcbmZzL2hmc3BsdXMvYnJlYy5jLTEwMi1cdFx0cmVjLCBzaXplLCBlbmRfb2ZmLCBlbmRfcmVjX29mZik7XG4tLVxuZnMvaGZzcGx1cy9icmVjLmM9MTg1PWludCBoZnNfYnJlY19yZW1vdmUoc3RydWN0IGhmc19maW5kX2RhdGEgKmZkKVxuLS1cbmZzL2hmc3BsdXMvYnJlYy5jLTIwNi1cdGhmc19ibm9kZV9kdW1wKG5vZGUpO1xuZnMvaGZzcGx1cy9icmVjLmM6MjA3Olx0aGZzX2RiZyhcJiMzNDtyZWMgJWQsIGxlbiAlZFxcblwmIzM0OyxcbmZzL2hmc3BsdXMvYnJlYy5jLTIwOC1cdFx0ZmQtXHUwMDNlcmVjb3JkLCBmZC1cdTAwM2VrZXlsZW5ndGggJiM0MzsgZmQtXHUwMDNlZW50cnlsZW5ndGgpO1xuLS1cbmZzL2hmc3BsdXMvYnJlYy5jPTI0Nj1zdGF0aWMgc3RydWN0IGhmc19ibm9kZSAqaGZzX2Jub2RlX3NwbGl0KHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZClcbi0tXG5mcy9oZnNwbHVzL2JyZWMuYy0yNjItXHRoZnNfYm5vZGVfZ2V0KG5vZGUpO1xuZnMvaGZzcGx1cy9icmVjLmM6MjYzOlx0aGZzX2RiZyhcJiMzNDt0aGlzICVkIC0gbmV3ICVkIC0gbmV4dCAlZFxcblwmIzM0OyxcbmZzL2hmc3BsdXMvYnJlYy5jLTI2NC1cdFx0bm9kZS1cdTAwM2V0aGlzLCBuZXdfbm9kZS1cdTAwM2V0aGlzLCBub2RlLVx1MDAzZW5leHQpO1xuLS1cbmZzL2hmc3BsdXMvYnJlYy5jPTM3NT1zdGF0aWMgaW50IGhmc19icmVjX3VwZGF0ZV9wYXJlbnQoc3RydWN0IGhmc19maW5kX2RhdGEgKmZkKVxuLS1cbmZzL2hmc3BsdXMvYnJlYy5jLTQwNC1cdFx0ZmQtXHUwMDNla2V5bGVuZ3RoID0gbmV3a2V5bGVuID0gdHJlZS1cdTAwM2VtYXhfa2V5X2xlbiAmIzQzOyAyO1xuZnMvaGZzcGx1cy9icmVjLmM6NDA1Olx0aGZzX2RiZyhcJiMzNDtyZWMgJWQsIGtleWxlbmd0aCAlZCwgbmV3a2V5bGVuICVkXFxuXCYjMzQ7LFxuZnMvaGZzcGx1cy9icmVjLmMtNDA2LVx0XHRyZWMsIGZkLVx1MDAzZWtleWxlbmd0aCwgbmV3a2V5bGVuKTtcbi0tXG5mcy9oZnNwbHVzL2JyZWMuYy00MTYtXG5mcy9oZnNwbHVzL2JyZWMuYzo0MTc6XHRcdFx0aGZzX2RiZyhcJiMzNDtzcGxpdHRpbmcgaW5kZXggbm9kZVxcblwmIzM0Oyk7XG5mcy9oZnNwbHVzL2JyZWMuYy00MTgtXHRcdFx0ZmQtXHUwMDNlYm5vZGUgPSBwYXJlbnQ7XG4tLVxuZnMvaGZzcGx1cy9idHJlZS5jPTUyOD1zdHJ1Y3QgaGZzX2Jub2RlICpoZnNfYm1hcF9hbGxvYyhzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlKVxuLS1cbmZzL2hmc3BsdXMvYnRyZWUuYy01ODgtXHRcdGlmICghbmlkeCkge1xuZnMvaGZzcGx1cy9idHJlZS5jOjU4OTpcdFx0XHRoZnNfZGJnKFwmIzM0O2NyZWF0ZSBuZXcgYm1hcCBub2RlXFxuXCYjMzQ7KTtcbmZzL2hmc3BsdXMvYnRyZWUuYy01OTAtXHRcdFx0bmV4dF9ub2RlID0gaGZzX2JtYXBfbmV3X2JtYXAobm9kZSwgaWR4KTtcbi0tXG5mcy9oZnNwbHVzL2J0cmVlLmM9NjA5PXZvaWQgaGZzX2JtYXBfZnJlZShzdHJ1Y3QgaGZzX2Jub2RlICpub2RlKVxuLS1cbmZzL2hmc3BsdXMvYnRyZWUuYy02MTUtXG5mcy9oZnNwbHVzL2J0cmVlLmM6NjE2Olx0aGZzX2RiZyhcJiMzNDtub2RlICV1XFxuXCYjMzQ7LCBub2RlLVx1MDAzZXRoaXMpO1xuZnMvaGZzcGx1cy9idHJlZS5jLTYxNy1cdEJVR19PTighbm9kZS1cdTAwM2V0aGlzKTtcbi0tXG5mcy9oZnNwbHVzL2NhdGFsb2cuYz0yNTM9aW50IGhmc3BsdXNfY3JlYXRlX2NhdCh1MzIgY25pZCwgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvaGZzcGx1cy9jYXRhbG9nLmMtMjYxLVxuZnMvaGZzcGx1cy9jYXRhbG9nLmM6MjYyOlx0aGZzX2RiZyhcJiMzNDtuYW1lICVzLCBjbmlkICV1LCBpX25saW5rICVkXFxuXCYjMzQ7LFxuZnMvaGZzcGx1cy9jYXRhbG9nLmMtMjYzLVx0XHRzdHItXHUwMDNlbmFtZSwgY25pZCwgaW5vZGUtXHUwMDNlaV9ubGluayk7XG4tLVxuZnMvaGZzcGx1cy9jYXRhbG9nLmM9MzMxPWludCBoZnNwbHVzX2RlbGV0ZV9jYXQodTMyIGNuaWQsIHN0cnVjdCBpbm9kZSAqZGlyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqc3RyKVxuLS1cbmZzL2hmc3BsdXMvY2F0YWxvZy5jLTMzOC1cbmZzL2hmc3BsdXMvY2F0YWxvZy5jOjMzOTpcdGhmc19kYmcoXCYjMzQ7bmFtZSAlcywgY25pZCAldVxcblwmIzM0Oywgc3RyID8gc3RyLVx1MDAzZW5hbWUgOiBOVUxMLCBjbmlkKTtcbmZzL2hmc3BsdXMvY2F0YWxvZy5jLTM0MC1cdGVyciA9IGhmc19maW5kX2luaXQoSEZTUExVU19TQihzYiktXHUwMDNlY2F0X3RyZWUsIFx1MDAyNmZkKTtcbi0tXG5mcy9oZnNwbHVzL2NhdGFsb2cuYz00MjU9aW50IGhmc3BsdXNfcmVuYW1lX2NhdCh1MzIgY25pZCxcbi0tXG5mcy9oZnNwbHVzL2NhdGFsb2cuYy00MzQtXG5mcy9oZnNwbHVzL2NhdGFsb2cuYzo0MzU6XHRoZnNfZGJnKFwmIzM0O2NuaWQgJXUgLSBpbm8gJWxsdSwgbmFtZSAlcyAtIGlubyAlbGx1LCBuYW1lICVzXFxuXCYjMzQ7LFxuZnMvaGZzcGx1cy9jYXRhbG9nLmMtNDM2LVx0XHRjbmlkLCBzcmNfZGlyLVx1MDAzZWlfaW5vLCBzcmNfbmFtZS1cdTAwM2VuYW1lLFxuLS1cbmZzL2hmc3BsdXMvZGlyLmM9Mjk0PXN0YXRpYyBpbnQgaGZzcGx1c19saW5rKHN0cnVjdCBkZW50cnkgKnNyY19kZW50cnksIHN0cnVjdCBpbm9kZSAqZHN0X2Rpcixcbi0tXG5mcy9oZnNwbHVzL2Rpci5jLTMwOS1cbmZzL2hmc3BsdXMvZGlyLmM6MzEwOlx0aGZzX2RiZyhcJiMzNDtzcmNfZGlyLVx1MDAzZWlfaW5vICVsbHUsIGRzdF9kaXItXHUwMDNlaV9pbm8gJWxsdSwgaW5vZGUtXHUwMDNlaV9pbm8gJWxsdVxcblwmIzM0OyxcbmZzL2hmc3BsdXMvZGlyLmMtMzExLVx0XHRzcmNfZGlyLVx1MDAzZWlfaW5vLCBkc3RfZGlyLVx1MDAzZWlfaW5vLCBpbm9kZS1cdTAwM2VpX2lubyk7XG4tLVxuZnMvaGZzcGx1cy9kaXIuYz0zNzA9c3RhdGljIGludCBoZnNwbHVzX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuLS1cbmZzL2hmc3BsdXMvZGlyLmMtMzgxLVxuZnMvaGZzcGx1cy9kaXIuYzozODI6XHRoZnNfZGJnKFwmIzM0O2Rpci1cdTAwM2VpX2lubyAlbGx1LCBpbm9kZS1cdTAwM2VpX2lubyAlbGx1XFxuXCYjMzQ7LFxuZnMvaGZzcGx1cy9kaXIuYy0zODMtXHRcdGRpci1cdTAwM2VpX2lubywgaW5vZGUtXHUwMDNlaV9pbm8pO1xuLS1cbmZzL2hmc3BsdXMvZGlyLmM9NDYzPXN0YXRpYyBpbnQgaGZzcGx1c19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9oZnNwbHVzL2Rpci5jLTQ3NC1cbmZzL2hmc3BsdXMvZGlyLmM6NDc1Olx0aGZzX2RiZyhcJiMzNDtkaXItXHUwMDNlaV9pbm8gJWxsdSwgaW5vZGUtXHUwMDNlaV9pbm8gJWxsdVxcblwmIzM0OyxcbmZzL2hmc3BsdXMvZGlyLmMtNDc2LVx0XHRkaXItXHUwMDNlaV9pbm8sIGlub2RlLVx1MDAzZWlfaW5vKTtcbi0tXG5mcy9oZnNwbHVzL2Rpci5jPTUxND1zdGF0aWMgaW50IGhmc3BsdXNfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL2hmc3BsdXMvZGlyLmMtNTI1LVxuZnMvaGZzcGx1cy9kaXIuYzo1MjY6XHRoZnNfZGJnKFwmIzM0O2Rpci1cdTAwM2VpX2lubyAlbGx1LCBpbm9kZS1cdTAwM2VpX2lubyAlbGx1XFxuXCYjMzQ7LFxuZnMvaGZzcGx1cy9kaXIuYy01MjctXHRcdGRpci1cdTAwM2VpX2lubywgaW5vZGUtXHUwMDNlaV9pbm8pO1xuLS1cbmZzL2hmc3BsdXMvZXh0ZW50cy5jPTIyNz1pbnQgaGZzcGx1c19nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgaWJsb2NrLFxuLS1cbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTI3OS1kb25lOlxuZnMvaGZzcGx1cy9leHRlbnRzLmM6MjgwOlx0aGZzX2RiZyhcJiMzNDtpbm8gJWxsdSwgaWJsb2NrICVsbHUgLSBkYmxvY2sgJXVcXG5cJiMzNDssXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0yODEtXHRcdGlub2RlLVx1MDAzZWlfaW5vLCAobG9uZyBsb25nKWlibG9jaywgZGJsb2NrKTtcbi0tXG5mcy9oZnNwbHVzL2V4dGVudHMuYz0yOTk9c3RhdGljIHZvaWQgaGZzcGx1c19kdW1wX2V4dGVudChzdHJ1Y3QgaGZzcGx1c19leHRlbnQgKmV4dGVudClcbi0tXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0zMDItXG5mcy9oZnNwbHVzL2V4dGVudHMuYzozMDM6XHRoZnNfZGJnKFwmIzM0O2V4dGVudCAgIFwmIzM0Oyk7XG5mcy9oZnNwbHVzL2V4dGVudHMuYy0zMDQtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyA4OyBpJiM0MzsmIzQzOylcbmZzL2hmc3BsdXMvZXh0ZW50cy5jOjMwNTpcdFx0aGZzX2RiZyhcJiMzNDsgc3RhcnRfYmxvY2sgJXUsIGJsb2NrX2NvdW50ICV1XCYjMzQ7LFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMzA2LVx0XHRcdGJlMzJfdG9fY3B1KGV4dGVudFtpXS5zdGFydF9ibG9jayksXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0zMDctXHRcdFx0YmUzMl90b19jcHUoZXh0ZW50W2ldLmJsb2NrX2NvdW50KSk7XG5mcy9oZnNwbHVzL2V4dGVudHMuYzozMDg6XHRoZnNfZGJnKFwmIzM0O1xcblwmIzM0Oyk7XG5mcy9oZnNwbHVzL2V4dGVudHMuYy0zMDktfVxuLS1cbmZzL2hmc3BsdXMvZXh0ZW50cy5jPTQzOD1pbnQgaGZzcGx1c19maWxlX2V4dGVuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBib29sIHplcm9vdXQpXG4tLVxuZnMvaGZzcGx1cy9leHRlbnRzLmMtNDgwLVxuZnMvaGZzcGx1cy9leHRlbnRzLmM6NDgxOlx0aGZzX2RiZyhcJiMzNDtpbm8gJWxsdSwgc3RhcnQgJXUsIGxlbiAldVxcblwmIzM0OywgaW5vZGUtXHUwMDNlaV9pbm8sIHN0YXJ0LCBsZW4pO1xuZnMvaGZzcGx1cy9leHRlbnRzLmMtNDgyLVxuLS1cbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTQ4NC1cdFx0aWYgKCFoaXAtXHUwMDNlZmlyc3RfYmxvY2tzKSB7XG5mcy9oZnNwbHVzL2V4dGVudHMuYzo0ODU6XHRcdFx0aGZzX2RiZyhcJiMzNDtmaXJzdF9leHRlbnQ6IHN0YXJ0ICV1LCBsZW4gJXVcXG5cJiMzNDssXG5mcy9oZnNwbHVzL2V4dGVudHMuYy00ODYtXHRcdFx0XHRzdGFydCwgbGVuKTtcbi0tXG5mcy9oZnNwbHVzL2V4dGVudHMuYy01MjYtaW5zZXJ0X2V4dGVudDpcbmZzL2hmc3BsdXMvZXh0ZW50cy5jOjUyNzpcdGhmc19kYmcoXCYjMzQ7aW5zZXJ0IG5ldyBleHRlbnRcXG5cJiMzNDspO1xuZnMvaGZzcGx1cy9leHRlbnRzLmMtNTI4LVx0cmVzID0gaGZzcGx1c19leHRfd3JpdGVfZXh0ZW50X2xvY2tlZChpbm9kZSk7XG4tLVxuZnMvaGZzcGx1cy9leHRlbnRzLmM9NTQ0PXZvaWQgaGZzcGx1c19maWxlX3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvaGZzcGx1cy9leHRlbnRzLmMtNTUxLVxuZnMvaGZzcGx1cy9leHRlbnRzLmM6NTUyOlx0aGZzX2RiZyhcJiMzNDtpbm8gJWxsdSwgcGh5c19zaXplICVsbHUgLVx1MDAzZSBpX3NpemUgJWxsdVxcblwmIzM0OyxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTU1My1cdFx0aW5vZGUtXHUwMDNlaV9pbm8sIChsb25nIGxvbmcpaGlwLVx1MDAzZXBoeXNfc2l6ZSwgaW5vZGUtXHUwMDNlaV9zaXplKTtcbi0tXG5mcy9oZnNwbHVzL2lub2RlLmM9MzU2PWludCBoZnNwbHVzX2ZpbGVfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCxcbi0tXG5mcy9oZnNwbHVzL2lub2RlLmMtMzY1LVxuZnMvaGZzcGx1cy9pbm9kZS5jOjM2NjpcdGhmc19kYmcoXCYjMzQ7aW5vZGUtXHUwMDNlaV9pbm8gJWxsdSwgc3RhcnQgJWxsdSwgZW5kICVsbHVcXG5cJiMzNDssXG5mcy9oZnNwbHVzL2lub2RlLmMtMzY3LVx0XHRpbm9kZS1cdTAwM2VpX2lubywgc3RhcnQsIGVuZCk7XG4tLVxuZnMvaGZzcGx1cy9pbm9kZS5jPTY3Nz1pbnQgaGZzcGx1c19jYXRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9oZnNwbHVzL2lub2RlLmMtNjg0LVxuZnMvaGZzcGx1cy9pbm9kZS5jOjY4NTpcdGhmc19kYmcoXCYjMzQ7aW5vZGUtXHUwMDNlaV9pbm8gJWxsdVxcblwmIzM0OywgaW5vZGUtXHUwMDNlaV9pbm8pO1xuZnMvaGZzcGx1cy9pbm9kZS5jLTY4Ni1cbi0tXG5mcy9oZnNwbHVzL3N1cGVyLmM9MTY4PXN0YXRpYyBpbnQgaGZzcGx1c193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2hmc3BsdXMvc3VwZXIuYy0xNzItXG5mcy9oZnNwbHVzL3N1cGVyLmM6MTczOlx0aGZzX2RiZyhcJiMzNDtpbm8gJWxsdVxcblwmIzM0OywgaW5vZGUtXHUwMDNlaV9pbm8pO1xuZnMvaGZzcGx1cy9zdXBlci5jLTE3NC1cbi0tXG5mcy9oZnNwbHVzL3N1cGVyLmM9MTg2PXN0YXRpYyB2b2lkIGhmc3BsdXNfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbmZzL2hmc3BsdXMvc3VwZXIuYy0xODcte1xuZnMvaGZzcGx1cy9zdXBlci5jOjE4ODpcdGhmc19kYmcoXCYjMzQ7aW5vICVsbHVcXG5cJiMzNDssIGlub2RlLVx1MDAzZWlfaW5vKTtcbmZzL2hmc3BsdXMvc3VwZXIuYy0xODktXHR0cnVuY2F0ZV9pbm9kZV9wYWdlc19maW5hbChcdTAwMjZpbm9kZS1cdTAwM2VpX2RhdGEpO1xuLS1cbmZzL2hmc3BsdXMvc3VwZXIuYz0xOTc9aW50IGhmc3BsdXNfY29tbWl0X3N1cGVyYmxvY2soc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9oZnNwbHVzL3N1cGVyLmMtMjAzLVxuZnMvaGZzcGx1cy9zdXBlci5jOjIwNDpcdGhmc19kYmcoXCYjMzQ7c3RhcnRpbmcuLi5cXG5cJiMzNDspO1xuZnMvaGZzcGx1cy9zdXBlci5jLTIwNS1cbi0tXG5mcy9oZnNwbHVzL3N1cGVyLmMtMjEyLVxuZnMvaGZzcGx1cy9zdXBlci5jOjIxMzpcdGhmc19kYmcoXCYjMzQ7ZnJlZV9ibG9ja3MgJXUsIG5leHRfY25pZCAldSwgZm9sZGVyX2NvdW50ICV1LCBmaWxlX2NvdW50ICV1XFxuXCYjMzQ7LFxuZnMvaGZzcGx1cy9zdXBlci5jLTIxNC1cdFx0c2JpLVx1MDAzZWZyZWVfYmxvY2tzLCBzYmktXHUwMDNlbmV4dF9jbmlkLFxuLS1cbmZzL2hmc3BsdXMvc3VwZXIuYy0yMzgtXG5mcy9oZnNwbHVzL3N1cGVyLmM6MjM5Olx0aGZzX2RiZyhcJiMzNDtmaW5pc2hlZDogZXJyICVkXFxuXCYjMzQ7LCBlcnJvcik7XG5mcy9oZnNwbHVzL3N1cGVyLmMtMjQwLVxuLS1cbmZzL2hmc3BsdXMvc3VwZXIuYz0yNDQ9c3RhdGljIGludCBoZnNwbHVzX3N5bmNfZnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHdhaXQpXG4tLVxuZnMvaGZzcGx1cy9zdXBlci5jLTI1MS1cbmZzL2hmc3BsdXMvc3VwZXIuYzoyNTI6XHRoZnNfZGJnKFwmIzM0O3N0YXJ0aW5nLi4uXFxuXCYjMzQ7KTtcbmZzL2hmc3BsdXMvc3VwZXIuYy0yNTMtXG4tLVxuZnMvaGZzcGx1cy9zdXBlci5jLTI4Mi1cbmZzL2hmc3BsdXMvc3VwZXIuYzoyODM6XHRoZnNfZGJnKFwmIzM0O2ZpbmlzaGVkOiBlcnIgJWRcXG5cJiMzNDssIGVycm9yKTtcbmZzL2hmc3BsdXMvc3VwZXIuYy0yODQtXG4tLVxuZnMvaGZzcGx1cy9zdXBlci5jPTMyOT1zdGF0aWMgdm9pZCBoZnNwbHVzX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2hmc3BsdXMvc3VwZXIuYy0zMzItXG5mcy9oZnNwbHVzL3N1cGVyLmM6MzMzOlx0aGZzX2RiZyhcJiMzNDtzdGFydGluZy4uLlxcblwmIzM0Oyk7XG5mcy9oZnNwbHVzL3N1cGVyLmMtMzM0LVxuLS1cbmZzL2hmc3BsdXMvc3VwZXIuYy0zNTMtXHRrZnJlZShzYmktXHUwMDNlc19iYWNrdXBfdmhkcl9idWYpO1xuZnMvaGZzcGx1cy9zdXBlci5jOjM1NDpcdGhmc19kYmcoXCYjMzQ7ZmluaXNoZWRcXG5cJiMzNDspO1xuZnMvaGZzcGx1cy9zdXBlci5jLTM1NS19XG4tLVxuZnMvaGZzcGx1cy94YXR0ci5jPTUzPXN0YXRpYyB1MzIgaGZzcGx1c19pbml0X2hlYWRlcl9ub2RlKHN0cnVjdCBpbm9kZSAqYXR0cl9maWxlLFxuLS1cbmZzL2hmc3BsdXMveGF0dHIuYy02Ny1cbmZzL2hmc3BsdXMveGF0dHIuYzo2ODpcdGhmc19kYmcoXCYjMzQ7Y2x1bXAgJXUsIG5vZGVfc2l6ZSAldVxcblwmIzM0OyxcbmZzL2hmc3BsdXMveGF0dHIuYy02OS1cdFx0Y2x1bXBfc2l6ZSwgbm9kZV9zaXplKTtcbi0tXG5mcy9oZnNwbHVzL3hhdHRyLmM9MTk4PXN0YXRpYyBpbnQgaGZzcGx1c19jcmVhdGVfYXR0cmlidXRlc19maWxlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvaGZzcGx1cy94YXR0ci5jLTIxMy1cbmZzL2hmc3BsdXMveGF0dHIuYzoyMTQ6XHRoZnNfZGJnKFwmIzM0O2lubyAlZFxcblwmIzM0OywgSEZTUExVU19BVFRSX0NOSUQpO1xuZnMvaGZzcGx1cy94YXR0ci5jLTIxNS1cbi0tXG5mcy9oZnNwbHVzL3hhdHRyLmM9MzUxPWludCBfX2hmc3BsdXNfc2V0eGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSxcbi0tXG5mcy9oZnNwbHVzL3hhdHRyLmMtMzYwLVxuZnMvaGZzcGx1cy94YXR0ci5jOjM2MTpcdGhmc19kYmcoXCYjMzQ7aW5vICVsbHUsIG5hbWUgJXMsIHZhbHVlICVwLCBzaXplICV6dVxcblwmIzM0OyxcbmZzL2hmc3BsdXMveGF0dHIuYy0zNjItXHRcdGlub2RlLVx1MDAzZWlfaW5vLCBuYW1lID8gbmFtZSA6IE5VTEwsXG4tLVxuZnMvaGZzcGx1cy94YXR0ci5jLTQ0My1cdFx0aWYgKGVycikge1xuZnMvaGZzcGx1cy94YXR0ci5jOjQ0NDpcdFx0XHRoZnNfZGJnKFwmIzM0O3VuYWJsZSB0byByZXBsYWNlIHhhdHRyOiBlcnIgJWRcXG5cJiMzNDssIGVycik7XG5mcy9oZnNwbHVzL3hhdHRyLmMtNDQ1LVx0XHRcdGdvdG8gZW5kX3NldHhhdHRyO1xuLS1cbmZzL2hmc3BsdXMveGF0dHIuYy00NTQtXHRcdGlmIChlcnIpIHtcbmZzL2hmc3BsdXMveGF0dHIuYzo0NTU6XHRcdFx0aGZzX2RiZyhcJiMzNDt1bmFibGUgdG8gc3RvcmUgdmFsdWU6IGVyciAlZFxcblwmIzM0OywgZXJyKTtcbmZzL2hmc3BsdXMveGF0dHIuYy00NTYtXHRcdFx0Z290byBlbmRfc2V0eGF0dHI7XG4tLVxuZnMvaGZzcGx1cy94YXR0ci5jLTQ5Ni1cdGhmc19maW5kX2V4aXQoXHUwMDI2Y2F0X2ZkKTtcbmZzL2hmc3BsdXMveGF0dHIuYzo0OTc6XHRoZnNfZGJnKFwmIzM0O2ZpbmlzaGVkOiByZXMgJWRcXG5cJiMzNDssIGVycik7XG5mcy9oZnNwbHVzL3hhdHRyLmMtNDk4LVx0cmV0dXJuIGVycjtcbi0tXG5mcy9oZnNwbHVzL3hhdHRyLmM9NTM0PWludCBoZnNwbHVzX3NldHhhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsXG4tLVxuZnMvaGZzcGx1cy94YXR0ci5jLTU0Mi1cbmZzL2hmc3BsdXMveGF0dHIuYzo1NDM6XHRoZnNfZGJnKFwmIzM0O2lubyAlbGx1LCBuYW1lICVzLCBwcmVmaXggJXMsIHByZWZpeGxlbiAlenUsIFwmIzM0O1xuZnMvaGZzcGx1cy94YXR0ci5jLTU0NC1cdFx0XCYjMzQ7dmFsdWUgJXAsIHNpemUgJXp1XFxuXCYjMzQ7LFxuLS1cbmZzL2hmc3BsdXMveGF0dHIuYy01NTYtXG5mcy9oZnNwbHVzL3hhdHRyLmM6NTU3Olx0aGZzX2RiZyhcJiMzNDtmaW5pc2hlZDogcmVzICVkXFxuXCYjMzQ7LCByZXMpO1xuZnMvaGZzcGx1cy94YXR0ci5jLTU1OC1cbi0tXG5mcy9oZnNwbHVzL3hhdHRyLmM9Njk2PXNzaXplX3QgaGZzcGx1c19nZXR4YXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLFxuLS1cbmZzL2hmc3BsdXMveGF0dHIuYy03MDItXG5mcy9oZnNwbHVzL3hhdHRyLmM6NzAzOlx0aGZzX2RiZyhcJiMzNDtpbm8gJWxsdSwgbmFtZSAlcywgcHJlZml4ICVzXFxuXCYjMzQ7LFxuZnMvaGZzcGx1cy94YXR0ci5jLTcwNC1cdFx0aW5vZGUtXHUwMDNlaV9pbm8sIG5hbWUgPyBuYW1lIDogTlVMTCxcbi0tXG5mcy9oZnNwbHVzL3hhdHRyLmMtNzE3LVxuZnMvaGZzcGx1cy94YXR0ci5jOjcxODpcdGhmc19kYmcoXCYjMzQ7ZmluaXNoZWQ6IHJlcyAlZFxcblwmIzM0OywgcmVzKTtcbmZzL2hmc3BsdXMveGF0dHIuYy03MTktXG4tLVxuZnMvaGZzcGx1cy94YXR0ci5jPTgwMj1zc2l6ZV90IGhmc3BsdXNfbGlzdHhhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSlcbi0tXG5mcy9oZnNwbHVzL3hhdHRyLmMtODEyLVxuZnMvaGZzcGx1cy94YXR0ci5jOjgxMzpcdGhmc19kYmcoXCYjMzQ7aW5vICVsbHVcXG5cJiMzNDssIGlub2RlLVx1MDAzZWlfaW5vKTtcbmZzL2hmc3BsdXMveGF0dHIuYy04MTQtXG4tLVxuZnMvaGZzcGx1cy94YXR0ci5jLTkwMC1cbmZzL2hmc3BsdXMveGF0dHIuYzo5MDE6XHRoZnNfZGJnKFwmIzM0O2ZpbmlzaGVkOiByZXMgJXpkXFxuXCYjMzQ7LCByZXMpO1xuZnMvaGZzcGx1cy94YXR0ci5jLTkwMi1cbi0tXG5mcy9oZnNwbHVzL3hhdHRyLmM9OTA2PXN0YXRpYyBpbnQgaGZzcGx1c19yZW1vdmV4YXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lKVxuLS1cbmZzL2hmc3BsdXMveGF0dHIuYy05MTQtXG5mcy9oZnNwbHVzL3hhdHRyLmM6OTE1Olx0aGZzX2RiZyhcJiMzNDtpbm8gJWxsdSwgbmFtZSAlc1xcblwmIzM0OyxcbmZzL2hmc3BsdXMveGF0dHIuYy05MTYtXHRcdGlub2RlLVx1MDAzZWlfaW5vLCBuYW1lID8gbmFtZSA6IE5VTEwpO1xuLS1cbmZzL2hmc3BsdXMveGF0dHIuYy05ODQtXG5mcy9oZnNwbHVzL3hhdHRyLmM6OTg1Olx0aGZzX2RiZyhcJiMzNDtmaW5pc2hlZDogZXJyICVkXFxuXCYjMzQ7LCBlcnIpO1xuZnMvaGZzcGx1cy94YXR0ci5jLTk4Ni1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMTI6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyNjAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEhGUyYjNDM7IENvZGUgZm9yIERlYnVnZ2luZyBGb2N1cyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBzZWUgYSBtYWNybywgYGhmc19kYmdgLCB1c2VkIGV2ZXJ5d2hlcmUuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBidXQgd2FpdCwgYGhmc19ibm9kZV9kdW1wYCBpcyBkZWZpbmVkIHVuY29uZGl0aW9uYWxseSEgVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYW5kIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgcHJpbWFyaWx5IHVzZWQgZm9yIGRlYnVnZ2luZy4gTGV0JiMzOTtzIG1ha2UgYSBtZW50YWwgbm90ZSB0byBjaGVjayBpZiBgaGZzX2Jub2RlX2R1bXBgIGlzIGEgZ29vZCBzeW1ib2wgdG8gZm9jdXMgb24gd2hlbiBJJiMzOTttIGRlYnVnZ2luZyB0aGlzLgoKQmV5b25kIHRoYXQsIEkgc2VlIGEgYnVuY2ggb2Ygb3RoZXIgZnVuY3Rpb25zIHRoYXQgc2VlbSByZWFsbHkgaW1wb3J0YW50LiBUaGV5JiMzOTtyZSBhbGwgZnVuY3Rpb25hbCwgc28gdGhleSYjMzk7cmUgc29saWQgY2FuZGlkYXRlczogYF9faGZzX2JyZWNfZmluZGAsIGBoZnNfYnJlY19maW5kYCwgYGhmc19ibm9kZV9maW5kYCwgYGhmc19icmVjX2xlbm9mZmAsIGBoZnNfYnJlY19rZXlsZW5gLCBhbmQgYGhmc19icmVjX3JlbW92ZWAuIEkgc2hvdWxkIHByb2JhYmx5IG1ha2UgYSBsaXN0IGp1c3QgdG8ga2VlcCB0aGVtIHN0cmFpZ2h0OgoKKiAgIGBfX2hmc19icmVjX2ZpbmRgCiogICBgaGZzX2JyZWNfZmluZGAKKiAgIGBoZnNfYm5vZGVfZmluZGAKKiAgIGBoZnNfYnJlY19sZW5vZmZgCiogICBgaGZzX2JyZWNfa2V5bGVuYAoqICAgYGhmc19icmVjX3JlbW92ZWAKCk5vdywgYmVmb3JlIEkgZGlnIGluLCBJIG5lZWQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgbWlnaHQgYWZmZWN0IHdoYXQgSSYjMzk7bSBzZWVpbmcuIEFoLCB5ZXMsIGBIRlNQTFVTX0ZTYCBpcyB0aGUgbWFpbiBvbmUgdGhhdCBqdW1wcyBvdXQuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgY29uZmlncyB0aGF0IGNvdWxkIGJlIHJlbGV2YW50LiBUaGF0JiMzOTtzIGFsd2F5cyBhIGdvb2QgcHJhY3RpY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDEyOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBIRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9oZnNwbHVzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaGZzcGx1cy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9oZnNwbHVzL0tjb25maWc6Mjpjb25maWcgSEZTUExVU19GU1xuZnMvaGZzcGx1cy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtBcHBsZSBFeHRlbmRlZCBIRlMgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuLS1cbmZzL2hmc3BsdXMvS2NvbmZpZy0xNy1cbmZzL2hmc3BsdXMvS2NvbmZpZzoxODpjb25maWcgSEZTUExVU19LVU5JVF9URVNUXG5mcy9oZnNwbHVzL0tjb25maWctMTktXHR0cmlzdGF0ZSBcJiMzNDtLVW5pdCB0ZXN0cyBmb3IgSEZTJiM0MzsgZmlsZXN5c3RlbVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDEyOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MDU3CgkJCQkJCQlvdXRwdXQ6IDE1OQoJCQkJCQkJdGhvdWdodHM6IDIyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBIRlMmIzQzOyBCLVRyZWUgQm91bmRzIENoZWNrIFBhdGNoKioKCk9rYXksIEkmIzM5O3ZlIHJldmlld2VkIHRoZSBwYXRjaCBhbmQgSSYjMzk7bSBzYXRpc2ZpZWQuIGBIRlNQTFVTX0ZTYCBpcyBzdWZmaWNpZW50IGZvciB0aGlzIG9uZS4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBJJiMzOTt2ZSBnb3QgdGhpcyBzdHJhaWdodC4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGJvdW5kcyBjaGVja2luZyB3aXRoaW4gdGhlIEhGUyYjNDM7IGItdHJlZSBvcGVyYXRpb25zLiBJdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBzcGVjaWZpY2FsbHkgaW4gaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBhbmQgcGFyc2VzIEhGUyYjNDM7IGltYWdlcy4gVGhpcyBjbGVhcmx5IG1lYW5zIGl0JiMzOTtzIGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcuCgpNeSBmb2N1cyBzeW1ib2xzIGFyZSBhcyBmb2xsb3dzOiBgX19oZnNfYnJlY19maW5kYCwgYGhmc19icmVjX2ZpbmRgLCBgaGZzX2Jub2RlX2ZpbmRgLCBgaGZzX2JyZWNfbGVub2ZmYCwgYGhmc19icmVjX2tleWxlbmAsIGFuZCBgaGZzX2JyZWNfcmVtb3ZlYC4KClRoZSBwYXRjaCYjMzk7cyBpbnRlbnQgaXMgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzIGFuZCB3cml0ZXMuIFRoaXMgaXMgYWNoaWV2ZWQgYnkgdmFsaWRhdGluZyB0aGUgYi10cmVlIG5vZGUgYW5kIHJlY29yZCBoYW5kbGluZy4gVGhpcyBpcyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50IGZvciBjb3JydXB0ZWQgZmlsZXN5c3RlbSBpbWFnZXMuIEl0JiMzOTtzIHRyaWdnZXJlZCBieSBtb3VudGluZyBhbmQgaW50ZXJhY3Rpbmcgd2l0aCBIRlMmIzQzOyBpbWFnZXMsIG1lYW5pbmcgSSBjYW4gcG90ZW50aWFsbHkgdHJpZ2dlciBpdCB3aXRoIGNyYWZ0ZWQgaW5wdXQuIEkmIzM5O20gZ29pbmcgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMTI6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hGU1BMVVNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2hmc19icmVjX2ZpbmQmIzM0OywKICAgICYjMzQ7aGZzX2JyZWNfZmluZCYjMzQ7LAogICAgJiMzNDtoZnNfYm5vZGVfZmluZCYjMzQ7LAogICAgJiMzNDtoZnNfYnJlY19sZW5vZmYmIzM0OywKICAgICYjMzQ7aGZzX2JyZWNfa2V5bGVuJiMzNDssCiAgICAmIzM0O2hmc19icmVjX3JlbW92ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyBhbmQgdmFsaWRhdGlvbiB0byBIRlMmIzQzOyBiLXRyZWUgbm9kZSBhbmQgcmVjb3JkIGhhbmRsaW5nIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyB3aGVuIGRlYWxpbmcgd2l0aCBjb3JydXB0ZWQgZmlsZXN5c3RlbSBpbWFnZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgSEZTJiM0MzsgZmlsZXN5c3RlbSBkcml2ZXIgdGhhdCBpcyByZWFjaGFibGUgYnkgbW91bnRpbmcgYW5kIGludGVyYWN0aW5nIHdpdGggY3JhZnRlZCBIRlMmIzQzOyBpbWFnZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hGU1BMVVNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2hmc19icmVjX2ZpbmQmIzM0OywKICAgICYjMzQ7aGZzX2JyZWNfZmluZCYjMzQ7LAogICAgJiMzNDtoZnNfYm5vZGVfZmluZCYjMzQ7LAogICAgJiMzNDtoZnNfYnJlY19sZW5vZmYmIzM0OywKICAgICYjMzQ7aGZzX2JyZWNfa2V5bGVuJiMzNDssCiAgICAmIzM0O2hmc19icmVjX3JlbW92ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyBhbmQgdmFsaWRhdGlvbiB0byBIRlMmIzQzOyBiLXRyZWUgbm9kZSBhbmQgcmVjb3JkIGhhbmRsaW5nIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyB3aGVuIGRlYWxpbmcgd2l0aCBjb3JydXB0ZWQgZmlsZXN5c3RlbSBpbWFnZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgSEZTJiM0MzsgZmlsZXN5c3RlbSBkcml2ZXIgdGhhdCBpcyByZWFjaGFibGUgYnkgbW91bnRpbmcgYW5kIGludGVyYWN0aW5nIHdpdGggY3JhZnRlZCBIRlMmIzQzOyBpbWFnZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xMlQxMjo1NToyOS45OTAxMjcxODRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjU1ODUwNTA1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIRlNQTFVTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19oZnNfYnJlY19maW5kXCIsXG4gICAgXCJoZnNfYnJlY19maW5kXCIsXG4gICAgXCJoZnNfYm5vZGVfZmluZFwiLFxuICAgIFwiaGZzX2JyZWNfbGVub2ZmXCIsXG4gICAgXCJoZnNfYnJlY19rZXlsZW5cIixcbiAgICBcImhmc19icmVjX3JlbW92ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIGFuZCB2YWxpZGF0aW9uIHRvIEhGUysgYi10cmVlIG5vZGUgYW5kIHJlY29yZCBoYW5kbGluZyB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgd2hlbiBkZWFsaW5nIHdpdGggY29ycnVwdGVkIGZpbGVzeXN0ZW0gaW1hZ2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIEhGUysgZmlsZXN5c3RlbSBkcml2ZXIgdGhhdCBpcyByZWFjaGFibGUgYnkgbW91bnRpbmcgYW5kIGludGVyYWN0aW5nIHdpdGggY3JhZnRlZCBIRlMrIGltYWdlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMTI6NTU6MjkuOTkwMTMyNDE0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Njg4NjkwNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmOWVmMzkyMWU3ZTVhNjEzZWM4NzYwYzYxZTViOWM0MmNjYzE4Y2FkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gSnVsIDEyIDEyOjU1OjI4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvYmZpbmQuYyBiL2ZzL2hmc3BsdXMvYmZpbmQuY1xcbmluZGV4IDlhNTVmYTZkNTI5NDI5Li5hNTM5MWZmMDdjNzBmNiAxMDA2NDRcXG4tLS0gYS9mcy9oZnNwbHVzL2JmaW5kLmNcXG4rKysgYi9mcy9oZnNwbHVzL2JmaW5kLmNcXG5AQCAtMTgsNiArMTgsNyBAQCBpbnQgaGZzX2ZpbmRfaW5pdChzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlLCBzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpXFxuIFxcbiBcXHRmZC1cXHUwMDNldHJlZSA9IHRyZWU7XFxuIFxcdGZkLVxcdTAwM2Vibm9kZSA9IE5VTEw7XFxuK1xcdGhmc19maW5kX3Jlc2V0KGZkKTtcXG4gXFx0cHRyID0ga3phbGxvYyh0cmVlLVxcdTAwM2VtYXhfa2V5X2xlbiAqIDIgKyA0LCBHRlBfS0VSTkVMKTtcXG4gXFx0aWYgKCFwdHIpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbkBAIC0xMDYsMTIgKzEwNywxNCBAQCBpbnQgX19oZnNfYnJlY19maW5kKHN0cnVjdCBoZnNfYm5vZGUgKmJub2RlLCBzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQsXFxuIFxcdHUxNiBvZmYsIGxlbiwga2V5bGVuO1xcbiBcXHRpbnQgcmVjO1xcbiBcXHRpbnQgYiwgZTtcXG4tXFx0aW50IHJlcztcXG4rXFx0aW50IHJlcyA9IC1FTk9FTlQ7XFxuIFxcbiBcXHRCVUdfT04oIXJlY19mb3VuZCk7XFxuK1xcdGlmICghaGZzX2Jub2RlX251bV9yZWNzX3ZhbGlkKGJub2RlKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXG4gXFx0YiA9IDA7XFxuIFxcdGUgPSBibm9kZS1cXHUwMDNlbnVtX3JlY3MgLSAxO1xcbi1cXHRyZXMgPSAtRU5PRU5UO1xcbiBcXHRkbyB7XFxuIFxcdFxcdHJlYyA9IChlICsgYikgLyAyO1xcbiBcXHRcXHRsZW4gPSBoZnNfYnJlY19sZW5vZmYoYm5vZGUsIHJlYywgXFx1MDAyNm9mZik7XFxuQEAgLTE1OCwxMSArMTYxLDcgQEAgaW50IGhmc19icmVjX2ZpbmQoc3RydWN0IGhmc19maW5kX2RhdGEgKmZkLCBzZWFyY2hfc3RyYXRlZ3lfdCBkb19rZXlfY29tcGFyZSlcXG4gXFx0X19iZTMyIGRhdGE7XFxuIFxcdGludCBoZWlnaHQsIHJlcztcXG4gXFxuLVxcdGZkLVxcdTAwM2VyZWNvcmQgPSAtMTtcXG4tXFx0ZmQtXFx1MDAzZWtleW9mZnNldCA9IC0xO1xcbi1cXHRmZC1cXHUwMDNla2V5bGVuZ3RoID0gLTE7XFxuLVxcdGZkLVxcdTAwM2VlbnRyeW9mZnNldCA9IC0xO1xcbi1cXHRmZC1cXHUwMDNlZW50cnlsZW5ndGggPSAtMTtcXG4rXFx0aGZzX2ZpbmRfcmVzZXQoZmQpO1xcbiBcXG4gXFx0dHJlZSA9IGZkLVxcdTAwM2V0cmVlO1xcbiBcXHRpZiAoZmQtXFx1MDAzZWJub2RlKVxcbmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2Jub2RlLmMgYi9mcy9oZnNwbHVzL2Jub2RlLmNcXG5pbmRleCBkMDg4ZmI3ZWIwZGZhMy4uZjE4NWMwMTJkMDkwMjYgMTAwNjQ0XFxuLS0tIGEvZnMvaGZzcGx1cy9ibm9kZS5jXFxuKysrIGIvZnMvaGZzcGx1cy9ibm9kZS5jXFxuQEAgLTM1MiwxNSArMzUyLDIyIEBAIHZvaWQgaGZzX2Jub2RlX2R1bXAoc3RydWN0IGhmc19ibm9kZSAqbm9kZSlcXG4gXFx0c3RydWN0IGhmc19ibm9kZV9kZXNjIGRlc2M7XFxuIFxcdF9fYmUzMiBjbmlkO1xcbiBcXHRpbnQgaSwgb2ZmLCBrZXlfb2ZmO1xcbitcXHR1MTYgbnVtX3JlY3M7XFxuIFxcbiBcXHRoZnNfZGJnKFxcXCJub2RlICVkXFxcXG5cXFwiLCBub2RlLVxcdTAwM2V0aGlzKTtcXG4gXFx0aGZzX2Jub2RlX3JlYWQobm9kZSwgXFx1MDAyNmRlc2MsIDAsIHNpemVvZihkZXNjKSk7XFxuK1xcdG51bV9yZWNzID0gbm9kZS1cXHUwMDNlbnVtX3JlY3M7XFxuIFxcdGhmc19kYmcoXFxcIm5leHQgJWQsIHByZXYgJWQsIHR5cGUgJWQsIGhlaWdodCAlZCwgbnVtX3JlY3MgJWRcXFxcblxcXCIsXFxuIFxcdFxcdGJlMzJfdG9fY3B1KGRlc2MubmV4dCksIGJlMzJfdG9fY3B1KGRlc2MucHJldiksXFxuIFxcdFxcdGRlc2MudHlwZSwgZGVzYy5oZWlnaHQsIGJlMTZfdG9fY3B1KGRlc2MubnVtX3JlY3MpKTtcXG4gXFxuK1xcdGlmICghaGZzX2Jub2RlX251bV9yZWNzX3ZhbGlkKG5vZGUpKSB7XFxuK1xcdFxcdGhmc19kYmcoXFxcImludmFsaWQgbnVtX3JlY3MgJXVcXFxcblxcXCIsIG51bV9yZWNzKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbiBcXHRvZmYgPSBub2RlLVxcdTAwM2V0cmVlLVxcdTAwM2Vub2RlX3NpemUgLSAyO1xcbi1cXHRmb3IgKGkgPSBiZTE2X3RvX2NwdShkZXNjLm51bV9yZWNzKTsgaSBcXHUwMDNlPSAwOyBvZmYgLT0gMiwgaS0tKSB7XFxuK1xcdGZvciAoaSA9IG51bV9yZWNzOyBpIFxcdTAwM2U9IDA7IG9mZiAtPSAyLCBpLS0pIHtcXG4gXFx0XFx0a2V5X29mZiA9IGhmc19ibm9kZV9yZWFkX3UxNihub2RlLCBvZmYpO1xcbiBcXHRcXHRoZnNfZGJnKFxcXCIga2V5X29mZiAlZFxcXCIsIGtleV9vZmYpO1xcbiBcXHRcXHRpZiAoaSBcXHUwMDI2XFx1MDAyNiBub2RlLVxcdTAwM2V0eXBlID09IEhGU19OT0RFX0lOREVYKSB7XFxuQEAgLTU3OSw2ICs1ODYsOSBAQCBzdHJ1Y3QgaGZzX2Jub2RlICpoZnNfYm5vZGVfZmluZChzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlLCB1MzIgbnVtKVxcbiBcXHRcXHRnb3RvIG5vZGVfZXJyb3I7XFxuIFxcdH1cXG4gXFxuK1xcdGlmICghaGZzX2Jub2RlX251bV9yZWNzX3ZhbGlkKG5vZGUpKVxcbitcXHRcXHRnb3RvIG5vZGVfZXJyb3I7XFxuK1xcbiBcXHRyZWNfb2ZmID0gdHJlZS1cXHUwMDNlbm9kZV9zaXplIC0gMjtcXG4gXFx0b2ZmID0gaGZzX2Jub2RlX3JlYWRfdTE2KG5vZGUsIHJlY19vZmYpO1xcbiBcXHRpZiAob2ZmICE9IHNpemVvZihzdHJ1Y3QgaGZzX2Jub2RlX2Rlc2MpKVxcbkBAIC01ODYsOSArNTk2LDcgQEAgc3RydWN0IGhmc19ibm9kZSAqaGZzX2Jub2RlX2ZpbmQoc3RydWN0IGhmc19idHJlZSAqdHJlZSwgdTMyIG51bSlcXG4gXFx0Zm9yIChpID0gMTsgaSBcXHUwMDNjPSBub2RlLVxcdTAwM2VudW1fcmVjczsgb2ZmID0gbmV4dF9vZmYsIGkrKykge1xcbiBcXHRcXHRyZWNfb2ZmIC09IDI7XFxuIFxcdFxcdG5leHRfb2ZmID0gaGZzX2Jub2RlX3JlYWRfdTE2KG5vZGUsIHJlY19vZmYpO1xcbi1cXHRcXHRpZiAobmV4dF9vZmYgXFx1MDAzYz0gb2ZmIHx8XFxuLVxcdFxcdCAgICBuZXh0X29mZiBcXHUwMDNlIHRyZWUtXFx1MDAzZW5vZGVfc2l6ZSB8fFxcbi1cXHRcXHQgICAgbmV4dF9vZmYgXFx1MDAyNiAxKVxcbitcXHRcXHRpZiAoIWhmc19icmVjX3JhbmdlX3ZhbGlkKG5vZGUsIG9mZiwgbmV4dF9vZmYsIHJlY19vZmYpKVxcbiBcXHRcXHRcXHRnb3RvIG5vZGVfZXJyb3I7XFxuIFxcdFxcdGVudHJ5X3NpemUgPSBuZXh0X29mZiAtIG9mZjtcXG4gXFx0XFx0aWYgKG5vZGUtXFx1MDAzZXR5cGUgIT0gSEZTX05PREVfSU5ERVggXFx1MDAyNlxcdTAwMjZcXG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9icmVjLmMgYi9mcy9oZnNwbHVzL2JyZWMuY1xcbmluZGV4IGUzZGY4OTI4NDA3OWRiLi4zMTEyYzNiY2Y5Y2Y4ZCAxMDA2NDRcXG4tLS0gYS9mcy9oZnNwbHVzL2JyZWMuY1xcbisrKyBiL2ZzL2hmc3BsdXMvYnJlYy5jXFxuQEAgLTIwLDM1ICsyMCw0MSBAQCBzdGF0aWMgaW50IGhmc19idHJlZV9pbmNfaGVpZ2h0KHN0cnVjdCBoZnNfYnRyZWUgKik7XFxuIHUxNiBoZnNfYnJlY19sZW5vZmYoc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgdTE2IHJlYywgdTE2ICpvZmYpXFxuIHtcXG4gXFx0X19iZTE2IHJldHZhbFsyXTtcXG4tXFx0dTE2IGRhdGFvZmY7XFxuK1xcdHUxNiBkYXRhX29mZjtcXG4rXFx0dTE2IG5leHRfb2ZmO1xcbiBcXG4tXFx0ZGF0YW9mZiA9IG5vZGUtXFx1MDAzZXRyZWUtXFx1MDAzZW5vZGVfc2l6ZSAtIChyZWMgKyAyKSAqIDI7XFxuLVxcdGhmc19ibm9kZV9yZWFkKG5vZGUsIHJldHZhbCwgZGF0YW9mZiwgNCk7XFxuK1xcdGlmICghaGZzX2JyZWNfcmVjb3JkX3ZhbGlkKG5vZGUsIHJlYykpIHtcXG4rXFx0XFx0Km9mZiA9IDA7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHRkYXRhX29mZiA9IG5vZGUtXFx1MDAzZXRyZWUtXFx1MDAzZW5vZGVfc2l6ZSAtIChyZWMgKyAyKSAqIDI7XFxuK1xcdGhmc19ibm9kZV9yZWFkKG5vZGUsIHJldHZhbCwgZGF0YV9vZmYsIDQpO1xcbiBcXHQqb2ZmID0gYmUxNl90b19jcHUocmV0dmFsWzFdKTtcXG4tXFx0cmV0dXJuIGJlMTZfdG9fY3B1KHJldHZhbFswXSkgLSAqb2ZmO1xcbitcXHRuZXh0X29mZiA9IGJlMTZfdG9fY3B1KHJldHZhbFswXSk7XFxuK1xcdGlmICghaGZzX2JyZWNfcmFuZ2VfdmFsaWQobm9kZSwgKm9mZiwgbmV4dF9vZmYsIGRhdGFfb2ZmKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdHJldHVybiBuZXh0X29mZiAtICpvZmY7XFxuIH1cXG4gXFxuIC8qIEdldCB0aGUgbGVuZ3RoIG9mIHRoZSBrZXkgZnJvbSBhIGtleWVkIHJlY29yZCAqL1xcbiB1MTYgaGZzX2JyZWNfa2V5bGVuKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsIHUxNiByZWMpXFxuIHtcXG4tXFx0dTE2IHJldHZhbCwgcmVjb2ZmO1xcbitcXHR1MTYgcmV0dmFsLCByZWNvZmYsIGxlbjtcXG4gXFxuIFxcdGlmIChub2RlLVxcdTAwM2V0eXBlICE9IEhGU19OT0RFX0lOREVYIFxcdTAwMjZcXHUwMDI2IG5vZGUtXFx1MDAzZXR5cGUgIT0gSEZTX05PREVfTEVBRilcXG4gXFx0XFx0cmV0dXJuIDA7XFxuK1xcdGlmICghaGZzX2JyZWNfcmVjb3JkX3ZhbGlkKG5vZGUsIHJlYykpXFxuK1xcdFxcdHJldHVybiAwO1xcbiBcXG4gXFx0aWYgKChub2RlLVxcdTAwM2V0eXBlID09IEhGU19OT0RFX0lOREVYKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAhKG5vZGUtXFx1MDAzZXRyZWUtXFx1MDAzZWF0dHJpYnV0ZXMgXFx1MDAyNiBIRlNfVFJFRV9WQVJJRFhLRVlTKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAobm9kZS1cXHUwMDNldHJlZS1cXHUwMDNlY25pZCAhPSBIRlNQTFVTX0FUVFJfQ05JRCkpIHtcXG4gXFx0XFx0cmV0dmFsID0gbm9kZS1cXHUwMDNldHJlZS1cXHUwMDNlbWF4X2tleV9sZW4gKyAyO1xcbiBcXHR9IGVsc2Uge1xcbi1cXHRcXHRyZWNvZmYgPSBoZnNfYm5vZGVfcmVhZF91MTYobm9kZSxcXG4tXFx0XFx0XFx0bm9kZS1cXHUwMDNldHJlZS1cXHUwMDNlbm9kZV9zaXplIC0gKHJlYyArIDEpICogMik7XFxuLVxcdFxcdGlmICghcmVjb2ZmKVxcbi1cXHRcXHRcXHRyZXR1cm4gMDtcXG4tXFx0XFx0aWYgKHJlY29mZiBcXHUwMDNlIG5vZGUtXFx1MDAzZXRyZWUtXFx1MDAzZW5vZGVfc2l6ZSAtIDIpIHtcXG4tXFx0XFx0XFx0cHJfZXJyKFxcXCJyZWNvZmYgJWQgdG9vIGxhcmdlXFxcXG5cXFwiLCByZWNvZmYpO1xcbitcXHRcXHRsZW4gPSBoZnNfYnJlY19sZW5vZmYobm9kZSwgcmVjLCBcXHUwMDI2cmVjb2ZmKTtcXG4rXFx0XFx0aWYgKGxlbiA9PSAwKVxcbiBcXHRcXHRcXHRyZXR1cm4gMDtcXG4tXFx0XFx0fVxcbiBcXG4gXFx0XFx0cmV0dmFsID0gaGZzX2Jub2RlX3JlYWRfdTE2KG5vZGUsIHJlY29mZikgKyAyO1xcbiBcXHRcXHRpZiAocmV0dmFsIFxcdTAwM2Ugbm9kZS1cXHUwMDNldHJlZS1cXHUwMDNlbWF4X2tleV9sZW4gKyAyKSB7XFxuQEAgLTE4NSwxMCArMTkxLDE1IEBAIGludCBoZnNfYnJlY19yZW1vdmUoc3RydWN0IGhmc19maW5kX2RhdGEgKmZkKVxcbiBcXHR0cmVlID0gZmQtXFx1MDAzZXRyZWU7XFxuIFxcdG5vZGUgPSBmZC1cXHUwMDNlYm5vZGU7XFxuIGFnYWluOlxcbitcXHRpZiAoIWhmc19icmVjX3JlY29yZF92YWxpZChub2RlLCBmZC1cXHUwMDNlcmVjb3JkKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU87XFxuK1xcbiBcXHRyZWNfb2ZmID0gdHJlZS1cXHUwMDNlbm9kZV9zaXplIC0gKGZkLVxcdTAwM2VyZWNvcmQgKyAyKSAqIDI7XFxuIFxcdGVuZF9vZmYgPSB0cmVlLVxcdTAwM2Vub2RlX3NpemUgLSAobm9kZS1cXHUwMDNlbnVtX3JlY3MgKyAxKSAqIDI7XFxuIFxcbiBcXHRpZiAobm9kZS1cXHUwMDNldHlwZSA9PSBIRlNfTk9ERV9MRUFGKSB7XFxuK1xcdFxcdGlmICh0cmVlLVxcdTAwM2VsZWFmX2NvdW50ID09IDApXFxuK1xcdFxcdFxcdHJldHVybiAtRUlPO1xcbiBcXHRcXHR0cmVlLVxcdTAwM2VsZWFmX2NvdW50LS07XFxuIFxcdFxcdG1hcmtfaW5vZGVfZGlydHkodHJlZS1cXHUwMDNlaW5vZGUpO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaGZzcGx1c19mcy5oIGIvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmhcXG5pbmRleCBlYzA0YjgyYWQ5Mjc4Ny4uZDg3ZDU1YTM1ZDI1OGIgMTAwNjQ0XFxuLS0tIGEvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmhcXG4rKysgYi9mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaFxcbkBAIC01ODcsNiArNTg3LDc4IEBAIGJvb2wgaXNfYm5vZGVfb2Zmc2V0X3ZhbGlkKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsIHUzMiBvZmYpXFxuIFxcdHJldHVybiBpc192YWxpZDtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZVxcbitib29sIGhmc19ibm9kZV9udW1fcmVjc192YWxpZChzdHJ1Y3QgaGZzX2Jub2RlICpub2RlKVxcbit7XFxuK1xcdHUzMiBub2RlX3NpemU7XFxuK1xcdHUzMiB0YWJsZV9zaXplO1xcbitcXHR1MzIgYXJlYV9zaXplO1xcbitcXHR1MzIgcmVjX3NpemUgPSBzaXplb2YoX19iZTE2KTtcXG4rXFx0dTMyIGRlc2Nfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaGZzX2Jub2RlX2Rlc2MpO1xcbitcXG4rXFx0aWYgKCFub2RlIHx8ICFub2RlLVxcdTAwM2V0cmVlKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRub2RlX3NpemUgPSBub2RlLVxcdTAwM2V0cmVlLVxcdTAwM2Vub2RlX3NpemU7XFxuK1xcdGlmIChub2RlX3NpemUgXFx1MDAzYyBkZXNjX3NpemUpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGFyZWFfc2l6ZSA9IG5vZGVfc2l6ZSAtIGRlc2Nfc2l6ZTtcXG4rXFx0dGFibGVfc2l6ZSA9ICgodTMyKW5vZGUtXFx1MDAzZW51bV9yZWNzICsgMSkgKiByZWNfc2l6ZTtcXG4rXFxuK1xcdHJldHVybiB0YWJsZV9zaXplIFxcdTAwM2M9IGFyZWFfc2l6ZTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZVxcbitib29sIGhmc19icmVjX3JlY29yZF92YWxpZChzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCBpbnQgcmVjb3JkKVxcbit7XFxuK1xcdGlmICghaGZzX2Jub2RlX251bV9yZWNzX3ZhbGlkKG5vZGUpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdGlmIChyZWNvcmQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRyZXR1cm4gcmVjb3JkIFxcdTAwM2Mgbm9kZS1cXHUwMDNlbnVtX3JlY3M7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmVcXG4rYm9vbCBoZnNfYnJlY19yYW5nZV92YWxpZChzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCB1MTYgb2ZmLCB1MTYgbmV4dF9vZmYsXFxuK1xcdFxcdFxcdCAgdTE2IHJlY19vZmYpXFxuK3tcXG4rXFx0dTMyIHRhYmxlX3NpemU7XFxuK1xcdHUzMiB0YWJsZV9zdGFydDtcXG4rXFx0dTMyIHJlY19zaXplID0gc2l6ZW9mKF9fYmUxNik7XFxuK1xcdHUzMiBkZXNjX3NpemUgPSBzaXplb2Yoc3RydWN0IGhmc19ibm9kZV9kZXNjKTtcXG4rXFxuK1xcdGlmICghbm9kZSB8fCAhbm9kZS1cXHUwMDNldHJlZSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0aWYgKG9mZiBcXHUwMDNjIGRlc2Nfc2l6ZSB8fCAob2ZmIFxcdTAwMjYgMSkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlmIChuZXh0X29mZiBcXHUwMDNjPSBvZmYgfHxcXG4rXFx0XFx0bmV4dF9vZmYgXFx1MDAzZSBub2RlLVxcdTAwM2V0cmVlLVxcdTAwM2Vub2RlX3NpemUgfHxcXG4rXFx0XFx0bmV4dF9vZmYgXFx1MDAzZSByZWNfb2ZmIHx8XFxuK1xcdFxcdChuZXh0X29mZiBcXHUwMDI2IDEpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHR0YWJsZV9zaXplID0gKCh1MzIpbm9kZS1cXHUwMDNlbnVtX3JlY3MgKyAxKSAqIHJlY19zaXplO1xcbitcXHR0YWJsZV9zdGFydCA9IG5vZGUtXFx1MDAzZXRyZWUtXFx1MDAzZW5vZGVfc2l6ZSAtIHRhYmxlX3NpemU7XFxuK1xcdGlmIChuZXh0X29mZiBcXHUwMDNlIHRhYmxlX3N0YXJ0KVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZVxcbit2b2lkIGhmc19maW5kX3Jlc2V0KHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZClcXG4re1xcbitcXHRmZC1cXHUwMDNlcmVjb3JkID0gLTE7XFxuK1xcdGZkLVxcdTAwM2VrZXlvZmZzZXQgPSAtMTtcXG4rXFx0ZmQtXFx1MDAzZWtleWxlbmd0aCA9IC0xO1xcbitcXHRmZC1cXHUwMDNlZW50cnlvZmZzZXQgPSAtMTtcXG4rXFx0ZmQtXFx1MDAzZWVudHJ5bGVuZ3RoID0gLTE7XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmVcXG4gdTMyIGNoZWNrX2FuZF9jb3JyZWN0X3JlcXVlc3RlZF9sZW5ndGgoc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgdTMyIG9mZiwgdTMyIGxlbilcXG4ge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQxMjo1NTozMC43NTk3NTk1ODdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1Nzg4ODYyNzc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhGU1BMVVNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2hmc19icmVjX2ZpbmRcIixcbiAgICBcImhmc19icmVjX2ZpbmRcIixcbiAgICBcImhmc19ibm9kZV9maW5kXCIsXG4gICAgXCJoZnNfYnJlY19sZW5vZmZcIixcbiAgICBcImhmc19icmVjX2tleWxlblwiLFxuICAgIFwiaGZzX2JyZWNfcmVtb3ZlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgYW5kIHZhbGlkYXRpb24gdG8gSEZTKyBiLXRyZWUgbm9kZSBhbmQgcmVjb3JkIGhhbmRsaW5nIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyB3aGVuIGRlYWxpbmcgd2l0aCBjb3JydXB0ZWQgZmlsZXN5c3RlbSBpbWFnZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgSEZTKyBmaWxlc3lzdGVtIGRyaXZlciB0aGF0IGlzIHJlYWNoYWJsZSBieSBtb3VudGluZyBhbmQgaW50ZXJhY3Rpbmcgd2l0aCBjcmFmdGVkIEhGUysgaW1hZ2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGY5ZWYzOTIxZTdlNWE2MTNlYzg3NjBjNjFlNWI5YzQyY2NjMThjYWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1bCAxMiAxMjo1NToyOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvYmZpbmQuYyBiL2ZzL2hmc3BsdXMvYmZpbmQuY1xuaW5kZXggOWE1NWZhNmQ1Mjk0MjkuLmE1MzkxZmYwN2M3MGY2IDEwMDY0NFxuLS0tIGEvZnMvaGZzcGx1cy9iZmluZC5jXG4rKysgYi9mcy9oZnNwbHVzL2JmaW5kLmNcbkBAIC0xOCw2ICsxOCw3IEBAIGludCBoZnNfZmluZF9pbml0KHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUsIHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZClcbiBcbiBcdGZkLVx1MDAzZXRyZWUgPSB0cmVlO1xuIFx0ZmQtXHUwMDNlYm5vZGUgPSBOVUxMO1xuK1x0aGZzX2ZpbmRfcmVzZXQoZmQpO1xuIFx0cHRyID0ga3phbGxvYyh0cmVlLVx1MDAzZW1heF9rZXlfbGVuICogMiArIDQsIEdGUF9LRVJORUwpO1xuIFx0aWYgKCFwdHIpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuQEAgLTEwNiwxMiArMTA3LDE0IEBAIGludCBfX2hmc19icmVjX2ZpbmQoc3RydWN0IGhmc19ibm9kZSAqYm5vZGUsIHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCxcbiBcdHUxNiBvZmYsIGxlbiwga2V5bGVuO1xuIFx0aW50IHJlYztcbiBcdGludCBiLCBlO1xuLVx0aW50IHJlcztcbitcdGludCByZXMgPSAtRU5PRU5UO1xuIFxuIFx0QlVHX09OKCFyZWNfZm91bmQpO1xuK1x0aWYgKCFoZnNfYm5vZGVfbnVtX3JlY3NfdmFsaWQoYm5vZGUpKVxuK1x0XHRnb3RvIGZhaWw7XG4rXG4gXHRiID0gMDtcbiBcdGUgPSBibm9kZS1cdTAwM2VudW1fcmVjcyAtIDE7XG4tXHRyZXMgPSAtRU5PRU5UO1xuIFx0ZG8ge1xuIFx0XHRyZWMgPSAoZSArIGIpIC8gMjtcbiBcdFx0bGVuID0gaGZzX2JyZWNfbGVub2ZmKGJub2RlLCByZWMsIFx1MDAyNm9mZik7XG5AQCAtMTU4LDExICsxNjEsNyBAQCBpbnQgaGZzX2JyZWNfZmluZChzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQsIHNlYXJjaF9zdHJhdGVneV90IGRvX2tleV9jb21wYXJlKVxuIFx0X19iZTMyIGRhdGE7XG4gXHRpbnQgaGVpZ2h0LCByZXM7XG4gXG4tXHRmZC1cdTAwM2VyZWNvcmQgPSAtMTtcbi1cdGZkLVx1MDAzZWtleW9mZnNldCA9IC0xO1xuLVx0ZmQtXHUwMDNla2V5bGVuZ3RoID0gLTE7XG4tXHRmZC1cdTAwM2VlbnRyeW9mZnNldCA9IC0xO1xuLVx0ZmQtXHUwMDNlZW50cnlsZW5ndGggPSAtMTtcbitcdGhmc19maW5kX3Jlc2V0KGZkKTtcbiBcbiBcdHRyZWUgPSBmZC1cdTAwM2V0cmVlO1xuIFx0aWYgKGZkLVx1MDAzZWJub2RlKVxuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvYm5vZGUuYyBiL2ZzL2hmc3BsdXMvYm5vZGUuY1xuaW5kZXggZDA4OGZiN2ViMGRmYTMuLmYxODVjMDEyZDA5MDI2IDEwMDY0NFxuLS0tIGEvZnMvaGZzcGx1cy9ibm9kZS5jXG4rKysgYi9mcy9oZnNwbHVzL2Jub2RlLmNcbkBAIC0zNTIsMTUgKzM1MiwyMiBAQCB2b2lkIGhmc19ibm9kZV9kdW1wKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUpXG4gXHRzdHJ1Y3QgaGZzX2Jub2RlX2Rlc2MgZGVzYztcbiBcdF9fYmUzMiBjbmlkO1xuIFx0aW50IGksIG9mZiwga2V5X29mZjtcbitcdHUxNiBudW1fcmVjcztcbiBcbiBcdGhmc19kYmcoXCJub2RlICVkXFxuXCIsIG5vZGUtXHUwMDNldGhpcyk7XG4gXHRoZnNfYm5vZGVfcmVhZChub2RlLCBcdTAwMjZkZXNjLCAwLCBzaXplb2YoZGVzYykpO1xuK1x0bnVtX3JlY3MgPSBub2RlLVx1MDAzZW51bV9yZWNzO1xuIFx0aGZzX2RiZyhcIm5leHQgJWQsIHByZXYgJWQsIHR5cGUgJWQsIGhlaWdodCAlZCwgbnVtX3JlY3MgJWRcXG5cIixcbiBcdFx0YmUzMl90b19jcHUoZGVzYy5uZXh0KSwgYmUzMl90b19jcHUoZGVzYy5wcmV2KSxcbiBcdFx0ZGVzYy50eXBlLCBkZXNjLmhlaWdodCwgYmUxNl90b19jcHUoZGVzYy5udW1fcmVjcykpO1xuIFxuK1x0aWYgKCFoZnNfYm5vZGVfbnVtX3JlY3NfdmFsaWQobm9kZSkpIHtcbitcdFx0aGZzX2RiZyhcImludmFsaWQgbnVtX3JlY3MgJXVcXG5cIiwgbnVtX3JlY3MpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4gXHRvZmYgPSBub2RlLVx1MDAzZXRyZWUtXHUwMDNlbm9kZV9zaXplIC0gMjtcbi1cdGZvciAoaSA9IGJlMTZfdG9fY3B1KGRlc2MubnVtX3JlY3MpOyBpIFx1MDAzZT0gMDsgb2ZmIC09IDIsIGktLSkge1xuK1x0Zm9yIChpID0gbnVtX3JlY3M7IGkgXHUwMDNlPSAwOyBvZmYgLT0gMiwgaS0tKSB7XG4gXHRcdGtleV9vZmYgPSBoZnNfYm5vZGVfcmVhZF91MTYobm9kZSwgb2ZmKTtcbiBcdFx0aGZzX2RiZyhcIiBrZXlfb2ZmICVkXCIsIGtleV9vZmYpO1xuIFx0XHRpZiAoaSBcdTAwMjZcdTAwMjYgbm9kZS1cdTAwM2V0eXBlID09IEhGU19OT0RFX0lOREVYKSB7XG5AQCAtNTc5LDYgKzU4Niw5IEBAIHN0cnVjdCBoZnNfYm5vZGUgKmhmc19ibm9kZV9maW5kKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUsIHUzMiBudW0pXG4gXHRcdGdvdG8gbm9kZV9lcnJvcjtcbiBcdH1cbiBcbitcdGlmICghaGZzX2Jub2RlX251bV9yZWNzX3ZhbGlkKG5vZGUpKVxuK1x0XHRnb3RvIG5vZGVfZXJyb3I7XG4rXG4gXHRyZWNfb2ZmID0gdHJlZS1cdTAwM2Vub2RlX3NpemUgLSAyO1xuIFx0b2ZmID0gaGZzX2Jub2RlX3JlYWRfdTE2KG5vZGUsIHJlY19vZmYpO1xuIFx0aWYgKG9mZiAhPSBzaXplb2Yoc3RydWN0IGhmc19ibm9kZV9kZXNjKSlcbkBAIC01ODYsOSArNTk2LDcgQEAgc3RydWN0IGhmc19ibm9kZSAqaGZzX2Jub2RlX2ZpbmQoc3RydWN0IGhmc19idHJlZSAqdHJlZSwgdTMyIG51bSlcbiBcdGZvciAoaSA9IDE7IGkgXHUwMDNjPSBub2RlLVx1MDAzZW51bV9yZWNzOyBvZmYgPSBuZXh0X29mZiwgaSsrKSB7XG4gXHRcdHJlY19vZmYgLT0gMjtcbiBcdFx0bmV4dF9vZmYgPSBoZnNfYm5vZGVfcmVhZF91MTYobm9kZSwgcmVjX29mZik7XG4tXHRcdGlmIChuZXh0X29mZiBcdTAwM2M9IG9mZiB8fFxuLVx0XHQgICAgbmV4dF9vZmYgXHUwMDNlIHRyZWUtXHUwMDNlbm9kZV9zaXplIHx8XG4tXHRcdCAgICBuZXh0X29mZiBcdTAwMjYgMSlcbitcdFx0aWYgKCFoZnNfYnJlY19yYW5nZV92YWxpZChub2RlLCBvZmYsIG5leHRfb2ZmLCByZWNfb2ZmKSlcbiBcdFx0XHRnb3RvIG5vZGVfZXJyb3I7XG4gXHRcdGVudHJ5X3NpemUgPSBuZXh0X29mZiAtIG9mZjtcbiBcdFx0aWYgKG5vZGUtXHUwMDNldHlwZSAhPSBIRlNfTk9ERV9JTkRFWCBcdTAwMjZcdTAwMjZcbmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2JyZWMuYyBiL2ZzL2hmc3BsdXMvYnJlYy5jXG5pbmRleCBlM2RmODkyODQwNzlkYi4uMzExMmMzYmNmOWNmOGQgMTAwNjQ0XG4tLS0gYS9mcy9oZnNwbHVzL2JyZWMuY1xuKysrIGIvZnMvaGZzcGx1cy9icmVjLmNcbkBAIC0yMCwzNSArMjAsNDEgQEAgc3RhdGljIGludCBoZnNfYnRyZWVfaW5jX2hlaWdodChzdHJ1Y3QgaGZzX2J0cmVlICopO1xuIHUxNiBoZnNfYnJlY19sZW5vZmYoc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgdTE2IHJlYywgdTE2ICpvZmYpXG4ge1xuIFx0X19iZTE2IHJldHZhbFsyXTtcbi1cdHUxNiBkYXRhb2ZmO1xuK1x0dTE2IGRhdGFfb2ZmO1xuK1x0dTE2IG5leHRfb2ZmO1xuIFxuLVx0ZGF0YW9mZiA9IG5vZGUtXHUwMDNldHJlZS1cdTAwM2Vub2RlX3NpemUgLSAocmVjICsgMikgKiAyO1xuLVx0aGZzX2Jub2RlX3JlYWQobm9kZSwgcmV0dmFsLCBkYXRhb2ZmLCA0KTtcbitcdGlmICghaGZzX2JyZWNfcmVjb3JkX3ZhbGlkKG5vZGUsIHJlYykpIHtcbitcdFx0Km9mZiA9IDA7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0ZGF0YV9vZmYgPSBub2RlLVx1MDAzZXRyZWUtXHUwMDNlbm9kZV9zaXplIC0gKHJlYyArIDIpICogMjtcbitcdGhmc19ibm9kZV9yZWFkKG5vZGUsIHJldHZhbCwgZGF0YV9vZmYsIDQpO1xuIFx0Km9mZiA9IGJlMTZfdG9fY3B1KHJldHZhbFsxXSk7XG4tXHRyZXR1cm4gYmUxNl90b19jcHUocmV0dmFsWzBdKSAtICpvZmY7XG4rXHRuZXh0X29mZiA9IGJlMTZfdG9fY3B1KHJldHZhbFswXSk7XG4rXHRpZiAoIWhmc19icmVjX3JhbmdlX3ZhbGlkKG5vZGUsICpvZmYsIG5leHRfb2ZmLCBkYXRhX29mZikpXG4rXHRcdHJldHVybiAwO1xuK1x0cmV0dXJuIG5leHRfb2ZmIC0gKm9mZjtcbiB9XG4gXG4gLyogR2V0IHRoZSBsZW5ndGggb2YgdGhlIGtleSBmcm9tIGEga2V5ZWQgcmVjb3JkICovXG4gdTE2IGhmc19icmVjX2tleWxlbihzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCB1MTYgcmVjKVxuIHtcbi1cdHUxNiByZXR2YWwsIHJlY29mZjtcbitcdHUxNiByZXR2YWwsIHJlY29mZiwgbGVuO1xuIFxuIFx0aWYgKG5vZGUtXHUwMDNldHlwZSAhPSBIRlNfTk9ERV9JTkRFWCBcdTAwMjZcdTAwMjYgbm9kZS1cdTAwM2V0eXBlICE9IEhGU19OT0RFX0xFQUYpXG4gXHRcdHJldHVybiAwO1xuK1x0aWYgKCFoZnNfYnJlY19yZWNvcmRfdmFsaWQobm9kZSwgcmVjKSlcbitcdFx0cmV0dXJuIDA7XG4gXG4gXHRpZiAoKG5vZGUtXHUwMDNldHlwZSA9PSBIRlNfTk9ERV9JTkRFWCkgXHUwMDI2XHUwMDI2XG4gXHQgICAhKG5vZGUtXHUwMDNldHJlZS1cdTAwM2VhdHRyaWJ1dGVzIFx1MDAyNiBIRlNfVFJFRV9WQVJJRFhLRVlTKSBcdTAwMjZcdTAwMjZcbiBcdCAgIChub2RlLVx1MDAzZXRyZWUtXHUwMDNlY25pZCAhPSBIRlNQTFVTX0FUVFJfQ05JRCkpIHtcbiBcdFx0cmV0dmFsID0gbm9kZS1cdTAwM2V0cmVlLVx1MDAzZW1heF9rZXlfbGVuICsgMjtcbiBcdH0gZWxzZSB7XG4tXHRcdHJlY29mZiA9IGhmc19ibm9kZV9yZWFkX3UxNihub2RlLFxuLVx0XHRcdG5vZGUtXHUwMDNldHJlZS1cdTAwM2Vub2RlX3NpemUgLSAocmVjICsgMSkgKiAyKTtcbi1cdFx0aWYgKCFyZWNvZmYpXG4tXHRcdFx0cmV0dXJuIDA7XG4tXHRcdGlmIChyZWNvZmYgXHUwMDNlIG5vZGUtXHUwMDNldHJlZS1cdTAwM2Vub2RlX3NpemUgLSAyKSB7XG4tXHRcdFx0cHJfZXJyKFwicmVjb2ZmICVkIHRvbyBsYXJnZVxcblwiLCByZWNvZmYpO1xuK1x0XHRsZW4gPSBoZnNfYnJlY19sZW5vZmYobm9kZSwgcmVjLCBcdTAwMjZyZWNvZmYpO1xuK1x0XHRpZiAobGVuID09IDApXG4gXHRcdFx0cmV0dXJuIDA7XG4tXHRcdH1cbiBcbiBcdFx0cmV0dmFsID0gaGZzX2Jub2RlX3JlYWRfdTE2KG5vZGUsIHJlY29mZikgKyAyO1xuIFx0XHRpZiAocmV0dmFsIFx1MDAzZSBub2RlLVx1MDAzZXRyZWUtXHUwMDNlbWF4X2tleV9sZW4gKyAyKSB7XG5AQCAtMTg1LDEwICsxOTEsMTUgQEAgaW50IGhmc19icmVjX3JlbW92ZShzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpXG4gXHR0cmVlID0gZmQtXHUwMDNldHJlZTtcbiBcdG5vZGUgPSBmZC1cdTAwM2Vibm9kZTtcbiBhZ2FpbjpcbitcdGlmICghaGZzX2JyZWNfcmVjb3JkX3ZhbGlkKG5vZGUsIGZkLVx1MDAzZXJlY29yZCkpXG4rXHRcdHJldHVybiAtRUlPO1xuK1xuIFx0cmVjX29mZiA9IHRyZWUtXHUwMDNlbm9kZV9zaXplIC0gKGZkLVx1MDAzZXJlY29yZCArIDIpICogMjtcbiBcdGVuZF9vZmYgPSB0cmVlLVx1MDAzZW5vZGVfc2l6ZSAtIChub2RlLVx1MDAzZW51bV9yZWNzICsgMSkgKiAyO1xuIFxuIFx0aWYgKG5vZGUtXHUwMDNldHlwZSA9PSBIRlNfTk9ERV9MRUFGKSB7XG4rXHRcdGlmICh0cmVlLVx1MDAzZWxlYWZfY291bnQgPT0gMClcbitcdFx0XHRyZXR1cm4gLUVJTztcbiBcdFx0dHJlZS1cdTAwM2VsZWFmX2NvdW50LS07XG4gXHRcdG1hcmtfaW5vZGVfZGlydHkodHJlZS1cdTAwM2Vpbm9kZSk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmggYi9mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaFxuaW5kZXggZWMwNGI4MmFkOTI3ODcuLmQ4N2Q1NWEzNWQyNThiIDEwMDY0NFxuLS0tIGEvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmhcbisrKyBiL2ZzL2hmc3BsdXMvaGZzcGx1c19mcy5oXG5AQCAtNTg3LDYgKzU4Nyw3OCBAQCBib29sIGlzX2Jub2RlX29mZnNldF92YWxpZChzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCB1MzIgb2ZmKVxuIFx0cmV0dXJuIGlzX3ZhbGlkO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lXG4rYm9vbCBoZnNfYm5vZGVfbnVtX3JlY3NfdmFsaWQoc3RydWN0IGhmc19ibm9kZSAqbm9kZSlcbit7XG4rXHR1MzIgbm9kZV9zaXplO1xuK1x0dTMyIHRhYmxlX3NpemU7XG4rXHR1MzIgYXJlYV9zaXplO1xuK1x0dTMyIHJlY19zaXplID0gc2l6ZW9mKF9fYmUxNik7XG4rXHR1MzIgZGVzY19zaXplID0gc2l6ZW9mKHN0cnVjdCBoZnNfYm5vZGVfZGVzYyk7XG4rXG4rXHRpZiAoIW5vZGUgfHwgIW5vZGUtXHUwMDNldHJlZSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0bm9kZV9zaXplID0gbm9kZS1cdTAwM2V0cmVlLVx1MDAzZW5vZGVfc2l6ZTtcbitcdGlmIChub2RlX3NpemUgXHUwMDNjIGRlc2Nfc2l6ZSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0YXJlYV9zaXplID0gbm9kZV9zaXplIC0gZGVzY19zaXplO1xuK1x0dGFibGVfc2l6ZSA9ICgodTMyKW5vZGUtXHUwMDNlbnVtX3JlY3MgKyAxKSAqIHJlY19zaXplO1xuK1xuK1x0cmV0dXJuIHRhYmxlX3NpemUgXHUwMDNjPSBhcmVhX3NpemU7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmVcbitib29sIGhmc19icmVjX3JlY29yZF92YWxpZChzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCBpbnQgcmVjb3JkKVxuK3tcbitcdGlmICghaGZzX2Jub2RlX251bV9yZWNzX3ZhbGlkKG5vZGUpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHRpZiAocmVjb3JkIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRyZXR1cm4gcmVjb3JkIFx1MDAzYyBub2RlLVx1MDAzZW51bV9yZWNzO1xuK31cbitcbitzdGF0aWMgaW5saW5lXG4rYm9vbCBoZnNfYnJlY19yYW5nZV92YWxpZChzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCB1MTYgb2ZmLCB1MTYgbmV4dF9vZmYsXG4rXHRcdFx0ICB1MTYgcmVjX29mZilcbit7XG4rXHR1MzIgdGFibGVfc2l6ZTtcbitcdHUzMiB0YWJsZV9zdGFydDtcbitcdHUzMiByZWNfc2l6ZSA9IHNpemVvZihfX2JlMTYpO1xuK1x0dTMyIGRlc2Nfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaGZzX2Jub2RlX2Rlc2MpO1xuK1xuK1x0aWYgKCFub2RlIHx8ICFub2RlLVx1MDAzZXRyZWUpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmIChvZmYgXHUwMDNjIGRlc2Nfc2l6ZSB8fCAob2ZmIFx1MDAyNiAxKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0aWYgKG5leHRfb2ZmIFx1MDAzYz0gb2ZmIHx8XG4rXHRcdG5leHRfb2ZmIFx1MDAzZSBub2RlLVx1MDAzZXRyZWUtXHUwMDNlbm9kZV9zaXplIHx8XG4rXHRcdG5leHRfb2ZmIFx1MDAzZSByZWNfb2ZmIHx8XG4rXHRcdChuZXh0X29mZiBcdTAwMjYgMSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHRhYmxlX3NpemUgPSAoKHUzMilub2RlLVx1MDAzZW51bV9yZWNzICsgMSkgKiByZWNfc2l6ZTtcbitcdHRhYmxlX3N0YXJ0ID0gbm9kZS1cdTAwM2V0cmVlLVx1MDAzZW5vZGVfc2l6ZSAtIHRhYmxlX3NpemU7XG4rXHRpZiAobmV4dF9vZmYgXHUwMDNlIHRhYmxlX3N0YXJ0KVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rc3RhdGljIGlubGluZVxuK3ZvaWQgaGZzX2ZpbmRfcmVzZXQoc3RydWN0IGhmc19maW5kX2RhdGEgKmZkKVxuK3tcbitcdGZkLVx1MDAzZXJlY29yZCA9IC0xO1xuK1x0ZmQtXHUwMDNla2V5b2Zmc2V0ID0gLTE7XG4rXHRmZC1cdTAwM2VrZXlsZW5ndGggPSAtMTtcbitcdGZkLVx1MDAzZWVudHJ5b2Zmc2V0ID0gLTE7XG4rXHRmZC1cdTAwM2VlbnRyeWxlbmd0aCA9IC0xO1xuK31cbitcbiBzdGF0aWMgaW5saW5lXG4gdTMyIGNoZWNrX2FuZF9jb3JyZWN0X3JlcXVlc3RlZF9sZW5ndGgoc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgdTMyIG9mZiwgdTMyIGxlbilcbiB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQxMjo1NTozMC43NTk3NjE0NzdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTQzNTYxMzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEhGUysgVmFsaWRhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0J3MgaW50cm9kdWNpbmcgc29tZSBjcml0aWNhbCB2YWxpZGF0aW9uIGZ1bmN0aW9ucyB0byB0aGUgSEZTKyBiLXRyZWUgaGFuZGxpbmcuIFRoaXMgaXMgcmlnaHQgdXAgbXkgYWxsZXk7IEkndmUgc2VlbiBlbm91Z2ggb2YgdGhlc2UgZmlsZXN5c3RlbSBkcml2ZXIgaXNzdWVzIHRvIGtub3cgdGhpcyBpcyBhIGdvb2QgdGhpbmcuIFRoZXkncmUgdG91Y2hpbmcgYGJmaW5kLmNgLCBgYm5vZGUuY2AsIGBicmVjLmNgLCBhbmQgdGhlIGhlYWRlciBmaWxlLCB3aGljaCB0ZWxscyBtZSB0aGV5J3JlIGZvY3VzaW5nIG9uIHRoZSBjb3JlIGItdHJlZSBvcGVyYXRpb25zLiBUaGUgbmV3IGZ1bmN0aW9ucywgYGhmc19ibm9kZV9udW1fcmVjc192YWxpZCgpYCwgYGhmc19icmVjX3JlY29yZF92YWxpZCgpYCwgYGhmc19icmVjX3JhbmdlX3ZhbGlkKClgLCBhbmQgYGhmc19maW5kX3Jlc2V0KClgLCBhcmUgZ29pbmcgdG8gYmUga2V5IGluIHByZXZlbnRpbmcgdGhvc2UgbmFzdHkgb3V0LW9mLWJvdW5kcyByZWFkcyBhbmQgd3JpdGVzLCBhbmQgb3RoZXIgbWVtb3J5IGNvcnJ1cHRpb24sIHRoYXQgd2UncmUgYWx3YXlzIHdvcnJpZWQgYWJvdXQgd2l0aCBjb3JydXB0ZWQgZmlsZXN5c3RlbSBpbWFnZXMuXG5cblRoZXkncmUgaW50ZWdyYXRpbmcgdGhlc2UgdmFsaWRhdGlvbnMgaW50byBzZXZlcmFsIGNyaXRpY2FsIGFyZWFzOiBgX19oZnNfYnJlY19maW5kYCwgYGhmc19icmVjX2ZpbmRgLCBgaGZzX2Jub2RlX2R1bXBgLCBgaGZzX2Jub2RlX2ZpbmRgLCBgaGZzX2JyZWNfbGVub2ZmYCwgYGhmc19icmVjX2tleWxlbmAsIGFuZCBgaGZzX2JyZWNfcmVtb3ZlYC4gVGhpcyBpcyBhIHByZXR0eSB0aG9yb3VnaCBpbnRlZ3JhdGlvbiwgd2hpY2ggaXMgZXhhY3RseSB3aGF0IEkgbGlrZSB0byBzZWUuIFRoaXMgbG9va3MgbGlrZSBhIHNvbGlkIGZ1bmN0aW9uYWwgY2hhbmdlOyBpdCdzICpkZWZpbml0ZWx5KiBnb2luZyB0byBpbXByb3ZlIHRoZSByb2J1c3RuZXNzIG9mIHRoZSBkcml2ZXIuXG5cblRoZSBwYXRjaCdzIGFuYWx5c2lzIHRoYXQgdGhlIHBhdGhzIGFyZSByZWFjaGFibGUgYnkgbW91bnRpbmcgYSBjcmFmdGVkIGltYWdlIGlzIHNwb3Qgb24uIFRoYXQgbWFrZXMgaXQgYSBwZXJmZWN0IHRhcmdldCBmb3IgZnV6emluZy4gTm93LCBsZXQncyBzZWUsIHdoYXQgZG8gSSBuZWVkIHRvIHRlc3QgdGhpcz8gQWgsIHllcywgdGhlIEhGUysgZmlsZXN5c3RlbSBpcyBlbmFibGVkIHdpdGggYENPTkZJR19IRlNQTFVTX0ZTYC4gSSdsbCBjb25maXJtIHRoYXQgaW4gYGZzL2hmc3BsdXMvS2NvbmZpZ2AganVzdCB0byBiZSBjb21wbGV0ZWx5IHN1cmUsIGJ1dCBpdCBsb29rcyBsaWtlIGEgZ29vZCBzdGFydCBmb3IgZ2V0dGluZyB0aGlzIHRoaW5nIHRlc3RlZC4gVGltZSB0byBzdGFydCBjcmFmdGluZyBzb21lIGZ1enppbmcgaGFybmVzc2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTcxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMTI6NTU6MzcuMzAzMzI1NTcyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2NjM3OTE0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSEZTUExVU19GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9oZnNwbHVzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaGZzcGx1cy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvaGZzcGx1cy9LY29uZmlnOjI6Y29uZmlnIEhGU1BMVVNfRlNcXG5mcy9oZnNwbHVzL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiQXBwbGUgRXh0ZW5kZWQgSEZTIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDEyOjU1OjM3LjY2OTcxMDUzOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxMzk3NjU3NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXMgU3ltYm9sIENhbmRpZGF0ZSBTZWxlY3Rpb24gZm9yIEhGUysqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBmb2N1c2luZyBvbiBIRlMrLCBhbmQgdGhlIGNvbmZpZyB3ZSdyZSB1c2luZyBpcyBgSEZTUExVU19GU2AuIEdvdCBpdC4gTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGZvY3VzIHN5bWJvbHMuIEkndmUgaWRlbnRpZmllZCBhIGxpc3Qgb2YgbW9kaWZpZWQgZnVuY3Rpb25zLCBhbmQgSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGV5J3JlIHJlbGV2YW50IGZvciBvdXIgcHVycG9zZXM6XG5cbiogICBgX19oZnNfYnJlY19maW5kYFxuKiAgIGBoZnNfYnJlY19maW5kYFxuKiAgIGBoZnNfYm5vZGVfZHVtcGBcbiogICBgaGZzX2Jub2RlX2ZpbmRgXG4qICAgYGhmc19icmVjX2xlbm9mZmBcbiogICBgaGZzX2JyZWNfa2V5bGVuYFxuKiAgIGBoZnNfYnJlY19yZW1vdmVgXG5cbk15IG5leHQgc3RlcCBpcyB0byBldmFsdWF0ZSBpZiB0aGVzZSBmdW5jdGlvbnMgcmVwcmVzZW50IGhvdC1wYXRoIG9wZXJhdGlvbnMgd2l0aGluIHRoZSBrZXJuZWwuIEJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcsIGBoZnNfYnJlY19maW5kYCwgYF9faGZzX2JyZWNfZmluZGAsIGBoZnNfYm5vZGVfZmluZGAsIGBoZnNfYnJlY19sZW5vZmZgLCBgaGZzX2JyZWNfa2V5bGVuYCwgYW5kIGBoZnNfYnJlY19yZW1vdmVgIGFyZSBpbnRlZ3JhbCB0byB0aGUgSEZTKyBiLXRyZWUgaW1wbGVtZW50YXRpb24uIFRoYXQgbWVhbnMgdGhleSBhcmUgY2FsbGVkIHdoZW4gZGVhbGluZyB3aXRoIGZpbGUgbG9va3VwcywgcmVhZHMsIGFuZCB3cml0ZXMsIGFtb25nc3Qgb3RoZXIgdGhpbmdzLiBXaGlsZSB0aGV5J3JlIHByb2JhYmx5IGhpdCBmcmVxdWVudGx5IGR1cmluZyBIRlMrIG9wZXJhdGlvbnMsIHRoZXkncmUgc3BlY2lmaWMgdG8gSEZTKyBhbmQgbm90IGdlbmVyaWMga2VybmVsIGhvdC1wYXRocyBsaWtlIGBrbWFsbG9jYCBvciBgc2NoZWR1bGVgLiBUaGVyZWZvcmUsIHRoZXkncmUgZ29vZCBjYW5kaWRhdGVzIGZvciBgRm9jdXNTeW1ib2xzYC5cblxuU28gdGhlIGluaXRpYWwgbGlzdCBvZiBmb2N1cyBzeW1ib2xzIGlzOlxuXG4qICAgYF9faGZzX2JyZWNfZmluZGBcbiogICBgaGZzX2JyZWNfZmluZGBcbiogICBgaGZzX2Jub2RlX2R1bXBgXG4qICAgYGhmc19ibm9kZV9maW5kYFxuKiAgIGBoZnNfYnJlY19sZW5vZmZgXG4qICAgYGhmc19icmVjX2tleWxlbmBcbiogICBgaGZzX2JyZWNfcmVtb3ZlYFxuXG5Ib2xkIG9uIGEgc2Vjb25kLiBgaGZzX2Jub2RlX2R1bXBgLi4uIHRoYXQgc291bmRzIHN1c3BpY2lvdXNseSBsaWtlIGEgZGVidWcgZnVuY3Rpb24uIFdlIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgaXQncyBjb21waWxlZCBpbiBieSBkZWZhdWx0IG9yIGlmIGl0IHJlcXVpcmVzIGEgc3BlY2lmaWMgZGVidWcgY29uZmlndXJhdGlvbiBmbGFnLiBXZSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBrZXJuZWwgY29uZmlnIGZvciB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODcwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDEyOjU1OjQzLjgwOTQ3ODQzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwOTQwNDcxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoZnNfYm5vZGVfZHVtcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9oZnNwbHVzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9oZnNwbHVzL2Jub2RlLmM9MjMwPXZvaWQgaGZzX2Jub2RlX21vdmUoc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgdTMyIGRzdCwgdTMyIHNyYywgdTMyIGxlbilcXG4tLVxcbmZzL2hmc3BsdXMvYm5vZGUuYy0zNDktXFxuZnMvaGZzcGx1cy9ibm9kZS5jOjM1MDp2b2lkIGhmc19ibm9kZV9kdW1wKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUpXFxuZnMvaGZzcGx1cy9ibm9kZS5jLTM1MS17XFxuLS1cXG5mcy9oZnNwbHVzL2JyZWMuYz02OT1pbnQgaGZzX2JyZWNfaW5zZXJ0KHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCwgdm9pZCAqZW50cnksIHUzMiBlbnRyeV9sZW4pXFxuLS1cXG5mcy9oZnNwbHVzL2JyZWMuYy05NS1cXHRub2RlID0gZmQtXFx1MDAzZWJub2RlO1xcbmZzL2hmc3BsdXMvYnJlYy5jOjk2OlxcdGhmc19ibm9kZV9kdW1wKG5vZGUpO1xcbmZzL2hmc3BsdXMvYnJlYy5jLTk3LVxcdC8qIGdldCBsYXN0IG9mZnNldCAqL1xcbi0tXFxuZnMvaGZzcGx1cy9icmVjLmMtMTM5LVxcdGhmc19ibm9kZV93cml0ZShub2RlLCBlbnRyeSwgZGF0YV9vZmYgKyBrZXlfbGVuLCBlbnRyeV9sZW4pO1xcbmZzL2hmc3BsdXMvYnJlYy5jOjE0MDpcXHRoZnNfYm5vZGVfZHVtcChub2RlKTtcXG5mcy9oZnNwbHVzL2JyZWMuYy0xNDEtXFxuLS1cXG5mcy9oZnNwbHVzL2JyZWMuYz0xODU9aW50IGhmc19icmVjX3JlbW92ZShzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpXFxuLS1cXG5mcy9oZnNwbHVzL2JyZWMuYy0yMDUtXFx0fVxcbmZzL2hmc3BsdXMvYnJlYy5jOjIwNjpcXHRoZnNfYm5vZGVfZHVtcChub2RlKTtcXG5mcy9oZnNwbHVzL2JyZWMuYy0yMDctXFx0aGZzX2RiZyhcXFwicmVjICVkLCBsZW4gJWRcXFxcblxcXCIsXFxuLS1cXG5mcy9oZnNwbHVzL2JyZWMuYy0yMzktc2tpcDpcXG5mcy9oZnNwbHVzL2JyZWMuYzoyNDA6XFx0aGZzX2Jub2RlX2R1bXAobm9kZSk7XFxuZnMvaGZzcGx1cy9icmVjLmMtMjQxLVxcdGlmICghZmQtXFx1MDAzZXJlY29yZClcXG4tLVxcbmZzL2hmc3BsdXMvYnJlYy5jPTI0Nj1zdGF0aWMgc3RydWN0IGhmc19ibm9kZSAqaGZzX2Jub2RlX3NwbGl0KHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZClcXG4tLVxcbmZzL2hmc3BsdXMvYnJlYy5jLTM2Ny1cXG5mcy9oZnNwbHVzL2JyZWMuYzozNjg6XFx0aGZzX2Jub2RlX2R1bXAobm9kZSk7XFxuZnMvaGZzcGx1cy9icmVjLmM6MzY5OlxcdGhmc19ibm9kZV9kdW1wKG5ld19ub2RlKTtcXG5mcy9oZnNwbHVzL2JyZWMuYy0zNzAtXFx0aGZzX2Jub2RlX3B1dChub2RlKTtcXG4tLVxcbmZzL2hmc3BsdXMvYnJlYy5jPTM3NT1zdGF0aWMgaW50IGhmc19icmVjX3VwZGF0ZV9wYXJlbnQoc3RydWN0IGhmc19maW5kX2RhdGEgKmZkKVxcbi0tXFxuZnMvaGZzcGx1cy9icmVjLmMtMzk1LVxcdFxcdHJldHVybiAtRU5PRU5UO1xcbmZzL2hmc3BsdXMvYnJlYy5jOjM5NjpcXHRoZnNfYm5vZGVfZHVtcChwYXJlbnQpO1xcbmZzL2hmc3BsdXMvYnJlYy5jLTM5Ny1cXHRyZWMgPSBmZC1cXHUwMDNlcmVjb3JkO1xcbi0tXFxuZnMvaGZzcGx1cy9icmVjLmMtNDQyLVxcdGhmc19ibm9kZV9jb3B5KHBhcmVudCwgZmQtXFx1MDAzZWtleW9mZnNldCwgbm9kZSwgMTQsIG5ld2tleWxlbik7XFxuZnMvaGZzcGx1cy9icmVjLmM6NDQzOlxcdGhmc19ibm9kZV9kdW1wKHBhcmVudCk7XFxuZnMvaGZzcGx1cy9icmVjLmMtNDQ0LVxcbi0tXFxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmg9MjgwPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgaGZzcGx1c19taW5faW9fc2l6ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgtMzAwLSNkZWZpbmUgaGZzX2Jub2RlX21vdmUgaGZzcGx1c19ibm9kZV9tb3ZlXFxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmg6MzAxOiNkZWZpbmUgaGZzX2Jub2RlX2R1bXAgaGZzcGx1c19ibm9kZV9kdW1wXFxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgtMzAyLSNkZWZpbmUgaGZzX2Jub2RlX3VubGluayBoZnNwbHVzX2Jub2RlX3VubGlua1xcbi0tXFxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmg9MzgwPXZvaWQgaGZzX2Jub2RlX21vdmUoc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgdTMyIGRzdCwgdTMyIHNyYywgdTMyIGxlbik7XFxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmg6MzgxOnZvaWQgaGZzX2Jub2RlX2R1bXAoc3RydWN0IGhmc19ibm9kZSAqbm9kZSk7XFxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgtMzgyLXZvaWQgaGZzX2Jub2RlX3VubGluayhzdHJ1Y3QgaGZzX2Jub2RlICpub2RlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMTI6NTU6NDQuMTE4ODg3MjYxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI1MTM0MDg1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGhmc19ibm9kZV9kdW1wIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgaGZzX2Jub2RlX2R1bXBgIGZ1bmN0aW9uIGluIHRoZSBIRlMgY29kZSwgYW5kIGl0J3MgcG9wcGluZyB1cCBpbiBhIGZldyBrZXkgcGxhY2VzOiBgaGZzX2JyZWNfaW5zZXJ0YCwgYGhmc19icmVjX3JlbW92ZWAsIGBoZnNfYm5vZGVfc3BsaXRgLCBhbmQgYGhmc19icmVjX3VwZGF0ZV9wYXJlbnRgLiBNeSBmaXJzdCB0aG91Z2h0IGlzLCB0aGlzIHNtZWxscyBsaWtlIGEgZGVidWdnaW5nIHRvb2wuIFRoZSB3YXkgaXQncyB1c2VkIGluIHRoZXNlIGNvcmUgcmVjb3JkIG1hbmFnZW1lbnQgYW5kIGItdHJlZSBtYW5pcHVsYXRpb24gcm91dGluZXMgaXMgcHJldHR5IHRlbGxpbmcuIEhvd2V2ZXIsIHNvbWV0aGluZydzIG5vdCBxdWl0ZSByaWdodC4gSXQgc2VlbXMgdG8gYmUgdW5jb25kaXRpb25hbGx5IGNvbXBpbGVkLCBvciBhdCBsZWFzdCwgdGhhdCdzIHdoYXQgaXQgaW5pdGlhbGx5IGxvb2tzIGxpa2UuIEknZCBiZXR0ZXIgZG91YmxlIGNoZWNrIHRoYXQuIE9oIHdhaXQhIEkgcmVtZW1iZXIuLi4gYGhmc19kYmdgIGlzIGEgbWFjcm8hIEkgbmVlZCB0byBzZWUgd2hhdCB0aGF0IG1hY3JvIGV4cGFuZHMgdG8gdG8gdW5kZXJzdGFuZCBpZiB0aGlzIGlzICphY3R1YWxseSogdW5jb25kaXRpb25hbGx5IGNvbXBpbGVkLCBvciBqdXN0IGNvbmRpdGlvbmFsbHkgdGhyb3VnaCB0aGUgbWFjcm8uIExldCBtZSBnbyBjaGVjay4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTA1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDEyOjU1OjQ4LjM3MDIzMTc0OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTk3MjM0NiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVmaW5lIGhmc19kYmdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvaGZzcGx1cy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDEyOjU1OjQ4LjQ0MjIxMTI3NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMzU4MTIyNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBIRlMrIERlYnVnZ2luZyBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjdXJyZW50IHN0YXRlIG9mIGRlYnVnZ2luZyB3aXRoaW4gdGhlIEhGUysgZmlsZXN5c3RlbSBpbXBsZW1lbnRhdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgaGZzX2RiZ2AuIFNlZW1zIGxpa2UgYSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LCBjb25zaWRlcmluZyBpdCdzIHByb2JhYmx5IHRoZSBtYXN0ZXIgZGVidWdnaW5nIGZsYWcgb3Igc3RydWN0dXJlIGZvciB0aGUgSEZTKyBsYXllci4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gaWYgaXQncyBhIHNpbXBsZSBib29sZWFuLCBhIGJpdG1hc2ssIG9yIHBlcmhhcHMgYSBtb3JlIHNvcGhpc3RpY2F0ZWQgZGF0YSBzdHJ1Y3R1cmUgaG9sZGluZyB2YXJpb3VzIGRlYnVnIGxldmVscyBvciBjYXRlZ29yaWVzLiBMb2NhdGluZyBpdCB3aXRoaW4gYGZzL2hmc3BsdXMvaGZzcGx1c19mcy5oYCBtYWtlcyBwZXJmZWN0IHNlbnNlOyB0aGUgaGVhZGVyIGZpbGUgaXMgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIGdsb2JhbCBkZWNsYXJhdGlvbnMgYW5kIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIHRoZSBmaWxlc3lzdGVtIGl0c2VsZi4gRnJvbSB0aGVyZSwgSSBjYW4gYW5hbHl6ZSB0aGUgdXNhZ2VzIG9mIHRoYXQgc3RydWN0dXJlIGFjcm9zcyB0aGUgc291cmNlIHRyZWUsIG9yIHBvdGVudGlhbGx5LCBkZWJ1ZyBvcHRpb25zLCBsaWtlIGtlcm5lbCBwYXJhbWV0ZXJzLCB0aGF0IG1heSBlZmZlY3QgaXRzIHN0YXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjYwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMTI6NTU6NTEuNzc4MDI1NjA3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODI1ODEwNiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGZzX2RiZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9oZnNwbHVzL2hmc3BsdXNfZnMuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMTI6NTU6NTEuODM2MjkzNjQ0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMDg4MjkxNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGhhdmluZyBpdDpcblxuKipEaWdnaW5nIGludG8gdGhlIEhGUysgQ29kZWJhc2UqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gdHJ5aW5nIHRvIHBpbnBvaW50IHdoZXJlIHRoaXMgcGFydGljdWxhciBkZWZpbml0aW9uIHJlc2lkZXMuIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCBpdCBtaWdodCBiZSB0dWNrZWQgYXdheSBpbiBgZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmhgLCBidXQgZXhwZXJpZW5jZSB0ZWxscyBtZSBpdCBjb3VsZCBiZSBkZWZpbmVkIHNsaWdodGx5IGRpZmZlcmVudGx5IG9yIGV2ZW4gZGVjbGFyZWQgaW4gYSByZWxhdGVkIGhlYWRlci4gVG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGNhc3QgYSB3aWRlciBuZXQuIEEgZ29vZCBzdGFydGluZyBwb2ludCBpcyB0byBmb2N1cyBteSBzZWFyY2gsIHNvIEknbGwgZ3JlcCBmb3IgYGhmc19kYmdgIHdpdGhpbiB0aGUgYGZzL2hmc3BsdXMvYCBkaXJlY3RvcnkuIFRoYXQgc2hvdWxkIHF1aWNrbHkgcmV2ZWFsIHdoZXJlIHRoaXMgdGhpbmcgaXMgaGlkaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTM3LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMTI6NTU6NTQuOTQ1MTI0ODcyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODE0NjczNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoZnNfZGJnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2hmc3BsdXMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2hmc3BsdXMvYXR0cmlidXRlcy5jPTk3PXN0YXRpYyBpbnQgaGZzcGx1c19hdHRyX2J1aWxkX3JlY29yZChoZnNwbHVzX2F0dHJfZW50cnkgKmVudHJ5LCBpbnQgcmVjb3JkX3R5cGUsXFxuLS1cXG5mcy9oZnNwbHVzL2F0dHJpYnV0ZXMuYy0xMjEtXFx0XFx0ZWxzZSB7XFxuZnMvaGZzcGx1cy9hdHRyaWJ1dGVzLmM6MTIyOlxcdFxcdFxcdGhmc19kYmcoXFxcInZhbHVlIHNpemUgJXp1IGlzIHRvbyBiaWdcXFxcblxcXCIsIHNpemUpO1xcbmZzL2hmc3BsdXMvYXR0cmlidXRlcy5jLTEyMy1cXHRcXHRcXHRyZXR1cm4gSEZTUExVU19JTlZBTElEX0FUVFJfUkVDT1JEO1xcbi0tXFxuZnMvaGZzcGx1cy9hdHRyaWJ1dGVzLmM9MTQwPWludCBoZnNwbHVzX2ZpbmRfYXR0cihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgY25pZCxcXG4tLVxcbmZzL2hmc3BsdXMvYXR0cmlidXRlcy5jLTE0NC1cXG5mcy9oZnNwbHVzL2F0dHJpYnV0ZXMuYzoxNDU6XFx0aGZzX2RiZyhcXFwibmFtZSAlcywgY25pZCAlZFxcXFxuXFxcIiwgbmFtZSA/IG5hbWUgOiBOVUxMLCBjbmlkKTtcXG5mcy9oZnNwbHVzL2F0dHJpYnV0ZXMuYy0xNDYtXFxuLS1cXG5mcy9oZnNwbHVzL2F0dHJpYnV0ZXMuYz0xODA9aW50IGhmc3BsdXNfYXR0cl9leGlzdHMoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSlcXG4tLVxcbmZzL2hmc3BsdXMvYXR0cmlidXRlcy5jLTE4NS1cXG5mcy9oZnNwbHVzL2F0dHJpYnV0ZXMuYzoxODY6XFx0aGZzX2RiZyhcXFwibmFtZSAlcywgaW5vICVsbHVcXFxcblxcXCIsXFxuZnMvaGZzcGx1cy9hdHRyaWJ1dGVzLmMtMTg3LVxcdFxcdG5hbWUgPyBuYW1lIDogTlVMTCwgaW5vZGUtXFx1MDAzZWlfaW5vKTtcXG4tLVxcbmZzL2hmc3BsdXMvYXR0cmlidXRlcy5jPTIwOT1pbnQgaGZzcGx1c19jcmVhdGVfYXR0cl9ub2xvY2soc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSxcXG4tLVxcbmZzL2hmc3BsdXMvYXR0cmlidXRlcy5jLTIxNy1cXG5mcy9oZnNwbHVzL2F0dHJpYnV0ZXMuYzoyMTg6XFx0aGZzX2RiZyhcXFwibmFtZSAlcywgaW5vICVsbHVcXFxcblxcXCIsXFxuZnMvaGZzcGx1cy9hdHRyaWJ1dGVzLmMtMjE5LVxcdFxcdG5hbWUgPyBuYW1lIDogTlVMTCwgaW5vZGUtXFx1MDAzZWlfaW5vKTtcXG4tLVxcbmZzL2hmc3BsdXMvYXR0cmlidXRlcy5jLTIzOC1cXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbmZzL2hmc3BsdXMvYXR0cmlidXRlcy5jOjIzOTpcXHRcXHRoZnNfZGJnKFxcXCJ1bmFibGUgdG8gc3RvcmUgdmFsdWU6IGVyciAlZFxcXFxuXFxcIiwgZXJyKTtcXG5mcy9oZnNwbHVzL2F0dHJpYnV0ZXMuYy0yNDAtXFx0XFx0cmV0dXJuIGVycjtcXG4tLVxcbmZzL2hmc3BsdXMvYXR0cmlidXRlcy5jLTI1MS1cXHRpZiAoZXJyKSB7XFxuZnMvaGZzcGx1cy9hdHRyaWJ1dGVzLmM6MjUyOlxcdFxcdGhmc19kYmcoXFxcInVuYWJsZSB0byBzdG9yZSB2YWx1ZTogZXJyICVkXFxcXG5cXFwiLCBlcnIpO1xcbmZzL2hmc3BsdXMvYXR0cmlidXRlcy5jLTI1My1cXHRcXHRyZXR1cm4gZXJyO1xcbi0tXFxuZnMvaGZzcGx1cy9hdHRyaWJ1dGVzLmM9MjYyPWludCBoZnNwbHVzX2NyZWF0ZV9hdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9oZnNwbHVzL2F0dHJpYnV0ZXMuYy0yNzAtXFxuZnMvaGZzcGx1cy9hdHRyaWJ1dGVzLmM6MjcxOlxcdGhmc19kYmcoXFxcIm5hbWUgJXMsIGlubyAlbGx1XFxcXG5cXFwiLFxcbmZzL2hmc3BsdXMvYXR0cmlidXRlcy5jLTI3Mi1cXHRcXHRuYW1lID8gbmFtZSA6IE5VTEwsIGlub2RlLVxcdTAwM2VpX2lubyk7XFxuLS1cXG5mcy9oZnNwbHVzL2F0dHJpYnV0ZXMuYz0zNTA9aW50IGhmc3BsdXNfZGVsZXRlX2F0dHJfbm9sb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsXFxuLS1cXG5mcy9oZnNwbHVzL2F0dHJpYnV0ZXMuYy0zNTUtXFxuZnMvaGZzcGx1cy9hdHRyaWJ1dGVzLmM6MzU2OlxcdGhmc19kYmcoXFxcIm5hbWUgJXMsIGlubyAlbGx1XFxcXG5cXFwiLFxcbmZzL2hmc3BsdXMvYXR0cmlidXRlcy5jLTM1Ny1cXHRcXHRuYW1lID8gbmFtZSA6IE5VTEwsIGlub2RlLVxcdTAwM2VpX2lubyk7XFxuLS1cXG5mcy9oZnNwbHVzL2F0dHJpYnV0ZXMuYz0zODM9aW50IGhmc3BsdXNfZGVsZXRlX2F0dHIoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSlcXG4tLVxcbmZzL2hmc3BsdXMvYXR0cmlidXRlcy5jLTM4OC1cXG5mcy9oZnNwbHVzL2F0dHJpYnV0ZXMuYzozODk6XFx0aGZzX2RiZyhcXFwibmFtZSAlcywgaW5vICVsbHVcXFxcblxcXCIsXFxuZnMvaGZzcGx1cy9hdHRyaWJ1dGVzLmMtMzkwLVxcdFxcdG5hbWUgPyBuYW1lIDogTlVMTCwgaW5vZGUtXFx1MDAzZWlfaW5vKTtcXG4tLVxcbmZzL2hmc3BsdXMvYXR0cmlidXRlcy5jPTQxNT1pbnQgaGZzcGx1c19kZWxldGVfYWxsX2F0dHJzKHN0cnVjdCBpbm9kZSAqZGlyLCB1MzIgY25pZClcXG4tLVxcbmZzL2hmc3BsdXMvYXR0cmlidXRlcy5jLTQxOS1cXG5mcy9oZnNwbHVzL2F0dHJpYnV0ZXMuYzo0MjA6XFx0aGZzX2RiZyhcXFwiY25pZCAlZFxcXFxuXFxcIiwgY25pZCk7XFxuZnMvaGZzcGx1cy9hdHRyaWJ1dGVzLmMtNDIxLVxcbi0tXFxuZnMvaGZzcGx1cy9hdHRyaWJ1dGVzLmM9NDU0PWludCBoZnNwbHVzX3JlcGxhY2VfYXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvaGZzcGx1cy9hdHRyaWJ1dGVzLmMtNDYyLVxcbmZzL2hmc3BsdXMvYXR0cmlidXRlcy5jOjQ2MzpcXHRoZnNfZGJnKFxcXCJuYW1lICVzLCBpbm8gJWxsdVxcXFxuXFxcIixcXG5mcy9oZnNwbHVzL2F0dHJpYnV0ZXMuYy00NjQtXFx0XFx0bmFtZSA/IG5hbWUgOiBOVUxMLCBpbm9kZS1cXHUwMDNlaV9pbm8pO1xcbi0tXFxuZnMvaGZzcGx1cy9iZmluZC5jPTE1PWludCBoZnNfZmluZF9pbml0KHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUsIHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZClcXG4tLVxcbmZzL2hmc3BsdXMvYmZpbmQuYy0yNi1cXHRmZC1cXHUwMDNla2V5ID0gcHRyICsgdHJlZS1cXHUwMDNlbWF4X2tleV9sZW4gKyAyO1xcbmZzL2hmc3BsdXMvYmZpbmQuYzoyNzpcXHRoZnNfZGJnKFxcXCJjbmlkICVkLCBjYWxsZXIgJXBzXFxcXG5cXFwiLFxcbmZzL2hmc3BsdXMvYmZpbmQuYy0yOC1cXHRcXHR0cmVlLVxcdTAwM2VjbmlkLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpO1xcbi0tXFxuZnMvaGZzcGx1cy9iZmluZC5jPTM0PXZvaWQgaGZzX2ZpbmRfZXhpdChzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpXFxuLS1cXG5mcy9oZnNwbHVzL2JmaW5kLmMtMzctXFx0a2ZyZWUoZmQtXFx1MDAzZXNlYXJjaF9rZXkpO1xcbmZzL2hmc3BsdXMvYmZpbmQuYzozODpcXHRoZnNfZGJnKFxcXCJjbmlkICVkLCBjYWxsZXIgJXBzXFxcXG5cXFwiLFxcbmZzL2hmc3BsdXMvYmZpbmQuYy0zOS1cXHRcXHRmZC1cXHUwMDNldHJlZS1cXHUwMDNlY25pZCwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTtcXG4tLVxcbmZzL2hmc3BsdXMvYml0bWFwLmM9MTk9aW50IGhmc3BsdXNfYmxvY2tfYWxsb2NhdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNpemUsXFxuLS1cXG5mcy9oZnNwbHVzL2JpdG1hcC5jLTMzLVxcbmZzL2hmc3BsdXMvYml0bWFwLmM6MzQ6XFx0aGZzX2RiZyhcXFwic2l6ZSAldSwgb2Zmc2V0ICV1LCBsZW4gJXVcXFxcblxcXCIsIHNpemUsIG9mZnNldCwgbGVuKTtcXG5mcy9oZnNwbHVzL2JpdG1hcC5jLTM1LVxcdG11dGV4X2xvY2soXFx1MDAyNnNiaS1cXHUwMDNlYWxsb2NfbXV0ZXgpO1xcbi0tXFxuZnMvaGZzcGx1cy9iaXRtYXAuYy05Mi1cXHR9XFxuZnMvaGZzcGx1cy9iaXRtYXAuYzo5MzpcXHRoZnNfZGJnKFxcXCJiaXRtYXAgZnVsbFxcXFxuXFxcIik7XFxuZnMvaGZzcGx1cy9iaXRtYXAuYy05NC1cXHRzdGFydCA9IHNpemU7XFxuLS1cXG5mcy9oZnNwbHVzL2JpdG1hcC5jLTk5LVxcdGlmIChzdGFydCBcXHUwMDNlPSBzaXplKSB7XFxuZnMvaGZzcGx1cy9iaXRtYXAuYzoxMDA6XFx0XFx0aGZzX2RiZyhcXFwiYml0bWFwIGZ1bGxcXFxcblxcXCIpO1xcbmZzL2hmc3BsdXMvYml0bWFwLmMtMTAxLVxcdFxcdGdvdG8gb3V0O1xcbi0tXFxuZnMvaGZzcGx1cy9iaXRtYXAuYy0xNTctXFx0aGZzcGx1c19tYXJrX21kYl9kaXJ0eShzYik7XFxuZnMvaGZzcGx1cy9iaXRtYXAuYzoxNTg6XFx0aGZzX2RiZyhcXFwic3RhcnQgJXUsIG1heCAldVxcXFxuXFxcIiwgc3RhcnQsICptYXgpO1xcbmZzL2hmc3BsdXMvYml0bWFwLmMtMTU5LW91dDpcXG4tLVxcbmZzL2hmc3BsdXMvYml0bWFwLmM9MTY0PWludCBoZnNwbHVzX2Jsb2NrX2ZyZWUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIG9mZnNldCwgdTMyIGNvdW50KVxcbi0tXFxuZnMvaGZzcGx1cy9iaXRtYXAuYy0xNzYtXFxuZnMvaGZzcGx1cy9iaXRtYXAuYzoxNzc6XFx0aGZzX2RiZyhcXFwib2Zmc2V0ICV1LCBjb3VudCAldVxcXFxuXFxcIiwgb2Zmc2V0LCBjb3VudCk7XFxuZnMvaGZzcGx1cy9iaXRtYXAuYy0xNzgtXFx0LyogYXJlIGFsbCBvZiB0aGUgYml0cyBpbiByYW5nZT8gKi9cXG4tLVxcbmZzL2hmc3BsdXMvYm5vZGUuYz0xNzI9dm9pZCBoZnNfYm5vZGVfY29weShzdHJ1Y3QgaGZzX2Jub2RlICpkc3Rfbm9kZSwgdTMyIGRzdCxcXG4tLVxcbmZzL2hmc3BsdXMvYm5vZGUuYy0xNzctXFxuZnMvaGZzcGx1cy9ibm9kZS5jOjE3ODpcXHRoZnNfZGJnKFxcXCJkc3QgJXUsIHNyYyAldSwgbGVuICV1XFxcXG5cXFwiLCBkc3QsIHNyYywgbGVuKTtcXG5mcy9oZnNwbHVzL2Jub2RlLmMtMTc5LVxcdGlmICghbGVuKVxcbi0tXFxuZnMvaGZzcGx1cy9ibm9kZS5jPTIzMD12b2lkIGhmc19ibm9kZV9tb3ZlKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsIHUzMiBkc3QsIHUzMiBzcmMsIHUzMiBsZW4pXFxuLS1cXG5mcy9oZnNwbHVzL2Jub2RlLmMtMjM1LVxcbmZzL2hmc3BsdXMvYm5vZGUuYzoyMzY6XFx0aGZzX2RiZyhcXFwiZHN0ICV1LCBzcmMgJXUsIGxlbiAldVxcXFxuXFxcIiwgZHN0LCBzcmMsIGxlbik7XFxuZnMvaGZzcGx1cy9ibm9kZS5jLTIzNy1cXHRpZiAoIWxlbilcXG4tLVxcbmZzL2hmc3BsdXMvYm5vZGUuYz0zNTA9dm9pZCBoZnNfYm5vZGVfZHVtcChzdHJ1Y3QgaGZzX2Jub2RlICpub2RlKVxcbi0tXFxuZnMvaGZzcGx1cy9ibm9kZS5jLTM1Ni1cXG5mcy9oZnNwbHVzL2Jub2RlLmM6MzU3OlxcdGhmc19kYmcoXFxcIm5vZGUgJWRcXFxcblxcXCIsIG5vZGUtXFx1MDAzZXRoaXMpO1xcbmZzL2hmc3BsdXMvYm5vZGUuYy0zNTgtXFx0aGZzX2Jub2RlX3JlYWQobm9kZSwgXFx1MDAyNmRlc2MsIDAsIHNpemVvZihkZXNjKSk7XFxuZnMvaGZzcGx1cy9ibm9kZS5jLTM1OS1cXHRudW1fcmVjcyA9IG5vZGUtXFx1MDAzZW51bV9yZWNzO1xcbmZzL2hmc3BsdXMvYm5vZGUuYzozNjA6XFx0aGZzX2RiZyhcXFwibmV4dCAlZCwgcHJldiAlZCwgdHlwZSAlZCwgaGVpZ2h0ICVkLCBudW1fcmVjcyAlZFxcXFxuXFxcIixcXG5mcy9oZnNwbHVzL2Jub2RlLmMtMzYxLVxcdFxcdGJlMzJfdG9fY3B1KGRlc2MubmV4dCksIGJlMzJfdG9fY3B1KGRlc2MucHJldiksXFxuLS1cXG5mcy9oZnNwbHVzL2Jub2RlLmMtMzY0LVxcdGlmICghaGZzX2Jub2RlX251bV9yZWNzX3ZhbGlkKG5vZGUpKSB7XFxuZnMvaGZzcGx1cy9ibm9kZS5jOjM2NTpcXHRcXHRoZnNfZGJnKFxcXCJpbnZhbGlkIG51bV9yZWNzICV1XFxcXG5cXFwiLCBudW1fcmVjcyk7XFxuZnMvaGZzcGx1cy9ibm9kZS5jLTM2Ni1cXHRcXHRyZXR1cm47XFxuLS1cXG5mcy9oZnNwbHVzL2Jub2RlLmMtMzcxLVxcdFxcdGtleV9vZmYgPSBoZnNfYm5vZGVfcmVhZF91MTYobm9kZSwgb2ZmKTtcXG5mcy9oZnNwbHVzL2Jub2RlLmM6MzcyOlxcdFxcdGhmc19kYmcoXFxcIiBrZXlfb2ZmICVkXFxcIiwga2V5X29mZik7XFxuZnMvaGZzcGx1cy9ibm9kZS5jLTM3My1cXHRcXHRpZiAoaSBcXHUwMDI2XFx1MDAyNiBub2RlLVxcdTAwM2V0eXBlID09IEhGU19OT0RFX0lOREVYKSB7XFxuLS1cXG5mcy9oZnNwbHVzL2Jub2RlLmMtMzgwLVxcdFxcdFxcdFxcdHRtcCA9IG5vZGUtXFx1MDAzZXRyZWUtXFx1MDAzZW1heF9rZXlfbGVuICsgMjtcXG5mcy9oZnNwbHVzL2Jub2RlLmM6MzgxOlxcdFxcdFxcdGhmc19kYmcoXFxcIiAoJWRcXFwiLCB0bXApO1xcbmZzL2hmc3BsdXMvYm5vZGUuYy0zODItXFx0XFx0XFx0aGZzX2Jub2RlX3JlYWQobm9kZSwgXFx1MDAyNmNuaWQsIGtleV9vZmYgKyB0bXAsIDQpO1xcbmZzL2hmc3BsdXMvYm5vZGUuYzozODM6XFx0XFx0XFx0aGZzX2RiZyhcXFwiLCBjbmlkICVkKVxcXCIsIGJlMzJfdG9fY3B1KGNuaWQpKTtcXG5mcy9oZnNwbHVzL2Jub2RlLmMtMzg0LVxcdFxcdH0gZWxzZSBpZiAoaSBcXHUwMDI2XFx1MDAyNiBub2RlLVxcdTAwM2V0eXBlID09IEhGU19OT0RFX0xFQUYpIHtcXG4tLVxcbmZzL2hmc3BsdXMvYm5vZGUuYy0zODctXFx0XFx0XFx0dG1wID0gaGZzX2Jub2RlX3JlYWRfdTE2KG5vZGUsIGtleV9vZmYpO1xcbmZzL2hmc3BsdXMvYm5vZGUuYzozODg6XFx0XFx0XFx0aGZzX2RiZyhcXFwiICglZClcXFwiLCB0bXApO1xcbmZzL2hmc3BsdXMvYm5vZGUuYy0zODktXFx0XFx0fVxcbmZzL2hmc3BsdXMvYm5vZGUuYy0zOTAtXFx0fVxcbmZzL2hmc3BsdXMvYm5vZGUuYzozOTE6XFx0aGZzX2RiZyhcXFwiXFxcXG5cXFwiKTtcXG5mcy9oZnNwbHVzL2Jub2RlLmMtMzkyLX1cXG4tLVxcbmZzL2hmc3BsdXMvYm5vZGUuYz0zOTQ9dm9pZCBoZnNfYm5vZGVfdW5saW5rKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUpXFxuLS1cXG5mcy9oZnNwbHVzL2Jub2RlLmMtNDI2LVxcdGlmICghbm9kZS1cXHUwMDNlcHJldiBcXHUwMDI2XFx1MDAyNiAhbm9kZS1cXHUwMDNlbmV4dClcXG5mcy9oZnNwbHVzL2Jub2RlLmM6NDI3OlxcdFxcdGhmc19kYmcoXFxcImJ0cmVlIGRlbGV0ZSBsZXZlbFxcXFxuXFxcIik7XFxuZnMvaGZzcGx1cy9ibm9kZS5jLTQyOC1cXHRpZiAoIW5vZGUtXFx1MDAzZXBhcmVudCkge1xcbi0tXFxuZnMvaGZzcGx1cy9ibm9kZS5jPTQ2Mj1zdGF0aWMgc3RydWN0IGhmc19ibm9kZSAqX19oZnNfYm5vZGVfY3JlYXRlKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUsIHUzMiBjbmlkKVxcbi0tXFxuZnMvaGZzcGx1cy9ibm9kZS5jLTQ4Mi1cXHRhdG9taWNfc2V0KFxcdTAwMjZub2RlLVxcdTAwM2VyZWZjbnQsIDEpO1xcbmZzL2hmc3BsdXMvYm5vZGUuYzo0ODM6XFx0aGZzX2RiZyhcXFwiY25pZCAlZCwgbm9kZSAlZCwgcmVmY250IDFcXFxcblxcXCIsXFxuZnMvaGZzcGx1cy9ibm9kZS5jLTQ4NC1cXHRcXHRub2RlLVxcdTAwM2V0cmVlLVxcdTAwM2VjbmlkLCBub2RlLVxcdTAwM2V0aGlzKTtcXG4tLVxcbmZzL2hmc3BsdXMvYm5vZGUuYz01MjA9dm9pZCBoZnNfYm5vZGVfdW5oYXNoKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUpXFxuLS1cXG5mcy9oZnNwbHVzL2Jub2RlLmMtNTIzLVxcbmZzL2hmc3BsdXMvYm5vZGUuYzo1MjQ6XFx0aGZzX2RiZyhcXFwiY25pZCAlZCwgbm9kZSAlZCwgcmVmY250ICVkXFxcXG5cXFwiLFxcbmZzL2hmc3BsdXMvYm5vZGUuYy01MjUtXFx0XFx0bm9kZS1cXHUwMDNldHJlZS1cXHUwMDNlY25pZCwgbm9kZS1cXHUwMDNldGhpcywgYXRvbWljX3JlYWQoXFx1MDAyNm5vZGUtXFx1MDAzZXJlZmNudCkpO1xcbi0tXFxuZnMvaGZzcGx1cy9ibm9kZS5jPTY2Nz12b2lkIGhmc19ibm9kZV9nZXQoc3RydWN0IGhmc19ibm9kZSAqbm9kZSlcXG4tLVxcbmZzL2hmc3BsdXMvYm5vZGUuYy02NzAtXFx0XFx0YXRvbWljX2luYyhcXHUwMDI2bm9kZS1cXHUwMDNlcmVmY250KTtcXG5mcy9oZnNwbHVzL2Jub2RlLmM6NjcxOlxcdFxcdGhmc19kYmcoXFxcImNuaWQgJWQsIG5vZGUgJWQsIHJlZmNudCAlZFxcXFxuXFxcIixcXG5mcy9oZnNwbHVzL2Jub2RlLmMtNjcyLVxcdFxcdFxcdG5vZGUtXFx1MDAzZXRyZWUtXFx1MDAzZWNuaWQsIG5vZGUtXFx1MDAzZXRoaXMsXFxuLS1cXG5mcy9oZnNwbHVzL2Jub2RlLmM9Njc4PXZvaWQgaGZzX2Jub2RlX3B1dChzdHJ1Y3QgaGZzX2Jub2RlICpub2RlKVxcbi0tXFxuZnMvaGZzcGx1cy9ibm9kZS5jLTY4My1cXG5mcy9oZnNwbHVzL2Jub2RlLmM6Njg0OlxcdFxcdGhmc19kYmcoXFxcImNuaWQgJWQsIG5vZGUgJWQsIHJlZmNudCAlZFxcXFxuXFxcIixcXG5mcy9oZnNwbHVzL2Jub2RlLmMtNjg1LVxcdFxcdFxcdG5vZGUtXFx1MDAzZXRyZWUtXFx1MDAzZWNuaWQsIG5vZGUtXFx1MDAzZXRoaXMsXFxuLS1cXG5mcy9oZnNwbHVzL2JyZWMuYz02OT1pbnQgaGZzX2JyZWNfaW5zZXJ0KHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCwgdm9pZCAqZW50cnksIHUzMiBlbnRyeV9sZW4pXFxuLS1cXG5mcy9oZnNwbHVzL2JyZWMuYy0xMDAtXFx0ZW5kX3JlY19vZmYgLT0gMjtcXG5mcy9oZnNwbHVzL2JyZWMuYzoxMDE6XFx0aGZzX2RiZyhcXFwicmVjICVkLCBzaXplICVkLCBlbmRfb2ZmICVkLCBlbmRfcmVjX29mZiAlZFxcXFxuXFxcIixcXG5mcy9oZnNwbHVzL2JyZWMuYy0xMDItXFx0XFx0cmVjLCBzaXplLCBlbmRfb2ZmLCBlbmRfcmVjX29mZik7XFxuLS1cXG5mcy9oZnNwbHVzL2JyZWMuYz0xODU9aW50IGhmc19icmVjX3JlbW92ZShzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpXFxuLS1cXG5mcy9oZnNwbHVzL2JyZWMuYy0yMDYtXFx0aGZzX2Jub2RlX2R1bXAobm9kZSk7XFxuZnMvaGZzcGx1cy9icmVjLmM6MjA3OlxcdGhmc19kYmcoXFxcInJlYyAlZCwgbGVuICVkXFxcXG5cXFwiLFxcbmZzL2hmc3BsdXMvYnJlYy5jLTIwOC1cXHRcXHRmZC1cXHUwMDNlcmVjb3JkLCBmZC1cXHUwMDNla2V5bGVuZ3RoICsgZmQtXFx1MDAzZWVudHJ5bGVuZ3RoKTtcXG4tLVxcbmZzL2hmc3BsdXMvYnJlYy5jPTI0Nj1zdGF0aWMgc3RydWN0IGhmc19ibm9kZSAqaGZzX2Jub2RlX3NwbGl0KHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZClcXG4tLVxcbmZzL2hmc3BsdXMvYnJlYy5jLTI2Mi1cXHRoZnNfYm5vZGVfZ2V0KG5vZGUpO1xcbmZzL2hmc3BsdXMvYnJlYy5jOjI2MzpcXHRoZnNfZGJnKFxcXCJ0aGlzICVkIC0gbmV3ICVkIC0gbmV4dCAlZFxcXFxuXFxcIixcXG5mcy9oZnNwbHVzL2JyZWMuYy0yNjQtXFx0XFx0bm9kZS1cXHUwMDNldGhpcywgbmV3X25vZGUtXFx1MDAzZXRoaXMsIG5vZGUtXFx1MDAzZW5leHQpO1xcbi0tXFxuZnMvaGZzcGx1cy9icmVjLmM9Mzc1PXN0YXRpYyBpbnQgaGZzX2JyZWNfdXBkYXRlX3BhcmVudChzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpXFxuLS1cXG5mcy9oZnNwbHVzL2JyZWMuYy00MDQtXFx0XFx0ZmQtXFx1MDAzZWtleWxlbmd0aCA9IG5ld2tleWxlbiA9IHRyZWUtXFx1MDAzZW1heF9rZXlfbGVuICsgMjtcXG5mcy9oZnNwbHVzL2JyZWMuYzo0MDU6XFx0aGZzX2RiZyhcXFwicmVjICVkLCBrZXlsZW5ndGggJWQsIG5ld2tleWxlbiAlZFxcXFxuXFxcIixcXG5mcy9oZnNwbHVzL2JyZWMuYy00MDYtXFx0XFx0cmVjLCBmZC1cXHUwMDNla2V5bGVuZ3RoLCBuZXdrZXlsZW4pO1xcbi0tXFxuZnMvaGZzcGx1cy9icmVjLmMtNDE2LVxcbmZzL2hmc3BsdXMvYnJlYy5jOjQxNzpcXHRcXHRcXHRoZnNfZGJnKFxcXCJzcGxpdHRpbmcgaW5kZXggbm9kZVxcXFxuXFxcIik7XFxuZnMvaGZzcGx1cy9icmVjLmMtNDE4LVxcdFxcdFxcdGZkLVxcdTAwM2Vibm9kZSA9IHBhcmVudDtcXG4tLVxcbmZzL2hmc3BsdXMvYnRyZWUuYz01Mjg9c3RydWN0IGhmc19ibm9kZSAqaGZzX2JtYXBfYWxsb2Moc3RydWN0IGhmc19idHJlZSAqdHJlZSlcXG4tLVxcbmZzL2hmc3BsdXMvYnRyZWUuYy01ODgtXFx0XFx0aWYgKCFuaWR4KSB7XFxuZnMvaGZzcGx1cy9idHJlZS5jOjU4OTpcXHRcXHRcXHRoZnNfZGJnKFxcXCJjcmVhdGUgbmV3IGJtYXAgbm9kZVxcXFxuXFxcIik7XFxuZnMvaGZzcGx1cy9idHJlZS5jLTU5MC1cXHRcXHRcXHRuZXh0X25vZGUgPSBoZnNfYm1hcF9uZXdfYm1hcChub2RlLCBpZHgpO1xcbi0tXFxuZnMvaGZzcGx1cy9idHJlZS5jPTYwOT12b2lkIGhmc19ibWFwX2ZyZWUoc3RydWN0IGhmc19ibm9kZSAqbm9kZSlcXG4tLVxcbmZzL2hmc3BsdXMvYnRyZWUuYy02MTUtXFxuZnMvaGZzcGx1cy9idHJlZS5jOjYxNjpcXHRoZnNfZGJnKFxcXCJub2RlICV1XFxcXG5cXFwiLCBub2RlLVxcdTAwM2V0aGlzKTtcXG5mcy9oZnNwbHVzL2J0cmVlLmMtNjE3LVxcdEJVR19PTighbm9kZS1cXHUwMDNldGhpcyk7XFxuLS1cXG5mcy9oZnNwbHVzL2NhdGFsb2cuYz0yNTM9aW50IGhmc3BsdXNfY3JlYXRlX2NhdCh1MzIgY25pZCwgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9oZnNwbHVzL2NhdGFsb2cuYy0yNjEtXFxuZnMvaGZzcGx1cy9jYXRhbG9nLmM6MjYyOlxcdGhmc19kYmcoXFxcIm5hbWUgJXMsIGNuaWQgJXUsIGlfbmxpbmsgJWRcXFxcblxcXCIsXFxuZnMvaGZzcGx1cy9jYXRhbG9nLmMtMjYzLVxcdFxcdHN0ci1cXHUwMDNlbmFtZSwgY25pZCwgaW5vZGUtXFx1MDAzZWlfbmxpbmspO1xcbi0tXFxuZnMvaGZzcGx1cy9jYXRhbG9nLmM9MzMxPWludCBoZnNwbHVzX2RlbGV0ZV9jYXQodTMyIGNuaWQsIHN0cnVjdCBpbm9kZSAqZGlyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqc3RyKVxcbi0tXFxuZnMvaGZzcGx1cy9jYXRhbG9nLmMtMzM4LVxcbmZzL2hmc3BsdXMvY2F0YWxvZy5jOjMzOTpcXHRoZnNfZGJnKFxcXCJuYW1lICVzLCBjbmlkICV1XFxcXG5cXFwiLCBzdHIgPyBzdHItXFx1MDAzZW5hbWUgOiBOVUxMLCBjbmlkKTtcXG5mcy9oZnNwbHVzL2NhdGFsb2cuYy0zNDAtXFx0ZXJyID0gaGZzX2ZpbmRfaW5pdChIRlNQTFVTX1NCKHNiKS1cXHUwMDNlY2F0X3RyZWUsIFxcdTAwMjZmZCk7XFxuLS1cXG5mcy9oZnNwbHVzL2NhdGFsb2cuYz00MjU9aW50IGhmc3BsdXNfcmVuYW1lX2NhdCh1MzIgY25pZCxcXG4tLVxcbmZzL2hmc3BsdXMvY2F0YWxvZy5jLTQzNC1cXG5mcy9oZnNwbHVzL2NhdGFsb2cuYzo0MzU6XFx0aGZzX2RiZyhcXFwiY25pZCAldSAtIGlubyAlbGx1LCBuYW1lICVzIC0gaW5vICVsbHUsIG5hbWUgJXNcXFxcblxcXCIsXFxuZnMvaGZzcGx1cy9jYXRhbG9nLmMtNDM2LVxcdFxcdGNuaWQsIHNyY19kaXItXFx1MDAzZWlfaW5vLCBzcmNfbmFtZS1cXHUwMDNlbmFtZSxcXG4tLVxcbmZzL2hmc3BsdXMvZGlyLmM9Mjk0PXN0YXRpYyBpbnQgaGZzcGx1c19saW5rKHN0cnVjdCBkZW50cnkgKnNyY19kZW50cnksIHN0cnVjdCBpbm9kZSAqZHN0X2RpcixcXG4tLVxcbmZzL2hmc3BsdXMvZGlyLmMtMzA5LVxcbmZzL2hmc3BsdXMvZGlyLmM6MzEwOlxcdGhmc19kYmcoXFxcInNyY19kaXItXFx1MDAzZWlfaW5vICVsbHUsIGRzdF9kaXItXFx1MDAzZWlfaW5vICVsbHUsIGlub2RlLVxcdTAwM2VpX2lubyAlbGx1XFxcXG5cXFwiLFxcbmZzL2hmc3BsdXMvZGlyLmMtMzExLVxcdFxcdHNyY19kaXItXFx1MDAzZWlfaW5vLCBkc3RfZGlyLVxcdTAwM2VpX2lubywgaW5vZGUtXFx1MDAzZWlfaW5vKTtcXG4tLVxcbmZzL2hmc3BsdXMvZGlyLmM9MzcwPXN0YXRpYyBpbnQgaGZzcGx1c191bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4tLVxcbmZzL2hmc3BsdXMvZGlyLmMtMzgxLVxcbmZzL2hmc3BsdXMvZGlyLmM6MzgyOlxcdGhmc19kYmcoXFxcImRpci1cXHUwMDNlaV9pbm8gJWxsdSwgaW5vZGUtXFx1MDAzZWlfaW5vICVsbHVcXFxcblxcXCIsXFxuZnMvaGZzcGx1cy9kaXIuYy0zODMtXFx0XFx0ZGlyLVxcdTAwM2VpX2lubywgaW5vZGUtXFx1MDAzZWlfaW5vKTtcXG4tLVxcbmZzL2hmc3BsdXMvZGlyLmM9NDYzPXN0YXRpYyBpbnQgaGZzcGx1c19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL2hmc3BsdXMvZGlyLmMtNDc0LVxcbmZzL2hmc3BsdXMvZGlyLmM6NDc1OlxcdGhmc19kYmcoXFxcImRpci1cXHUwMDNlaV9pbm8gJWxsdSwgaW5vZGUtXFx1MDAzZWlfaW5vICVsbHVcXFxcblxcXCIsXFxuZnMvaGZzcGx1cy9kaXIuYy00NzYtXFx0XFx0ZGlyLVxcdTAwM2VpX2lubywgaW5vZGUtXFx1MDAzZWlfaW5vKTtcXG4tLVxcbmZzL2hmc3BsdXMvZGlyLmM9NTE0PXN0YXRpYyBpbnQgaGZzcGx1c19ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9oZnNwbHVzL2Rpci5jLTUyNS1cXG5mcy9oZnNwbHVzL2Rpci5jOjUyNjpcXHRoZnNfZGJnKFxcXCJkaXItXFx1MDAzZWlfaW5vICVsbHUsIGlub2RlLVxcdTAwM2VpX2lubyAlbGx1XFxcXG5cXFwiLFxcbmZzL2hmc3BsdXMvZGlyLmMtNTI3LVxcdFxcdGRpci1cXHUwMDNlaV9pbm8sIGlub2RlLVxcdTAwM2VpX2lubyk7XFxuLS1cXG5mcy9oZnNwbHVzL2V4dGVudHMuYz0yMjc9aW50IGhmc3BsdXNfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGlibG9jayxcXG4tLVxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTI3OS1kb25lOlxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jOjI4MDpcXHRoZnNfZGJnKFxcXCJpbm8gJWxsdSwgaWJsb2NrICVsbHUgLSBkYmxvY2sgJXVcXFxcblxcXCIsXFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMjgxLVxcdFxcdGlub2RlLVxcdTAwM2VpX2lubywgKGxvbmcgbG9uZylpYmxvY2ssIGRibG9jayk7XFxuLS1cXG5mcy9oZnNwbHVzL2V4dGVudHMuYz0yOTk9c3RhdGljIHZvaWQgaGZzcGx1c19kdW1wX2V4dGVudChzdHJ1Y3QgaGZzcGx1c19leHRlbnQgKmV4dGVudClcXG4tLVxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTMwMi1cXG5mcy9oZnNwbHVzL2V4dGVudHMuYzozMDM6XFx0aGZzX2RiZyhcXFwiZXh0ZW50ICAgXFxcIik7XFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMzA0LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyA4OyBpKyspXFxuZnMvaGZzcGx1cy9leHRlbnRzLmM6MzA1OlxcdFxcdGhmc19kYmcoXFxcIiBzdGFydF9ibG9jayAldSwgYmxvY2tfY291bnQgJXVcXFwiLFxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTMwNi1cXHRcXHRcXHRiZTMyX3RvX2NwdShleHRlbnRbaV0uc3RhcnRfYmxvY2spLFxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTMwNy1cXHRcXHRcXHRiZTMyX3RvX2NwdShleHRlbnRbaV0uYmxvY2tfY291bnQpKTtcXG5mcy9oZnNwbHVzL2V4dGVudHMuYzozMDg6XFx0aGZzX2RiZyhcXFwiXFxcXG5cXFwiKTtcXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0zMDktfVxcbi0tXFxuZnMvaGZzcGx1cy9leHRlbnRzLmM9NDM4PWludCBoZnNwbHVzX2ZpbGVfZXh0ZW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGJvb2wgemVyb291dClcXG4tLVxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTQ4MC1cXG5mcy9oZnNwbHVzL2V4dGVudHMuYzo0ODE6XFx0aGZzX2RiZyhcXFwiaW5vICVsbHUsIHN0YXJ0ICV1LCBsZW4gJXVcXFxcblxcXCIsIGlub2RlLVxcdTAwM2VpX2lubywgc3RhcnQsIGxlbik7XFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtNDgyLVxcbi0tXFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtNDg0LVxcdFxcdGlmICghaGlwLVxcdTAwM2VmaXJzdF9ibG9ja3MpIHtcXG5mcy9oZnNwbHVzL2V4dGVudHMuYzo0ODU6XFx0XFx0XFx0aGZzX2RiZyhcXFwiZmlyc3RfZXh0ZW50OiBzdGFydCAldSwgbGVuICV1XFxcXG5cXFwiLFxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTQ4Ni1cXHRcXHRcXHRcXHRzdGFydCwgbGVuKTtcXG4tLVxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTUyNi1pbnNlcnRfZXh0ZW50OlxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jOjUyNzpcXHRoZnNfZGJnKFxcXCJpbnNlcnQgbmV3IGV4dGVudFxcXFxuXFxcIik7XFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtNTI4LVxcdHJlcyA9IGhmc3BsdXNfZXh0X3dyaXRlX2V4dGVudF9sb2NrZWQoaW5vZGUpO1xcbi0tXFxuZnMvaGZzcGx1cy9leHRlbnRzLmM9NTQ0PXZvaWQgaGZzcGx1c19maWxlX3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9oZnNwbHVzL2V4dGVudHMuYy01NTEtXFxuZnMvaGZzcGx1cy9leHRlbnRzLmM6NTUyOlxcdGhmc19kYmcoXFxcImlubyAlbGx1LCBwaHlzX3NpemUgJWxsdSAtXFx1MDAzZSBpX3NpemUgJWxsdVxcXFxuXFxcIixcXG5mcy9oZnNwbHVzL2V4dGVudHMuYy01NTMtXFx0XFx0aW5vZGUtXFx1MDAzZWlfaW5vLCAobG9uZyBsb25nKWhpcC1cXHUwMDNlcGh5c19zaXplLCBpbm9kZS1cXHUwMDNlaV9zaXplKTtcXG4tLVxcbmZzL2hmc3BsdXMvaW5vZGUuYz0zNTY9aW50IGhmc3BsdXNfZmlsZV9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLFxcbi0tXFxuZnMvaGZzcGx1cy9pbm9kZS5jLTM2NS1cXG5mcy9oZnNwbHVzL2lub2RlLmM6MzY2OlxcdGhmc19kYmcoXFxcImlub2RlLVxcdTAwM2VpX2lubyAlbGx1LCBzdGFydCAlbGx1LCBlbmQgJWxsdVxcXFxuXFxcIixcXG5mcy9oZnNwbHVzL2lub2RlLmMtMzY3LVxcdFxcdGlub2RlLVxcdTAwM2VpX2lubywgc3RhcnQsIGVuZCk7XFxuLS1cXG5mcy9oZnNwbHVzL2lub2RlLmM9Njc3PWludCBoZnNwbHVzX2NhdF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvaGZzcGx1cy9pbm9kZS5jLTY4NC1cXG5mcy9oZnNwbHVzL2lub2RlLmM6Njg1OlxcdGhmc19kYmcoXFxcImlub2RlLVxcdTAwM2VpX2lubyAlbGx1XFxcXG5cXFwiLCBpbm9kZS1cXHUwMDNlaV9pbm8pO1xcbmZzL2hmc3BsdXMvaW5vZGUuYy02ODYtXFxuLS1cXG5mcy9oZnNwbHVzL3N1cGVyLmM9MTY4PXN0YXRpYyBpbnQgaGZzcGx1c193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvaGZzcGx1cy9zdXBlci5jLTE3Mi1cXG5mcy9oZnNwbHVzL3N1cGVyLmM6MTczOlxcdGhmc19kYmcoXFxcImlubyAlbGx1XFxcXG5cXFwiLCBpbm9kZS1cXHUwMDNlaV9pbm8pO1xcbmZzL2hmc3BsdXMvc3VwZXIuYy0xNzQtXFxuLS1cXG5mcy9oZnNwbHVzL3N1cGVyLmM9MTg2PXN0YXRpYyB2b2lkIGhmc3BsdXNfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG5mcy9oZnNwbHVzL3N1cGVyLmMtMTg3LXtcXG5mcy9oZnNwbHVzL3N1cGVyLmM6MTg4OlxcdGhmc19kYmcoXFxcImlubyAlbGx1XFxcXG5cXFwiLCBpbm9kZS1cXHUwMDNlaV9pbm8pO1xcbmZzL2hmc3BsdXMvc3VwZXIuYy0xODktXFx0dHJ1bmNhdGVfaW5vZGVfcGFnZXNfZmluYWwoXFx1MDAyNmlub2RlLVxcdTAwM2VpX2RhdGEpO1xcbi0tXFxuZnMvaGZzcGx1cy9zdXBlci5jPTE5Nz1pbnQgaGZzcGx1c19jb21taXRfc3VwZXJibG9jayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvaGZzcGx1cy9zdXBlci5jLTIwMy1cXG5mcy9oZnNwbHVzL3N1cGVyLmM6MjA0OlxcdGhmc19kYmcoXFxcInN0YXJ0aW5nLi4uXFxcXG5cXFwiKTtcXG5mcy9oZnNwbHVzL3N1cGVyLmMtMjA1LVxcbi0tXFxuZnMvaGZzcGx1cy9zdXBlci5jLTIxMi1cXG5mcy9oZnNwbHVzL3N1cGVyLmM6MjEzOlxcdGhmc19kYmcoXFxcImZyZWVfYmxvY2tzICV1LCBuZXh0X2NuaWQgJXUsIGZvbGRlcl9jb3VudCAldSwgZmlsZV9jb3VudCAldVxcXFxuXFxcIixcXG5mcy9oZnNwbHVzL3N1cGVyLmMtMjE0LVxcdFxcdHNiaS1cXHUwMDNlZnJlZV9ibG9ja3MsIHNiaS1cXHUwMDNlbmV4dF9jbmlkLFxcbi0tXFxuZnMvaGZzcGx1cy9zdXBlci5jLTIzOC1cXG5mcy9oZnNwbHVzL3N1cGVyLmM6MjM5OlxcdGhmc19kYmcoXFxcImZpbmlzaGVkOiBlcnIgJWRcXFxcblxcXCIsIGVycm9yKTtcXG5mcy9oZnNwbHVzL3N1cGVyLmMtMjQwLVxcbi0tXFxuZnMvaGZzcGx1cy9zdXBlci5jPTI0ND1zdGF0aWMgaW50IGhmc3BsdXNfc3luY19mcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgd2FpdClcXG4tLVxcbmZzL2hmc3BsdXMvc3VwZXIuYy0yNTEtXFxuZnMvaGZzcGx1cy9zdXBlci5jOjI1MjpcXHRoZnNfZGJnKFxcXCJzdGFydGluZy4uLlxcXFxuXFxcIik7XFxuZnMvaGZzcGx1cy9zdXBlci5jLTI1My1cXG4tLVxcbmZzL2hmc3BsdXMvc3VwZXIuYy0yODItXFxuZnMvaGZzcGx1cy9zdXBlci5jOjI4MzpcXHRoZnNfZGJnKFxcXCJmaW5pc2hlZDogZXJyICVkXFxcXG5cXFwiLCBlcnJvcik7XFxuZnMvaGZzcGx1cy9zdXBlci5jLTI4NC1cXG4tLVxcbmZzL2hmc3BsdXMvc3VwZXIuYz0zMjk9c3RhdGljIHZvaWQgaGZzcGx1c19wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2hmc3BsdXMvc3VwZXIuYy0zMzItXFxuZnMvaGZzcGx1cy9zdXBlci5jOjMzMzpcXHRoZnNfZGJnKFxcXCJzdGFydGluZy4uLlxcXFxuXFxcIik7XFxuZnMvaGZzcGx1cy9zdXBlci5jLTMzNC1cXG4tLVxcbmZzL2hmc3BsdXMvc3VwZXIuYy0zNTMtXFx0a2ZyZWUoc2JpLVxcdTAwM2VzX2JhY2t1cF92aGRyX2J1Zik7XFxuZnMvaGZzcGx1cy9zdXBlci5jOjM1NDpcXHRoZnNfZGJnKFxcXCJmaW5pc2hlZFxcXFxuXFxcIik7XFxuZnMvaGZzcGx1cy9zdXBlci5jLTM1NS19XFxuLS1cXG5mcy9oZnNwbHVzL3hhdHRyLmM9NTM9c3RhdGljIHUzMiBoZnNwbHVzX2luaXRfaGVhZGVyX25vZGUoc3RydWN0IGlub2RlICphdHRyX2ZpbGUsXFxuLS1cXG5mcy9oZnNwbHVzL3hhdHRyLmMtNjctXFxuZnMvaGZzcGx1cy94YXR0ci5jOjY4OlxcdGhmc19kYmcoXFxcImNsdW1wICV1LCBub2RlX3NpemUgJXVcXFxcblxcXCIsXFxuZnMvaGZzcGx1cy94YXR0ci5jLTY5LVxcdFxcdGNsdW1wX3NpemUsIG5vZGVfc2l6ZSk7XFxuLS1cXG5mcy9oZnNwbHVzL3hhdHRyLmM9MTk4PXN0YXRpYyBpbnQgaGZzcGx1c19jcmVhdGVfYXR0cmlidXRlc19maWxlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9oZnNwbHVzL3hhdHRyLmMtMjEzLVxcbmZzL2hmc3BsdXMveGF0dHIuYzoyMTQ6XFx0aGZzX2RiZyhcXFwiaW5vICVkXFxcXG5cXFwiLCBIRlNQTFVTX0FUVFJfQ05JRCk7XFxuZnMvaGZzcGx1cy94YXR0ci5jLTIxNS1cXG4tLVxcbmZzL2hmc3BsdXMveGF0dHIuYz0zNTE9aW50IF9faGZzcGx1c19zZXR4YXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLFxcbi0tXFxuZnMvaGZzcGx1cy94YXR0ci5jLTM2MC1cXG5mcy9oZnNwbHVzL3hhdHRyLmM6MzYxOlxcdGhmc19kYmcoXFxcImlubyAlbGx1LCBuYW1lICVzLCB2YWx1ZSAlcCwgc2l6ZSAlenVcXFxcblxcXCIsXFxuZnMvaGZzcGx1cy94YXR0ci5jLTM2Mi1cXHRcXHRpbm9kZS1cXHUwMDNlaV9pbm8sIG5hbWUgPyBuYW1lIDogTlVMTCxcXG4tLVxcbmZzL2hmc3BsdXMveGF0dHIuYy00NDMtXFx0XFx0aWYgKGVycikge1xcbmZzL2hmc3BsdXMveGF0dHIuYzo0NDQ6XFx0XFx0XFx0aGZzX2RiZyhcXFwidW5hYmxlIHRvIHJlcGxhY2UgeGF0dHI6IGVyciAlZFxcXFxuXFxcIiwgZXJyKTtcXG5mcy9oZnNwbHVzL3hhdHRyLmMtNDQ1LVxcdFxcdFxcdGdvdG8gZW5kX3NldHhhdHRyO1xcbi0tXFxuZnMvaGZzcGx1cy94YXR0ci5jLTQ1NC1cXHRcXHRpZiAoZXJyKSB7XFxuZnMvaGZzcGx1cy94YXR0ci5jOjQ1NTpcXHRcXHRcXHRoZnNfZGJnKFxcXCJ1bmFibGUgdG8gc3RvcmUgdmFsdWU6IGVyciAlZFxcXFxuXFxcIiwgZXJyKTtcXG5mcy9oZnNwbHVzL3hhdHRyLmMtNDU2LVxcdFxcdFxcdGdvdG8gZW5kX3NldHhhdHRyO1xcbi0tXFxuZnMvaGZzcGx1cy94YXR0ci5jLTQ5Ni1cXHRoZnNfZmluZF9leGl0KFxcdTAwMjZjYXRfZmQpO1xcbmZzL2hmc3BsdXMveGF0dHIuYzo0OTc6XFx0aGZzX2RiZyhcXFwiZmluaXNoZWQ6IHJlcyAlZFxcXFxuXFxcIiwgZXJyKTtcXG5mcy9oZnNwbHVzL3hhdHRyLmMtNDk4LVxcdHJldHVybiBlcnI7XFxuLS1cXG5mcy9oZnNwbHVzL3hhdHRyLmM9NTM0PWludCBoZnNwbHVzX3NldHhhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsXFxuLS1cXG5mcy9oZnNwbHVzL3hhdHRyLmMtNTQyLVxcbmZzL2hmc3BsdXMveGF0dHIuYzo1NDM6XFx0aGZzX2RiZyhcXFwiaW5vICVsbHUsIG5hbWUgJXMsIHByZWZpeCAlcywgcHJlZml4bGVuICV6dSwgXFxcIlxcbmZzL2hmc3BsdXMveGF0dHIuYy01NDQtXFx0XFx0XFxcInZhbHVlICVwLCBzaXplICV6dVxcXFxuXFxcIixcXG4tLVxcbmZzL2hmc3BsdXMveGF0dHIuYy01NTYtXFxuZnMvaGZzcGx1cy94YXR0ci5jOjU1NzpcXHRoZnNfZGJnKFxcXCJmaW5pc2hlZDogcmVzICVkXFxcXG5cXFwiLCByZXMpO1xcbmZzL2hmc3BsdXMveGF0dHIuYy01NTgtXFxuLS1cXG5mcy9oZnNwbHVzL3hhdHRyLmM9Njk2PXNzaXplX3QgaGZzcGx1c19nZXR4YXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLFxcbi0tXFxuZnMvaGZzcGx1cy94YXR0ci5jLTcwMi1cXG5mcy9oZnNwbHVzL3hhdHRyLmM6NzAzOlxcdGhmc19kYmcoXFxcImlubyAlbGx1LCBuYW1lICVzLCBwcmVmaXggJXNcXFxcblxcXCIsXFxuZnMvaGZzcGx1cy94YXR0ci5jLTcwNC1cXHRcXHRpbm9kZS1cXHUwMDNlaV9pbm8sIG5hbWUgPyBuYW1lIDogTlVMTCxcXG4tLVxcbmZzL2hmc3BsdXMveGF0dHIuYy03MTctXFxuZnMvaGZzcGx1cy94YXR0ci5jOjcxODpcXHRoZnNfZGJnKFxcXCJmaW5pc2hlZDogcmVzICVkXFxcXG5cXFwiLCByZXMpO1xcbmZzL2hmc3BsdXMveGF0dHIuYy03MTktXFxuLS1cXG5mcy9oZnNwbHVzL3hhdHRyLmM9ODAyPXNzaXplX3QgaGZzcGx1c19saXN0eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjaGFyICpidWZmZXIsIHNpemVfdCBzaXplKVxcbi0tXFxuZnMvaGZzcGx1cy94YXR0ci5jLTgxMi1cXG5mcy9oZnNwbHVzL3hhdHRyLmM6ODEzOlxcdGhmc19kYmcoXFxcImlubyAlbGx1XFxcXG5cXFwiLCBpbm9kZS1cXHUwMDNlaV9pbm8pO1xcbmZzL2hmc3BsdXMveGF0dHIuYy04MTQtXFxuLS1cXG5mcy9oZnNwbHVzL3hhdHRyLmMtOTAwLVxcbmZzL2hmc3BsdXMveGF0dHIuYzo5MDE6XFx0aGZzX2RiZyhcXFwiZmluaXNoZWQ6IHJlcyAlemRcXFxcblxcXCIsIHJlcyk7XFxuZnMvaGZzcGx1cy94YXR0ci5jLTkwMi1cXG4tLVxcbmZzL2hmc3BsdXMveGF0dHIuYz05MDY9c3RhdGljIGludCBoZnNwbHVzX3JlbW92ZXhhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUpXFxuLS1cXG5mcy9oZnNwbHVzL3hhdHRyLmMtOTE0LVxcbmZzL2hmc3BsdXMveGF0dHIuYzo5MTU6XFx0aGZzX2RiZyhcXFwiaW5vICVsbHUsIG5hbWUgJXNcXFxcblxcXCIsXFxuZnMvaGZzcGx1cy94YXR0ci5jLTkxNi1cXHRcXHRpbm9kZS1cXHUwMDNlaV9pbm8sIG5hbWUgPyBuYW1lIDogTlVMTCk7XFxuLS1cXG5mcy9oZnNwbHVzL3hhdHRyLmMtOTg0LVxcbmZzL2hmc3BsdXMveGF0dHIuYzo5ODU6XFx0aGZzX2RiZyhcXFwiZmluaXNoZWQ6IGVyciAlZFxcXFxuXFxcIiwgZXJyKTtcXG5mcy9oZnNwbHVzL3hhdHRyLmMtOTg2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQxMjo1NTo1NS4wMDMyNzY2MjhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTMzMjE5MzA3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSEZTKyBDb2RlIGZvciBEZWJ1Z2dpbmcgRm9jdXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IHNlZSBhIG1hY3JvLCBgaGZzX2RiZ2AsIHVzZWQgZXZlcnl3aGVyZS4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgYnV0IHdhaXQsIGBoZnNfYm5vZGVfZHVtcGAgaXMgZGVmaW5lZCB1bmNvbmRpdGlvbmFsbHkhIFRoYXQncyBpbnRlcmVzdGluZywgYW5kIGl0IGxvb2tzIGxpa2UgaXQncyBwcmltYXJpbHkgdXNlZCBmb3IgZGVidWdnaW5nLiBMZXQncyBtYWtlIGEgbWVudGFsIG5vdGUgdG8gY2hlY2sgaWYgYGhmc19ibm9kZV9kdW1wYCBpcyBhIGdvb2Qgc3ltYm9sIHRvIGZvY3VzIG9uIHdoZW4gSSdtIGRlYnVnZ2luZyB0aGlzLlxuXG5CZXlvbmQgdGhhdCwgSSBzZWUgYSBidW5jaCBvZiBvdGhlciBmdW5jdGlvbnMgdGhhdCBzZWVtIHJlYWxseSBpbXBvcnRhbnQuIFRoZXkncmUgYWxsIGZ1bmN0aW9uYWwsIHNvIHRoZXkncmUgc29saWQgY2FuZGlkYXRlczogYF9faGZzX2JyZWNfZmluZGAsIGBoZnNfYnJlY19maW5kYCwgYGhmc19ibm9kZV9maW5kYCwgYGhmc19icmVjX2xlbm9mZmAsIGBoZnNfYnJlY19rZXlsZW5gLCBhbmQgYGhmc19icmVjX3JlbW92ZWAuIEkgc2hvdWxkIHByb2JhYmx5IG1ha2UgYSBsaXN0IGp1c3QgdG8ga2VlcCB0aGVtIHN0cmFpZ2h0OlxuXG4qICAgYF9faGZzX2JyZWNfZmluZGBcbiogICBgaGZzX2JyZWNfZmluZGBcbiogICBgaGZzX2Jub2RlX2ZpbmRgXG4qICAgYGhmc19icmVjX2xlbm9mZmBcbiogICBgaGZzX2JyZWNfa2V5bGVuYFxuKiAgIGBoZnNfYnJlY19yZW1vdmVgXG5cbk5vdywgYmVmb3JlIEkgZGlnIGluLCBJIG5lZWQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgbWlnaHQgYWZmZWN0IHdoYXQgSSdtIHNlZWluZy4gQWgsIHllcywgYEhGU1BMVVNfRlNgIGlzIHRoZSBtYWluIG9uZSB0aGF0IGp1bXBzIG91dC4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGNvbmZpZ3MgdGhhdCBjb3VsZCBiZSByZWxldmFudC4gVGhhdCdzIGFsd2F5cyBhIGdvb2QgcHJhY3RpY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MjYwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDEyOjU2OjAwLjMzNTQ3MjIxOFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI0MTI4NDcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBIRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvaGZzcGx1cy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2hmc3BsdXMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2hmc3BsdXMvS2NvbmZpZzoyOmNvbmZpZyBIRlNQTFVTX0ZTXFxuZnMvaGZzcGx1cy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkFwcGxlIEV4dGVuZGVkIEhGUyBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvaGZzcGx1cy9LY29uZmlnLTE3LVxcbmZzL2hmc3BsdXMvS2NvbmZpZzoxODpjb25maWcgSEZTUExVU19LVU5JVF9URVNUXFxuZnMvaGZzcGx1cy9LY29uZmlnLTE5LVxcdHRyaXN0YXRlIFxcXCJLVW5pdCB0ZXN0cyBmb3IgSEZTKyBmaWxlc3lzdGVtXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDEyOjU2OjAwLjY1OTYwNjk4OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODA3MzAwMzYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEhGUysgQi1UcmVlIEJvdW5kcyBDaGVjayBQYXRjaCoqXG5cbk9rYXksIEkndmUgcmV2aWV3ZWQgdGhlIHBhdGNoIGFuZCBJJ20gc2F0aXNmaWVkLiBgSEZTUExVU19GU2AgaXMgc3VmZmljaWVudCBmb3IgdGhpcyBvbmUuIExldCdzIG1ha2Ugc3VyZSBJJ3ZlIGdvdCB0aGlzIHN0cmFpZ2h0LiBUaGlzIHBhdGNoIGludHJvZHVjZXMgYm91bmRzIGNoZWNraW5nIHdpdGhpbiB0aGUgSEZTKyBiLXRyZWUgb3BlcmF0aW9ucy4gSXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBzcGVjaWZpY2FsbHkgaW4gaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBhbmQgcGFyc2VzIEhGUysgaW1hZ2VzLiBUaGlzIGNsZWFybHkgbWVhbnMgaXQncyBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLlxuXG5NeSBmb2N1cyBzeW1ib2xzIGFyZSBhcyBmb2xsb3dzOiBgX19oZnNfYnJlY19maW5kYCwgYGhmc19icmVjX2ZpbmRgLCBgaGZzX2Jub2RlX2ZpbmRgLCBgaGZzX2JyZWNfbGVub2ZmYCwgYGhmc19icmVjX2tleWxlbmAsIGFuZCBgaGZzX2JyZWNfcmVtb3ZlYC5cblxuVGhlIHBhdGNoJ3MgaW50ZW50IGlzIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcyBhbmQgd3JpdGVzLiBUaGlzIGlzIGFjaGlldmVkIGJ5IHZhbGlkYXRpbmcgdGhlIGItdHJlZSBub2RlIGFuZCByZWNvcmQgaGFuZGxpbmcuIFRoaXMgaXMgcGFydGljdWxhcmx5IGltcG9ydGFudCBmb3IgY29ycnVwdGVkIGZpbGVzeXN0ZW0gaW1hZ2VzLiBJdCdzIHRyaWdnZXJlZCBieSBtb3VudGluZyBhbmQgaW50ZXJhY3Rpbmcgd2l0aCBIRlMrIGltYWdlcywgbWVhbmluZyBJIGNhbiBwb3RlbnRpYWxseSB0cmlnZ2VyIGl0IHdpdGggY3JhZnRlZCBpbnB1dC4gSSdtIGdvaW5nIHRvIGNhbGwgYHNldC1yZXN1bHRzYCBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MDU3LCJPdXRwdXRUb2tlbnMiOjE1OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQxMjo1NjowNi40NjY5MDk2N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxNzA3NjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIRlNQTFVTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19oZnNfYnJlY19maW5kXCIsXG4gICAgXCJoZnNfYnJlY19maW5kXCIsXG4gICAgXCJoZnNfYm5vZGVfZmluZFwiLFxuICAgIFwiaGZzX2JyZWNfbGVub2ZmXCIsXG4gICAgXCJoZnNfYnJlY19rZXlsZW5cIixcbiAgICBcImhmc19icmVjX3JlbW92ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIGFuZCB2YWxpZGF0aW9uIHRvIEhGUysgYi10cmVlIG5vZGUgYW5kIHJlY29yZCBoYW5kbGluZyB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgd2hlbiBkZWFsaW5nIHdpdGggY29ycnVwdGVkIGZpbGVzeXN0ZW0gaW1hZ2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIEhGUysgZmlsZXN5c3RlbSBkcml2ZXIgdGhhdCBpcyByZWFjaGFibGUgYnkgbW91bnRpbmcgYW5kIGludGVyYWN0aW5nIHdpdGggY3JhZnRlZCBIRlMrIGltYWdlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIRlNQTFVTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19oZnNfYnJlY19maW5kXCIsXG4gICAgXCJoZnNfYnJlY19maW5kXCIsXG4gICAgXCJoZnNfYm5vZGVfZmluZFwiLFxuICAgIFwiaGZzX2JyZWNfbGVub2ZmXCIsXG4gICAgXCJoZnNfYnJlY19rZXlsZW5cIixcbiAgICBcImhmc19icmVjX3JlbW92ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIGFuZCB2YWxpZGF0aW9uIHRvIEhGUysgYi10cmVlIG5vZGUgYW5kIHJlY29yZCBoYW5kbGluZyB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgd2hlbiBkZWFsaW5nIHdpdGggY29ycnVwdGVkIGZpbGVzeXN0ZW0gaW1hZ2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIEhGUysgZmlsZXN5c3RlbSBkcml2ZXIgdGhhdCBpcyByZWFjaGFibGUgYnkgbW91bnRpbmcgYW5kIGludGVyYWN0aW5nIHdpdGggY3JhZnRlZCBIRlMrIGltYWdlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowqwsk2[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-12 12:31:30 +0000 UTC FinishedAt: 2026-07-12 12:56:08 +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": "44696aa3a489d2baf58efa61b37833f100072bee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HFSPLUS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "44696aa3a489d2baf58efa61b37833f100072bee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HFSPLUS_FS" ], "series_id": "687cfb4e-23ce-4968-9f74-b5e0990727be" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "__hfs_brec_find", "hfs_brec_find", "hfs_bnode_find", "hfs_brec_lenoff", "hfs_brec_keylen", "hfs_brec_remove" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDEyOjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hGU1BMVVNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2hmc19icmVjX2ZpbmQmIzM0OywKICAgICYjMzQ7aGZzX2JyZWNfZmluZCYjMzQ7LAogICAgJiMzNDtoZnNfYm5vZGVfZmluZCYjMzQ7LAogICAgJiMzNDtoZnNfYnJlY19sZW5vZmYmIzM0OywKICAgICYjMzQ7aGZzX2JyZWNfa2V5bGVuJiMzNDssCiAgICAmIzM0O2hmc19icmVjX3JlbW92ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyBhbmQgdmFsaWRhdGlvbiB0byBIRlMmIzQzOyBiLXRyZWUgbm9kZSBhbmQgcmVjb3JkIGhhbmRsaW5nIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyB3aGVuIGRlYWxpbmcgd2l0aCBjb3JydXB0ZWQgZmlsZXN5c3RlbSBpbWFnZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgSEZTJiM0MzsgZmlsZXN5c3RlbSBkcml2ZXIgdGhhdCBpcyByZWFjaGFibGUgYnkgbW91bnRpbmcgYW5kIGludGVyYWN0aW5nIHdpdGggY3JhZnRlZCBIRlMmIzQzOyBpbWFnZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMTI6NTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmOWVmMzkyMWU3ZTVhNjEzZWM4NzYwYzYxZTViOWM0MmNjYzE4Y2FkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBKdWwgMTIgMTI6NTU6MjggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9iZmluZC5jIGIvZnMvaGZzcGx1cy9iZmluZC5jXG5pbmRleCA5YTU1ZmE2ZDUyOTQyOS4uYTUzOTFmZjA3YzcwZjYgMTAwNjQ0XG4tLS0gYS9mcy9oZnNwbHVzL2JmaW5kLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2hmc3BsdXMvYmZpbmQuY1xuQEAgLTE4LDYgJiM0MzsxOCw3IEBAIGludCBoZnNfZmluZF9pbml0KHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUsIHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZClcbiBcbiBcdGZkLVx1MDAzZXRyZWUgPSB0cmVlO1xuIFx0ZmQtXHUwMDNlYm5vZGUgPSBOVUxMO1xuJiM0MztcdGhmc19maW5kX3Jlc2V0KGZkKTtcbiBcdHB0ciA9IGt6YWxsb2ModHJlZS1cdTAwM2VtYXhfa2V5X2xlbiAqIDIgJiM0MzsgNCwgR0ZQX0tFUk5FTCk7XG4gXHRpZiAoIXB0cilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG5AQCAtMTA2LDEyICYjNDM7MTA3LDE0IEBAIGludCBfX2hmc19icmVjX2ZpbmQoc3RydWN0IGhmc19ibm9kZSAqYm5vZGUsIHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCxcbiBcdHUxNiBvZmYsIGxlbiwga2V5bGVuO1xuIFx0aW50IHJlYztcbiBcdGludCBiLCBlO1xuLVx0aW50IHJlcztcbiYjNDM7XHRpbnQgcmVzID0gLUVOT0VOVDtcbiBcbiBcdEJVR19PTighcmVjX2ZvdW5kKTtcbiYjNDM7XHRpZiAoIWhmc19ibm9kZV9udW1fcmVjc192YWxpZChibm9kZSkpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1xuIFx0YiA9IDA7XG4gXHRlID0gYm5vZGUtXHUwMDNlbnVtX3JlY3MgLSAxO1xuLVx0cmVzID0gLUVOT0VOVDtcbiBcdGRvIHtcbiBcdFx0cmVjID0gKGUgJiM0MzsgYikgLyAyO1xuIFx0XHRsZW4gPSBoZnNfYnJlY19sZW5vZmYoYm5vZGUsIHJlYywgXHUwMDI2b2ZmKTtcbkBAIC0xNTgsMTEgJiM0MzsxNjEsNyBAQCBpbnQgaGZzX2JyZWNfZmluZChzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQsIHNlYXJjaF9zdHJhdGVneV90IGRvX2tleV9jb21wYXJlKVxuIFx0X19iZTMyIGRhdGE7XG4gXHRpbnQgaGVpZ2h0LCByZXM7XG4gXG4tXHRmZC1cdTAwM2VyZWNvcmQgPSAtMTtcbi1cdGZkLVx1MDAzZWtleW9mZnNldCA9IC0xO1xuLVx0ZmQtXHUwMDNla2V5bGVuZ3RoID0gLTE7XG4tXHRmZC1cdTAwM2VlbnRyeW9mZnNldCA9IC0xO1xuLVx0ZmQtXHUwMDNlZW50cnlsZW5ndGggPSAtMTtcbiYjNDM7XHRoZnNfZmluZF9yZXNldChmZCk7XG4gXG4gXHR0cmVlID0gZmQtXHUwMDNldHJlZTtcbiBcdGlmIChmZC1cdTAwM2Vibm9kZSlcbmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2Jub2RlLmMgYi9mcy9oZnNwbHVzL2Jub2RlLmNcbmluZGV4IGQwODhmYjdlYjBkZmEzLi5mMTg1YzAxMmQwOTAyNiAxMDA2NDRcbi0tLSBhL2ZzL2hmc3BsdXMvYm5vZGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9ibm9kZS5jXG5AQCAtMzUyLDE1ICYjNDM7MzUyLDIyIEBAIHZvaWQgaGZzX2Jub2RlX2R1bXAoc3RydWN0IGhmc19ibm9kZSAqbm9kZSlcbiBcdHN0cnVjdCBoZnNfYm5vZGVfZGVzYyBkZXNjO1xuIFx0X19iZTMyIGNuaWQ7XG4gXHRpbnQgaSwgb2ZmLCBrZXlfb2ZmO1xuJiM0MztcdHUxNiBudW1fcmVjcztcbiBcbiBcdGhmc19kYmcoXCYjMzQ7bm9kZSAlZFxcblwmIzM0Oywgbm9kZS1cdTAwM2V0aGlzKTtcbiBcdGhmc19ibm9kZV9yZWFkKG5vZGUsIFx1MDAyNmRlc2MsIDAsIHNpemVvZihkZXNjKSk7XG4mIzQzO1x0bnVtX3JlY3MgPSBub2RlLVx1MDAzZW51bV9yZWNzO1xuIFx0aGZzX2RiZyhcJiMzNDtuZXh0ICVkLCBwcmV2ICVkLCB0eXBlICVkLCBoZWlnaHQgJWQsIG51bV9yZWNzICVkXFxuXCYjMzQ7LFxuIFx0XHRiZTMyX3RvX2NwdShkZXNjLm5leHQpLCBiZTMyX3RvX2NwdShkZXNjLnByZXYpLFxuIFx0XHRkZXNjLnR5cGUsIGRlc2MuaGVpZ2h0LCBiZTE2X3RvX2NwdShkZXNjLm51bV9yZWNzKSk7XG4gXG4mIzQzO1x0aWYgKCFoZnNfYm5vZGVfbnVtX3JlY3NfdmFsaWQobm9kZSkpIHtcbiYjNDM7XHRcdGhmc19kYmcoXCYjMzQ7aW52YWxpZCBudW1fcmVjcyAldVxcblwmIzM0OywgbnVtX3JlY3MpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRvZmYgPSBub2RlLVx1MDAzZXRyZWUtXHUwMDNlbm9kZV9zaXplIC0gMjtcbi1cdGZvciAoaSA9IGJlMTZfdG9fY3B1KGRlc2MubnVtX3JlY3MpOyBpIFx1MDAzZT0gMDsgb2ZmIC09IDIsIGktLSkge1xuJiM0MztcdGZvciAoaSA9IG51bV9yZWNzOyBpIFx1MDAzZT0gMDsgb2ZmIC09IDIsIGktLSkge1xuIFx0XHRrZXlfb2ZmID0gaGZzX2Jub2RlX3JlYWRfdTE2KG5vZGUsIG9mZik7XG4gXHRcdGhmc19kYmcoXCYjMzQ7IGtleV9vZmYgJWRcJiMzNDssIGtleV9vZmYpO1xuIFx0XHRpZiAoaSBcdTAwMjZcdTAwMjYgbm9kZS1cdTAwM2V0eXBlID09IEhGU19OT0RFX0lOREVYKSB7XG5AQCAtNTc5LDYgJiM0Mzs1ODYsOSBAQCBzdHJ1Y3QgaGZzX2Jub2RlICpoZnNfYm5vZGVfZmluZChzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlLCB1MzIgbnVtKVxuIFx0XHRnb3RvIG5vZGVfZXJyb3I7XG4gXHR9XG4gXG4mIzQzO1x0aWYgKCFoZnNfYm5vZGVfbnVtX3JlY3NfdmFsaWQobm9kZSkpXG4mIzQzO1x0XHRnb3RvIG5vZGVfZXJyb3I7XG4mIzQzO1xuIFx0cmVjX29mZiA9IHRyZWUtXHUwMDNlbm9kZV9zaXplIC0gMjtcbiBcdG9mZiA9IGhmc19ibm9kZV9yZWFkX3UxNihub2RlLCByZWNfb2ZmKTtcbiBcdGlmIChvZmYgIT0gc2l6ZW9mKHN0cnVjdCBoZnNfYm5vZGVfZGVzYykpXG5AQCAtNTg2LDkgJiM0Mzs1OTYsNyBAQCBzdHJ1Y3QgaGZzX2Jub2RlICpoZnNfYm5vZGVfZmluZChzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlLCB1MzIgbnVtKVxuIFx0Zm9yIChpID0gMTsgaSBcdTAwM2M9IG5vZGUtXHUwMDNlbnVtX3JlY3M7IG9mZiA9IG5leHRfb2ZmLCBpJiM0MzsmIzQzOykge1xuIFx0XHRyZWNfb2ZmIC09IDI7XG4gXHRcdG5leHRfb2ZmID0gaGZzX2Jub2RlX3JlYWRfdTE2KG5vZGUsIHJlY19vZmYpO1xuLVx0XHRpZiAobmV4dF9vZmYgXHUwMDNjPSBvZmYgfHxcbi1cdFx0ICAgIG5leHRfb2ZmIFx1MDAzZSB0cmVlLVx1MDAzZW5vZGVfc2l6ZSB8fFxuLVx0XHQgICAgbmV4dF9vZmYgXHUwMDI2IDEpXG4mIzQzO1x0XHRpZiAoIWhmc19icmVjX3JhbmdlX3ZhbGlkKG5vZGUsIG9mZiwgbmV4dF9vZmYsIHJlY19vZmYpKVxuIFx0XHRcdGdvdG8gbm9kZV9lcnJvcjtcbiBcdFx0ZW50cnlfc2l6ZSA9IG5leHRfb2ZmIC0gb2ZmO1xuIFx0XHRpZiAobm9kZS1cdTAwM2V0eXBlICE9IEhGU19OT0RFX0lOREVYIFx1MDAyNlx1MDAyNlxuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvYnJlYy5jIGIvZnMvaGZzcGx1cy9icmVjLmNcbmluZGV4IGUzZGY4OTI4NDA3OWRiLi4zMTEyYzNiY2Y5Y2Y4ZCAxMDA2NDRcbi0tLSBhL2ZzL2hmc3BsdXMvYnJlYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9oZnNwbHVzL2JyZWMuY1xuQEAgLTIwLDM1ICYjNDM7MjAsNDEgQEAgc3RhdGljIGludCBoZnNfYnRyZWVfaW5jX2hlaWdodChzdHJ1Y3QgaGZzX2J0cmVlICopO1xuIHUxNiBoZnNfYnJlY19sZW5vZmYoc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgdTE2IHJlYywgdTE2ICpvZmYpXG4ge1xuIFx0X19iZTE2IHJldHZhbFsyXTtcbi1cdHUxNiBkYXRhb2ZmO1xuJiM0MztcdHUxNiBkYXRhX29mZjtcbiYjNDM7XHR1MTYgbmV4dF9vZmY7XG4gXG4tXHRkYXRhb2ZmID0gbm9kZS1cdTAwM2V0cmVlLVx1MDAzZW5vZGVfc2l6ZSAtIChyZWMgJiM0MzsgMikgKiAyO1xuLVx0aGZzX2Jub2RlX3JlYWQobm9kZSwgcmV0dmFsLCBkYXRhb2ZmLCA0KTtcbiYjNDM7XHRpZiAoIWhmc19icmVjX3JlY29yZF92YWxpZChub2RlLCByZWMpKSB7XG4mIzQzO1x0XHQqb2ZmID0gMDtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZGF0YV9vZmYgPSBub2RlLVx1MDAzZXRyZWUtXHUwMDNlbm9kZV9zaXplIC0gKHJlYyAmIzQzOyAyKSAqIDI7XG4mIzQzO1x0aGZzX2Jub2RlX3JlYWQobm9kZSwgcmV0dmFsLCBkYXRhX29mZiwgNCk7XG4gXHQqb2ZmID0gYmUxNl90b19jcHUocmV0dmFsWzFdKTtcbi1cdHJldHVybiBiZTE2X3RvX2NwdShyZXR2YWxbMF0pIC0gKm9mZjtcbiYjNDM7XHRuZXh0X29mZiA9IGJlMTZfdG9fY3B1KHJldHZhbFswXSk7XG4mIzQzO1x0aWYgKCFoZnNfYnJlY19yYW5nZV92YWxpZChub2RlLCAqb2ZmLCBuZXh0X29mZiwgZGF0YV9vZmYpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0cmV0dXJuIG5leHRfb2ZmIC0gKm9mZjtcbiB9XG4gXG4gLyogR2V0IHRoZSBsZW5ndGggb2YgdGhlIGtleSBmcm9tIGEga2V5ZWQgcmVjb3JkICovXG4gdTE2IGhmc19icmVjX2tleWxlbihzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCB1MTYgcmVjKVxuIHtcbi1cdHUxNiByZXR2YWwsIHJlY29mZjtcbiYjNDM7XHR1MTYgcmV0dmFsLCByZWNvZmYsIGxlbjtcbiBcbiBcdGlmIChub2RlLVx1MDAzZXR5cGUgIT0gSEZTX05PREVfSU5ERVggXHUwMDI2XHUwMDI2IG5vZGUtXHUwMDNldHlwZSAhPSBIRlNfTk9ERV9MRUFGKVxuIFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRpZiAoIWhmc19icmVjX3JlY29yZF92YWxpZChub2RlLCByZWMpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4gXG4gXHRpZiAoKG5vZGUtXHUwMDNldHlwZSA9PSBIRlNfTk9ERV9JTkRFWCkgXHUwMDI2XHUwMDI2XG4gXHQgICAhKG5vZGUtXHUwMDNldHJlZS1cdTAwM2VhdHRyaWJ1dGVzIFx1MDAyNiBIRlNfVFJFRV9WQVJJRFhLRVlTKSBcdTAwMjZcdTAwMjZcbiBcdCAgIChub2RlLVx1MDAzZXRyZWUtXHUwMDNlY25pZCAhPSBIRlNQTFVTX0FUVFJfQ05JRCkpIHtcbiBcdFx0cmV0dmFsID0gbm9kZS1cdTAwM2V0cmVlLVx1MDAzZW1heF9rZXlfbGVuICYjNDM7IDI7XG4gXHR9IGVsc2Uge1xuLVx0XHRyZWNvZmYgPSBoZnNfYm5vZGVfcmVhZF91MTYobm9kZSxcbi1cdFx0XHRub2RlLVx1MDAzZXRyZWUtXHUwMDNlbm9kZV9zaXplIC0gKHJlYyAmIzQzOyAxKSAqIDIpO1xuLVx0XHRpZiAoIXJlY29mZilcbi1cdFx0XHRyZXR1cm4gMDtcbi1cdFx0aWYgKHJlY29mZiBcdTAwM2Ugbm9kZS1cdTAwM2V0cmVlLVx1MDAzZW5vZGVfc2l6ZSAtIDIpIHtcbi1cdFx0XHRwcl9lcnIoXCYjMzQ7cmVjb2ZmICVkIHRvbyBsYXJnZVxcblwmIzM0OywgcmVjb2ZmKTtcbiYjNDM7XHRcdGxlbiA9IGhmc19icmVjX2xlbm9mZihub2RlLCByZWMsIFx1MDAyNnJlY29mZik7XG4mIzQzO1x0XHRpZiAobGVuID09IDApXG4gXHRcdFx0cmV0dXJuIDA7XG4tXHRcdH1cbiBcbiBcdFx0cmV0dmFsID0gaGZzX2Jub2RlX3JlYWRfdTE2KG5vZGUsIHJlY29mZikgJiM0MzsgMjtcbiBcdFx0aWYgKHJldHZhbCBcdTAwM2Ugbm9kZS1cdTAwM2V0cmVlLVx1MDAzZW1heF9rZXlfbGVuICYjNDM7IDIpIHtcbkBAIC0xODUsMTAgJiM0MzsxOTEsMTUgQEAgaW50IGhmc19icmVjX3JlbW92ZShzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpXG4gXHR0cmVlID0gZmQtXHUwMDNldHJlZTtcbiBcdG5vZGUgPSBmZC1cdTAwM2Vibm9kZTtcbiBhZ2FpbjpcbiYjNDM7XHRpZiAoIWhmc19icmVjX3JlY29yZF92YWxpZChub2RlLCBmZC1cdTAwM2VyZWNvcmQpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU87XG4mIzQzO1xuIFx0cmVjX29mZiA9IHRyZWUtXHUwMDNlbm9kZV9zaXplIC0gKGZkLVx1MDAzZXJlY29yZCAmIzQzOyAyKSAqIDI7XG4gXHRlbmRfb2ZmID0gdHJlZS1cdTAwM2Vub2RlX3NpemUgLSAobm9kZS1cdTAwM2VudW1fcmVjcyAmIzQzOyAxKSAqIDI7XG4gXG4gXHRpZiAobm9kZS1cdTAwM2V0eXBlID09IEhGU19OT0RFX0xFQUYpIHtcbiYjNDM7XHRcdGlmICh0cmVlLVx1MDAzZWxlYWZfY291bnQgPT0gMClcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU87XG4gXHRcdHRyZWUtXHUwMDNlbGVhZl9jb3VudC0tO1xuIFx0XHRtYXJrX2lub2RlX2RpcnR5KHRyZWUtXHUwMDNlaW5vZGUpO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaGZzcGx1c19mcy5oIGIvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmhcbmluZGV4IGVjMDRiODJhZDkyNzg3Li5kODdkNTVhMzVkMjU4YiAxMDA2NDRcbi0tLSBhL2ZzL2hmc3BsdXMvaGZzcGx1c19mcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaFxuQEAgLTU4Nyw2ICYjNDM7NTg3LDc4IEBAIGJvb2wgaXNfYm5vZGVfb2Zmc2V0X3ZhbGlkKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsIHUzMiBvZmYpXG4gXHRyZXR1cm4gaXNfdmFsaWQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lXG4mIzQzO2Jvb2wgaGZzX2Jub2RlX251bV9yZWNzX3ZhbGlkKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUpXG4mIzQzO3tcbiYjNDM7XHR1MzIgbm9kZV9zaXplO1xuJiM0MztcdHUzMiB0YWJsZV9zaXplO1xuJiM0MztcdHUzMiBhcmVhX3NpemU7XG4mIzQzO1x0dTMyIHJlY19zaXplID0gc2l6ZW9mKF9fYmUxNik7XG4mIzQzO1x0dTMyIGRlc2Nfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaGZzX2Jub2RlX2Rlc2MpO1xuJiM0MztcbiYjNDM7XHRpZiAoIW5vZGUgfHwgIW5vZGUtXHUwMDNldHJlZSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0bm9kZV9zaXplID0gbm9kZS1cdTAwM2V0cmVlLVx1MDAzZW5vZGVfc2l6ZTtcbiYjNDM7XHRpZiAobm9kZV9zaXplIFx1MDAzYyBkZXNjX3NpemUpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGFyZWFfc2l6ZSA9IG5vZGVfc2l6ZSAtIGRlc2Nfc2l6ZTtcbiYjNDM7XHR0YWJsZV9zaXplID0gKCh1MzIpbm9kZS1cdTAwM2VudW1fcmVjcyAmIzQzOyAxKSAqIHJlY19zaXplO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gdGFibGVfc2l6ZSBcdTAwM2M9IGFyZWFfc2l6ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZVxuJiM0Mztib29sIGhmc19icmVjX3JlY29yZF92YWxpZChzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCBpbnQgcmVjb3JkKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFoZnNfYm5vZGVfbnVtX3JlY3NfdmFsaWQobm9kZSkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0aWYgKHJlY29yZCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJlY29yZCBcdTAwM2Mgbm9kZS1cdTAwM2VudW1fcmVjcztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZVxuJiM0Mztib29sIGhmc19icmVjX3JhbmdlX3ZhbGlkKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsIHUxNiBvZmYsIHUxNiBuZXh0X29mZixcbiYjNDM7XHRcdFx0ICB1MTYgcmVjX29mZilcbiYjNDM7e1xuJiM0MztcdHUzMiB0YWJsZV9zaXplO1xuJiM0MztcdHUzMiB0YWJsZV9zdGFydDtcbiYjNDM7XHR1MzIgcmVjX3NpemUgPSBzaXplb2YoX19iZTE2KTtcbiYjNDM7XHR1MzIgZGVzY19zaXplID0gc2l6ZW9mKHN0cnVjdCBoZnNfYm5vZGVfZGVzYyk7XG4mIzQzO1xuJiM0MztcdGlmICghbm9kZSB8fCAhbm9kZS1cdTAwM2V0cmVlKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRpZiAob2ZmIFx1MDAzYyBkZXNjX3NpemUgfHwgKG9mZiBcdTAwMjYgMSkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmIChuZXh0X29mZiBcdTAwM2M9IG9mZiB8fFxuJiM0MztcdFx0bmV4dF9vZmYgXHUwMDNlIG5vZGUtXHUwMDNldHJlZS1cdTAwM2Vub2RlX3NpemUgfHxcbiYjNDM7XHRcdG5leHRfb2ZmIFx1MDAzZSByZWNfb2ZmIHx8XG4mIzQzO1x0XHQobmV4dF9vZmYgXHUwMDI2IDEpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHR0YWJsZV9zaXplID0gKCh1MzIpbm9kZS1cdTAwM2VudW1fcmVjcyAmIzQzOyAxKSAqIHJlY19zaXplO1xuJiM0MztcdHRhYmxlX3N0YXJ0ID0gbm9kZS1cdTAwM2V0cmVlLVx1MDAzZW5vZGVfc2l6ZSAtIHRhYmxlX3NpemU7XG4mIzQzO1x0aWYgKG5leHRfb2ZmIFx1MDAzZSB0YWJsZV9zdGFydClcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmVcbiYjNDM7dm9pZCBoZnNfZmluZF9yZXNldChzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpXG4mIzQzO3tcbiYjNDM7XHRmZC1cdTAwM2VyZWNvcmQgPSAtMTtcbiYjNDM7XHRmZC1cdTAwM2VrZXlvZmZzZXQgPSAtMTtcbiYjNDM7XHRmZC1cdTAwM2VrZXlsZW5ndGggPSAtMTtcbiYjNDM7XHRmZC1cdTAwM2VlbnRyeW9mZnNldCA9IC0xO1xuJiM0MztcdGZkLVx1MDAzZWVudHJ5bGVuZ3RoID0gLTE7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZVxuIHUzMiBjaGVja19hbmRfY29ycmVjdF9yZXF1ZXN0ZWRfbGVuZ3RoKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsIHUzMiBvZmYsIHUzMiBsZW4pXG4ge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDEyOjU1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hGU1BMVVNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2hmc19icmVjX2ZpbmQmIzM0OywKICAgICYjMzQ7aGZzX2JyZWNfZmluZCYjMzQ7LAogICAgJiMzNDtoZnNfYm5vZGVfZmluZCYjMzQ7LAogICAgJiMzNDtoZnNfYnJlY19sZW5vZmYmIzM0OywKICAgICYjMzQ7aGZzX2JyZWNfa2V5bGVuJiMzNDssCiAgICAmIzM0O2hmc19icmVjX3JlbW92ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyBhbmQgdmFsaWRhdGlvbiB0byBIRlMmIzQzOyBiLXRyZWUgbm9kZSBhbmQgcmVjb3JkIGhhbmRsaW5nIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyB3aGVuIGRlYWxpbmcgd2l0aCBjb3JydXB0ZWQgZmlsZXN5c3RlbSBpbWFnZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgSEZTJiM0MzsgZmlsZXN5c3RlbSBkcml2ZXIgdGhhdCBpcyByZWFjaGFibGUgYnkgbW91bnRpbmcgYW5kIGludGVyYWN0aW5nIHdpdGggY3JhZnRlZCBIRlMmIzQzOyBpbWFnZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY5ZWYzOTIxZTdlNWE2MTNlYzg3NjBjNjFlNWI5YzQyY2NjMThjYWQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEp1bCAxMiAxMjo1NToyOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvYmZpbmQuYyBiL2ZzL2hmc3BsdXMvYmZpbmQuYwppbmRleCA5YTU1ZmE2ZDUyOTQyOS4uYTUzOTFmZjA3YzcwZjYgMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvYmZpbmQuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9oZnNwbHVzL2JmaW5kLmMKQEAgLTE4LDYgJiM0MzsxOCw3IEBAIGludCBoZnNfZmluZF9pbml0KHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUsIHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCkKIAogCWZkLSZndDt0cmVlID0gdHJlZTsKIAlmZC0mZ3Q7Ym5vZGUgPSBOVUxMOwomIzQzOwloZnNfZmluZF9yZXNldChmZCk7CiAJcHRyID0ga3phbGxvYyh0cmVlLSZndDttYXhfa2V5X2xlbiAqIDIgJiM0MzsgNCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwdHIpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTA2LDEyICYjNDM7MTA3LDE0IEBAIGludCBfX2hmc19icmVjX2ZpbmQoc3RydWN0IGhmc19ibm9kZSAqYm5vZGUsIHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCwKIAl1MTYgb2ZmLCBsZW4sIGtleWxlbjsKIAlpbnQgcmVjOwogCWludCBiLCBlOwotCWludCByZXM7CiYjNDM7CWludCByZXMgPSAtRU5PRU5UOwogCiAJQlVHX09OKCFyZWNfZm91bmQpOwomIzQzOwlpZiAoIWhmc19ibm9kZV9udW1fcmVjc192YWxpZChibm9kZSkpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CiAJYiA9IDA7CiAJZSA9IGJub2RlLSZndDtudW1fcmVjcyAtIDE7Ci0JcmVzID0gLUVOT0VOVDsKIAlkbyB7CiAJCXJlYyA9IChlICYjNDM7IGIpIC8gMjsKIAkJbGVuID0gaGZzX2JyZWNfbGVub2ZmKGJub2RlLCByZWMsICZhbXA7b2ZmKTsKQEAgLTE1OCwxMSAmIzQzOzE2MSw3IEBAIGludCBoZnNfYnJlY19maW5kKHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCwgc2VhcmNoX3N0cmF0ZWd5X3QgZG9fa2V5X2NvbXBhcmUpCiAJX19iZTMyIGRhdGE7CiAJaW50IGhlaWdodCwgcmVzOwogCi0JZmQtJmd0O3JlY29yZCA9IC0xOwotCWZkLSZndDtrZXlvZmZzZXQgPSAtMTsKLQlmZC0mZ3Q7a2V5bGVuZ3RoID0gLTE7Ci0JZmQtJmd0O2VudHJ5b2Zmc2V0ID0gLTE7Ci0JZmQtJmd0O2VudHJ5bGVuZ3RoID0gLTE7CiYjNDM7CWhmc19maW5kX3Jlc2V0KGZkKTsKIAogCXRyZWUgPSBmZC0mZ3Q7dHJlZTsKIAlpZiAoZmQtJmd0O2Jub2RlKQpkaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9ibm9kZS5jIGIvZnMvaGZzcGx1cy9ibm9kZS5jCmluZGV4IGQwODhmYjdlYjBkZmEzLi5mMTg1YzAxMmQwOTAyNiAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy9ibm9kZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2hmc3BsdXMvYm5vZGUuYwpAQCAtMzUyLDE1ICYjNDM7MzUyLDIyIEBAIHZvaWQgaGZzX2Jub2RlX2R1bXAoc3RydWN0IGhmc19ibm9kZSAqbm9kZSkKIAlzdHJ1Y3QgaGZzX2Jub2RlX2Rlc2MgZGVzYzsKIAlfX2JlMzIgY25pZDsKIAlpbnQgaSwgb2ZmLCBrZXlfb2ZmOwomIzQzOwl1MTYgbnVtX3JlY3M7CiAKIAloZnNfZGJnKCYjMzQ7bm9kZSAlZFxuJiMzNDssIG5vZGUtJmd0O3RoaXMpOwogCWhmc19ibm9kZV9yZWFkKG5vZGUsICZhbXA7ZGVzYywgMCwgc2l6ZW9mKGRlc2MpKTsKJiM0MzsJbnVtX3JlY3MgPSBub2RlLSZndDtudW1fcmVjczsKIAloZnNfZGJnKCYjMzQ7bmV4dCAlZCwgcHJldiAlZCwgdHlwZSAlZCwgaGVpZ2h0ICVkLCBudW1fcmVjcyAlZFxuJiMzNDssCiAJCWJlMzJfdG9fY3B1KGRlc2MubmV4dCksIGJlMzJfdG9fY3B1KGRlc2MucHJldiksCiAJCWRlc2MudHlwZSwgZGVzYy5oZWlnaHQsIGJlMTZfdG9fY3B1KGRlc2MubnVtX3JlY3MpKTsKIAomIzQzOwlpZiAoIWhmc19ibm9kZV9udW1fcmVjc192YWxpZChub2RlKSkgewomIzQzOwkJaGZzX2RiZygmIzM0O2ludmFsaWQgbnVtX3JlY3MgJXVcbiYjMzQ7LCBudW1fcmVjcyk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKIAlvZmYgPSBub2RlLSZndDt0cmVlLSZndDtub2RlX3NpemUgLSAyOwotCWZvciAoaSA9IGJlMTZfdG9fY3B1KGRlc2MubnVtX3JlY3MpOyBpICZndDs9IDA7IG9mZiAtPSAyLCBpLS0pIHsKJiM0MzsJZm9yIChpID0gbnVtX3JlY3M7IGkgJmd0Oz0gMDsgb2ZmIC09IDIsIGktLSkgewogCQlrZXlfb2ZmID0gaGZzX2Jub2RlX3JlYWRfdTE2KG5vZGUsIG9mZik7CiAJCWhmc19kYmcoJiMzNDsga2V5X29mZiAlZCYjMzQ7LCBrZXlfb2ZmKTsKIAkJaWYgKGkgJmFtcDsmYW1wOyBub2RlLSZndDt0eXBlID09IEhGU19OT0RFX0lOREVYKSB7CkBAIC01NzksNiAmIzQzOzU4Niw5IEBAIHN0cnVjdCBoZnNfYm5vZGUgKmhmc19ibm9kZV9maW5kKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUsIHUzMiBudW0pCiAJCWdvdG8gbm9kZV9lcnJvcjsKIAl9CiAKJiM0MzsJaWYgKCFoZnNfYm5vZGVfbnVtX3JlY3NfdmFsaWQobm9kZSkpCiYjNDM7CQlnb3RvIG5vZGVfZXJyb3I7CiYjNDM7CiAJcmVjX29mZiA9IHRyZWUtJmd0O25vZGVfc2l6ZSAtIDI7CiAJb2ZmID0gaGZzX2Jub2RlX3JlYWRfdTE2KG5vZGUsIHJlY19vZmYpOwogCWlmIChvZmYgIT0gc2l6ZW9mKHN0cnVjdCBoZnNfYm5vZGVfZGVzYykpCkBAIC01ODYsOSAmIzQzOzU5Niw3IEBAIHN0cnVjdCBoZnNfYm5vZGUgKmhmc19ibm9kZV9maW5kKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUsIHUzMiBudW0pCiAJZm9yIChpID0gMTsgaSAmbHQ7PSBub2RlLSZndDtudW1fcmVjczsgb2ZmID0gbmV4dF9vZmYsIGkmIzQzOyYjNDM7KSB7CiAJCXJlY19vZmYgLT0gMjsKIAkJbmV4dF9vZmYgPSBoZnNfYm5vZGVfcmVhZF91MTYobm9kZSwgcmVjX29mZik7Ci0JCWlmIChuZXh0X29mZiAmbHQ7PSBvZmYgfHwKLQkJICAgIG5leHRfb2ZmICZndDsgdHJlZS0mZ3Q7bm9kZV9zaXplIHx8Ci0JCSAgICBuZXh0X29mZiAmYW1wOyAxKQomIzQzOwkJaWYgKCFoZnNfYnJlY19yYW5nZV92YWxpZChub2RlLCBvZmYsIG5leHRfb2ZmLCByZWNfb2ZmKSkKIAkJCWdvdG8gbm9kZV9lcnJvcjsKIAkJZW50cnlfc2l6ZSA9IG5leHRfb2ZmIC0gb2ZmOwogCQlpZiAobm9kZS0mZ3Q7dHlwZSAhPSBIRlNfTk9ERV9JTkRFWCAmYW1wOyZhbXA7CmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2JyZWMuYyBiL2ZzL2hmc3BsdXMvYnJlYy5jCmluZGV4IGUzZGY4OTI4NDA3OWRiLi4zMTEyYzNiY2Y5Y2Y4ZCAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy9icmVjLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9icmVjLmMKQEAgLTIwLDM1ICYjNDM7MjAsNDEgQEAgc3RhdGljIGludCBoZnNfYnRyZWVfaW5jX2hlaWdodChzdHJ1Y3QgaGZzX2J0cmVlICopOwogdTE2IGhmc19icmVjX2xlbm9mZihzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCB1MTYgcmVjLCB1MTYgKm9mZikKIHsKIAlfX2JlMTYgcmV0dmFsWzJdOwotCXUxNiBkYXRhb2ZmOwomIzQzOwl1MTYgZGF0YV9vZmY7CiYjNDM7CXUxNiBuZXh0X29mZjsKIAotCWRhdGFvZmYgPSBub2RlLSZndDt0cmVlLSZndDtub2RlX3NpemUgLSAocmVjICYjNDM7IDIpICogMjsKLQloZnNfYm5vZGVfcmVhZChub2RlLCByZXR2YWwsIGRhdGFvZmYsIDQpOwomIzQzOwlpZiAoIWhmc19icmVjX3JlY29yZF92YWxpZChub2RlLCByZWMpKSB7CiYjNDM7CQkqb2ZmID0gMDsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CWRhdGFfb2ZmID0gbm9kZS0mZ3Q7dHJlZS0mZ3Q7bm9kZV9zaXplIC0gKHJlYyAmIzQzOyAyKSAqIDI7CiYjNDM7CWhmc19ibm9kZV9yZWFkKG5vZGUsIHJldHZhbCwgZGF0YV9vZmYsIDQpOwogCSpvZmYgPSBiZTE2X3RvX2NwdShyZXR2YWxbMV0pOwotCXJldHVybiBiZTE2X3RvX2NwdShyZXR2YWxbMF0pIC0gKm9mZjsKJiM0MzsJbmV4dF9vZmYgPSBiZTE2X3RvX2NwdShyZXR2YWxbMF0pOwomIzQzOwlpZiAoIWhmc19icmVjX3JhbmdlX3ZhbGlkKG5vZGUsICpvZmYsIG5leHRfb2ZmLCBkYXRhX29mZikpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIG5leHRfb2ZmIC0gKm9mZjsKIH0KIAogLyogR2V0IHRoZSBsZW5ndGggb2YgdGhlIGtleSBmcm9tIGEga2V5ZWQgcmVjb3JkICovCiB1MTYgaGZzX2JyZWNfa2V5bGVuKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsIHUxNiByZWMpCiB7Ci0JdTE2IHJldHZhbCwgcmVjb2ZmOwomIzQzOwl1MTYgcmV0dmFsLCByZWNvZmYsIGxlbjsKIAogCWlmIChub2RlLSZndDt0eXBlICE9IEhGU19OT0RFX0lOREVYICZhbXA7JmFtcDsgbm9kZS0mZ3Q7dHlwZSAhPSBIRlNfTk9ERV9MRUFGKQogCQlyZXR1cm4gMDsKJiM0MzsJaWYgKCFoZnNfYnJlY19yZWNvcmRfdmFsaWQobm9kZSwgcmVjKSkKJiM0MzsJCXJldHVybiAwOwogCiAJaWYgKChub2RlLSZndDt0eXBlID09IEhGU19OT0RFX0lOREVYKSAmYW1wOyZhbXA7CiAJICAgIShub2RlLSZndDt0cmVlLSZndDthdHRyaWJ1dGVzICZhbXA7IEhGU19UUkVFX1ZBUklEWEtFWVMpICZhbXA7JmFtcDsKIAkgICAobm9kZS0mZ3Q7dHJlZS0mZ3Q7Y25pZCAhPSBIRlNQTFVTX0FUVFJfQ05JRCkpIHsKIAkJcmV0dmFsID0gbm9kZS0mZ3Q7dHJlZS0mZ3Q7bWF4X2tleV9sZW4gJiM0MzsgMjsKIAl9IGVsc2UgewotCQlyZWNvZmYgPSBoZnNfYm5vZGVfcmVhZF91MTYobm9kZSwKLQkJCW5vZGUtJmd0O3RyZWUtJmd0O25vZGVfc2l6ZSAtIChyZWMgJiM0MzsgMSkgKiAyKTsKLQkJaWYgKCFyZWNvZmYpCi0JCQlyZXR1cm4gMDsKLQkJaWYgKHJlY29mZiAmZ3Q7IG5vZGUtJmd0O3RyZWUtJmd0O25vZGVfc2l6ZSAtIDIpIHsKLQkJCXByX2VycigmIzM0O3JlY29mZiAlZCB0b28gbGFyZ2VcbiYjMzQ7LCByZWNvZmYpOwomIzQzOwkJbGVuID0gaGZzX2JyZWNfbGVub2ZmKG5vZGUsIHJlYywgJmFtcDtyZWNvZmYpOwomIzQzOwkJaWYgKGxlbiA9PSAwKQogCQkJcmV0dXJuIDA7Ci0JCX0KIAogCQlyZXR2YWwgPSBoZnNfYm5vZGVfcmVhZF91MTYobm9kZSwgcmVjb2ZmKSAmIzQzOyAyOwogCQlpZiAocmV0dmFsICZndDsgbm9kZS0mZ3Q7dHJlZS0mZ3Q7bWF4X2tleV9sZW4gJiM0MzsgMikgewpAQCAtMTg1LDEwICYjNDM7MTkxLDE1IEBAIGludCBoZnNfYnJlY19yZW1vdmUoc3RydWN0IGhmc19maW5kX2RhdGEgKmZkKQogCXRyZWUgPSBmZC0mZ3Q7dHJlZTsKIAlub2RlID0gZmQtJmd0O2Jub2RlOwogYWdhaW46CiYjNDM7CWlmICghaGZzX2JyZWNfcmVjb3JkX3ZhbGlkKG5vZGUsIGZkLSZndDtyZWNvcmQpKQomIzQzOwkJcmV0dXJuIC1FSU87CiYjNDM7CiAJcmVjX29mZiA9IHRyZWUtJmd0O25vZGVfc2l6ZSAtIChmZC0mZ3Q7cmVjb3JkICYjNDM7IDIpICogMjsKIAllbmRfb2ZmID0gdHJlZS0mZ3Q7bm9kZV9zaXplIC0gKG5vZGUtJmd0O251bV9yZWNzICYjNDM7IDEpICogMjsKIAogCWlmIChub2RlLSZndDt0eXBlID09IEhGU19OT0RFX0xFQUYpIHsKJiM0MzsJCWlmICh0cmVlLSZndDtsZWFmX2NvdW50ID09IDApCiYjNDM7CQkJcmV0dXJuIC1FSU87CiAJCXRyZWUtJmd0O2xlYWZfY291bnQtLTsKIAkJbWFya19pbm9kZV9kaXJ0eSh0cmVlLSZndDtpbm9kZSk7CiAJfQpkaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmggYi9mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaAppbmRleCBlYzA0YjgyYWQ5Mjc4Ny4uZDg3ZDU1YTM1ZDI1OGIgMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvaGZzcGx1c19mcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2hmc3BsdXMvaGZzcGx1c19mcy5oCkBAIC01ODcsNiAmIzQzOzU4Nyw3OCBAQCBib29sIGlzX2Jub2RlX29mZnNldF92YWxpZChzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCB1MzIgb2ZmKQogCXJldHVybiBpc192YWxpZDsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUKJiM0Mztib29sIGhmc19ibm9kZV9udW1fcmVjc192YWxpZChzdHJ1Y3QgaGZzX2Jub2RlICpub2RlKQomIzQzO3sKJiM0MzsJdTMyIG5vZGVfc2l6ZTsKJiM0MzsJdTMyIHRhYmxlX3NpemU7CiYjNDM7CXUzMiBhcmVhX3NpemU7CiYjNDM7CXUzMiByZWNfc2l6ZSA9IHNpemVvZihfX2JlMTYpOwomIzQzOwl1MzIgZGVzY19zaXplID0gc2l6ZW9mKHN0cnVjdCBoZnNfYm5vZGVfZGVzYyk7CiYjNDM7CiYjNDM7CWlmICghbm9kZSB8fCAhbm9kZS0mZ3Q7dHJlZSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJbm9kZV9zaXplID0gbm9kZS0mZ3Q7dHJlZS0mZ3Q7bm9kZV9zaXplOwomIzQzOwlpZiAobm9kZV9zaXplICZsdDsgZGVzY19zaXplKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlhcmVhX3NpemUgPSBub2RlX3NpemUgLSBkZXNjX3NpemU7CiYjNDM7CXRhYmxlX3NpemUgPSAoKHUzMilub2RlLSZndDtudW1fcmVjcyAmIzQzOyAxKSAqIHJlY19zaXplOwomIzQzOwomIzQzOwlyZXR1cm4gdGFibGVfc2l6ZSAmbHQ7PSBhcmVhX3NpemU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUKJiM0Mztib29sIGhmc19icmVjX3JlY29yZF92YWxpZChzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCBpbnQgcmVjb3JkKQomIzQzO3sKJiM0MzsJaWYgKCFoZnNfYm5vZGVfbnVtX3JlY3NfdmFsaWQobm9kZSkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CWlmIChyZWNvcmQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlyZXR1cm4gcmVjb3JkICZsdDsgbm9kZS0mZ3Q7bnVtX3JlY3M7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUKJiM0Mztib29sIGhmc19icmVjX3JhbmdlX3ZhbGlkKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsIHUxNiBvZmYsIHUxNiBuZXh0X29mZiwKJiM0MzsJCQkgIHUxNiByZWNfb2ZmKQomIzQzO3sKJiM0MzsJdTMyIHRhYmxlX3NpemU7CiYjNDM7CXUzMiB0YWJsZV9zdGFydDsKJiM0MzsJdTMyIHJlY19zaXplID0gc2l6ZW9mKF9fYmUxNik7CiYjNDM7CXUzMiBkZXNjX3NpemUgPSBzaXplb2Yoc3RydWN0IGhmc19ibm9kZV9kZXNjKTsKJiM0MzsKJiM0MzsJaWYgKCFub2RlIHx8ICFub2RlLSZndDt0cmVlKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAob2ZmICZsdDsgZGVzY19zaXplIHx8IChvZmYgJmFtcDsgMSkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlmIChuZXh0X29mZiAmbHQ7PSBvZmYgfHwKJiM0MzsJCW5leHRfb2ZmICZndDsgbm9kZS0mZ3Q7dHJlZS0mZ3Q7bm9kZV9zaXplIHx8CiYjNDM7CQluZXh0X29mZiAmZ3Q7IHJlY19vZmYgfHwKJiM0MzsJCShuZXh0X29mZiAmYW1wOyAxKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJdGFibGVfc2l6ZSA9ICgodTMyKW5vZGUtJmd0O251bV9yZWNzICYjNDM7IDEpICogcmVjX3NpemU7CiYjNDM7CXRhYmxlX3N0YXJ0ID0gbm9kZS0mZ3Q7dHJlZS0mZ3Q7bm9kZV9zaXplIC0gdGFibGVfc2l6ZTsKJiM0MzsJaWYgKG5leHRfb2ZmICZndDsgdGFibGVfc3RhcnQpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lCiYjNDM7dm9pZCBoZnNfZmluZF9yZXNldChzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpCiYjNDM7ewomIzQzOwlmZC0mZ3Q7cmVjb3JkID0gLTE7CiYjNDM7CWZkLSZndDtrZXlvZmZzZXQgPSAtMTsKJiM0MzsJZmQtJmd0O2tleWxlbmd0aCA9IC0xOwomIzQzOwlmZC0mZ3Q7ZW50cnlvZmZzZXQgPSAtMTsKJiM0MzsJZmQtJmd0O2VudHJ5bGVuZ3RoID0gLTE7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZQogdTMyIGNoZWNrX2FuZF9jb3JyZWN0X3JlcXVlc3RlZF9sZW5ndGgoc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgdTMyIG9mZiwgdTMyIGxlbikKIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMTI6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk3MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDM2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBIRlMmIzQzOyBWYWxpZGF0aW9uIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyBpbnRyb2R1Y2luZyBzb21lIGNyaXRpY2FsIHZhbGlkYXRpb24gZnVuY3Rpb25zIHRvIHRoZSBIRlMmIzQzOyBiLXRyZWUgaGFuZGxpbmcuIFRoaXMgaXMgcmlnaHQgdXAgbXkgYWxsZXk7IEkmIzM5O3ZlIHNlZW4gZW5vdWdoIG9mIHRoZXNlIGZpbGVzeXN0ZW0gZHJpdmVyIGlzc3VlcyB0byBrbm93IHRoaXMgaXMgYSBnb29kIHRoaW5nLiBUaGV5JiMzOTtyZSB0b3VjaGluZyBgYmZpbmQuY2AsIGBibm9kZS5jYCwgYGJyZWMuY2AsIGFuZCB0aGUgaGVhZGVyIGZpbGUsIHdoaWNoIHRlbGxzIG1lIHRoZXkmIzM5O3JlIGZvY3VzaW5nIG9uIHRoZSBjb3JlIGItdHJlZSBvcGVyYXRpb25zLiBUaGUgbmV3IGZ1bmN0aW9ucywgYGhmc19ibm9kZV9udW1fcmVjc192YWxpZCgpYCwgYGhmc19icmVjX3JlY29yZF92YWxpZCgpYCwgYGhmc19icmVjX3JhbmdlX3ZhbGlkKClgLCBhbmQgYGhmc19maW5kX3Jlc2V0KClgLCBhcmUgZ29pbmcgdG8gYmUga2V5IGluIHByZXZlbnRpbmcgdGhvc2UgbmFzdHkgb3V0LW9mLWJvdW5kcyByZWFkcyBhbmQgd3JpdGVzLCBhbmQgb3RoZXIgbWVtb3J5IGNvcnJ1cHRpb24sIHRoYXQgd2UmIzM5O3JlIGFsd2F5cyB3b3JyaWVkIGFib3V0IHdpdGggY29ycnVwdGVkIGZpbGVzeXN0ZW0gaW1hZ2VzLgoKVGhleSYjMzk7cmUgaW50ZWdyYXRpbmcgdGhlc2UgdmFsaWRhdGlvbnMgaW50byBzZXZlcmFsIGNyaXRpY2FsIGFyZWFzOiBgX19oZnNfYnJlY19maW5kYCwgYGhmc19icmVjX2ZpbmRgLCBgaGZzX2Jub2RlX2R1bXBgLCBgaGZzX2Jub2RlX2ZpbmRgLCBgaGZzX2JyZWNfbGVub2ZmYCwgYGhmc19icmVjX2tleWxlbmAsIGFuZCBgaGZzX2JyZWNfcmVtb3ZlYC4gVGhpcyBpcyBhIHByZXR0eSB0aG9yb3VnaCBpbnRlZ3JhdGlvbiwgd2hpY2ggaXMgZXhhY3RseSB3aGF0IEkgbGlrZSB0byBzZWUuIFRoaXMgbG9va3MgbGlrZSBhIHNvbGlkIGZ1bmN0aW9uYWwgY2hhbmdlOyBpdCYjMzk7cyAqZGVmaW5pdGVseSogZ29pbmcgdG8gaW1wcm92ZSB0aGUgcm9idXN0bmVzcyBvZiB0aGUgZHJpdmVyLgoKVGhlIHBhdGNoJiMzOTtzIGFuYWx5c2lzIHRoYXQgdGhlIHBhdGhzIGFyZSByZWFjaGFibGUgYnkgbW91bnRpbmcgYSBjcmFmdGVkIGltYWdlIGlzIHNwb3Qgb24uIFRoYXQgbWFrZXMgaXQgYSBwZXJmZWN0IHRhcmdldCBmb3IgZnV6emluZy4gTm93LCBsZXQmIzM5O3Mgc2VlLCB3aGF0IGRvIEkgbmVlZCB0byB0ZXN0IHRoaXM/IEFoLCB5ZXMsIHRoZSBIRlMmIzQzOyBmaWxlc3lzdGVtIGlzIGVuYWJsZWQgd2l0aCBgQ09ORklHX0hGU1BMVVNfRlNgLiBJJiMzOTtsbCBjb25maXJtIHRoYXQgaW4gYGZzL2hmc3BsdXMvS2NvbmZpZ2AganVzdCB0byBiZSBjb21wbGV0ZWx5IHN1cmUsIGJ1dCBpdCBsb29rcyBsaWtlIGEgZ29vZCBzdGFydCBmb3IgZ2V0dGluZyB0aGlzIHRoaW5nIHRlc3RlZC4gVGltZSB0byBzdGFydCBjcmFmdGluZyBzb21lIGZ1enppbmcgaGFybmVzc2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDEyOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBIRlNQTFVTX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaGZzcGx1cy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2hmc3BsdXMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvaGZzcGx1cy9LY29uZmlnOjI6Y29uZmlnIEhGU1BMVVNfRlNcbmZzL2hmc3BsdXMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7QXBwbGUgRXh0ZW5kZWQgSEZTIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAxMjo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODcwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzIFN5bWJvbCBDYW5kaWRhdGUgU2VsZWN0aW9uIGZvciBIRlMmIzQzOyoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgZm9jdXNpbmcgb24gSEZTJiM0MzssIGFuZCB0aGUgY29uZmlnIHdlJiMzOTtyZSB1c2luZyBpcyBgSEZTUExVU19GU2AuIEdvdCBpdC4gTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBmb2N1cyBzeW1ib2xzLiBJJiMzOTt2ZSBpZGVudGlmaWVkIGEgbGlzdCBvZiBtb2RpZmllZCBmdW5jdGlvbnMsIGFuZCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZXkmIzM5O3JlIHJlbGV2YW50IGZvciBvdXIgcHVycG9zZXM6CgoqICAgYF9faGZzX2JyZWNfZmluZGAKKiAgIGBoZnNfYnJlY19maW5kYAoqICAgYGhmc19ibm9kZV9kdW1wYAoqICAgYGhmc19ibm9kZV9maW5kYAoqICAgYGhmc19icmVjX2xlbm9mZmAKKiAgIGBoZnNfYnJlY19rZXlsZW5gCiogICBgaGZzX2JyZWNfcmVtb3ZlYAoKTXkgbmV4dCBzdGVwIGlzIHRvIGV2YWx1YXRlIGlmIHRoZXNlIGZ1bmN0aW9ucyByZXByZXNlbnQgaG90LXBhdGggb3BlcmF0aW9ucyB3aXRoaW4gdGhlIGtlcm5lbC4gQmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZywgYGhmc19icmVjX2ZpbmRgLCBgX19oZnNfYnJlY19maW5kYCwgYGhmc19ibm9kZV9maW5kYCwgYGhmc19icmVjX2xlbm9mZmAsIGBoZnNfYnJlY19rZXlsZW5gLCBhbmQgYGhmc19icmVjX3JlbW92ZWAgYXJlIGludGVncmFsIHRvIHRoZSBIRlMmIzQzOyBiLXRyZWUgaW1wbGVtZW50YXRpb24uIFRoYXQgbWVhbnMgdGhleSBhcmUgY2FsbGVkIHdoZW4gZGVhbGluZyB3aXRoIGZpbGUgbG9va3VwcywgcmVhZHMsIGFuZCB3cml0ZXMsIGFtb25nc3Qgb3RoZXIgdGhpbmdzLiBXaGlsZSB0aGV5JiMzOTtyZSBwcm9iYWJseSBoaXQgZnJlcXVlbnRseSBkdXJpbmcgSEZTJiM0Mzsgb3BlcmF0aW9ucywgdGhleSYjMzk7cmUgc3BlY2lmaWMgdG8gSEZTJiM0MzsgYW5kIG5vdCBnZW5lcmljIGtlcm5lbCBob3QtcGF0aHMgbGlrZSBga21hbGxvY2Agb3IgYHNjaGVkdWxlYC4gVGhlcmVmb3JlLCB0aGV5JiMzOTtyZSBnb29kIGNhbmRpZGF0ZXMgZm9yIGBGb2N1c1N5bWJvbHNgLgoKU28gdGhlIGluaXRpYWwgbGlzdCBvZiBmb2N1cyBzeW1ib2xzIGlzOgoKKiAgIGBfX2hmc19icmVjX2ZpbmRgCiogICBgaGZzX2JyZWNfZmluZGAKKiAgIGBoZnNfYm5vZGVfZHVtcGAKKiAgIGBoZnNfYm5vZGVfZmluZGAKKiAgIGBoZnNfYnJlY19sZW5vZmZgCiogICBgaGZzX2JyZWNfa2V5bGVuYAoqICAgYGhmc19icmVjX3JlbW92ZWAKCkhvbGQgb24gYSBzZWNvbmQuIGBoZnNfYm5vZGVfZHVtcGAuLi4gdGhhdCBzb3VuZHMgc3VzcGljaW91c2x5IGxpa2UgYSBkZWJ1ZyBmdW5jdGlvbi4gV2UgbmVlZCB0byB2ZXJpZnkgd2hldGhlciBpdCYjMzk7cyBjb21waWxlZCBpbiBieSBkZWZhdWx0IG9yIGlmIGl0IHJlcXVpcmVzIGEgc3BlY2lmaWMgZGVidWcgY29uZmlndXJhdGlvbiBmbGFnLiBXZSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUga2VybmVsIGNvbmZpZyBmb3IgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAxMjo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtoZnNfYm5vZGVfZHVtcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2hmc3BsdXMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2hmc3BsdXMvYm5vZGUuYz0yMzA9dm9pZCBoZnNfYm5vZGVfbW92ZShzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCB1MzIgZHN0LCB1MzIgc3JjLCB1MzIgbGVuKVxuLS1cbmZzL2hmc3BsdXMvYm5vZGUuYy0zNDktXG5mcy9oZnNwbHVzL2Jub2RlLmM6MzUwOnZvaWQgaGZzX2Jub2RlX2R1bXAoc3RydWN0IGhmc19ibm9kZSAqbm9kZSlcbmZzL2hmc3BsdXMvYm5vZGUuYy0zNTEte1xuLS1cbmZzL2hmc3BsdXMvYnJlYy5jPTY5PWludCBoZnNfYnJlY19pbnNlcnQoc3RydWN0IGhmc19maW5kX2RhdGEgKmZkLCB2b2lkICplbnRyeSwgdTMyIGVudHJ5X2xlbilcbi0tXG5mcy9oZnNwbHVzL2JyZWMuYy05NS1cdG5vZGUgPSBmZC1cdTAwM2Vibm9kZTtcbmZzL2hmc3BsdXMvYnJlYy5jOjk2Olx0aGZzX2Jub2RlX2R1bXAobm9kZSk7XG5mcy9oZnNwbHVzL2JyZWMuYy05Ny1cdC8qIGdldCBsYXN0IG9mZnNldCAqL1xuLS1cbmZzL2hmc3BsdXMvYnJlYy5jLTEzOS1cdGhmc19ibm9kZV93cml0ZShub2RlLCBlbnRyeSwgZGF0YV9vZmYgJiM0Mzsga2V5X2xlbiwgZW50cnlfbGVuKTtcbmZzL2hmc3BsdXMvYnJlYy5jOjE0MDpcdGhmc19ibm9kZV9kdW1wKG5vZGUpO1xuZnMvaGZzcGx1cy9icmVjLmMtMTQxLVxuLS1cbmZzL2hmc3BsdXMvYnJlYy5jPTE4NT1pbnQgaGZzX2JyZWNfcmVtb3ZlKHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZClcbi0tXG5mcy9oZnNwbHVzL2JyZWMuYy0yMDUtXHR9XG5mcy9oZnNwbHVzL2JyZWMuYzoyMDY6XHRoZnNfYm5vZGVfZHVtcChub2RlKTtcbmZzL2hmc3BsdXMvYnJlYy5jLTIwNy1cdGhmc19kYmcoXCYjMzQ7cmVjICVkLCBsZW4gJWRcXG5cJiMzNDssXG4tLVxuZnMvaGZzcGx1cy9icmVjLmMtMjM5LXNraXA6XG5mcy9oZnNwbHVzL2JyZWMuYzoyNDA6XHRoZnNfYm5vZGVfZHVtcChub2RlKTtcbmZzL2hmc3BsdXMvYnJlYy5jLTI0MS1cdGlmICghZmQtXHUwMDNlcmVjb3JkKVxuLS1cbmZzL2hmc3BsdXMvYnJlYy5jPTI0Nj1zdGF0aWMgc3RydWN0IGhmc19ibm9kZSAqaGZzX2Jub2RlX3NwbGl0KHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZClcbi0tXG5mcy9oZnNwbHVzL2JyZWMuYy0zNjctXG5mcy9oZnNwbHVzL2JyZWMuYzozNjg6XHRoZnNfYm5vZGVfZHVtcChub2RlKTtcbmZzL2hmc3BsdXMvYnJlYy5jOjM2OTpcdGhmc19ibm9kZV9kdW1wKG5ld19ub2RlKTtcbmZzL2hmc3BsdXMvYnJlYy5jLTM3MC1cdGhmc19ibm9kZV9wdXQobm9kZSk7XG4tLVxuZnMvaGZzcGx1cy9icmVjLmM9Mzc1PXN0YXRpYyBpbnQgaGZzX2JyZWNfdXBkYXRlX3BhcmVudChzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpXG4tLVxuZnMvaGZzcGx1cy9icmVjLmMtMzk1LVx0XHRyZXR1cm4gLUVOT0VOVDtcbmZzL2hmc3BsdXMvYnJlYy5jOjM5NjpcdGhmc19ibm9kZV9kdW1wKHBhcmVudCk7XG5mcy9oZnNwbHVzL2JyZWMuYy0zOTctXHRyZWMgPSBmZC1cdTAwM2VyZWNvcmQ7XG4tLVxuZnMvaGZzcGx1cy9icmVjLmMtNDQyLVx0aGZzX2Jub2RlX2NvcHkocGFyZW50LCBmZC1cdTAwM2VrZXlvZmZzZXQsIG5vZGUsIDE0LCBuZXdrZXlsZW4pO1xuZnMvaGZzcGx1cy9icmVjLmM6NDQzOlx0aGZzX2Jub2RlX2R1bXAocGFyZW50KTtcbmZzL2hmc3BsdXMvYnJlYy5jLTQ0NC1cbi0tXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaD0yODA9c3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBoZnNwbHVzX21pbl9pb19zaXplKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgtMzAwLSNkZWZpbmUgaGZzX2Jub2RlX21vdmUgaGZzcGx1c19ibm9kZV9tb3ZlXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaDozMDE6I2RlZmluZSBoZnNfYm5vZGVfZHVtcCBoZnNwbHVzX2Jub2RlX2R1bXBcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oLTMwMi0jZGVmaW5lIGhmc19ibm9kZV91bmxpbmsgaGZzcGx1c19ibm9kZV91bmxpbmtcbi0tXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaD0zODA9dm9pZCBoZnNfYm5vZGVfbW92ZShzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCB1MzIgZHN0LCB1MzIgc3JjLCB1MzIgbGVuKTtcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oOjM4MTp2b2lkIGhmc19ibm9kZV9kdW1wKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUpO1xuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgtMzgyLXZvaWQgaGZzX2Jub2RlX3VubGluayhzdHJ1Y3QgaGZzX2Jub2RlICpub2RlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAxMjo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTA1CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgaGZzX2Jub2RlX2R1bXAgRnVuY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGhmc19ibm9kZV9kdW1wYCBmdW5jdGlvbiBpbiB0aGUgSEZTIGNvZGUsIGFuZCBpdCYjMzk7cyBwb3BwaW5nIHVwIGluIGEgZmV3IGtleSBwbGFjZXM6IGBoZnNfYnJlY19pbnNlcnRgLCBgaGZzX2JyZWNfcmVtb3ZlYCwgYGhmc19ibm9kZV9zcGxpdGAsIGFuZCBgaGZzX2JyZWNfdXBkYXRlX3BhcmVudGAuIE15IGZpcnN0IHRob3VnaHQgaXMsIHRoaXMgc21lbGxzIGxpa2UgYSBkZWJ1Z2dpbmcgdG9vbC4gVGhlIHdheSBpdCYjMzk7cyB1c2VkIGluIHRoZXNlIGNvcmUgcmVjb3JkIG1hbmFnZW1lbnQgYW5kIGItdHJlZSBtYW5pcHVsYXRpb24gcm91dGluZXMgaXMgcHJldHR5IHRlbGxpbmcuIEhvd2V2ZXIsIHNvbWV0aGluZyYjMzk7cyBub3QgcXVpdGUgcmlnaHQuIEl0IHNlZW1zIHRvIGJlIHVuY29uZGl0aW9uYWxseSBjb21waWxlZCwgb3IgYXQgbGVhc3QsIHRoYXQmIzM5O3Mgd2hhdCBpdCBpbml0aWFsbHkgbG9va3MgbGlrZS4gSSYjMzk7ZCBiZXR0ZXIgZG91YmxlIGNoZWNrIHRoYXQuIE9oIHdhaXQhIEkgcmVtZW1iZXIuLi4gYGhmc19kYmdgIGlzIGEgbWFjcm8hIEkgbmVlZCB0byBzZWUgd2hhdCB0aGF0IG1hY3JvIGV4cGFuZHMgdG8gdG8gdW5kZXJzdGFuZCBpZiB0aGlzIGlzICphY3R1YWxseSogdW5jb25kaXRpb25hbGx5IGNvbXBpbGVkLCBvciBqdXN0IGNvbmRpdGlvbmFsbHkgdGhyb3VnaCB0aGUgbWFjcm8uIExldCBtZSBnbyBjaGVjay4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDEyOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVmaW5lIGhmc19kYmcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9oZnNwbHVzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMTI6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODI2MAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBIRlMmIzQzOyBEZWJ1Z2dpbmcgTGFuZHNjYXBlKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGN1cnJlbnQgc3RhdGUgb2YgZGVidWdnaW5nIHdpdGhpbiB0aGUgSEZTJiM0MzsgZmlsZXN5c3RlbSBpbXBsZW1lbnRhdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgaGZzX2RiZ2AuIFNlZW1zIGxpa2UgYSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LCBjb25zaWRlcmluZyBpdCYjMzk7cyBwcm9iYWJseSB0aGUgbWFzdGVyIGRlYnVnZ2luZyBmbGFnIG9yIHN0cnVjdHVyZSBmb3IgdGhlIEhGUyYjNDM7IGxheWVyLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gaWYgaXQmIzM5O3MgYSBzaW1wbGUgYm9vbGVhbiwgYSBiaXRtYXNrLCBvciBwZXJoYXBzIGEgbW9yZSBzb3BoaXN0aWNhdGVkIGRhdGEgc3RydWN0dXJlIGhvbGRpbmcgdmFyaW91cyBkZWJ1ZyBsZXZlbHMgb3IgY2F0ZWdvcmllcy4gTG9jYXRpbmcgaXQgd2l0aGluIGBmcy9oZnNwbHVzL2hmc3BsdXNfZnMuaGAgbWFrZXMgcGVyZmVjdCBzZW5zZTsgdGhlIGhlYWRlciBmaWxlIGlzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgZ2xvYmFsIGRlY2xhcmF0aW9ucyBhbmQgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBmb3IgdGhlIGZpbGVzeXN0ZW0gaXRzZWxmLiBGcm9tIHRoZXJlLCBJIGNhbiBhbmFseXplIHRoZSB1c2FnZXMgb2YgdGhhdCBzdHJ1Y3R1cmUgYWNyb3NzIHRoZSBzb3VyY2UgdHJlZSwgb3IgcG90ZW50aWFsbHksIGRlYnVnIG9wdGlvbnMsIGxpa2Uga2VybmVsIHBhcmFtZXRlcnMsIHRoYXQgbWF5IGVmZmVjdCBpdHMgc3RhdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDEyOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGZzX2RiZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2hmc3BsdXMvaGZzcGx1c19mcy5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMTI6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODUzNwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgaGF2aW5nIGl0OgoKKipEaWdnaW5nIGludG8gdGhlIEhGUyYjNDM7IENvZGViYXNlKioKCkFscmlnaHQsIHNvIEkmIzM5O20gdHJ5aW5nIHRvIHBpbnBvaW50IHdoZXJlIHRoaXMgcGFydGljdWxhciBkZWZpbml0aW9uIHJlc2lkZXMuIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCBpdCBtaWdodCBiZSB0dWNrZWQgYXdheSBpbiBgZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmhgLCBidXQgZXhwZXJpZW5jZSB0ZWxscyBtZSBpdCBjb3VsZCBiZSBkZWZpbmVkIHNsaWdodGx5IGRpZmZlcmVudGx5IG9yIGV2ZW4gZGVjbGFyZWQgaW4gYSByZWxhdGVkIGhlYWRlci4gVG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGNhc3QgYSB3aWRlciBuZXQuIEEgZ29vZCBzdGFydGluZyBwb2ludCBpcyB0byBmb2N1cyBteSBzZWFyY2gsIHNvIEkmIzM5O2xsIGdyZXAgZm9yIGBoZnNfZGJnYCB3aXRoaW4gdGhlIGBmcy9oZnNwbHVzL2AgZGlyZWN0b3J5LiBUaGF0IHNob3VsZCBxdWlja2x5IHJldmVhbCB3aGVyZSB0aGlzIHRoaW5nIGlzIGhpZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMTI6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGZzX2RiZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2hmc3BsdXMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2hmc3BsdXMvYXR0cmlidXRlcy5jPTk3PXN0YXRpYyBpbnQgaGZzcGx1c19hdHRyX2J1aWxkX3JlY29yZChoZnNwbHVzX2F0dHJfZW50cnkgKmVudHJ5LCBpbnQgcmVjb3JkX3R5cGUsXG4tLVxuZnMvaGZzcGx1cy9hdHRyaWJ1dGVzLmMtMTIxLVx0XHRlbHNlIHtcbmZzL2hmc3BsdXMvYXR0cmlidXRlcy5jOjEyMjpcdFx0XHRoZnNfZGJnKFwmIzM0O3ZhbHVlIHNpemUgJXp1IGlzIHRvbyBiaWdcXG5cJiMzNDssIHNpemUpO1xuZnMvaGZzcGx1cy9hdHRyaWJ1dGVzLmMtMTIzLVx0XHRcdHJldHVybiBIRlNQTFVTX0lOVkFMSURfQVRUUl9SRUNPUkQ7XG4tLVxuZnMvaGZzcGx1cy9hdHRyaWJ1dGVzLmM9MTQwPWludCBoZnNwbHVzX2ZpbmRfYXR0cihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgY25pZCxcbi0tXG5mcy9oZnNwbHVzL2F0dHJpYnV0ZXMuYy0xNDQtXG5mcy9oZnNwbHVzL2F0dHJpYnV0ZXMuYzoxNDU6XHRoZnNfZGJnKFwmIzM0O25hbWUgJXMsIGNuaWQgJWRcXG5cJiMzNDssIG5hbWUgPyBuYW1lIDogTlVMTCwgY25pZCk7XG5mcy9oZnNwbHVzL2F0dHJpYnV0ZXMuYy0xNDYtXG4tLVxuZnMvaGZzcGx1cy9hdHRyaWJ1dGVzLmM9MTgwPWludCBoZnNwbHVzX2F0dHJfZXhpc3RzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUpXG4tLVxuZnMvaGZzcGx1cy9hdHRyaWJ1dGVzLmMtMTg1LVxuZnMvaGZzcGx1cy9hdHRyaWJ1dGVzLmM6MTg2Olx0aGZzX2RiZyhcJiMzNDtuYW1lICVzLCBpbm8gJWxsdVxcblwmIzM0OyxcbmZzL2hmc3BsdXMvYXR0cmlidXRlcy5jLTE4Ny1cdFx0bmFtZSA/IG5hbWUgOiBOVUxMLCBpbm9kZS1cdTAwM2VpX2lubyk7XG4tLVxuZnMvaGZzcGx1cy9hdHRyaWJ1dGVzLmM9MjA5PWludCBoZnNwbHVzX2NyZWF0ZV9hdHRyX25vbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLFxuLS1cbmZzL2hmc3BsdXMvYXR0cmlidXRlcy5jLTIxNy1cbmZzL2hmc3BsdXMvYXR0cmlidXRlcy5jOjIxODpcdGhmc19kYmcoXCYjMzQ7bmFtZSAlcywgaW5vICVsbHVcXG5cJiMzNDssXG5mcy9oZnNwbHVzL2F0dHJpYnV0ZXMuYy0yMTktXHRcdG5hbWUgPyBuYW1lIDogTlVMTCwgaW5vZGUtXHUwMDNlaV9pbm8pO1xuLS1cbmZzL2hmc3BsdXMvYXR0cmlidXRlcy5jLTIzOC1cdFx0XHRlcnIgPSAtRUlOVkFMO1xuZnMvaGZzcGx1cy9hdHRyaWJ1dGVzLmM6MjM5Olx0XHRoZnNfZGJnKFwmIzM0O3VuYWJsZSB0byBzdG9yZSB2YWx1ZTogZXJyICVkXFxuXCYjMzQ7LCBlcnIpO1xuZnMvaGZzcGx1cy9hdHRyaWJ1dGVzLmMtMjQwLVx0XHRyZXR1cm4gZXJyO1xuLS1cbmZzL2hmc3BsdXMvYXR0cmlidXRlcy5jLTI1MS1cdGlmIChlcnIpIHtcbmZzL2hmc3BsdXMvYXR0cmlidXRlcy5jOjI1MjpcdFx0aGZzX2RiZyhcJiMzNDt1bmFibGUgdG8gc3RvcmUgdmFsdWU6IGVyciAlZFxcblwmIzM0OywgZXJyKTtcbmZzL2hmc3BsdXMvYXR0cmlidXRlcy5jLTI1My1cdFx0cmV0dXJuIGVycjtcbi0tXG5mcy9oZnNwbHVzL2F0dHJpYnV0ZXMuYz0yNjI9aW50IGhmc3BsdXNfY3JlYXRlX2F0dHIoc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9oZnNwbHVzL2F0dHJpYnV0ZXMuYy0yNzAtXG5mcy9oZnNwbHVzL2F0dHJpYnV0ZXMuYzoyNzE6XHRoZnNfZGJnKFwmIzM0O25hbWUgJXMsIGlubyAlbGx1XFxuXCYjMzQ7LFxuZnMvaGZzcGx1cy9hdHRyaWJ1dGVzLmMtMjcyLVx0XHRuYW1lID8gbmFtZSA6IE5VTEwsIGlub2RlLVx1MDAzZWlfaW5vKTtcbi0tXG5mcy9oZnNwbHVzL2F0dHJpYnV0ZXMuYz0zNTA9aW50IGhmc3BsdXNfZGVsZXRlX2F0dHJfbm9sb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsXG4tLVxuZnMvaGZzcGx1cy9hdHRyaWJ1dGVzLmMtMzU1LVxuZnMvaGZzcGx1cy9hdHRyaWJ1dGVzLmM6MzU2Olx0aGZzX2RiZyhcJiMzNDtuYW1lICVzLCBpbm8gJWxsdVxcblwmIzM0OyxcbmZzL2hmc3BsdXMvYXR0cmlidXRlcy5jLTM1Ny1cdFx0bmFtZSA/IG5hbWUgOiBOVUxMLCBpbm9kZS1cdTAwM2VpX2lubyk7XG4tLVxuZnMvaGZzcGx1cy9hdHRyaWJ1dGVzLmM9MzgzPWludCBoZnNwbHVzX2RlbGV0ZV9hdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUpXG4tLVxuZnMvaGZzcGx1cy9hdHRyaWJ1dGVzLmMtMzg4LVxuZnMvaGZzcGx1cy9hdHRyaWJ1dGVzLmM6Mzg5Olx0aGZzX2RiZyhcJiMzNDtuYW1lICVzLCBpbm8gJWxsdVxcblwmIzM0OyxcbmZzL2hmc3BsdXMvYXR0cmlidXRlcy5jLTM5MC1cdFx0bmFtZSA/IG5hbWUgOiBOVUxMLCBpbm9kZS1cdTAwM2VpX2lubyk7XG4tLVxuZnMvaGZzcGx1cy9hdHRyaWJ1dGVzLmM9NDE1PWludCBoZnNwbHVzX2RlbGV0ZV9hbGxfYXR0cnMoc3RydWN0IGlub2RlICpkaXIsIHUzMiBjbmlkKVxuLS1cbmZzL2hmc3BsdXMvYXR0cmlidXRlcy5jLTQxOS1cbmZzL2hmc3BsdXMvYXR0cmlidXRlcy5jOjQyMDpcdGhmc19kYmcoXCYjMzQ7Y25pZCAlZFxcblwmIzM0OywgY25pZCk7XG5mcy9oZnNwbHVzL2F0dHJpYnV0ZXMuYy00MjEtXG4tLVxuZnMvaGZzcGx1cy9hdHRyaWJ1dGVzLmM9NDU0PWludCBoZnNwbHVzX3JlcGxhY2VfYXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2hmc3BsdXMvYXR0cmlidXRlcy5jLTQ2Mi1cbmZzL2hmc3BsdXMvYXR0cmlidXRlcy5jOjQ2MzpcdGhmc19kYmcoXCYjMzQ7bmFtZSAlcywgaW5vICVsbHVcXG5cJiMzNDssXG5mcy9oZnNwbHVzL2F0dHJpYnV0ZXMuYy00NjQtXHRcdG5hbWUgPyBuYW1lIDogTlVMTCwgaW5vZGUtXHUwMDNlaV9pbm8pO1xuLS1cbmZzL2hmc3BsdXMvYmZpbmQuYz0xNT1pbnQgaGZzX2ZpbmRfaW5pdChzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlLCBzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpXG4tLVxuZnMvaGZzcGx1cy9iZmluZC5jLTI2LVx0ZmQtXHUwMDNla2V5ID0gcHRyICYjNDM7IHRyZWUtXHUwMDNlbWF4X2tleV9sZW4gJiM0MzsgMjtcbmZzL2hmc3BsdXMvYmZpbmQuYzoyNzpcdGhmc19kYmcoXCYjMzQ7Y25pZCAlZCwgY2FsbGVyICVwc1xcblwmIzM0OyxcbmZzL2hmc3BsdXMvYmZpbmQuYy0yOC1cdFx0dHJlZS1cdTAwM2VjbmlkLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpO1xuLS1cbmZzL2hmc3BsdXMvYmZpbmQuYz0zND12b2lkIGhmc19maW5kX2V4aXQoc3RydWN0IGhmc19maW5kX2RhdGEgKmZkKVxuLS1cbmZzL2hmc3BsdXMvYmZpbmQuYy0zNy1cdGtmcmVlKGZkLVx1MDAzZXNlYXJjaF9rZXkpO1xuZnMvaGZzcGx1cy9iZmluZC5jOjM4Olx0aGZzX2RiZyhcJiMzNDtjbmlkICVkLCBjYWxsZXIgJXBzXFxuXCYjMzQ7LFxuZnMvaGZzcGx1cy9iZmluZC5jLTM5LVx0XHRmZC1cdTAwM2V0cmVlLVx1MDAzZWNuaWQsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7XG4tLVxuZnMvaGZzcGx1cy9iaXRtYXAuYz0xOT1pbnQgaGZzcGx1c19ibG9ja19hbGxvY2F0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2l6ZSxcbi0tXG5mcy9oZnNwbHVzL2JpdG1hcC5jLTMzLVxuZnMvaGZzcGx1cy9iaXRtYXAuYzozNDpcdGhmc19kYmcoXCYjMzQ7c2l6ZSAldSwgb2Zmc2V0ICV1LCBsZW4gJXVcXG5cJiMzNDssIHNpemUsIG9mZnNldCwgbGVuKTtcbmZzL2hmc3BsdXMvYml0bWFwLmMtMzUtXHRtdXRleF9sb2NrKFx1MDAyNnNiaS1cdTAwM2VhbGxvY19tdXRleCk7XG4tLVxuZnMvaGZzcGx1cy9iaXRtYXAuYy05Mi1cdH1cbmZzL2hmc3BsdXMvYml0bWFwLmM6OTM6XHRoZnNfZGJnKFwmIzM0O2JpdG1hcCBmdWxsXFxuXCYjMzQ7KTtcbmZzL2hmc3BsdXMvYml0bWFwLmMtOTQtXHRzdGFydCA9IHNpemU7XG4tLVxuZnMvaGZzcGx1cy9iaXRtYXAuYy05OS1cdGlmIChzdGFydCBcdTAwM2U9IHNpemUpIHtcbmZzL2hmc3BsdXMvYml0bWFwLmM6MTAwOlx0XHRoZnNfZGJnKFwmIzM0O2JpdG1hcCBmdWxsXFxuXCYjMzQ7KTtcbmZzL2hmc3BsdXMvYml0bWFwLmMtMTAxLVx0XHRnb3RvIG91dDtcbi0tXG5mcy9oZnNwbHVzL2JpdG1hcC5jLTE1Ny1cdGhmc3BsdXNfbWFya19tZGJfZGlydHkoc2IpO1xuZnMvaGZzcGx1cy9iaXRtYXAuYzoxNTg6XHRoZnNfZGJnKFwmIzM0O3N0YXJ0ICV1LCBtYXggJXVcXG5cJiMzNDssIHN0YXJ0LCAqbWF4KTtcbmZzL2hmc3BsdXMvYml0bWFwLmMtMTU5LW91dDpcbi0tXG5mcy9oZnNwbHVzL2JpdG1hcC5jPTE2ND1pbnQgaGZzcGx1c19ibG9ja19mcmVlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBvZmZzZXQsIHUzMiBjb3VudClcbi0tXG5mcy9oZnNwbHVzL2JpdG1hcC5jLTE3Ni1cbmZzL2hmc3BsdXMvYml0bWFwLmM6MTc3Olx0aGZzX2RiZyhcJiMzNDtvZmZzZXQgJXUsIGNvdW50ICV1XFxuXCYjMzQ7LCBvZmZzZXQsIGNvdW50KTtcbmZzL2hmc3BsdXMvYml0bWFwLmMtMTc4LVx0LyogYXJlIGFsbCBvZiB0aGUgYml0cyBpbiByYW5nZT8gKi9cbi0tXG5mcy9oZnNwbHVzL2Jub2RlLmM9MTcyPXZvaWQgaGZzX2Jub2RlX2NvcHkoc3RydWN0IGhmc19ibm9kZSAqZHN0X25vZGUsIHUzMiBkc3QsXG4tLVxuZnMvaGZzcGx1cy9ibm9kZS5jLTE3Ny1cbmZzL2hmc3BsdXMvYm5vZGUuYzoxNzg6XHRoZnNfZGJnKFwmIzM0O2RzdCAldSwgc3JjICV1LCBsZW4gJXVcXG5cJiMzNDssIGRzdCwgc3JjLCBsZW4pO1xuZnMvaGZzcGx1cy9ibm9kZS5jLTE3OS1cdGlmICghbGVuKVxuLS1cbmZzL2hmc3BsdXMvYm5vZGUuYz0yMzA9dm9pZCBoZnNfYm5vZGVfbW92ZShzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCB1MzIgZHN0LCB1MzIgc3JjLCB1MzIgbGVuKVxuLS1cbmZzL2hmc3BsdXMvYm5vZGUuYy0yMzUtXG5mcy9oZnNwbHVzL2Jub2RlLmM6MjM2Olx0aGZzX2RiZyhcJiMzNDtkc3QgJXUsIHNyYyAldSwgbGVuICV1XFxuXCYjMzQ7LCBkc3QsIHNyYywgbGVuKTtcbmZzL2hmc3BsdXMvYm5vZGUuYy0yMzctXHRpZiAoIWxlbilcbi0tXG5mcy9oZnNwbHVzL2Jub2RlLmM9MzUwPXZvaWQgaGZzX2Jub2RlX2R1bXAoc3RydWN0IGhmc19ibm9kZSAqbm9kZSlcbi0tXG5mcy9oZnNwbHVzL2Jub2RlLmMtMzU2LVxuZnMvaGZzcGx1cy9ibm9kZS5jOjM1NzpcdGhmc19kYmcoXCYjMzQ7bm9kZSAlZFxcblwmIzM0Oywgbm9kZS1cdTAwM2V0aGlzKTtcbmZzL2hmc3BsdXMvYm5vZGUuYy0zNTgtXHRoZnNfYm5vZGVfcmVhZChub2RlLCBcdTAwMjZkZXNjLCAwLCBzaXplb2YoZGVzYykpO1xuZnMvaGZzcGx1cy9ibm9kZS5jLTM1OS1cdG51bV9yZWNzID0gbm9kZS1cdTAwM2VudW1fcmVjcztcbmZzL2hmc3BsdXMvYm5vZGUuYzozNjA6XHRoZnNfZGJnKFwmIzM0O25leHQgJWQsIHByZXYgJWQsIHR5cGUgJWQsIGhlaWdodCAlZCwgbnVtX3JlY3MgJWRcXG5cJiMzNDssXG5mcy9oZnNwbHVzL2Jub2RlLmMtMzYxLVx0XHRiZTMyX3RvX2NwdShkZXNjLm5leHQpLCBiZTMyX3RvX2NwdShkZXNjLnByZXYpLFxuLS1cbmZzL2hmc3BsdXMvYm5vZGUuYy0zNjQtXHRpZiAoIWhmc19ibm9kZV9udW1fcmVjc192YWxpZChub2RlKSkge1xuZnMvaGZzcGx1cy9ibm9kZS5jOjM2NTpcdFx0aGZzX2RiZyhcJiMzNDtpbnZhbGlkIG51bV9yZWNzICV1XFxuXCYjMzQ7LCBudW1fcmVjcyk7XG5mcy9oZnNwbHVzL2Jub2RlLmMtMzY2LVx0XHRyZXR1cm47XG4tLVxuZnMvaGZzcGx1cy9ibm9kZS5jLTM3MS1cdFx0a2V5X29mZiA9IGhmc19ibm9kZV9yZWFkX3UxNihub2RlLCBvZmYpO1xuZnMvaGZzcGx1cy9ibm9kZS5jOjM3MjpcdFx0aGZzX2RiZyhcJiMzNDsga2V5X29mZiAlZFwmIzM0Oywga2V5X29mZik7XG5mcy9oZnNwbHVzL2Jub2RlLmMtMzczLVx0XHRpZiAoaSBcdTAwMjZcdTAwMjYgbm9kZS1cdTAwM2V0eXBlID09IEhGU19OT0RFX0lOREVYKSB7XG4tLVxuZnMvaGZzcGx1cy9ibm9kZS5jLTM4MC1cdFx0XHRcdHRtcCA9IG5vZGUtXHUwMDNldHJlZS1cdTAwM2VtYXhfa2V5X2xlbiAmIzQzOyAyO1xuZnMvaGZzcGx1cy9ibm9kZS5jOjM4MTpcdFx0XHRoZnNfZGJnKFwmIzM0OyAoJWRcJiMzNDssIHRtcCk7XG5mcy9oZnNwbHVzL2Jub2RlLmMtMzgyLVx0XHRcdGhmc19ibm9kZV9yZWFkKG5vZGUsIFx1MDAyNmNuaWQsIGtleV9vZmYgJiM0MzsgdG1wLCA0KTtcbmZzL2hmc3BsdXMvYm5vZGUuYzozODM6XHRcdFx0aGZzX2RiZyhcJiMzNDssIGNuaWQgJWQpXCYjMzQ7LCBiZTMyX3RvX2NwdShjbmlkKSk7XG5mcy9oZnNwbHVzL2Jub2RlLmMtMzg0LVx0XHR9IGVsc2UgaWYgKGkgXHUwMDI2XHUwMDI2IG5vZGUtXHUwMDNldHlwZSA9PSBIRlNfTk9ERV9MRUFGKSB7XG4tLVxuZnMvaGZzcGx1cy9ibm9kZS5jLTM4Ny1cdFx0XHR0bXAgPSBoZnNfYm5vZGVfcmVhZF91MTYobm9kZSwga2V5X29mZik7XG5mcy9oZnNwbHVzL2Jub2RlLmM6Mzg4Olx0XHRcdGhmc19kYmcoXCYjMzQ7ICglZClcJiMzNDssIHRtcCk7XG5mcy9oZnNwbHVzL2Jub2RlLmMtMzg5LVx0XHR9XG5mcy9oZnNwbHVzL2Jub2RlLmMtMzkwLVx0fVxuZnMvaGZzcGx1cy9ibm9kZS5jOjM5MTpcdGhmc19kYmcoXCYjMzQ7XFxuXCYjMzQ7KTtcbmZzL2hmc3BsdXMvYm5vZGUuYy0zOTItfVxuLS1cbmZzL2hmc3BsdXMvYm5vZGUuYz0zOTQ9dm9pZCBoZnNfYm5vZGVfdW5saW5rKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUpXG4tLVxuZnMvaGZzcGx1cy9ibm9kZS5jLTQyNi1cdGlmICghbm9kZS1cdTAwM2VwcmV2IFx1MDAyNlx1MDAyNiAhbm9kZS1cdTAwM2VuZXh0KVxuZnMvaGZzcGx1cy9ibm9kZS5jOjQyNzpcdFx0aGZzX2RiZyhcJiMzNDtidHJlZSBkZWxldGUgbGV2ZWxcXG5cJiMzNDspO1xuZnMvaGZzcGx1cy9ibm9kZS5jLTQyOC1cdGlmICghbm9kZS1cdTAwM2VwYXJlbnQpIHtcbi0tXG5mcy9oZnNwbHVzL2Jub2RlLmM9NDYyPXN0YXRpYyBzdHJ1Y3QgaGZzX2Jub2RlICpfX2hmc19ibm9kZV9jcmVhdGUoc3RydWN0IGhmc19idHJlZSAqdHJlZSwgdTMyIGNuaWQpXG4tLVxuZnMvaGZzcGx1cy9ibm9kZS5jLTQ4Mi1cdGF0b21pY19zZXQoXHUwMDI2bm9kZS1cdTAwM2VyZWZjbnQsIDEpO1xuZnMvaGZzcGx1cy9ibm9kZS5jOjQ4MzpcdGhmc19kYmcoXCYjMzQ7Y25pZCAlZCwgbm9kZSAlZCwgcmVmY250IDFcXG5cJiMzNDssXG5mcy9oZnNwbHVzL2Jub2RlLmMtNDg0LVx0XHRub2RlLVx1MDAzZXRyZWUtXHUwMDNlY25pZCwgbm9kZS1cdTAwM2V0aGlzKTtcbi0tXG5mcy9oZnNwbHVzL2Jub2RlLmM9NTIwPXZvaWQgaGZzX2Jub2RlX3VuaGFzaChzdHJ1Y3QgaGZzX2Jub2RlICpub2RlKVxuLS1cbmZzL2hmc3BsdXMvYm5vZGUuYy01MjMtXG5mcy9oZnNwbHVzL2Jub2RlLmM6NTI0Olx0aGZzX2RiZyhcJiMzNDtjbmlkICVkLCBub2RlICVkLCByZWZjbnQgJWRcXG5cJiMzNDssXG5mcy9oZnNwbHVzL2Jub2RlLmMtNTI1LVx0XHRub2RlLVx1MDAzZXRyZWUtXHUwMDNlY25pZCwgbm9kZS1cdTAwM2V0aGlzLCBhdG9taWNfcmVhZChcdTAwMjZub2RlLVx1MDAzZXJlZmNudCkpO1xuLS1cbmZzL2hmc3BsdXMvYm5vZGUuYz02Njc9dm9pZCBoZnNfYm5vZGVfZ2V0KHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUpXG4tLVxuZnMvaGZzcGx1cy9ibm9kZS5jLTY3MC1cdFx0YXRvbWljX2luYyhcdTAwMjZub2RlLVx1MDAzZXJlZmNudCk7XG5mcy9oZnNwbHVzL2Jub2RlLmM6NjcxOlx0XHRoZnNfZGJnKFwmIzM0O2NuaWQgJWQsIG5vZGUgJWQsIHJlZmNudCAlZFxcblwmIzM0OyxcbmZzL2hmc3BsdXMvYm5vZGUuYy02NzItXHRcdFx0bm9kZS1cdTAwM2V0cmVlLVx1MDAzZWNuaWQsIG5vZGUtXHUwMDNldGhpcyxcbi0tXG5mcy9oZnNwbHVzL2Jub2RlLmM9Njc4PXZvaWQgaGZzX2Jub2RlX3B1dChzdHJ1Y3QgaGZzX2Jub2RlICpub2RlKVxuLS1cbmZzL2hmc3BsdXMvYm5vZGUuYy02ODMtXG5mcy9oZnNwbHVzL2Jub2RlLmM6Njg0Olx0XHRoZnNfZGJnKFwmIzM0O2NuaWQgJWQsIG5vZGUgJWQsIHJlZmNudCAlZFxcblwmIzM0OyxcbmZzL2hmc3BsdXMvYm5vZGUuYy02ODUtXHRcdFx0bm9kZS1cdTAwM2V0cmVlLVx1MDAzZWNuaWQsIG5vZGUtXHUwMDNldGhpcyxcbi0tXG5mcy9oZnNwbHVzL2JyZWMuYz02OT1pbnQgaGZzX2JyZWNfaW5zZXJ0KHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCwgdm9pZCAqZW50cnksIHUzMiBlbnRyeV9sZW4pXG4tLVxuZnMvaGZzcGx1cy9icmVjLmMtMTAwLVx0ZW5kX3JlY19vZmYgLT0gMjtcbmZzL2hmc3BsdXMvYnJlYy5jOjEwMTpcdGhmc19kYmcoXCYjMzQ7cmVjICVkLCBzaXplICVkLCBlbmRfb2ZmICVkLCBlbmRfcmVjX29mZiAlZFxcblwmIzM0OyxcbmZzL2hmc3BsdXMvYnJlYy5jLTEwMi1cdFx0cmVjLCBzaXplLCBlbmRfb2ZmLCBlbmRfcmVjX29mZik7XG4tLVxuZnMvaGZzcGx1cy9icmVjLmM9MTg1PWludCBoZnNfYnJlY19yZW1vdmUoc3RydWN0IGhmc19maW5kX2RhdGEgKmZkKVxuLS1cbmZzL2hmc3BsdXMvYnJlYy5jLTIwNi1cdGhmc19ibm9kZV9kdW1wKG5vZGUpO1xuZnMvaGZzcGx1cy9icmVjLmM6MjA3Olx0aGZzX2RiZyhcJiMzNDtyZWMgJWQsIGxlbiAlZFxcblwmIzM0OyxcbmZzL2hmc3BsdXMvYnJlYy5jLTIwOC1cdFx0ZmQtXHUwMDNlcmVjb3JkLCBmZC1cdTAwM2VrZXlsZW5ndGggJiM0MzsgZmQtXHUwMDNlZW50cnlsZW5ndGgpO1xuLS1cbmZzL2hmc3BsdXMvYnJlYy5jPTI0Nj1zdGF0aWMgc3RydWN0IGhmc19ibm9kZSAqaGZzX2Jub2RlX3NwbGl0KHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZClcbi0tXG5mcy9oZnNwbHVzL2JyZWMuYy0yNjItXHRoZnNfYm5vZGVfZ2V0KG5vZGUpO1xuZnMvaGZzcGx1cy9icmVjLmM6MjYzOlx0aGZzX2RiZyhcJiMzNDt0aGlzICVkIC0gbmV3ICVkIC0gbmV4dCAlZFxcblwmIzM0OyxcbmZzL2hmc3BsdXMvYnJlYy5jLTI2NC1cdFx0bm9kZS1cdTAwM2V0aGlzLCBuZXdfbm9kZS1cdTAwM2V0aGlzLCBub2RlLVx1MDAzZW5leHQpO1xuLS1cbmZzL2hmc3BsdXMvYnJlYy5jPTM3NT1zdGF0aWMgaW50IGhmc19icmVjX3VwZGF0ZV9wYXJlbnQoc3RydWN0IGhmc19maW5kX2RhdGEgKmZkKVxuLS1cbmZzL2hmc3BsdXMvYnJlYy5jLTQwNC1cdFx0ZmQtXHUwMDNla2V5bGVuZ3RoID0gbmV3a2V5bGVuID0gdHJlZS1cdTAwM2VtYXhfa2V5X2xlbiAmIzQzOyAyO1xuZnMvaGZzcGx1cy9icmVjLmM6NDA1Olx0aGZzX2RiZyhcJiMzNDtyZWMgJWQsIGtleWxlbmd0aCAlZCwgbmV3a2V5bGVuICVkXFxuXCYjMzQ7LFxuZnMvaGZzcGx1cy9icmVjLmMtNDA2LVx0XHRyZWMsIGZkLVx1MDAzZWtleWxlbmd0aCwgbmV3a2V5bGVuKTtcbi0tXG5mcy9oZnNwbHVzL2JyZWMuYy00MTYtXG5mcy9oZnNwbHVzL2JyZWMuYzo0MTc6XHRcdFx0aGZzX2RiZyhcJiMzNDtzcGxpdHRpbmcgaW5kZXggbm9kZVxcblwmIzM0Oyk7XG5mcy9oZnNwbHVzL2JyZWMuYy00MTgtXHRcdFx0ZmQtXHUwMDNlYm5vZGUgPSBwYXJlbnQ7XG4tLVxuZnMvaGZzcGx1cy9idHJlZS5jPTUyOD1zdHJ1Y3QgaGZzX2Jub2RlICpoZnNfYm1hcF9hbGxvYyhzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlKVxuLS1cbmZzL2hmc3BsdXMvYnRyZWUuYy01ODgtXHRcdGlmICghbmlkeCkge1xuZnMvaGZzcGx1cy9idHJlZS5jOjU4OTpcdFx0XHRoZnNfZGJnKFwmIzM0O2NyZWF0ZSBuZXcgYm1hcCBub2RlXFxuXCYjMzQ7KTtcbmZzL2hmc3BsdXMvYnRyZWUuYy01OTAtXHRcdFx0bmV4dF9ub2RlID0gaGZzX2JtYXBfbmV3X2JtYXAobm9kZSwgaWR4KTtcbi0tXG5mcy9oZnNwbHVzL2J0cmVlLmM9NjA5PXZvaWQgaGZzX2JtYXBfZnJlZShzdHJ1Y3QgaGZzX2Jub2RlICpub2RlKVxuLS1cbmZzL2hmc3BsdXMvYnRyZWUuYy02MTUtXG5mcy9oZnNwbHVzL2J0cmVlLmM6NjE2Olx0aGZzX2RiZyhcJiMzNDtub2RlICV1XFxuXCYjMzQ7LCBub2RlLVx1MDAzZXRoaXMpO1xuZnMvaGZzcGx1cy9idHJlZS5jLTYxNy1cdEJVR19PTighbm9kZS1cdTAwM2V0aGlzKTtcbi0tXG5mcy9oZnNwbHVzL2NhdGFsb2cuYz0yNTM9aW50IGhmc3BsdXNfY3JlYXRlX2NhdCh1MzIgY25pZCwgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvaGZzcGx1cy9jYXRhbG9nLmMtMjYxLVxuZnMvaGZzcGx1cy9jYXRhbG9nLmM6MjYyOlx0aGZzX2RiZyhcJiMzNDtuYW1lICVzLCBjbmlkICV1LCBpX25saW5rICVkXFxuXCYjMzQ7LFxuZnMvaGZzcGx1cy9jYXRhbG9nLmMtMjYzLVx0XHRzdHItXHUwMDNlbmFtZSwgY25pZCwgaW5vZGUtXHUwMDNlaV9ubGluayk7XG4tLVxuZnMvaGZzcGx1cy9jYXRhbG9nLmM9MzMxPWludCBoZnNwbHVzX2RlbGV0ZV9jYXQodTMyIGNuaWQsIHN0cnVjdCBpbm9kZSAqZGlyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqc3RyKVxuLS1cbmZzL2hmc3BsdXMvY2F0YWxvZy5jLTMzOC1cbmZzL2hmc3BsdXMvY2F0YWxvZy5jOjMzOTpcdGhmc19kYmcoXCYjMzQ7bmFtZSAlcywgY25pZCAldVxcblwmIzM0Oywgc3RyID8gc3RyLVx1MDAzZW5hbWUgOiBOVUxMLCBjbmlkKTtcbmZzL2hmc3BsdXMvY2F0YWxvZy5jLTM0MC1cdGVyciA9IGhmc19maW5kX2luaXQoSEZTUExVU19TQihzYiktXHUwMDNlY2F0X3RyZWUsIFx1MDAyNmZkKTtcbi0tXG5mcy9oZnNwbHVzL2NhdGFsb2cuYz00MjU9aW50IGhmc3BsdXNfcmVuYW1lX2NhdCh1MzIgY25pZCxcbi0tXG5mcy9oZnNwbHVzL2NhdGFsb2cuYy00MzQtXG5mcy9oZnNwbHVzL2NhdGFsb2cuYzo0MzU6XHRoZnNfZGJnKFwmIzM0O2NuaWQgJXUgLSBpbm8gJWxsdSwgbmFtZSAlcyAtIGlubyAlbGx1LCBuYW1lICVzXFxuXCYjMzQ7LFxuZnMvaGZzcGx1cy9jYXRhbG9nLmMtNDM2LVx0XHRjbmlkLCBzcmNfZGlyLVx1MDAzZWlfaW5vLCBzcmNfbmFtZS1cdTAwM2VuYW1lLFxuLS1cbmZzL2hmc3BsdXMvZGlyLmM9Mjk0PXN0YXRpYyBpbnQgaGZzcGx1c19saW5rKHN0cnVjdCBkZW50cnkgKnNyY19kZW50cnksIHN0cnVjdCBpbm9kZSAqZHN0X2Rpcixcbi0tXG5mcy9oZnNwbHVzL2Rpci5jLTMwOS1cbmZzL2hmc3BsdXMvZGlyLmM6MzEwOlx0aGZzX2RiZyhcJiMzNDtzcmNfZGlyLVx1MDAzZWlfaW5vICVsbHUsIGRzdF9kaXItXHUwMDNlaV9pbm8gJWxsdSwgaW5vZGUtXHUwMDNlaV9pbm8gJWxsdVxcblwmIzM0OyxcbmZzL2hmc3BsdXMvZGlyLmMtMzExLVx0XHRzcmNfZGlyLVx1MDAzZWlfaW5vLCBkc3RfZGlyLVx1MDAzZWlfaW5vLCBpbm9kZS1cdTAwM2VpX2lubyk7XG4tLVxuZnMvaGZzcGx1cy9kaXIuYz0zNzA9c3RhdGljIGludCBoZnNwbHVzX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuLS1cbmZzL2hmc3BsdXMvZGlyLmMtMzgxLVxuZnMvaGZzcGx1cy9kaXIuYzozODI6XHRoZnNfZGJnKFwmIzM0O2Rpci1cdTAwM2VpX2lubyAlbGx1LCBpbm9kZS1cdTAwM2VpX2lubyAlbGx1XFxuXCYjMzQ7LFxuZnMvaGZzcGx1cy9kaXIuYy0zODMtXHRcdGRpci1cdTAwM2VpX2lubywgaW5vZGUtXHUwMDNlaV9pbm8pO1xuLS1cbmZzL2hmc3BsdXMvZGlyLmM9NDYzPXN0YXRpYyBpbnQgaGZzcGx1c19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9oZnNwbHVzL2Rpci5jLTQ3NC1cbmZzL2hmc3BsdXMvZGlyLmM6NDc1Olx0aGZzX2RiZyhcJiMzNDtkaXItXHUwMDNlaV9pbm8gJWxsdSwgaW5vZGUtXHUwMDNlaV9pbm8gJWxsdVxcblwmIzM0OyxcbmZzL2hmc3BsdXMvZGlyLmMtNDc2LVx0XHRkaXItXHUwMDNlaV9pbm8sIGlub2RlLVx1MDAzZWlfaW5vKTtcbi0tXG5mcy9oZnNwbHVzL2Rpci5jPTUxND1zdGF0aWMgaW50IGhmc3BsdXNfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL2hmc3BsdXMvZGlyLmMtNTI1LVxuZnMvaGZzcGx1cy9kaXIuYzo1MjY6XHRoZnNfZGJnKFwmIzM0O2Rpci1cdTAwM2VpX2lubyAlbGx1LCBpbm9kZS1cdTAwM2VpX2lubyAlbGx1XFxuXCYjMzQ7LFxuZnMvaGZzcGx1cy9kaXIuYy01MjctXHRcdGRpci1cdTAwM2VpX2lubywgaW5vZGUtXHUwMDNlaV9pbm8pO1xuLS1cbmZzL2hmc3BsdXMvZXh0ZW50cy5jPTIyNz1pbnQgaGZzcGx1c19nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgaWJsb2NrLFxuLS1cbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTI3OS1kb25lOlxuZnMvaGZzcGx1cy9leHRlbnRzLmM6MjgwOlx0aGZzX2RiZyhcJiMzNDtpbm8gJWxsdSwgaWJsb2NrICVsbHUgLSBkYmxvY2sgJXVcXG5cJiMzNDssXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0yODEtXHRcdGlub2RlLVx1MDAzZWlfaW5vLCAobG9uZyBsb25nKWlibG9jaywgZGJsb2NrKTtcbi0tXG5mcy9oZnNwbHVzL2V4dGVudHMuYz0yOTk9c3RhdGljIHZvaWQgaGZzcGx1c19kdW1wX2V4dGVudChzdHJ1Y3QgaGZzcGx1c19leHRlbnQgKmV4dGVudClcbi0tXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0zMDItXG5mcy9oZnNwbHVzL2V4dGVudHMuYzozMDM6XHRoZnNfZGJnKFwmIzM0O2V4dGVudCAgIFwmIzM0Oyk7XG5mcy9oZnNwbHVzL2V4dGVudHMuYy0zMDQtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyA4OyBpJiM0MzsmIzQzOylcbmZzL2hmc3BsdXMvZXh0ZW50cy5jOjMwNTpcdFx0aGZzX2RiZyhcJiMzNDsgc3RhcnRfYmxvY2sgJXUsIGJsb2NrX2NvdW50ICV1XCYjMzQ7LFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMzA2LVx0XHRcdGJlMzJfdG9fY3B1KGV4dGVudFtpXS5zdGFydF9ibG9jayksXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0zMDctXHRcdFx0YmUzMl90b19jcHUoZXh0ZW50W2ldLmJsb2NrX2NvdW50KSk7XG5mcy9oZnNwbHVzL2V4dGVudHMuYzozMDg6XHRoZnNfZGJnKFwmIzM0O1xcblwmIzM0Oyk7XG5mcy9oZnNwbHVzL2V4dGVudHMuYy0zMDktfVxuLS1cbmZzL2hmc3BsdXMvZXh0ZW50cy5jPTQzOD1pbnQgaGZzcGx1c19maWxlX2V4dGVuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBib29sIHplcm9vdXQpXG4tLVxuZnMvaGZzcGx1cy9leHRlbnRzLmMtNDgwLVxuZnMvaGZzcGx1cy9leHRlbnRzLmM6NDgxOlx0aGZzX2RiZyhcJiMzNDtpbm8gJWxsdSwgc3RhcnQgJXUsIGxlbiAldVxcblwmIzM0OywgaW5vZGUtXHUwMDNlaV9pbm8sIHN0YXJ0LCBsZW4pO1xuZnMvaGZzcGx1cy9leHRlbnRzLmMtNDgyLVxuLS1cbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTQ4NC1cdFx0aWYgKCFoaXAtXHUwMDNlZmlyc3RfYmxvY2tzKSB7XG5mcy9oZnNwbHVzL2V4dGVudHMuYzo0ODU6XHRcdFx0aGZzX2RiZyhcJiMzNDtmaXJzdF9leHRlbnQ6IHN0YXJ0ICV1LCBsZW4gJXVcXG5cJiMzNDssXG5mcy9oZnNwbHVzL2V4dGVudHMuYy00ODYtXHRcdFx0XHRzdGFydCwgbGVuKTtcbi0tXG5mcy9oZnNwbHVzL2V4dGVudHMuYy01MjYtaW5zZXJ0X2V4dGVudDpcbmZzL2hmc3BsdXMvZXh0ZW50cy5jOjUyNzpcdGhmc19kYmcoXCYjMzQ7aW5zZXJ0IG5ldyBleHRlbnRcXG5cJiMzNDspO1xuZnMvaGZzcGx1cy9leHRlbnRzLmMtNTI4LVx0cmVzID0gaGZzcGx1c19leHRfd3JpdGVfZXh0ZW50X2xvY2tlZChpbm9kZSk7XG4tLVxuZnMvaGZzcGx1cy9leHRlbnRzLmM9NTQ0PXZvaWQgaGZzcGx1c19maWxlX3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvaGZzcGx1cy9leHRlbnRzLmMtNTUxLVxuZnMvaGZzcGx1cy9leHRlbnRzLmM6NTUyOlx0aGZzX2RiZyhcJiMzNDtpbm8gJWxsdSwgcGh5c19zaXplICVsbHUgLVx1MDAzZSBpX3NpemUgJWxsdVxcblwmIzM0OyxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTU1My1cdFx0aW5vZGUtXHUwMDNlaV9pbm8sIChsb25nIGxvbmcpaGlwLVx1MDAzZXBoeXNfc2l6ZSwgaW5vZGUtXHUwMDNlaV9zaXplKTtcbi0tXG5mcy9oZnNwbHVzL2lub2RlLmM9MzU2PWludCBoZnNwbHVzX2ZpbGVfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCxcbi0tXG5mcy9oZnNwbHVzL2lub2RlLmMtMzY1LVxuZnMvaGZzcGx1cy9pbm9kZS5jOjM2NjpcdGhmc19kYmcoXCYjMzQ7aW5vZGUtXHUwMDNlaV9pbm8gJWxsdSwgc3RhcnQgJWxsdSwgZW5kICVsbHVcXG5cJiMzNDssXG5mcy9oZnNwbHVzL2lub2RlLmMtMzY3LVx0XHRpbm9kZS1cdTAwM2VpX2lubywgc3RhcnQsIGVuZCk7XG4tLVxuZnMvaGZzcGx1cy9pbm9kZS5jPTY3Nz1pbnQgaGZzcGx1c19jYXRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9oZnNwbHVzL2lub2RlLmMtNjg0LVxuZnMvaGZzcGx1cy9pbm9kZS5jOjY4NTpcdGhmc19kYmcoXCYjMzQ7aW5vZGUtXHUwMDNlaV9pbm8gJWxsdVxcblwmIzM0OywgaW5vZGUtXHUwMDNlaV9pbm8pO1xuZnMvaGZzcGx1cy9pbm9kZS5jLTY4Ni1cbi0tXG5mcy9oZnNwbHVzL3N1cGVyLmM9MTY4PXN0YXRpYyBpbnQgaGZzcGx1c193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2hmc3BsdXMvc3VwZXIuYy0xNzItXG5mcy9oZnNwbHVzL3N1cGVyLmM6MTczOlx0aGZzX2RiZyhcJiMzNDtpbm8gJWxsdVxcblwmIzM0OywgaW5vZGUtXHUwMDNlaV9pbm8pO1xuZnMvaGZzcGx1cy9zdXBlci5jLTE3NC1cbi0tXG5mcy9oZnNwbHVzL3N1cGVyLmM9MTg2PXN0YXRpYyB2b2lkIGhmc3BsdXNfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbmZzL2hmc3BsdXMvc3VwZXIuYy0xODcte1xuZnMvaGZzcGx1cy9zdXBlci5jOjE4ODpcdGhmc19kYmcoXCYjMzQ7aW5vICVsbHVcXG5cJiMzNDssIGlub2RlLVx1MDAzZWlfaW5vKTtcbmZzL2hmc3BsdXMvc3VwZXIuYy0xODktXHR0cnVuY2F0ZV9pbm9kZV9wYWdlc19maW5hbChcdTAwMjZpbm9kZS1cdTAwM2VpX2RhdGEpO1xuLS1cbmZzL2hmc3BsdXMvc3VwZXIuYz0xOTc9aW50IGhmc3BsdXNfY29tbWl0X3N1cGVyYmxvY2soc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9oZnNwbHVzL3N1cGVyLmMtMjAzLVxuZnMvaGZzcGx1cy9zdXBlci5jOjIwNDpcdGhmc19kYmcoXCYjMzQ7c3RhcnRpbmcuLi5cXG5cJiMzNDspO1xuZnMvaGZzcGx1cy9zdXBlci5jLTIwNS1cbi0tXG5mcy9oZnNwbHVzL3N1cGVyLmMtMjEyLVxuZnMvaGZzcGx1cy9zdXBlci5jOjIxMzpcdGhmc19kYmcoXCYjMzQ7ZnJlZV9ibG9ja3MgJXUsIG5leHRfY25pZCAldSwgZm9sZGVyX2NvdW50ICV1LCBmaWxlX2NvdW50ICV1XFxuXCYjMzQ7LFxuZnMvaGZzcGx1cy9zdXBlci5jLTIxNC1cdFx0c2JpLVx1MDAzZWZyZWVfYmxvY2tzLCBzYmktXHUwMDNlbmV4dF9jbmlkLFxuLS1cbmZzL2hmc3BsdXMvc3VwZXIuYy0yMzgtXG5mcy9oZnNwbHVzL3N1cGVyLmM6MjM5Olx0aGZzX2RiZyhcJiMzNDtmaW5pc2hlZDogZXJyICVkXFxuXCYjMzQ7LCBlcnJvcik7XG5mcy9oZnNwbHVzL3N1cGVyLmMtMjQwLVxuLS1cbmZzL2hmc3BsdXMvc3VwZXIuYz0yNDQ9c3RhdGljIGludCBoZnNwbHVzX3N5bmNfZnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHdhaXQpXG4tLVxuZnMvaGZzcGx1cy9zdXBlci5jLTI1MS1cbmZzL2hmc3BsdXMvc3VwZXIuYzoyNTI6XHRoZnNfZGJnKFwmIzM0O3N0YXJ0aW5nLi4uXFxuXCYjMzQ7KTtcbmZzL2hmc3BsdXMvc3VwZXIuYy0yNTMtXG4tLVxuZnMvaGZzcGx1cy9zdXBlci5jLTI4Mi1cbmZzL2hmc3BsdXMvc3VwZXIuYzoyODM6XHRoZnNfZGJnKFwmIzM0O2ZpbmlzaGVkOiBlcnIgJWRcXG5cJiMzNDssIGVycm9yKTtcbmZzL2hmc3BsdXMvc3VwZXIuYy0yODQtXG4tLVxuZnMvaGZzcGx1cy9zdXBlci5jPTMyOT1zdGF0aWMgdm9pZCBoZnNwbHVzX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2hmc3BsdXMvc3VwZXIuYy0zMzItXG5mcy9oZnNwbHVzL3N1cGVyLmM6MzMzOlx0aGZzX2RiZyhcJiMzNDtzdGFydGluZy4uLlxcblwmIzM0Oyk7XG5mcy9oZnNwbHVzL3N1cGVyLmMtMzM0LVxuLS1cbmZzL2hmc3BsdXMvc3VwZXIuYy0zNTMtXHRrZnJlZShzYmktXHUwMDNlc19iYWNrdXBfdmhkcl9idWYpO1xuZnMvaGZzcGx1cy9zdXBlci5jOjM1NDpcdGhmc19kYmcoXCYjMzQ7ZmluaXNoZWRcXG5cJiMzNDspO1xuZnMvaGZzcGx1cy9zdXBlci5jLTM1NS19XG4tLVxuZnMvaGZzcGx1cy94YXR0ci5jPTUzPXN0YXRpYyB1MzIgaGZzcGx1c19pbml0X2hlYWRlcl9ub2RlKHN0cnVjdCBpbm9kZSAqYXR0cl9maWxlLFxuLS1cbmZzL2hmc3BsdXMveGF0dHIuYy02Ny1cbmZzL2hmc3BsdXMveGF0dHIuYzo2ODpcdGhmc19kYmcoXCYjMzQ7Y2x1bXAgJXUsIG5vZGVfc2l6ZSAldVxcblwmIzM0OyxcbmZzL2hmc3BsdXMveGF0dHIuYy02OS1cdFx0Y2x1bXBfc2l6ZSwgbm9kZV9zaXplKTtcbi0tXG5mcy9oZnNwbHVzL3hhdHRyLmM9MTk4PXN0YXRpYyBpbnQgaGZzcGx1c19jcmVhdGVfYXR0cmlidXRlc19maWxlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvaGZzcGx1cy94YXR0ci5jLTIxMy1cbmZzL2hmc3BsdXMveGF0dHIuYzoyMTQ6XHRoZnNfZGJnKFwmIzM0O2lubyAlZFxcblwmIzM0OywgSEZTUExVU19BVFRSX0NOSUQpO1xuZnMvaGZzcGx1cy94YXR0ci5jLTIxNS1cbi0tXG5mcy9oZnNwbHVzL3hhdHRyLmM9MzUxPWludCBfX2hmc3BsdXNfc2V0eGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSxcbi0tXG5mcy9oZnNwbHVzL3hhdHRyLmMtMzYwLVxuZnMvaGZzcGx1cy94YXR0ci5jOjM2MTpcdGhmc19kYmcoXCYjMzQ7aW5vICVsbHUsIG5hbWUgJXMsIHZhbHVlICVwLCBzaXplICV6dVxcblwmIzM0OyxcbmZzL2hmc3BsdXMveGF0dHIuYy0zNjItXHRcdGlub2RlLVx1MDAzZWlfaW5vLCBuYW1lID8gbmFtZSA6IE5VTEwsXG4tLVxuZnMvaGZzcGx1cy94YXR0ci5jLTQ0My1cdFx0aWYgKGVycikge1xuZnMvaGZzcGx1cy94YXR0ci5jOjQ0NDpcdFx0XHRoZnNfZGJnKFwmIzM0O3VuYWJsZSB0byByZXBsYWNlIHhhdHRyOiBlcnIgJWRcXG5cJiMzNDssIGVycik7XG5mcy9oZnNwbHVzL3hhdHRyLmMtNDQ1LVx0XHRcdGdvdG8gZW5kX3NldHhhdHRyO1xuLS1cbmZzL2hmc3BsdXMveGF0dHIuYy00NTQtXHRcdGlmIChlcnIpIHtcbmZzL2hmc3BsdXMveGF0dHIuYzo0NTU6XHRcdFx0aGZzX2RiZyhcJiMzNDt1bmFibGUgdG8gc3RvcmUgdmFsdWU6IGVyciAlZFxcblwmIzM0OywgZXJyKTtcbmZzL2hmc3BsdXMveGF0dHIuYy00NTYtXHRcdFx0Z290byBlbmRfc2V0eGF0dHI7XG4tLVxuZnMvaGZzcGx1cy94YXR0ci5jLTQ5Ni1cdGhmc19maW5kX2V4aXQoXHUwMDI2Y2F0X2ZkKTtcbmZzL2hmc3BsdXMveGF0dHIuYzo0OTc6XHRoZnNfZGJnKFwmIzM0O2ZpbmlzaGVkOiByZXMgJWRcXG5cJiMzNDssIGVycik7XG5mcy9oZnNwbHVzL3hhdHRyLmMtNDk4LVx0cmV0dXJuIGVycjtcbi0tXG5mcy9oZnNwbHVzL3hhdHRyLmM9NTM0PWludCBoZnNwbHVzX3NldHhhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsXG4tLVxuZnMvaGZzcGx1cy94YXR0ci5jLTU0Mi1cbmZzL2hmc3BsdXMveGF0dHIuYzo1NDM6XHRoZnNfZGJnKFwmIzM0O2lubyAlbGx1LCBuYW1lICVzLCBwcmVmaXggJXMsIHByZWZpeGxlbiAlenUsIFwmIzM0O1xuZnMvaGZzcGx1cy94YXR0ci5jLTU0NC1cdFx0XCYjMzQ7dmFsdWUgJXAsIHNpemUgJXp1XFxuXCYjMzQ7LFxuLS1cbmZzL2hmc3BsdXMveGF0dHIuYy01NTYtXG5mcy9oZnNwbHVzL3hhdHRyLmM6NTU3Olx0aGZzX2RiZyhcJiMzNDtmaW5pc2hlZDogcmVzICVkXFxuXCYjMzQ7LCByZXMpO1xuZnMvaGZzcGx1cy94YXR0ci5jLTU1OC1cbi0tXG5mcy9oZnNwbHVzL3hhdHRyLmM9Njk2PXNzaXplX3QgaGZzcGx1c19nZXR4YXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLFxuLS1cbmZzL2hmc3BsdXMveGF0dHIuYy03MDItXG5mcy9oZnNwbHVzL3hhdHRyLmM6NzAzOlx0aGZzX2RiZyhcJiMzNDtpbm8gJWxsdSwgbmFtZSAlcywgcHJlZml4ICVzXFxuXCYjMzQ7LFxuZnMvaGZzcGx1cy94YXR0ci5jLTcwNC1cdFx0aW5vZGUtXHUwMDNlaV9pbm8sIG5hbWUgPyBuYW1lIDogTlVMTCxcbi0tXG5mcy9oZnNwbHVzL3hhdHRyLmMtNzE3LVxuZnMvaGZzcGx1cy94YXR0ci5jOjcxODpcdGhmc19kYmcoXCYjMzQ7ZmluaXNoZWQ6IHJlcyAlZFxcblwmIzM0OywgcmVzKTtcbmZzL2hmc3BsdXMveGF0dHIuYy03MTktXG4tLVxuZnMvaGZzcGx1cy94YXR0ci5jPTgwMj1zc2l6ZV90IGhmc3BsdXNfbGlzdHhhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSlcbi0tXG5mcy9oZnNwbHVzL3hhdHRyLmMtODEyLVxuZnMvaGZzcGx1cy94YXR0ci5jOjgxMzpcdGhmc19kYmcoXCYjMzQ7aW5vICVsbHVcXG5cJiMzNDssIGlub2RlLVx1MDAzZWlfaW5vKTtcbmZzL2hmc3BsdXMveGF0dHIuYy04MTQtXG4tLVxuZnMvaGZzcGx1cy94YXR0ci5jLTkwMC1cbmZzL2hmc3BsdXMveGF0dHIuYzo5MDE6XHRoZnNfZGJnKFwmIzM0O2ZpbmlzaGVkOiByZXMgJXpkXFxuXCYjMzQ7LCByZXMpO1xuZnMvaGZzcGx1cy94YXR0ci5jLTkwMi1cbi0tXG5mcy9oZnNwbHVzL3hhdHRyLmM9OTA2PXN0YXRpYyBpbnQgaGZzcGx1c19yZW1vdmV4YXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lKVxuLS1cbmZzL2hmc3BsdXMveGF0dHIuYy05MTQtXG5mcy9oZnNwbHVzL3hhdHRyLmM6OTE1Olx0aGZzX2RiZyhcJiMzNDtpbm8gJWxsdSwgbmFtZSAlc1xcblwmIzM0OyxcbmZzL2hmc3BsdXMveGF0dHIuYy05MTYtXHRcdGlub2RlLVx1MDAzZWlfaW5vLCBuYW1lID8gbmFtZSA6IE5VTEwpO1xuLS1cbmZzL2hmc3BsdXMveGF0dHIuYy05ODQtXG5mcy9oZnNwbHVzL3hhdHRyLmM6OTg1Olx0aGZzX2RiZyhcJiMzNDtmaW5pc2hlZDogZXJyICVkXFxuXCYjMzQ7LCBlcnIpO1xuZnMvaGZzcGx1cy94YXR0ci5jLTk4Ni1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMTI6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyNjAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEhGUyYjNDM7IENvZGUgZm9yIERlYnVnZ2luZyBGb2N1cyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBzZWUgYSBtYWNybywgYGhmc19kYmdgLCB1c2VkIGV2ZXJ5d2hlcmUuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBidXQgd2FpdCwgYGhmc19ibm9kZV9kdW1wYCBpcyBkZWZpbmVkIHVuY29uZGl0aW9uYWxseSEgVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYW5kIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgcHJpbWFyaWx5IHVzZWQgZm9yIGRlYnVnZ2luZy4gTGV0JiMzOTtzIG1ha2UgYSBtZW50YWwgbm90ZSB0byBjaGVjayBpZiBgaGZzX2Jub2RlX2R1bXBgIGlzIGEgZ29vZCBzeW1ib2wgdG8gZm9jdXMgb24gd2hlbiBJJiMzOTttIGRlYnVnZ2luZyB0aGlzLgoKQmV5b25kIHRoYXQsIEkgc2VlIGEgYnVuY2ggb2Ygb3RoZXIgZnVuY3Rpb25zIHRoYXQgc2VlbSByZWFsbHkgaW1wb3J0YW50LiBUaGV5JiMzOTtyZSBhbGwgZnVuY3Rpb25hbCwgc28gdGhleSYjMzk7cmUgc29saWQgY2FuZGlkYXRlczogYF9faGZzX2JyZWNfZmluZGAsIGBoZnNfYnJlY19maW5kYCwgYGhmc19ibm9kZV9maW5kYCwgYGhmc19icmVjX2xlbm9mZmAsIGBoZnNfYnJlY19rZXlsZW5gLCBhbmQgYGhmc19icmVjX3JlbW92ZWAuIEkgc2hvdWxkIHByb2JhYmx5IG1ha2UgYSBsaXN0IGp1c3QgdG8ga2VlcCB0aGVtIHN0cmFpZ2h0OgoKKiAgIGBfX2hmc19icmVjX2ZpbmRgCiogICBgaGZzX2JyZWNfZmluZGAKKiAgIGBoZnNfYm5vZGVfZmluZGAKKiAgIGBoZnNfYnJlY19sZW5vZmZgCiogICBgaGZzX2JyZWNfa2V5bGVuYAoqICAgYGhmc19icmVjX3JlbW92ZWAKCk5vdywgYmVmb3JlIEkgZGlnIGluLCBJIG5lZWQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgbWlnaHQgYWZmZWN0IHdoYXQgSSYjMzk7bSBzZWVpbmcuIEFoLCB5ZXMsIGBIRlNQTFVTX0ZTYCBpcyB0aGUgbWFpbiBvbmUgdGhhdCBqdW1wcyBvdXQuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgY29uZmlncyB0aGF0IGNvdWxkIGJlIHJlbGV2YW50LiBUaGF0JiMzOTtzIGFsd2F5cyBhIGdvb2QgcHJhY3RpY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDEyOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBIRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9oZnNwbHVzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaGZzcGx1cy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9oZnNwbHVzL0tjb25maWc6Mjpjb25maWcgSEZTUExVU19GU1xuZnMvaGZzcGx1cy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtBcHBsZSBFeHRlbmRlZCBIRlMgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuLS1cbmZzL2hmc3BsdXMvS2NvbmZpZy0xNy1cbmZzL2hmc3BsdXMvS2NvbmZpZzoxODpjb25maWcgSEZTUExVU19LVU5JVF9URVNUXG5mcy9oZnNwbHVzL0tjb25maWctMTktXHR0cmlzdGF0ZSBcJiMzNDtLVW5pdCB0ZXN0cyBmb3IgSEZTJiM0MzsgZmlsZXN5c3RlbVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDEyOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MDU3CgkJCQkJCQlvdXRwdXQ6IDE1OQoJCQkJCQkJdGhvdWdodHM6IDIyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBIRlMmIzQzOyBCLVRyZWUgQm91bmRzIENoZWNrIFBhdGNoKioKCk9rYXksIEkmIzM5O3ZlIHJldmlld2VkIHRoZSBwYXRjaCBhbmQgSSYjMzk7bSBzYXRpc2ZpZWQuIGBIRlNQTFVTX0ZTYCBpcyBzdWZmaWNpZW50IGZvciB0aGlzIG9uZS4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBJJiMzOTt2ZSBnb3QgdGhpcyBzdHJhaWdodC4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGJvdW5kcyBjaGVja2luZyB3aXRoaW4gdGhlIEhGUyYjNDM7IGItdHJlZSBvcGVyYXRpb25zLiBJdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBzcGVjaWZpY2FsbHkgaW4gaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBhbmQgcGFyc2VzIEhGUyYjNDM7IGltYWdlcy4gVGhpcyBjbGVhcmx5IG1lYW5zIGl0JiMzOTtzIGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcuCgpNeSBmb2N1cyBzeW1ib2xzIGFyZSBhcyBmb2xsb3dzOiBgX19oZnNfYnJlY19maW5kYCwgYGhmc19icmVjX2ZpbmRgLCBgaGZzX2Jub2RlX2ZpbmRgLCBgaGZzX2JyZWNfbGVub2ZmYCwgYGhmc19icmVjX2tleWxlbmAsIGFuZCBgaGZzX2JyZWNfcmVtb3ZlYC4KClRoZSBwYXRjaCYjMzk7cyBpbnRlbnQgaXMgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzIGFuZCB3cml0ZXMuIFRoaXMgaXMgYWNoaWV2ZWQgYnkgdmFsaWRhdGluZyB0aGUgYi10cmVlIG5vZGUgYW5kIHJlY29yZCBoYW5kbGluZy4gVGhpcyBpcyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50IGZvciBjb3JydXB0ZWQgZmlsZXN5c3RlbSBpbWFnZXMuIEl0JiMzOTtzIHRyaWdnZXJlZCBieSBtb3VudGluZyBhbmQgaW50ZXJhY3Rpbmcgd2l0aCBIRlMmIzQzOyBpbWFnZXMsIG1lYW5pbmcgSSBjYW4gcG90ZW50aWFsbHkgdHJpZ2dlciBpdCB3aXRoIGNyYWZ0ZWQgaW5wdXQuIEkmIzM5O20gZ29pbmcgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMTI6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hGU1BMVVNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2hmc19icmVjX2ZpbmQmIzM0OywKICAgICYjMzQ7aGZzX2JyZWNfZmluZCYjMzQ7LAogICAgJiMzNDtoZnNfYm5vZGVfZmluZCYjMzQ7LAogICAgJiMzNDtoZnNfYnJlY19sZW5vZmYmIzM0OywKICAgICYjMzQ7aGZzX2JyZWNfa2V5bGVuJiMzNDssCiAgICAmIzM0O2hmc19icmVjX3JlbW92ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyBhbmQgdmFsaWRhdGlvbiB0byBIRlMmIzQzOyBiLXRyZWUgbm9kZSBhbmQgcmVjb3JkIGhhbmRsaW5nIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyB3aGVuIGRlYWxpbmcgd2l0aCBjb3JydXB0ZWQgZmlsZXN5c3RlbSBpbWFnZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgSEZTJiM0MzsgZmlsZXN5c3RlbSBkcml2ZXIgdGhhdCBpcyByZWFjaGFibGUgYnkgbW91bnRpbmcgYW5kIGludGVyYWN0aW5nIHdpdGggY3JhZnRlZCBIRlMmIzQzOyBpbWFnZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hGU1BMVVNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2hmc19icmVjX2ZpbmQmIzM0OywKICAgICYjMzQ7aGZzX2JyZWNfZmluZCYjMzQ7LAogICAgJiMzNDtoZnNfYm5vZGVfZmluZCYjMzQ7LAogICAgJiMzNDtoZnNfYnJlY19sZW5vZmYmIzM0OywKICAgICYjMzQ7aGZzX2JyZWNfa2V5bGVuJiMzNDssCiAgICAmIzM0O2hmc19icmVjX3JlbW92ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyBhbmQgdmFsaWRhdGlvbiB0byBIRlMmIzQzOyBiLXRyZWUgbm9kZSBhbmQgcmVjb3JkIGhhbmRsaW5nIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyB3aGVuIGRlYWxpbmcgd2l0aCBjb3JydXB0ZWQgZmlsZXN5c3RlbSBpbWFnZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgSEZTJiM0MzsgZmlsZXN5c3RlbSBkcml2ZXIgdGhhdCBpcyByZWFjaGFibGUgYnkgbW91bnRpbmcgYW5kIGludGVyYWN0aW5nIHdpdGggY3JhZnRlZCBIRlMmIzQzOyBpbWFnZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xMlQxMjo1NToyOS45OTAxMjcxODRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjU1ODUwNTA1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIRlNQTFVTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19oZnNfYnJlY19maW5kXCIsXG4gICAgXCJoZnNfYnJlY19maW5kXCIsXG4gICAgXCJoZnNfYm5vZGVfZmluZFwiLFxuICAgIFwiaGZzX2JyZWNfbGVub2ZmXCIsXG4gICAgXCJoZnNfYnJlY19rZXlsZW5cIixcbiAgICBcImhmc19icmVjX3JlbW92ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIGFuZCB2YWxpZGF0aW9uIHRvIEhGUysgYi10cmVlIG5vZGUgYW5kIHJlY29yZCBoYW5kbGluZyB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgd2hlbiBkZWFsaW5nIHdpdGggY29ycnVwdGVkIGZpbGVzeXN0ZW0gaW1hZ2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIEhGUysgZmlsZXN5c3RlbSBkcml2ZXIgdGhhdCBpcyByZWFjaGFibGUgYnkgbW91bnRpbmcgYW5kIGludGVyYWN0aW5nIHdpdGggY3JhZnRlZCBIRlMrIGltYWdlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMTI6NTU6MjkuOTkwMTMyNDE0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Njg4NjkwNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmOWVmMzkyMWU3ZTVhNjEzZWM4NzYwYzYxZTViOWM0MmNjYzE4Y2FkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gSnVsIDEyIDEyOjU1OjI4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvYmZpbmQuYyBiL2ZzL2hmc3BsdXMvYmZpbmQuY1xcbmluZGV4IDlhNTVmYTZkNTI5NDI5Li5hNTM5MWZmMDdjNzBmNiAxMDA2NDRcXG4tLS0gYS9mcy9oZnNwbHVzL2JmaW5kLmNcXG4rKysgYi9mcy9oZnNwbHVzL2JmaW5kLmNcXG5AQCAtMTgsNiArMTgsNyBAQCBpbnQgaGZzX2ZpbmRfaW5pdChzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlLCBzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpXFxuIFxcbiBcXHRmZC1cXHUwMDNldHJlZSA9IHRyZWU7XFxuIFxcdGZkLVxcdTAwM2Vibm9kZSA9IE5VTEw7XFxuK1xcdGhmc19maW5kX3Jlc2V0KGZkKTtcXG4gXFx0cHRyID0ga3phbGxvYyh0cmVlLVxcdTAwM2VtYXhfa2V5X2xlbiAqIDIgKyA0LCBHRlBfS0VSTkVMKTtcXG4gXFx0aWYgKCFwdHIpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbkBAIC0xMDYsMTIgKzEwNywxNCBAQCBpbnQgX19oZnNfYnJlY19maW5kKHN0cnVjdCBoZnNfYm5vZGUgKmJub2RlLCBzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQsXFxuIFxcdHUxNiBvZmYsIGxlbiwga2V5bGVuO1xcbiBcXHRpbnQgcmVjO1xcbiBcXHRpbnQgYiwgZTtcXG4tXFx0aW50IHJlcztcXG4rXFx0aW50IHJlcyA9IC1FTk9FTlQ7XFxuIFxcbiBcXHRCVUdfT04oIXJlY19mb3VuZCk7XFxuK1xcdGlmICghaGZzX2Jub2RlX251bV9yZWNzX3ZhbGlkKGJub2RlKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXG4gXFx0YiA9IDA7XFxuIFxcdGUgPSBibm9kZS1cXHUwMDNlbnVtX3JlY3MgLSAxO1xcbi1cXHRyZXMgPSAtRU5PRU5UO1xcbiBcXHRkbyB7XFxuIFxcdFxcdHJlYyA9IChlICsgYikgLyAyO1xcbiBcXHRcXHRsZW4gPSBoZnNfYnJlY19sZW5vZmYoYm5vZGUsIHJlYywgXFx1MDAyNm9mZik7XFxuQEAgLTE1OCwxMSArMTYxLDcgQEAgaW50IGhmc19icmVjX2ZpbmQoc3RydWN0IGhmc19maW5kX2RhdGEgKmZkLCBzZWFyY2hfc3RyYXRlZ3lfdCBkb19rZXlfY29tcGFyZSlcXG4gXFx0X19iZTMyIGRhdGE7XFxuIFxcdGludCBoZWlnaHQsIHJlcztcXG4gXFxuLVxcdGZkLVxcdTAwM2VyZWNvcmQgPSAtMTtcXG4tXFx0ZmQtXFx1MDAzZWtleW9mZnNldCA9IC0xO1xcbi1cXHRmZC1cXHUwMDNla2V5bGVuZ3RoID0gLTE7XFxuLVxcdGZkLVxcdTAwM2VlbnRyeW9mZnNldCA9IC0xO1xcbi1cXHRmZC1cXHUwMDNlZW50cnlsZW5ndGggPSAtMTtcXG4rXFx0aGZzX2ZpbmRfcmVzZXQoZmQpO1xcbiBcXG4gXFx0dHJlZSA9IGZkLVxcdTAwM2V0cmVlO1xcbiBcXHRpZiAoZmQtXFx1MDAzZWJub2RlKVxcbmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2Jub2RlLmMgYi9mcy9oZnNwbHVzL2Jub2RlLmNcXG5pbmRleCBkMDg4ZmI3ZWIwZGZhMy4uZjE4NWMwMTJkMDkwMjYgMTAwNjQ0XFxuLS0tIGEvZnMvaGZzcGx1cy9ibm9kZS5jXFxuKysrIGIvZnMvaGZzcGx1cy9ibm9kZS5jXFxuQEAgLTM1MiwxNSArMzUyLDIyIEBAIHZvaWQgaGZzX2Jub2RlX2R1bXAoc3RydWN0IGhmc19ibm9kZSAqbm9kZSlcXG4gXFx0c3RydWN0IGhmc19ibm9kZV9kZXNjIGRlc2M7XFxuIFxcdF9fYmUzMiBjbmlkO1xcbiBcXHRpbnQgaSwgb2ZmLCBrZXlfb2ZmO1xcbitcXHR1MTYgbnVtX3JlY3M7XFxuIFxcbiBcXHRoZnNfZGJnKFxcXCJub2RlICVkXFxcXG5cXFwiLCBub2RlLVxcdTAwM2V0aGlzKTtcXG4gXFx0aGZzX2Jub2RlX3JlYWQobm9kZSwgXFx1MDAyNmRlc2MsIDAsIHNpemVvZihkZXNjKSk7XFxuK1xcdG51bV9yZWNzID0gbm9kZS1cXHUwMDNlbnVtX3JlY3M7XFxuIFxcdGhmc19kYmcoXFxcIm5leHQgJWQsIHByZXYgJWQsIHR5cGUgJWQsIGhlaWdodCAlZCwgbnVtX3JlY3MgJWRcXFxcblxcXCIsXFxuIFxcdFxcdGJlMzJfdG9fY3B1KGRlc2MubmV4dCksIGJlMzJfdG9fY3B1KGRlc2MucHJldiksXFxuIFxcdFxcdGRlc2MudHlwZSwgZGVzYy5oZWlnaHQsIGJlMTZfdG9fY3B1KGRlc2MubnVtX3JlY3MpKTtcXG4gXFxuK1xcdGlmICghaGZzX2Jub2RlX251bV9yZWNzX3ZhbGlkKG5vZGUpKSB7XFxuK1xcdFxcdGhmc19kYmcoXFxcImludmFsaWQgbnVtX3JlY3MgJXVcXFxcblxcXCIsIG51bV9yZWNzKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbiBcXHRvZmYgPSBub2RlLVxcdTAwM2V0cmVlLVxcdTAwM2Vub2RlX3NpemUgLSAyO1xcbi1cXHRmb3IgKGkgPSBiZTE2X3RvX2NwdShkZXNjLm51bV9yZWNzKTsgaSBcXHUwMDNlPSAwOyBvZmYgLT0gMiwgaS0tKSB7XFxuK1xcdGZvciAoaSA9IG51bV9yZWNzOyBpIFxcdTAwM2U9IDA7IG9mZiAtPSAyLCBpLS0pIHtcXG4gXFx0XFx0a2V5X29mZiA9IGhmc19ibm9kZV9yZWFkX3UxNihub2RlLCBvZmYpO1xcbiBcXHRcXHRoZnNfZGJnKFxcXCIga2V5X29mZiAlZFxcXCIsIGtleV9vZmYpO1xcbiBcXHRcXHRpZiAoaSBcXHUwMDI2XFx1MDAyNiBub2RlLVxcdTAwM2V0eXBlID09IEhGU19OT0RFX0lOREVYKSB7XFxuQEAgLTU3OSw2ICs1ODYsOSBAQCBzdHJ1Y3QgaGZzX2Jub2RlICpoZnNfYm5vZGVfZmluZChzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlLCB1MzIgbnVtKVxcbiBcXHRcXHRnb3RvIG5vZGVfZXJyb3I7XFxuIFxcdH1cXG4gXFxuK1xcdGlmICghaGZzX2Jub2RlX251bV9yZWNzX3ZhbGlkKG5vZGUpKVxcbitcXHRcXHRnb3RvIG5vZGVfZXJyb3I7XFxuK1xcbiBcXHRyZWNfb2ZmID0gdHJlZS1cXHUwMDNlbm9kZV9zaXplIC0gMjtcXG4gXFx0b2ZmID0gaGZzX2Jub2RlX3JlYWRfdTE2KG5vZGUsIHJlY19vZmYpO1xcbiBcXHRpZiAob2ZmICE9IHNpemVvZihzdHJ1Y3QgaGZzX2Jub2RlX2Rlc2MpKVxcbkBAIC01ODYsOSArNTk2LDcgQEAgc3RydWN0IGhmc19ibm9kZSAqaGZzX2Jub2RlX2ZpbmQoc3RydWN0IGhmc19idHJlZSAqdHJlZSwgdTMyIG51bSlcXG4gXFx0Zm9yIChpID0gMTsgaSBcXHUwMDNjPSBub2RlLVxcdTAwM2VudW1fcmVjczsgb2ZmID0gbmV4dF9vZmYsIGkrKykge1xcbiBcXHRcXHRyZWNfb2ZmIC09IDI7XFxuIFxcdFxcdG5leHRfb2ZmID0gaGZzX2Jub2RlX3JlYWRfdTE2KG5vZGUsIHJlY19vZmYpO1xcbi1cXHRcXHRpZiAobmV4dF9vZmYgXFx1MDAzYz0gb2ZmIHx8XFxuLVxcdFxcdCAgICBuZXh0X29mZiBcXHUwMDNlIHRyZWUtXFx1MDAzZW5vZGVfc2l6ZSB8fFxcbi1cXHRcXHQgICAgbmV4dF9vZmYgXFx1MDAyNiAxKVxcbitcXHRcXHRpZiAoIWhmc19icmVjX3JhbmdlX3ZhbGlkKG5vZGUsIG9mZiwgbmV4dF9vZmYsIHJlY19vZmYpKVxcbiBcXHRcXHRcXHRnb3RvIG5vZGVfZXJyb3I7XFxuIFxcdFxcdGVudHJ5X3NpemUgPSBuZXh0X29mZiAtIG9mZjtcXG4gXFx0XFx0aWYgKG5vZGUtXFx1MDAzZXR5cGUgIT0gSEZTX05PREVfSU5ERVggXFx1MDAyNlxcdTAwMjZcXG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9icmVjLmMgYi9mcy9oZnNwbHVzL2JyZWMuY1xcbmluZGV4IGUzZGY4OTI4NDA3OWRiLi4zMTEyYzNiY2Y5Y2Y4ZCAxMDA2NDRcXG4tLS0gYS9mcy9oZnNwbHVzL2JyZWMuY1xcbisrKyBiL2ZzL2hmc3BsdXMvYnJlYy5jXFxuQEAgLTIwLDM1ICsyMCw0MSBAQCBzdGF0aWMgaW50IGhmc19idHJlZV9pbmNfaGVpZ2h0KHN0cnVjdCBoZnNfYnRyZWUgKik7XFxuIHUxNiBoZnNfYnJlY19sZW5vZmYoc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgdTE2IHJlYywgdTE2ICpvZmYpXFxuIHtcXG4gXFx0X19iZTE2IHJldHZhbFsyXTtcXG4tXFx0dTE2IGRhdGFvZmY7XFxuK1xcdHUxNiBkYXRhX29mZjtcXG4rXFx0dTE2IG5leHRfb2ZmO1xcbiBcXG4tXFx0ZGF0YW9mZiA9IG5vZGUtXFx1MDAzZXRyZWUtXFx1MDAzZW5vZGVfc2l6ZSAtIChyZWMgKyAyKSAqIDI7XFxuLVxcdGhmc19ibm9kZV9yZWFkKG5vZGUsIHJldHZhbCwgZGF0YW9mZiwgNCk7XFxuK1xcdGlmICghaGZzX2JyZWNfcmVjb3JkX3ZhbGlkKG5vZGUsIHJlYykpIHtcXG4rXFx0XFx0Km9mZiA9IDA7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHRkYXRhX29mZiA9IG5vZGUtXFx1MDAzZXRyZWUtXFx1MDAzZW5vZGVfc2l6ZSAtIChyZWMgKyAyKSAqIDI7XFxuK1xcdGhmc19ibm9kZV9yZWFkKG5vZGUsIHJldHZhbCwgZGF0YV9vZmYsIDQpO1xcbiBcXHQqb2ZmID0gYmUxNl90b19jcHUocmV0dmFsWzFdKTtcXG4tXFx0cmV0dXJuIGJlMTZfdG9fY3B1KHJldHZhbFswXSkgLSAqb2ZmO1xcbitcXHRuZXh0X29mZiA9IGJlMTZfdG9fY3B1KHJldHZhbFswXSk7XFxuK1xcdGlmICghaGZzX2JyZWNfcmFuZ2VfdmFsaWQobm9kZSwgKm9mZiwgbmV4dF9vZmYsIGRhdGFfb2ZmKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdHJldHVybiBuZXh0X29mZiAtICpvZmY7XFxuIH1cXG4gXFxuIC8qIEdldCB0aGUgbGVuZ3RoIG9mIHRoZSBrZXkgZnJvbSBhIGtleWVkIHJlY29yZCAqL1xcbiB1MTYgaGZzX2JyZWNfa2V5bGVuKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsIHUxNiByZWMpXFxuIHtcXG4tXFx0dTE2IHJldHZhbCwgcmVjb2ZmO1xcbitcXHR1MTYgcmV0dmFsLCByZWNvZmYsIGxlbjtcXG4gXFxuIFxcdGlmIChub2RlLVxcdTAwM2V0eXBlICE9IEhGU19OT0RFX0lOREVYIFxcdTAwMjZcXHUwMDI2IG5vZGUtXFx1MDAzZXR5cGUgIT0gSEZTX05PREVfTEVBRilcXG4gXFx0XFx0cmV0dXJuIDA7XFxuK1xcdGlmICghaGZzX2JyZWNfcmVjb3JkX3ZhbGlkKG5vZGUsIHJlYykpXFxuK1xcdFxcdHJldHVybiAwO1xcbiBcXG4gXFx0aWYgKChub2RlLVxcdTAwM2V0eXBlID09IEhGU19OT0RFX0lOREVYKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAhKG5vZGUtXFx1MDAzZXRyZWUtXFx1MDAzZWF0dHJpYnV0ZXMgXFx1MDAyNiBIRlNfVFJFRV9WQVJJRFhLRVlTKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAobm9kZS1cXHUwMDNldHJlZS1cXHUwMDNlY25pZCAhPSBIRlNQTFVTX0FUVFJfQ05JRCkpIHtcXG4gXFx0XFx0cmV0dmFsID0gbm9kZS1cXHUwMDNldHJlZS1cXHUwMDNlbWF4X2tleV9sZW4gKyAyO1xcbiBcXHR9IGVsc2Uge1xcbi1cXHRcXHRyZWNvZmYgPSBoZnNfYm5vZGVfcmVhZF91MTYobm9kZSxcXG4tXFx0XFx0XFx0bm9kZS1cXHUwMDNldHJlZS1cXHUwMDNlbm9kZV9zaXplIC0gKHJlYyArIDEpICogMik7XFxuLVxcdFxcdGlmICghcmVjb2ZmKVxcbi1cXHRcXHRcXHRyZXR1cm4gMDtcXG4tXFx0XFx0aWYgKHJlY29mZiBcXHUwMDNlIG5vZGUtXFx1MDAzZXRyZWUtXFx1MDAzZW5vZGVfc2l6ZSAtIDIpIHtcXG4tXFx0XFx0XFx0cHJfZXJyKFxcXCJyZWNvZmYgJWQgdG9vIGxhcmdlXFxcXG5cXFwiLCByZWNvZmYpO1xcbitcXHRcXHRsZW4gPSBoZnNfYnJlY19sZW5vZmYobm9kZSwgcmVjLCBcXHUwMDI2cmVjb2ZmKTtcXG4rXFx0XFx0aWYgKGxlbiA9PSAwKVxcbiBcXHRcXHRcXHRyZXR1cm4gMDtcXG4tXFx0XFx0fVxcbiBcXG4gXFx0XFx0cmV0dmFsID0gaGZzX2Jub2RlX3JlYWRfdTE2KG5vZGUsIHJlY29mZikgKyAyO1xcbiBcXHRcXHRpZiAocmV0dmFsIFxcdTAwM2Ugbm9kZS1cXHUwMDNldHJlZS1cXHUwMDNlbWF4X2tleV9sZW4gKyAyKSB7XFxuQEAgLTE4NSwxMCArMTkxLDE1IEBAIGludCBoZnNfYnJlY19yZW1vdmUoc3RydWN0IGhmc19maW5kX2RhdGEgKmZkKVxcbiBcXHR0cmVlID0gZmQtXFx1MDAzZXRyZWU7XFxuIFxcdG5vZGUgPSBmZC1cXHUwMDNlYm5vZGU7XFxuIGFnYWluOlxcbitcXHRpZiAoIWhmc19icmVjX3JlY29yZF92YWxpZChub2RlLCBmZC1cXHUwMDNlcmVjb3JkKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU87XFxuK1xcbiBcXHRyZWNfb2ZmID0gdHJlZS1cXHUwMDNlbm9kZV9zaXplIC0gKGZkLVxcdTAwM2VyZWNvcmQgKyAyKSAqIDI7XFxuIFxcdGVuZF9vZmYgPSB0cmVlLVxcdTAwM2Vub2RlX3NpemUgLSAobm9kZS1cXHUwMDNlbnVtX3JlY3MgKyAxKSAqIDI7XFxuIFxcbiBcXHRpZiAobm9kZS1cXHUwMDNldHlwZSA9PSBIRlNfTk9ERV9MRUFGKSB7XFxuK1xcdFxcdGlmICh0cmVlLVxcdTAwM2VsZWFmX2NvdW50ID09IDApXFxuK1xcdFxcdFxcdHJldHVybiAtRUlPO1xcbiBcXHRcXHR0cmVlLVxcdTAwM2VsZWFmX2NvdW50LS07XFxuIFxcdFxcdG1hcmtfaW5vZGVfZGlydHkodHJlZS1cXHUwMDNlaW5vZGUpO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaGZzcGx1c19mcy5oIGIvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmhcXG5pbmRleCBlYzA0YjgyYWQ5Mjc4Ny4uZDg3ZDU1YTM1ZDI1OGIgMTAwNjQ0XFxuLS0tIGEvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmhcXG4rKysgYi9mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaFxcbkBAIC01ODcsNiArNTg3LDc4IEBAIGJvb2wgaXNfYm5vZGVfb2Zmc2V0X3ZhbGlkKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsIHUzMiBvZmYpXFxuIFxcdHJldHVybiBpc192YWxpZDtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZVxcbitib29sIGhmc19ibm9kZV9udW1fcmVjc192YWxpZChzdHJ1Y3QgaGZzX2Jub2RlICpub2RlKVxcbit7XFxuK1xcdHUzMiBub2RlX3NpemU7XFxuK1xcdHUzMiB0YWJsZV9zaXplO1xcbitcXHR1MzIgYXJlYV9zaXplO1xcbitcXHR1MzIgcmVjX3NpemUgPSBzaXplb2YoX19iZTE2KTtcXG4rXFx0dTMyIGRlc2Nfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaGZzX2Jub2RlX2Rlc2MpO1xcbitcXG4rXFx0aWYgKCFub2RlIHx8ICFub2RlLVxcdTAwM2V0cmVlKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRub2RlX3NpemUgPSBub2RlLVxcdTAwM2V0cmVlLVxcdTAwM2Vub2RlX3NpemU7XFxuK1xcdGlmIChub2RlX3NpemUgXFx1MDAzYyBkZXNjX3NpemUpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGFyZWFfc2l6ZSA9IG5vZGVfc2l6ZSAtIGRlc2Nfc2l6ZTtcXG4rXFx0dGFibGVfc2l6ZSA9ICgodTMyKW5vZGUtXFx1MDAzZW51bV9yZWNzICsgMSkgKiByZWNfc2l6ZTtcXG4rXFxuK1xcdHJldHVybiB0YWJsZV9zaXplIFxcdTAwM2M9IGFyZWFfc2l6ZTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZVxcbitib29sIGhmc19icmVjX3JlY29yZF92YWxpZChzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCBpbnQgcmVjb3JkKVxcbit7XFxuK1xcdGlmICghaGZzX2Jub2RlX251bV9yZWNzX3ZhbGlkKG5vZGUpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdGlmIChyZWNvcmQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRyZXR1cm4gcmVjb3JkIFxcdTAwM2Mgbm9kZS1cXHUwMDNlbnVtX3JlY3M7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmVcXG4rYm9vbCBoZnNfYnJlY19yYW5nZV92YWxpZChzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCB1MTYgb2ZmLCB1MTYgbmV4dF9vZmYsXFxuK1xcdFxcdFxcdCAgdTE2IHJlY19vZmYpXFxuK3tcXG4rXFx0dTMyIHRhYmxlX3NpemU7XFxuK1xcdHUzMiB0YWJsZV9zdGFydDtcXG4rXFx0dTMyIHJlY19zaXplID0gc2l6ZW9mKF9fYmUxNik7XFxuK1xcdHUzMiBkZXNjX3NpemUgPSBzaXplb2Yoc3RydWN0IGhmc19ibm9kZV9kZXNjKTtcXG4rXFxuK1xcdGlmICghbm9kZSB8fCAhbm9kZS1cXHUwMDNldHJlZSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0aWYgKG9mZiBcXHUwMDNjIGRlc2Nfc2l6ZSB8fCAob2ZmIFxcdTAwMjYgMSkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlmIChuZXh0X29mZiBcXHUwMDNjPSBvZmYgfHxcXG4rXFx0XFx0bmV4dF9vZmYgXFx1MDAzZSBub2RlLVxcdTAwM2V0cmVlLVxcdTAwM2Vub2RlX3NpemUgfHxcXG4rXFx0XFx0bmV4dF9vZmYgXFx1MDAzZSByZWNfb2ZmIHx8XFxuK1xcdFxcdChuZXh0X29mZiBcXHUwMDI2IDEpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHR0YWJsZV9zaXplID0gKCh1MzIpbm9kZS1cXHUwMDNlbnVtX3JlY3MgKyAxKSAqIHJlY19zaXplO1xcbitcXHR0YWJsZV9zdGFydCA9IG5vZGUtXFx1MDAzZXRyZWUtXFx1MDAzZW5vZGVfc2l6ZSAtIHRhYmxlX3NpemU7XFxuK1xcdGlmIChuZXh0X29mZiBcXHUwMDNlIHRhYmxlX3N0YXJ0KVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZVxcbit2b2lkIGhmc19maW5kX3Jlc2V0KHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZClcXG4re1xcbitcXHRmZC1cXHUwMDNlcmVjb3JkID0gLTE7XFxuK1xcdGZkLVxcdTAwM2VrZXlvZmZzZXQgPSAtMTtcXG4rXFx0ZmQtXFx1MDAzZWtleWxlbmd0aCA9IC0xO1xcbitcXHRmZC1cXHUwMDNlZW50cnlvZmZzZXQgPSAtMTtcXG4rXFx0ZmQtXFx1MDAzZWVudHJ5bGVuZ3RoID0gLTE7XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmVcXG4gdTMyIGNoZWNrX2FuZF9jb3JyZWN0X3JlcXVlc3RlZF9sZW5ndGgoc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgdTMyIG9mZiwgdTMyIGxlbilcXG4ge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQxMjo1NTozMC43NTk3NTk1ODdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1Nzg4ODYyNzc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhGU1BMVVNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2hmc19icmVjX2ZpbmRcIixcbiAgICBcImhmc19icmVjX2ZpbmRcIixcbiAgICBcImhmc19ibm9kZV9maW5kXCIsXG4gICAgXCJoZnNfYnJlY19sZW5vZmZcIixcbiAgICBcImhmc19icmVjX2tleWxlblwiLFxuICAgIFwiaGZzX2JyZWNfcmVtb3ZlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgYW5kIHZhbGlkYXRpb24gdG8gSEZTKyBiLXRyZWUgbm9kZSBhbmQgcmVjb3JkIGhhbmRsaW5nIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyB3aGVuIGRlYWxpbmcgd2l0aCBjb3JydXB0ZWQgZmlsZXN5c3RlbSBpbWFnZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgSEZTKyBmaWxlc3lzdGVtIGRyaXZlciB0aGF0IGlzIHJlYWNoYWJsZSBieSBtb3VudGluZyBhbmQgaW50ZXJhY3Rpbmcgd2l0aCBjcmFmdGVkIEhGUysgaW1hZ2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGY5ZWYzOTIxZTdlNWE2MTNlYzg3NjBjNjFlNWI5YzQyY2NjMThjYWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1bCAxMiAxMjo1NToyOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvYmZpbmQuYyBiL2ZzL2hmc3BsdXMvYmZpbmQuY1xuaW5kZXggOWE1NWZhNmQ1Mjk0MjkuLmE1MzkxZmYwN2M3MGY2IDEwMDY0NFxuLS0tIGEvZnMvaGZzcGx1cy9iZmluZC5jXG4rKysgYi9mcy9oZnNwbHVzL2JmaW5kLmNcbkBAIC0xOCw2ICsxOCw3IEBAIGludCBoZnNfZmluZF9pbml0KHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUsIHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZClcbiBcbiBcdGZkLVx1MDAzZXRyZWUgPSB0cmVlO1xuIFx0ZmQtXHUwMDNlYm5vZGUgPSBOVUxMO1xuK1x0aGZzX2ZpbmRfcmVzZXQoZmQpO1xuIFx0cHRyID0ga3phbGxvYyh0cmVlLVx1MDAzZW1heF9rZXlfbGVuICogMiArIDQsIEdGUF9LRVJORUwpO1xuIFx0aWYgKCFwdHIpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuQEAgLTEwNiwxMiArMTA3LDE0IEBAIGludCBfX2hmc19icmVjX2ZpbmQoc3RydWN0IGhmc19ibm9kZSAqYm5vZGUsIHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCxcbiBcdHUxNiBvZmYsIGxlbiwga2V5bGVuO1xuIFx0aW50IHJlYztcbiBcdGludCBiLCBlO1xuLVx0aW50IHJlcztcbitcdGludCByZXMgPSAtRU5PRU5UO1xuIFxuIFx0QlVHX09OKCFyZWNfZm91bmQpO1xuK1x0aWYgKCFoZnNfYm5vZGVfbnVtX3JlY3NfdmFsaWQoYm5vZGUpKVxuK1x0XHRnb3RvIGZhaWw7XG4rXG4gXHRiID0gMDtcbiBcdGUgPSBibm9kZS1cdTAwM2VudW1fcmVjcyAtIDE7XG4tXHRyZXMgPSAtRU5PRU5UO1xuIFx0ZG8ge1xuIFx0XHRyZWMgPSAoZSArIGIpIC8gMjtcbiBcdFx0bGVuID0gaGZzX2JyZWNfbGVub2ZmKGJub2RlLCByZWMsIFx1MDAyNm9mZik7XG5AQCAtMTU4LDExICsxNjEsNyBAQCBpbnQgaGZzX2JyZWNfZmluZChzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQsIHNlYXJjaF9zdHJhdGVneV90IGRvX2tleV9jb21wYXJlKVxuIFx0X19iZTMyIGRhdGE7XG4gXHRpbnQgaGVpZ2h0LCByZXM7XG4gXG4tXHRmZC1cdTAwM2VyZWNvcmQgPSAtMTtcbi1cdGZkLVx1MDAzZWtleW9mZnNldCA9IC0xO1xuLVx0ZmQtXHUwMDNla2V5bGVuZ3RoID0gLTE7XG4tXHRmZC1cdTAwM2VlbnRyeW9mZnNldCA9IC0xO1xuLVx0ZmQtXHUwMDNlZW50cnlsZW5ndGggPSAtMTtcbitcdGhmc19maW5kX3Jlc2V0KGZkKTtcbiBcbiBcdHRyZWUgPSBmZC1cdTAwM2V0cmVlO1xuIFx0aWYgKGZkLVx1MDAzZWJub2RlKVxuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvYm5vZGUuYyBiL2ZzL2hmc3BsdXMvYm5vZGUuY1xuaW5kZXggZDA4OGZiN2ViMGRmYTMuLmYxODVjMDEyZDA5MDI2IDEwMDY0NFxuLS0tIGEvZnMvaGZzcGx1cy9ibm9kZS5jXG4rKysgYi9mcy9oZnNwbHVzL2Jub2RlLmNcbkBAIC0zNTIsMTUgKzM1MiwyMiBAQCB2b2lkIGhmc19ibm9kZV9kdW1wKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUpXG4gXHRzdHJ1Y3QgaGZzX2Jub2RlX2Rlc2MgZGVzYztcbiBcdF9fYmUzMiBjbmlkO1xuIFx0aW50IGksIG9mZiwga2V5X29mZjtcbitcdHUxNiBudW1fcmVjcztcbiBcbiBcdGhmc19kYmcoXCJub2RlICVkXFxuXCIsIG5vZGUtXHUwMDNldGhpcyk7XG4gXHRoZnNfYm5vZGVfcmVhZChub2RlLCBcdTAwMjZkZXNjLCAwLCBzaXplb2YoZGVzYykpO1xuK1x0bnVtX3JlY3MgPSBub2RlLVx1MDAzZW51bV9yZWNzO1xuIFx0aGZzX2RiZyhcIm5leHQgJWQsIHByZXYgJWQsIHR5cGUgJWQsIGhlaWdodCAlZCwgbnVtX3JlY3MgJWRcXG5cIixcbiBcdFx0YmUzMl90b19jcHUoZGVzYy5uZXh0KSwgYmUzMl90b19jcHUoZGVzYy5wcmV2KSxcbiBcdFx0ZGVzYy50eXBlLCBkZXNjLmhlaWdodCwgYmUxNl90b19jcHUoZGVzYy5udW1fcmVjcykpO1xuIFxuK1x0aWYgKCFoZnNfYm5vZGVfbnVtX3JlY3NfdmFsaWQobm9kZSkpIHtcbitcdFx0aGZzX2RiZyhcImludmFsaWQgbnVtX3JlY3MgJXVcXG5cIiwgbnVtX3JlY3MpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4gXHRvZmYgPSBub2RlLVx1MDAzZXRyZWUtXHUwMDNlbm9kZV9zaXplIC0gMjtcbi1cdGZvciAoaSA9IGJlMTZfdG9fY3B1KGRlc2MubnVtX3JlY3MpOyBpIFx1MDAzZT0gMDsgb2ZmIC09IDIsIGktLSkge1xuK1x0Zm9yIChpID0gbnVtX3JlY3M7IGkgXHUwMDNlPSAwOyBvZmYgLT0gMiwgaS0tKSB7XG4gXHRcdGtleV9vZmYgPSBoZnNfYm5vZGVfcmVhZF91MTYobm9kZSwgb2ZmKTtcbiBcdFx0aGZzX2RiZyhcIiBrZXlfb2ZmICVkXCIsIGtleV9vZmYpO1xuIFx0XHRpZiAoaSBcdTAwMjZcdTAwMjYgbm9kZS1cdTAwM2V0eXBlID09IEhGU19OT0RFX0lOREVYKSB7XG5AQCAtNTc5LDYgKzU4Niw5IEBAIHN0cnVjdCBoZnNfYm5vZGUgKmhmc19ibm9kZV9maW5kKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUsIHUzMiBudW0pXG4gXHRcdGdvdG8gbm9kZV9lcnJvcjtcbiBcdH1cbiBcbitcdGlmICghaGZzX2Jub2RlX251bV9yZWNzX3ZhbGlkKG5vZGUpKVxuK1x0XHRnb3RvIG5vZGVfZXJyb3I7XG4rXG4gXHRyZWNfb2ZmID0gdHJlZS1cdTAwM2Vub2RlX3NpemUgLSAyO1xuIFx0b2ZmID0gaGZzX2Jub2RlX3JlYWRfdTE2KG5vZGUsIHJlY19vZmYpO1xuIFx0aWYgKG9mZiAhPSBzaXplb2Yoc3RydWN0IGhmc19ibm9kZV9kZXNjKSlcbkBAIC01ODYsOSArNTk2LDcgQEAgc3RydWN0IGhmc19ibm9kZSAqaGZzX2Jub2RlX2ZpbmQoc3RydWN0IGhmc19idHJlZSAqdHJlZSwgdTMyIG51bSlcbiBcdGZvciAoaSA9IDE7IGkgXHUwMDNjPSBub2RlLVx1MDAzZW51bV9yZWNzOyBvZmYgPSBuZXh0X29mZiwgaSsrKSB7XG4gXHRcdHJlY19vZmYgLT0gMjtcbiBcdFx0bmV4dF9vZmYgPSBoZnNfYm5vZGVfcmVhZF91MTYobm9kZSwgcmVjX29mZik7XG4tXHRcdGlmIChuZXh0X29mZiBcdTAwM2M9IG9mZiB8fFxuLVx0XHQgICAgbmV4dF9vZmYgXHUwMDNlIHRyZWUtXHUwMDNlbm9kZV9zaXplIHx8XG4tXHRcdCAgICBuZXh0X29mZiBcdTAwMjYgMSlcbitcdFx0aWYgKCFoZnNfYnJlY19yYW5nZV92YWxpZChub2RlLCBvZmYsIG5leHRfb2ZmLCByZWNfb2ZmKSlcbiBcdFx0XHRnb3RvIG5vZGVfZXJyb3I7XG4gXHRcdGVudHJ5X3NpemUgPSBuZXh0X29mZiAtIG9mZjtcbiBcdFx0aWYgKG5vZGUtXHUwMDNldHlwZSAhPSBIRlNfTk9ERV9JTkRFWCBcdTAwMjZcdTAwMjZcbmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2JyZWMuYyBiL2ZzL2hmc3BsdXMvYnJlYy5jXG5pbmRleCBlM2RmODkyODQwNzlkYi4uMzExMmMzYmNmOWNmOGQgMTAwNjQ0XG4tLS0gYS9mcy9oZnNwbHVzL2JyZWMuY1xuKysrIGIvZnMvaGZzcGx1cy9icmVjLmNcbkBAIC0yMCwzNSArMjAsNDEgQEAgc3RhdGljIGludCBoZnNfYnRyZWVfaW5jX2hlaWdodChzdHJ1Y3QgaGZzX2J0cmVlICopO1xuIHUxNiBoZnNfYnJlY19sZW5vZmYoc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgdTE2IHJlYywgdTE2ICpvZmYpXG4ge1xuIFx0X19iZTE2IHJldHZhbFsyXTtcbi1cdHUxNiBkYXRhb2ZmO1xuK1x0dTE2IGRhdGFfb2ZmO1xuK1x0dTE2IG5leHRfb2ZmO1xuIFxuLVx0ZGF0YW9mZiA9IG5vZGUtXHUwMDNldHJlZS1cdTAwM2Vub2RlX3NpemUgLSAocmVjICsgMikgKiAyO1xuLVx0aGZzX2Jub2RlX3JlYWQobm9kZSwgcmV0dmFsLCBkYXRhb2ZmLCA0KTtcbitcdGlmICghaGZzX2JyZWNfcmVjb3JkX3ZhbGlkKG5vZGUsIHJlYykpIHtcbitcdFx0Km9mZiA9IDA7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0ZGF0YV9vZmYgPSBub2RlLVx1MDAzZXRyZWUtXHUwMDNlbm9kZV9zaXplIC0gKHJlYyArIDIpICogMjtcbitcdGhmc19ibm9kZV9yZWFkKG5vZGUsIHJldHZhbCwgZGF0YV9vZmYsIDQpO1xuIFx0Km9mZiA9IGJlMTZfdG9fY3B1KHJldHZhbFsxXSk7XG4tXHRyZXR1cm4gYmUxNl90b19jcHUocmV0dmFsWzBdKSAtICpvZmY7XG4rXHRuZXh0X29mZiA9IGJlMTZfdG9fY3B1KHJldHZhbFswXSk7XG4rXHRpZiAoIWhmc19icmVjX3JhbmdlX3ZhbGlkKG5vZGUsICpvZmYsIG5leHRfb2ZmLCBkYXRhX29mZikpXG4rXHRcdHJldHVybiAwO1xuK1x0cmV0dXJuIG5leHRfb2ZmIC0gKm9mZjtcbiB9XG4gXG4gLyogR2V0IHRoZSBsZW5ndGggb2YgdGhlIGtleSBmcm9tIGEga2V5ZWQgcmVjb3JkICovXG4gdTE2IGhmc19icmVjX2tleWxlbihzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCB1MTYgcmVjKVxuIHtcbi1cdHUxNiByZXR2YWwsIHJlY29mZjtcbitcdHUxNiByZXR2YWwsIHJlY29mZiwgbGVuO1xuIFxuIFx0aWYgKG5vZGUtXHUwMDNldHlwZSAhPSBIRlNfTk9ERV9JTkRFWCBcdTAwMjZcdTAwMjYgbm9kZS1cdTAwM2V0eXBlICE9IEhGU19OT0RFX0xFQUYpXG4gXHRcdHJldHVybiAwO1xuK1x0aWYgKCFoZnNfYnJlY19yZWNvcmRfdmFsaWQobm9kZSwgcmVjKSlcbitcdFx0cmV0dXJuIDA7XG4gXG4gXHRpZiAoKG5vZGUtXHUwMDNldHlwZSA9PSBIRlNfTk9ERV9JTkRFWCkgXHUwMDI2XHUwMDI2XG4gXHQgICAhKG5vZGUtXHUwMDNldHJlZS1cdTAwM2VhdHRyaWJ1dGVzIFx1MDAyNiBIRlNfVFJFRV9WQVJJRFhLRVlTKSBcdTAwMjZcdTAwMjZcbiBcdCAgIChub2RlLVx1MDAzZXRyZWUtXHUwMDNlY25pZCAhPSBIRlNQTFVTX0FUVFJfQ05JRCkpIHtcbiBcdFx0cmV0dmFsID0gbm9kZS1cdTAwM2V0cmVlLVx1MDAzZW1heF9rZXlfbGVuICsgMjtcbiBcdH0gZWxzZSB7XG4tXHRcdHJlY29mZiA9IGhmc19ibm9kZV9yZWFkX3UxNihub2RlLFxuLVx0XHRcdG5vZGUtXHUwMDNldHJlZS1cdTAwM2Vub2RlX3NpemUgLSAocmVjICsgMSkgKiAyKTtcbi1cdFx0aWYgKCFyZWNvZmYpXG4tXHRcdFx0cmV0dXJuIDA7XG4tXHRcdGlmIChyZWNvZmYgXHUwMDNlIG5vZGUtXHUwMDNldHJlZS1cdTAwM2Vub2RlX3NpemUgLSAyKSB7XG4tXHRcdFx0cHJfZXJyKFwicmVjb2ZmICVkIHRvbyBsYXJnZVxcblwiLCByZWNvZmYpO1xuK1x0XHRsZW4gPSBoZnNfYnJlY19sZW5vZmYobm9kZSwgcmVjLCBcdTAwMjZyZWNvZmYpO1xuK1x0XHRpZiAobGVuID09IDApXG4gXHRcdFx0cmV0dXJuIDA7XG4tXHRcdH1cbiBcbiBcdFx0cmV0dmFsID0gaGZzX2Jub2RlX3JlYWRfdTE2KG5vZGUsIHJlY29mZikgKyAyO1xuIFx0XHRpZiAocmV0dmFsIFx1MDAzZSBub2RlLVx1MDAzZXRyZWUtXHUwMDNlbWF4X2tleV9sZW4gKyAyKSB7XG5AQCAtMTg1LDEwICsxOTEsMTUgQEAgaW50IGhmc19icmVjX3JlbW92ZShzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpXG4gXHR0cmVlID0gZmQtXHUwMDNldHJlZTtcbiBcdG5vZGUgPSBmZC1cdTAwM2Vibm9kZTtcbiBhZ2FpbjpcbitcdGlmICghaGZzX2JyZWNfcmVjb3JkX3ZhbGlkKG5vZGUsIGZkLVx1MDAzZXJlY29yZCkpXG4rXHRcdHJldHVybiAtRUlPO1xuK1xuIFx0cmVjX29mZiA9IHRyZWUtXHUwMDNlbm9kZV9zaXplIC0gKGZkLVx1MDAzZXJlY29yZCArIDIpICogMjtcbiBcdGVuZF9vZmYgPSB0cmVlLVx1MDAzZW5vZGVfc2l6ZSAtIChub2RlLVx1MDAzZW51bV9yZWNzICsgMSkgKiAyO1xuIFxuIFx0aWYgKG5vZGUtXHUwMDNldHlwZSA9PSBIRlNfTk9ERV9MRUFGKSB7XG4rXHRcdGlmICh0cmVlLVx1MDAzZWxlYWZfY291bnQgPT0gMClcbitcdFx0XHRyZXR1cm4gLUVJTztcbiBcdFx0dHJlZS1cdTAwM2VsZWFmX2NvdW50LS07XG4gXHRcdG1hcmtfaW5vZGVfZGlydHkodHJlZS1cdTAwM2Vpbm9kZSk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmggYi9mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaFxuaW5kZXggZWMwNGI4MmFkOTI3ODcuLmQ4N2Q1NWEzNWQyNThiIDEwMDY0NFxuLS0tIGEvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmhcbisrKyBiL2ZzL2hmc3BsdXMvaGZzcGx1c19mcy5oXG5AQCAtNTg3LDYgKzU4Nyw3OCBAQCBib29sIGlzX2Jub2RlX29mZnNldF92YWxpZChzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCB1MzIgb2ZmKVxuIFx0cmV0dXJuIGlzX3ZhbGlkO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lXG4rYm9vbCBoZnNfYm5vZGVfbnVtX3JlY3NfdmFsaWQoc3RydWN0IGhmc19ibm9kZSAqbm9kZSlcbit7XG4rXHR1MzIgbm9kZV9zaXplO1xuK1x0dTMyIHRhYmxlX3NpemU7XG4rXHR1MzIgYXJlYV9zaXplO1xuK1x0dTMyIHJlY19zaXplID0gc2l6ZW9mKF9fYmUxNik7XG4rXHR1MzIgZGVzY19zaXplID0gc2l6ZW9mKHN0cnVjdCBoZnNfYm5vZGVfZGVzYyk7XG4rXG4rXHRpZiAoIW5vZGUgfHwgIW5vZGUtXHUwMDNldHJlZSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0bm9kZV9zaXplID0gbm9kZS1cdTAwM2V0cmVlLVx1MDAzZW5vZGVfc2l6ZTtcbitcdGlmIChub2RlX3NpemUgXHUwMDNjIGRlc2Nfc2l6ZSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0YXJlYV9zaXplID0gbm9kZV9zaXplIC0gZGVzY19zaXplO1xuK1x0dGFibGVfc2l6ZSA9ICgodTMyKW5vZGUtXHUwMDNlbnVtX3JlY3MgKyAxKSAqIHJlY19zaXplO1xuK1xuK1x0cmV0dXJuIHRhYmxlX3NpemUgXHUwMDNjPSBhcmVhX3NpemU7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmVcbitib29sIGhmc19icmVjX3JlY29yZF92YWxpZChzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCBpbnQgcmVjb3JkKVxuK3tcbitcdGlmICghaGZzX2Jub2RlX251bV9yZWNzX3ZhbGlkKG5vZGUpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHRpZiAocmVjb3JkIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRyZXR1cm4gcmVjb3JkIFx1MDAzYyBub2RlLVx1MDAzZW51bV9yZWNzO1xuK31cbitcbitzdGF0aWMgaW5saW5lXG4rYm9vbCBoZnNfYnJlY19yYW5nZV92YWxpZChzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCB1MTYgb2ZmLCB1MTYgbmV4dF9vZmYsXG4rXHRcdFx0ICB1MTYgcmVjX29mZilcbit7XG4rXHR1MzIgdGFibGVfc2l6ZTtcbitcdHUzMiB0YWJsZV9zdGFydDtcbitcdHUzMiByZWNfc2l6ZSA9IHNpemVvZihfX2JlMTYpO1xuK1x0dTMyIGRlc2Nfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaGZzX2Jub2RlX2Rlc2MpO1xuK1xuK1x0aWYgKCFub2RlIHx8ICFub2RlLVx1MDAzZXRyZWUpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmIChvZmYgXHUwMDNjIGRlc2Nfc2l6ZSB8fCAob2ZmIFx1MDAyNiAxKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0aWYgKG5leHRfb2ZmIFx1MDAzYz0gb2ZmIHx8XG4rXHRcdG5leHRfb2ZmIFx1MDAzZSBub2RlLVx1MDAzZXRyZWUtXHUwMDNlbm9kZV9zaXplIHx8XG4rXHRcdG5leHRfb2ZmIFx1MDAzZSByZWNfb2ZmIHx8XG4rXHRcdChuZXh0X29mZiBcdTAwMjYgMSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHRhYmxlX3NpemUgPSAoKHUzMilub2RlLVx1MDAzZW51bV9yZWNzICsgMSkgKiByZWNfc2l6ZTtcbitcdHRhYmxlX3N0YXJ0ID0gbm9kZS1cdTAwM2V0cmVlLVx1MDAzZW5vZGVfc2l6ZSAtIHRhYmxlX3NpemU7XG4rXHRpZiAobmV4dF9vZmYgXHUwMDNlIHRhYmxlX3N0YXJ0KVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rc3RhdGljIGlubGluZVxuK3ZvaWQgaGZzX2ZpbmRfcmVzZXQoc3RydWN0IGhmc19maW5kX2RhdGEgKmZkKVxuK3tcbitcdGZkLVx1MDAzZXJlY29yZCA9IC0xO1xuK1x0ZmQtXHUwMDNla2V5b2Zmc2V0ID0gLTE7XG4rXHRmZC1cdTAwM2VrZXlsZW5ndGggPSAtMTtcbitcdGZkLVx1MDAzZWVudHJ5b2Zmc2V0ID0gLTE7XG4rXHRmZC1cdTAwM2VlbnRyeWxlbmd0aCA9IC0xO1xuK31cbitcbiBzdGF0aWMgaW5saW5lXG4gdTMyIGNoZWNrX2FuZF9jb3JyZWN0X3JlcXVlc3RlZF9sZW5ndGgoc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgdTMyIG9mZiwgdTMyIGxlbilcbiB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQxMjo1NTozMC43NTk3NjE0NzdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTQzNTYxMzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEhGUysgVmFsaWRhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0J3MgaW50cm9kdWNpbmcgc29tZSBjcml0aWNhbCB2YWxpZGF0aW9uIGZ1bmN0aW9ucyB0byB0aGUgSEZTKyBiLXRyZWUgaGFuZGxpbmcuIFRoaXMgaXMgcmlnaHQgdXAgbXkgYWxsZXk7IEkndmUgc2VlbiBlbm91Z2ggb2YgdGhlc2UgZmlsZXN5c3RlbSBkcml2ZXIgaXNzdWVzIHRvIGtub3cgdGhpcyBpcyBhIGdvb2QgdGhpbmcuIFRoZXkncmUgdG91Y2hpbmcgYGJmaW5kLmNgLCBgYm5vZGUuY2AsIGBicmVjLmNgLCBhbmQgdGhlIGhlYWRlciBmaWxlLCB3aGljaCB0ZWxscyBtZSB0aGV5J3JlIGZvY3VzaW5nIG9uIHRoZSBjb3JlIGItdHJlZSBvcGVyYXRpb25zLiBUaGUgbmV3IGZ1bmN0aW9ucywgYGhmc19ibm9kZV9udW1fcmVjc192YWxpZCgpYCwgYGhmc19icmVjX3JlY29yZF92YWxpZCgpYCwgYGhmc19icmVjX3JhbmdlX3ZhbGlkKClgLCBhbmQgYGhmc19maW5kX3Jlc2V0KClgLCBhcmUgZ29pbmcgdG8gYmUga2V5IGluIHByZXZlbnRpbmcgdGhvc2UgbmFzdHkgb3V0LW9mLWJvdW5kcyByZWFkcyBhbmQgd3JpdGVzLCBhbmQgb3RoZXIgbWVtb3J5IGNvcnJ1cHRpb24sIHRoYXQgd2UncmUgYWx3YXlzIHdvcnJpZWQgYWJvdXQgd2l0aCBjb3JydXB0ZWQgZmlsZXN5c3RlbSBpbWFnZXMuXG5cblRoZXkncmUgaW50ZWdyYXRpbmcgdGhlc2UgdmFsaWRhdGlvbnMgaW50byBzZXZlcmFsIGNyaXRpY2FsIGFyZWFzOiBgX19oZnNfYnJlY19maW5kYCwgYGhmc19icmVjX2ZpbmRgLCBgaGZzX2Jub2RlX2R1bXBgLCBgaGZzX2Jub2RlX2ZpbmRgLCBgaGZzX2JyZWNfbGVub2ZmYCwgYGhmc19icmVjX2tleWxlbmAsIGFuZCBgaGZzX2JyZWNfcmVtb3ZlYC4gVGhpcyBpcyBhIHByZXR0eSB0aG9yb3VnaCBpbnRlZ3JhdGlvbiwgd2hpY2ggaXMgZXhhY3RseSB3aGF0IEkgbGlrZSB0byBzZWUuIFRoaXMgbG9va3MgbGlrZSBhIHNvbGlkIGZ1bmN0aW9uYWwgY2hhbmdlOyBpdCdzICpkZWZpbml0ZWx5KiBnb2luZyB0byBpbXByb3ZlIHRoZSByb2J1c3RuZXNzIG9mIHRoZSBkcml2ZXIuXG5cblRoZSBwYXRjaCdzIGFuYWx5c2lzIHRoYXQgdGhlIHBhdGhzIGFyZSByZWFjaGFibGUgYnkgbW91bnRpbmcgYSBjcmFmdGVkIGltYWdlIGlzIHNwb3Qgb24uIFRoYXQgbWFrZXMgaXQgYSBwZXJmZWN0IHRhcmdldCBmb3IgZnV6emluZy4gTm93LCBsZXQncyBzZWUsIHdoYXQgZG8gSSBuZWVkIHRvIHRlc3QgdGhpcz8gQWgsIHllcywgdGhlIEhGUysgZmlsZXN5c3RlbSBpcyBlbmFibGVkIHdpdGggYENPTkZJR19IRlNQTFVTX0ZTYC4gSSdsbCBjb25maXJtIHRoYXQgaW4gYGZzL2hmc3BsdXMvS2NvbmZpZ2AganVzdCB0byBiZSBjb21wbGV0ZWx5IHN1cmUsIGJ1dCBpdCBsb29rcyBsaWtlIGEgZ29vZCBzdGFydCBmb3IgZ2V0dGluZyB0aGlzIHRoaW5nIHRlc3RlZC4gVGltZSB0byBzdGFydCBjcmFmdGluZyBzb21lIGZ1enppbmcgaGFybmVzc2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTcxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMTI6NTU6MzcuMzAzMzI1NTcyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2NjM3OTE0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSEZTUExVU19GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9oZnNwbHVzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaGZzcGx1cy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvaGZzcGx1cy9LY29uZmlnOjI6Y29uZmlnIEhGU1BMVVNfRlNcXG5mcy9oZnNwbHVzL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiQXBwbGUgRXh0ZW5kZWQgSEZTIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDEyOjU1OjM3LjY2OTcxMDUzOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxMzk3NjU3NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXMgU3ltYm9sIENhbmRpZGF0ZSBTZWxlY3Rpb24gZm9yIEhGUysqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBmb2N1c2luZyBvbiBIRlMrLCBhbmQgdGhlIGNvbmZpZyB3ZSdyZSB1c2luZyBpcyBgSEZTUExVU19GU2AuIEdvdCBpdC4gTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGZvY3VzIHN5bWJvbHMuIEkndmUgaWRlbnRpZmllZCBhIGxpc3Qgb2YgbW9kaWZpZWQgZnVuY3Rpb25zLCBhbmQgSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGV5J3JlIHJlbGV2YW50IGZvciBvdXIgcHVycG9zZXM6XG5cbiogICBgX19oZnNfYnJlY19maW5kYFxuKiAgIGBoZnNfYnJlY19maW5kYFxuKiAgIGBoZnNfYm5vZGVfZHVtcGBcbiogICBgaGZzX2Jub2RlX2ZpbmRgXG4qICAgYGhmc19icmVjX2xlbm9mZmBcbiogICBgaGZzX2JyZWNfa2V5bGVuYFxuKiAgIGBoZnNfYnJlY19yZW1vdmVgXG5cbk15IG5leHQgc3RlcCBpcyB0byBldmFsdWF0ZSBpZiB0aGVzZSBmdW5jdGlvbnMgcmVwcmVzZW50IGhvdC1wYXRoIG9wZXJhdGlvbnMgd2l0aGluIHRoZSBrZXJuZWwuIEJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcsIGBoZnNfYnJlY19maW5kYCwgYF9faGZzX2JyZWNfZmluZGAsIGBoZnNfYm5vZGVfZmluZGAsIGBoZnNfYnJlY19sZW5vZmZgLCBgaGZzX2JyZWNfa2V5bGVuYCwgYW5kIGBoZnNfYnJlY19yZW1vdmVgIGFyZSBpbnRlZ3JhbCB0byB0aGUgSEZTKyBiLXRyZWUgaW1wbGVtZW50YXRpb24uIFRoYXQgbWVhbnMgdGhleSBhcmUgY2FsbGVkIHdoZW4gZGVhbGluZyB3aXRoIGZpbGUgbG9va3VwcywgcmVhZHMsIGFuZCB3cml0ZXMsIGFtb25nc3Qgb3RoZXIgdGhpbmdzLiBXaGlsZSB0aGV5J3JlIHByb2JhYmx5IGhpdCBmcmVxdWVudGx5IGR1cmluZyBIRlMrIG9wZXJhdGlvbnMsIHRoZXkncmUgc3BlY2lmaWMgdG8gSEZTKyBhbmQgbm90IGdlbmVyaWMga2VybmVsIGhvdC1wYXRocyBsaWtlIGBrbWFsbG9jYCBvciBgc2NoZWR1bGVgLiBUaGVyZWZvcmUsIHRoZXkncmUgZ29vZCBjYW5kaWRhdGVzIGZvciBgRm9jdXNTeW1ib2xzYC5cblxuU28gdGhlIGluaXRpYWwgbGlzdCBvZiBmb2N1cyBzeW1ib2xzIGlzOlxuXG4qICAgYF9faGZzX2JyZWNfZmluZGBcbiogICBgaGZzX2JyZWNfZmluZGBcbiogICBgaGZzX2Jub2RlX2R1bXBgXG4qICAgYGhmc19ibm9kZV9maW5kYFxuKiAgIGBoZnNfYnJlY19sZW5vZmZgXG4qICAgYGhmc19icmVjX2tleWxlbmBcbiogICBgaGZzX2JyZWNfcmVtb3ZlYFxuXG5Ib2xkIG9uIGEgc2Vjb25kLiBgaGZzX2Jub2RlX2R1bXBgLi4uIHRoYXQgc291bmRzIHN1c3BpY2lvdXNseSBsaWtlIGEgZGVidWcgZnVuY3Rpb24uIFdlIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgaXQncyBjb21waWxlZCBpbiBieSBkZWZhdWx0IG9yIGlmIGl0IHJlcXVpcmVzIGEgc3BlY2lmaWMgZGVidWcgY29uZmlndXJhdGlvbiBmbGFnLiBXZSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBrZXJuZWwgY29uZmlnIGZvciB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODcwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDEyOjU1OjQzLjgwOTQ3ODQzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwOTQwNDcxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoZnNfYm5vZGVfZHVtcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9oZnNwbHVzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9oZnNwbHVzL2Jub2RlLmM9MjMwPXZvaWQgaGZzX2Jub2RlX21vdmUoc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgdTMyIGRzdCwgdTMyIHNyYywgdTMyIGxlbilcXG4tLVxcbmZzL2hmc3BsdXMvYm5vZGUuYy0zNDktXFxuZnMvaGZzcGx1cy9ibm9kZS5jOjM1MDp2b2lkIGhmc19ibm9kZV9kdW1wKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUpXFxuZnMvaGZzcGx1cy9ibm9kZS5jLTM1MS17XFxuLS1cXG5mcy9oZnNwbHVzL2JyZWMuYz02OT1pbnQgaGZzX2JyZWNfaW5zZXJ0KHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCwgdm9pZCAqZW50cnksIHUzMiBlbnRyeV9sZW4pXFxuLS1cXG5mcy9oZnNwbHVzL2JyZWMuYy05NS1cXHRub2RlID0gZmQtXFx1MDAzZWJub2RlO1xcbmZzL2hmc3BsdXMvYnJlYy5jOjk2OlxcdGhmc19ibm9kZV9kdW1wKG5vZGUpO1xcbmZzL2hmc3BsdXMvYnJlYy5jLTk3LVxcdC8qIGdldCBsYXN0IG9mZnNldCAqL1xcbi0tXFxuZnMvaGZzcGx1cy9icmVjLmMtMTM5LVxcdGhmc19ibm9kZV93cml0ZShub2RlLCBlbnRyeSwgZGF0YV9vZmYgKyBrZXlfbGVuLCBlbnRyeV9sZW4pO1xcbmZzL2hmc3BsdXMvYnJlYy5jOjE0MDpcXHRoZnNfYm5vZGVfZHVtcChub2RlKTtcXG5mcy9oZnNwbHVzL2JyZWMuYy0xNDEtXFxuLS1cXG5mcy9oZnNwbHVzL2JyZWMuYz0xODU9aW50IGhmc19icmVjX3JlbW92ZShzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpXFxuLS1cXG5mcy9oZnNwbHVzL2JyZWMuYy0yMDUtXFx0fVxcbmZzL2hmc3BsdXMvYnJlYy5jOjIwNjpcXHRoZnNfYm5vZGVfZHVtcChub2RlKTtcXG5mcy9oZnNwbHVzL2JyZWMuYy0yMDctXFx0aGZzX2RiZyhcXFwicmVjICVkLCBsZW4gJWRcXFxcblxcXCIsXFxuLS1cXG5mcy9oZnNwbHVzL2JyZWMuYy0yMzktc2tpcDpcXG5mcy9oZnNwbHVzL2JyZWMuYzoyNDA6XFx0aGZzX2Jub2RlX2R1bXAobm9kZSk7XFxuZnMvaGZzcGx1cy9icmVjLmMtMjQxLVxcdGlmICghZmQtXFx1MDAzZXJlY29yZClcXG4tLVxcbmZzL2hmc3BsdXMvYnJlYy5jPTI0Nj1zdGF0aWMgc3RydWN0IGhmc19ibm9kZSAqaGZzX2Jub2RlX3NwbGl0KHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZClcXG4tLVxcbmZzL2hmc3BsdXMvYnJlYy5jLTM2Ny1cXG5mcy9oZnNwbHVzL2JyZWMuYzozNjg6XFx0aGZzX2Jub2RlX2R1bXAobm9kZSk7XFxuZnMvaGZzcGx1cy9icmVjLmM6MzY5OlxcdGhmc19ibm9kZV9kdW1wKG5ld19ub2RlKTtcXG5mcy9oZnNwbHVzL2JyZWMuYy0zNzAtXFx0aGZzX2Jub2RlX3B1dChub2RlKTtcXG4tLVxcbmZzL2hmc3BsdXMvYnJlYy5jPTM3NT1zdGF0aWMgaW50IGhmc19icmVjX3VwZGF0ZV9wYXJlbnQoc3RydWN0IGhmc19maW5kX2RhdGEgKmZkKVxcbi0tXFxuZnMvaGZzcGx1cy9icmVjLmMtMzk1LVxcdFxcdHJldHVybiAtRU5PRU5UO1xcbmZzL2hmc3BsdXMvYnJlYy5jOjM5NjpcXHRoZnNfYm5vZGVfZHVtcChwYXJlbnQpO1xcbmZzL2hmc3BsdXMvYnJlYy5jLTM5Ny1cXHRyZWMgPSBmZC1cXHUwMDNlcmVjb3JkO1xcbi0tXFxuZnMvaGZzcGx1cy9icmVjLmMtNDQyLVxcdGhmc19ibm9kZV9jb3B5KHBhcmVudCwgZmQtXFx1MDAzZWtleW9mZnNldCwgbm9kZSwgMTQsIG5ld2tleWxlbik7XFxuZnMvaGZzcGx1cy9icmVjLmM6NDQzOlxcdGhmc19ibm9kZV9kdW1wKHBhcmVudCk7XFxuZnMvaGZzcGx1cy9icmVjLmMtNDQ0LVxcbi0tXFxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmg9MjgwPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgaGZzcGx1c19taW5faW9fc2l6ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgtMzAwLSNkZWZpbmUgaGZzX2Jub2RlX21vdmUgaGZzcGx1c19ibm9kZV9tb3ZlXFxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmg6MzAxOiNkZWZpbmUgaGZzX2Jub2RlX2R1bXAgaGZzcGx1c19ibm9kZV9kdW1wXFxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgtMzAyLSNkZWZpbmUgaGZzX2Jub2RlX3VubGluayBoZnNwbHVzX2Jub2RlX3VubGlua1xcbi0tXFxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmg9MzgwPXZvaWQgaGZzX2Jub2RlX21vdmUoc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgdTMyIGRzdCwgdTMyIHNyYywgdTMyIGxlbik7XFxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmg6MzgxOnZvaWQgaGZzX2Jub2RlX2R1bXAoc3RydWN0IGhmc19ibm9kZSAqbm9kZSk7XFxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgtMzgyLXZvaWQgaGZzX2Jub2RlX3VubGluayhzdHJ1Y3QgaGZzX2Jub2RlICpub2RlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMTI6NTU6NDQuMTE4ODg3MjYxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI1MTM0MDg1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGhmc19ibm9kZV9kdW1wIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgaGZzX2Jub2RlX2R1bXBgIGZ1bmN0aW9uIGluIHRoZSBIRlMgY29kZSwgYW5kIGl0J3MgcG9wcGluZyB1cCBpbiBhIGZldyBrZXkgcGxhY2VzOiBgaGZzX2JyZWNfaW5zZXJ0YCwgYGhmc19icmVjX3JlbW92ZWAsIGBoZnNfYm5vZGVfc3BsaXRgLCBhbmQgYGhmc19icmVjX3VwZGF0ZV9wYXJlbnRgLiBNeSBmaXJzdCB0aG91Z2h0IGlzLCB0aGlzIHNtZWxscyBsaWtlIGEgZGVidWdnaW5nIHRvb2wuIFRoZSB3YXkgaXQncyB1c2VkIGluIHRoZXNlIGNvcmUgcmVjb3JkIG1hbmFnZW1lbnQgYW5kIGItdHJlZSBtYW5pcHVsYXRpb24gcm91dGluZXMgaXMgcHJldHR5IHRlbGxpbmcuIEhvd2V2ZXIsIHNvbWV0aGluZydzIG5vdCBxdWl0ZSByaWdodC4gSXQgc2VlbXMgdG8gYmUgdW5jb25kaXRpb25hbGx5IGNvbXBpbGVkLCBvciBhdCBsZWFzdCwgdGhhdCdzIHdoYXQgaXQgaW5pdGlhbGx5IGxvb2tzIGxpa2UuIEknZCBiZXR0ZXIgZG91YmxlIGNoZWNrIHRoYXQuIE9oIHdhaXQhIEkgcmVtZW1iZXIuLi4gYGhmc19kYmdgIGlzIGEgbWFjcm8hIEkgbmVlZCB0byBzZWUgd2hhdCB0aGF0IG1hY3JvIGV4cGFuZHMgdG8gdG8gdW5kZXJzdGFuZCBpZiB0aGlzIGlzICphY3R1YWxseSogdW5jb25kaXRpb25hbGx5IGNvbXBpbGVkLCBvciBqdXN0IGNvbmRpdGlvbmFsbHkgdGhyb3VnaCB0aGUgbWFjcm8uIExldCBtZSBnbyBjaGVjay4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTA1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDEyOjU1OjQ4LjM3MDIzMTc0OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTk3MjM0NiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVmaW5lIGhmc19kYmdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvaGZzcGx1cy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDEyOjU1OjQ4LjQ0MjIxMTI3NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMzU4MTIyNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBIRlMrIERlYnVnZ2luZyBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjdXJyZW50IHN0YXRlIG9mIGRlYnVnZ2luZyB3aXRoaW4gdGhlIEhGUysgZmlsZXN5c3RlbSBpbXBsZW1lbnRhdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgaGZzX2RiZ2AuIFNlZW1zIGxpa2UgYSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LCBjb25zaWRlcmluZyBpdCdzIHByb2JhYmx5IHRoZSBtYXN0ZXIgZGVidWdnaW5nIGZsYWcgb3Igc3RydWN0dXJlIGZvciB0aGUgSEZTKyBsYXllci4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gaWYgaXQncyBhIHNpbXBsZSBib29sZWFuLCBhIGJpdG1hc2ssIG9yIHBlcmhhcHMgYSBtb3JlIHNvcGhpc3RpY2F0ZWQgZGF0YSBzdHJ1Y3R1cmUgaG9sZGluZyB2YXJpb3VzIGRlYnVnIGxldmVscyBvciBjYXRlZ29yaWVzLiBMb2NhdGluZyBpdCB3aXRoaW4gYGZzL2hmc3BsdXMvaGZzcGx1c19mcy5oYCBtYWtlcyBwZXJmZWN0IHNlbnNlOyB0aGUgaGVhZGVyIGZpbGUgaXMgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIGdsb2JhbCBkZWNsYXJhdGlvbnMgYW5kIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIHRoZSBmaWxlc3lzdGVtIGl0c2VsZi4gRnJvbSB0aGVyZSwgSSBjYW4gYW5hbHl6ZSB0aGUgdXNhZ2VzIG9mIHRoYXQgc3RydWN0dXJlIGFjcm9zcyB0aGUgc291cmNlIHRyZWUsIG9yIHBvdGVudGlhbGx5LCBkZWJ1ZyBvcHRpb25zLCBsaWtlIGtlcm5lbCBwYXJhbWV0ZXJzLCB0aGF0IG1heSBlZmZlY3QgaXRzIHN0YXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjYwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMTI6NTU6NTEuNzc4MDI1NjA3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODI1ODEwNiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGZzX2RiZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9oZnNwbHVzL2hmc3BsdXNfZnMuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMTI6NTU6NTEuODM2MjkzNjQ0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMDg4MjkxNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGhhdmluZyBpdDpcblxuKipEaWdnaW5nIGludG8gdGhlIEhGUysgQ29kZWJhc2UqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gdHJ5aW5nIHRvIHBpbnBvaW50IHdoZXJlIHRoaXMgcGFydGljdWxhciBkZWZpbml0aW9uIHJlc2lkZXMuIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCBpdCBtaWdodCBiZSB0dWNrZWQgYXdheSBpbiBgZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmhgLCBidXQgZXhwZXJpZW5jZSB0ZWxscyBtZSBpdCBjb3VsZCBiZSBkZWZpbmVkIHNsaWdodGx5IGRpZmZlcmVudGx5IG9yIGV2ZW4gZGVjbGFyZWQgaW4gYSByZWxhdGVkIGhlYWRlci4gVG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGNhc3QgYSB3aWRlciBuZXQuIEEgZ29vZCBzdGFydGluZyBwb2ludCBpcyB0byBmb2N1cyBteSBzZWFyY2gsIHNvIEknbGwgZ3JlcCBmb3IgYGhmc19kYmdgIHdpdGhpbiB0aGUgYGZzL2hmc3BsdXMvYCBkaXJlY3RvcnkuIFRoYXQgc2hvdWxkIHF1aWNrbHkgcmV2ZWFsIHdoZXJlIHRoaXMgdGhpbmcgaXMgaGlkaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTM3LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMTI6NTU6NTQuOTQ1MTI0ODcyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODE0NjczNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoZnNfZGJnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2hmc3BsdXMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2hmc3BsdXMvYXR0cmlidXRlcy5jPTk3PXN0YXRpYyBpbnQgaGZzcGx1c19hdHRyX2J1aWxkX3JlY29yZChoZnNwbHVzX2F0dHJfZW50cnkgKmVudHJ5LCBpbnQgcmVjb3JkX3R5cGUsXFxuLS1cXG5mcy9oZnNwbHVzL2F0dHJpYnV0ZXMuYy0xMjEtXFx0XFx0ZWxzZSB7XFxuZnMvaGZzcGx1cy9hdHRyaWJ1dGVzLmM6MTIyOlxcdFxcdFxcdGhmc19kYmcoXFxcInZhbHVlIHNpemUgJXp1IGlzIHRvbyBiaWdcXFxcblxcXCIsIHNpemUpO1xcbmZzL2hmc3BsdXMvYXR0cmlidXRlcy5jLTEyMy1cXHRcXHRcXHRyZXR1cm4gSEZTUExVU19JTlZBTElEX0FUVFJfUkVDT1JEO1xcbi0tXFxuZnMvaGZzcGx1cy9hdHRyaWJ1dGVzLmM9MTQwPWludCBoZnNwbHVzX2ZpbmRfYXR0cihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgY25pZCxcXG4tLVxcbmZzL2hmc3BsdXMvYXR0cmlidXRlcy5jLTE0NC1cXG5mcy9oZnNwbHVzL2F0dHJpYnV0ZXMuYzoxNDU6XFx0aGZzX2RiZyhcXFwibmFtZSAlcywgY25pZCAlZFxcXFxuXFxcIiwgbmFtZSA/IG5hbWUgOiBOVUxMLCBjbmlkKTtcXG5mcy9oZnNwbHVzL2F0dHJpYnV0ZXMuYy0xNDYtXFxuLS1cXG5mcy9oZnNwbHVzL2F0dHJpYnV0ZXMuYz0xODA9aW50IGhmc3BsdXNfYXR0cl9leGlzdHMoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSlcXG4tLVxcbmZzL2hmc3BsdXMvYXR0cmlidXRlcy5jLTE4NS1cXG5mcy9oZnNwbHVzL2F0dHJpYnV0ZXMuYzoxODY6XFx0aGZzX2RiZyhcXFwibmFtZSAlcywgaW5vICVsbHVcXFxcblxcXCIsXFxuZnMvaGZzcGx1cy9hdHRyaWJ1dGVzLmMtMTg3LVxcdFxcdG5hbWUgPyBuYW1lIDogTlVMTCwgaW5vZGUtXFx1MDAzZWlfaW5vKTtcXG4tLVxcbmZzL2hmc3BsdXMvYXR0cmlidXRlcy5jPTIwOT1pbnQgaGZzcGx1c19jcmVhdGVfYXR0cl9ub2xvY2soc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSxcXG4tLVxcbmZzL2hmc3BsdXMvYXR0cmlidXRlcy5jLTIxNy1cXG5mcy9oZnNwbHVzL2F0dHJpYnV0ZXMuYzoyMTg6XFx0aGZzX2RiZyhcXFwibmFtZSAlcywgaW5vICVsbHVcXFxcblxcXCIsXFxuZnMvaGZzcGx1cy9hdHRyaWJ1dGVzLmMtMjE5LVxcdFxcdG5hbWUgPyBuYW1lIDogTlVMTCwgaW5vZGUtXFx1MDAzZWlfaW5vKTtcXG4tLVxcbmZzL2hmc3BsdXMvYXR0cmlidXRlcy5jLTIzOC1cXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbmZzL2hmc3BsdXMvYXR0cmlidXRlcy5jOjIzOTpcXHRcXHRoZnNfZGJnKFxcXCJ1bmFibGUgdG8gc3RvcmUgdmFsdWU6IGVyciAlZFxcXFxuXFxcIiwgZXJyKTtcXG5mcy9oZnNwbHVzL2F0dHJpYnV0ZXMuYy0yNDAtXFx0XFx0cmV0dXJuIGVycjtcXG4tLVxcbmZzL2hmc3BsdXMvYXR0cmlidXRlcy5jLTI1MS1cXHRpZiAoZXJyKSB7XFxuZnMvaGZzcGx1cy9hdHRyaWJ1dGVzLmM6MjUyOlxcdFxcdGhmc19kYmcoXFxcInVuYWJsZSB0byBzdG9yZSB2YWx1ZTogZXJyICVkXFxcXG5cXFwiLCBlcnIpO1xcbmZzL2hmc3BsdXMvYXR0cmlidXRlcy5jLTI1My1cXHRcXHRyZXR1cm4gZXJyO1xcbi0tXFxuZnMvaGZzcGx1cy9hdHRyaWJ1dGVzLmM9MjYyPWludCBoZnNwbHVzX2NyZWF0ZV9hdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9oZnNwbHVzL2F0dHJpYnV0ZXMuYy0yNzAtXFxuZnMvaGZzcGx1cy9hdHRyaWJ1dGVzLmM6MjcxOlxcdGhmc19kYmcoXFxcIm5hbWUgJXMsIGlubyAlbGx1XFxcXG5cXFwiLFxcbmZzL2hmc3BsdXMvYXR0cmlidXRlcy5jLTI3Mi1cXHRcXHRuYW1lID8gbmFtZSA6IE5VTEwsIGlub2RlLVxcdTAwM2VpX2lubyk7XFxuLS1cXG5mcy9oZnNwbHVzL2F0dHJpYnV0ZXMuYz0zNTA9aW50IGhmc3BsdXNfZGVsZXRlX2F0dHJfbm9sb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsXFxuLS1cXG5mcy9oZnNwbHVzL2F0dHJpYnV0ZXMuYy0zNTUtXFxuZnMvaGZzcGx1cy9hdHRyaWJ1dGVzLmM6MzU2OlxcdGhmc19kYmcoXFxcIm5hbWUgJXMsIGlubyAlbGx1XFxcXG5cXFwiLFxcbmZzL2hmc3BsdXMvYXR0cmlidXRlcy5jLTM1Ny1cXHRcXHRuYW1lID8gbmFtZSA6IE5VTEwsIGlub2RlLVxcdTAwM2VpX2lubyk7XFxuLS1cXG5mcy9oZnNwbHVzL2F0dHJpYnV0ZXMuYz0zODM9aW50IGhmc3BsdXNfZGVsZXRlX2F0dHIoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSlcXG4tLVxcbmZzL2hmc3BsdXMvYXR0cmlidXRlcy5jLTM4OC1cXG5mcy9oZnNwbHVzL2F0dHJpYnV0ZXMuYzozODk6XFx0aGZzX2RiZyhcXFwibmFtZSAlcywgaW5vICVsbHVcXFxcblxcXCIsXFxuZnMvaGZzcGx1cy9hdHRyaWJ1dGVzLmMtMzkwLVxcdFxcdG5hbWUgPyBuYW1lIDogTlVMTCwgaW5vZGUtXFx1MDAzZWlfaW5vKTtcXG4tLVxcbmZzL2hmc3BsdXMvYXR0cmlidXRlcy5jPTQxNT1pbnQgaGZzcGx1c19kZWxldGVfYWxsX2F0dHJzKHN0cnVjdCBpbm9kZSAqZGlyLCB1MzIgY25pZClcXG4tLVxcbmZzL2hmc3BsdXMvYXR0cmlidXRlcy5jLTQxOS1cXG5mcy9oZnNwbHVzL2F0dHJpYnV0ZXMuYzo0MjA6XFx0aGZzX2RiZyhcXFwiY25pZCAlZFxcXFxuXFxcIiwgY25pZCk7XFxuZnMvaGZzcGx1cy9hdHRyaWJ1dGVzLmMtNDIxLVxcbi0tXFxuZnMvaGZzcGx1cy9hdHRyaWJ1dGVzLmM9NDU0PWludCBoZnNwbHVzX3JlcGxhY2VfYXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvaGZzcGx1cy9hdHRyaWJ1dGVzLmMtNDYyLVxcbmZzL2hmc3BsdXMvYXR0cmlidXRlcy5jOjQ2MzpcXHRoZnNfZGJnKFxcXCJuYW1lICVzLCBpbm8gJWxsdVxcXFxuXFxcIixcXG5mcy9oZnNwbHVzL2F0dHJpYnV0ZXMuYy00NjQtXFx0XFx0bmFtZSA/IG5hbWUgOiBOVUxMLCBpbm9kZS1cXHUwMDNlaV9pbm8pO1xcbi0tXFxuZnMvaGZzcGx1cy9iZmluZC5jPTE1PWludCBoZnNfZmluZF9pbml0KHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUsIHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZClcXG4tLVxcbmZzL2hmc3BsdXMvYmZpbmQuYy0yNi1cXHRmZC1cXHUwMDNla2V5ID0gcHRyICsgdHJlZS1cXHUwMDNlbWF4X2tleV9sZW4gKyAyO1xcbmZzL2hmc3BsdXMvYmZpbmQuYzoyNzpcXHRoZnNfZGJnKFxcXCJjbmlkICVkLCBjYWxsZXIgJXBzXFxcXG5cXFwiLFxcbmZzL2hmc3BsdXMvYmZpbmQuYy0yOC1cXHRcXHR0cmVlLVxcdTAwM2VjbmlkLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpO1xcbi0tXFxuZnMvaGZzcGx1cy9iZmluZC5jPTM0PXZvaWQgaGZzX2ZpbmRfZXhpdChzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpXFxuLS1cXG5mcy9oZnNwbHVzL2JmaW5kLmMtMzctXFx0a2ZyZWUoZmQtXFx1MDAzZXNlYXJjaF9rZXkpO1xcbmZzL2hmc3BsdXMvYmZpbmQuYzozODpcXHRoZnNfZGJnKFxcXCJjbmlkICVkLCBjYWxsZXIgJXBzXFxcXG5cXFwiLFxcbmZzL2hmc3BsdXMvYmZpbmQuYy0zOS1cXHRcXHRmZC1cXHUwMDNldHJlZS1cXHUwMDNlY25pZCwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTtcXG4tLVxcbmZzL2hmc3BsdXMvYml0bWFwLmM9MTk9aW50IGhmc3BsdXNfYmxvY2tfYWxsb2NhdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNpemUsXFxuLS1cXG5mcy9oZnNwbHVzL2JpdG1hcC5jLTMzLVxcbmZzL2hmc3BsdXMvYml0bWFwLmM6MzQ6XFx0aGZzX2RiZyhcXFwic2l6ZSAldSwgb2Zmc2V0ICV1LCBsZW4gJXVcXFxcblxcXCIsIHNpemUsIG9mZnNldCwgbGVuKTtcXG5mcy9oZnNwbHVzL2JpdG1hcC5jLTM1LVxcdG11dGV4X2xvY2soXFx1MDAyNnNiaS1cXHUwMDNlYWxsb2NfbXV0ZXgpO1xcbi0tXFxuZnMvaGZzcGx1cy9iaXRtYXAuYy05Mi1cXHR9XFxuZnMvaGZzcGx1cy9iaXRtYXAuYzo5MzpcXHRoZnNfZGJnKFxcXCJiaXRtYXAgZnVsbFxcXFxuXFxcIik7XFxuZnMvaGZzcGx1cy9iaXRtYXAuYy05NC1cXHRzdGFydCA9IHNpemU7XFxuLS1cXG5mcy9oZnNwbHVzL2JpdG1hcC5jLTk5LVxcdGlmIChzdGFydCBcXHUwMDNlPSBzaXplKSB7XFxuZnMvaGZzcGx1cy9iaXRtYXAuYzoxMDA6XFx0XFx0aGZzX2RiZyhcXFwiYml0bWFwIGZ1bGxcXFxcblxcXCIpO1xcbmZzL2hmc3BsdXMvYml0bWFwLmMtMTAxLVxcdFxcdGdvdG8gb3V0O1xcbi0tXFxuZnMvaGZzcGx1cy9iaXRtYXAuYy0xNTctXFx0aGZzcGx1c19tYXJrX21kYl9kaXJ0eShzYik7XFxuZnMvaGZzcGx1cy9iaXRtYXAuYzoxNTg6XFx0aGZzX2RiZyhcXFwic3RhcnQgJXUsIG1heCAldVxcXFxuXFxcIiwgc3RhcnQsICptYXgpO1xcbmZzL2hmc3BsdXMvYml0bWFwLmMtMTU5LW91dDpcXG4tLVxcbmZzL2hmc3BsdXMvYml0bWFwLmM9MTY0PWludCBoZnNwbHVzX2Jsb2NrX2ZyZWUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIG9mZnNldCwgdTMyIGNvdW50KVxcbi0tXFxuZnMvaGZzcGx1cy9iaXRtYXAuYy0xNzYtXFxuZnMvaGZzcGx1cy9iaXRtYXAuYzoxNzc6XFx0aGZzX2RiZyhcXFwib2Zmc2V0ICV1LCBjb3VudCAldVxcXFxuXFxcIiwgb2Zmc2V0LCBjb3VudCk7XFxuZnMvaGZzcGx1cy9iaXRtYXAuYy0xNzgtXFx0LyogYXJlIGFsbCBvZiB0aGUgYml0cyBpbiByYW5nZT8gKi9cXG4tLVxcbmZzL2hmc3BsdXMvYm5vZGUuYz0xNzI9dm9pZCBoZnNfYm5vZGVfY29weShzdHJ1Y3QgaGZzX2Jub2RlICpkc3Rfbm9kZSwgdTMyIGRzdCxcXG4tLVxcbmZzL2hmc3BsdXMvYm5vZGUuYy0xNzctXFxuZnMvaGZzcGx1cy9ibm9kZS5jOjE3ODpcXHRoZnNfZGJnKFxcXCJkc3QgJXUsIHNyYyAldSwgbGVuICV1XFxcXG5cXFwiLCBkc3QsIHNyYywgbGVuKTtcXG5mcy9oZnNwbHVzL2Jub2RlLmMtMTc5LVxcdGlmICghbGVuKVxcbi0tXFxuZnMvaGZzcGx1cy9ibm9kZS5jPTIzMD12b2lkIGhmc19ibm9kZV9tb3ZlKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsIHUzMiBkc3QsIHUzMiBzcmMsIHUzMiBsZW4pXFxuLS1cXG5mcy9oZnNwbHVzL2Jub2RlLmMtMjM1LVxcbmZzL2hmc3BsdXMvYm5vZGUuYzoyMzY6XFx0aGZzX2RiZyhcXFwiZHN0ICV1LCBzcmMgJXUsIGxlbiAldVxcXFxuXFxcIiwgZHN0LCBzcmMsIGxlbik7XFxuZnMvaGZzcGx1cy9ibm9kZS5jLTIzNy1cXHRpZiAoIWxlbilcXG4tLVxcbmZzL2hmc3BsdXMvYm5vZGUuYz0zNTA9dm9pZCBoZnNfYm5vZGVfZHVtcChzdHJ1Y3QgaGZzX2Jub2RlICpub2RlKVxcbi0tXFxuZnMvaGZzcGx1cy9ibm9kZS5jLTM1Ni1cXG5mcy9oZnNwbHVzL2Jub2RlLmM6MzU3OlxcdGhmc19kYmcoXFxcIm5vZGUgJWRcXFxcblxcXCIsIG5vZGUtXFx1MDAzZXRoaXMpO1xcbmZzL2hmc3BsdXMvYm5vZGUuYy0zNTgtXFx0aGZzX2Jub2RlX3JlYWQobm9kZSwgXFx1MDAyNmRlc2MsIDAsIHNpemVvZihkZXNjKSk7XFxuZnMvaGZzcGx1cy9ibm9kZS5jLTM1OS1cXHRudW1fcmVjcyA9IG5vZGUtXFx1MDAzZW51bV9yZWNzO1xcbmZzL2hmc3BsdXMvYm5vZGUuYzozNjA6XFx0aGZzX2RiZyhcXFwibmV4dCAlZCwgcHJldiAlZCwgdHlwZSAlZCwgaGVpZ2h0ICVkLCBudW1fcmVjcyAlZFxcXFxuXFxcIixcXG5mcy9oZnNwbHVzL2Jub2RlLmMtMzYxLVxcdFxcdGJlMzJfdG9fY3B1KGRlc2MubmV4dCksIGJlMzJfdG9fY3B1KGRlc2MucHJldiksXFxuLS1cXG5mcy9oZnNwbHVzL2Jub2RlLmMtMzY0LVxcdGlmICghaGZzX2Jub2RlX251bV9yZWNzX3ZhbGlkKG5vZGUpKSB7XFxuZnMvaGZzcGx1cy9ibm9kZS5jOjM2NTpcXHRcXHRoZnNfZGJnKFxcXCJpbnZhbGlkIG51bV9yZWNzICV1XFxcXG5cXFwiLCBudW1fcmVjcyk7XFxuZnMvaGZzcGx1cy9ibm9kZS5jLTM2Ni1cXHRcXHRyZXR1cm47XFxuLS1cXG5mcy9oZnNwbHVzL2Jub2RlLmMtMzcxLVxcdFxcdGtleV9vZmYgPSBoZnNfYm5vZGVfcmVhZF91MTYobm9kZSwgb2ZmKTtcXG5mcy9oZnNwbHVzL2Jub2RlLmM6MzcyOlxcdFxcdGhmc19kYmcoXFxcIiBrZXlfb2ZmICVkXFxcIiwga2V5X29mZik7XFxuZnMvaGZzcGx1cy9ibm9kZS5jLTM3My1cXHRcXHRpZiAoaSBcXHUwMDI2XFx1MDAyNiBub2RlLVxcdTAwM2V0eXBlID09IEhGU19OT0RFX0lOREVYKSB7XFxuLS1cXG5mcy9oZnNwbHVzL2Jub2RlLmMtMzgwLVxcdFxcdFxcdFxcdHRtcCA9IG5vZGUtXFx1MDAzZXRyZWUtXFx1MDAzZW1heF9rZXlfbGVuICsgMjtcXG5mcy9oZnNwbHVzL2Jub2RlLmM6MzgxOlxcdFxcdFxcdGhmc19kYmcoXFxcIiAoJWRcXFwiLCB0bXApO1xcbmZzL2hmc3BsdXMvYm5vZGUuYy0zODItXFx0XFx0XFx0aGZzX2Jub2RlX3JlYWQobm9kZSwgXFx1MDAyNmNuaWQsIGtleV9vZmYgKyB0bXAsIDQpO1xcbmZzL2hmc3BsdXMvYm5vZGUuYzozODM6XFx0XFx0XFx0aGZzX2RiZyhcXFwiLCBjbmlkICVkKVxcXCIsIGJlMzJfdG9fY3B1KGNuaWQpKTtcXG5mcy9oZnNwbHVzL2Jub2RlLmMtMzg0LVxcdFxcdH0gZWxzZSBpZiAoaSBcXHUwMDI2XFx1MDAyNiBub2RlLVxcdTAwM2V0eXBlID09IEhGU19OT0RFX0xFQUYpIHtcXG4tLVxcbmZzL2hmc3BsdXMvYm5vZGUuYy0zODctXFx0XFx0XFx0dG1wID0gaGZzX2Jub2RlX3JlYWRfdTE2KG5vZGUsIGtleV9vZmYpO1xcbmZzL2hmc3BsdXMvYm5vZGUuYzozODg6XFx0XFx0XFx0aGZzX2RiZyhcXFwiICglZClcXFwiLCB0bXApO1xcbmZzL2hmc3BsdXMvYm5vZGUuYy0zODktXFx0XFx0fVxcbmZzL2hmc3BsdXMvYm5vZGUuYy0zOTAtXFx0fVxcbmZzL2hmc3BsdXMvYm5vZGUuYzozOTE6XFx0aGZzX2RiZyhcXFwiXFxcXG5cXFwiKTtcXG5mcy9oZnNwbHVzL2Jub2RlLmMtMzkyLX1cXG4tLVxcbmZzL2hmc3BsdXMvYm5vZGUuYz0zOTQ9dm9pZCBoZnNfYm5vZGVfdW5saW5rKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUpXFxuLS1cXG5mcy9oZnNwbHVzL2Jub2RlLmMtNDI2LVxcdGlmICghbm9kZS1cXHUwMDNlcHJldiBcXHUwMDI2XFx1MDAyNiAhbm9kZS1cXHUwMDNlbmV4dClcXG5mcy9oZnNwbHVzL2Jub2RlLmM6NDI3OlxcdFxcdGhmc19kYmcoXFxcImJ0cmVlIGRlbGV0ZSBsZXZlbFxcXFxuXFxcIik7XFxuZnMvaGZzcGx1cy9ibm9kZS5jLTQyOC1cXHRpZiAoIW5vZGUtXFx1MDAzZXBhcmVudCkge1xcbi0tXFxuZnMvaGZzcGx1cy9ibm9kZS5jPTQ2Mj1zdGF0aWMgc3RydWN0IGhmc19ibm9kZSAqX19oZnNfYm5vZGVfY3JlYXRlKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUsIHUzMiBjbmlkKVxcbi0tXFxuZnMvaGZzcGx1cy9ibm9kZS5jLTQ4Mi1cXHRhdG9taWNfc2V0KFxcdTAwMjZub2RlLVxcdTAwM2VyZWZjbnQsIDEpO1xcbmZzL2hmc3BsdXMvYm5vZGUuYzo0ODM6XFx0aGZzX2RiZyhcXFwiY25pZCAlZCwgbm9kZSAlZCwgcmVmY250IDFcXFxcblxcXCIsXFxuZnMvaGZzcGx1cy9ibm9kZS5jLTQ4NC1cXHRcXHRub2RlLVxcdTAwM2V0cmVlLVxcdTAwM2VjbmlkLCBub2RlLVxcdTAwM2V0aGlzKTtcXG4tLVxcbmZzL2hmc3BsdXMvYm5vZGUuYz01MjA9dm9pZCBoZnNfYm5vZGVfdW5oYXNoKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUpXFxuLS1cXG5mcy9oZnNwbHVzL2Jub2RlLmMtNTIzLVxcbmZzL2hmc3BsdXMvYm5vZGUuYzo1MjQ6XFx0aGZzX2RiZyhcXFwiY25pZCAlZCwgbm9kZSAlZCwgcmVmY250ICVkXFxcXG5cXFwiLFxcbmZzL2hmc3BsdXMvYm5vZGUuYy01MjUtXFx0XFx0bm9kZS1cXHUwMDNldHJlZS1cXHUwMDNlY25pZCwgbm9kZS1cXHUwMDNldGhpcywgYXRvbWljX3JlYWQoXFx1MDAyNm5vZGUtXFx1MDAzZXJlZmNudCkpO1xcbi0tXFxuZnMvaGZzcGx1cy9ibm9kZS5jPTY2Nz12b2lkIGhmc19ibm9kZV9nZXQoc3RydWN0IGhmc19ibm9kZSAqbm9kZSlcXG4tLVxcbmZzL2hmc3BsdXMvYm5vZGUuYy02NzAtXFx0XFx0YXRvbWljX2luYyhcXHUwMDI2bm9kZS1cXHUwMDNlcmVmY250KTtcXG5mcy9oZnNwbHVzL2Jub2RlLmM6NjcxOlxcdFxcdGhmc19kYmcoXFxcImNuaWQgJWQsIG5vZGUgJWQsIHJlZmNudCAlZFxcXFxuXFxcIixcXG5mcy9oZnNwbHVzL2Jub2RlLmMtNjcyLVxcdFxcdFxcdG5vZGUtXFx1MDAzZXRyZWUtXFx1MDAzZWNuaWQsIG5vZGUtXFx1MDAzZXRoaXMsXFxuLS1cXG5mcy9oZnNwbHVzL2Jub2RlLmM9Njc4PXZvaWQgaGZzX2Jub2RlX3B1dChzdHJ1Y3QgaGZzX2Jub2RlICpub2RlKVxcbi0tXFxuZnMvaGZzcGx1cy9ibm9kZS5jLTY4My1cXG5mcy9oZnNwbHVzL2Jub2RlLmM6Njg0OlxcdFxcdGhmc19kYmcoXFxcImNuaWQgJWQsIG5vZGUgJWQsIHJlZmNudCAlZFxcXFxuXFxcIixcXG5mcy9oZnNwbHVzL2Jub2RlLmMtNjg1LVxcdFxcdFxcdG5vZGUtXFx1MDAzZXRyZWUtXFx1MDAzZWNuaWQsIG5vZGUtXFx1MDAzZXRoaXMsXFxuLS1cXG5mcy9oZnNwbHVzL2JyZWMuYz02OT1pbnQgaGZzX2JyZWNfaW5zZXJ0KHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCwgdm9pZCAqZW50cnksIHUzMiBlbnRyeV9sZW4pXFxuLS1cXG5mcy9oZnNwbHVzL2JyZWMuYy0xMDAtXFx0ZW5kX3JlY19vZmYgLT0gMjtcXG5mcy9oZnNwbHVzL2JyZWMuYzoxMDE6XFx0aGZzX2RiZyhcXFwicmVjICVkLCBzaXplICVkLCBlbmRfb2ZmICVkLCBlbmRfcmVjX29mZiAlZFxcXFxuXFxcIixcXG5mcy9oZnNwbHVzL2JyZWMuYy0xMDItXFx0XFx0cmVjLCBzaXplLCBlbmRfb2ZmLCBlbmRfcmVjX29mZik7XFxuLS1cXG5mcy9oZnNwbHVzL2JyZWMuYz0xODU9aW50IGhmc19icmVjX3JlbW92ZShzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpXFxuLS1cXG5mcy9oZnNwbHVzL2JyZWMuYy0yMDYtXFx0aGZzX2Jub2RlX2R1bXAobm9kZSk7XFxuZnMvaGZzcGx1cy9icmVjLmM6MjA3OlxcdGhmc19kYmcoXFxcInJlYyAlZCwgbGVuICVkXFxcXG5cXFwiLFxcbmZzL2hmc3BsdXMvYnJlYy5jLTIwOC1cXHRcXHRmZC1cXHUwMDNlcmVjb3JkLCBmZC1cXHUwMDNla2V5bGVuZ3RoICsgZmQtXFx1MDAzZWVudHJ5bGVuZ3RoKTtcXG4tLVxcbmZzL2hmc3BsdXMvYnJlYy5jPTI0Nj1zdGF0aWMgc3RydWN0IGhmc19ibm9kZSAqaGZzX2Jub2RlX3NwbGl0KHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZClcXG4tLVxcbmZzL2hmc3BsdXMvYnJlYy5jLTI2Mi1cXHRoZnNfYm5vZGVfZ2V0KG5vZGUpO1xcbmZzL2hmc3BsdXMvYnJlYy5jOjI2MzpcXHRoZnNfZGJnKFxcXCJ0aGlzICVkIC0gbmV3ICVkIC0gbmV4dCAlZFxcXFxuXFxcIixcXG5mcy9oZnNwbHVzL2JyZWMuYy0yNjQtXFx0XFx0bm9kZS1cXHUwMDNldGhpcywgbmV3X25vZGUtXFx1MDAzZXRoaXMsIG5vZGUtXFx1MDAzZW5leHQpO1xcbi0tXFxuZnMvaGZzcGx1cy9icmVjLmM9Mzc1PXN0YXRpYyBpbnQgaGZzX2JyZWNfdXBkYXRlX3BhcmVudChzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpXFxuLS1cXG5mcy9oZnNwbHVzL2JyZWMuYy00MDQtXFx0XFx0ZmQtXFx1MDAzZWtleWxlbmd0aCA9IG5ld2tleWxlbiA9IHRyZWUtXFx1MDAzZW1heF9rZXlfbGVuICsgMjtcXG5mcy9oZnNwbHVzL2JyZWMuYzo0MDU6XFx0aGZzX2RiZyhcXFwicmVjICVkLCBrZXlsZW5ndGggJWQsIG5ld2tleWxlbiAlZFxcXFxuXFxcIixcXG5mcy9oZnNwbHVzL2JyZWMuYy00MDYtXFx0XFx0cmVjLCBmZC1cXHUwMDNla2V5bGVuZ3RoLCBuZXdrZXlsZW4pO1xcbi0tXFxuZnMvaGZzcGx1cy9icmVjLmMtNDE2LVxcbmZzL2hmc3BsdXMvYnJlYy5jOjQxNzpcXHRcXHRcXHRoZnNfZGJnKFxcXCJzcGxpdHRpbmcgaW5kZXggbm9kZVxcXFxuXFxcIik7XFxuZnMvaGZzcGx1cy9icmVjLmMtNDE4LVxcdFxcdFxcdGZkLVxcdTAwM2Vibm9kZSA9IHBhcmVudDtcXG4tLVxcbmZzL2hmc3BsdXMvYnRyZWUuYz01Mjg9c3RydWN0IGhmc19ibm9kZSAqaGZzX2JtYXBfYWxsb2Moc3RydWN0IGhmc19idHJlZSAqdHJlZSlcXG4tLVxcbmZzL2hmc3BsdXMvYnRyZWUuYy01ODgtXFx0XFx0aWYgKCFuaWR4KSB7XFxuZnMvaGZzcGx1cy9idHJlZS5jOjU4OTpcXHRcXHRcXHRoZnNfZGJnKFxcXCJjcmVhdGUgbmV3IGJtYXAgbm9kZVxcXFxuXFxcIik7XFxuZnMvaGZzcGx1cy9idHJlZS5jLTU5MC1cXHRcXHRcXHRuZXh0X25vZGUgPSBoZnNfYm1hcF9uZXdfYm1hcChub2RlLCBpZHgpO1xcbi0tXFxuZnMvaGZzcGx1cy9idHJlZS5jPTYwOT12b2lkIGhmc19ibWFwX2ZyZWUoc3RydWN0IGhmc19ibm9kZSAqbm9kZSlcXG4tLVxcbmZzL2hmc3BsdXMvYnRyZWUuYy02MTUtXFxuZnMvaGZzcGx1cy9idHJlZS5jOjYxNjpcXHRoZnNfZGJnKFxcXCJub2RlICV1XFxcXG5cXFwiLCBub2RlLVxcdTAwM2V0aGlzKTtcXG5mcy9oZnNwbHVzL2J0cmVlLmMtNjE3LVxcdEJVR19PTighbm9kZS1cXHUwMDNldGhpcyk7XFxuLS1cXG5mcy9oZnNwbHVzL2NhdGFsb2cuYz0yNTM9aW50IGhmc3BsdXNfY3JlYXRlX2NhdCh1MzIgY25pZCwgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9oZnNwbHVzL2NhdGFsb2cuYy0yNjEtXFxuZnMvaGZzcGx1cy9jYXRhbG9nLmM6MjYyOlxcdGhmc19kYmcoXFxcIm5hbWUgJXMsIGNuaWQgJXUsIGlfbmxpbmsgJWRcXFxcblxcXCIsXFxuZnMvaGZzcGx1cy9jYXRhbG9nLmMtMjYzLVxcdFxcdHN0ci1cXHUwMDNlbmFtZSwgY25pZCwgaW5vZGUtXFx1MDAzZWlfbmxpbmspO1xcbi0tXFxuZnMvaGZzcGx1cy9jYXRhbG9nLmM9MzMxPWludCBoZnNwbHVzX2RlbGV0ZV9jYXQodTMyIGNuaWQsIHN0cnVjdCBpbm9kZSAqZGlyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqc3RyKVxcbi0tXFxuZnMvaGZzcGx1cy9jYXRhbG9nLmMtMzM4LVxcbmZzL2hmc3BsdXMvY2F0YWxvZy5jOjMzOTpcXHRoZnNfZGJnKFxcXCJuYW1lICVzLCBjbmlkICV1XFxcXG5cXFwiLCBzdHIgPyBzdHItXFx1MDAzZW5hbWUgOiBOVUxMLCBjbmlkKTtcXG5mcy9oZnNwbHVzL2NhdGFsb2cuYy0zNDAtXFx0ZXJyID0gaGZzX2ZpbmRfaW5pdChIRlNQTFVTX1NCKHNiKS1cXHUwMDNlY2F0X3RyZWUsIFxcdTAwMjZmZCk7XFxuLS1cXG5mcy9oZnNwbHVzL2NhdGFsb2cuYz00MjU9aW50IGhmc3BsdXNfcmVuYW1lX2NhdCh1MzIgY25pZCxcXG4tLVxcbmZzL2hmc3BsdXMvY2F0YWxvZy5jLTQzNC1cXG5mcy9oZnNwbHVzL2NhdGFsb2cuYzo0MzU6XFx0aGZzX2RiZyhcXFwiY25pZCAldSAtIGlubyAlbGx1LCBuYW1lICVzIC0gaW5vICVsbHUsIG5hbWUgJXNcXFxcblxcXCIsXFxuZnMvaGZzcGx1cy9jYXRhbG9nLmMtNDM2LVxcdFxcdGNuaWQsIHNyY19kaXItXFx1MDAzZWlfaW5vLCBzcmNfbmFtZS1cXHUwMDNlbmFtZSxcXG4tLVxcbmZzL2hmc3BsdXMvZGlyLmM9Mjk0PXN0YXRpYyBpbnQgaGZzcGx1c19saW5rKHN0cnVjdCBkZW50cnkgKnNyY19kZW50cnksIHN0cnVjdCBpbm9kZSAqZHN0X2RpcixcXG4tLVxcbmZzL2hmc3BsdXMvZGlyLmMtMzA5LVxcbmZzL2hmc3BsdXMvZGlyLmM6MzEwOlxcdGhmc19kYmcoXFxcInNyY19kaXItXFx1MDAzZWlfaW5vICVsbHUsIGRzdF9kaXItXFx1MDAzZWlfaW5vICVsbHUsIGlub2RlLVxcdTAwM2VpX2lubyAlbGx1XFxcXG5cXFwiLFxcbmZzL2hmc3BsdXMvZGlyLmMtMzExLVxcdFxcdHNyY19kaXItXFx1MDAzZWlfaW5vLCBkc3RfZGlyLVxcdTAwM2VpX2lubywgaW5vZGUtXFx1MDAzZWlfaW5vKTtcXG4tLVxcbmZzL2hmc3BsdXMvZGlyLmM9MzcwPXN0YXRpYyBpbnQgaGZzcGx1c191bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4tLVxcbmZzL2hmc3BsdXMvZGlyLmMtMzgxLVxcbmZzL2hmc3BsdXMvZGlyLmM6MzgyOlxcdGhmc19kYmcoXFxcImRpci1cXHUwMDNlaV9pbm8gJWxsdSwgaW5vZGUtXFx1MDAzZWlfaW5vICVsbHVcXFxcblxcXCIsXFxuZnMvaGZzcGx1cy9kaXIuYy0zODMtXFx0XFx0ZGlyLVxcdTAwM2VpX2lubywgaW5vZGUtXFx1MDAzZWlfaW5vKTtcXG4tLVxcbmZzL2hmc3BsdXMvZGlyLmM9NDYzPXN0YXRpYyBpbnQgaGZzcGx1c19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL2hmc3BsdXMvZGlyLmMtNDc0LVxcbmZzL2hmc3BsdXMvZGlyLmM6NDc1OlxcdGhmc19kYmcoXFxcImRpci1cXHUwMDNlaV9pbm8gJWxsdSwgaW5vZGUtXFx1MDAzZWlfaW5vICVsbHVcXFxcblxcXCIsXFxuZnMvaGZzcGx1cy9kaXIuYy00NzYtXFx0XFx0ZGlyLVxcdTAwM2VpX2lubywgaW5vZGUtXFx1MDAzZWlfaW5vKTtcXG4tLVxcbmZzL2hmc3BsdXMvZGlyLmM9NTE0PXN0YXRpYyBpbnQgaGZzcGx1c19ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9oZnNwbHVzL2Rpci5jLTUyNS1cXG5mcy9oZnNwbHVzL2Rpci5jOjUyNjpcXHRoZnNfZGJnKFxcXCJkaXItXFx1MDAzZWlfaW5vICVsbHUsIGlub2RlLVxcdTAwM2VpX2lubyAlbGx1XFxcXG5cXFwiLFxcbmZzL2hmc3BsdXMvZGlyLmMtNTI3LVxcdFxcdGRpci1cXHUwMDNlaV9pbm8sIGlub2RlLVxcdTAwM2VpX2lubyk7XFxuLS1cXG5mcy9oZnNwbHVzL2V4dGVudHMuYz0yMjc9aW50IGhmc3BsdXNfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGlibG9jayxcXG4tLVxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTI3OS1kb25lOlxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jOjI4MDpcXHRoZnNfZGJnKFxcXCJpbm8gJWxsdSwgaWJsb2NrICVsbHUgLSBkYmxvY2sgJXVcXFxcblxcXCIsXFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMjgxLVxcdFxcdGlub2RlLVxcdTAwM2VpX2lubywgKGxvbmcgbG9uZylpYmxvY2ssIGRibG9jayk7XFxuLS1cXG5mcy9oZnNwbHVzL2V4dGVudHMuYz0yOTk9c3RhdGljIHZvaWQgaGZzcGx1c19kdW1wX2V4dGVudChzdHJ1Y3QgaGZzcGx1c19leHRlbnQgKmV4dGVudClcXG4tLVxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTMwMi1cXG5mcy9oZnNwbHVzL2V4dGVudHMuYzozMDM6XFx0aGZzX2RiZyhcXFwiZXh0ZW50ICAgXFxcIik7XFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMzA0LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyA4OyBpKyspXFxuZnMvaGZzcGx1cy9leHRlbnRzLmM6MzA1OlxcdFxcdGhmc19kYmcoXFxcIiBzdGFydF9ibG9jayAldSwgYmxvY2tfY291bnQgJXVcXFwiLFxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTMwNi1cXHRcXHRcXHRiZTMyX3RvX2NwdShleHRlbnRbaV0uc3RhcnRfYmxvY2spLFxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTMwNy1cXHRcXHRcXHRiZTMyX3RvX2NwdShleHRlbnRbaV0uYmxvY2tfY291bnQpKTtcXG5mcy9oZnNwbHVzL2V4dGVudHMuYzozMDg6XFx0aGZzX2RiZyhcXFwiXFxcXG5cXFwiKTtcXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0zMDktfVxcbi0tXFxuZnMvaGZzcGx1cy9leHRlbnRzLmM9NDM4PWludCBoZnNwbHVzX2ZpbGVfZXh0ZW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGJvb2wgemVyb291dClcXG4tLVxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTQ4MC1cXG5mcy9oZnNwbHVzL2V4dGVudHMuYzo0ODE6XFx0aGZzX2RiZyhcXFwiaW5vICVsbHUsIHN0YXJ0ICV1LCBsZW4gJXVcXFxcblxcXCIsIGlub2RlLVxcdTAwM2VpX2lubywgc3RhcnQsIGxlbik7XFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtNDgyLVxcbi0tXFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtNDg0LVxcdFxcdGlmICghaGlwLVxcdTAwM2VmaXJzdF9ibG9ja3MpIHtcXG5mcy9oZnNwbHVzL2V4dGVudHMuYzo0ODU6XFx0XFx0XFx0aGZzX2RiZyhcXFwiZmlyc3RfZXh0ZW50OiBzdGFydCAldSwgbGVuICV1XFxcXG5cXFwiLFxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTQ4Ni1cXHRcXHRcXHRcXHRzdGFydCwgbGVuKTtcXG4tLVxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTUyNi1pbnNlcnRfZXh0ZW50OlxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jOjUyNzpcXHRoZnNfZGJnKFxcXCJpbnNlcnQgbmV3IGV4dGVudFxcXFxuXFxcIik7XFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtNTI4LVxcdHJlcyA9IGhmc3BsdXNfZXh0X3dyaXRlX2V4dGVudF9sb2NrZWQoaW5vZGUpO1xcbi0tXFxuZnMvaGZzcGx1cy9leHRlbnRzLmM9NTQ0PXZvaWQgaGZzcGx1c19maWxlX3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9oZnNwbHVzL2V4dGVudHMuYy01NTEtXFxuZnMvaGZzcGx1cy9leHRlbnRzLmM6NTUyOlxcdGhmc19kYmcoXFxcImlubyAlbGx1LCBwaHlzX3NpemUgJWxsdSAtXFx1MDAzZSBpX3NpemUgJWxsdVxcXFxuXFxcIixcXG5mcy9oZnNwbHVzL2V4dGVudHMuYy01NTMtXFx0XFx0aW5vZGUtXFx1MDAzZWlfaW5vLCAobG9uZyBsb25nKWhpcC1cXHUwMDNlcGh5c19zaXplLCBpbm9kZS1cXHUwMDNlaV9zaXplKTtcXG4tLVxcbmZzL2hmc3BsdXMvaW5vZGUuYz0zNTY9aW50IGhmc3BsdXNfZmlsZV9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLFxcbi0tXFxuZnMvaGZzcGx1cy9pbm9kZS5jLTM2NS1cXG5mcy9oZnNwbHVzL2lub2RlLmM6MzY2OlxcdGhmc19kYmcoXFxcImlub2RlLVxcdTAwM2VpX2lubyAlbGx1LCBzdGFydCAlbGx1LCBlbmQgJWxsdVxcXFxuXFxcIixcXG5mcy9oZnNwbHVzL2lub2RlLmMtMzY3LVxcdFxcdGlub2RlLVxcdTAwM2VpX2lubywgc3RhcnQsIGVuZCk7XFxuLS1cXG5mcy9oZnNwbHVzL2lub2RlLmM9Njc3PWludCBoZnNwbHVzX2NhdF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvaGZzcGx1cy9pbm9kZS5jLTY4NC1cXG5mcy9oZnNwbHVzL2lub2RlLmM6Njg1OlxcdGhmc19kYmcoXFxcImlub2RlLVxcdTAwM2VpX2lubyAlbGx1XFxcXG5cXFwiLCBpbm9kZS1cXHUwMDNlaV9pbm8pO1xcbmZzL2hmc3BsdXMvaW5vZGUuYy02ODYtXFxuLS1cXG5mcy9oZnNwbHVzL3N1cGVyLmM9MTY4PXN0YXRpYyBpbnQgaGZzcGx1c193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvaGZzcGx1cy9zdXBlci5jLTE3Mi1cXG5mcy9oZnNwbHVzL3N1cGVyLmM6MTczOlxcdGhmc19kYmcoXFxcImlubyAlbGx1XFxcXG5cXFwiLCBpbm9kZS1cXHUwMDNlaV9pbm8pO1xcbmZzL2hmc3BsdXMvc3VwZXIuYy0xNzQtXFxuLS1cXG5mcy9oZnNwbHVzL3N1cGVyLmM9MTg2PXN0YXRpYyB2b2lkIGhmc3BsdXNfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG5mcy9oZnNwbHVzL3N1cGVyLmMtMTg3LXtcXG5mcy9oZnNwbHVzL3N1cGVyLmM6MTg4OlxcdGhmc19kYmcoXFxcImlubyAlbGx1XFxcXG5cXFwiLCBpbm9kZS1cXHUwMDNlaV9pbm8pO1xcbmZzL2hmc3BsdXMvc3VwZXIuYy0xODktXFx0dHJ1bmNhdGVfaW5vZGVfcGFnZXNfZmluYWwoXFx1MDAyNmlub2RlLVxcdTAwM2VpX2RhdGEpO1xcbi0tXFxuZnMvaGZzcGx1cy9zdXBlci5jPTE5Nz1pbnQgaGZzcGx1c19jb21taXRfc3VwZXJibG9jayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvaGZzcGx1cy9zdXBlci5jLTIwMy1cXG5mcy9oZnNwbHVzL3N1cGVyLmM6MjA0OlxcdGhmc19kYmcoXFxcInN0YXJ0aW5nLi4uXFxcXG5cXFwiKTtcXG5mcy9oZnNwbHVzL3N1cGVyLmMtMjA1LVxcbi0tXFxuZnMvaGZzcGx1cy9zdXBlci5jLTIxMi1cXG5mcy9oZnNwbHVzL3N1cGVyLmM6MjEzOlxcdGhmc19kYmcoXFxcImZyZWVfYmxvY2tzICV1LCBuZXh0X2NuaWQgJXUsIGZvbGRlcl9jb3VudCAldSwgZmlsZV9jb3VudCAldVxcXFxuXFxcIixcXG5mcy9oZnNwbHVzL3N1cGVyLmMtMjE0LVxcdFxcdHNiaS1cXHUwMDNlZnJlZV9ibG9ja3MsIHNiaS1cXHUwMDNlbmV4dF9jbmlkLFxcbi0tXFxuZnMvaGZzcGx1cy9zdXBlci5jLTIzOC1cXG5mcy9oZnNwbHVzL3N1cGVyLmM6MjM5OlxcdGhmc19kYmcoXFxcImZpbmlzaGVkOiBlcnIgJWRcXFxcblxcXCIsIGVycm9yKTtcXG5mcy9oZnNwbHVzL3N1cGVyLmMtMjQwLVxcbi0tXFxuZnMvaGZzcGx1cy9zdXBlci5jPTI0ND1zdGF0aWMgaW50IGhmc3BsdXNfc3luY19mcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgd2FpdClcXG4tLVxcbmZzL2hmc3BsdXMvc3VwZXIuYy0yNTEtXFxuZnMvaGZzcGx1cy9zdXBlci5jOjI1MjpcXHRoZnNfZGJnKFxcXCJzdGFydGluZy4uLlxcXFxuXFxcIik7XFxuZnMvaGZzcGx1cy9zdXBlci5jLTI1My1cXG4tLVxcbmZzL2hmc3BsdXMvc3VwZXIuYy0yODItXFxuZnMvaGZzcGx1cy9zdXBlci5jOjI4MzpcXHRoZnNfZGJnKFxcXCJmaW5pc2hlZDogZXJyICVkXFxcXG5cXFwiLCBlcnJvcik7XFxuZnMvaGZzcGx1cy9zdXBlci5jLTI4NC1cXG4tLVxcbmZzL2hmc3BsdXMvc3VwZXIuYz0zMjk9c3RhdGljIHZvaWQgaGZzcGx1c19wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2hmc3BsdXMvc3VwZXIuYy0zMzItXFxuZnMvaGZzcGx1cy9zdXBlci5jOjMzMzpcXHRoZnNfZGJnKFxcXCJzdGFydGluZy4uLlxcXFxuXFxcIik7XFxuZnMvaGZzcGx1cy9zdXBlci5jLTMzNC1cXG4tLVxcbmZzL2hmc3BsdXMvc3VwZXIuYy0zNTMtXFx0a2ZyZWUoc2JpLVxcdTAwM2VzX2JhY2t1cF92aGRyX2J1Zik7XFxuZnMvaGZzcGx1cy9zdXBlci5jOjM1NDpcXHRoZnNfZGJnKFxcXCJmaW5pc2hlZFxcXFxuXFxcIik7XFxuZnMvaGZzcGx1cy9zdXBlci5jLTM1NS19XFxuLS1cXG5mcy9oZnNwbHVzL3hhdHRyLmM9NTM9c3RhdGljIHUzMiBoZnNwbHVzX2luaXRfaGVhZGVyX25vZGUoc3RydWN0IGlub2RlICphdHRyX2ZpbGUsXFxuLS1cXG5mcy9oZnNwbHVzL3hhdHRyLmMtNjctXFxuZnMvaGZzcGx1cy94YXR0ci5jOjY4OlxcdGhmc19kYmcoXFxcImNsdW1wICV1LCBub2RlX3NpemUgJXVcXFxcblxcXCIsXFxuZnMvaGZzcGx1cy94YXR0ci5jLTY5LVxcdFxcdGNsdW1wX3NpemUsIG5vZGVfc2l6ZSk7XFxuLS1cXG5mcy9oZnNwbHVzL3hhdHRyLmM9MTk4PXN0YXRpYyBpbnQgaGZzcGx1c19jcmVhdGVfYXR0cmlidXRlc19maWxlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9oZnNwbHVzL3hhdHRyLmMtMjEzLVxcbmZzL2hmc3BsdXMveGF0dHIuYzoyMTQ6XFx0aGZzX2RiZyhcXFwiaW5vICVkXFxcXG5cXFwiLCBIRlNQTFVTX0FUVFJfQ05JRCk7XFxuZnMvaGZzcGx1cy94YXR0ci5jLTIxNS1cXG4tLVxcbmZzL2hmc3BsdXMveGF0dHIuYz0zNTE9aW50IF9faGZzcGx1c19zZXR4YXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLFxcbi0tXFxuZnMvaGZzcGx1cy94YXR0ci5jLTM2MC1cXG5mcy9oZnNwbHVzL3hhdHRyLmM6MzYxOlxcdGhmc19kYmcoXFxcImlubyAlbGx1LCBuYW1lICVzLCB2YWx1ZSAlcCwgc2l6ZSAlenVcXFxcblxcXCIsXFxuZnMvaGZzcGx1cy94YXR0ci5jLTM2Mi1cXHRcXHRpbm9kZS1cXHUwMDNlaV9pbm8sIG5hbWUgPyBuYW1lIDogTlVMTCxcXG4tLVxcbmZzL2hmc3BsdXMveGF0dHIuYy00NDMtXFx0XFx0aWYgKGVycikge1xcbmZzL2hmc3BsdXMveGF0dHIuYzo0NDQ6XFx0XFx0XFx0aGZzX2RiZyhcXFwidW5hYmxlIHRvIHJlcGxhY2UgeGF0dHI6IGVyciAlZFxcXFxuXFxcIiwgZXJyKTtcXG5mcy9oZnNwbHVzL3hhdHRyLmMtNDQ1LVxcdFxcdFxcdGdvdG8gZW5kX3NldHhhdHRyO1xcbi0tXFxuZnMvaGZzcGx1cy94YXR0ci5jLTQ1NC1cXHRcXHRpZiAoZXJyKSB7XFxuZnMvaGZzcGx1cy94YXR0ci5jOjQ1NTpcXHRcXHRcXHRoZnNfZGJnKFxcXCJ1bmFibGUgdG8gc3RvcmUgdmFsdWU6IGVyciAlZFxcXFxuXFxcIiwgZXJyKTtcXG5mcy9oZnNwbHVzL3hhdHRyLmMtNDU2LVxcdFxcdFxcdGdvdG8gZW5kX3NldHhhdHRyO1xcbi0tXFxuZnMvaGZzcGx1cy94YXR0ci5jLTQ5Ni1cXHRoZnNfZmluZF9leGl0KFxcdTAwMjZjYXRfZmQpO1xcbmZzL2hmc3BsdXMveGF0dHIuYzo0OTc6XFx0aGZzX2RiZyhcXFwiZmluaXNoZWQ6IHJlcyAlZFxcXFxuXFxcIiwgZXJyKTtcXG5mcy9oZnNwbHVzL3hhdHRyLmMtNDk4LVxcdHJldHVybiBlcnI7XFxuLS1cXG5mcy9oZnNwbHVzL3hhdHRyLmM9NTM0PWludCBoZnNwbHVzX3NldHhhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsXFxuLS1cXG5mcy9oZnNwbHVzL3hhdHRyLmMtNTQyLVxcbmZzL2hmc3BsdXMveGF0dHIuYzo1NDM6XFx0aGZzX2RiZyhcXFwiaW5vICVsbHUsIG5hbWUgJXMsIHByZWZpeCAlcywgcHJlZml4bGVuICV6dSwgXFxcIlxcbmZzL2hmc3BsdXMveGF0dHIuYy01NDQtXFx0XFx0XFxcInZhbHVlICVwLCBzaXplICV6dVxcXFxuXFxcIixcXG4tLVxcbmZzL2hmc3BsdXMveGF0dHIuYy01NTYtXFxuZnMvaGZzcGx1cy94YXR0ci5jOjU1NzpcXHRoZnNfZGJnKFxcXCJmaW5pc2hlZDogcmVzICVkXFxcXG5cXFwiLCByZXMpO1xcbmZzL2hmc3BsdXMveGF0dHIuYy01NTgtXFxuLS1cXG5mcy9oZnNwbHVzL3hhdHRyLmM9Njk2PXNzaXplX3QgaGZzcGx1c19nZXR4YXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLFxcbi0tXFxuZnMvaGZzcGx1cy94YXR0ci5jLTcwMi1cXG5mcy9oZnNwbHVzL3hhdHRyLmM6NzAzOlxcdGhmc19kYmcoXFxcImlubyAlbGx1LCBuYW1lICVzLCBwcmVmaXggJXNcXFxcblxcXCIsXFxuZnMvaGZzcGx1cy94YXR0ci5jLTcwNC1cXHRcXHRpbm9kZS1cXHUwMDNlaV9pbm8sIG5hbWUgPyBuYW1lIDogTlVMTCxcXG4tLVxcbmZzL2hmc3BsdXMveGF0dHIuYy03MTctXFxuZnMvaGZzcGx1cy94YXR0ci5jOjcxODpcXHRoZnNfZGJnKFxcXCJmaW5pc2hlZDogcmVzICVkXFxcXG5cXFwiLCByZXMpO1xcbmZzL2hmc3BsdXMveGF0dHIuYy03MTktXFxuLS1cXG5mcy9oZnNwbHVzL3hhdHRyLmM9ODAyPXNzaXplX3QgaGZzcGx1c19saXN0eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjaGFyICpidWZmZXIsIHNpemVfdCBzaXplKVxcbi0tXFxuZnMvaGZzcGx1cy94YXR0ci5jLTgxMi1cXG5mcy9oZnNwbHVzL3hhdHRyLmM6ODEzOlxcdGhmc19kYmcoXFxcImlubyAlbGx1XFxcXG5cXFwiLCBpbm9kZS1cXHUwMDNlaV9pbm8pO1xcbmZzL2hmc3BsdXMveGF0dHIuYy04MTQtXFxuLS1cXG5mcy9oZnNwbHVzL3hhdHRyLmMtOTAwLVxcbmZzL2hmc3BsdXMveGF0dHIuYzo5MDE6XFx0aGZzX2RiZyhcXFwiZmluaXNoZWQ6IHJlcyAlemRcXFxcblxcXCIsIHJlcyk7XFxuZnMvaGZzcGx1cy94YXR0ci5jLTkwMi1cXG4tLVxcbmZzL2hmc3BsdXMveGF0dHIuYz05MDY9c3RhdGljIGludCBoZnNwbHVzX3JlbW92ZXhhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUpXFxuLS1cXG5mcy9oZnNwbHVzL3hhdHRyLmMtOTE0LVxcbmZzL2hmc3BsdXMveGF0dHIuYzo5MTU6XFx0aGZzX2RiZyhcXFwiaW5vICVsbHUsIG5hbWUgJXNcXFxcblxcXCIsXFxuZnMvaGZzcGx1cy94YXR0ci5jLTkxNi1cXHRcXHRpbm9kZS1cXHUwMDNlaV9pbm8sIG5hbWUgPyBuYW1lIDogTlVMTCk7XFxuLS1cXG5mcy9oZnNwbHVzL3hhdHRyLmMtOTg0LVxcbmZzL2hmc3BsdXMveGF0dHIuYzo5ODU6XFx0aGZzX2RiZyhcXFwiZmluaXNoZWQ6IGVyciAlZFxcXFxuXFxcIiwgZXJyKTtcXG5mcy9oZnNwbHVzL3hhdHRyLmMtOTg2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQxMjo1NTo1NS4wMDMyNzY2MjhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTMzMjE5MzA3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSEZTKyBDb2RlIGZvciBEZWJ1Z2dpbmcgRm9jdXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IHNlZSBhIG1hY3JvLCBgaGZzX2RiZ2AsIHVzZWQgZXZlcnl3aGVyZS4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgYnV0IHdhaXQsIGBoZnNfYm5vZGVfZHVtcGAgaXMgZGVmaW5lZCB1bmNvbmRpdGlvbmFsbHkhIFRoYXQncyBpbnRlcmVzdGluZywgYW5kIGl0IGxvb2tzIGxpa2UgaXQncyBwcmltYXJpbHkgdXNlZCBmb3IgZGVidWdnaW5nLiBMZXQncyBtYWtlIGEgbWVudGFsIG5vdGUgdG8gY2hlY2sgaWYgYGhmc19ibm9kZV9kdW1wYCBpcyBhIGdvb2Qgc3ltYm9sIHRvIGZvY3VzIG9uIHdoZW4gSSdtIGRlYnVnZ2luZyB0aGlzLlxuXG5CZXlvbmQgdGhhdCwgSSBzZWUgYSBidW5jaCBvZiBvdGhlciBmdW5jdGlvbnMgdGhhdCBzZWVtIHJlYWxseSBpbXBvcnRhbnQuIFRoZXkncmUgYWxsIGZ1bmN0aW9uYWwsIHNvIHRoZXkncmUgc29saWQgY2FuZGlkYXRlczogYF9faGZzX2JyZWNfZmluZGAsIGBoZnNfYnJlY19maW5kYCwgYGhmc19ibm9kZV9maW5kYCwgYGhmc19icmVjX2xlbm9mZmAsIGBoZnNfYnJlY19rZXlsZW5gLCBhbmQgYGhmc19icmVjX3JlbW92ZWAuIEkgc2hvdWxkIHByb2JhYmx5IG1ha2UgYSBsaXN0IGp1c3QgdG8ga2VlcCB0aGVtIHN0cmFpZ2h0OlxuXG4qICAgYF9faGZzX2JyZWNfZmluZGBcbiogICBgaGZzX2JyZWNfZmluZGBcbiogICBgaGZzX2Jub2RlX2ZpbmRgXG4qICAgYGhmc19icmVjX2xlbm9mZmBcbiogICBgaGZzX2JyZWNfa2V5bGVuYFxuKiAgIGBoZnNfYnJlY19yZW1vdmVgXG5cbk5vdywgYmVmb3JlIEkgZGlnIGluLCBJIG5lZWQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgbWlnaHQgYWZmZWN0IHdoYXQgSSdtIHNlZWluZy4gQWgsIHllcywgYEhGU1BMVVNfRlNgIGlzIHRoZSBtYWluIG9uZSB0aGF0IGp1bXBzIG91dC4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGNvbmZpZ3MgdGhhdCBjb3VsZCBiZSByZWxldmFudC4gVGhhdCdzIGFsd2F5cyBhIGdvb2QgcHJhY3RpY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MjYwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDEyOjU2OjAwLjMzNTQ3MjIxOFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI0MTI4NDcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBIRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvaGZzcGx1cy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2hmc3BsdXMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2hmc3BsdXMvS2NvbmZpZzoyOmNvbmZpZyBIRlNQTFVTX0ZTXFxuZnMvaGZzcGx1cy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkFwcGxlIEV4dGVuZGVkIEhGUyBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvaGZzcGx1cy9LY29uZmlnLTE3LVxcbmZzL2hmc3BsdXMvS2NvbmZpZzoxODpjb25maWcgSEZTUExVU19LVU5JVF9URVNUXFxuZnMvaGZzcGx1cy9LY29uZmlnLTE5LVxcdHRyaXN0YXRlIFxcXCJLVW5pdCB0ZXN0cyBmb3IgSEZTKyBmaWxlc3lzdGVtXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDEyOjU2OjAwLjY1OTYwNjk4OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODA3MzAwMzYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEhGUysgQi1UcmVlIEJvdW5kcyBDaGVjayBQYXRjaCoqXG5cbk9rYXksIEkndmUgcmV2aWV3ZWQgdGhlIHBhdGNoIGFuZCBJJ20gc2F0aXNmaWVkLiBgSEZTUExVU19GU2AgaXMgc3VmZmljaWVudCBmb3IgdGhpcyBvbmUuIExldCdzIG1ha2Ugc3VyZSBJJ3ZlIGdvdCB0aGlzIHN0cmFpZ2h0LiBUaGlzIHBhdGNoIGludHJvZHVjZXMgYm91bmRzIGNoZWNraW5nIHdpdGhpbiB0aGUgSEZTKyBiLXRyZWUgb3BlcmF0aW9ucy4gSXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBzcGVjaWZpY2FsbHkgaW4gaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBhbmQgcGFyc2VzIEhGUysgaW1hZ2VzLiBUaGlzIGNsZWFybHkgbWVhbnMgaXQncyBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLlxuXG5NeSBmb2N1cyBzeW1ib2xzIGFyZSBhcyBmb2xsb3dzOiBgX19oZnNfYnJlY19maW5kYCwgYGhmc19icmVjX2ZpbmRgLCBgaGZzX2Jub2RlX2ZpbmRgLCBgaGZzX2JyZWNfbGVub2ZmYCwgYGhmc19icmVjX2tleWxlbmAsIGFuZCBgaGZzX2JyZWNfcmVtb3ZlYC5cblxuVGhlIHBhdGNoJ3MgaW50ZW50IGlzIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcyBhbmQgd3JpdGVzLiBUaGlzIGlzIGFjaGlldmVkIGJ5IHZhbGlkYXRpbmcgdGhlIGItdHJlZSBub2RlIGFuZCByZWNvcmQgaGFuZGxpbmcuIFRoaXMgaXMgcGFydGljdWxhcmx5IGltcG9ydGFudCBmb3IgY29ycnVwdGVkIGZpbGVzeXN0ZW0gaW1hZ2VzLiBJdCdzIHRyaWdnZXJlZCBieSBtb3VudGluZyBhbmQgaW50ZXJhY3Rpbmcgd2l0aCBIRlMrIGltYWdlcywgbWVhbmluZyBJIGNhbiBwb3RlbnRpYWxseSB0cmlnZ2VyIGl0IHdpdGggY3JhZnRlZCBpbnB1dC4gSSdtIGdvaW5nIHRvIGNhbGwgYHNldC1yZXN1bHRzYCBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MDU3LCJPdXRwdXRUb2tlbnMiOjE1OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQxMjo1NjowNi40NjY5MDk2N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxNzA3NjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIRlNQTFVTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19oZnNfYnJlY19maW5kXCIsXG4gICAgXCJoZnNfYnJlY19maW5kXCIsXG4gICAgXCJoZnNfYm5vZGVfZmluZFwiLFxuICAgIFwiaGZzX2JyZWNfbGVub2ZmXCIsXG4gICAgXCJoZnNfYnJlY19rZXlsZW5cIixcbiAgICBcImhmc19icmVjX3JlbW92ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIGFuZCB2YWxpZGF0aW9uIHRvIEhGUysgYi10cmVlIG5vZGUgYW5kIHJlY29yZCBoYW5kbGluZyB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgd2hlbiBkZWFsaW5nIHdpdGggY29ycnVwdGVkIGZpbGVzeXN0ZW0gaW1hZ2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIEhGUysgZmlsZXN5c3RlbSBkcml2ZXIgdGhhdCBpcyByZWFjaGFibGUgYnkgbW91bnRpbmcgYW5kIGludGVyYWN0aW5nIHdpdGggY3JhZnRlZCBIRlMrIGltYWdlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIRlNQTFVTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19oZnNfYnJlY19maW5kXCIsXG4gICAgXCJoZnNfYnJlY19maW5kXCIsXG4gICAgXCJoZnNfYm5vZGVfZmluZFwiLFxuICAgIFwiaGZzX2JyZWNfbGVub2ZmXCIsXG4gICAgXCJoZnNfYnJlY19rZXlsZW5cIixcbiAgICBcImhmc19icmVjX3JlbW92ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIGFuZCB2YWxpZGF0aW9uIHRvIEhGUysgYi10cmVlIG5vZGUgYW5kIHJlY29yZCBoYW5kbGluZyB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgd2hlbiBkZWFsaW5nIHdpdGggY29ycnVwdGVkIGZpbGVzeXN0ZW0gaW1hZ2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIEhGUysgZmlsZXN5c3RlbSBkcml2ZXIgdGhhdCBpcyByZWFjaGFibGUgYnkgbW91bnRpbmcgYW5kIGludGVyYWN0aW5nIHdpdGggY3JhZnRlZCBIRlMrIGltYWdlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowqwsk2[1] Phase: Succeeded StartedAt: 2026-07-12 12:56:18 +0000 UTC FinishedAt: 2026-07-12 12:56:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqwsk2[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-12 12:56:18 +0000 UTC FinishedAt: 2026-07-12 12:56:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqwsk2[2] Phase: Succeeded StartedAt: 2026-07-12 12:56:18 +0000 UTC FinishedAt: 2026-07-12 17:12:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqwsk2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__hfs_brec_find","hfs_brec_find","hfs_bnode_find","hfs_brec_lenoff","hfs_brec_keylen","hfs_brec_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"687cfb4e-23ce-4968-9f74-b5e0990727be","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-12 12:56:18 +0000 UTC FinishedAt: 2026-07-12 17:12:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__hfs_brec_find","hfs_brec_find","hfs_bnode_find","hfs_brec_lenoff","hfs_brec_keylen","hfs_brec_remove"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"687cfb4e-23ce-4968-9f74-b5e0990727be","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-workflowqwsk2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__hfs_brec_find","hfs_brec_find","hfs_bnode_find","hfs_brec_lenoff","hfs_brec_keylen","hfs_brec_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"687cfb4e-23ce-4968-9f74-b5e0990727be","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-12 12:56:18 +0000 UTC FinishedAt: 2026-07-12 12:56:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqwsk2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__hfs_brec_find","hfs_brec_find","hfs_bnode_find","hfs_brec_lenoff","hfs_brec_keylen","hfs_brec_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"687cfb4e-23ce-4968-9f74-b5e0990727be","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-12 12:56:18 +0000 UTC FinishedAt: 2026-07-12 12:56:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"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-workflowqwsk2/series-workflowqwsk2-convert-artifact-5717109/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqwsk2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__hfs_brec_find","hfs_brec_find","hfs_bnode_find","hfs_brec_lenoff","hfs_brec_keylen","hfs_brec_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"687cfb4e-23ce-4968-9f74-b5e0990727be","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-12 12:56:28 +0000 UTC FinishedAt: 2026-07-12 13:27:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqwsk2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__hfs_brec_find","hfs_brec_find","hfs_bnode_find","hfs_brec_lenoff","hfs_brec_keylen","hfs_brec_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"687cfb4e-23ce-4968-9f74-b5e0990727be","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-12 12:56:28 +0000 UTC FinishedAt: 2026-07-12 13:27:25 +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:*0bbe235a-8fd5-4d95-8b78-7931030360b3,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-workflowqwsk2/series-workflowqwsk2-convert-artifact-5717109/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": "668dff8d-7a36-433b-b6ec-a3ee2c2fefc6", "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-workflowqwsk2/series-workflowqwsk2-build-action-1148884571/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqwsk2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__hfs_brec_find","hfs_brec_find","hfs_bnode_find","hfs_brec_lenoff","hfs_brec_keylen","hfs_brec_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"687cfb4e-23ce-4968-9f74-b5e0990727be","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-12 12:56:28 +0000 UTC FinishedAt: 2026-07-12 13:27:11 +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:*0bbe235a-8fd5-4d95-8b78-7931030360b3,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-workflowqwsk2/series-workflowqwsk2-convert-artifact-5717109/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": "668dff8d-7a36-433b-b6ec-a3ee2c2fefc6", "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-workflowqwsk2/series-workflowqwsk2-build-action-1148884571/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqwsk2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__hfs_brec_find","hfs_brec_find","hfs_bnode_find","hfs_brec_lenoff","hfs_brec_keylen","hfs_brec_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"687cfb4e-23ce-4968-9f74-b5e0990727be","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-12 13:27:25 +0000 UTC FinishedAt: 2026-07-12 13:27:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqwsk2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__hfs_brec_find","hfs_brec_find","hfs_bnode_find","hfs_brec_lenoff","hfs_brec_keylen","hfs_brec_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"687cfb4e-23ce-4968-9f74-b5e0990727be","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-12 13:27:25 +0000 UTC FinishedAt: 2026-07-12 13:27:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqwsk2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__hfs_brec_find","hfs_brec_find","hfs_bnode_find","hfs_brec_lenoff","hfs_brec_keylen","hfs_brec_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"687cfb4e-23ce-4968-9f74-b5e0990727be","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-12 13:27:25 +0000 UTC FinishedAt: 2026-07-12 13:28:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqwsk2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__hfs_brec_find","hfs_brec_find","hfs_bnode_find","hfs_brec_lenoff","hfs_brec_keylen","hfs_brec_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"687cfb4e-23ce-4968-9f74-b5e0990727be","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-12 13:27:25 +0000 UTC FinishedAt: 2026-07-12 13:27:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"687cfb4e-23ce-4968-9f74-b5e0990727be","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-workflowqwsk2/series-workflowqwsk2-convert-artifact-1842459344/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqwsk2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__hfs_brec_find","hfs_brec_find","hfs_bnode_find","hfs_brec_lenoff","hfs_brec_keylen","hfs_brec_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"687cfb4e-23ce-4968-9f74-b5e0990727be","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-12 13:28:01 +0000 UTC FinishedAt: 2026-07-12 13:30:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqwsk2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__hfs_brec_find","hfs_brec_find","hfs_bnode_find","hfs_brec_lenoff","hfs_brec_keylen","hfs_brec_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"687cfb4e-23ce-4968-9f74-b5e0990727be","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-12 13:28:01 +0000 UTC FinishedAt: 2026-07-12 13:30:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*668dff8d-7a36-433b-b6ec-a3ee2c2fefc6,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-workflowqwsk2/series-workflowqwsk2-build-action-1148884571/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-workflowqwsk2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__hfs_brec_find","hfs_brec_find","hfs_bnode_find","hfs_brec_lenoff","hfs_brec_keylen","hfs_brec_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"687cfb4e-23ce-4968-9f74-b5e0990727be","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-12 13:30:12 +0000 UTC FinishedAt: 2026-07-12 13:30:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqwsk2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__hfs_brec_find","hfs_brec_find","hfs_bnode_find","hfs_brec_lenoff","hfs_brec_keylen","hfs_brec_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"687cfb4e-23ce-4968-9f74-b5e0990727be","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-12 13:30:12 +0000 UTC FinishedAt: 2026-07-12 13:30:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqwsk2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__hfs_brec_find","hfs_brec_find","hfs_bnode_find","hfs_brec_lenoff","hfs_brec_keylen","hfs_brec_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"687cfb4e-23ce-4968-9f74-b5e0990727be","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-12 13:30:12 +0000 UTC FinishedAt: 2026-07-12 14:06:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqwsk2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__hfs_brec_find","hfs_brec_find","hfs_bnode_find","hfs_brec_lenoff","hfs_brec_keylen","hfs_brec_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"687cfb4e-23ce-4968-9f74-b5e0990727be","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-12 13:30:12 +0000 UTC FinishedAt: 2026-07-12 14:06:33 +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:*0bbe235a-8fd5-4d95-8b78-7931030360b3,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-workflowqwsk2/series-workflowqwsk2-convert-artifact-1842459344/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": "df63a21a-185f-4909-ae2f-0b4971463adf", "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-workflowqwsk2/series-workflowqwsk2-build-action-3044438092/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqwsk2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__hfs_brec_find","hfs_brec_find","hfs_bnode_find","hfs_brec_lenoff","hfs_brec_keylen","hfs_brec_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"687cfb4e-23ce-4968-9f74-b5e0990727be","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-12 13:30:12 +0000 UTC FinishedAt: 2026-07-12 14:05:51 +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:*0bbe235a-8fd5-4d95-8b78-7931030360b3,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-workflowqwsk2/series-workflowqwsk2-convert-artifact-1842459344/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": "df63a21a-185f-4909-ae2f-0b4971463adf", "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-workflowqwsk2/series-workflowqwsk2-build-action-3044438092/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqwsk2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__hfs_brec_find","hfs_brec_find","hfs_bnode_find","hfs_brec_lenoff","hfs_brec_keylen","hfs_brec_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"687cfb4e-23ce-4968-9f74-b5e0990727be","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-12 14:06:33 +0000 UTC FinishedAt: 2026-07-12 14:06:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqwsk2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__hfs_brec_find","hfs_brec_find","hfs_bnode_find","hfs_brec_lenoff","hfs_brec_keylen","hfs_brec_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"687cfb4e-23ce-4968-9f74-b5e0990727be","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-12 14:06:33 +0000 UTC FinishedAt: 2026-07-12 14:06:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqwsk2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__hfs_brec_find","hfs_brec_find","hfs_bnode_find","hfs_brec_lenoff","hfs_brec_keylen","hfs_brec_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"687cfb4e-23ce-4968-9f74-b5e0990727be","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-12 14:06:33 +0000 UTC FinishedAt: 2026-07-12 14:08:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqwsk2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__hfs_brec_find","hfs_brec_find","hfs_bnode_find","hfs_brec_lenoff","hfs_brec_keylen","hfs_brec_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"687cfb4e-23ce-4968-9f74-b5e0990727be","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-12 14:06:33 +0000 UTC FinishedAt: 2026-07-12 14:08:25 +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:*df63a21a-185f-4909-ae2f-0b4971463adf,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-workflowqwsk2/series-workflowqwsk2-build-action-3044438092/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-workflowqwsk2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__hfs_brec_find","hfs_brec_find","hfs_bnode_find","hfs_brec_lenoff","hfs_brec_keylen","hfs_brec_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"687cfb4e-23ce-4968-9f74-b5e0990727be","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-12 14:08:35 +0000 UTC FinishedAt: 2026-07-12 17:12:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqwsk2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__hfs_brec_find","hfs_brec_find","hfs_bnode_find","hfs_brec_lenoff","hfs_brec_keylen","hfs_brec_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"687cfb4e-23ce-4968-9f74-b5e0990727be","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-12 14:08:35 +0000 UTC FinishedAt: 2026-07-12 17:12:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__hfs_brec_find","hfs_brec_find","hfs_bnode_find","hfs_brec_lenoff","hfs_brec_keylen","hfs_brec_remove"],"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:*668dff8d-7a36-433b-b6ec-a3ee2c2fefc6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*df63a21a-185f-4909-ae2f-0b4971463adf,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-workflowqwsk2/series-workflowqwsk2-build-action-1148884571/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-workflowqwsk2/series-workflowqwsk2-build-action-3044438092/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowqwsk2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__hfs_brec_find","hfs_brec_find","hfs_bnode_find","hfs_brec_lenoff","hfs_brec_keylen","hfs_brec_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"687cfb4e-23ce-4968-9f74-b5e0990727be","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-12 14:08:35 +0000 UTC FinishedAt: 2026-07-12 14:08:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqwsk2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__hfs_brec_find","hfs_brec_find","hfs_bnode_find","hfs_brec_lenoff","hfs_brec_keylen","hfs_brec_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"687cfb4e-23ce-4968-9f74-b5e0990727be","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-12 14:08:35 +0000 UTC FinishedAt: 2026-07-12 14:08:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__hfs_brec_find","hfs_brec_find","hfs_bnode_find","hfs_brec_lenoff","hfs_brec_keylen","hfs_brec_remove"],"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-workflowqwsk2/series-workflowqwsk2-convert-artifact-4199033801/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqwsk2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__hfs_brec_find","hfs_brec_find","hfs_bnode_find","hfs_brec_lenoff","hfs_brec_keylen","hfs_brec_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"687cfb4e-23ce-4968-9f74-b5e0990727be","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-12 14:08:35 +0000 UTC FinishedAt: 2026-07-12 14:08:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqwsk2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__hfs_brec_find","hfs_brec_find","hfs_bnode_find","hfs_brec_lenoff","hfs_brec_keylen","hfs_brec_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"687cfb4e-23ce-4968-9f74-b5e0990727be","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-12 14:08:35 +0000 UTC FinishedAt: 2026-07-12 14:08:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqwsk2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__hfs_brec_find","hfs_brec_find","hfs_bnode_find","hfs_brec_lenoff","hfs_brec_keylen","hfs_brec_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"687cfb4e-23ce-4968-9f74-b5e0990727be","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-12 14:08:35 +0000 UTC FinishedAt: 2026-07-12 14:08:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqwsk2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__hfs_brec_find","hfs_brec_find","hfs_bnode_find","hfs_brec_lenoff","hfs_brec_keylen","hfs_brec_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"687cfb4e-23ce-4968-9f74-b5e0990727be","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-12 14:08:45 +0000 UTC FinishedAt: 2026-07-12 17:12:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqwsk2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__hfs_brec_find","hfs_brec_find","hfs_bnode_find","hfs_brec_lenoff","hfs_brec_keylen","hfs_brec_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"44696aa3a489d2baf58efa61b37833f100072bee","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"687cfb4e-23ce-4968-9f74-b5e0990727be","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-12 14:08:45 +0000 UTC FinishedAt: 2026-07-12 17:12:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*668dff8d-7a36-433b-b6ec-a3ee2c2fefc6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*df63a21a-185f-4909-ae2f-0b4971463adf,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-workflowqwsk2/series-workflowqwsk2-build-action-1148884571/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-workflowqwsk2/series-workflowqwsk2-build-action-3044438092/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-workflowqwsk2/series-workflowqwsk2-convert-artifact-4199033801/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,}