Name: series-workflowz7p9m Phase: Succeeded StartedAt: 2026-07-14 10:03:26 +0000 UTC FinishedAt: 2026-07-14 12:03:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7p9m[0] Phase: Succeeded StartedAt: 2026-07-14 10:03:26 +0000 UTC FinishedAt: 2026-07-14 10:21:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7p9m[0].run-triage Phase: Succeeded StartedAt: 2026-07-14 10:03:26 +0000 UTC FinishedAt: 2026-07-14 10:21:42 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "a13c140cc289c0b7b3770bce5b3ad42ab35074aa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "a13c140cc289c0b7b3770bce5b3ad42ab35074aa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "1353c962-63a9-49b0-9bf5-26170b2b5a88" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_vcpu_ioctl_interrupt", "dmsintc_deliver_msi_to_vcpu", "eiointc_update_irq", "loongarch_ipi_readl", "loongarch_ipi_writel" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDEwOjIwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV92Y3B1X2lvY3RsX2ludGVycnVwdCYjMzQ7LAogICAgJiMzNDtkbXNpbnRjX2RlbGl2ZXJfbXNpX3RvX3ZjcHUmIzM0OywKICAgICYjMzQ7ZWlvaW50Y191cGRhdGVfaXJxJiMzNDssCiAgICAmIzM0O2xvb25nYXJjaF9pcGlfcmVhZGwmIzM0OywKICAgICYjMzQ7bG9vbmdhcmNoX2lwaV93cml0ZWwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgTG9vbmdBcmNoIEtWTSBpbnRlcnJ1cHQgaW5qZWN0aW9uIGFuZCBJUEkgaGFuZGxpbmcsIHJlcGxhY2luZyBrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHQgd2l0aCBrdm1fcXVldWVfaXJxIGFuZCBmaXhpbmcgYWxpZ25tZW50IGNoZWNrcyBpbiBJUEkgcmVhZC93cml0ZSBoYW5kbGVycy4gVGhlc2UgYXJlIHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyBhbmQgTU1JTy9JT0NTUiBleGl0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxMDoyMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDkzMmEyYWY2MWMwMDg4NGE5OGRiMDI2NzEwNTAwNDY5NDM0NmEzMWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCAxNCAxMDoyMDoxOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9rdm0vZXhpdC5jIGIvYXJjaC9sb29uZ2FyY2gva3ZtL2V4aXQuY1xuaW5kZXggODU3MmI2MzQ3OGJiOTguLjU5MDU4MGQwMzAzZWE5IDEwMDY0NFxuLS0tIGEvYXJjaC9sb29uZ2FyY2gva3ZtL2V4aXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9sb29uZ2FyY2gva3ZtL2V4aXQuY1xuQEAgLTI1Miw3ICYjNDM7MjUyLDcgQEAgaW50IGt2bV9jb21wbGV0ZV9pb2Nzcl9yZWFkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKnJ1bilcbiBcdFx0KmdwciA9ICooczY0ICopcnVuLVx1MDAzZWlvY3NyX2lvLmRhdGE7XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbi1cdFx0a3ZtX2VycihcJiMzNDtCYWQgSU9DU1IgbGVuZ3RoOiAlZCwgYWRkciBpcyAweCVseFxcblwmIzM0OyxcbiYjNDM7XHRcdGt2bV9wcl91bmltcGwoXCYjMzQ7QmFkIElPQ1NSIGxlbmd0aDogJWQsIGFkZHIgaXMgMHglbHhcXG5cJiMzNDssXG4gXHRcdFx0XHRydW4tXHUwMDNlaW9jc3JfaW8ubGVuLCB2Y3B1LVx1MDAzZWFyY2guYmFkdik7XG4gXHRcdGVyID0gRU1VTEFURV9GQUlMO1xuIFx0XHRicmVhaztcbkBAIC0zMjYsNyAmIzQzOzMyNiw3IEBAIHN0YXRpYyBpbnQga3ZtX3RyYXBfaGFuZGxlX2dzcHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIFx0LyogUm9sbGJhY2sgUEMgb25seSBpZiBlbXVsYXRpb24gd2FzIHVuc3VjY2Vzc2Z1bCAqL1xuIFx0aWYgKGVyID09IEVNVUxBVEVfRkFJTCkge1xuLVx0XHRrdm1fZXJyKFwmIzM0O1slI2x4XSVzOiB1bnN1cHBvcnRlZCBnc3ByIGluc3RydWN0aW9uIDB4JTA4eFxcblwmIzM0OyxcbiYjNDM7XHRcdGt2bV9wcl91bmltcGwoXCYjMzQ7WyUjbHhdJXM6IHVuc3VwcG9ydGVkIGdzcHIgaW5zdHJ1Y3Rpb24gMHglMDh4XFxuXCYjMzQ7LFxuIFx0XHRcdGN1cnJfcGMsIF9fZnVuY19fLCBpbnN0LndvcmQpO1xuIFxuIFx0XHRrdm1fYXJjaF92Y3B1X2R1bXBfcmVncyh2Y3B1KTtcbkBAIC00OTEsNyAmIzQzOzQ5MSw3IEBAIGludCBrdm1fZW11X21taW9fcmVhZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGxhcmNoX2luc3QgaW5zdClcbiBcdFx0cmV0dXJuIEVNVUxBVEVfRE9fTU1JTztcbiBcdH1cbiBcbi1cdGt2bV9lcnIoXCYjMzQ7UmVhZCBub3Qgc3VwcG9ydGVkIEluc3Q9MHglMDh4IEAlbHggQmFkVmFkZHI6JSNseFxcblwmIzM0OyxcbiYjNDM7XHRrdm1fcHJfdW5pbXBsKFwmIzM0O1JlYWQgbm90IHN1cHBvcnRlZCBJbnN0PTB4JTA4eCBAJWx4IEJhZFZhZGRyOiUjbHhcXG5cJiMzNDssXG4gXHRcdFx0aW5zdC53b3JkLCB2Y3B1LVx1MDAzZWFyY2gucGMsIHZjcHUtXHUwMDNlYXJjaC5iYWR2KTtcbiBcdGt2bV9hcmNoX3ZjcHVfZHVtcF9yZWdzKHZjcHUpO1xuIFx0dmNwdS1cdTAwM2VtbWlvX25lZWRlZCA9IDA7XG5AQCAtNTI5LDcgJiM0Mzs1MjksNyBAQCBpbnQga3ZtX2NvbXBsZXRlX21taW9fcmVhZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcnVuICpydW4pXG4gXHRcdCpncHIgPSAqKHM2NCAqKXJ1bi1cdTAwM2VtbWlvLmRhdGE7XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbi1cdFx0a3ZtX2VycihcJiMzNDtCYWQgTU1JTyBsZW5ndGg6ICVkLCBhZGRyIGlzIDB4JWx4XFxuXCYjMzQ7LFxuJiM0MztcdFx0a3ZtX3ByX3VuaW1wbChcJiMzNDtCYWQgTU1JTyBsZW5ndGg6ICVkLCBhZGRyIGlzIDB4JWx4XFxuXCYjMzQ7LFxuIFx0XHRcdFx0cnVuLVx1MDAzZW1taW8ubGVuLCB2Y3B1LVx1MDAzZWFyY2guYmFkdik7XG4gXHRcdGVyID0gRU1VTEFURV9GQUlMO1xuIFx0XHRicmVhaztcbkBAIC02NTYsNyAmIzQzOzY1Niw3IEBAIGludCBrdm1fZW11X21taW9fd3JpdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBsYXJjaF9pbnN0IGluc3QpXG4gXHR9XG4gXG4gXHR2Y3B1LVx1MDAzZWFyY2gucGMgPSBjdXJyX3BjO1xuLVx0a3ZtX2VycihcJiMzNDtXcml0ZSBub3Qgc3VwcG9ydGVkIEluc3Q9MHglMDh4IEAlbHggQmFkVmFkZHI6JSNseFxcblwmIzM0OyxcbiYjNDM7XHRrdm1fcHJfdW5pbXBsKFwmIzM0O1dyaXRlIG5vdCBzdXBwb3J0ZWQgSW5zdD0weCUwOHggQCVseCBCYWRWYWRkcjolI2x4XFxuXCYjMzQ7LFxuIFx0XHRcdGluc3Qud29yZCwgdmNwdS1cdTAwM2VhcmNoLnBjLCB2Y3B1LVx1MDAzZWFyY2guYmFkdik7XG4gXHRrdm1fYXJjaF92Y3B1X2R1bXBfcmVncyh2Y3B1KTtcbiBcdC8qIFJvbGxiYWNrIFBDIGlmIGVtdWxhdGlvbiB3YXMgdW5zdWNjZXNzZnVsICovXG5AQCAtNzQ4LDggJiM0Mzs3NDgsOCBAQCBzdGF0aWMgaW50IGt2bV9oYW5kbGVfZnB1X2Rpc2FibGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGVjb2RlKVxuIFx0ICogdHJlYXRlZCBhcyBhIHJlc2VydmVkIGluc3RydWN0aW9uIVxuIFx0ICogSWYgRlBVIGFscmVhZHkgaW4gdXNlLCB3ZSBzaG91bGRuJiMzOTt0IGdldCB0aGlzIGF0IGFsbC5cbiBcdCAqL1xuLVx0aWYgKFdBUk5fT04odmNwdS1cdTAwM2VhcmNoLmF1eF9pbnVzZSBcdTAwMjYgS1ZNX0xBUkNIX0ZQVSkpIHtcbi1cdFx0a3ZtX2VycihcJiMzNDslcyBpbnRlcm5hbCBlcnJvclxcblwmIzM0OywgX19mdW5jX18pO1xuJiM0MztcdGlmICh2Y3B1LVx1MDAzZWFyY2guYXV4X2ludXNlIFx1MDAyNiBLVk1fTEFSQ0hfRlBVKSB7XG4mIzQzO1x0XHRrdm1fcHJfdW5pbXBsKFwmIzM0OyVzIGludGVybmFsIGVycm9yXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4gXHRcdHJ1bi1cdTAwM2VleGl0X3JlYXNvbiA9IEtWTV9FWElUX0lOVEVSTkFMX0VSUk9SO1xuIFx0XHRyZXR1cm4gUkVTVU1FX0hPU1Q7XG4gXHR9XG5AQCAtOTQzLDcgJiM0Mzs5NDMsNyBAQCBzdGF0aWMgaW50IGt2bV9mYXVsdF9uaShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBlY29kZSlcbiBcdC8qIEZldGNoIHRoZSBpbnN0cnVjdGlvbiAqL1xuIFx0aW5zdCA9IHZjcHUtXHUwMDNlYXJjaC5iYWRpO1xuIFx0YmFkdiA9IHZjcHUtXHUwMDNlYXJjaC5iYWR2O1xuLVx0a3ZtX2VycihcJiMzNDtFQ29kZTogJWQgUEM9JSNseCBJbnN0PTB4JTA4eCBCYWRWYWRkcj0lI2x4IEVTVEFUPSUjbHhcXG5cJiMzNDssXG4mIzQzO1x0a3ZtX3ByX3VuaW1wbChcJiMzNDtFQ29kZTogJWQgUEM9JSNseCBJbnN0PTB4JTA4eCBCYWRWYWRkcj0lI2x4IEVTVEFUPSUjbHhcXG5cJiMzNDssXG4gXHRcdFx0ZWNvZGUsIHZjcHUtXHUwMDNlYXJjaC5wYywgaW5zdCwgYmFkdiwgcmVhZF9nY3NyX2VzdGF0KCkpO1xuIFx0a3ZtX2FyY2hfdmNwdV9kdW1wX3JlZ3ModmNwdSk7XG4gXHRrdm1fcXVldWVfZXhjZXB0aW9uKHZjcHUsIEVYQ0NPREVfSU5FLCAwKTtcbmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9kbXNpbnRjLmMgYi9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9kbXNpbnRjLmNcbmluZGV4IGRlMjU3MzVjZTAzOTQ2Li4xYzcxNmUyNGM1YjAyMiAxMDA2NDRcbi0tLSBhL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Rtc2ludGMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZG1zaW50Yy5jXG5AQCAtMjEsNiAmIzQzOzIxLDggQEAgdm9pZCBkbXNpbnRjX2luamVjdF9pcnEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHRvbGQgPSBhdG9taWM2NF9yZWFkKFx1MDAyNihkcy1cdTAwM2V2ZWN0b3JfbWFwW2ldKSk7XG4gXHRcdGlmIChvbGQpXG4gXHRcdFx0dmVjdG9yW2ldID0gYXRvbWljNjRfeGNoZyhcdTAwMjYoZHMtXHUwMDNldmVjdG9yX21hcFtpXSksIDApO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHR2ZWN0b3JbaV0gPSAwO1xuIFx0fVxuIFxuIFx0aWYgKHZlY3RvclswXSkge1xuQEAgLTQ3LDcgJiM0Mzs0OSw2IEBAIHZvaWQgZG1zaW50Y19pbmplY3RfaXJxKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBpbnQgZG1zaW50Y19kZWxpdmVyX21zaV90b192Y3B1KHN0cnVjdCBrdm0gKmt2bSxcbiBcdFx0XHRcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHZlY3RvciwgaW50IGxldmVsKVxuIHtcbi1cdHN0cnVjdCBrdm1faW50ZXJydXB0IHZjcHVfaXJxO1xuIFx0c3RydWN0IGRtc2ludGNfc3RhdGUgKmRzID0gXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmRtc2ludGNfc3RhdGU7XG4gXG4gXHRpZiAoIWxldmVsKVxuQEAgLTU3LDkgJiM0Mzs1OCwxMSBAQCBpbnQgZG1zaW50Y19kZWxpdmVyX21zaV90b192Y3B1KHN0cnVjdCBrdm0gKmt2bSxcbiBcdGlmICghZHMpXG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFxuLVx0dmNwdV9pcnEuaXJxID0gSU5UX0FWRUM7XG4mIzQzO1x0aWYgKCFrdm1fZ3Vlc3RfaGFzX21zZ2ludChcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuIFx0c2V0X2JpdCh2ZWN0b3IsICh1bnNpZ25lZCBsb25nICopXHUwMDI2ZHMtXHUwMDNldmVjdG9yX21hcCk7XG4tXHRrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHQodmNwdSwgXHUwMDI2dmNwdV9pcnEpO1xuJiM0MztcdGt2bV9xdWV1ZV9pcnEodmNwdSwgSU5UX0FWRUMpO1xuIFx0a3ZtX3ZjcHVfa2ljayh2Y3B1KTtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTExNCw3ICYjNDM7MTE3LDcgQEAgc3RhdGljIGludCBrdm1fZG1zaW50Y19jdHJsX2FjY2VzcyhzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LFxuIFx0XHR9XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbi1cdFx0a3ZtX2VycihcJiMzNDslczogdW5rbm93biBkbXNpbnRjIHJlZ2lzdGVyLCBhZGRyID0gJWRcXG5cJiMzNDssIF9fZnVuY19fLCBhZGRyKTtcbiYjNDM7XHRcdGt2bV9wcl91bmltcGwoXCYjMzQ7JXM6IHVua25vd24gZG1zaW50YyByZWdpc3RlciwgYWRkciA9ICVkXFxuXCYjMzQ7LCBfX2Z1bmNfXywgYWRkcik7XG4gXHRcdHJldHVybiAtRU5YSU87XG4gXHR9XG4gXG5AQCAtMTI4LDcgJiM0MzsxMzEsNyBAQCBzdGF0aWMgaW50IGt2bV9kbXNpbnRjX3NldF9hdHRyKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsXG4gXHRjYXNlIEtWTV9ERVZfTE9PTkdBUkNIX0RNU0lOVENfR1JQX0NUUkw6XG4gXHRcdHJldHVybiBrdm1fZG1zaW50Y19jdHJsX2FjY2VzcyhkZXYsIGF0dHIsIHRydWUpO1xuIFx0ZGVmYXVsdDpcbi1cdFx0a3ZtX2VycihcJiMzNDslczogdW5rbm93biBncm91cCAoJWQpXFxuXCYjMzQ7LCBfX2Z1bmNfXywgYXR0ci1cdTAwM2Vncm91cCk7XG4mIzQzO1x0XHRrdm1fcHJfdW5pbXBsKFwmIzM0OyVzOiB1bmtub3duIGdyb3VwICglZClcXG5cJiMzNDssIF9fZnVuY19fLCBhdHRyLVx1MDAzZWdyb3VwKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gfVxuQEAgLTEzOSwxMyAmIzQzOzE0MiwxMyBAQCBzdGF0aWMgaW50IGt2bV9kbXNpbnRjX2NyZWF0ZShzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LCB1MzIgdHlwZSlcbiBcdHN0cnVjdCBsb29uZ2FyY2hfZG1zaW50YyAqcztcbiBcbiBcdGlmICghZGV2KSB7XG4tXHRcdGt2bV9lcnIoXCYjMzQ7JXM6IGt2bV9kZXZpY2UgcHRyIGlzIGludmFsaWQhXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4mIzQzO1x0XHRrdm1fcHJfdW5pbXBsKFwmIzM0OyVzOiBrdm1fZGV2aWNlIHB0ciBpcyBpbnZhbGlkIVxcblwmIzM0OywgX19mdW5jX18pO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbiBcdGt2bSA9IGRldi1cdTAwM2Vrdm07XG4gXHRpZiAoa3ZtLVx1MDAzZWFyY2guZG1zaW50Yykge1xuLVx0XHRrdm1fZXJyKFwmIzM0OyVzOiBMb29uZ0FyY2ggRE1TSU5UQyBoYXMgYWxyZWFkeSBiZWVuIGNyZWF0ZWQhXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4mIzQzO1x0XHRrdm1fcHJfdW5pbXBsKFwmIzM0OyVzOiBMb29uZ0FyY2ggRE1TSU5UQyBoYXMgYWxyZWFkeSBiZWVuIGNyZWF0ZWQhXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYyBiL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuY1xuaW5kZXggMmIxNDQ4NWQxNGE3MDguLmUwNGFhZGJkNjhkYjk2IDEwMDY0NFxuLS0tIGEvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmNcbkBAIC0xNyw3ICYjNDM7MTcsOCBAQCBzdGF0aWMgdm9pZCBlaW9pbnRjX3NldF9zd19jb3JlaXNyKHN0cnVjdCBsb29uZ2FyY2hfZWlvaW50YyAqcylcbiBcdFx0aWYgKCEocy1cdTAwM2VzdGF0dXMgXHUwMDI2IEJJVChFSU9JTlRDX0VOQUJMRV9JTlRfRU5DT0RFKSkpIHtcbiBcdFx0XHRpcG51bSA9IGNvdW50X3RyYWlsaW5nX3plcm9zKGlwbnVtKTtcbiBcdFx0XHRpcG51bSA9IGlwbnVtIFx1MDAzYyA0ID8gaXBudW0gOiAwO1xuLVx0XHR9XG4mIzQzO1x0XHR9IGVsc2UgaWYgKGlwbnVtIFx1MDAzZT0gTE9PTkdTT05fSVBfTlVNKVxuJiM0MztcdFx0XHRpcG51bSA9IDA7XG4gXG4gXHRcdGNwdWlkID0gKCh1OCAqKXMtXHUwMDNlY29yZW1hcClbaXJxXTtcbiBcdFx0dmNwdSA9IGt2bV9nZXRfdmNwdV9ieV9jcHVpZChzLVx1MDAzZWt2bSwgY3B1aWQpO1xuQEAgLTM2LDE4ICYjNDM7MzcsMTggQEAgc3RhdGljIHZvaWQgZWlvaW50Y191cGRhdGVfaXJxKHN0cnVjdCBsb29uZ2FyY2hfZWlvaW50YyAqcywgaW50IGlycSwgaW50IGxldmVsKVxuIHtcbiBcdGludCBpcG51bSwgY3B1LCBmb3VuZDtcbiBcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbi1cdHN0cnVjdCBrdm1faW50ZXJydXB0IHZjcHVfaXJxO1xuIFxuIFx0aXBudW0gPSAocy1cdTAwM2VpcG1hcCBcdTAwM2VcdTAwM2UgKGlycSAvIDMyICogOCkpIFx1MDAyNiAweGZmO1xuIFx0aWYgKCEocy1cdTAwM2VzdGF0dXMgXHUwMDI2IEJJVChFSU9JTlRDX0VOQUJMRV9JTlRfRU5DT0RFKSkpIHtcbiBcdFx0aXBudW0gPSBjb3VudF90cmFpbGluZ196ZXJvcyhpcG51bSk7XG4gXHRcdGlwbnVtID0gaXBudW0gXHUwMDNjIDQgPyBpcG51bSA6IDA7XG4tXHR9XG4mIzQzO1x0fSBlbHNlIGlmIChpcG51bSBcdTAwM2U9IExPT05HU09OX0lQX05VTSlcbiYjNDM7XHRcdGlwbnVtID0gMDtcbiBcbiBcdGNwdSA9IHMtXHUwMDNlc3dfY29yZW1hcFtpcnFdO1xuIFx0dmNwdSA9IGt2bV9nZXRfdmNwdV9ieV9pZChzLVx1MDAzZWt2bSwgY3B1KTtcbiBcdGlmICh1bmxpa2VseSh2Y3B1ID09IE5VTEwpKSB7XG4tXHRcdGt2bV9lcnIoXCYjMzQ7JXM6IGludmFsaWQgdGFyZ2V0IGNwdTogJWRcXG5cJiMzNDssIF9fZnVuY19fLCBjcHUpO1xuJiM0MztcdFx0a3ZtX3ByX3VuaW1wbChcJiMzNDslczogaW52YWxpZCB0YXJnZXQgY3B1OiAlZFxcblwmIzM0OywgX19mdW5jX18sIGNwdSk7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbkBAIC02Nyw4ICYjNDM7NjgsMTEgQEAgc3RhdGljIHZvaWQgZWlvaW50Y191cGRhdGVfaXJxKHN0cnVjdCBsb29uZ2FyY2hfZWlvaW50YyAqcywgaW50IGlycSwgaW50IGxldmVsKVxuIFx0aWYgKGZvdW5kIFx1MDAzYyBFSU9JTlRDX0lSUVMpXG4gXHRcdHJldHVybjsgLyogb3RoZXIgaXJxIGlzIGhhbmRsaW5nLCBuZWVkbiYjMzk7dCB1cGRhdGUgcGFyZW50IGlycSAqL1xuIFxuLVx0dmNwdV9pcnEuaXJxID0gbGV2ZWwgPyAoSU5UX0hXSTAgJiM0MzsgaXBudW0pIDogLShJTlRfSFdJMCAmIzQzOyBpcG51bSk7XG4tXHRrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHQodmNwdSwgXHUwMDI2dmNwdV9pcnEpO1xuJiM0MztcdGlmIChsZXZlbClcbiYjNDM7XHRcdGt2bV9xdWV1ZV9pcnEodmNwdSwgSU5UX0hXSTAgJiM0MzsgaXBudW0pO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGt2bV9kZXF1ZXVlX2lycSh2Y3B1LCBJTlRfSFdJMCAmIzQzOyBpcG51bSk7XG4mIzQzO1x0a3ZtX3ZjcHVfa2ljayh2Y3B1KTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIGVpb2ludGNfdXBkYXRlX3N3X2NvcmVtYXAoc3RydWN0IGxvb25nYXJjaF9laW9pbnRjICpzLFxuQEAgLTE2NSwxMiAmIzQzOzE2OSwxMiBAQCBzdGF0aWMgaW50IGt2bV9laW9pbnRjX3JlYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0c3RydWN0IGxvb25nYXJjaF9laW9pbnRjICplaW9pbnRjID0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5laW9pbnRjO1xuIFxuIFx0aWYgKCFlaW9pbnRjKSB7XG4tXHRcdGt2bV9lcnIoXCYjMzQ7JXM6IGVpb2ludGMgaXJxY2hpcCBub3QgdmFsaWQhXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4mIzQzO1x0XHRrdm1fcHJfdW5pbXBsKFwmIzM0OyVzOiBlaW9pbnRjIGlycWNoaXAgbm90IHZhbGlkIVxcblwmIzM0OywgX19mdW5jX18pO1xuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbiBcdGlmIChhZGRyIFx1MDAyNiAobGVuIC0gMSkpIHtcbi1cdFx0a3ZtX2VycihcJiMzNDslczogZWlvaW50YyBub3QgYWxpZ25lZCBhZGRyICVsbHggbGVuICVkXFxuXCYjMzQ7LCBfX2Z1bmNfXywgYWRkciwgbGVuKTtcbiYjNDM7XHRcdGt2bV9wcl91bmltcGwoXCYjMzQ7JXM6IGVpb2ludGMgbm90IGFsaWduZWQgYWRkciAlbGx4IGxlbiAlZFxcblwmIzM0OywgX19mdW5jX18sIGFkZHIsIGxlbik7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuQEAgLTI5NywxMiAmIzQzOzMwMSwxMiBAQCBzdGF0aWMgaW50IGt2bV9laW9pbnRjX3dyaXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdHN0cnVjdCBsb29uZ2FyY2hfZWlvaW50YyAqZWlvaW50YyA9IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guZWlvaW50YztcbiBcbiBcdGlmICghZWlvaW50Yykge1xuLVx0XHRrdm1fZXJyKFwmIzM0OyVzOiBlaW9pbnRjIGlycWNoaXAgbm90IHZhbGlkIVxcblwmIzM0OywgX19mdW5jX18pO1xuJiM0MztcdFx0a3ZtX3ByX3VuaW1wbChcJiMzNDslczogZWlvaW50YyBpcnFjaGlwIG5vdCB2YWxpZCFcXG5cJiMzNDssIF9fZnVuY19fKTtcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG4gXHRpZiAoYWRkciBcdTAwMjYgKGxlbiAtIDEpKSB7XG4tXHRcdGt2bV9lcnIoXCYjMzQ7JXM6IGVpb2ludGMgbm90IGFsaWduZWQgYWRkciAlbGx4IGxlbiAlZFxcblwmIzM0OywgX19mdW5jX18sIGFkZHIsIGxlbik7XG4mIzQzO1x0XHRrdm1fcHJfdW5pbXBsKFwmIzM0OyVzOiBlaW9pbnRjIG5vdCBhbGlnbmVkIGFkZHIgJWxseCBsZW4gJWRcXG5cJiMzNDssIF9fZnVuY19fLCBhZGRyLCBsZW4pO1xuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbkBAIC0zNDUsNyAmIzQzOzM0OSw3IEBAIHN0YXRpYyBpbnQga3ZtX2Vpb2ludGNfdmlydF9yZWFkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdHN0cnVjdCBsb29uZ2FyY2hfZWlvaW50YyAqZWlvaW50YyA9IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guZWlvaW50YztcbiBcbiBcdGlmICghZWlvaW50Yykge1xuLVx0XHRrdm1fZXJyKFwmIzM0OyVzOiBlaW9pbnRjIGlycWNoaXAgbm90IHZhbGlkIVxcblwmIzM0OywgX19mdW5jX18pO1xuJiM0MztcdFx0a3ZtX3ByX3VuaW1wbChcJiMzNDslczogZWlvaW50YyBpcnFjaGlwIG5vdCB2YWxpZCFcXG5cJiMzNDssIF9fZnVuY19fKTtcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG5AQCAtMzc1LDcgJiM0MzszNzksNyBAQCBzdGF0aWMgaW50IGt2bV9laW9pbnRjX3ZpcnRfd3JpdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0c3RydWN0IGxvb25nYXJjaF9laW9pbnRjICplaW9pbnRjID0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5laW9pbnRjO1xuIFxuIFx0aWYgKCFlaW9pbnRjKSB7XG4tXHRcdGt2bV9lcnIoXCYjMzQ7JXM6IGVpb2ludGMgaXJxY2hpcCBub3QgdmFsaWQhXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4mIzQzO1x0XHRrdm1fcHJfdW5pbXBsKFwmIzM0OyVzOiBlaW9pbnRjIGlycWNoaXAgbm90IHZhbGlkIVxcblwmIzM0OywgX19mdW5jX18pO1xuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbkBAIC01MDIsNyAmIzQzOzUwNiw3IEBAIHN0YXRpYyBpbnQga3ZtX2Vpb2ludGNfcmVnc19hY2Nlc3Moc3RydWN0IGt2bV9kZXZpY2UgKmRldixcbiBcdFx0cCA9ICh2b2lkICopcy1cdTAwM2Vjb3JlbWFwICYjNDM7IG9mZnNldCAqIDQ7XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbi1cdFx0a3ZtX2VycihcJiMzNDslczogdW5rbm93biBlaW9pbnRjIHJlZ2lzdGVyLCBhZGRyID0gJWRcXG5cJiMzNDssIF9fZnVuY19fLCBhZGRyKTtcbiYjNDM7XHRcdGt2bV9wcl91bmltcGwoXCYjMzQ7JXM6IHVua25vd24gZWlvaW50YyByZWdpc3RlciwgYWRkciA9ICVkXFxuXCYjMzQ7LCBfX2Z1bmNfXywgYWRkcik7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuQEAgLTU0Niw3ICYjNDM7NTUwLDcgQEAgc3RhdGljIGludCBrdm1fZWlvaW50Y19zd19zdGF0dXNfYWNjZXNzKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsXG4gXHRcdHAgPSBcdTAwMjZzLVx1MDAzZXN0YXR1cztcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuLVx0XHRrdm1fZXJyKFwmIzM0OyVzOiB1bmtub3duIGVpb2ludGMgcmVnaXN0ZXIsIGFkZHIgPSAlZFxcblwmIzM0OywgX19mdW5jX18sIGFkZHIpO1xuJiM0MztcdFx0a3ZtX3ByX3VuaW1wbChcJiMzNDslczogdW5rbm93biBlaW9pbnRjIHJlZ2lzdGVyLCBhZGRyID0gJWRcXG5cJiMzNDssIF9fZnVuY19fLCBhZGRyKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZzLVx1MDAzZWxvY2ssIGZsYWdzKTtcbmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuYyBiL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jXG5pbmRleCA0ZmEwODk3ZDdiZGIwMC4uZjMwZDBkMTNmNTRkMDUgMTAwNjQ0XG4tLS0gYS9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmNcbkBAIC0xMCwxNiAmIzQzOzEwLDE1IEBAXG4gc3RhdGljIHZvaWQgaXBpX3NldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVpbnQzMl90IGRhdGEpXG4ge1xuIFx0dWludDMyX3Qgc3RhdHVzO1xuLVx0c3RydWN0IGt2bV9pbnRlcnJ1cHQgaXJxO1xuIFxuIFx0c3Bpbl9sb2NrKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5pcGlfc3RhdGUubG9jayk7XG4gXHRzdGF0dXMgPSB2Y3B1LVx1MDAzZWFyY2guaXBpX3N0YXRlLnN0YXR1cztcbiBcdHZjcHUtXHUwMDNlYXJjaC5pcGlfc3RhdGUuc3RhdHVzIHw9IGRhdGE7XG4tXHRzcGluX3VubG9jayhcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXBpX3N0YXRlLmxvY2spO1xuIFx0aWYgKChzdGF0dXMgPT0gMCkgXHUwMDI2XHUwMDI2IGRhdGEpIHtcbi1cdFx0aXJxLmlycSA9IExBUkNIX0lOVF9JUEk7XG4tXHRcdGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdCh2Y3B1LCBcdTAwMjZpcnEpO1xuJiM0MztcdFx0a3ZtX3F1ZXVlX2lycSh2Y3B1LCBMQVJDSF9JTlRfSVBJKTtcbiYjNDM7XHRcdGt2bV92Y3B1X2tpY2sodmNwdSk7XG4gXHR9XG4mIzQzO1x0c3Bpbl91bmxvY2soXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmlwaV9zdGF0ZS5sb2NrKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgaXBpX3NlbmQoc3RydWN0IGt2bSAqa3ZtLCB1aW50NjRfdCBkYXRhKVxuQEAgLTMwLDcgJiM0MzsyOSw3IEBAIHN0YXRpYyB2b2lkIGlwaV9zZW5kKHN0cnVjdCBrdm0gKmt2bSwgdWludDY0X3QgZGF0YSlcbiBcdGNwdSA9ICgoZGF0YSBcdTAwMjYgMHhmZmZmZmZmZikgXHUwMDNlXHUwMDNlIDE2KSBcdTAwMjYgMHgzZmY7XG4gXHR2Y3B1ID0ga3ZtX2dldF92Y3B1X2J5X2NwdWlkKGt2bSwgY3B1KTtcbiBcdGlmICh1bmxpa2VseSh2Y3B1ID09IE5VTEwpKSB7XG4tXHRcdGt2bV9lcnIoXCYjMzQ7JXM6IGludmFsaWQgdGFyZ2V0IGNwdTogJWRcXG5cJiMzNDssIF9fZnVuY19fLCBjcHUpO1xuJiM0MztcdFx0a3ZtX3ByX3VuaW1wbChcJiMzNDslczogaW52YWxpZCB0YXJnZXQgY3B1OiAlZFxcblwmIzM0OywgX19mdW5jX18sIGNwdSk7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbkBAIC00MCwxNiAmIzQzOzM5LDE1IEBAIHN0YXRpYyB2b2lkIGlwaV9zZW5kKHN0cnVjdCBrdm0gKmt2bSwgdWludDY0X3QgZGF0YSlcbiBzdGF0aWMgdm9pZCBpcGlfY2xlYXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1aW50NjRfdCBkYXRhKVxuIHtcbiBcdHVpbnQzMl90IHN0YXR1cztcbi1cdHN0cnVjdCBrdm1faW50ZXJydXB0IGlycTtcbiBcbiBcdHNwaW5fbG9jayhcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXBpX3N0YXRlLmxvY2spO1xuIFx0dmNwdS1cdTAwM2VhcmNoLmlwaV9zdGF0ZS5zdGF0dXMgXHUwMDI2PSB+ZGF0YTtcbiBcdHN0YXR1cyA9IHZjcHUtXHUwMDNlYXJjaC5pcGlfc3RhdGUuc3RhdHVzO1xuLVx0c3Bpbl91bmxvY2soXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmlwaV9zdGF0ZS5sb2NrKTtcbiBcdGlmIChzdGF0dXMgPT0gMCkge1xuLVx0XHRpcnEuaXJxID0gLUxBUkNIX0lOVF9JUEk7XG4tXHRcdGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdCh2Y3B1LCBcdTAwMjZpcnEpO1xuJiM0MztcdFx0a3ZtX2RlcXVldWVfaXJxKHZjcHUsIExBUkNIX0lOVF9JUEkpO1xuJiM0MztcdFx0a3ZtX3ZjcHVfa2ljayh2Y3B1KTtcbiBcdH1cbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXBpX3N0YXRlLmxvY2spO1xuIH1cbiBcbiBzdGF0aWMgdWludDY0X3QgcmVhZF9tYWlsYm94KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IG9mZnNldCwgaW50IGxlbilcbkBAIC02NywxMSAmIzQzOzY1LDggQEAgc3RhdGljIHVpbnQ2NF90IHJlYWRfbWFpbGJveChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBvZmZzZXQsIGludCBsZW4pXG4gXHRcdHJldHVybiBkYXRhIFx1MDAyNiAweGZmZmY7XG4gXHRjYXNlIDQ6XG4gXHRcdHJldHVybiBkYXRhIFx1MDAyNiAweGZmZmZmZmZmO1xuLVx0Y2FzZSA4OlxuLVx0XHRyZXR1cm4gZGF0YTtcbiBcdGRlZmF1bHQ6XG4tXHRcdGt2bV9lcnIoXCYjMzQ7JXM6IHVua25vd24gZGF0YSBsZW46ICVkXFxuXCYjMzQ7LCBfX2Z1bmNfXywgbGVuKTtcbi1cdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHRyZXR1cm4gZGF0YTtcbiBcdH1cbiB9XG4gXG5AQCAtOTIsMTEgJiM0Mzs4Nyw5IEBAIHN0YXRpYyB2b2lkIHdyaXRlX21haWxib3goc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgb2Zmc2V0LCB1aW50NjRfdCBkYXRhLCBpbnRcbiBcdGNhc2UgNDpcbiBcdFx0Kih1bnNpZ25lZCBpbnQgKilwYnVmID0gKHVuc2lnbmVkIGludClkYXRhO1xuIFx0XHRicmVhaztcbi1cdGNhc2UgODpcbiYjNDM7XHRkZWZhdWx0OlxuIFx0XHQqKHVuc2lnbmVkIGxvbmcgKilwYnVmID0gKHVuc2lnbmVkIGxvbmcpZGF0YTtcbiBcdFx0YnJlYWs7XG4tXHRkZWZhdWx0OlxuLVx0XHRrdm1fZXJyKFwmIzM0OyVzOiB1bmtub3duIGRhdGEgbGVuOiAlZFxcblwmIzM0OywgX19mdW5jX18sIGxlbik7XG4gXHR9XG4gXHRzcGluX3VubG9jayhcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXBpX3N0YXRlLmxvY2spO1xuIH1cbkBAIC0xMTAsNyAmIzQzOzEwMyw3IEBAIHN0YXRpYyBpbnQgbWFpbF9zZW5kKHN0cnVjdCBrdm0gKmt2bSwgdWludDY0X3QgZGF0YSlcbiBcdGNwdSA9ICgoZGF0YSBcdTAwMjYgMHhmZmZmZmZmZikgXHUwMDNlXHUwMDNlIDE2KSBcdTAwMjYgMHgzZmY7XG4gXHR2Y3B1ID0ga3ZtX2dldF92Y3B1X2J5X2NwdWlkKGt2bSwgY3B1KTtcbiBcdGlmICh1bmxpa2VseSh2Y3B1ID09IE5VTEwpKSB7XG4tXHRcdGt2bV9lcnIoXCYjMzQ7JXM6IGludmFsaWQgdGFyZ2V0IGNwdTogJWRcXG5cJiMzNDssIF9fZnVuY19fLCBjcHUpO1xuJiM0MztcdFx0a3ZtX3ByX3VuaW1wbChcJiMzNDslczogaW52YWxpZCB0YXJnZXQgY3B1OiAlZFxcblwmIzM0OywgX19mdW5jX18sIGNwdSk7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFx0bWFpbGJveCA9ICgoZGF0YSBcdTAwMjYgMHhmZmZmZmZmZikgXHUwMDNlXHUwMDNlIDIpIFx1MDAyNiAweDc7XG5AQCAtMTQ0LDcgJiM0MzsxMzcsNyBAQCBzdGF0aWMgaW50IHNlbmRfaXBpX2RhdGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBhZGRyLCB1aW50NjRfdCBkYXRhKVxuIFx0XHRyZXQgPSBrdm1faW9fYnVzX3JlYWQodmNwdSwgS1ZNX0lPQ1NSX0JVUywgYWRkciwgNCwgXHUwMDI2dmFsKTtcbiBcdFx0c3JjdV9yZWFkX3VubG9jayhcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VzcmN1LCBpZHgpO1xuIFx0XHRpZiAodW5saWtlbHkocmV0KSkge1xuLVx0XHRcdGt2bV9lcnIoXCYjMzQ7JXM6IDogcmVhZCBkYXRhIGZyb20gYWRkciAlbGx4IGZhaWxlZFxcblwmIzM0OywgX19mdW5jX18sIGFkZHIpO1xuJiM0MztcdFx0XHRrdm1fcHJfdW5pbXBsKFwmIzM0OyVzOiA6IHJlYWQgZGF0YSBmcm9tIGFkZHIgJWxseCBmYWlsZWRcXG5cJiMzNDssIF9fZnVuY19fLCBhZGRyKTtcbiBcdFx0XHRyZXR1cm4gMDtcbiBcdFx0fVxuIFx0XHQvKiBDb25zdHJ1Y3QgdGhlIG1hc2sgYnkgc2Nhbm5pbmcgdGhlIGJpdCAyNy0zMCAqL1xuQEAgLTE2MCw3ICYjNDM7MTUzLDcgQEAgc3RhdGljIGludCBzZW5kX2lwaV9kYXRhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgYWRkciwgdWludDY0X3QgZGF0YSlcbiBcdHJldCA9IGt2bV9pb19idXNfd3JpdGUodmNwdSwgS1ZNX0lPQ1NSX0JVUywgYWRkciwgNCwgXHUwMDI2dmFsKTtcbiBcdHNyY3VfcmVhZF91bmxvY2soXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlc3JjdSwgaWR4KTtcbiBcdGlmICh1bmxpa2VseShyZXQpKVxuLVx0XHRrdm1fZXJyKFwmIzM0OyVzOiA6IHdyaXRlIGRhdGEgdG8gYWRkciAlbGx4IGZhaWxlZFxcblwmIzM0OywgX19mdW5jX18sIGFkZHIpO1xuJiM0MztcdFx0a3ZtX3ByX3VuaW1wbChcJiMzNDslczogOiB3cml0ZSBkYXRhIHRvIGFkZHIgJWxseCBmYWlsZWRcXG5cJiMzNDssIF9fZnVuY19fLCBhZGRyKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0xNzMsNyAmIzQzOzE2Niw3IEBAIHN0YXRpYyBpbnQgYW55X3NlbmQoc3RydWN0IGt2bSAqa3ZtLCB1aW50NjRfdCBkYXRhKVxuIFx0Y3B1ID0gKChkYXRhIFx1MDAyNiAweGZmZmZmZmZmKSBcdTAwM2VcdTAwM2UgMTYpIFx1MDAyNiAweDNmZjtcbiBcdHZjcHUgPSBrdm1fZ2V0X3ZjcHVfYnlfY3B1aWQoa3ZtLCBjcHUpO1xuIFx0aWYgKHVubGlrZWx5KHZjcHUgPT0gTlVMTCkpIHtcbi1cdFx0a3ZtX2VycihcJiMzNDslczogaW52YWxpZCB0YXJnZXQgY3B1OiAlZFxcblwmIzM0OywgX19mdW5jX18sIGNwdSk7XG4mIzQzO1x0XHRrdm1fcHJfdW5pbXBsKFwmIzM0OyVzOiBpbnZhbGlkIHRhcmdldCBjcHU6ICVkXFxuXCYjMzQ7LCBfX2Z1bmNfXywgY3B1KTtcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXHRvZmZzZXQgPSBkYXRhIFx1MDAyNiAweGZmZmY7XG5AQCAtMTg2LDkgJiM0MzsxNzksMTMgQEAgc3RhdGljIGludCBsb29uZ2FyY2hfaXBpX3JlYWRsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgYWRkciwgaW50IGxlbiwgdm9pZFxuIFx0dWludDMyX3Qgb2Zmc2V0O1xuIFx0dWludDY0X3QgcmVzID0gMDtcbiBcbi1cdG9mZnNldCA9ICh1aW50MzJfdCkoYWRkciBcdTAwMjYgMHgxZmYpO1xuLVx0V0FSTl9PTl9PTkNFKG9mZnNldCBcdTAwMjYgKGxlbiAtIDEpKTtcbiYjNDM7XHRpZiAoYWRkciBcdTAwMjYgKGxlbiAtIDEpKSB7XG4mIzQzO1x0XHQqKHVpbnQ2NF90ICopdmFsID0gcmVzO1xuJiM0MztcdFx0a3ZtX3ByX3VuaW1wbChcJiMzNDslczogaXBpIG5vdCBhbGlnbmVkIGFkZHIgJWxseCBsZW4gJWRcXG5cJiMzNDssIF9fZnVuY19fLCBhZGRyLCBsZW4pO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuIFxuJiM0MztcdG9mZnNldCA9IGFkZHIgLSBJT0NTUl9JUElfQkFTRTtcbiBcdHN3aXRjaCAob2Zmc2V0KSB7XG4gXHRjYXNlIElPQ1NSX0lQSV9TVEFUVVM6XG4gXHRcdHNwaW5fbG9jayhcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXBpX3N0YXRlLmxvY2spO1xuQEAgLTIwNCwxNSAmIzQzOzIwMSwxMCBAQCBzdGF0aWMgaW50IGxvb25nYXJjaF9pcGlfcmVhZGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBhZGRyLCBpbnQgbGVuLCB2b2lkXG4gXHRjYXNlIElPQ1NSX0lQSV9DTEVBUjpcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIElPQ1NSX0lQSV9CVUZfMjAgLi4uIElPQ1NSX0lQSV9CVUZfMzggJiM0MzsgNzpcbi1cdFx0aWYgKG9mZnNldCAmIzQzOyBsZW4gXHUwMDNlIElPQ1NSX0lQSV9CVUZfMzggJiM0MzsgOCkge1xuLVx0XHRcdGt2bV9lcnIoXCYjMzQ7JXM6IGludmFsaWQgb2Zmc2V0IG9yIGxlbjogb2Zmc2V0ID0gJWQsIGxlbiA9ICVkXFxuXCYjMzQ7LFxuLVx0XHRcdFx0X19mdW5jX18sIG9mZnNldCwgbGVuKTtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuIFx0XHRyZXMgPSByZWFkX21haWxib3godmNwdSwgb2Zmc2V0LCBsZW4pO1xuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4tXHRcdGt2bV9lcnIoXCYjMzQ7JXM6IHVua25vd24gYWRkcjogJWxseFxcblwmIzM0OywgX19mdW5jX18sIGFkZHIpO1xuJiM0MztcdFx0a3ZtX3ByX3VuaW1wbChcJiMzNDslczogdW5rbm93biBhZGRyOiAlbGx4XFxuXCYjMzQ7LCBfX2Z1bmNfXywgYWRkcik7XG4gXHRcdGJyZWFrO1xuIFx0fVxuIFx0Kih1aW50NjRfdCAqKXZhbCA9IHJlcztcbkBAIC0yMjcsOSAmIzQzOzIxOSwxMiBAQCBzdGF0aWMgaW50IGxvb25nYXJjaF9pcGlfd3JpdGVsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgYWRkciwgaW50IGxlbiwgY29uc1xuIFxuIFx0ZGF0YSA9ICoodWludDY0X3QgKil2YWw7XG4gXG4tXHRvZmZzZXQgPSAodWludDMyX3QpKGFkZHIgXHUwMDI2IDB4MWZmKTtcbi1cdFdBUk5fT05fT05DRShvZmZzZXQgXHUwMDI2IChsZW4gLSAxKSk7XG4mIzQzO1x0aWYgKGFkZHIgXHUwMDI2IChsZW4gLSAxKSkge1xuJiM0MztcdFx0a3ZtX3ByX3VuaW1wbChcJiMzNDslczogaXBpIG5vdCBhbGlnbmVkIGFkZHIgJWxseCBsZW4gJWRcXG5cJiMzNDssIF9fZnVuY19fLCBhZGRyLCBsZW4pO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuIFxuJiM0MztcdG9mZnNldCA9IGFkZHIgLSBJT0NTUl9JUElfQkFTRTtcbiBcdHN3aXRjaCAob2Zmc2V0KSB7XG4gXHRjYXNlIElPQ1NSX0lQSV9TVEFUVVM6XG4gXHRcdGJyZWFrO1xuQEAgLTI0Nyw3ICYjNDM7MjQyLDcgQEAgc3RhdGljIGludCBsb29uZ2FyY2hfaXBpX3dyaXRlbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGFkZHIsIGludCBsZW4sIGNvbnNcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIElPQ1NSX0lQSV9CVUZfMjAgLi4uIElPQ1NSX0lQSV9CVUZfMzggJiM0MzsgNzpcbiBcdFx0aWYgKG9mZnNldCAmIzQzOyBsZW4gXHUwMDNlIElPQ1NSX0lQSV9CVUZfMzggJiM0MzsgOCkge1xuLVx0XHRcdGt2bV9lcnIoXCYjMzQ7JXM6IGludmFsaWQgb2Zmc2V0IG9yIGxlbjogb2Zmc2V0ID0gJWQsIGxlbiA9ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRrdm1fcHJfdW5pbXBsKFwmIzM0OyVzOiBpbnZhbGlkIG9mZnNldCBvciBsZW46IG9mZnNldCA9ICVkLCBsZW4gPSAlZFxcblwmIzM0OyxcbiBcdFx0XHRcdF9fZnVuY19fLCBvZmZzZXQsIGxlbik7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbkBAIC0yNjMsNyAmIzQzOzI1OCw3IEBAIHN0YXRpYyBpbnQgbG9vbmdhcmNoX2lwaV93cml0ZWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBhZGRyLCBpbnQgbGVuLCBjb25zXG4gXHRcdGFueV9zZW5kKHZjcHUtXHUwMDNla3ZtLCBkYXRhKTtcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuLVx0XHRrdm1fZXJyKFwmIzM0OyVzOiB1bmtub3duIGFkZHI6ICVsbHhcXG5cJiMzNDssIF9fZnVuY19fLCBhZGRyKTtcbiYjNDM7XHRcdGt2bV9wcl91bmltcGwoXCYjMzQ7JXM6IHVua25vd24gYWRkcjogJWxseFxcblwmIzM0OywgX19mdW5jX18sIGFkZHIpO1xuIFx0XHRicmVhaztcbiBcdH1cbiBcbkBAIC0zMDYsNyAmIzQzOzMwMSw3IEBAIHN0YXRpYyBpbnQga3ZtX2lwaV9yZWdzX2FjY2VzcyhzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LFxuIFxuIFx0dmNwdSA9IGt2bV9nZXRfdmNwdV9ieV9pZChkZXYtXHUwMDNla3ZtLCBjcHUpO1xuIFx0aWYgKHVubGlrZWx5KHZjcHUgPT0gTlVMTCkpIHtcbi1cdFx0a3ZtX2VycihcJiMzNDslczogaW52YWxpZCB0YXJnZXQgY3B1OiAlZFxcblwmIzM0OywgX19mdW5jX18sIGNwdSk7XG4mIzQzO1x0XHRrdm1fcHJfdW5pbXBsKFwmIzM0OyVzOiBpbnZhbGlkIHRhcmdldCBjcHU6ICVkXFxuXCYjMzQ7LCBfX2Z1bmNfXywgY3B1KTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG5AQCAtMzQwLDcgJiM0MzszMzUsNyBAQCBzdGF0aWMgaW50IGt2bV9pcGlfcmVnc19hY2Nlc3Moc3RydWN0IGt2bV9kZXZpY2UgKmRldixcbiBcdFx0bGVuID0gODtcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuLVx0XHRrdm1fZXJyKFwmIzM0OyVzOiB1bmtub3duIGlwaSByZWdpc3RlciwgYWRkciA9ICVkXFxuXCYjMzQ7LCBfX2Z1bmNfXywgYWRkcik7XG4mIzQzO1x0XHRrdm1fcHJfdW5pbXBsKFwmIzM0OyVzOiB1bmtub3duIGlwaSByZWdpc3RlciwgYWRkciA9ICVkXFxuXCYjMzQ7LCBfX2Z1bmNfXywgYWRkcik7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuQEAgLTM3NCw3ICYjNDM7MzY5LDcgQEAgc3RhdGljIGludCBrdm1faXBpX2dldF9hdHRyKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsXG4gXHRjYXNlIEtWTV9ERVZfTE9PTkdBUkNIX0lQSV9HUlBfUkVHUzpcbiBcdFx0cmV0dXJuIGt2bV9pcGlfcmVnc19hY2Nlc3MoZGV2LCBhdHRyLCBmYWxzZSk7XG4gXHRkZWZhdWx0OlxuLVx0XHRrdm1fZXJyKFwmIzM0OyVzOiB1bmtub3duIGdyb3VwICglZClcXG5cJiMzNDssIF9fZnVuY19fLCBhdHRyLVx1MDAzZWdyb3VwKTtcbiYjNDM7XHRcdGt2bV9wcl91bmltcGwoXCYjMzQ7JXM6IHVua25vd24gZ3JvdXAgKCVkKVxcblwmIzM0OywgX19mdW5jX18sIGF0dHItXHUwMDNlZ3JvdXApO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiB9XG5AQCAtMzg2LDcgJiM0MzszODEsNyBAQCBzdGF0aWMgaW50IGt2bV9pcGlfc2V0X2F0dHIoc3RydWN0IGt2bV9kZXZpY2UgKmRldixcbiBcdGNhc2UgS1ZNX0RFVl9MT09OR0FSQ0hfSVBJX0dSUF9SRUdTOlxuIFx0XHRyZXR1cm4ga3ZtX2lwaV9yZWdzX2FjY2VzcyhkZXYsIGF0dHIsIHRydWUpO1xuIFx0ZGVmYXVsdDpcbi1cdFx0a3ZtX2VycihcJiMzNDslczogdW5rbm93biBncm91cCAoJWQpXFxuXCYjMzQ7LCBfX2Z1bmNfXywgYXR0ci1cdTAwM2Vncm91cCk7XG4mIzQzO1x0XHRrdm1fcHJfdW5pbXBsKFwmIzM0OyVzOiB1bmtub3duIGdyb3VwICglZClcXG5cJiMzNDssIF9fZnVuY19fLCBhdHRyLVx1MDAzZWdyb3VwKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gfVxuQEAgLTM5OSwxMyAmIzQzOzM5NCwxMyBAQCBzdGF0aWMgaW50IGt2bV9pcGlfY3JlYXRlKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsIHUzMiB0eXBlKVxuIFx0c3RydWN0IGxvb25nYXJjaF9pcGkgKnM7XG4gXG4gXHRpZiAoIWRldikge1xuLVx0XHRrdm1fZXJyKFwmIzM0OyVzOiBrdm1fZGV2aWNlIHB0ciBpcyBpbnZhbGlkIVxcblwmIzM0OywgX19mdW5jX18pO1xuJiM0MztcdFx0a3ZtX3ByX3VuaW1wbChcJiMzNDslczoga3ZtX2RldmljZSBwdHIgaXMgaW52YWxpZCFcXG5cJiMzNDssIF9fZnVuY19fKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4gXHRrdm0gPSBkZXYtXHUwMDNla3ZtO1xuIFx0aWYgKGt2bS1cdTAwM2VhcmNoLmlwaSkge1xuLVx0XHRrdm1fZXJyKFwmIzM0OyVzOiBMb29uZ0FyY2ggSVBJIGhhcyBhbHJlYWR5IGJlZW4gY3JlYXRlZCFcXG5cJiMzNDssIF9fZnVuY19fKTtcbiYjNDM7XHRcdGt2bV9wcl91bmltcGwoXCYjMzQ7JXM6IExvb25nQXJjaCBJUEkgaGFzIGFscmVhZHkgYmVlbiBjcmVhdGVkIVxcblwmIzM0OywgX19mdW5jX18pO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbkBAIC00MjUsNyAmIzQzOzQyMCw3IEBAIHN0YXRpYyBpbnQga3ZtX2lwaV9jcmVhdGUoc3RydWN0IGt2bV9kZXZpY2UgKmRldiwgdTMyIHR5cGUpXG4gXHRyZXQgPSBrdm1faW9fYnVzX3JlZ2lzdGVyX2Rldihrdm0sIEtWTV9JT0NTUl9CVVMsIElPQ1NSX0lQSV9CQVNFLCBJT0NTUl9JUElfU0laRSwgZGV2aWNlKTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tXHRcdGt2bV9lcnIoXCYjMzQ7JXM6IEluaXRpYWxpemUgSU9DU1IgZGV2IGZhaWxlZCwgcmV0ID0gJWRcXG5cJiMzNDssIF9fZnVuY19fLCByZXQpO1xuJiM0MztcdFx0a3ZtX3ByX3VuaW1wbChcJiMzNDslczogSW5pdGlhbGl6ZSBJT0NTUiBkZXYgZmFpbGVkLCByZXQgPSAlZFxcblwmIzM0OywgX19mdW5jX18sIHJldCk7XG4gXHRcdGdvdG8gZXJyO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL3BjaF9waWMuYyBiL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL3BjaF9waWMuY1xuaW5kZXggMTc1YTYzMGFjZWI0MTYuLmU3Yjc3NzA1YzUxNmFjIDEwMDY0NFxuLS0tIGEvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvcGNoX3BpYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9wY2hfcGljLmNcbkBAIC0xNTEsMTIgJiM0MzsxNTEsMTIgQEAgc3RhdGljIGludCBrdm1fcGNoX3BpY19yZWFkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdHN0cnVjdCBsb29uZ2FyY2hfcGNoX3BpYyAqcyA9IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gucGNoX3BpYztcbiBcbiBcdGlmICghcykge1xuLVx0XHRrdm1fZXJyKFwmIzM0OyVzOiBwY2ggcGljIGlycWNoaXAgbm90IHZhbGlkIVxcblwmIzM0OywgX19mdW5jX18pO1xuJiM0MztcdFx0a3ZtX3ByX3VuaW1wbChcJiMzNDslczogcGNoIHBpYyBpcnFjaGlwIG5vdCB2YWxpZCFcXG5cJiMzNDssIF9fZnVuY19fKTtcbiBcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbiBcdGlmIChhZGRyIFx1MDAyNiAobGVuIC0gMSkpIHtcbi1cdFx0a3ZtX2VycihcJiMzNDslczogcGNoIHBpYyBub3QgYWxpZ25lZCBhZGRyICVsbHggbGVuICVkXFxuXCYjMzQ7LCBfX2Z1bmNfXywgYWRkciwgbGVuKTtcbiYjNDM7XHRcdGt2bV9wcl91bmltcGwoXCYjMzQ7JXM6IHBjaCBwaWMgbm90IGFsaWduZWQgYWRkciAlbGx4IGxlbiAlZFxcblwmIzM0OywgX19mdW5jX18sIGFkZHIsIGxlbik7XG4gXHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXG5AQCAtMjUwLDEyICYjNDM7MjUwLDEyIEBAIHN0YXRpYyBpbnQga3ZtX3BjaF9waWNfd3JpdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0c3RydWN0IGxvb25nYXJjaF9wY2hfcGljICpzID0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5wY2hfcGljO1xuIFxuIFx0aWYgKCFzKSB7XG4tXHRcdGt2bV9lcnIoXCYjMzQ7JXM6IHBjaCBwaWMgaXJxY2hpcCBub3QgdmFsaWQhXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4mIzQzO1x0XHRrdm1fcHJfdW5pbXBsKFwmIzM0OyVzOiBwY2ggcGljIGlycWNoaXAgbm90IHZhbGlkIVxcblwmIzM0OywgX19mdW5jX18pO1xuIFx0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFxuIFx0aWYgKGFkZHIgXHUwMDI2IChsZW4gLSAxKSkge1xuLVx0XHRrdm1fZXJyKFwmIzM0OyVzOiBwY2ggcGljIG5vdCBhbGlnbmVkIGFkZHIgJWxseCBsZW4gJWRcXG5cJiMzNDssIF9fZnVuY19fLCBhZGRyLCBsZW4pO1xuJiM0MztcdFx0a3ZtX3ByX3VuaW1wbChcJiMzNDslczogcGNoIHBpYyBub3QgYWxpZ25lZCBhZGRyICVsbHggbGVuICVkXFxuXCYjMzQ7LCBfX2Z1bmNfXywgYWRkciwgbGVuKTtcbiBcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbkBAIC0zOTAsMTMgJiM0MzszOTAsMTMgQEAgc3RhdGljIGludCBrdm1fcGNoX3BpY19zZXRfYXR0cihzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LFxuIFx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXG4gXHRcdFx0aWYgKCFkZXYtXHUwMDNla3ZtLVx1MDAzZWFyY2gucGNoX3BpYykge1xuLVx0XHRcdFx0a3ZtX2VycihcJiMzNDslczogcGxlYXNlIGNyZWF0ZSBwY2hfcGljIGlycWNoaXAgZmlyc3QhXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4mIzQzO1x0XHRcdFx0a3ZtX3ByX3VuaW1wbChcJiMzNDslczogcGNoX3BpYyBpcnFjaGlwIG5vdCBjcmVhdGVkXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4gXHRcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcdFx0XHR9XG4gXG4gXHRcdFx0cmV0dXJuIGt2bV9wY2hfcGljX2luaXQoZGV2LCBhZGRyKTtcbiBcdFx0ZGVmYXVsdDpcbi1cdFx0XHRrdm1fZXJyKFwmIzM0OyVzOiB1bmtub3duIGdyb3VwICglZCkgYXR0ciAoJWxsZClcXG5cJiMzNDssIF9fZnVuY19fLCBhdHRyLVx1MDAzZWdyb3VwLFxuJiM0MztcdFx0XHRrdm1fcHJfdW5pbXBsKFwmIzM0OyVzOiB1bmtub3duIGdyb3VwICglZCkgYXR0ciAoJWxsZClcXG5cJiMzNDssIF9fZnVuY19fLCBhdHRyLVx1MDAzZWdyb3VwLFxuIFx0XHRcdFx0XHRhdHRyLVx1MDAzZWF0dHIpO1xuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHR9XG5kaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuYyBiL2FyY2gvbG9vbmdhcmNoL2t2bS92Y3B1LmNcbmluZGV4IDIwYzIwN2Q4MGUzMWFlLi5mODFkYWRjNjJjOTg2ZSAxMDA2NDRcbi0tLSBhL2FyY2gvbG9vbmdhcmNoL2t2bS92Y3B1LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbG9vbmdhcmNoL2t2bS92Y3B1LmNcbkBAIC0xNDY1LDYgJiM0MzsxNDY1LDkgQEAgaW50IGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1faW50ZXJydXB0ICppcnEpXG4gXHRpZiAodmVjdG9yIFx1MDAzZT0gRVhDQ09ERV9JTlRfTlVNKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiYjNDM7XHRpZiAoa3ZtX2FyY2hfaXJxY2hpcF9pbl9rZXJuZWwodmNwdS1cdTAwM2Vrdm0pKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuIFx0aWYgKCFrdm1fZ3Vlc3RfaGFzX21zZ2ludChcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gpIFx1MDAyNlx1MDAyNiAodmVjdG9yID09IElOVF9BVkVDKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG5AQCAtMTQ3Myw3ICYjNDM7MTQ3Niw3IEBAIGludCBrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2ludGVycnVwdCAqaXJxKVxuIFx0ZWxzZSBpZiAoaW50ciBcdTAwM2MgMClcbiBcdFx0a3ZtX2RlcXVldWVfaXJxKHZjcHUsIC1pbnRyKTtcbiBcdGVsc2Uge1xuLVx0XHRrdm1fZXJyKFwmIzM0OyVzOiBpbnZhbGlkIGludGVycnVwdCBpb2N0bCAlZFxcblwmIzM0OywgX19mdW5jX18sIGlycS1cdTAwM2VpcnEpO1xuJiM0MztcdFx0a3ZtX3ByX3VuaW1wbChcJiMzNDslczogaW52YWxpZCBpbnRlcnJ1cHQgaW9jdGwgJWRcXG5cJiMzNDssIF9fZnVuY19fLCBpcnEtXHUwMDNlaXJxKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTA6MjA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3ZjcHVfaW9jdGxfaW50ZXJydXB0JiMzNDssCiAgICAmIzM0O2Rtc2ludGNfZGVsaXZlcl9tc2lfdG9fdmNwdSYjMzQ7LAogICAgJiMzNDtlaW9pbnRjX3VwZGF0ZV9pcnEmIzM0OywKICAgICYjMzQ7bG9vbmdhcmNoX2lwaV9yZWFkbCYjMzQ7LAogICAgJiMzNDtsb29uZ2FyY2hfaXBpX3dyaXRlbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBMb29uZ0FyY2ggS1ZNIGludGVycnVwdCBpbmplY3Rpb24gYW5kIElQSSBoYW5kbGluZywgcmVwbGFjaW5nIGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdCB3aXRoIGt2bV9xdWV1ZV9pcnEgYW5kIGZpeGluZyBhbGlnbm1lbnQgY2hlY2tzIGluIElQSSByZWFkL3dyaXRlIGhhbmRsZXJzLiBUaGVzZSBhcmUgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIGFuZCBNTUlPL0lPQ1NSIGV4aXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5MzJhMmFmNjFjMDA4ODRhOThkYjAyNjcxMDUwMDQ2OTQzNDZhMzFmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdWwgMTQgMTA6MjA6MTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9rdm0vZXhpdC5jIGIvYXJjaC9sb29uZ2FyY2gva3ZtL2V4aXQuYwppbmRleCA4NTcyYjYzNDc4YmI5OC4uNTkwNTgwZDAzMDNlYTkgMTAwNjQ0Ci0tLSBhL2FyY2gvbG9vbmdhcmNoL2t2bS9leGl0LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9sb29uZ2FyY2gva3ZtL2V4aXQuYwpAQCAtMjUyLDcgJiM0MzsyNTIsNyBAQCBpbnQga3ZtX2NvbXBsZXRlX2lvY3NyX3JlYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3J1biAqcnVuKQogCQkqZ3ByID0gKihzNjQgKilydW4tJmd0O2lvY3NyX2lvLmRhdGE7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWt2bV9lcnIoJiMzNDtCYWQgSU9DU1IgbGVuZ3RoOiAlZCwgYWRkciBpcyAweCVseFxuJiMzNDssCiYjNDM7CQlrdm1fcHJfdW5pbXBsKCYjMzQ7QmFkIElPQ1NSIGxlbmd0aDogJWQsIGFkZHIgaXMgMHglbHhcbiYjMzQ7LAogCQkJCXJ1bi0mZ3Q7aW9jc3JfaW8ubGVuLCB2Y3B1LSZndDthcmNoLmJhZHYpOwogCQllciA9IEVNVUxBVEVfRkFJTDsKIAkJYnJlYWs7CkBAIC0zMjYsNyAmIzQzOzMyNiw3IEBAIHN0YXRpYyBpbnQga3ZtX3RyYXBfaGFuZGxlX2dzcHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiAJLyogUm9sbGJhY2sgUEMgb25seSBpZiBlbXVsYXRpb24gd2FzIHVuc3VjY2Vzc2Z1bCAqLwogCWlmIChlciA9PSBFTVVMQVRFX0ZBSUwpIHsKLQkJa3ZtX2VycigmIzM0O1slI2x4XSVzOiB1bnN1cHBvcnRlZCBnc3ByIGluc3RydWN0aW9uIDB4JTA4eFxuJiMzNDssCiYjNDM7CQlrdm1fcHJfdW5pbXBsKCYjMzQ7WyUjbHhdJXM6IHVuc3VwcG9ydGVkIGdzcHIgaW5zdHJ1Y3Rpb24gMHglMDh4XG4mIzM0OywKIAkJCWN1cnJfcGMsIF9fZnVuY19fLCBpbnN0LndvcmQpOwogCiAJCWt2bV9hcmNoX3ZjcHVfZHVtcF9yZWdzKHZjcHUpOwpAQCAtNDkxLDcgJiM0Mzs0OTEsNyBAQCBpbnQga3ZtX2VtdV9tbWlvX3JlYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBsYXJjaF9pbnN0IGluc3QpCiAJCXJldHVybiBFTVVMQVRFX0RPX01NSU87CiAJfQogCi0Ja3ZtX2VycigmIzM0O1JlYWQgbm90IHN1cHBvcnRlZCBJbnN0PTB4JTA4eCBAJWx4IEJhZFZhZGRyOiUjbHhcbiYjMzQ7LAomIzQzOwlrdm1fcHJfdW5pbXBsKCYjMzQ7UmVhZCBub3Qgc3VwcG9ydGVkIEluc3Q9MHglMDh4IEAlbHggQmFkVmFkZHI6JSNseFxuJiMzNDssCiAJCQlpbnN0LndvcmQsIHZjcHUtJmd0O2FyY2gucGMsIHZjcHUtJmd0O2FyY2guYmFkdik7CiAJa3ZtX2FyY2hfdmNwdV9kdW1wX3JlZ3ModmNwdSk7CiAJdmNwdS0mZ3Q7bW1pb19uZWVkZWQgPSAwOwpAQCAtNTI5LDcgJiM0Mzs1MjksNyBAQCBpbnQga3ZtX2NvbXBsZXRlX21taW9fcmVhZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcnVuICpydW4pCiAJCSpncHIgPSAqKHM2NCAqKXJ1bi0mZ3Q7bW1pby5kYXRhOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlrdm1fZXJyKCYjMzQ7QmFkIE1NSU8gbGVuZ3RoOiAlZCwgYWRkciBpcyAweCVseFxuJiMzNDssCiYjNDM7CQlrdm1fcHJfdW5pbXBsKCYjMzQ7QmFkIE1NSU8gbGVuZ3RoOiAlZCwgYWRkciBpcyAweCVseFxuJiMzNDssCiAJCQkJcnVuLSZndDttbWlvLmxlbiwgdmNwdS0mZ3Q7YXJjaC5iYWR2KTsKIAkJZXIgPSBFTVVMQVRFX0ZBSUw7CiAJCWJyZWFrOwpAQCAtNjU2LDcgJiM0Mzs2NTYsNyBAQCBpbnQga3ZtX2VtdV9tbWlvX3dyaXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgbGFyY2hfaW5zdCBpbnN0KQogCX0KIAogCXZjcHUtJmd0O2FyY2gucGMgPSBjdXJyX3BjOwotCWt2bV9lcnIoJiMzNDtXcml0ZSBub3Qgc3VwcG9ydGVkIEluc3Q9MHglMDh4IEAlbHggQmFkVmFkZHI6JSNseFxuJiMzNDssCiYjNDM7CWt2bV9wcl91bmltcGwoJiMzNDtXcml0ZSBub3Qgc3VwcG9ydGVkIEluc3Q9MHglMDh4IEAlbHggQmFkVmFkZHI6JSNseFxuJiMzNDssCiAJCQlpbnN0LndvcmQsIHZjcHUtJmd0O2FyY2gucGMsIHZjcHUtJmd0O2FyY2guYmFkdik7CiAJa3ZtX2FyY2hfdmNwdV9kdW1wX3JlZ3ModmNwdSk7CiAJLyogUm9sbGJhY2sgUEMgaWYgZW11bGF0aW9uIHdhcyB1bnN1Y2Nlc3NmdWwgKi8KQEAgLTc0OCw4ICYjNDM7NzQ4LDggQEAgc3RhdGljIGludCBrdm1faGFuZGxlX2ZwdV9kaXNhYmxlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBlY29kZSkKIAkgKiB0cmVhdGVkIGFzIGEgcmVzZXJ2ZWQgaW5zdHJ1Y3Rpb24hCiAJICogSWYgRlBVIGFscmVhZHkgaW4gdXNlLCB3ZSBzaG91bGRuJiMzOTt0IGdldCB0aGlzIGF0IGFsbC4KIAkgKi8KLQlpZiAoV0FSTl9PTih2Y3B1LSZndDthcmNoLmF1eF9pbnVzZSAmYW1wOyBLVk1fTEFSQ0hfRlBVKSkgewotCQlrdm1fZXJyKCYjMzQ7JXMgaW50ZXJuYWwgZXJyb3JcbiYjMzQ7LCBfX2Z1bmNfXyk7CiYjNDM7CWlmICh2Y3B1LSZndDthcmNoLmF1eF9pbnVzZSAmYW1wOyBLVk1fTEFSQ0hfRlBVKSB7CiYjNDM7CQlrdm1fcHJfdW5pbXBsKCYjMzQ7JXMgaW50ZXJuYWwgZXJyb3JcbiYjMzQ7LCBfX2Z1bmNfXyk7CiAJCXJ1bi0mZ3Q7ZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9JTlRFUk5BTF9FUlJPUjsKIAkJcmV0dXJuIFJFU1VNRV9IT1NUOwogCX0KQEAgLTk0Myw3ICYjNDM7OTQzLDcgQEAgc3RhdGljIGludCBrdm1fZmF1bHRfbmkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgZWNvZGUpCiAJLyogRmV0Y2ggdGhlIGluc3RydWN0aW9uICovCiAJaW5zdCA9IHZjcHUtJmd0O2FyY2guYmFkaTsKIAliYWR2ID0gdmNwdS0mZ3Q7YXJjaC5iYWR2OwotCWt2bV9lcnIoJiMzNDtFQ29kZTogJWQgUEM9JSNseCBJbnN0PTB4JTA4eCBCYWRWYWRkcj0lI2x4IEVTVEFUPSUjbHhcbiYjMzQ7LAomIzQzOwlrdm1fcHJfdW5pbXBsKCYjMzQ7RUNvZGU6ICVkIFBDPSUjbHggSW5zdD0weCUwOHggQmFkVmFkZHI9JSNseCBFU1RBVD0lI2x4XG4mIzM0OywKIAkJCWVjb2RlLCB2Y3B1LSZndDthcmNoLnBjLCBpbnN0LCBiYWR2LCByZWFkX2djc3JfZXN0YXQoKSk7CiAJa3ZtX2FyY2hfdmNwdV9kdW1wX3JlZ3ModmNwdSk7CiAJa3ZtX3F1ZXVlX2V4Y2VwdGlvbih2Y3B1LCBFWENDT0RFX0lORSwgMCk7CmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9kbXNpbnRjLmMgYi9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9kbXNpbnRjLmMKaW5kZXggZGUyNTczNWNlMDM5NDYuLjFjNzE2ZTI0YzViMDIyIDEwMDY0NAotLS0gYS9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9kbXNpbnRjLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZG1zaW50Yy5jCkBAIC0yMSw2ICYjNDM7MjEsOCBAQCB2b2lkIGRtc2ludGNfaW5qZWN0X2lycShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJCW9sZCA9IGF0b21pYzY0X3JlYWQoJmFtcDsoZHMtJmd0O3ZlY3Rvcl9tYXBbaV0pKTsKIAkJaWYgKG9sZCkKIAkJCXZlY3RvcltpXSA9IGF0b21pYzY0X3hjaGcoJmFtcDsoZHMtJmd0O3ZlY3Rvcl9tYXBbaV0pLCAwKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQl2ZWN0b3JbaV0gPSAwOwogCX0KIAogCWlmICh2ZWN0b3JbMF0pIHsKQEAgLTQ3LDcgJiM0Mzs0OSw2IEBAIHZvaWQgZG1zaW50Y19pbmplY3RfaXJxKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIGludCBkbXNpbnRjX2RlbGl2ZXJfbXNpX3RvX3ZjcHUoc3RydWN0IGt2bSAqa3ZtLAogCQkJCXN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHZlY3RvciwgaW50IGxldmVsKQogewotCXN0cnVjdCBrdm1faW50ZXJydXB0IHZjcHVfaXJxOwogCXN0cnVjdCBkbXNpbnRjX3N0YXRlICpkcyA9ICZhbXA7dmNwdS0mZ3Q7YXJjaC5kbXNpbnRjX3N0YXRlOwogCiAJaWYgKCFsZXZlbCkKQEAgLTU3LDkgJiM0Mzs1OCwxMSBAQCBpbnQgZG1zaW50Y19kZWxpdmVyX21zaV90b192Y3B1KHN0cnVjdCBrdm0gKmt2bSwKIAlpZiAoIWRzKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXZjcHVfaXJxLmlycSA9IElOVF9BVkVDOwomIzQzOwlpZiAoIWt2bV9ndWVzdF9oYXNfbXNnaW50KCZhbXA7dmNwdS0mZ3Q7YXJjaCkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKIAlzZXRfYml0KHZlY3RvciwgKHVuc2lnbmVkIGxvbmcgKikmYW1wO2RzLSZndDt2ZWN0b3JfbWFwKTsKLQlrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHQodmNwdSwgJmFtcDt2Y3B1X2lycSk7CiYjNDM7CWt2bV9xdWV1ZV9pcnEodmNwdSwgSU5UX0FWRUMpOwogCWt2bV92Y3B1X2tpY2sodmNwdSk7CiAKIAlyZXR1cm4gMDsKQEAgLTExNCw3ICYjNDM7MTE3LDcgQEAgc3RhdGljIGludCBrdm1fZG1zaW50Y19jdHJsX2FjY2VzcyhzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LAogCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWt2bV9lcnIoJiMzNDslczogdW5rbm93biBkbXNpbnRjIHJlZ2lzdGVyLCBhZGRyID0gJWRcbiYjMzQ7LCBfX2Z1bmNfXywgYWRkcik7CiYjNDM7CQlrdm1fcHJfdW5pbXBsKCYjMzQ7JXM6IHVua25vd24gZG1zaW50YyByZWdpc3RlciwgYWRkciA9ICVkXG4mIzM0OywgX19mdW5jX18sIGFkZHIpOwogCQlyZXR1cm4gLUVOWElPOwogCX0KIApAQCAtMTI4LDcgJiM0MzsxMzEsNyBAQCBzdGF0aWMgaW50IGt2bV9kbXNpbnRjX3NldF9hdHRyKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsCiAJY2FzZSBLVk1fREVWX0xPT05HQVJDSF9ETVNJTlRDX0dSUF9DVFJMOgogCQlyZXR1cm4ga3ZtX2Rtc2ludGNfY3RybF9hY2Nlc3MoZGV2LCBhdHRyLCB0cnVlKTsKIAlkZWZhdWx0OgotCQlrdm1fZXJyKCYjMzQ7JXM6IHVua25vd24gZ3JvdXAgKCVkKVxuJiMzNDssIF9fZnVuY19fLCBhdHRyLSZndDtncm91cCk7CiYjNDM7CQlrdm1fcHJfdW5pbXBsKCYjMzQ7JXM6IHVua25vd24gZ3JvdXAgKCVkKVxuJiMzNDssIF9fZnVuY19fLCBhdHRyLSZndDtncm91cCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIH0KQEAgLTEzOSwxMyAmIzQzOzE0MiwxMyBAQCBzdGF0aWMgaW50IGt2bV9kbXNpbnRjX2NyZWF0ZShzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LCB1MzIgdHlwZSkKIAlzdHJ1Y3QgbG9vbmdhcmNoX2Rtc2ludGMgKnM7CiAKIAlpZiAoIWRldikgewotCQlrdm1fZXJyKCYjMzQ7JXM6IGt2bV9kZXZpY2UgcHRyIGlzIGludmFsaWQhXG4mIzM0OywgX19mdW5jX18pOwomIzQzOwkJa3ZtX3ByX3VuaW1wbCgmIzM0OyVzOiBrdm1fZGV2aWNlIHB0ciBpcyBpbnZhbGlkIVxuJiMzNDssIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJa3ZtID0gZGV2LSZndDtrdm07CiAJaWYgKGt2bS0mZ3Q7YXJjaC5kbXNpbnRjKSB7Ci0JCWt2bV9lcnIoJiMzNDslczogTG9vbmdBcmNoIERNU0lOVEMgaGFzIGFscmVhZHkgYmVlbiBjcmVhdGVkIVxuJiMzNDssIF9fZnVuY19fKTsKJiM0MzsJCWt2bV9wcl91bmltcGwoJiMzNDslczogTG9vbmdBcmNoIERNU0lOVEMgaGFzIGFscmVhZHkgYmVlbiBjcmVhdGVkIVxuJiMzNDssIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmMgYi9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmMKaW5kZXggMmIxNDQ4NWQxNGE3MDguLmUwNGFhZGJkNjhkYjk2IDEwMDY0NAotLS0gYS9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jCkBAIC0xNyw3ICYjNDM7MTcsOCBAQCBzdGF0aWMgdm9pZCBlaW9pbnRjX3NldF9zd19jb3JlaXNyKHN0cnVjdCBsb29uZ2FyY2hfZWlvaW50YyAqcykKIAkJaWYgKCEocy0mZ3Q7c3RhdHVzICZhbXA7IEJJVChFSU9JTlRDX0VOQUJMRV9JTlRfRU5DT0RFKSkpIHsKIAkJCWlwbnVtID0gY291bnRfdHJhaWxpbmdfemVyb3MoaXBudW0pOwogCQkJaXBudW0gPSBpcG51bSAmbHQ7IDQgPyBpcG51bSA6IDA7Ci0JCX0KJiM0MzsJCX0gZWxzZSBpZiAoaXBudW0gJmd0Oz0gTE9PTkdTT05fSVBfTlVNKQomIzQzOwkJCWlwbnVtID0gMDsKIAogCQljcHVpZCA9ICgodTggKilzLSZndDtjb3JlbWFwKVtpcnFdOwogCQl2Y3B1ID0ga3ZtX2dldF92Y3B1X2J5X2NwdWlkKHMtJmd0O2t2bSwgY3B1aWQpOwpAQCAtMzYsMTggJiM0MzszNywxOCBAQCBzdGF0aWMgdm9pZCBlaW9pbnRjX3VwZGF0ZV9pcnEoc3RydWN0IGxvb25nYXJjaF9laW9pbnRjICpzLCBpbnQgaXJxLCBpbnQgbGV2ZWwpCiB7CiAJaW50IGlwbnVtLCBjcHUsIGZvdW5kOwogCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKLQlzdHJ1Y3Qga3ZtX2ludGVycnVwdCB2Y3B1X2lycTsKIAogCWlwbnVtID0gKHMtJmd0O2lwbWFwICZndDsmZ3Q7IChpcnEgLyAzMiAqIDgpKSAmYW1wOyAweGZmOwogCWlmICghKHMtJmd0O3N0YXR1cyAmYW1wOyBCSVQoRUlPSU5UQ19FTkFCTEVfSU5UX0VOQ09ERSkpKSB7CiAJCWlwbnVtID0gY291bnRfdHJhaWxpbmdfemVyb3MoaXBudW0pOwogCQlpcG51bSA9IGlwbnVtICZsdDsgNCA/IGlwbnVtIDogMDsKLQl9CiYjNDM7CX0gZWxzZSBpZiAoaXBudW0gJmd0Oz0gTE9PTkdTT05fSVBfTlVNKQomIzQzOwkJaXBudW0gPSAwOwogCiAJY3B1ID0gcy0mZ3Q7c3dfY29yZW1hcFtpcnFdOwogCXZjcHUgPSBrdm1fZ2V0X3ZjcHVfYnlfaWQocy0mZ3Q7a3ZtLCBjcHUpOwogCWlmICh1bmxpa2VseSh2Y3B1ID09IE5VTEwpKSB7Ci0JCWt2bV9lcnIoJiMzNDslczogaW52YWxpZCB0YXJnZXQgY3B1OiAlZFxuJiMzNDssIF9fZnVuY19fLCBjcHUpOwomIzQzOwkJa3ZtX3ByX3VuaW1wbCgmIzM0OyVzOiBpbnZhbGlkIHRhcmdldCBjcHU6ICVkXG4mIzM0OywgX19mdW5jX18sIGNwdSk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTY3LDggJiM0Mzs2OCwxMSBAQCBzdGF0aWMgdm9pZCBlaW9pbnRjX3VwZGF0ZV9pcnEoc3RydWN0IGxvb25nYXJjaF9laW9pbnRjICpzLCBpbnQgaXJxLCBpbnQgbGV2ZWwpCiAJaWYgKGZvdW5kICZsdDsgRUlPSU5UQ19JUlFTKQogCQlyZXR1cm47IC8qIG90aGVyIGlycSBpcyBoYW5kbGluZywgbmVlZG4mIzM5O3QgdXBkYXRlIHBhcmVudCBpcnEgKi8KIAotCXZjcHVfaXJxLmlycSA9IGxldmVsID8gKElOVF9IV0kwICYjNDM7IGlwbnVtKSA6IC0oSU5UX0hXSTAgJiM0MzsgaXBudW0pOwotCWt2bV92Y3B1X2lvY3RsX2ludGVycnVwdCh2Y3B1LCAmYW1wO3ZjcHVfaXJxKTsKJiM0MzsJaWYgKGxldmVsKQomIzQzOwkJa3ZtX3F1ZXVlX2lycSh2Y3B1LCBJTlRfSFdJMCAmIzQzOyBpcG51bSk7CiYjNDM7CWVsc2UKJiM0MzsJCWt2bV9kZXF1ZXVlX2lycSh2Y3B1LCBJTlRfSFdJMCAmIzQzOyBpcG51bSk7CiYjNDM7CWt2bV92Y3B1X2tpY2sodmNwdSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBlaW9pbnRjX3VwZGF0ZV9zd19jb3JlbWFwKHN0cnVjdCBsb29uZ2FyY2hfZWlvaW50YyAqcywKQEAgLTE2NSwxMiAmIzQzOzE2OSwxMiBAQCBzdGF0aWMgaW50IGt2bV9laW9pbnRjX3JlYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCXN0cnVjdCBsb29uZ2FyY2hfZWlvaW50YyAqZWlvaW50YyA9IHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5laW9pbnRjOwogCiAJaWYgKCFlaW9pbnRjKSB7Ci0JCWt2bV9lcnIoJiMzNDslczogZWlvaW50YyBpcnFjaGlwIG5vdCB2YWxpZCFcbiYjMzQ7LCBfX2Z1bmNfXyk7CiYjNDM7CQlrdm1fcHJfdW5pbXBsKCYjMzQ7JXM6IGVpb2ludGMgaXJxY2hpcCBub3QgdmFsaWQhXG4mIzM0OywgX19mdW5jX18pOwogCQlyZXR1cm4gMDsKIAl9CiAKIAlpZiAoYWRkciAmYW1wOyAobGVuIC0gMSkpIHsKLQkJa3ZtX2VycigmIzM0OyVzOiBlaW9pbnRjIG5vdCBhbGlnbmVkIGFkZHIgJWxseCBsZW4gJWRcbiYjMzQ7LCBfX2Z1bmNfXywgYWRkciwgbGVuKTsKJiM0MzsJCWt2bV9wcl91bmltcGwoJiMzNDslczogZWlvaW50YyBub3QgYWxpZ25lZCBhZGRyICVsbHggbGVuICVkXG4mIzM0OywgX19mdW5jX18sIGFkZHIsIGxlbik7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMjk3LDEyICYjNDM7MzAxLDEyIEBAIHN0YXRpYyBpbnQga3ZtX2Vpb2ludGNfd3JpdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCXN0cnVjdCBsb29uZ2FyY2hfZWlvaW50YyAqZWlvaW50YyA9IHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5laW9pbnRjOwogCiAJaWYgKCFlaW9pbnRjKSB7Ci0JCWt2bV9lcnIoJiMzNDslczogZWlvaW50YyBpcnFjaGlwIG5vdCB2YWxpZCFcbiYjMzQ7LCBfX2Z1bmNfXyk7CiYjNDM7CQlrdm1fcHJfdW5pbXBsKCYjMzQ7JXM6IGVpb2ludGMgaXJxY2hpcCBub3QgdmFsaWQhXG4mIzM0OywgX19mdW5jX18pOwogCQlyZXR1cm4gMDsKIAl9CiAKIAlpZiAoYWRkciAmYW1wOyAobGVuIC0gMSkpIHsKLQkJa3ZtX2VycigmIzM0OyVzOiBlaW9pbnRjIG5vdCBhbGlnbmVkIGFkZHIgJWxseCBsZW4gJWRcbiYjMzQ7LCBfX2Z1bmNfXywgYWRkciwgbGVuKTsKJiM0MzsJCWt2bV9wcl91bmltcGwoJiMzNDslczogZWlvaW50YyBub3QgYWxpZ25lZCBhZGRyICVsbHggbGVuICVkXG4mIzM0OywgX19mdW5jX18sIGFkZHIsIGxlbik7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMzQ1LDcgJiM0MzszNDksNyBAQCBzdGF0aWMgaW50IGt2bV9laW9pbnRjX3ZpcnRfcmVhZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJc3RydWN0IGxvb25nYXJjaF9laW9pbnRjICplaW9pbnRjID0gdmNwdS0mZ3Q7a3ZtLSZndDthcmNoLmVpb2ludGM7CiAKIAlpZiAoIWVpb2ludGMpIHsKLQkJa3ZtX2VycigmIzM0OyVzOiBlaW9pbnRjIGlycWNoaXAgbm90IHZhbGlkIVxuJiMzNDssIF9fZnVuY19fKTsKJiM0MzsJCWt2bV9wcl91bmltcGwoJiMzNDslczogZWlvaW50YyBpcnFjaGlwIG5vdCB2YWxpZCFcbiYjMzQ7LCBfX2Z1bmNfXyk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMzc1LDcgJiM0MzszNzksNyBAQCBzdGF0aWMgaW50IGt2bV9laW9pbnRjX3ZpcnRfd3JpdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCXN0cnVjdCBsb29uZ2FyY2hfZWlvaW50YyAqZWlvaW50YyA9IHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5laW9pbnRjOwogCiAJaWYgKCFlaW9pbnRjKSB7Ci0JCWt2bV9lcnIoJiMzNDslczogZWlvaW50YyBpcnFjaGlwIG5vdCB2YWxpZCFcbiYjMzQ7LCBfX2Z1bmNfXyk7CiYjNDM7CQlrdm1fcHJfdW5pbXBsKCYjMzQ7JXM6IGVpb2ludGMgaXJxY2hpcCBub3QgdmFsaWQhXG4mIzM0OywgX19mdW5jX18pOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTUwMiw3ICYjNDM7NTA2LDcgQEAgc3RhdGljIGludCBrdm1fZWlvaW50Y19yZWdzX2FjY2VzcyhzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LAogCQlwID0gKHZvaWQgKilzLSZndDtjb3JlbWFwICYjNDM7IG9mZnNldCAqIDQ7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWt2bV9lcnIoJiMzNDslczogdW5rbm93biBlaW9pbnRjIHJlZ2lzdGVyLCBhZGRyID0gJWRcbiYjMzQ7LCBfX2Z1bmNfXywgYWRkcik7CiYjNDM7CQlrdm1fcHJfdW5pbXBsKCYjMzQ7JXM6IHVua25vd24gZWlvaW50YyByZWdpc3RlciwgYWRkciA9ICVkXG4mIzM0OywgX19mdW5jX18sIGFkZHIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTU0Niw3ICYjNDM7NTUwLDcgQEAgc3RhdGljIGludCBrdm1fZWlvaW50Y19zd19zdGF0dXNfYWNjZXNzKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsCiAJCXAgPSAmYW1wO3MtJmd0O3N0YXR1czsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJa3ZtX2VycigmIzM0OyVzOiB1bmtub3duIGVpb2ludGMgcmVnaXN0ZXIsIGFkZHIgPSAlZFxuJiMzNDssIF9fZnVuY19fLCBhZGRyKTsKJiM0MzsJCWt2bV9wcl91bmltcGwoJiMzNDslczogdW5rbm93biBlaW9pbnRjIHJlZ2lzdGVyLCBhZGRyID0gJWRcbiYjMzQ7LCBfX2Z1bmNfXywgYWRkcik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3MtJmd0O2xvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jIGIvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmMKaW5kZXggNGZhMDg5N2Q3YmRiMDAuLmYzMGQwZDEzZjU0ZDA1IDEwMDY0NAotLS0gYS9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuYwpAQCAtMTAsMTYgJiM0MzsxMCwxNSBAQAogc3RhdGljIHZvaWQgaXBpX3NldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVpbnQzMl90IGRhdGEpCiB7CiAJdWludDMyX3Qgc3RhdHVzOwotCXN0cnVjdCBrdm1faW50ZXJydXB0IGlycTsKIAogCXNwaW5fbG9jaygmYW1wO3ZjcHUtJmd0O2FyY2guaXBpX3N0YXRlLmxvY2spOwogCXN0YXR1cyA9IHZjcHUtJmd0O2FyY2guaXBpX3N0YXRlLnN0YXR1czsKIAl2Y3B1LSZndDthcmNoLmlwaV9zdGF0ZS5zdGF0dXMgfD0gZGF0YTsKLQlzcGluX3VubG9jaygmYW1wO3ZjcHUtJmd0O2FyY2guaXBpX3N0YXRlLmxvY2spOwogCWlmICgoc3RhdHVzID09IDApICZhbXA7JmFtcDsgZGF0YSkgewotCQlpcnEuaXJxID0gTEFSQ0hfSU5UX0lQSTsKLQkJa3ZtX3ZjcHVfaW9jdGxfaW50ZXJydXB0KHZjcHUsICZhbXA7aXJxKTsKJiM0MzsJCWt2bV9xdWV1ZV9pcnEodmNwdSwgTEFSQ0hfSU5UX0lQSSk7CiYjNDM7CQlrdm1fdmNwdV9raWNrKHZjcHUpOwogCX0KJiM0MzsJc3Bpbl91bmxvY2soJmFtcDt2Y3B1LSZndDthcmNoLmlwaV9zdGF0ZS5sb2NrKTsKIH0KIAogc3RhdGljIHZvaWQgaXBpX3NlbmQoc3RydWN0IGt2bSAqa3ZtLCB1aW50NjRfdCBkYXRhKQpAQCAtMzAsNyAmIzQzOzI5LDcgQEAgc3RhdGljIHZvaWQgaXBpX3NlbmQoc3RydWN0IGt2bSAqa3ZtLCB1aW50NjRfdCBkYXRhKQogCWNwdSA9ICgoZGF0YSAmYW1wOyAweGZmZmZmZmZmKSAmZ3Q7Jmd0OyAxNikgJmFtcDsgMHgzZmY7CiAJdmNwdSA9IGt2bV9nZXRfdmNwdV9ieV9jcHVpZChrdm0sIGNwdSk7CiAJaWYgKHVubGlrZWx5KHZjcHUgPT0gTlVMTCkpIHsKLQkJa3ZtX2VycigmIzM0OyVzOiBpbnZhbGlkIHRhcmdldCBjcHU6ICVkXG4mIzM0OywgX19mdW5jX18sIGNwdSk7CiYjNDM7CQlrdm1fcHJfdW5pbXBsKCYjMzQ7JXM6IGludmFsaWQgdGFyZ2V0IGNwdTogJWRcbiYjMzQ7LCBfX2Z1bmNfXywgY3B1KTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNDAsMTYgJiM0MzszOSwxNSBAQCBzdGF0aWMgdm9pZCBpcGlfc2VuZChzdHJ1Y3Qga3ZtICprdm0sIHVpbnQ2NF90IGRhdGEpCiBzdGF0aWMgdm9pZCBpcGlfY2xlYXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1aW50NjRfdCBkYXRhKQogewogCXVpbnQzMl90IHN0YXR1czsKLQlzdHJ1Y3Qga3ZtX2ludGVycnVwdCBpcnE7CiAKIAlzcGluX2xvY2soJmFtcDt2Y3B1LSZndDthcmNoLmlwaV9zdGF0ZS5sb2NrKTsKIAl2Y3B1LSZndDthcmNoLmlwaV9zdGF0ZS5zdGF0dXMgJmFtcDs9IH5kYXRhOwogCXN0YXR1cyA9IHZjcHUtJmd0O2FyY2guaXBpX3N0YXRlLnN0YXR1czsKLQlzcGluX3VubG9jaygmYW1wO3ZjcHUtJmd0O2FyY2guaXBpX3N0YXRlLmxvY2spOwogCWlmIChzdGF0dXMgPT0gMCkgewotCQlpcnEuaXJxID0gLUxBUkNIX0lOVF9JUEk7Ci0JCWt2bV92Y3B1X2lvY3RsX2ludGVycnVwdCh2Y3B1LCAmYW1wO2lycSk7CiYjNDM7CQlrdm1fZGVxdWV1ZV9pcnEodmNwdSwgTEFSQ0hfSU5UX0lQSSk7CiYjNDM7CQlrdm1fdmNwdV9raWNrKHZjcHUpOwogCX0KJiM0MzsJc3Bpbl91bmxvY2soJmFtcDt2Y3B1LSZndDthcmNoLmlwaV9zdGF0ZS5sb2NrKTsKIH0KIAogc3RhdGljIHVpbnQ2NF90IHJlYWRfbWFpbGJveChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBvZmZzZXQsIGludCBsZW4pCkBAIC02NywxMSAmIzQzOzY1LDggQEAgc3RhdGljIHVpbnQ2NF90IHJlYWRfbWFpbGJveChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBvZmZzZXQsIGludCBsZW4pCiAJCXJldHVybiBkYXRhICZhbXA7IDB4ZmZmZjsKIAljYXNlIDQ6CiAJCXJldHVybiBkYXRhICZhbXA7IDB4ZmZmZmZmZmY7Ci0JY2FzZSA4OgotCQlyZXR1cm4gZGF0YTsKIAlkZWZhdWx0OgotCQlrdm1fZXJyKCYjMzQ7JXM6IHVua25vd24gZGF0YSBsZW46ICVkXG4mIzM0OywgX19mdW5jX18sIGxlbik7Ci0JCXJldHVybiAwOwomIzQzOwkJcmV0dXJuIGRhdGE7CiAJfQogfQogCkBAIC05MiwxMSAmIzQzOzg3LDkgQEAgc3RhdGljIHZvaWQgd3JpdGVfbWFpbGJveChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBvZmZzZXQsIHVpbnQ2NF90IGRhdGEsIGludAogCWNhc2UgNDoKIAkJKih1bnNpZ25lZCBpbnQgKilwYnVmID0gKHVuc2lnbmVkIGludClkYXRhOwogCQlicmVhazsKLQljYXNlIDg6CiYjNDM7CWRlZmF1bHQ6CiAJCSoodW5zaWduZWQgbG9uZyAqKXBidWYgPSAodW5zaWduZWQgbG9uZylkYXRhOwogCQlicmVhazsKLQlkZWZhdWx0OgotCQlrdm1fZXJyKCYjMzQ7JXM6IHVua25vd24gZGF0YSBsZW46ICVkXG4mIzM0OywgX19mdW5jX18sIGxlbik7CiAJfQogCXNwaW5fdW5sb2NrKCZhbXA7dmNwdS0mZ3Q7YXJjaC5pcGlfc3RhdGUubG9jayk7CiB9CkBAIC0xMTAsNyAmIzQzOzEwMyw3IEBAIHN0YXRpYyBpbnQgbWFpbF9zZW5kKHN0cnVjdCBrdm0gKmt2bSwgdWludDY0X3QgZGF0YSkKIAljcHUgPSAoKGRhdGEgJmFtcDsgMHhmZmZmZmZmZikgJmd0OyZndDsgMTYpICZhbXA7IDB4M2ZmOwogCXZjcHUgPSBrdm1fZ2V0X3ZjcHVfYnlfY3B1aWQoa3ZtLCBjcHUpOwogCWlmICh1bmxpa2VseSh2Y3B1ID09IE5VTEwpKSB7Ci0JCWt2bV9lcnIoJiMzNDslczogaW52YWxpZCB0YXJnZXQgY3B1OiAlZFxuJiMzNDssIF9fZnVuY19fLCBjcHUpOwomIzQzOwkJa3ZtX3ByX3VuaW1wbCgmIzM0OyVzOiBpbnZhbGlkIHRhcmdldCBjcHU6ICVkXG4mIzM0OywgX19mdW5jX18sIGNwdSk7CiAJCXJldHVybiAwOwogCX0KIAltYWlsYm94ID0gKChkYXRhICZhbXA7IDB4ZmZmZmZmZmYpICZndDsmZ3Q7IDIpICZhbXA7IDB4NzsKQEAgLTE0NCw3ICYjNDM7MTM3LDcgQEAgc3RhdGljIGludCBzZW5kX2lwaV9kYXRhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgYWRkciwgdWludDY0X3QgZGF0YSkKIAkJcmV0ID0ga3ZtX2lvX2J1c19yZWFkKHZjcHUsIEtWTV9JT0NTUl9CVVMsIGFkZHIsIDQsICZhbXA7dmFsKTsKIAkJc3JjdV9yZWFkX3VubG9jaygmYW1wO3ZjcHUtJmd0O2t2bS0mZ3Q7c3JjdSwgaWR4KTsKIAkJaWYgKHVubGlrZWx5KHJldCkpIHsKLQkJCWt2bV9lcnIoJiMzNDslczogOiByZWFkIGRhdGEgZnJvbSBhZGRyICVsbHggZmFpbGVkXG4mIzM0OywgX19mdW5jX18sIGFkZHIpOwomIzQzOwkJCWt2bV9wcl91bmltcGwoJiMzNDslczogOiByZWFkIGRhdGEgZnJvbSBhZGRyICVsbHggZmFpbGVkXG4mIzM0OywgX19mdW5jX18sIGFkZHIpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAkJLyogQ29uc3RydWN0IHRoZSBtYXNrIGJ5IHNjYW5uaW5nIHRoZSBiaXQgMjctMzAgKi8KQEAgLTE2MCw3ICYjNDM7MTUzLDcgQEAgc3RhdGljIGludCBzZW5kX2lwaV9kYXRhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgYWRkciwgdWludDY0X3QgZGF0YSkKIAlyZXQgPSBrdm1faW9fYnVzX3dyaXRlKHZjcHUsIEtWTV9JT0NTUl9CVVMsIGFkZHIsIDQsICZhbXA7dmFsKTsKIAlzcmN1X3JlYWRfdW5sb2NrKCZhbXA7dmNwdS0mZ3Q7a3ZtLSZndDtzcmN1LCBpZHgpOwogCWlmICh1bmxpa2VseShyZXQpKQotCQlrdm1fZXJyKCYjMzQ7JXM6IDogd3JpdGUgZGF0YSB0byBhZGRyICVsbHggZmFpbGVkXG4mIzM0OywgX19mdW5jX18sIGFkZHIpOwomIzQzOwkJa3ZtX3ByX3VuaW1wbCgmIzM0OyVzOiA6IHdyaXRlIGRhdGEgdG8gYWRkciAlbGx4IGZhaWxlZFxuJiMzNDssIF9fZnVuY19fLCBhZGRyKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTczLDcgJiM0MzsxNjYsNyBAQCBzdGF0aWMgaW50IGFueV9zZW5kKHN0cnVjdCBrdm0gKmt2bSwgdWludDY0X3QgZGF0YSkKIAljcHUgPSAoKGRhdGEgJmFtcDsgMHhmZmZmZmZmZikgJmd0OyZndDsgMTYpICZhbXA7IDB4M2ZmOwogCXZjcHUgPSBrdm1fZ2V0X3ZjcHVfYnlfY3B1aWQoa3ZtLCBjcHUpOwogCWlmICh1bmxpa2VseSh2Y3B1ID09IE5VTEwpKSB7Ci0JCWt2bV9lcnIoJiMzNDslczogaW52YWxpZCB0YXJnZXQgY3B1OiAlZFxuJiMzNDssIF9fZnVuY19fLCBjcHUpOwomIzQzOwkJa3ZtX3ByX3VuaW1wbCgmIzM0OyVzOiBpbnZhbGlkIHRhcmdldCBjcHU6ICVkXG4mIzM0OywgX19mdW5jX18sIGNwdSk7CiAJCXJldHVybiAwOwogCX0KIAlvZmZzZXQgPSBkYXRhICZhbXA7IDB4ZmZmZjsKQEAgLTE4Niw5ICYjNDM7MTc5LDEzIEBAIHN0YXRpYyBpbnQgbG9vbmdhcmNoX2lwaV9yZWFkbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGFkZHIsIGludCBsZW4sIHZvaWQKIAl1aW50MzJfdCBvZmZzZXQ7CiAJdWludDY0X3QgcmVzID0gMDsKIAotCW9mZnNldCA9ICh1aW50MzJfdCkoYWRkciAmYW1wOyAweDFmZik7Ci0JV0FSTl9PTl9PTkNFKG9mZnNldCAmYW1wOyAobGVuIC0gMSkpOwomIzQzOwlpZiAoYWRkciAmYW1wOyAobGVuIC0gMSkpIHsKJiM0MzsJCSoodWludDY0X3QgKil2YWwgPSByZXM7CiYjNDM7CQlrdm1fcHJfdW5pbXBsKCYjMzQ7JXM6IGlwaSBub3QgYWxpZ25lZCBhZGRyICVsbHggbGVuICVkXG4mIzM0OywgX19mdW5jX18sIGFkZHIsIGxlbik7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQogCiYjNDM7CW9mZnNldCA9IGFkZHIgLSBJT0NTUl9JUElfQkFTRTsKIAlzd2l0Y2ggKG9mZnNldCkgewogCWNhc2UgSU9DU1JfSVBJX1NUQVRVUzoKIAkJc3Bpbl9sb2NrKCZhbXA7dmNwdS0mZ3Q7YXJjaC5pcGlfc3RhdGUubG9jayk7CkBAIC0yMDQsMTUgJiM0MzsyMDEsMTAgQEAgc3RhdGljIGludCBsb29uZ2FyY2hfaXBpX3JlYWRsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgYWRkciwgaW50IGxlbiwgdm9pZAogCWNhc2UgSU9DU1JfSVBJX0NMRUFSOgogCQlicmVhazsKIAljYXNlIElPQ1NSX0lQSV9CVUZfMjAgLi4uIElPQ1NSX0lQSV9CVUZfMzggJiM0MzsgNzoKLQkJaWYgKG9mZnNldCAmIzQzOyBsZW4gJmd0OyBJT0NTUl9JUElfQlVGXzM4ICYjNDM7IDgpIHsKLQkJCWt2bV9lcnIoJiMzNDslczogaW52YWxpZCBvZmZzZXQgb3IgbGVuOiBvZmZzZXQgPSAlZCwgbGVuID0gJWRcbiYjMzQ7LAotCQkJCV9fZnVuY19fLCBvZmZzZXQsIGxlbik7Ci0JCQlicmVhazsKLQkJfQogCQlyZXMgPSByZWFkX21haWxib3godmNwdSwgb2Zmc2V0LCBsZW4pOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlrdm1fZXJyKCYjMzQ7JXM6IHVua25vd24gYWRkcjogJWxseFxuJiMzNDssIF9fZnVuY19fLCBhZGRyKTsKJiM0MzsJCWt2bV9wcl91bmltcGwoJiMzNDslczogdW5rbm93biBhZGRyOiAlbGx4XG4mIzM0OywgX19mdW5jX18sIGFkZHIpOwogCQlicmVhazsKIAl9CiAJKih1aW50NjRfdCAqKXZhbCA9IHJlczsKQEAgLTIyNyw5ICYjNDM7MjE5LDEyIEBAIHN0YXRpYyBpbnQgbG9vbmdhcmNoX2lwaV93cml0ZWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBhZGRyLCBpbnQgbGVuLCBjb25zCiAKIAlkYXRhID0gKih1aW50NjRfdCAqKXZhbDsKIAotCW9mZnNldCA9ICh1aW50MzJfdCkoYWRkciAmYW1wOyAweDFmZik7Ci0JV0FSTl9PTl9PTkNFKG9mZnNldCAmYW1wOyAobGVuIC0gMSkpOwomIzQzOwlpZiAoYWRkciAmYW1wOyAobGVuIC0gMSkpIHsKJiM0MzsJCWt2bV9wcl91bmltcGwoJiMzNDslczogaXBpIG5vdCBhbGlnbmVkIGFkZHIgJWxseCBsZW4gJWRcbiYjMzQ7LCBfX2Z1bmNfXywgYWRkciwgbGVuKTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiAKJiM0MzsJb2Zmc2V0ID0gYWRkciAtIElPQ1NSX0lQSV9CQVNFOwogCXN3aXRjaCAob2Zmc2V0KSB7CiAJY2FzZSBJT0NTUl9JUElfU1RBVFVTOgogCQlicmVhazsKQEAgLTI0Nyw3ICYjNDM7MjQyLDcgQEAgc3RhdGljIGludCBsb29uZ2FyY2hfaXBpX3dyaXRlbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGFkZHIsIGludCBsZW4sIGNvbnMKIAkJYnJlYWs7CiAJY2FzZSBJT0NTUl9JUElfQlVGXzIwIC4uLiBJT0NTUl9JUElfQlVGXzM4ICYjNDM7IDc6CiAJCWlmIChvZmZzZXQgJiM0MzsgbGVuICZndDsgSU9DU1JfSVBJX0JVRl8zOCAmIzQzOyA4KSB7Ci0JCQlrdm1fZXJyKCYjMzQ7JXM6IGludmFsaWQgb2Zmc2V0IG9yIGxlbjogb2Zmc2V0ID0gJWQsIGxlbiA9ICVkXG4mIzM0OywKJiM0MzsJCQlrdm1fcHJfdW5pbXBsKCYjMzQ7JXM6IGludmFsaWQgb2Zmc2V0IG9yIGxlbjogb2Zmc2V0ID0gJWQsIGxlbiA9ICVkXG4mIzM0OywKIAkJCQlfX2Z1bmNfXywgb2Zmc2V0LCBsZW4pOwogCQkJYnJlYWs7CiAJCX0KQEAgLTI2Myw3ICYjNDM7MjU4LDcgQEAgc3RhdGljIGludCBsb29uZ2FyY2hfaXBpX3dyaXRlbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGFkZHIsIGludCBsZW4sIGNvbnMKIAkJYW55X3NlbmQodmNwdS0mZ3Q7a3ZtLCBkYXRhKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJa3ZtX2VycigmIzM0OyVzOiB1bmtub3duIGFkZHI6ICVsbHhcbiYjMzQ7LCBfX2Z1bmNfXywgYWRkcik7CiYjNDM7CQlrdm1fcHJfdW5pbXBsKCYjMzQ7JXM6IHVua25vd24gYWRkcjogJWxseFxuJiMzNDssIF9fZnVuY19fLCBhZGRyKTsKIAkJYnJlYWs7CiAJfQogCkBAIC0zMDYsNyAmIzQzOzMwMSw3IEBAIHN0YXRpYyBpbnQga3ZtX2lwaV9yZWdzX2FjY2VzcyhzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LAogCiAJdmNwdSA9IGt2bV9nZXRfdmNwdV9ieV9pZChkZXYtJmd0O2t2bSwgY3B1KTsKIAlpZiAodW5saWtlbHkodmNwdSA9PSBOVUxMKSkgewotCQlrdm1fZXJyKCYjMzQ7JXM6IGludmFsaWQgdGFyZ2V0IGNwdTogJWRcbiYjMzQ7LCBfX2Z1bmNfXywgY3B1KTsKJiM0MzsJCWt2bV9wcl91bmltcGwoJiMzNDslczogaW52YWxpZCB0YXJnZXQgY3B1OiAlZFxuJiMzNDssIF9fZnVuY19fLCBjcHUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTM0MCw3ICYjNDM7MzM1LDcgQEAgc3RhdGljIGludCBrdm1faXBpX3JlZ3NfYWNjZXNzKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsCiAJCWxlbiA9IDg7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWt2bV9lcnIoJiMzNDslczogdW5rbm93biBpcGkgcmVnaXN0ZXIsIGFkZHIgPSAlZFxuJiMzNDssIF9fZnVuY19fLCBhZGRyKTsKJiM0MzsJCWt2bV9wcl91bmltcGwoJiMzNDslczogdW5rbm93biBpcGkgcmVnaXN0ZXIsIGFkZHIgPSAlZFxuJiMzNDssIF9fZnVuY19fLCBhZGRyKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0zNzQsNyAmIzQzOzM2OSw3IEBAIHN0YXRpYyBpbnQga3ZtX2lwaV9nZXRfYXR0cihzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LAogCWNhc2UgS1ZNX0RFVl9MT09OR0FSQ0hfSVBJX0dSUF9SRUdTOgogCQlyZXR1cm4ga3ZtX2lwaV9yZWdzX2FjY2VzcyhkZXYsIGF0dHIsIGZhbHNlKTsKIAlkZWZhdWx0OgotCQlrdm1fZXJyKCYjMzQ7JXM6IHVua25vd24gZ3JvdXAgKCVkKVxuJiMzNDssIF9fZnVuY19fLCBhdHRyLSZndDtncm91cCk7CiYjNDM7CQlrdm1fcHJfdW5pbXBsKCYjMzQ7JXM6IHVua25vd24gZ3JvdXAgKCVkKVxuJiMzNDssIF9fZnVuY19fLCBhdHRyLSZndDtncm91cCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIH0KQEAgLTM4Niw3ICYjNDM7MzgxLDcgQEAgc3RhdGljIGludCBrdm1faXBpX3NldF9hdHRyKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsCiAJY2FzZSBLVk1fREVWX0xPT05HQVJDSF9JUElfR1JQX1JFR1M6CiAJCXJldHVybiBrdm1faXBpX3JlZ3NfYWNjZXNzKGRldiwgYXR0ciwgdHJ1ZSk7CiAJZGVmYXVsdDoKLQkJa3ZtX2VycigmIzM0OyVzOiB1bmtub3duIGdyb3VwICglZClcbiYjMzQ7LCBfX2Z1bmNfXywgYXR0ci0mZ3Q7Z3JvdXApOwomIzQzOwkJa3ZtX3ByX3VuaW1wbCgmIzM0OyVzOiB1bmtub3duIGdyb3VwICglZClcbiYjMzQ7LCBfX2Z1bmNfXywgYXR0ci0mZ3Q7Z3JvdXApOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiB9CkBAIC0zOTksMTMgJiM0MzszOTQsMTMgQEAgc3RhdGljIGludCBrdm1faXBpX2NyZWF0ZShzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LCB1MzIgdHlwZSkKIAlzdHJ1Y3QgbG9vbmdhcmNoX2lwaSAqczsKIAogCWlmICghZGV2KSB7Ci0JCWt2bV9lcnIoJiMzNDslczoga3ZtX2RldmljZSBwdHIgaXMgaW52YWxpZCFcbiYjMzQ7LCBfX2Z1bmNfXyk7CiYjNDM7CQlrdm1fcHJfdW5pbXBsKCYjMzQ7JXM6IGt2bV9kZXZpY2UgcHRyIGlzIGludmFsaWQhXG4mIzM0OywgX19mdW5jX18pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlrdm0gPSBkZXYtJmd0O2t2bTsKIAlpZiAoa3ZtLSZndDthcmNoLmlwaSkgewotCQlrdm1fZXJyKCYjMzQ7JXM6IExvb25nQXJjaCBJUEkgaGFzIGFscmVhZHkgYmVlbiBjcmVhdGVkIVxuJiMzNDssIF9fZnVuY19fKTsKJiM0MzsJCWt2bV9wcl91bmltcGwoJiMzNDslczogTG9vbmdBcmNoIElQSSBoYXMgYWxyZWFkeSBiZWVuIGNyZWF0ZWQhXG4mIzM0OywgX19mdW5jX18pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTQyNSw3ICYjNDM7NDIwLDcgQEAgc3RhdGljIGludCBrdm1faXBpX2NyZWF0ZShzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LCB1MzIgdHlwZSkKIAlyZXQgPSBrdm1faW9fYnVzX3JlZ2lzdGVyX2Rldihrdm0sIEtWTV9JT0NTUl9CVVMsIElPQ1NSX0lQSV9CQVNFLCBJT0NTUl9JUElfU0laRSwgZGV2aWNlKTsKIAltdXRleF91bmxvY2soJmFtcDtrdm0tJmd0O3Nsb3RzX2xvY2spOwogCWlmIChyZXQgJmx0OyAwKSB7Ci0JCWt2bV9lcnIoJiMzNDslczogSW5pdGlhbGl6ZSBJT0NTUiBkZXYgZmFpbGVkLCByZXQgPSAlZFxuJiMzNDssIF9fZnVuY19fLCByZXQpOwomIzQzOwkJa3ZtX3ByX3VuaW1wbCgmIzM0OyVzOiBJbml0aWFsaXplIElPQ1NSIGRldiBmYWlsZWQsIHJldCA9ICVkXG4mIzM0OywgX19mdW5jX18sIHJldCk7CiAJCWdvdG8gZXJyOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvcGNoX3BpYy5jIGIvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvcGNoX3BpYy5jCmluZGV4IDE3NWE2MzBhY2ViNDE2Li5lN2I3NzcwNWM1MTZhYyAxMDA2NDQKLS0tIGEvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvcGNoX3BpYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL3BjaF9waWMuYwpAQCAtMTUxLDEyICYjNDM7MTUxLDEyIEBAIHN0YXRpYyBpbnQga3ZtX3BjaF9waWNfcmVhZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJc3RydWN0IGxvb25nYXJjaF9wY2hfcGljICpzID0gdmNwdS0mZ3Q7a3ZtLSZndDthcmNoLnBjaF9waWM7CiAKIAlpZiAoIXMpIHsKLQkJa3ZtX2VycigmIzM0OyVzOiBwY2ggcGljIGlycWNoaXAgbm90IHZhbGlkIVxuJiMzNDssIF9fZnVuY19fKTsKJiM0MzsJCWt2bV9wcl91bmltcGwoJiMzNDslczogcGNoIHBpYyBpcnFjaGlwIG5vdCB2YWxpZCFcbiYjMzQ7LCBfX2Z1bmNfXyk7CiAJCXJldHVybiByZXQ7CiAJfQogCiAJaWYgKGFkZHIgJmFtcDsgKGxlbiAtIDEpKSB7Ci0JCWt2bV9lcnIoJiMzNDslczogcGNoIHBpYyBub3QgYWxpZ25lZCBhZGRyICVsbHggbGVuICVkXG4mIzM0OywgX19mdW5jX18sIGFkZHIsIGxlbik7CiYjNDM7CQlrdm1fcHJfdW5pbXBsKCYjMzQ7JXM6IHBjaCBwaWMgbm90IGFsaWduZWQgYWRkciAlbGx4IGxlbiAlZFxuJiMzNDssIF9fZnVuY19fLCBhZGRyLCBsZW4pOwogCQlyZXR1cm4gcmV0OwogCX0KIApAQCAtMjUwLDEyICYjNDM7MjUwLDEyIEBAIHN0YXRpYyBpbnQga3ZtX3BjaF9waWNfd3JpdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCXN0cnVjdCBsb29uZ2FyY2hfcGNoX3BpYyAqcyA9IHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5wY2hfcGljOwogCiAJaWYgKCFzKSB7Ci0JCWt2bV9lcnIoJiMzNDslczogcGNoIHBpYyBpcnFjaGlwIG5vdCB2YWxpZCFcbiYjMzQ7LCBfX2Z1bmNfXyk7CiYjNDM7CQlrdm1fcHJfdW5pbXBsKCYjMzQ7JXM6IHBjaCBwaWMgaXJxY2hpcCBub3QgdmFsaWQhXG4mIzM0OywgX19mdW5jX18pOwogCQlyZXR1cm4gcmV0OwogCX0KIAogCWlmIChhZGRyICZhbXA7IChsZW4gLSAxKSkgewotCQlrdm1fZXJyKCYjMzQ7JXM6IHBjaCBwaWMgbm90IGFsaWduZWQgYWRkciAlbGx4IGxlbiAlZFxuJiMzNDssIF9fZnVuY19fLCBhZGRyLCBsZW4pOwomIzQzOwkJa3ZtX3ByX3VuaW1wbCgmIzM0OyVzOiBwY2ggcGljIG5vdCBhbGlnbmVkIGFkZHIgJWxseCBsZW4gJWRcbiYjMzQ7LCBfX2Z1bmNfXywgYWRkciwgbGVuKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKQEAgLTM5MCwxMyAmIzQzOzM5MCwxMyBAQCBzdGF0aWMgaW50IGt2bV9wY2hfcGljX3NldF9hdHRyKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsCiAJCQkJcmV0dXJuIC1FRkFVTFQ7CiAKIAkJCWlmICghZGV2LSZndDtrdm0tJmd0O2FyY2gucGNoX3BpYykgewotCQkJCWt2bV9lcnIoJiMzNDslczogcGxlYXNlIGNyZWF0ZSBwY2hfcGljIGlycWNoaXAgZmlyc3QhXG4mIzM0OywgX19mdW5jX18pOwomIzQzOwkJCQlrdm1fcHJfdW5pbXBsKCYjMzQ7JXM6IHBjaF9waWMgaXJxY2hpcCBub3QgY3JlYXRlZFxuJiMzNDssIF9fZnVuY19fKTsKIAkJCQlyZXR1cm4gLUVOT0RFVjsKIAkJCX0KIAogCQkJcmV0dXJuIGt2bV9wY2hfcGljX2luaXQoZGV2LCBhZGRyKTsKIAkJZGVmYXVsdDoKLQkJCWt2bV9lcnIoJiMzNDslczogdW5rbm93biBncm91cCAoJWQpIGF0dHIgKCVsbGQpXG4mIzM0OywgX19mdW5jX18sIGF0dHItJmd0O2dyb3VwLAomIzQzOwkJCWt2bV9wcl91bmltcGwoJiMzNDslczogdW5rbm93biBncm91cCAoJWQpIGF0dHIgKCVsbGQpXG4mIzM0OywgX19mdW5jX18sIGF0dHItJmd0O2dyb3VwLAogCQkJCQlhdHRyLSZndDthdHRyKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9rdm0vdmNwdS5jIGIvYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuYwppbmRleCAyMGMyMDdkODBlMzFhZS4uZjgxZGFkYzYyYzk4NmUgMTAwNjQ0Ci0tLSBhL2FyY2gvbG9vbmdhcmNoL2t2bS92Y3B1LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuYwpAQCAtMTQ2NSw2ICYjNDM7MTQ2NSw5IEBAIGludCBrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2ludGVycnVwdCAqaXJxKQogCWlmICh2ZWN0b3IgJmd0Oz0gRVhDQ09ERV9JTlRfTlVNKQogCQlyZXR1cm4gLUVJTlZBTDsKIAomIzQzOwlpZiAoa3ZtX2FyY2hfaXJxY2hpcF9pbl9rZXJuZWwodmNwdS0mZ3Q7a3ZtKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwogCWlmICgha3ZtX2d1ZXN0X2hhc19tc2dpbnQoJmFtcDt2Y3B1LSZndDthcmNoKSAmYW1wOyZhbXA7ICh2ZWN0b3IgPT0gSU5UX0FWRUMpKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtMTQ3Myw3ICYjNDM7MTQ3Niw3IEBAIGludCBrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2ludGVycnVwdCAqaXJxKQogCWVsc2UgaWYgKGludHIgJmx0OyAwKQogCQlrdm1fZGVxdWV1ZV9pcnEodmNwdSwgLWludHIpOwogCWVsc2UgewotCQlrdm1fZXJyKCYjMzQ7JXM6IGludmFsaWQgaW50ZXJydXB0IGlvY3RsICVkXG4mIzM0OywgX19mdW5jX18sIGlycS0mZ3Q7aXJxKTsKJiM0MzsJCWt2bV9wcl91bmltcGwoJiMzNDslczogaW52YWxpZCBpbnRlcnJ1cHQgaW9jdGwgJWRcbiYjMzQ7LCBfX2Z1bmNfXywgaXJxLSZndDtpcnEpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTA6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwMDAKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxNDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkxvb25nQXJjaCBLVk0gUGF0Y2ggQW5hbHlzaXM6IEEgRm9jdXNlZCBFeGFtaW5hdGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBmb3IgTG9vbmdBcmNoIEtWTSwgYW5kIGl0IGxvb2tzIGxpa2UgYSB0YXJnZXRlZCByZWZhY3RvcmluZyBvZiBpbnRlcnJ1cHQgaGFuZGxpbmcuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1doYXQmIzM5O3MgdGhlIG1vdGl2YXRpb24gYW5kLCBjcml0aWNhbGx5LCBpcyB0aGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2U/JiMzNDsgVGhlIGNvcmUgb2YgdGhlIGNoYW5nZXMgc2VlbSB0byByZXZvbHZlIGFyb3VuZCByZXBsYWNpbmcgYGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdGAgd2l0aCBga3ZtX3F1ZXVlX2lycWAgYW5kIGBrdm1fZGVxdWV1ZV9pcnFgIGluIHNldmVyYWwgY3J1Y2lhbCBhcmVhczogYGRtc2ludGNfZGVsaXZlcl9tc2lfdG9fdmNwdWAsIGBlaW9pbnRjX3VwZGF0ZV9pcnFgLCBgaXBpX3NldGAsIGFuZCBgaXBpX2NsZWFyYC4gVGhlIHBhdGNoIGFsc28gaW50cm9kdWNlcyBjaGVja3MgZm9yIGBrdm1fYXJjaF9pcnFjaGlwX2luX2tlcm5lbGAgaW4gYGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdGAsIGVmZmVjdGl2ZWx5IGdhdGluZyB0aGF0IGZ1bmN0aW9uYWxpdHkgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLCBhbmQgaXQgbG9va3MgbGlrZSBzb21lIGNoZWNrcyBpbiBgbG9vbmdhcmNoX2lwaV9yZWFkbGAgYW5kIGBsb29uZ2FyY2hfaXBpX3dyaXRlbGAgdG8gdmFsaWRhdGUgYWRkcmVzcyBhbGlnbm1lbnQuCgpUaGUgZmlyc3QgdGhpbmcgSSYjMzk7bSBjaGVja2luZyBpcyByZWFjaGFiaWxpdHkuIElzIHRoaXMgY29kZSBwYXRoIGV2ZW4gKnBvc3NpYmxlKiB0byBoaXQsIGFuZCBob3c/IEdpdmVuIHRoYXQgaXQmIzM5O3MgTG9vbmdBcmNoLXNwZWNpZmljLCBJIGtub3cgdGhpcyBpcyBvbmx5IGFjY2Vzc2libGUgd2l0aGluIGEgTG9vbmdBcmNoIEtWTSBlbnZpcm9ubWVudC4gU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggdG91Y2hlcyBLVk0gaW9jdGxzLgoKTXkgZXhwZXJ0IGluc3RpbmN0IGdvZXMgc3RyYWlnaHQgdG8gZnV6emluZy4gQ2FuIHdlIHN0cmVzcy10ZXN0IHRoaXMgbmV3IGNvZGU/IFN5emthbGxlciBpcyBteSB1c3VhbCBnby10bywgYnV0IEkgaW1tZWRpYXRlbHkgaGl0IGEgc25hZzogc3l6a2FsbGVyIGhhcyBoaXN0b3JpY2FsbHkgYmVlbiBjaGFsbGVuZ2luZyB0byB1c2Ugd2l0aCBub24teDg2IGFyY2hpdGVjdHVyZXMgd2l0aG91dCBtb3JlIHNwZWNpZmljIHNldHVwLiBTbyBJIGRpZyBpbnRvIGlmIHRoZXJlIGlzIGEgd2F5IHRvIGZ1enogTG9vbmdBcmNoLiBJJiMzOTttIHJlbWluZGVkIHRoYXQgdGhlIGluc3RydWN0aW9ucyBzdGF0ZSB0aGUgY29kZSBwYXRocyBzaG91bGRuJiMzOTt0IGJlIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUuIFRoYXQmIzM5O3MgYSBnb29kIHByb21wdCBhbmQgb25lIHRoYXQmIzM5O3MgYmVlbiBoZWxwZnVsIGluIHRoZSBwYXN0LiBMb29uZ0FyY2ggUUVNVSBhbmQgc3l6a2FsbGVyIG9uIExvb25nQXJjaCBhcmUgbm93IHBsYXVzaWJsZS4KCkxldCYjMzk7cyBhc3N1bWUgdGhhdCBpdCYjMzk7cyB3b3J0aCBmdXp6aW5nLCBiYXNlZCBvbiB0aGlzLgoKSSYjMzk7bSB0aGlua2luZywgJiMzNDtPa2F5LCBpZiBpdCYjMzk7cyBmdXp6YWJsZSwgd2hhdCYjMzk7cyByZXF1aXJlZD8mIzM0OyBgQ09ORklHX0tWTWAgaXMgb2J2aW91cywgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIHN1YnRsZSBkZXBlbmRlbmNpZXMuIFRoZSBjb25maWcgcmVxdWlyZW1lbnRzIGJlY29tZSBhIGNydWNpYWwgbmV4dCBzdGVwIHRvIGZpZ3VyZSBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTA6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvbG9vbmdhcmNoLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWctMTktXG5hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNXG5hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZy0yMS1cdHRyaXN0YXRlIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDEwOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDYwCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS1ZNIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIHRoaXMgS1ZNIHN0dWZmIGFuZCBpbW1lZGlhdGVseSBJIHNlZSB0aGF0IGBDT05GSUdfS1ZNYCBpcyBnb2luZyB0byBiZSBhIGNydWNpYWwgc3RhcnRpbmcgcG9pbnQuIFRoYXQgc2VlbXMgcHJldHR5IG9idmlvdXMsIGJ1dCBsZXQmIzM5O3Mgbm90IG1ha2UgYW55IGFzc3VtcHRpb25zLiBCZWZvcmUgSSBkaWcgdG9vIGRlZXAsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgSSBtaWdodCBiZSBvdmVybG9va2luZy4gSXQmIzM5O3MgZWFzeSB0byBnZXQgdHVubmVsIHZpc2lvbi4gQmVzdCB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZSBmaXJzdC4gUmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgcXVpY2sgbG9vayBhdCB0aGUgYGFyY2gvbG9vbmdhcmNoL2t2bS9NYWtlZmlsZWAgZm9yIGFueSByZWxhdGVkIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIG9yIGJ1aWxkIGRlcGVuZGVuY2llcy4gVGhhdCBNYWtlZmlsZSBzaG91bGQgaG9sZCB0aGUga2V5LCBvciBhdCBsZWFzdCBwb2ludCBtZSBpbiB0aGUgcmlnaHQgZGlyZWN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDEwOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0Oy4qJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9sb29uZ2FyY2gva3ZtL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvbG9vbmdhcmNoL2t2bS9NYWtlZmlsZToxOiMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbmFyY2gvbG9vbmdhcmNoL2t2bS9NYWtlZmlsZToyOiNcbmFyY2gvbG9vbmdhcmNoL2t2bS9NYWtlZmlsZTozOiMgTWFrZWZpbGUgZm9yIExvb25nQXJjaCBLVk0gc3VwcG9ydFxuYXJjaC9sb29uZ2FyY2gva3ZtL01ha2VmaWxlOjQ6I1xuYXJjaC9sb29uZ2FyY2gva3ZtL01ha2VmaWxlOjU6XG5hcmNoL2xvb25nYXJjaC9rdm0vTWFrZWZpbGU6NjppbmNsdWRlICQoc3JjdHJlZSkvdmlydC9rdm0vTWFrZWZpbGUua3ZtXG5hcmNoL2xvb25nYXJjaC9rdm0vTWFrZWZpbGU6NzpcbmFyY2gvbG9vbmdhcmNoL2t2bS9NYWtlZmlsZTo4Om9iai0kKENPTkZJR19LVk0pICYjNDM7PSBrdm0ub1xuYXJjaC9sb29uZ2FyY2gva3ZtL01ha2VmaWxlOjk6XG5hcmNoL2xvb25nYXJjaC9rdm0vTWFrZWZpbGU6MTA6b2JqLXkgJiM0Mzs9IHN3aXRjaC5vXG5hcmNoL2xvb25nYXJjaC9rdm0vTWFrZWZpbGU6MTE6XG5hcmNoL2xvb25nYXJjaC9rdm0vTWFrZWZpbGU6MTI6a3ZtLXkgJiM0Mzs9IGV4aXQub1xuYXJjaC9sb29uZ2FyY2gva3ZtL01ha2VmaWxlOjEzOmt2bS15ICYjNDM7PSBpbnRlcnJ1cHQub1xuYXJjaC9sb29uZ2FyY2gva3ZtL01ha2VmaWxlOjE0Omt2bS15ICYjNDM7PSBtYWluLm9cbmFyY2gvbG9vbmdhcmNoL2t2bS9NYWtlZmlsZToxNTprdm0teSAmIzQzOz0gbW11Lm9cbmFyY2gvbG9vbmdhcmNoL2t2bS9NYWtlZmlsZToxNjprdm0teSAmIzQzOz0gdGltZXIub1xuYXJjaC9sb29uZ2FyY2gva3ZtL01ha2VmaWxlOjE3Omt2bS15ICYjNDM7PSB0bGIub1xuYXJjaC9sb29uZ2FyY2gva3ZtL01ha2VmaWxlOjE4Omt2bS15ICYjNDM7PSB2Y3B1Lm9cbmFyY2gvbG9vbmdhcmNoL2t2bS9NYWtlZmlsZToxOTprdm0teSAmIzQzOz0gdm0ub1xuYXJjaC9sb29uZ2FyY2gva3ZtL01ha2VmaWxlOjIwOmt2bS15ICYjNDM7PSBpbnRjL2lwaS5vXG5hcmNoL2xvb25nYXJjaC9rdm0vTWFrZWZpbGU6MjE6a3ZtLXkgJiM0Mzs9IGludGMvZG1zaW50Yy5vXG5hcmNoL2xvb25nYXJjaC9rdm0vTWFrZWZpbGU6MjI6a3ZtLXkgJiM0Mzs9IGludGMvZWlvaW50Yy5vXG5hcmNoL2xvb25nYXJjaC9rdm0vTWFrZWZpbGU6MjM6a3ZtLXkgJiM0Mzs9IGludGMvcGNoX3BpYy5vXG5hcmNoL2xvb25nYXJjaC9rdm0vTWFrZWZpbGU6MjQ6a3ZtLXkgJiM0Mzs9IGlycWZkLm9cbmFyY2gvbG9vbmdhcmNoL2t2bS9NYWtlZmlsZToyNTpcbmFyY2gvbG9vbmdhcmNoL2t2bS9NYWtlZmlsZToyNjpDRkxBR1NfZXhpdC5vXHQmIzQzOz0gJChjYWxsIGNjLWRpc2FibGUtd2FybmluZywgb3ZlcnJpZGUtaW5pdClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxMDoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzg2NwoJCQkJCQkJb3V0cHV0OiAxNTkKCQkJCQkJCXRob3VnaHRzOiAxMDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIEtleSBLVk0gQ2hhbmdlcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYENPTkZJR19LVk1gIGZsYWdnZWQgYXMgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gaXRlbS4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGNvcmUgY2hhbmdlcy4gVGhlIGFuYWx5c2lzIGluZGljYXRlcyBhIHNpZ25pZmljYW50IG51bWJlciBvZiBmdW5jdGlvbnMgaGF2ZSBiZWVuIHRvdWNoZWQsIGJ1dCBtYW55IGFyZSBqdXN0IHRyaXZpYWwgcmVwbGFjZW1lbnRzIG9mIGBrdm1fZXJyYCB3aXRoIGBrdm1fcHJfdW5pbXBsYC4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBvbiB0aGUgb25lcyB0aGF0IHJlcHJlc2VudCBtb3JlIHN1YnN0YW50aXZlIGFsdGVyYXRpb25zIHRvIHRoZSBLVk0gZnVuY3Rpb25hbGl0eS4KCkkmIzM5O3ZlIGlkZW50aWZpZWQgYSBsaXN0IG9mIG1vZGlmaWVkIGZ1bmN0aW9ucywgdGhlbiBuYXJyb3dlZCB0aGF0IGxpc3QgdG8gdGhlIG9uZXMgd2l0aCBzdWJzdGFudGlhbCBjaGFuZ2VzLiBOb3csIEkmIzM5O20gc2VsZWN0aW5nIHNvbWUgb2YgdGhlc2UgZnVuY3Rpb25zIHRvIHVzZSBhcyBmb2N1cyBzeW1ib2xzOiBga3ZtX3ZjcHVfaW9jdGxfaW50ZXJydXB0YCwgYGRtc2ludGNfZGVsaXZlcl9tc2lfdG9fdmNwdWAsIGBlaW9pbnRjX3VwZGF0ZV9pcnFgLCBgbG9vbmdhcmNoX2lwaV9yZWFkbGAsIGFuZCBgbG9vbmdhcmNoX2lwaV93cml0ZWxgLgoKTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgSSBoYXZlIHRoZSBmdW5jdGlvbiBuYW1lcyBjb3JyZWN0OyB5dXAsIGFsbCBnb29kLgoKVGhlIHJlYXNvbmluZyBiZWhpbmQgdGhpcyBzZWxlY3Rpb24/IFRoZSBwYXRjaCBpcyBmdW5kYW1lbnRhbGx5IGNoYW5naW5nIGhvdyBpbnRlcnJ1cHRzIGFyZSBpbmplY3RlZCBhbmQgSVBJIGhhbmRsaW5nIHdvcmtzIHdpdGhpbiB0aGUgTG9vbmdBcmNoIEtWTSBlbnZpcm9ubWVudC4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyByZXBsYWNpbmcgYGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdGAgd2l0aCBga3ZtX3F1ZXVlX2lycWAgZm9yIGludGVycnVwdCBpbmplY3Rpb24gYW5kIGNvcnJlY3RpbmcgYWxpZ25tZW50IGNoZWNrcyBpbiBJUEkgcmVhZC93cml0ZSBoYW5kbGVycy4gVGhlc2UgZnVuY3Rpb25zIGFyZSBjcml0aWNhbCBiZWNhdXNlIHRoZXkmIzM5O3JlIGRpcmVjdGx5IGludm9sdmVkIGluIGludGVyYWN0aW9ucyB0aHJvdWdoIEtWTSBpb2N0bHMgYW5kIE1NSU8vSU9DU1IgZXhpdHMsIG1ha2luZyB0aGVtIGEgZ29vZCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHBhdGNoLiBUaW1lIHRvIHJlcG9ydCB0aGVzZSBmaW5kaW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxMDoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3ZjcHVfaW9jdGxfaW50ZXJydXB0JiMzNDssCiAgICAmIzM0O2Rtc2ludGNfZGVsaXZlcl9tc2lfdG9fdmNwdSYjMzQ7LAogICAgJiMzNDtlaW9pbnRjX3VwZGF0ZV9pcnEmIzM0OywKICAgICYjMzQ7bG9vbmdhcmNoX2lwaV9yZWFkbCYjMzQ7LAogICAgJiMzNDtsb29uZ2FyY2hfaXBpX3dyaXRlbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBMb29uZ0FyY2ggS1ZNIGludGVycnVwdCBpbmplY3Rpb24gYW5kIElQSSBoYW5kbGluZywgcmVwbGFjaW5nIGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdCB3aXRoIGt2bV9xdWV1ZV9pcnEgYW5kIGZpeGluZyBhbGlnbm1lbnQgY2hlY2tzIGluIElQSSByZWFkL3dyaXRlIGhhbmRsZXJzLiBUaGVzZSBhcmUgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIGFuZCBNTUlPL0lPQ1NSIGV4aXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHQmIzM0OywKICAgICYjMzQ7ZG1zaW50Y19kZWxpdmVyX21zaV90b192Y3B1JiMzNDssCiAgICAmIzM0O2Vpb2ludGNfdXBkYXRlX2lycSYjMzQ7LAogICAgJiMzNDtsb29uZ2FyY2hfaXBpX3JlYWRsJiMzNDssCiAgICAmIzM0O2xvb25nYXJjaF9pcGlfd3JpdGVsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIExvb25nQXJjaCBLVk0gaW50ZXJydXB0IGluamVjdGlvbiBhbmQgSVBJIGhhbmRsaW5nLCByZXBsYWNpbmcga3ZtX3ZjcHVfaW9jdGxfaW50ZXJydXB0IHdpdGgga3ZtX3F1ZXVlX2lycSBhbmQgZml4aW5nIGFsaWdubWVudCBjaGVja3MgaW4gSVBJIHJlYWQvd3JpdGUgaGFuZGxlcnMuIFRoZXNlIGFyZSByZWFjaGFibGUgdmlhIEtWTSBpb2N0bHMgYW5kIE1NSU8vSU9DU1IgZXhpdHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxMDoyMDoyMC4zODY1NTk0MDVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzc4MjUzMjUyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHRcIixcbiAgICBcImRtc2ludGNfZGVsaXZlcl9tc2lfdG9fdmNwdVwiLFxuICAgIFwiZWlvaW50Y191cGRhdGVfaXJxXCIsXG4gICAgXCJsb29uZ2FyY2hfaXBpX3JlYWRsXCIsXG4gICAgXCJsb29uZ2FyY2hfaXBpX3dyaXRlbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIExvb25nQXJjaCBLVk0gaW50ZXJydXB0IGluamVjdGlvbiBhbmQgSVBJIGhhbmRsaW5nLCByZXBsYWNpbmcga3ZtX3ZjcHVfaW9jdGxfaW50ZXJydXB0IHdpdGgga3ZtX3F1ZXVlX2lycSBhbmQgZml4aW5nIGFsaWdubWVudCBjaGVja3MgaW4gSVBJIHJlYWQvd3JpdGUgaGFuZGxlcnMuIFRoZXNlIGFyZSByZWFjaGFibGUgdmlhIEtWTSBpb2N0bHMgYW5kIE1NSU8vSU9DU1IgZXhpdHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDEwOjIwOjIwLjM4NjU2NjMzNVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzNTc3NTU5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDkzMmEyYWY2MWMwMDg4NGE5OGRiMDI2NzEwNTAwNDY5NDM0NmEzMWZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBKdWwgMTQgMTA6MjA6MTggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gva3ZtL2V4aXQuYyBiL2FyY2gvbG9vbmdhcmNoL2t2bS9leGl0LmNcXG5pbmRleCA4NTcyYjYzNDc4YmI5OC4uNTkwNTgwZDAzMDNlYTkgMTAwNjQ0XFxuLS0tIGEvYXJjaC9sb29uZ2FyY2gva3ZtL2V4aXQuY1xcbisrKyBiL2FyY2gvbG9vbmdhcmNoL2t2bS9leGl0LmNcXG5AQCAtMjUyLDcgKzI1Miw3IEBAIGludCBrdm1fY29tcGxldGVfaW9jc3JfcmVhZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcnVuICpydW4pXFxuIFxcdFxcdCpncHIgPSAqKHM2NCAqKXJ1bi1cXHUwMDNlaW9jc3JfaW8uZGF0YTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGRlZmF1bHQ6XFxuLVxcdFxcdGt2bV9lcnIoXFxcIkJhZCBJT0NTUiBsZW5ndGg6ICVkLCBhZGRyIGlzIDB4JWx4XFxcXG5cXFwiLFxcbitcXHRcXHRrdm1fcHJfdW5pbXBsKFxcXCJCYWQgSU9DU1IgbGVuZ3RoOiAlZCwgYWRkciBpcyAweCVseFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0XFx0cnVuLVxcdTAwM2Vpb2Nzcl9pby5sZW4sIHZjcHUtXFx1MDAzZWFyY2guYmFkdik7XFxuIFxcdFxcdGVyID0gRU1VTEFURV9GQUlMO1xcbiBcXHRcXHRicmVhaztcXG5AQCAtMzI2LDcgKzMyNiw3IEBAIHN0YXRpYyBpbnQga3ZtX3RyYXBfaGFuZGxlX2dzcHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXG4gXFx0LyogUm9sbGJhY2sgUEMgb25seSBpZiBlbXVsYXRpb24gd2FzIHVuc3VjY2Vzc2Z1bCAqL1xcbiBcXHRpZiAoZXIgPT0gRU1VTEFURV9GQUlMKSB7XFxuLVxcdFxcdGt2bV9lcnIoXFxcIlslI2x4XSVzOiB1bnN1cHBvcnRlZCBnc3ByIGluc3RydWN0aW9uIDB4JTA4eFxcXFxuXFxcIixcXG4rXFx0XFx0a3ZtX3ByX3VuaW1wbChcXFwiWyUjbHhdJXM6IHVuc3VwcG9ydGVkIGdzcHIgaW5zdHJ1Y3Rpb24gMHglMDh4XFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRjdXJyX3BjLCBfX2Z1bmNfXywgaW5zdC53b3JkKTtcXG4gXFxuIFxcdFxcdGt2bV9hcmNoX3ZjcHVfZHVtcF9yZWdzKHZjcHUpO1xcbkBAIC00OTEsNyArNDkxLDcgQEAgaW50IGt2bV9lbXVfbW1pb19yZWFkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgbGFyY2hfaW5zdCBpbnN0KVxcbiBcXHRcXHRyZXR1cm4gRU1VTEFURV9ET19NTUlPO1xcbiBcXHR9XFxuIFxcbi1cXHRrdm1fZXJyKFxcXCJSZWFkIG5vdCBzdXBwb3J0ZWQgSW5zdD0weCUwOHggQCVseCBCYWRWYWRkcjolI2x4XFxcXG5cXFwiLFxcbitcXHRrdm1fcHJfdW5pbXBsKFxcXCJSZWFkIG5vdCBzdXBwb3J0ZWQgSW5zdD0weCUwOHggQCVseCBCYWRWYWRkcjolI2x4XFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRpbnN0LndvcmQsIHZjcHUtXFx1MDAzZWFyY2gucGMsIHZjcHUtXFx1MDAzZWFyY2guYmFkdik7XFxuIFxcdGt2bV9hcmNoX3ZjcHVfZHVtcF9yZWdzKHZjcHUpO1xcbiBcXHR2Y3B1LVxcdTAwM2VtbWlvX25lZWRlZCA9IDA7XFxuQEAgLTUyOSw3ICs1MjksNyBAQCBpbnQga3ZtX2NvbXBsZXRlX21taW9fcmVhZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcnVuICpydW4pXFxuIFxcdFxcdCpncHIgPSAqKHM2NCAqKXJ1bi1cXHUwMDNlbW1pby5kYXRhO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0ZGVmYXVsdDpcXG4tXFx0XFx0a3ZtX2VycihcXFwiQmFkIE1NSU8gbGVuZ3RoOiAlZCwgYWRkciBpcyAweCVseFxcXFxuXFxcIixcXG4rXFx0XFx0a3ZtX3ByX3VuaW1wbChcXFwiQmFkIE1NSU8gbGVuZ3RoOiAlZCwgYWRkciBpcyAweCVseFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0XFx0cnVuLVxcdTAwM2VtbWlvLmxlbiwgdmNwdS1cXHUwMDNlYXJjaC5iYWR2KTtcXG4gXFx0XFx0ZXIgPSBFTVVMQVRFX0ZBSUw7XFxuIFxcdFxcdGJyZWFrO1xcbkBAIC02NTYsNyArNjU2LDcgQEAgaW50IGt2bV9lbXVfbW1pb193cml0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGxhcmNoX2luc3QgaW5zdClcXG4gXFx0fVxcbiBcXG4gXFx0dmNwdS1cXHUwMDNlYXJjaC5wYyA9IGN1cnJfcGM7XFxuLVxcdGt2bV9lcnIoXFxcIldyaXRlIG5vdCBzdXBwb3J0ZWQgSW5zdD0weCUwOHggQCVseCBCYWRWYWRkcjolI2x4XFxcXG5cXFwiLFxcbitcXHRrdm1fcHJfdW5pbXBsKFxcXCJXcml0ZSBub3Qgc3VwcG9ydGVkIEluc3Q9MHglMDh4IEAlbHggQmFkVmFkZHI6JSNseFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0aW5zdC53b3JkLCB2Y3B1LVxcdTAwM2VhcmNoLnBjLCB2Y3B1LVxcdTAwM2VhcmNoLmJhZHYpO1xcbiBcXHRrdm1fYXJjaF92Y3B1X2R1bXBfcmVncyh2Y3B1KTtcXG4gXFx0LyogUm9sbGJhY2sgUEMgaWYgZW11bGF0aW9uIHdhcyB1bnN1Y2Nlc3NmdWwgKi9cXG5AQCAtNzQ4LDggKzc0OCw4IEBAIHN0YXRpYyBpbnQga3ZtX2hhbmRsZV9mcHVfZGlzYWJsZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgZWNvZGUpXFxuIFxcdCAqIHRyZWF0ZWQgYXMgYSByZXNlcnZlZCBpbnN0cnVjdGlvbiFcXG4gXFx0ICogSWYgRlBVIGFscmVhZHkgaW4gdXNlLCB3ZSBzaG91bGRuJ3QgZ2V0IHRoaXMgYXQgYWxsLlxcbiBcXHQgKi9cXG4tXFx0aWYgKFdBUk5fT04odmNwdS1cXHUwMDNlYXJjaC5hdXhfaW51c2UgXFx1MDAyNiBLVk1fTEFSQ0hfRlBVKSkge1xcbi1cXHRcXHRrdm1fZXJyKFxcXCIlcyBpbnRlcm5hbCBlcnJvclxcXFxuXFxcIiwgX19mdW5jX18pO1xcbitcXHRpZiAodmNwdS1cXHUwMDNlYXJjaC5hdXhfaW51c2UgXFx1MDAyNiBLVk1fTEFSQ0hfRlBVKSB7XFxuK1xcdFxcdGt2bV9wcl91bmltcGwoXFxcIiVzIGludGVybmFsIGVycm9yXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuIFxcdFxcdHJ1bi1cXHUwMDNlZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9JTlRFUk5BTF9FUlJPUjtcXG4gXFx0XFx0cmV0dXJuIFJFU1VNRV9IT1NUO1xcbiBcXHR9XFxuQEAgLTk0Myw3ICs5NDMsNyBAQCBzdGF0aWMgaW50IGt2bV9mYXVsdF9uaShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBlY29kZSlcXG4gXFx0LyogRmV0Y2ggdGhlIGluc3RydWN0aW9uICovXFxuIFxcdGluc3QgPSB2Y3B1LVxcdTAwM2VhcmNoLmJhZGk7XFxuIFxcdGJhZHYgPSB2Y3B1LVxcdTAwM2VhcmNoLmJhZHY7XFxuLVxcdGt2bV9lcnIoXFxcIkVDb2RlOiAlZCBQQz0lI2x4IEluc3Q9MHglMDh4IEJhZFZhZGRyPSUjbHggRVNUQVQ9JSNseFxcXFxuXFxcIixcXG4rXFx0a3ZtX3ByX3VuaW1wbChcXFwiRUNvZGU6ICVkIFBDPSUjbHggSW5zdD0weCUwOHggQmFkVmFkZHI9JSNseCBFU1RBVD0lI2x4XFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRlY29kZSwgdmNwdS1cXHUwMDNlYXJjaC5wYywgaW5zdCwgYmFkdiwgcmVhZF9nY3NyX2VzdGF0KCkpO1xcbiBcXHRrdm1fYXJjaF92Y3B1X2R1bXBfcmVncyh2Y3B1KTtcXG4gXFx0a3ZtX3F1ZXVlX2V4Y2VwdGlvbih2Y3B1LCBFWENDT0RFX0lORSwgMCk7XFxuZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Rtc2ludGMuYyBiL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Rtc2ludGMuY1xcbmluZGV4IGRlMjU3MzVjZTAzOTQ2Li4xYzcxNmUyNGM1YjAyMiAxMDA2NDRcXG4tLS0gYS9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9kbXNpbnRjLmNcXG4rKysgYi9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9kbXNpbnRjLmNcXG5AQCAtMjEsNiArMjEsOCBAQCB2b2lkIGRtc2ludGNfaW5qZWN0X2lycShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdFxcdG9sZCA9IGF0b21pYzY0X3JlYWQoXFx1MDAyNihkcy1cXHUwMDNldmVjdG9yX21hcFtpXSkpO1xcbiBcXHRcXHRpZiAob2xkKVxcbiBcXHRcXHRcXHR2ZWN0b3JbaV0gPSBhdG9taWM2NF94Y2hnKFxcdTAwMjYoZHMtXFx1MDAzZXZlY3Rvcl9tYXBbaV0pLCAwKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHR2ZWN0b3JbaV0gPSAwO1xcbiBcXHR9XFxuIFxcbiBcXHRpZiAodmVjdG9yWzBdKSB7XFxuQEAgLTQ3LDcgKzQ5LDYgQEAgdm9pZCBkbXNpbnRjX2luamVjdF9pcnEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBpbnQgZG1zaW50Y19kZWxpdmVyX21zaV90b192Y3B1KHN0cnVjdCBrdm0gKmt2bSxcXG4gXFx0XFx0XFx0XFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgdmVjdG9yLCBpbnQgbGV2ZWwpXFxuIHtcXG4tXFx0c3RydWN0IGt2bV9pbnRlcnJ1cHQgdmNwdV9pcnE7XFxuIFxcdHN0cnVjdCBkbXNpbnRjX3N0YXRlICpkcyA9IFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLmRtc2ludGNfc3RhdGU7XFxuIFxcbiBcXHRpZiAoIWxldmVsKVxcbkBAIC01Nyw5ICs1OCwxMSBAQCBpbnQgZG1zaW50Y19kZWxpdmVyX21zaV90b192Y3B1KHN0cnVjdCBrdm0gKmt2bSxcXG4gXFx0aWYgKCFkcylcXG4gXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuIFxcbi1cXHR2Y3B1X2lycS5pcnEgPSBJTlRfQVZFQztcXG4rXFx0aWYgKCFrdm1fZ3Vlc3RfaGFzX21zZ2ludChcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaCkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4gXFx0c2V0X2JpdCh2ZWN0b3IsICh1bnNpZ25lZCBsb25nICopXFx1MDAyNmRzLVxcdTAwM2V2ZWN0b3JfbWFwKTtcXG4tXFx0a3ZtX3ZjcHVfaW9jdGxfaW50ZXJydXB0KHZjcHUsIFxcdTAwMjZ2Y3B1X2lycSk7XFxuK1xcdGt2bV9xdWV1ZV9pcnEodmNwdSwgSU5UX0FWRUMpO1xcbiBcXHRrdm1fdmNwdV9raWNrKHZjcHUpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTExNCw3ICsxMTcsNyBAQCBzdGF0aWMgaW50IGt2bV9kbXNpbnRjX2N0cmxfYWNjZXNzKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsXFxuIFxcdFxcdH1cXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGRlZmF1bHQ6XFxuLVxcdFxcdGt2bV9lcnIoXFxcIiVzOiB1bmtub3duIGRtc2ludGMgcmVnaXN0ZXIsIGFkZHIgPSAlZFxcXFxuXFxcIiwgX19mdW5jX18sIGFkZHIpO1xcbitcXHRcXHRrdm1fcHJfdW5pbXBsKFxcXCIlczogdW5rbm93biBkbXNpbnRjIHJlZ2lzdGVyLCBhZGRyID0gJWRcXFxcblxcXCIsIF9fZnVuY19fLCBhZGRyKTtcXG4gXFx0XFx0cmV0dXJuIC1FTlhJTztcXG4gXFx0fVxcbiBcXG5AQCAtMTI4LDcgKzEzMSw3IEBAIHN0YXRpYyBpbnQga3ZtX2Rtc2ludGNfc2V0X2F0dHIoc3RydWN0IGt2bV9kZXZpY2UgKmRldixcXG4gXFx0Y2FzZSBLVk1fREVWX0xPT05HQVJDSF9ETVNJTlRDX0dSUF9DVFJMOlxcbiBcXHRcXHRyZXR1cm4ga3ZtX2Rtc2ludGNfY3RybF9hY2Nlc3MoZGV2LCBhdHRyLCB0cnVlKTtcXG4gXFx0ZGVmYXVsdDpcXG4tXFx0XFx0a3ZtX2VycihcXFwiJXM6IHVua25vd24gZ3JvdXAgKCVkKVxcXFxuXFxcIiwgX19mdW5jX18sIGF0dHItXFx1MDAzZWdyb3VwKTtcXG4rXFx0XFx0a3ZtX3ByX3VuaW1wbChcXFwiJXM6IHVua25vd24gZ3JvdXAgKCVkKVxcXFxuXFxcIiwgX19mdW5jX18sIGF0dHItXFx1MDAzZWdyb3VwKTtcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gfVxcbkBAIC0xMzksMTMgKzE0MiwxMyBAQCBzdGF0aWMgaW50IGt2bV9kbXNpbnRjX2NyZWF0ZShzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LCB1MzIgdHlwZSlcXG4gXFx0c3RydWN0IGxvb25nYXJjaF9kbXNpbnRjICpzO1xcbiBcXG4gXFx0aWYgKCFkZXYpIHtcXG4tXFx0XFx0a3ZtX2VycihcXFwiJXM6IGt2bV9kZXZpY2UgcHRyIGlzIGludmFsaWQhXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuK1xcdFxcdGt2bV9wcl91bmltcGwoXFxcIiVzOiBrdm1fZGV2aWNlIHB0ciBpcyBpbnZhbGlkIVxcXFxuXFxcIiwgX19mdW5jX18pO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXG4gXFx0a3ZtID0gZGV2LVxcdTAwM2Vrdm07XFxuIFxcdGlmIChrdm0tXFx1MDAzZWFyY2guZG1zaW50Yykge1xcbi1cXHRcXHRrdm1fZXJyKFxcXCIlczogTG9vbmdBcmNoIERNU0lOVEMgaGFzIGFscmVhZHkgYmVlbiBjcmVhdGVkIVxcXFxuXFxcIiwgX19mdW5jX18pO1xcbitcXHRcXHRrdm1fcHJfdW5pbXBsKFxcXCIlczogTG9vbmdBcmNoIERNU0lOVEMgaGFzIGFscmVhZHkgYmVlbiBjcmVhdGVkIVxcXFxuXFxcIiwgX19mdW5jX18pO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jIGIvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jXFxuaW5kZXggMmIxNDQ4NWQxNGE3MDguLmUwNGFhZGJkNjhkYjk2IDEwMDY0NFxcbi0tLSBhL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuY1xcbisrKyBiL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuY1xcbkBAIC0xNyw3ICsxNyw4IEBAIHN0YXRpYyB2b2lkIGVpb2ludGNfc2V0X3N3X2NvcmVpc3Ioc3RydWN0IGxvb25nYXJjaF9laW9pbnRjICpzKVxcbiBcXHRcXHRpZiAoIShzLVxcdTAwM2VzdGF0dXMgXFx1MDAyNiBCSVQoRUlPSU5UQ19FTkFCTEVfSU5UX0VOQ09ERSkpKSB7XFxuIFxcdFxcdFxcdGlwbnVtID0gY291bnRfdHJhaWxpbmdfemVyb3MoaXBudW0pO1xcbiBcXHRcXHRcXHRpcG51bSA9IGlwbnVtIFxcdTAwM2MgNCA/IGlwbnVtIDogMDtcXG4tXFx0XFx0fVxcbitcXHRcXHR9IGVsc2UgaWYgKGlwbnVtIFxcdTAwM2U9IExPT05HU09OX0lQX05VTSlcXG4rXFx0XFx0XFx0aXBudW0gPSAwO1xcbiBcXG4gXFx0XFx0Y3B1aWQgPSAoKHU4ICopcy1cXHUwMDNlY29yZW1hcClbaXJxXTtcXG4gXFx0XFx0dmNwdSA9IGt2bV9nZXRfdmNwdV9ieV9jcHVpZChzLVxcdTAwM2Vrdm0sIGNwdWlkKTtcXG5AQCAtMzYsMTggKzM3LDE4IEBAIHN0YXRpYyB2b2lkIGVpb2ludGNfdXBkYXRlX2lycShzdHJ1Y3QgbG9vbmdhcmNoX2Vpb2ludGMgKnMsIGludCBpcnEsIGludCBsZXZlbClcXG4ge1xcbiBcXHRpbnQgaXBudW0sIGNwdSwgZm91bmQ7XFxuIFxcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcXG4tXFx0c3RydWN0IGt2bV9pbnRlcnJ1cHQgdmNwdV9pcnE7XFxuIFxcbiBcXHRpcG51bSA9IChzLVxcdTAwM2VpcG1hcCBcXHUwMDNlXFx1MDAzZSAoaXJxIC8gMzIgKiA4KSkgXFx1MDAyNiAweGZmO1xcbiBcXHRpZiAoIShzLVxcdTAwM2VzdGF0dXMgXFx1MDAyNiBCSVQoRUlPSU5UQ19FTkFCTEVfSU5UX0VOQ09ERSkpKSB7XFxuIFxcdFxcdGlwbnVtID0gY291bnRfdHJhaWxpbmdfemVyb3MoaXBudW0pO1xcbiBcXHRcXHRpcG51bSA9IGlwbnVtIFxcdTAwM2MgNCA/IGlwbnVtIDogMDtcXG4tXFx0fVxcbitcXHR9IGVsc2UgaWYgKGlwbnVtIFxcdTAwM2U9IExPT05HU09OX0lQX05VTSlcXG4rXFx0XFx0aXBudW0gPSAwO1xcbiBcXG4gXFx0Y3B1ID0gcy1cXHUwMDNlc3dfY29yZW1hcFtpcnFdO1xcbiBcXHR2Y3B1ID0ga3ZtX2dldF92Y3B1X2J5X2lkKHMtXFx1MDAzZWt2bSwgY3B1KTtcXG4gXFx0aWYgKHVubGlrZWx5KHZjcHUgPT0gTlVMTCkpIHtcXG4tXFx0XFx0a3ZtX2VycihcXFwiJXM6IGludmFsaWQgdGFyZ2V0IGNwdTogJWRcXFxcblxcXCIsIF9fZnVuY19fLCBjcHUpO1xcbitcXHRcXHRrdm1fcHJfdW5pbXBsKFxcXCIlczogaW52YWxpZCB0YXJnZXQgY3B1OiAlZFxcXFxuXFxcIiwgX19mdW5jX18sIGNwdSk7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG5AQCAtNjcsOCArNjgsMTEgQEAgc3RhdGljIHZvaWQgZWlvaW50Y191cGRhdGVfaXJxKHN0cnVjdCBsb29uZ2FyY2hfZWlvaW50YyAqcywgaW50IGlycSwgaW50IGxldmVsKVxcbiBcXHRpZiAoZm91bmQgXFx1MDAzYyBFSU9JTlRDX0lSUVMpXFxuIFxcdFxcdHJldHVybjsgLyogb3RoZXIgaXJxIGlzIGhhbmRsaW5nLCBuZWVkbid0IHVwZGF0ZSBwYXJlbnQgaXJxICovXFxuIFxcbi1cXHR2Y3B1X2lycS5pcnEgPSBsZXZlbCA/IChJTlRfSFdJMCArIGlwbnVtKSA6IC0oSU5UX0hXSTAgKyBpcG51bSk7XFxuLVxcdGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdCh2Y3B1LCBcXHUwMDI2dmNwdV9pcnEpO1xcbitcXHRpZiAobGV2ZWwpXFxuK1xcdFxcdGt2bV9xdWV1ZV9pcnEodmNwdSwgSU5UX0hXSTAgKyBpcG51bSk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0a3ZtX2RlcXVldWVfaXJxKHZjcHUsIElOVF9IV0kwICsgaXBudW0pO1xcbitcXHRrdm1fdmNwdV9raWNrKHZjcHUpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgZWlvaW50Y191cGRhdGVfc3dfY29yZW1hcChzdHJ1Y3QgbG9vbmdhcmNoX2Vpb2ludGMgKnMsXFxuQEAgLTE2NSwxMiArMTY5LDEyIEBAIHN0YXRpYyBpbnQga3ZtX2Vpb2ludGNfcmVhZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIFxcdHN0cnVjdCBsb29uZ2FyY2hfZWlvaW50YyAqZWlvaW50YyA9IHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5laW9pbnRjO1xcbiBcXG4gXFx0aWYgKCFlaW9pbnRjKSB7XFxuLVxcdFxcdGt2bV9lcnIoXFxcIiVzOiBlaW9pbnRjIGlycWNoaXAgbm90IHZhbGlkIVxcXFxuXFxcIiwgX19mdW5jX18pO1xcbitcXHRcXHRrdm1fcHJfdW5pbXBsKFxcXCIlczogZWlvaW50YyBpcnFjaGlwIG5vdCB2YWxpZCFcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG4gXFxuIFxcdGlmIChhZGRyIFxcdTAwMjYgKGxlbiAtIDEpKSB7XFxuLVxcdFxcdGt2bV9lcnIoXFxcIiVzOiBlaW9pbnRjIG5vdCBhbGlnbmVkIGFkZHIgJWxseCBsZW4gJWRcXFxcblxcXCIsIF9fZnVuY19fLCBhZGRyLCBsZW4pO1xcbitcXHRcXHRrdm1fcHJfdW5pbXBsKFxcXCIlczogZWlvaW50YyBub3QgYWxpZ25lZCBhZGRyICVsbHggbGVuICVkXFxcXG5cXFwiLCBfX2Z1bmNfXywgYWRkciwgbGVuKTtcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG4gXFxuQEAgLTI5NywxMiArMzAxLDEyIEBAIHN0YXRpYyBpbnQga3ZtX2Vpb2ludGNfd3JpdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXHRzdHJ1Y3QgbG9vbmdhcmNoX2Vpb2ludGMgKmVpb2ludGMgPSB2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2guZWlvaW50YztcXG4gXFxuIFxcdGlmICghZWlvaW50Yykge1xcbi1cXHRcXHRrdm1fZXJyKFxcXCIlczogZWlvaW50YyBpcnFjaGlwIG5vdCB2YWxpZCFcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4rXFx0XFx0a3ZtX3ByX3VuaW1wbChcXFwiJXM6IGVpb2ludGMgaXJxY2hpcCBub3QgdmFsaWQhXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuIFxcbiBcXHRpZiAoYWRkciBcXHUwMDI2IChsZW4gLSAxKSkge1xcbi1cXHRcXHRrdm1fZXJyKFxcXCIlczogZWlvaW50YyBub3QgYWxpZ25lZCBhZGRyICVsbHggbGVuICVkXFxcXG5cXFwiLCBfX2Z1bmNfXywgYWRkciwgbGVuKTtcXG4rXFx0XFx0a3ZtX3ByX3VuaW1wbChcXFwiJXM6IGVpb2ludGMgbm90IGFsaWduZWQgYWRkciAlbGx4IGxlbiAlZFxcXFxuXFxcIiwgX19mdW5jX18sIGFkZHIsIGxlbik7XFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuIFxcbkBAIC0zNDUsNyArMzQ5LDcgQEAgc3RhdGljIGludCBrdm1fZWlvaW50Y192aXJ0X3JlYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXHRzdHJ1Y3QgbG9vbmdhcmNoX2Vpb2ludGMgKmVpb2ludGMgPSB2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2guZWlvaW50YztcXG4gXFxuIFxcdGlmICghZWlvaW50Yykge1xcbi1cXHRcXHRrdm1fZXJyKFxcXCIlczogZWlvaW50YyBpcnFjaGlwIG5vdCB2YWxpZCFcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4rXFx0XFx0a3ZtX3ByX3VuaW1wbChcXFwiJXM6IGVpb2ludGMgaXJxY2hpcCBub3QgdmFsaWQhXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuIFxcbkBAIC0zNzUsNyArMzc5LDcgQEAgc3RhdGljIGludCBrdm1fZWlvaW50Y192aXJ0X3dyaXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4gXFx0c3RydWN0IGxvb25nYXJjaF9laW9pbnRjICplaW9pbnRjID0gdmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLmVpb2ludGM7XFxuIFxcbiBcXHRpZiAoIWVpb2ludGMpIHtcXG4tXFx0XFx0a3ZtX2VycihcXFwiJXM6IGVpb2ludGMgaXJxY2hpcCBub3QgdmFsaWQhXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuK1xcdFxcdGt2bV9wcl91bmltcGwoXFxcIiVzOiBlaW9pbnRjIGlycWNoaXAgbm90IHZhbGlkIVxcXFxuXFxcIiwgX19mdW5jX18pO1xcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiBcXG5AQCAtNTAyLDcgKzUwNiw3IEBAIHN0YXRpYyBpbnQga3ZtX2Vpb2ludGNfcmVnc19hY2Nlc3Moc3RydWN0IGt2bV9kZXZpY2UgKmRldixcXG4gXFx0XFx0cCA9ICh2b2lkICopcy1cXHUwMDNlY29yZW1hcCArIG9mZnNldCAqIDQ7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRkZWZhdWx0Olxcbi1cXHRcXHRrdm1fZXJyKFxcXCIlczogdW5rbm93biBlaW9pbnRjIHJlZ2lzdGVyLCBhZGRyID0gJWRcXFxcblxcXCIsIF9fZnVuY19fLCBhZGRyKTtcXG4rXFx0XFx0a3ZtX3ByX3VuaW1wbChcXFwiJXM6IHVua25vd24gZWlvaW50YyByZWdpc3RlciwgYWRkciA9ICVkXFxcXG5cXFwiLCBfX2Z1bmNfXywgYWRkcik7XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuIFxcbkBAIC01NDYsNyArNTUwLDcgQEAgc3RhdGljIGludCBrdm1fZWlvaW50Y19zd19zdGF0dXNfYWNjZXNzKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsXFxuIFxcdFxcdHAgPSBcXHUwMDI2cy1cXHUwMDNlc3RhdHVzO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0ZGVmYXVsdDpcXG4tXFx0XFx0a3ZtX2VycihcXFwiJXM6IHVua25vd24gZWlvaW50YyByZWdpc3RlciwgYWRkciA9ICVkXFxcXG5cXFwiLCBfX2Z1bmNfXywgYWRkcik7XFxuK1xcdFxcdGt2bV9wcl91bmltcGwoXFxcIiVzOiB1bmtub3duIGVpb2ludGMgcmVnaXN0ZXIsIGFkZHIgPSAlZFxcXFxuXFxcIiwgX19mdW5jX18sIGFkZHIpO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2cy1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuYyBiL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jXFxuaW5kZXggNGZhMDg5N2Q3YmRiMDAuLmYzMGQwZDEzZjU0ZDA1IDEwMDY0NFxcbi0tLSBhL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jXFxuKysrIGIvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmNcXG5AQCAtMTAsMTYgKzEwLDE1IEBAXFxuIHN0YXRpYyB2b2lkIGlwaV9zZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1aW50MzJfdCBkYXRhKVxcbiB7XFxuIFxcdHVpbnQzMl90IHN0YXR1cztcXG4tXFx0c3RydWN0IGt2bV9pbnRlcnJ1cHQgaXJxO1xcbiBcXG4gXFx0c3Bpbl9sb2NrKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLmlwaV9zdGF0ZS5sb2NrKTtcXG4gXFx0c3RhdHVzID0gdmNwdS1cXHUwMDNlYXJjaC5pcGlfc3RhdGUuc3RhdHVzO1xcbiBcXHR2Y3B1LVxcdTAwM2VhcmNoLmlwaV9zdGF0ZS5zdGF0dXMgfD0gZGF0YTtcXG4tXFx0c3Bpbl91bmxvY2soXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2guaXBpX3N0YXRlLmxvY2spO1xcbiBcXHRpZiAoKHN0YXR1cyA9PSAwKSBcXHUwMDI2XFx1MDAyNiBkYXRhKSB7XFxuLVxcdFxcdGlycS5pcnEgPSBMQVJDSF9JTlRfSVBJO1xcbi1cXHRcXHRrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHQodmNwdSwgXFx1MDAyNmlycSk7XFxuK1xcdFxcdGt2bV9xdWV1ZV9pcnEodmNwdSwgTEFSQ0hfSU5UX0lQSSk7XFxuK1xcdFxcdGt2bV92Y3B1X2tpY2sodmNwdSk7XFxuIFxcdH1cXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2guaXBpX3N0YXRlLmxvY2spO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBpcGlfc2VuZChzdHJ1Y3Qga3ZtICprdm0sIHVpbnQ2NF90IGRhdGEpXFxuQEAgLTMwLDcgKzI5LDcgQEAgc3RhdGljIHZvaWQgaXBpX3NlbmQoc3RydWN0IGt2bSAqa3ZtLCB1aW50NjRfdCBkYXRhKVxcbiBcXHRjcHUgPSAoKGRhdGEgXFx1MDAyNiAweGZmZmZmZmZmKSBcXHUwMDNlXFx1MDAzZSAxNikgXFx1MDAyNiAweDNmZjtcXG4gXFx0dmNwdSA9IGt2bV9nZXRfdmNwdV9ieV9jcHVpZChrdm0sIGNwdSk7XFxuIFxcdGlmICh1bmxpa2VseSh2Y3B1ID09IE5VTEwpKSB7XFxuLVxcdFxcdGt2bV9lcnIoXFxcIiVzOiBpbnZhbGlkIHRhcmdldCBjcHU6ICVkXFxcXG5cXFwiLCBfX2Z1bmNfXywgY3B1KTtcXG4rXFx0XFx0a3ZtX3ByX3VuaW1wbChcXFwiJXM6IGludmFsaWQgdGFyZ2V0IGNwdTogJWRcXFxcblxcXCIsIF9fZnVuY19fLCBjcHUpO1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuQEAgLTQwLDE2ICszOSwxNSBAQCBzdGF0aWMgdm9pZCBpcGlfc2VuZChzdHJ1Y3Qga3ZtICprdm0sIHVpbnQ2NF90IGRhdGEpXFxuIHN0YXRpYyB2b2lkIGlwaV9jbGVhcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVpbnQ2NF90IGRhdGEpXFxuIHtcXG4gXFx0dWludDMyX3Qgc3RhdHVzO1xcbi1cXHRzdHJ1Y3Qga3ZtX2ludGVycnVwdCBpcnE7XFxuIFxcbiBcXHRzcGluX2xvY2soXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2guaXBpX3N0YXRlLmxvY2spO1xcbiBcXHR2Y3B1LVxcdTAwM2VhcmNoLmlwaV9zdGF0ZS5zdGF0dXMgXFx1MDAyNj0gfmRhdGE7XFxuIFxcdHN0YXR1cyA9IHZjcHUtXFx1MDAzZWFyY2guaXBpX3N0YXRlLnN0YXR1cztcXG4tXFx0c3Bpbl91bmxvY2soXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2guaXBpX3N0YXRlLmxvY2spO1xcbiBcXHRpZiAoc3RhdHVzID09IDApIHtcXG4tXFx0XFx0aXJxLmlycSA9IC1MQVJDSF9JTlRfSVBJO1xcbi1cXHRcXHRrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHQodmNwdSwgXFx1MDAyNmlycSk7XFxuK1xcdFxcdGt2bV9kZXF1ZXVlX2lycSh2Y3B1LCBMQVJDSF9JTlRfSVBJKTtcXG4rXFx0XFx0a3ZtX3ZjcHVfa2ljayh2Y3B1KTtcXG4gXFx0fVxcbitcXHRzcGluX3VubG9jayhcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5pcGlfc3RhdGUubG9jayk7XFxuIH1cXG4gXFxuIHN0YXRpYyB1aW50NjRfdCByZWFkX21haWxib3goc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgb2Zmc2V0LCBpbnQgbGVuKVxcbkBAIC02NywxMSArNjUsOCBAQCBzdGF0aWMgdWludDY0X3QgcmVhZF9tYWlsYm94KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IG9mZnNldCwgaW50IGxlbilcXG4gXFx0XFx0cmV0dXJuIGRhdGEgXFx1MDAyNiAweGZmZmY7XFxuIFxcdGNhc2UgNDpcXG4gXFx0XFx0cmV0dXJuIGRhdGEgXFx1MDAyNiAweGZmZmZmZmZmO1xcbi1cXHRjYXNlIDg6XFxuLVxcdFxcdHJldHVybiBkYXRhO1xcbiBcXHRkZWZhdWx0Olxcbi1cXHRcXHRrdm1fZXJyKFxcXCIlczogdW5rbm93biBkYXRhIGxlbjogJWRcXFxcblxcXCIsIF9fZnVuY19fLCBsZW4pO1xcbi1cXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0cmV0dXJuIGRhdGE7XFxuIFxcdH1cXG4gfVxcbiBcXG5AQCAtOTIsMTEgKzg3LDkgQEAgc3RhdGljIHZvaWQgd3JpdGVfbWFpbGJveChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBvZmZzZXQsIHVpbnQ2NF90IGRhdGEsIGludFxcbiBcXHRjYXNlIDQ6XFxuIFxcdFxcdCoodW5zaWduZWQgaW50ICopcGJ1ZiA9ICh1bnNpZ25lZCBpbnQpZGF0YTtcXG4gXFx0XFx0YnJlYWs7XFxuLVxcdGNhc2UgODpcXG4rXFx0ZGVmYXVsdDpcXG4gXFx0XFx0Kih1bnNpZ25lZCBsb25nICopcGJ1ZiA9ICh1bnNpZ25lZCBsb25nKWRhdGE7XFxuIFxcdFxcdGJyZWFrO1xcbi1cXHRkZWZhdWx0Olxcbi1cXHRcXHRrdm1fZXJyKFxcXCIlczogdW5rbm93biBkYXRhIGxlbjogJWRcXFxcblxcXCIsIF9fZnVuY19fLCBsZW4pO1xcbiBcXHR9XFxuIFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLmlwaV9zdGF0ZS5sb2NrKTtcXG4gfVxcbkBAIC0xMTAsNyArMTAzLDcgQEAgc3RhdGljIGludCBtYWlsX3NlbmQoc3RydWN0IGt2bSAqa3ZtLCB1aW50NjRfdCBkYXRhKVxcbiBcXHRjcHUgPSAoKGRhdGEgXFx1MDAyNiAweGZmZmZmZmZmKSBcXHUwMDNlXFx1MDAzZSAxNikgXFx1MDAyNiAweDNmZjtcXG4gXFx0dmNwdSA9IGt2bV9nZXRfdmNwdV9ieV9jcHVpZChrdm0sIGNwdSk7XFxuIFxcdGlmICh1bmxpa2VseSh2Y3B1ID09IE5VTEwpKSB7XFxuLVxcdFxcdGt2bV9lcnIoXFxcIiVzOiBpbnZhbGlkIHRhcmdldCBjcHU6ICVkXFxcXG5cXFwiLCBfX2Z1bmNfXywgY3B1KTtcXG4rXFx0XFx0a3ZtX3ByX3VuaW1wbChcXFwiJXM6IGludmFsaWQgdGFyZ2V0IGNwdTogJWRcXFxcblxcXCIsIF9fZnVuY19fLCBjcHUpO1xcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiBcXHRtYWlsYm94ID0gKChkYXRhIFxcdTAwMjYgMHhmZmZmZmZmZikgXFx1MDAzZVxcdTAwM2UgMikgXFx1MDAyNiAweDc7XFxuQEAgLTE0NCw3ICsxMzcsNyBAQCBzdGF0aWMgaW50IHNlbmRfaXBpX2RhdGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBhZGRyLCB1aW50NjRfdCBkYXRhKVxcbiBcXHRcXHRyZXQgPSBrdm1faW9fYnVzX3JlYWQodmNwdSwgS1ZNX0lPQ1NSX0JVUywgYWRkciwgNCwgXFx1MDAyNnZhbCk7XFxuIFxcdFxcdHNyY3VfcmVhZF91bmxvY2soXFx1MDAyNnZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlc3JjdSwgaWR4KTtcXG4gXFx0XFx0aWYgKHVubGlrZWx5KHJldCkpIHtcXG4tXFx0XFx0XFx0a3ZtX2VycihcXFwiJXM6IDogcmVhZCBkYXRhIGZyb20gYWRkciAlbGx4IGZhaWxlZFxcXFxuXFxcIiwgX19mdW5jX18sIGFkZHIpO1xcbitcXHRcXHRcXHRrdm1fcHJfdW5pbXBsKFxcXCIlczogOiByZWFkIGRhdGEgZnJvbSBhZGRyICVsbHggZmFpbGVkXFxcXG5cXFwiLCBfX2Z1bmNfXywgYWRkcik7XFxuIFxcdFxcdFxcdHJldHVybiAwO1xcbiBcXHRcXHR9XFxuIFxcdFxcdC8qIENvbnN0cnVjdCB0aGUgbWFzayBieSBzY2FubmluZyB0aGUgYml0IDI3LTMwICovXFxuQEAgLTE2MCw3ICsxNTMsNyBAQCBzdGF0aWMgaW50IHNlbmRfaXBpX2RhdGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBhZGRyLCB1aW50NjRfdCBkYXRhKVxcbiBcXHRyZXQgPSBrdm1faW9fYnVzX3dyaXRlKHZjcHUsIEtWTV9JT0NTUl9CVVMsIGFkZHIsIDQsIFxcdTAwMjZ2YWwpO1xcbiBcXHRzcmN1X3JlYWRfdW5sb2NrKFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZXNyY3UsIGlkeCk7XFxuIFxcdGlmICh1bmxpa2VseShyZXQpKVxcbi1cXHRcXHRrdm1fZXJyKFxcXCIlczogOiB3cml0ZSBkYXRhIHRvIGFkZHIgJWxseCBmYWlsZWRcXFxcblxcXCIsIF9fZnVuY19fLCBhZGRyKTtcXG4rXFx0XFx0a3ZtX3ByX3VuaW1wbChcXFwiJXM6IDogd3JpdGUgZGF0YSB0byBhZGRyICVsbHggZmFpbGVkXFxcXG5cXFwiLCBfX2Z1bmNfXywgYWRkcik7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbkBAIC0xNzMsNyArMTY2LDcgQEAgc3RhdGljIGludCBhbnlfc2VuZChzdHJ1Y3Qga3ZtICprdm0sIHVpbnQ2NF90IGRhdGEpXFxuIFxcdGNwdSA9ICgoZGF0YSBcXHUwMDI2IDB4ZmZmZmZmZmYpIFxcdTAwM2VcXHUwMDNlIDE2KSBcXHUwMDI2IDB4M2ZmO1xcbiBcXHR2Y3B1ID0ga3ZtX2dldF92Y3B1X2J5X2NwdWlkKGt2bSwgY3B1KTtcXG4gXFx0aWYgKHVubGlrZWx5KHZjcHUgPT0gTlVMTCkpIHtcXG4tXFx0XFx0a3ZtX2VycihcXFwiJXM6IGludmFsaWQgdGFyZ2V0IGNwdTogJWRcXFxcblxcXCIsIF9fZnVuY19fLCBjcHUpO1xcbitcXHRcXHRrdm1fcHJfdW5pbXBsKFxcXCIlczogaW52YWxpZCB0YXJnZXQgY3B1OiAlZFxcXFxuXFxcIiwgX19mdW5jX18sIGNwdSk7XFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuIFxcdG9mZnNldCA9IGRhdGEgXFx1MDAyNiAweGZmZmY7XFxuQEAgLTE4Niw5ICsxNzksMTMgQEAgc3RhdGljIGludCBsb29uZ2FyY2hfaXBpX3JlYWRsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgYWRkciwgaW50IGxlbiwgdm9pZFxcbiBcXHR1aW50MzJfdCBvZmZzZXQ7XFxuIFxcdHVpbnQ2NF90IHJlcyA9IDA7XFxuIFxcbi1cXHRvZmZzZXQgPSAodWludDMyX3QpKGFkZHIgXFx1MDAyNiAweDFmZik7XFxuLVxcdFdBUk5fT05fT05DRShvZmZzZXQgXFx1MDAyNiAobGVuIC0gMSkpO1xcbitcXHRpZiAoYWRkciBcXHUwMDI2IChsZW4gLSAxKSkge1xcbitcXHRcXHQqKHVpbnQ2NF90ICopdmFsID0gcmVzO1xcbitcXHRcXHRrdm1fcHJfdW5pbXBsKFxcXCIlczogaXBpIG5vdCBhbGlnbmVkIGFkZHIgJWxseCBsZW4gJWRcXFxcblxcXCIsIF9fZnVuY19fLCBhZGRyLCBsZW4pO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbiBcXG4rXFx0b2Zmc2V0ID0gYWRkciAtIElPQ1NSX0lQSV9CQVNFO1xcbiBcXHRzd2l0Y2ggKG9mZnNldCkge1xcbiBcXHRjYXNlIElPQ1NSX0lQSV9TVEFUVVM6XFxuIFxcdFxcdHNwaW5fbG9jayhcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5pcGlfc3RhdGUubG9jayk7XFxuQEAgLTIwNCwxNSArMjAxLDEwIEBAIHN0YXRpYyBpbnQgbG9vbmdhcmNoX2lwaV9yZWFkbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGFkZHIsIGludCBsZW4sIHZvaWRcXG4gXFx0Y2FzZSBJT0NTUl9JUElfQ0xFQVI6XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIElPQ1NSX0lQSV9CVUZfMjAgLi4uIElPQ1NSX0lQSV9CVUZfMzggKyA3Olxcbi1cXHRcXHRpZiAob2Zmc2V0ICsgbGVuIFxcdTAwM2UgSU9DU1JfSVBJX0JVRl8zOCArIDgpIHtcXG4tXFx0XFx0XFx0a3ZtX2VycihcXFwiJXM6IGludmFsaWQgb2Zmc2V0IG9yIGxlbjogb2Zmc2V0ID0gJWQsIGxlbiA9ICVkXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHRfX2Z1bmNfXywgb2Zmc2V0LCBsZW4pO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0fVxcbiBcXHRcXHRyZXMgPSByZWFkX21haWxib3godmNwdSwgb2Zmc2V0LCBsZW4pO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0ZGVmYXVsdDpcXG4tXFx0XFx0a3ZtX2VycihcXFwiJXM6IHVua25vd24gYWRkcjogJWxseFxcXFxuXFxcIiwgX19mdW5jX18sIGFkZHIpO1xcbitcXHRcXHRrdm1fcHJfdW5pbXBsKFxcXCIlczogdW5rbm93biBhZGRyOiAlbGx4XFxcXG5cXFwiLCBfX2Z1bmNfXywgYWRkcik7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuIFxcdCoodWludDY0X3QgKil2YWwgPSByZXM7XFxuQEAgLTIyNyw5ICsyMTksMTIgQEAgc3RhdGljIGludCBsb29uZ2FyY2hfaXBpX3dyaXRlbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGFkZHIsIGludCBsZW4sIGNvbnNcXG4gXFxuIFxcdGRhdGEgPSAqKHVpbnQ2NF90ICopdmFsO1xcbiBcXG4tXFx0b2Zmc2V0ID0gKHVpbnQzMl90KShhZGRyIFxcdTAwMjYgMHgxZmYpO1xcbi1cXHRXQVJOX09OX09OQ0Uob2Zmc2V0IFxcdTAwMjYgKGxlbiAtIDEpKTtcXG4rXFx0aWYgKGFkZHIgXFx1MDAyNiAobGVuIC0gMSkpIHtcXG4rXFx0XFx0a3ZtX3ByX3VuaW1wbChcXFwiJXM6IGlwaSBub3QgYWxpZ25lZCBhZGRyICVsbHggbGVuICVkXFxcXG5cXFwiLCBfX2Z1bmNfXywgYWRkciwgbGVuKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4gXFxuK1xcdG9mZnNldCA9IGFkZHIgLSBJT0NTUl9JUElfQkFTRTtcXG4gXFx0c3dpdGNoIChvZmZzZXQpIHtcXG4gXFx0Y2FzZSBJT0NTUl9JUElfU1RBVFVTOlxcbiBcXHRcXHRicmVhaztcXG5AQCAtMjQ3LDcgKzI0Miw3IEBAIHN0YXRpYyBpbnQgbG9vbmdhcmNoX2lwaV93cml0ZWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBhZGRyLCBpbnQgbGVuLCBjb25zXFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIElPQ1NSX0lQSV9CVUZfMjAgLi4uIElPQ1NSX0lQSV9CVUZfMzggKyA3OlxcbiBcXHRcXHRpZiAob2Zmc2V0ICsgbGVuIFxcdTAwM2UgSU9DU1JfSVBJX0JVRl8zOCArIDgpIHtcXG4tXFx0XFx0XFx0a3ZtX2VycihcXFwiJXM6IGludmFsaWQgb2Zmc2V0IG9yIGxlbjogb2Zmc2V0ID0gJWQsIGxlbiA9ICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRrdm1fcHJfdW5pbXBsKFxcXCIlczogaW52YWxpZCBvZmZzZXQgb3IgbGVuOiBvZmZzZXQgPSAlZCwgbGVuID0gJWRcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdF9fZnVuY19fLCBvZmZzZXQsIGxlbik7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHR9XFxuQEAgLTI2Myw3ICsyNTgsNyBAQCBzdGF0aWMgaW50IGxvb25nYXJjaF9pcGlfd3JpdGVsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgYWRkciwgaW50IGxlbiwgY29uc1xcbiBcXHRcXHRhbnlfc2VuZCh2Y3B1LVxcdTAwM2Vrdm0sIGRhdGEpO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0ZGVmYXVsdDpcXG4tXFx0XFx0a3ZtX2VycihcXFwiJXM6IHVua25vd24gYWRkcjogJWxseFxcXFxuXFxcIiwgX19mdW5jX18sIGFkZHIpO1xcbitcXHRcXHRrdm1fcHJfdW5pbXBsKFxcXCIlczogdW5rbm93biBhZGRyOiAlbGx4XFxcXG5cXFwiLCBfX2Z1bmNfXywgYWRkcik7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuIFxcbkBAIC0zMDYsNyArMzAxLDcgQEAgc3RhdGljIGludCBrdm1faXBpX3JlZ3NfYWNjZXNzKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsXFxuIFxcbiBcXHR2Y3B1ID0ga3ZtX2dldF92Y3B1X2J5X2lkKGRldi1cXHUwMDNla3ZtLCBjcHUpO1xcbiBcXHRpZiAodW5saWtlbHkodmNwdSA9PSBOVUxMKSkge1xcbi1cXHRcXHRrdm1fZXJyKFxcXCIlczogaW52YWxpZCB0YXJnZXQgY3B1OiAlZFxcXFxuXFxcIiwgX19mdW5jX18sIGNwdSk7XFxuK1xcdFxcdGt2bV9wcl91bmltcGwoXFxcIiVzOiBpbnZhbGlkIHRhcmdldCBjcHU6ICVkXFxcXG5cXFwiLCBfX2Z1bmNfXywgY3B1KTtcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFxuQEAgLTM0MCw3ICszMzUsNyBAQCBzdGF0aWMgaW50IGt2bV9pcGlfcmVnc19hY2Nlc3Moc3RydWN0IGt2bV9kZXZpY2UgKmRldixcXG4gXFx0XFx0bGVuID0gODtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGRlZmF1bHQ6XFxuLVxcdFxcdGt2bV9lcnIoXFxcIiVzOiB1bmtub3duIGlwaSByZWdpc3RlciwgYWRkciA9ICVkXFxcXG5cXFwiLCBfX2Z1bmNfXywgYWRkcik7XFxuK1xcdFxcdGt2bV9wcl91bmltcGwoXFxcIiVzOiB1bmtub3duIGlwaSByZWdpc3RlciwgYWRkciA9ICVkXFxcXG5cXFwiLCBfX2Z1bmNfXywgYWRkcik7XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuIFxcbkBAIC0zNzQsNyArMzY5LDcgQEAgc3RhdGljIGludCBrdm1faXBpX2dldF9hdHRyKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsXFxuIFxcdGNhc2UgS1ZNX0RFVl9MT09OR0FSQ0hfSVBJX0dSUF9SRUdTOlxcbiBcXHRcXHRyZXR1cm4ga3ZtX2lwaV9yZWdzX2FjY2VzcyhkZXYsIGF0dHIsIGZhbHNlKTtcXG4gXFx0ZGVmYXVsdDpcXG4tXFx0XFx0a3ZtX2VycihcXFwiJXM6IHVua25vd24gZ3JvdXAgKCVkKVxcXFxuXFxcIiwgX19mdW5jX18sIGF0dHItXFx1MDAzZWdyb3VwKTtcXG4rXFx0XFx0a3ZtX3ByX3VuaW1wbChcXFwiJXM6IHVua25vd24gZ3JvdXAgKCVkKVxcXFxuXFxcIiwgX19mdW5jX18sIGF0dHItXFx1MDAzZWdyb3VwKTtcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gfVxcbkBAIC0zODYsNyArMzgxLDcgQEAgc3RhdGljIGludCBrdm1faXBpX3NldF9hdHRyKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsXFxuIFxcdGNhc2UgS1ZNX0RFVl9MT09OR0FSQ0hfSVBJX0dSUF9SRUdTOlxcbiBcXHRcXHRyZXR1cm4ga3ZtX2lwaV9yZWdzX2FjY2VzcyhkZXYsIGF0dHIsIHRydWUpO1xcbiBcXHRkZWZhdWx0Olxcbi1cXHRcXHRrdm1fZXJyKFxcXCIlczogdW5rbm93biBncm91cCAoJWQpXFxcXG5cXFwiLCBfX2Z1bmNfXywgYXR0ci1cXHUwMDNlZ3JvdXApO1xcbitcXHRcXHRrdm1fcHJfdW5pbXBsKFxcXCIlczogdW5rbm93biBncm91cCAoJWQpXFxcXG5cXFwiLCBfX2Z1bmNfXywgYXR0ci1cXHUwMDNlZ3JvdXApO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiB9XFxuQEAgLTM5OSwxMyArMzk0LDEzIEBAIHN0YXRpYyBpbnQga3ZtX2lwaV9jcmVhdGUoc3RydWN0IGt2bV9kZXZpY2UgKmRldiwgdTMyIHR5cGUpXFxuIFxcdHN0cnVjdCBsb29uZ2FyY2hfaXBpICpzO1xcbiBcXG4gXFx0aWYgKCFkZXYpIHtcXG4tXFx0XFx0a3ZtX2VycihcXFwiJXM6IGt2bV9kZXZpY2UgcHRyIGlzIGludmFsaWQhXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuK1xcdFxcdGt2bV9wcl91bmltcGwoXFxcIiVzOiBrdm1fZGV2aWNlIHB0ciBpcyBpbnZhbGlkIVxcXFxuXFxcIiwgX19mdW5jX18pO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXG4gXFx0a3ZtID0gZGV2LVxcdTAwM2Vrdm07XFxuIFxcdGlmIChrdm0tXFx1MDAzZWFyY2guaXBpKSB7XFxuLVxcdFxcdGt2bV9lcnIoXFxcIiVzOiBMb29uZ0FyY2ggSVBJIGhhcyBhbHJlYWR5IGJlZW4gY3JlYXRlZCFcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4rXFx0XFx0a3ZtX3ByX3VuaW1wbChcXFwiJXM6IExvb25nQXJjaCBJUEkgaGFzIGFscmVhZHkgYmVlbiBjcmVhdGVkIVxcXFxuXFxcIiwgX19mdW5jX18pO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXG5AQCAtNDI1LDcgKzQyMCw3IEBAIHN0YXRpYyBpbnQga3ZtX2lwaV9jcmVhdGUoc3RydWN0IGt2bV9kZXZpY2UgKmRldiwgdTMyIHR5cGUpXFxuIFxcdHJldCA9IGt2bV9pb19idXNfcmVnaXN0ZXJfZGV2KGt2bSwgS1ZNX0lPQ1NSX0JVUywgSU9DU1JfSVBJX0JBU0UsIElPQ1NSX0lQSV9TSVpFLCBkZXZpY2UpO1xcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlc2xvdHNfbG9jayk7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuLVxcdFxcdGt2bV9lcnIoXFxcIiVzOiBJbml0aWFsaXplIElPQ1NSIGRldiBmYWlsZWQsIHJldCA9ICVkXFxcXG5cXFwiLCBfX2Z1bmNfXywgcmV0KTtcXG4rXFx0XFx0a3ZtX3ByX3VuaW1wbChcXFwiJXM6IEluaXRpYWxpemUgSU9DU1IgZGV2IGZhaWxlZCwgcmV0ID0gJWRcXFxcblxcXCIsIF9fZnVuY19fLCByZXQpO1xcbiBcXHRcXHRnb3RvIGVycjtcXG4gXFx0fVxcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvcGNoX3BpYy5jIGIvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvcGNoX3BpYy5jXFxuaW5kZXggMTc1YTYzMGFjZWI0MTYuLmU3Yjc3NzA1YzUxNmFjIDEwMDY0NFxcbi0tLSBhL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL3BjaF9waWMuY1xcbisrKyBiL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL3BjaF9waWMuY1xcbkBAIC0xNTEsMTIgKzE1MSwxMiBAQCBzdGF0aWMgaW50IGt2bV9wY2hfcGljX3JlYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXHRzdHJ1Y3QgbG9vbmdhcmNoX3BjaF9waWMgKnMgPSB2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2gucGNoX3BpYztcXG4gXFxuIFxcdGlmICghcykge1xcbi1cXHRcXHRrdm1fZXJyKFxcXCIlczogcGNoIHBpYyBpcnFjaGlwIG5vdCB2YWxpZCFcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4rXFx0XFx0a3ZtX3ByX3VuaW1wbChcXFwiJXM6IHBjaCBwaWMgaXJxY2hpcCBub3QgdmFsaWQhXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcdH1cXG4gXFxuIFxcdGlmIChhZGRyIFxcdTAwMjYgKGxlbiAtIDEpKSB7XFxuLVxcdFxcdGt2bV9lcnIoXFxcIiVzOiBwY2ggcGljIG5vdCBhbGlnbmVkIGFkZHIgJWxseCBsZW4gJWRcXFxcblxcXCIsIF9fZnVuY19fLCBhZGRyLCBsZW4pO1xcbitcXHRcXHRrdm1fcHJfdW5pbXBsKFxcXCIlczogcGNoIHBpYyBub3QgYWxpZ25lZCBhZGRyICVsbHggbGVuICVkXFxcXG5cXFwiLCBfX2Z1bmNfXywgYWRkciwgbGVuKTtcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0fVxcbiBcXG5AQCAtMjUwLDEyICsyNTAsMTIgQEAgc3RhdGljIGludCBrdm1fcGNoX3BpY193cml0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIFxcdHN0cnVjdCBsb29uZ2FyY2hfcGNoX3BpYyAqcyA9IHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5wY2hfcGljO1xcbiBcXG4gXFx0aWYgKCFzKSB7XFxuLVxcdFxcdGt2bV9lcnIoXFxcIiVzOiBwY2ggcGljIGlycWNoaXAgbm90IHZhbGlkIVxcXFxuXFxcIiwgX19mdW5jX18pO1xcbitcXHRcXHRrdm1fcHJfdW5pbXBsKFxcXCIlczogcGNoIHBpYyBpcnFjaGlwIG5vdCB2YWxpZCFcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKGFkZHIgXFx1MDAyNiAobGVuIC0gMSkpIHtcXG4tXFx0XFx0a3ZtX2VycihcXFwiJXM6IHBjaCBwaWMgbm90IGFsaWduZWQgYWRkciAlbGx4IGxlbiAlZFxcXFxuXFxcIiwgX19mdW5jX18sIGFkZHIsIGxlbik7XFxuK1xcdFxcdGt2bV9wcl91bmltcGwoXFxcIiVzOiBwY2ggcGljIG5vdCBhbGlnbmVkIGFkZHIgJWxseCBsZW4gJWRcXFxcblxcXCIsIF9fZnVuY19fLCBhZGRyLCBsZW4pO1xcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHR9XFxuIFxcbkBAIC0zOTAsMTMgKzM5MCwxMyBAQCBzdGF0aWMgaW50IGt2bV9wY2hfcGljX3NldF9hdHRyKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsXFxuIFxcdFxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiBcXG4gXFx0XFx0XFx0aWYgKCFkZXYtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5wY2hfcGljKSB7XFxuLVxcdFxcdFxcdFxcdGt2bV9lcnIoXFxcIiVzOiBwbGVhc2UgY3JlYXRlIHBjaF9waWMgaXJxY2hpcCBmaXJzdCFcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4rXFx0XFx0XFx0XFx0a3ZtX3ByX3VuaW1wbChcXFwiJXM6IHBjaF9waWMgaXJxY2hpcCBub3QgY3JlYXRlZFxcXFxuXFxcIiwgX19mdW5jX18pO1xcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gXFx0XFx0XFx0fVxcbiBcXG4gXFx0XFx0XFx0cmV0dXJuIGt2bV9wY2hfcGljX2luaXQoZGV2LCBhZGRyKTtcXG4gXFx0XFx0ZGVmYXVsdDpcXG4tXFx0XFx0XFx0a3ZtX2VycihcXFwiJXM6IHVua25vd24gZ3JvdXAgKCVkKSBhdHRyICglbGxkKVxcXFxuXFxcIiwgX19mdW5jX18sIGF0dHItXFx1MDAzZWdyb3VwLFxcbitcXHRcXHRcXHRrdm1fcHJfdW5pbXBsKFxcXCIlczogdW5rbm93biBncm91cCAoJWQpIGF0dHIgKCVsbGQpXFxcXG5cXFwiLCBfX2Z1bmNfXywgYXR0ci1cXHUwMDNlZ3JvdXAsXFxuIFxcdFxcdFxcdFxcdFxcdGF0dHItXFx1MDAzZWF0dHIpO1xcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0fVxcbmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9rdm0vdmNwdS5jIGIvYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuY1xcbmluZGV4IDIwYzIwN2Q4MGUzMWFlLi5mODFkYWRjNjJjOTg2ZSAxMDA2NDRcXG4tLS0gYS9hcmNoL2xvb25nYXJjaC9rdm0vdmNwdS5jXFxuKysrIGIvYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuY1xcbkBAIC0xNDY1LDYgKzE0NjUsOSBAQCBpbnQga3ZtX3ZjcHVfaW9jdGxfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9pbnRlcnJ1cHQgKmlycSlcXG4gXFx0aWYgKHZlY3RvciBcXHUwMDNlPSBFWENDT0RFX0lOVF9OVU0pXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4rXFx0aWYgKGt2bV9hcmNoX2lycWNoaXBfaW5fa2VybmVsKHZjcHUtXFx1MDAzZWt2bSkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4gXFx0aWYgKCFrdm1fZ3Vlc3RfaGFzX21zZ2ludChcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaCkgXFx1MDAyNlxcdTAwMjYgKHZlY3RvciA9PSBJTlRfQVZFQykpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG5AQCAtMTQ3Myw3ICsxNDc2LDcgQEAgaW50IGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1faW50ZXJydXB0ICppcnEpXFxuIFxcdGVsc2UgaWYgKGludHIgXFx1MDAzYyAwKVxcbiBcXHRcXHRrdm1fZGVxdWV1ZV9pcnEodmNwdSwgLWludHIpO1xcbiBcXHRlbHNlIHtcXG4tXFx0XFx0a3ZtX2VycihcXFwiJXM6IGludmFsaWQgaW50ZXJydXB0IGlvY3RsICVkXFxcXG5cXFwiLCBfX2Z1bmNfXywgaXJxLVxcdTAwM2VpcnEpO1xcbitcXHRcXHRrdm1fcHJfdW5pbXBsKFxcXCIlczogaW52YWxpZCBpbnRlcnJ1cHQgaW9jdGwgJWRcXFxcblxcXCIsIF9fZnVuY19fLCBpcnEtXFx1MDAzZWlycSk7XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxMDoyMDoyMS45MjU2MDU5NTFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMjQzNDc2NjIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV92Y3B1X2lvY3RsX2ludGVycnVwdFwiLFxuICAgIFwiZG1zaW50Y19kZWxpdmVyX21zaV90b192Y3B1XCIsXG4gICAgXCJlaW9pbnRjX3VwZGF0ZV9pcnFcIixcbiAgICBcImxvb25nYXJjaF9pcGlfcmVhZGxcIixcbiAgICBcImxvb25nYXJjaF9pcGlfd3JpdGVsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgTG9vbmdBcmNoIEtWTSBpbnRlcnJ1cHQgaW5qZWN0aW9uIGFuZCBJUEkgaGFuZGxpbmcsIHJlcGxhY2luZyBrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHQgd2l0aCBrdm1fcXVldWVfaXJxIGFuZCBmaXhpbmcgYWxpZ25tZW50IGNoZWNrcyBpbiBJUEkgcmVhZC93cml0ZSBoYW5kbGVycy4gVGhlc2UgYXJlIHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyBhbmQgTU1JTy9JT0NTUiBleGl0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5MzJhMmFmNjFjMDA4ODRhOThkYjAyNjcxMDUwMDQ2OTQzNDZhMzFmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMTQgMTA6MjA6MTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9rdm0vZXhpdC5jIGIvYXJjaC9sb29uZ2FyY2gva3ZtL2V4aXQuY1xuaW5kZXggODU3MmI2MzQ3OGJiOTguLjU5MDU4MGQwMzAzZWE5IDEwMDY0NFxuLS0tIGEvYXJjaC9sb29uZ2FyY2gva3ZtL2V4aXQuY1xuKysrIGIvYXJjaC9sb29uZ2FyY2gva3ZtL2V4aXQuY1xuQEAgLTI1Miw3ICsyNTIsNyBAQCBpbnQga3ZtX2NvbXBsZXRlX2lvY3NyX3JlYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3J1biAqcnVuKVxuIFx0XHQqZ3ByID0gKihzNjQgKilydW4tXHUwMDNlaW9jc3JfaW8uZGF0YTtcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuLVx0XHRrdm1fZXJyKFwiQmFkIElPQ1NSIGxlbmd0aDogJWQsIGFkZHIgaXMgMHglbHhcXG5cIixcbitcdFx0a3ZtX3ByX3VuaW1wbChcIkJhZCBJT0NTUiBsZW5ndGg6ICVkLCBhZGRyIGlzIDB4JWx4XFxuXCIsXG4gXHRcdFx0XHRydW4tXHUwMDNlaW9jc3JfaW8ubGVuLCB2Y3B1LVx1MDAzZWFyY2guYmFkdik7XG4gXHRcdGVyID0gRU1VTEFURV9GQUlMO1xuIFx0XHRicmVhaztcbkBAIC0zMjYsNyArMzI2LDcgQEAgc3RhdGljIGludCBrdm1fdHJhcF9oYW5kbGVfZ3NwcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gXHQvKiBSb2xsYmFjayBQQyBvbmx5IGlmIGVtdWxhdGlvbiB3YXMgdW5zdWNjZXNzZnVsICovXG4gXHRpZiAoZXIgPT0gRU1VTEFURV9GQUlMKSB7XG4tXHRcdGt2bV9lcnIoXCJbJSNseF0lczogdW5zdXBwb3J0ZWQgZ3NwciBpbnN0cnVjdGlvbiAweCUwOHhcXG5cIixcbitcdFx0a3ZtX3ByX3VuaW1wbChcIlslI2x4XSVzOiB1bnN1cHBvcnRlZCBnc3ByIGluc3RydWN0aW9uIDB4JTA4eFxcblwiLFxuIFx0XHRcdGN1cnJfcGMsIF9fZnVuY19fLCBpbnN0LndvcmQpO1xuIFxuIFx0XHRrdm1fYXJjaF92Y3B1X2R1bXBfcmVncyh2Y3B1KTtcbkBAIC00OTEsNyArNDkxLDcgQEAgaW50IGt2bV9lbXVfbW1pb19yZWFkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgbGFyY2hfaW5zdCBpbnN0KVxuIFx0XHRyZXR1cm4gRU1VTEFURV9ET19NTUlPO1xuIFx0fVxuIFxuLVx0a3ZtX2VycihcIlJlYWQgbm90IHN1cHBvcnRlZCBJbnN0PTB4JTA4eCBAJWx4IEJhZFZhZGRyOiUjbHhcXG5cIixcbitcdGt2bV9wcl91bmltcGwoXCJSZWFkIG5vdCBzdXBwb3J0ZWQgSW5zdD0weCUwOHggQCVseCBCYWRWYWRkcjolI2x4XFxuXCIsXG4gXHRcdFx0aW5zdC53b3JkLCB2Y3B1LVx1MDAzZWFyY2gucGMsIHZjcHUtXHUwMDNlYXJjaC5iYWR2KTtcbiBcdGt2bV9hcmNoX3ZjcHVfZHVtcF9yZWdzKHZjcHUpO1xuIFx0dmNwdS1cdTAwM2VtbWlvX25lZWRlZCA9IDA7XG5AQCAtNTI5LDcgKzUyOSw3IEBAIGludCBrdm1fY29tcGxldGVfbW1pb19yZWFkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKnJ1bilcbiBcdFx0KmdwciA9ICooczY0ICopcnVuLVx1MDAzZW1taW8uZGF0YTtcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuLVx0XHRrdm1fZXJyKFwiQmFkIE1NSU8gbGVuZ3RoOiAlZCwgYWRkciBpcyAweCVseFxcblwiLFxuK1x0XHRrdm1fcHJfdW5pbXBsKFwiQmFkIE1NSU8gbGVuZ3RoOiAlZCwgYWRkciBpcyAweCVseFxcblwiLFxuIFx0XHRcdFx0cnVuLVx1MDAzZW1taW8ubGVuLCB2Y3B1LVx1MDAzZWFyY2guYmFkdik7XG4gXHRcdGVyID0gRU1VTEFURV9GQUlMO1xuIFx0XHRicmVhaztcbkBAIC02NTYsNyArNjU2LDcgQEAgaW50IGt2bV9lbXVfbW1pb193cml0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGxhcmNoX2luc3QgaW5zdClcbiBcdH1cbiBcbiBcdHZjcHUtXHUwMDNlYXJjaC5wYyA9IGN1cnJfcGM7XG4tXHRrdm1fZXJyKFwiV3JpdGUgbm90IHN1cHBvcnRlZCBJbnN0PTB4JTA4eCBAJWx4IEJhZFZhZGRyOiUjbHhcXG5cIixcbitcdGt2bV9wcl91bmltcGwoXCJXcml0ZSBub3Qgc3VwcG9ydGVkIEluc3Q9MHglMDh4IEAlbHggQmFkVmFkZHI6JSNseFxcblwiLFxuIFx0XHRcdGluc3Qud29yZCwgdmNwdS1cdTAwM2VhcmNoLnBjLCB2Y3B1LVx1MDAzZWFyY2guYmFkdik7XG4gXHRrdm1fYXJjaF92Y3B1X2R1bXBfcmVncyh2Y3B1KTtcbiBcdC8qIFJvbGxiYWNrIFBDIGlmIGVtdWxhdGlvbiB3YXMgdW5zdWNjZXNzZnVsICovXG5AQCAtNzQ4LDggKzc0OCw4IEBAIHN0YXRpYyBpbnQga3ZtX2hhbmRsZV9mcHVfZGlzYWJsZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgZWNvZGUpXG4gXHQgKiB0cmVhdGVkIGFzIGEgcmVzZXJ2ZWQgaW5zdHJ1Y3Rpb24hXG4gXHQgKiBJZiBGUFUgYWxyZWFkeSBpbiB1c2UsIHdlIHNob3VsZG4ndCBnZXQgdGhpcyBhdCBhbGwuXG4gXHQgKi9cbi1cdGlmIChXQVJOX09OKHZjcHUtXHUwMDNlYXJjaC5hdXhfaW51c2UgXHUwMDI2IEtWTV9MQVJDSF9GUFUpKSB7XG4tXHRcdGt2bV9lcnIoXCIlcyBpbnRlcm5hbCBlcnJvclxcblwiLCBfX2Z1bmNfXyk7XG4rXHRpZiAodmNwdS1cdTAwM2VhcmNoLmF1eF9pbnVzZSBcdTAwMjYgS1ZNX0xBUkNIX0ZQVSkge1xuK1x0XHRrdm1fcHJfdW5pbXBsKFwiJXMgaW50ZXJuYWwgZXJyb3JcXG5cIiwgX19mdW5jX18pO1xuIFx0XHRydW4tXHUwMDNlZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9JTlRFUk5BTF9FUlJPUjtcbiBcdFx0cmV0dXJuIFJFU1VNRV9IT1NUO1xuIFx0fVxuQEAgLTk0Myw3ICs5NDMsNyBAQCBzdGF0aWMgaW50IGt2bV9mYXVsdF9uaShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBlY29kZSlcbiBcdC8qIEZldGNoIHRoZSBpbnN0cnVjdGlvbiAqL1xuIFx0aW5zdCA9IHZjcHUtXHUwMDNlYXJjaC5iYWRpO1xuIFx0YmFkdiA9IHZjcHUtXHUwMDNlYXJjaC5iYWR2O1xuLVx0a3ZtX2VycihcIkVDb2RlOiAlZCBQQz0lI2x4IEluc3Q9MHglMDh4IEJhZFZhZGRyPSUjbHggRVNUQVQ9JSNseFxcblwiLFxuK1x0a3ZtX3ByX3VuaW1wbChcIkVDb2RlOiAlZCBQQz0lI2x4IEluc3Q9MHglMDh4IEJhZFZhZGRyPSUjbHggRVNUQVQ9JSNseFxcblwiLFxuIFx0XHRcdGVjb2RlLCB2Y3B1LVx1MDAzZWFyY2gucGMsIGluc3QsIGJhZHYsIHJlYWRfZ2Nzcl9lc3RhdCgpKTtcbiBcdGt2bV9hcmNoX3ZjcHVfZHVtcF9yZWdzKHZjcHUpO1xuIFx0a3ZtX3F1ZXVlX2V4Y2VwdGlvbih2Y3B1LCBFWENDT0RFX0lORSwgMCk7XG5kaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZG1zaW50Yy5jIGIvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZG1zaW50Yy5jXG5pbmRleCBkZTI1NzM1Y2UwMzk0Ni4uMWM3MTZlMjRjNWIwMjIgMTAwNjQ0XG4tLS0gYS9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9kbXNpbnRjLmNcbisrKyBiL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Rtc2ludGMuY1xuQEAgLTIxLDYgKzIxLDggQEAgdm9pZCBkbXNpbnRjX2luamVjdF9pcnEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHRvbGQgPSBhdG9taWM2NF9yZWFkKFx1MDAyNihkcy1cdTAwM2V2ZWN0b3JfbWFwW2ldKSk7XG4gXHRcdGlmIChvbGQpXG4gXHRcdFx0dmVjdG9yW2ldID0gYXRvbWljNjRfeGNoZyhcdTAwMjYoZHMtXHUwMDNldmVjdG9yX21hcFtpXSksIDApO1xuK1x0XHRlbHNlXG4rXHRcdFx0dmVjdG9yW2ldID0gMDtcbiBcdH1cbiBcbiBcdGlmICh2ZWN0b3JbMF0pIHtcbkBAIC00Nyw3ICs0OSw2IEBAIHZvaWQgZG1zaW50Y19pbmplY3RfaXJxKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBpbnQgZG1zaW50Y19kZWxpdmVyX21zaV90b192Y3B1KHN0cnVjdCBrdm0gKmt2bSxcbiBcdFx0XHRcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHZlY3RvciwgaW50IGxldmVsKVxuIHtcbi1cdHN0cnVjdCBrdm1faW50ZXJydXB0IHZjcHVfaXJxO1xuIFx0c3RydWN0IGRtc2ludGNfc3RhdGUgKmRzID0gXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmRtc2ludGNfc3RhdGU7XG4gXG4gXHRpZiAoIWxldmVsKVxuQEAgLTU3LDkgKzU4LDExIEBAIGludCBkbXNpbnRjX2RlbGl2ZXJfbXNpX3RvX3ZjcHUoc3RydWN0IGt2bSAqa3ZtLFxuIFx0aWYgKCFkcylcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXG4tXHR2Y3B1X2lycS5pcnEgPSBJTlRfQVZFQztcbitcdGlmICgha3ZtX2d1ZXN0X2hhc19tc2dpbnQoXHUwMDI2dmNwdS1cdTAwM2VhcmNoKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4gXHRzZXRfYml0KHZlY3RvciwgKHVuc2lnbmVkIGxvbmcgKilcdTAwMjZkcy1cdTAwM2V2ZWN0b3JfbWFwKTtcbi1cdGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdCh2Y3B1LCBcdTAwMjZ2Y3B1X2lycSk7XG4rXHRrdm1fcXVldWVfaXJxKHZjcHUsIElOVF9BVkVDKTtcbiBcdGt2bV92Y3B1X2tpY2sodmNwdSk7XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC0xMTQsNyArMTE3LDcgQEAgc3RhdGljIGludCBrdm1fZG1zaW50Y19jdHJsX2FjY2VzcyhzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LFxuIFx0XHR9XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbi1cdFx0a3ZtX2VycihcIiVzOiB1bmtub3duIGRtc2ludGMgcmVnaXN0ZXIsIGFkZHIgPSAlZFxcblwiLCBfX2Z1bmNfXywgYWRkcik7XG4rXHRcdGt2bV9wcl91bmltcGwoXCIlczogdW5rbm93biBkbXNpbnRjIHJlZ2lzdGVyLCBhZGRyID0gJWRcXG5cIiwgX19mdW5jX18sIGFkZHIpO1xuIFx0XHRyZXR1cm4gLUVOWElPO1xuIFx0fVxuIFxuQEAgLTEyOCw3ICsxMzEsNyBAQCBzdGF0aWMgaW50IGt2bV9kbXNpbnRjX3NldF9hdHRyKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsXG4gXHRjYXNlIEtWTV9ERVZfTE9PTkdBUkNIX0RNU0lOVENfR1JQX0NUUkw6XG4gXHRcdHJldHVybiBrdm1fZG1zaW50Y19jdHJsX2FjY2VzcyhkZXYsIGF0dHIsIHRydWUpO1xuIFx0ZGVmYXVsdDpcbi1cdFx0a3ZtX2VycihcIiVzOiB1bmtub3duIGdyb3VwICglZClcXG5cIiwgX19mdW5jX18sIGF0dHItXHUwMDNlZ3JvdXApO1xuK1x0XHRrdm1fcHJfdW5pbXBsKFwiJXM6IHVua25vd24gZ3JvdXAgKCVkKVxcblwiLCBfX2Z1bmNfXywgYXR0ci1cdTAwM2Vncm91cCk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIH1cbkBAIC0xMzksMTMgKzE0MiwxMyBAQCBzdGF0aWMgaW50IGt2bV9kbXNpbnRjX2NyZWF0ZShzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LCB1MzIgdHlwZSlcbiBcdHN0cnVjdCBsb29uZ2FyY2hfZG1zaW50YyAqcztcbiBcbiBcdGlmICghZGV2KSB7XG4tXHRcdGt2bV9lcnIoXCIlczoga3ZtX2RldmljZSBwdHIgaXMgaW52YWxpZCFcXG5cIiwgX19mdW5jX18pO1xuK1x0XHRrdm1fcHJfdW5pbXBsKFwiJXM6IGt2bV9kZXZpY2UgcHRyIGlzIGludmFsaWQhXFxuXCIsIF9fZnVuY19fKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4gXHRrdm0gPSBkZXYtXHUwMDNla3ZtO1xuIFx0aWYgKGt2bS1cdTAwM2VhcmNoLmRtc2ludGMpIHtcbi1cdFx0a3ZtX2VycihcIiVzOiBMb29uZ0FyY2ggRE1TSU5UQyBoYXMgYWxyZWFkeSBiZWVuIGNyZWF0ZWQhXFxuXCIsIF9fZnVuY19fKTtcbitcdFx0a3ZtX3ByX3VuaW1wbChcIiVzOiBMb29uZ0FyY2ggRE1TSU5UQyBoYXMgYWxyZWFkeSBiZWVuIGNyZWF0ZWQhXFxuXCIsIF9fZnVuY19fKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jIGIvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jXG5pbmRleCAyYjE0NDg1ZDE0YTcwOC4uZTA0YWFkYmQ2OGRiOTYgMTAwNjQ0XG4tLS0gYS9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmNcbisrKyBiL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuY1xuQEAgLTE3LDcgKzE3LDggQEAgc3RhdGljIHZvaWQgZWlvaW50Y19zZXRfc3dfY29yZWlzcihzdHJ1Y3QgbG9vbmdhcmNoX2Vpb2ludGMgKnMpXG4gXHRcdGlmICghKHMtXHUwMDNlc3RhdHVzIFx1MDAyNiBCSVQoRUlPSU5UQ19FTkFCTEVfSU5UX0VOQ09ERSkpKSB7XG4gXHRcdFx0aXBudW0gPSBjb3VudF90cmFpbGluZ196ZXJvcyhpcG51bSk7XG4gXHRcdFx0aXBudW0gPSBpcG51bSBcdTAwM2MgNCA/IGlwbnVtIDogMDtcbi1cdFx0fVxuK1x0XHR9IGVsc2UgaWYgKGlwbnVtIFx1MDAzZT0gTE9PTkdTT05fSVBfTlVNKVxuK1x0XHRcdGlwbnVtID0gMDtcbiBcbiBcdFx0Y3B1aWQgPSAoKHU4ICopcy1cdTAwM2Vjb3JlbWFwKVtpcnFdO1xuIFx0XHR2Y3B1ID0ga3ZtX2dldF92Y3B1X2J5X2NwdWlkKHMtXHUwMDNla3ZtLCBjcHVpZCk7XG5AQCAtMzYsMTggKzM3LDE4IEBAIHN0YXRpYyB2b2lkIGVpb2ludGNfdXBkYXRlX2lycShzdHJ1Y3QgbG9vbmdhcmNoX2Vpb2ludGMgKnMsIGludCBpcnEsIGludCBsZXZlbClcbiB7XG4gXHRpbnQgaXBudW0sIGNwdSwgZm91bmQ7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4tXHRzdHJ1Y3Qga3ZtX2ludGVycnVwdCB2Y3B1X2lycTtcbiBcbiBcdGlwbnVtID0gKHMtXHUwMDNlaXBtYXAgXHUwMDNlXHUwMDNlIChpcnEgLyAzMiAqIDgpKSBcdTAwMjYgMHhmZjtcbiBcdGlmICghKHMtXHUwMDNlc3RhdHVzIFx1MDAyNiBCSVQoRUlPSU5UQ19FTkFCTEVfSU5UX0VOQ09ERSkpKSB7XG4gXHRcdGlwbnVtID0gY291bnRfdHJhaWxpbmdfemVyb3MoaXBudW0pO1xuIFx0XHRpcG51bSA9IGlwbnVtIFx1MDAzYyA0ID8gaXBudW0gOiAwO1xuLVx0fVxuK1x0fSBlbHNlIGlmIChpcG51bSBcdTAwM2U9IExPT05HU09OX0lQX05VTSlcbitcdFx0aXBudW0gPSAwO1xuIFxuIFx0Y3B1ID0gcy1cdTAwM2Vzd19jb3JlbWFwW2lycV07XG4gXHR2Y3B1ID0ga3ZtX2dldF92Y3B1X2J5X2lkKHMtXHUwMDNla3ZtLCBjcHUpO1xuIFx0aWYgKHVubGlrZWx5KHZjcHUgPT0gTlVMTCkpIHtcbi1cdFx0a3ZtX2VycihcIiVzOiBpbnZhbGlkIHRhcmdldCBjcHU6ICVkXFxuXCIsIF9fZnVuY19fLCBjcHUpO1xuK1x0XHRrdm1fcHJfdW5pbXBsKFwiJXM6IGludmFsaWQgdGFyZ2V0IGNwdTogJWRcXG5cIiwgX19mdW5jX18sIGNwdSk7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbkBAIC02Nyw4ICs2OCwxMSBAQCBzdGF0aWMgdm9pZCBlaW9pbnRjX3VwZGF0ZV9pcnEoc3RydWN0IGxvb25nYXJjaF9laW9pbnRjICpzLCBpbnQgaXJxLCBpbnQgbGV2ZWwpXG4gXHRpZiAoZm91bmQgXHUwMDNjIEVJT0lOVENfSVJRUylcbiBcdFx0cmV0dXJuOyAvKiBvdGhlciBpcnEgaXMgaGFuZGxpbmcsIG5lZWRuJ3QgdXBkYXRlIHBhcmVudCBpcnEgKi9cbiBcbi1cdHZjcHVfaXJxLmlycSA9IGxldmVsID8gKElOVF9IV0kwICsgaXBudW0pIDogLShJTlRfSFdJMCArIGlwbnVtKTtcbi1cdGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdCh2Y3B1LCBcdTAwMjZ2Y3B1X2lycSk7XG4rXHRpZiAobGV2ZWwpXG4rXHRcdGt2bV9xdWV1ZV9pcnEodmNwdSwgSU5UX0hXSTAgKyBpcG51bSk7XG4rXHRlbHNlXG4rXHRcdGt2bV9kZXF1ZXVlX2lycSh2Y3B1LCBJTlRfSFdJMCArIGlwbnVtKTtcbitcdGt2bV92Y3B1X2tpY2sodmNwdSk7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBlaW9pbnRjX3VwZGF0ZV9zd19jb3JlbWFwKHN0cnVjdCBsb29uZ2FyY2hfZWlvaW50YyAqcyxcbkBAIC0xNjUsMTIgKzE2OSwxMiBAQCBzdGF0aWMgaW50IGt2bV9laW9pbnRjX3JlYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0c3RydWN0IGxvb25nYXJjaF9laW9pbnRjICplaW9pbnRjID0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5laW9pbnRjO1xuIFxuIFx0aWYgKCFlaW9pbnRjKSB7XG4tXHRcdGt2bV9lcnIoXCIlczogZWlvaW50YyBpcnFjaGlwIG5vdCB2YWxpZCFcXG5cIiwgX19mdW5jX18pO1xuK1x0XHRrdm1fcHJfdW5pbXBsKFwiJXM6IGVpb2ludGMgaXJxY2hpcCBub3QgdmFsaWQhXFxuXCIsIF9fZnVuY19fKTtcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG4gXHRpZiAoYWRkciBcdTAwMjYgKGxlbiAtIDEpKSB7XG4tXHRcdGt2bV9lcnIoXCIlczogZWlvaW50YyBub3QgYWxpZ25lZCBhZGRyICVsbHggbGVuICVkXFxuXCIsIF9fZnVuY19fLCBhZGRyLCBsZW4pO1xuK1x0XHRrdm1fcHJfdW5pbXBsKFwiJXM6IGVpb2ludGMgbm90IGFsaWduZWQgYWRkciAlbGx4IGxlbiAlZFxcblwiLCBfX2Z1bmNfXywgYWRkciwgbGVuKTtcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG5AQCAtMjk3LDEyICszMDEsMTIgQEAgc3RhdGljIGludCBrdm1fZWlvaW50Y193cml0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRzdHJ1Y3QgbG9vbmdhcmNoX2Vpb2ludGMgKmVpb2ludGMgPSB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmVpb2ludGM7XG4gXG4gXHRpZiAoIWVpb2ludGMpIHtcbi1cdFx0a3ZtX2VycihcIiVzOiBlaW9pbnRjIGlycWNoaXAgbm90IHZhbGlkIVxcblwiLCBfX2Z1bmNfXyk7XG4rXHRcdGt2bV9wcl91bmltcGwoXCIlczogZWlvaW50YyBpcnFjaGlwIG5vdCB2YWxpZCFcXG5cIiwgX19mdW5jX18pO1xuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbiBcdGlmIChhZGRyIFx1MDAyNiAobGVuIC0gMSkpIHtcbi1cdFx0a3ZtX2VycihcIiVzOiBlaW9pbnRjIG5vdCBhbGlnbmVkIGFkZHIgJWxseCBsZW4gJWRcXG5cIiwgX19mdW5jX18sIGFkZHIsIGxlbik7XG4rXHRcdGt2bV9wcl91bmltcGwoXCIlczogZWlvaW50YyBub3QgYWxpZ25lZCBhZGRyICVsbHggbGVuICVkXFxuXCIsIF9fZnVuY19fLCBhZGRyLCBsZW4pO1xuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbkBAIC0zNDUsNyArMzQ5LDcgQEAgc3RhdGljIGludCBrdm1fZWlvaW50Y192aXJ0X3JlYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0c3RydWN0IGxvb25nYXJjaF9laW9pbnRjICplaW9pbnRjID0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5laW9pbnRjO1xuIFxuIFx0aWYgKCFlaW9pbnRjKSB7XG4tXHRcdGt2bV9lcnIoXCIlczogZWlvaW50YyBpcnFjaGlwIG5vdCB2YWxpZCFcXG5cIiwgX19mdW5jX18pO1xuK1x0XHRrdm1fcHJfdW5pbXBsKFwiJXM6IGVpb2ludGMgaXJxY2hpcCBub3QgdmFsaWQhXFxuXCIsIF9fZnVuY19fKTtcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG5AQCAtMzc1LDcgKzM3OSw3IEBAIHN0YXRpYyBpbnQga3ZtX2Vpb2ludGNfdmlydF93cml0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRzdHJ1Y3QgbG9vbmdhcmNoX2Vpb2ludGMgKmVpb2ludGMgPSB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmVpb2ludGM7XG4gXG4gXHRpZiAoIWVpb2ludGMpIHtcbi1cdFx0a3ZtX2VycihcIiVzOiBlaW9pbnRjIGlycWNoaXAgbm90IHZhbGlkIVxcblwiLCBfX2Z1bmNfXyk7XG4rXHRcdGt2bV9wcl91bmltcGwoXCIlczogZWlvaW50YyBpcnFjaGlwIG5vdCB2YWxpZCFcXG5cIiwgX19mdW5jX18pO1xuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbkBAIC01MDIsNyArNTA2LDcgQEAgc3RhdGljIGludCBrdm1fZWlvaW50Y19yZWdzX2FjY2VzcyhzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LFxuIFx0XHRwID0gKHZvaWQgKilzLVx1MDAzZWNvcmVtYXAgKyBvZmZzZXQgKiA0O1xuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4tXHRcdGt2bV9lcnIoXCIlczogdW5rbm93biBlaW9pbnRjIHJlZ2lzdGVyLCBhZGRyID0gJWRcXG5cIiwgX19mdW5jX18sIGFkZHIpO1xuK1x0XHRrdm1fcHJfdW5pbXBsKFwiJXM6IHVua25vd24gZWlvaW50YyByZWdpc3RlciwgYWRkciA9ICVkXFxuXCIsIF9fZnVuY19fLCBhZGRyKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG5AQCAtNTQ2LDcgKzU1MCw3IEBAIHN0YXRpYyBpbnQga3ZtX2Vpb2ludGNfc3dfc3RhdHVzX2FjY2VzcyhzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LFxuIFx0XHRwID0gXHUwMDI2cy1cdTAwM2VzdGF0dXM7XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbi1cdFx0a3ZtX2VycihcIiVzOiB1bmtub3duIGVpb2ludGMgcmVnaXN0ZXIsIGFkZHIgPSAlZFxcblwiLCBfX2Z1bmNfXywgYWRkcik7XG4rXHRcdGt2bV9wcl91bmltcGwoXCIlczogdW5rbm93biBlaW9pbnRjIHJlZ2lzdGVyLCBhZGRyID0gJWRcXG5cIiwgX19mdW5jX18sIGFkZHIpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jIGIvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmNcbmluZGV4IDRmYTA4OTdkN2JkYjAwLi5mMzBkMGQxM2Y1NGQwNSAxMDA2NDRcbi0tLSBhL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jXG4rKysgYi9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuY1xuQEAgLTEwLDE2ICsxMCwxNSBAQFxuIHN0YXRpYyB2b2lkIGlwaV9zZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1aW50MzJfdCBkYXRhKVxuIHtcbiBcdHVpbnQzMl90IHN0YXR1cztcbi1cdHN0cnVjdCBrdm1faW50ZXJydXB0IGlycTtcbiBcbiBcdHNwaW5fbG9jayhcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXBpX3N0YXRlLmxvY2spO1xuIFx0c3RhdHVzID0gdmNwdS1cdTAwM2VhcmNoLmlwaV9zdGF0ZS5zdGF0dXM7XG4gXHR2Y3B1LVx1MDAzZWFyY2guaXBpX3N0YXRlLnN0YXR1cyB8PSBkYXRhO1xuLVx0c3Bpbl91bmxvY2soXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmlwaV9zdGF0ZS5sb2NrKTtcbiBcdGlmICgoc3RhdHVzID09IDApIFx1MDAyNlx1MDAyNiBkYXRhKSB7XG4tXHRcdGlycS5pcnEgPSBMQVJDSF9JTlRfSVBJO1xuLVx0XHRrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHQodmNwdSwgXHUwMDI2aXJxKTtcbitcdFx0a3ZtX3F1ZXVlX2lycSh2Y3B1LCBMQVJDSF9JTlRfSVBJKTtcbitcdFx0a3ZtX3ZjcHVfa2ljayh2Y3B1KTtcbiBcdH1cbitcdHNwaW5fdW5sb2NrKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5pcGlfc3RhdGUubG9jayk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGlwaV9zZW5kKHN0cnVjdCBrdm0gKmt2bSwgdWludDY0X3QgZGF0YSlcbkBAIC0zMCw3ICsyOSw3IEBAIHN0YXRpYyB2b2lkIGlwaV9zZW5kKHN0cnVjdCBrdm0gKmt2bSwgdWludDY0X3QgZGF0YSlcbiBcdGNwdSA9ICgoZGF0YSBcdTAwMjYgMHhmZmZmZmZmZikgXHUwMDNlXHUwMDNlIDE2KSBcdTAwMjYgMHgzZmY7XG4gXHR2Y3B1ID0ga3ZtX2dldF92Y3B1X2J5X2NwdWlkKGt2bSwgY3B1KTtcbiBcdGlmICh1bmxpa2VseSh2Y3B1ID09IE5VTEwpKSB7XG4tXHRcdGt2bV9lcnIoXCIlczogaW52YWxpZCB0YXJnZXQgY3B1OiAlZFxcblwiLCBfX2Z1bmNfXywgY3B1KTtcbitcdFx0a3ZtX3ByX3VuaW1wbChcIiVzOiBpbnZhbGlkIHRhcmdldCBjcHU6ICVkXFxuXCIsIF9fZnVuY19fLCBjcHUpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG5AQCAtNDAsMTYgKzM5LDE1IEBAIHN0YXRpYyB2b2lkIGlwaV9zZW5kKHN0cnVjdCBrdm0gKmt2bSwgdWludDY0X3QgZGF0YSlcbiBzdGF0aWMgdm9pZCBpcGlfY2xlYXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1aW50NjRfdCBkYXRhKVxuIHtcbiBcdHVpbnQzMl90IHN0YXR1cztcbi1cdHN0cnVjdCBrdm1faW50ZXJydXB0IGlycTtcbiBcbiBcdHNwaW5fbG9jayhcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXBpX3N0YXRlLmxvY2spO1xuIFx0dmNwdS1cdTAwM2VhcmNoLmlwaV9zdGF0ZS5zdGF0dXMgXHUwMDI2PSB+ZGF0YTtcbiBcdHN0YXR1cyA9IHZjcHUtXHUwMDNlYXJjaC5pcGlfc3RhdGUuc3RhdHVzO1xuLVx0c3Bpbl91bmxvY2soXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmlwaV9zdGF0ZS5sb2NrKTtcbiBcdGlmIChzdGF0dXMgPT0gMCkge1xuLVx0XHRpcnEuaXJxID0gLUxBUkNIX0lOVF9JUEk7XG4tXHRcdGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdCh2Y3B1LCBcdTAwMjZpcnEpO1xuK1x0XHRrdm1fZGVxdWV1ZV9pcnEodmNwdSwgTEFSQ0hfSU5UX0lQSSk7XG4rXHRcdGt2bV92Y3B1X2tpY2sodmNwdSk7XG4gXHR9XG4rXHRzcGluX3VubG9jayhcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXBpX3N0YXRlLmxvY2spO1xuIH1cbiBcbiBzdGF0aWMgdWludDY0X3QgcmVhZF9tYWlsYm94KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IG9mZnNldCwgaW50IGxlbilcbkBAIC02NywxMSArNjUsOCBAQCBzdGF0aWMgdWludDY0X3QgcmVhZF9tYWlsYm94KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IG9mZnNldCwgaW50IGxlbilcbiBcdFx0cmV0dXJuIGRhdGEgXHUwMDI2IDB4ZmZmZjtcbiBcdGNhc2UgNDpcbiBcdFx0cmV0dXJuIGRhdGEgXHUwMDI2IDB4ZmZmZmZmZmY7XG4tXHRjYXNlIDg6XG4tXHRcdHJldHVybiBkYXRhO1xuIFx0ZGVmYXVsdDpcbi1cdFx0a3ZtX2VycihcIiVzOiB1bmtub3duIGRhdGEgbGVuOiAlZFxcblwiLCBfX2Z1bmNfXywgbGVuKTtcbi1cdFx0cmV0dXJuIDA7XG4rXHRcdHJldHVybiBkYXRhO1xuIFx0fVxuIH1cbiBcbkBAIC05MiwxMSArODcsOSBAQCBzdGF0aWMgdm9pZCB3cml0ZV9tYWlsYm94KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IG9mZnNldCwgdWludDY0X3QgZGF0YSwgaW50XG4gXHRjYXNlIDQ6XG4gXHRcdCoodW5zaWduZWQgaW50ICopcGJ1ZiA9ICh1bnNpZ25lZCBpbnQpZGF0YTtcbiBcdFx0YnJlYWs7XG4tXHRjYXNlIDg6XG4rXHRkZWZhdWx0OlxuIFx0XHQqKHVuc2lnbmVkIGxvbmcgKilwYnVmID0gKHVuc2lnbmVkIGxvbmcpZGF0YTtcbiBcdFx0YnJlYWs7XG4tXHRkZWZhdWx0OlxuLVx0XHRrdm1fZXJyKFwiJXM6IHVua25vd24gZGF0YSBsZW46ICVkXFxuXCIsIF9fZnVuY19fLCBsZW4pO1xuIFx0fVxuIFx0c3Bpbl91bmxvY2soXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmlwaV9zdGF0ZS5sb2NrKTtcbiB9XG5AQCAtMTEwLDcgKzEwMyw3IEBAIHN0YXRpYyBpbnQgbWFpbF9zZW5kKHN0cnVjdCBrdm0gKmt2bSwgdWludDY0X3QgZGF0YSlcbiBcdGNwdSA9ICgoZGF0YSBcdTAwMjYgMHhmZmZmZmZmZikgXHUwMDNlXHUwMDNlIDE2KSBcdTAwMjYgMHgzZmY7XG4gXHR2Y3B1ID0ga3ZtX2dldF92Y3B1X2J5X2NwdWlkKGt2bSwgY3B1KTtcbiBcdGlmICh1bmxpa2VseSh2Y3B1ID09IE5VTEwpKSB7XG4tXHRcdGt2bV9lcnIoXCIlczogaW52YWxpZCB0YXJnZXQgY3B1OiAlZFxcblwiLCBfX2Z1bmNfXywgY3B1KTtcbitcdFx0a3ZtX3ByX3VuaW1wbChcIiVzOiBpbnZhbGlkIHRhcmdldCBjcHU6ICVkXFxuXCIsIF9fZnVuY19fLCBjcHUpO1xuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcdG1haWxib3ggPSAoKGRhdGEgXHUwMDI2IDB4ZmZmZmZmZmYpIFx1MDAzZVx1MDAzZSAyKSBcdTAwMjYgMHg3O1xuQEAgLTE0NCw3ICsxMzcsNyBAQCBzdGF0aWMgaW50IHNlbmRfaXBpX2RhdGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBhZGRyLCB1aW50NjRfdCBkYXRhKVxuIFx0XHRyZXQgPSBrdm1faW9fYnVzX3JlYWQodmNwdSwgS1ZNX0lPQ1NSX0JVUywgYWRkciwgNCwgXHUwMDI2dmFsKTtcbiBcdFx0c3JjdV9yZWFkX3VubG9jayhcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VzcmN1LCBpZHgpO1xuIFx0XHRpZiAodW5saWtlbHkocmV0KSkge1xuLVx0XHRcdGt2bV9lcnIoXCIlczogOiByZWFkIGRhdGEgZnJvbSBhZGRyICVsbHggZmFpbGVkXFxuXCIsIF9fZnVuY19fLCBhZGRyKTtcbitcdFx0XHRrdm1fcHJfdW5pbXBsKFwiJXM6IDogcmVhZCBkYXRhIGZyb20gYWRkciAlbGx4IGZhaWxlZFxcblwiLCBfX2Z1bmNfXywgYWRkcik7XG4gXHRcdFx0cmV0dXJuIDA7XG4gXHRcdH1cbiBcdFx0LyogQ29uc3RydWN0IHRoZSBtYXNrIGJ5IHNjYW5uaW5nIHRoZSBiaXQgMjctMzAgKi9cbkBAIC0xNjAsNyArMTUzLDcgQEAgc3RhdGljIGludCBzZW5kX2lwaV9kYXRhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgYWRkciwgdWludDY0X3QgZGF0YSlcbiBcdHJldCA9IGt2bV9pb19idXNfd3JpdGUodmNwdSwgS1ZNX0lPQ1NSX0JVUywgYWRkciwgNCwgXHUwMDI2dmFsKTtcbiBcdHNyY3VfcmVhZF91bmxvY2soXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlc3JjdSwgaWR4KTtcbiBcdGlmICh1bmxpa2VseShyZXQpKVxuLVx0XHRrdm1fZXJyKFwiJXM6IDogd3JpdGUgZGF0YSB0byBhZGRyICVsbHggZmFpbGVkXFxuXCIsIF9fZnVuY19fLCBhZGRyKTtcbitcdFx0a3ZtX3ByX3VuaW1wbChcIiVzOiA6IHdyaXRlIGRhdGEgdG8gYWRkciAlbGx4IGZhaWxlZFxcblwiLCBfX2Z1bmNfXywgYWRkcik7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtMTczLDcgKzE2Niw3IEBAIHN0YXRpYyBpbnQgYW55X3NlbmQoc3RydWN0IGt2bSAqa3ZtLCB1aW50NjRfdCBkYXRhKVxuIFx0Y3B1ID0gKChkYXRhIFx1MDAyNiAweGZmZmZmZmZmKSBcdTAwM2VcdTAwM2UgMTYpIFx1MDAyNiAweDNmZjtcbiBcdHZjcHUgPSBrdm1fZ2V0X3ZjcHVfYnlfY3B1aWQoa3ZtLCBjcHUpO1xuIFx0aWYgKHVubGlrZWx5KHZjcHUgPT0gTlVMTCkpIHtcbi1cdFx0a3ZtX2VycihcIiVzOiBpbnZhbGlkIHRhcmdldCBjcHU6ICVkXFxuXCIsIF9fZnVuY19fLCBjcHUpO1xuK1x0XHRrdm1fcHJfdW5pbXBsKFwiJXM6IGludmFsaWQgdGFyZ2V0IGNwdTogJWRcXG5cIiwgX19mdW5jX18sIGNwdSk7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFx0b2Zmc2V0ID0gZGF0YSBcdTAwMjYgMHhmZmZmO1xuQEAgLTE4Niw5ICsxNzksMTMgQEAgc3RhdGljIGludCBsb29uZ2FyY2hfaXBpX3JlYWRsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgYWRkciwgaW50IGxlbiwgdm9pZFxuIFx0dWludDMyX3Qgb2Zmc2V0O1xuIFx0dWludDY0X3QgcmVzID0gMDtcbiBcbi1cdG9mZnNldCA9ICh1aW50MzJfdCkoYWRkciBcdTAwMjYgMHgxZmYpO1xuLVx0V0FSTl9PTl9PTkNFKG9mZnNldCBcdTAwMjYgKGxlbiAtIDEpKTtcbitcdGlmIChhZGRyIFx1MDAyNiAobGVuIC0gMSkpIHtcbitcdFx0Kih1aW50NjRfdCAqKXZhbCA9IHJlcztcbitcdFx0a3ZtX3ByX3VuaW1wbChcIiVzOiBpcGkgbm90IGFsaWduZWQgYWRkciAlbGx4IGxlbiAlZFxcblwiLCBfX2Z1bmNfXywgYWRkciwgbGVuKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4gXG4rXHRvZmZzZXQgPSBhZGRyIC0gSU9DU1JfSVBJX0JBU0U7XG4gXHRzd2l0Y2ggKG9mZnNldCkge1xuIFx0Y2FzZSBJT0NTUl9JUElfU1RBVFVTOlxuIFx0XHRzcGluX2xvY2soXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmlwaV9zdGF0ZS5sb2NrKTtcbkBAIC0yMDQsMTUgKzIwMSwxMCBAQCBzdGF0aWMgaW50IGxvb25nYXJjaF9pcGlfcmVhZGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBhZGRyLCBpbnQgbGVuLCB2b2lkXG4gXHRjYXNlIElPQ1NSX0lQSV9DTEVBUjpcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIElPQ1NSX0lQSV9CVUZfMjAgLi4uIElPQ1NSX0lQSV9CVUZfMzggKyA3OlxuLVx0XHRpZiAob2Zmc2V0ICsgbGVuIFx1MDAzZSBJT0NTUl9JUElfQlVGXzM4ICsgOCkge1xuLVx0XHRcdGt2bV9lcnIoXCIlczogaW52YWxpZCBvZmZzZXQgb3IgbGVuOiBvZmZzZXQgPSAlZCwgbGVuID0gJWRcXG5cIixcbi1cdFx0XHRcdF9fZnVuY19fLCBvZmZzZXQsIGxlbik7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbiBcdFx0cmVzID0gcmVhZF9tYWlsYm94KHZjcHUsIG9mZnNldCwgbGVuKTtcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuLVx0XHRrdm1fZXJyKFwiJXM6IHVua25vd24gYWRkcjogJWxseFxcblwiLCBfX2Z1bmNfXywgYWRkcik7XG4rXHRcdGt2bV9wcl91bmltcGwoXCIlczogdW5rbm93biBhZGRyOiAlbGx4XFxuXCIsIF9fZnVuY19fLCBhZGRyKTtcbiBcdFx0YnJlYWs7XG4gXHR9XG4gXHQqKHVpbnQ2NF90ICopdmFsID0gcmVzO1xuQEAgLTIyNyw5ICsyMTksMTIgQEAgc3RhdGljIGludCBsb29uZ2FyY2hfaXBpX3dyaXRlbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGFkZHIsIGludCBsZW4sIGNvbnNcbiBcbiBcdGRhdGEgPSAqKHVpbnQ2NF90ICopdmFsO1xuIFxuLVx0b2Zmc2V0ID0gKHVpbnQzMl90KShhZGRyIFx1MDAyNiAweDFmZik7XG4tXHRXQVJOX09OX09OQ0Uob2Zmc2V0IFx1MDAyNiAobGVuIC0gMSkpO1xuK1x0aWYgKGFkZHIgXHUwMDI2IChsZW4gLSAxKSkge1xuK1x0XHRrdm1fcHJfdW5pbXBsKFwiJXM6IGlwaSBub3QgYWxpZ25lZCBhZGRyICVsbHggbGVuICVkXFxuXCIsIF9fZnVuY19fLCBhZGRyLCBsZW4pO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbiBcbitcdG9mZnNldCA9IGFkZHIgLSBJT0NTUl9JUElfQkFTRTtcbiBcdHN3aXRjaCAob2Zmc2V0KSB7XG4gXHRjYXNlIElPQ1NSX0lQSV9TVEFUVVM6XG4gXHRcdGJyZWFrO1xuQEAgLTI0Nyw3ICsyNDIsNyBAQCBzdGF0aWMgaW50IGxvb25nYXJjaF9pcGlfd3JpdGVsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgYWRkciwgaW50IGxlbiwgY29uc1xuIFx0XHRicmVhaztcbiBcdGNhc2UgSU9DU1JfSVBJX0JVRl8yMCAuLi4gSU9DU1JfSVBJX0JVRl8zOCArIDc6XG4gXHRcdGlmIChvZmZzZXQgKyBsZW4gXHUwMDNlIElPQ1NSX0lQSV9CVUZfMzggKyA4KSB7XG4tXHRcdFx0a3ZtX2VycihcIiVzOiBpbnZhbGlkIG9mZnNldCBvciBsZW46IG9mZnNldCA9ICVkLCBsZW4gPSAlZFxcblwiLFxuK1x0XHRcdGt2bV9wcl91bmltcGwoXCIlczogaW52YWxpZCBvZmZzZXQgb3IgbGVuOiBvZmZzZXQgPSAlZCwgbGVuID0gJWRcXG5cIixcbiBcdFx0XHRcdF9fZnVuY19fLCBvZmZzZXQsIGxlbik7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbkBAIC0yNjMsNyArMjU4LDcgQEAgc3RhdGljIGludCBsb29uZ2FyY2hfaXBpX3dyaXRlbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGFkZHIsIGludCBsZW4sIGNvbnNcbiBcdFx0YW55X3NlbmQodmNwdS1cdTAwM2Vrdm0sIGRhdGEpO1xuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4tXHRcdGt2bV9lcnIoXCIlczogdW5rbm93biBhZGRyOiAlbGx4XFxuXCIsIF9fZnVuY19fLCBhZGRyKTtcbitcdFx0a3ZtX3ByX3VuaW1wbChcIiVzOiB1bmtub3duIGFkZHI6ICVsbHhcXG5cIiwgX19mdW5jX18sIGFkZHIpO1xuIFx0XHRicmVhaztcbiBcdH1cbiBcbkBAIC0zMDYsNyArMzAxLDcgQEAgc3RhdGljIGludCBrdm1faXBpX3JlZ3NfYWNjZXNzKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsXG4gXG4gXHR2Y3B1ID0ga3ZtX2dldF92Y3B1X2J5X2lkKGRldi1cdTAwM2Vrdm0sIGNwdSk7XG4gXHRpZiAodW5saWtlbHkodmNwdSA9PSBOVUxMKSkge1xuLVx0XHRrdm1fZXJyKFwiJXM6IGludmFsaWQgdGFyZ2V0IGNwdTogJWRcXG5cIiwgX19mdW5jX18sIGNwdSk7XG4rXHRcdGt2bV9wcl91bmltcGwoXCIlczogaW52YWxpZCB0YXJnZXQgY3B1OiAlZFxcblwiLCBfX2Z1bmNfXywgY3B1KTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG5AQCAtMzQwLDcgKzMzNSw3IEBAIHN0YXRpYyBpbnQga3ZtX2lwaV9yZWdzX2FjY2VzcyhzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LFxuIFx0XHRsZW4gPSA4O1xuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4tXHRcdGt2bV9lcnIoXCIlczogdW5rbm93biBpcGkgcmVnaXN0ZXIsIGFkZHIgPSAlZFxcblwiLCBfX2Z1bmNfXywgYWRkcik7XG4rXHRcdGt2bV9wcl91bmltcGwoXCIlczogdW5rbm93biBpcGkgcmVnaXN0ZXIsIGFkZHIgPSAlZFxcblwiLCBfX2Z1bmNfXywgYWRkcik7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuQEAgLTM3NCw3ICszNjksNyBAQCBzdGF0aWMgaW50IGt2bV9pcGlfZ2V0X2F0dHIoc3RydWN0IGt2bV9kZXZpY2UgKmRldixcbiBcdGNhc2UgS1ZNX0RFVl9MT09OR0FSQ0hfSVBJX0dSUF9SRUdTOlxuIFx0XHRyZXR1cm4ga3ZtX2lwaV9yZWdzX2FjY2VzcyhkZXYsIGF0dHIsIGZhbHNlKTtcbiBcdGRlZmF1bHQ6XG4tXHRcdGt2bV9lcnIoXCIlczogdW5rbm93biBncm91cCAoJWQpXFxuXCIsIF9fZnVuY19fLCBhdHRyLVx1MDAzZWdyb3VwKTtcbitcdFx0a3ZtX3ByX3VuaW1wbChcIiVzOiB1bmtub3duIGdyb3VwICglZClcXG5cIiwgX19mdW5jX18sIGF0dHItXHUwMDNlZ3JvdXApO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiB9XG5AQCAtMzg2LDcgKzM4MSw3IEBAIHN0YXRpYyBpbnQga3ZtX2lwaV9zZXRfYXR0cihzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LFxuIFx0Y2FzZSBLVk1fREVWX0xPT05HQVJDSF9JUElfR1JQX1JFR1M6XG4gXHRcdHJldHVybiBrdm1faXBpX3JlZ3NfYWNjZXNzKGRldiwgYXR0ciwgdHJ1ZSk7XG4gXHRkZWZhdWx0OlxuLVx0XHRrdm1fZXJyKFwiJXM6IHVua25vd24gZ3JvdXAgKCVkKVxcblwiLCBfX2Z1bmNfXywgYXR0ci1cdTAwM2Vncm91cCk7XG4rXHRcdGt2bV9wcl91bmltcGwoXCIlczogdW5rbm93biBncm91cCAoJWQpXFxuXCIsIF9fZnVuY19fLCBhdHRyLVx1MDAzZWdyb3VwKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gfVxuQEAgLTM5OSwxMyArMzk0LDEzIEBAIHN0YXRpYyBpbnQga3ZtX2lwaV9jcmVhdGUoc3RydWN0IGt2bV9kZXZpY2UgKmRldiwgdTMyIHR5cGUpXG4gXHRzdHJ1Y3QgbG9vbmdhcmNoX2lwaSAqcztcbiBcbiBcdGlmICghZGV2KSB7XG4tXHRcdGt2bV9lcnIoXCIlczoga3ZtX2RldmljZSBwdHIgaXMgaW52YWxpZCFcXG5cIiwgX19mdW5jX18pO1xuK1x0XHRrdm1fcHJfdW5pbXBsKFwiJXM6IGt2bV9kZXZpY2UgcHRyIGlzIGludmFsaWQhXFxuXCIsIF9fZnVuY19fKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4gXHRrdm0gPSBkZXYtXHUwMDNla3ZtO1xuIFx0aWYgKGt2bS1cdTAwM2VhcmNoLmlwaSkge1xuLVx0XHRrdm1fZXJyKFwiJXM6IExvb25nQXJjaCBJUEkgaGFzIGFscmVhZHkgYmVlbiBjcmVhdGVkIVxcblwiLCBfX2Z1bmNfXyk7XG4rXHRcdGt2bV9wcl91bmltcGwoXCIlczogTG9vbmdBcmNoIElQSSBoYXMgYWxyZWFkeSBiZWVuIGNyZWF0ZWQhXFxuXCIsIF9fZnVuY19fKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG5AQCAtNDI1LDcgKzQyMCw3IEBAIHN0YXRpYyBpbnQga3ZtX2lwaV9jcmVhdGUoc3RydWN0IGt2bV9kZXZpY2UgKmRldiwgdTMyIHR5cGUpXG4gXHRyZXQgPSBrdm1faW9fYnVzX3JlZ2lzdGVyX2Rldihrdm0sIEtWTV9JT0NTUl9CVVMsIElPQ1NSX0lQSV9CQVNFLCBJT0NTUl9JUElfU0laRSwgZGV2aWNlKTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tXHRcdGt2bV9lcnIoXCIlczogSW5pdGlhbGl6ZSBJT0NTUiBkZXYgZmFpbGVkLCByZXQgPSAlZFxcblwiLCBfX2Z1bmNfXywgcmV0KTtcbitcdFx0a3ZtX3ByX3VuaW1wbChcIiVzOiBJbml0aWFsaXplIElPQ1NSIGRldiBmYWlsZWQsIHJldCA9ICVkXFxuXCIsIF9fZnVuY19fLCByZXQpO1xuIFx0XHRnb3RvIGVycjtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9wY2hfcGljLmMgYi9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9wY2hfcGljLmNcbmluZGV4IDE3NWE2MzBhY2ViNDE2Li5lN2I3NzcwNWM1MTZhYyAxMDA2NDRcbi0tLSBhL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL3BjaF9waWMuY1xuKysrIGIvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvcGNoX3BpYy5jXG5AQCAtMTUxLDEyICsxNTEsMTIgQEAgc3RhdGljIGludCBrdm1fcGNoX3BpY19yZWFkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdHN0cnVjdCBsb29uZ2FyY2hfcGNoX3BpYyAqcyA9IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gucGNoX3BpYztcbiBcbiBcdGlmICghcykge1xuLVx0XHRrdm1fZXJyKFwiJXM6IHBjaCBwaWMgaXJxY2hpcCBub3QgdmFsaWQhXFxuXCIsIF9fZnVuY19fKTtcbitcdFx0a3ZtX3ByX3VuaW1wbChcIiVzOiBwY2ggcGljIGlycWNoaXAgbm90IHZhbGlkIVxcblwiLCBfX2Z1bmNfXyk7XG4gXHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXG4gXHRpZiAoYWRkciBcdTAwMjYgKGxlbiAtIDEpKSB7XG4tXHRcdGt2bV9lcnIoXCIlczogcGNoIHBpYyBub3QgYWxpZ25lZCBhZGRyICVsbHggbGVuICVkXFxuXCIsIF9fZnVuY19fLCBhZGRyLCBsZW4pO1xuK1x0XHRrdm1fcHJfdW5pbXBsKFwiJXM6IHBjaCBwaWMgbm90IGFsaWduZWQgYWRkciAlbGx4IGxlbiAlZFxcblwiLCBfX2Z1bmNfXywgYWRkciwgbGVuKTtcbiBcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbkBAIC0yNTAsMTIgKzI1MCwxMiBAQCBzdGF0aWMgaW50IGt2bV9wY2hfcGljX3dyaXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdHN0cnVjdCBsb29uZ2FyY2hfcGNoX3BpYyAqcyA9IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gucGNoX3BpYztcbiBcbiBcdGlmICghcykge1xuLVx0XHRrdm1fZXJyKFwiJXM6IHBjaCBwaWMgaXJxY2hpcCBub3QgdmFsaWQhXFxuXCIsIF9fZnVuY19fKTtcbitcdFx0a3ZtX3ByX3VuaW1wbChcIiVzOiBwY2ggcGljIGlycWNoaXAgbm90IHZhbGlkIVxcblwiLCBfX2Z1bmNfXyk7XG4gXHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXG4gXHRpZiAoYWRkciBcdTAwMjYgKGxlbiAtIDEpKSB7XG4tXHRcdGt2bV9lcnIoXCIlczogcGNoIHBpYyBub3QgYWxpZ25lZCBhZGRyICVsbHggbGVuICVkXFxuXCIsIF9fZnVuY19fLCBhZGRyLCBsZW4pO1xuK1x0XHRrdm1fcHJfdW5pbXBsKFwiJXM6IHBjaCBwaWMgbm90IGFsaWduZWQgYWRkciAlbGx4IGxlbiAlZFxcblwiLCBfX2Z1bmNfXywgYWRkciwgbGVuKTtcbiBcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbkBAIC0zOTAsMTMgKzM5MCwxMyBAQCBzdGF0aWMgaW50IGt2bV9wY2hfcGljX3NldF9hdHRyKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsXG4gXHRcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcbiBcdFx0XHRpZiAoIWRldi1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5wY2hfcGljKSB7XG4tXHRcdFx0XHRrdm1fZXJyKFwiJXM6IHBsZWFzZSBjcmVhdGUgcGNoX3BpYyBpcnFjaGlwIGZpcnN0IVxcblwiLCBfX2Z1bmNfXyk7XG4rXHRcdFx0XHRrdm1fcHJfdW5pbXBsKFwiJXM6IHBjaF9waWMgaXJxY2hpcCBub3QgY3JlYXRlZFxcblwiLCBfX2Z1bmNfXyk7XG4gXHRcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcdFx0XHR9XG4gXG4gXHRcdFx0cmV0dXJuIGt2bV9wY2hfcGljX2luaXQoZGV2LCBhZGRyKTtcbiBcdFx0ZGVmYXVsdDpcbi1cdFx0XHRrdm1fZXJyKFwiJXM6IHVua25vd24gZ3JvdXAgKCVkKSBhdHRyICglbGxkKVxcblwiLCBfX2Z1bmNfXywgYXR0ci1cdTAwM2Vncm91cCxcbitcdFx0XHRrdm1fcHJfdW5pbXBsKFwiJXM6IHVua25vd24gZ3JvdXAgKCVkKSBhdHRyICglbGxkKVxcblwiLCBfX2Z1bmNfXywgYXR0ci1cdTAwM2Vncm91cCxcbiBcdFx0XHRcdFx0YXR0ci1cdTAwM2VhdHRyKTtcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0fVxuZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL2t2bS92Y3B1LmMgYi9hcmNoL2xvb25nYXJjaC9rdm0vdmNwdS5jXG5pbmRleCAyMGMyMDdkODBlMzFhZS4uZjgxZGFkYzYyYzk4NmUgMTAwNjQ0XG4tLS0gYS9hcmNoL2xvb25nYXJjaC9rdm0vdmNwdS5jXG4rKysgYi9hcmNoL2xvb25nYXJjaC9rdm0vdmNwdS5jXG5AQCAtMTQ2NSw2ICsxNDY1LDkgQEAgaW50IGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1faW50ZXJydXB0ICppcnEpXG4gXHRpZiAodmVjdG9yIFx1MDAzZT0gRVhDQ09ERV9JTlRfTlVNKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbitcdGlmIChrdm1fYXJjaF9pcnFjaGlwX2luX2tlcm5lbCh2Y3B1LVx1MDAzZWt2bSkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuIFx0aWYgKCFrdm1fZ3Vlc3RfaGFzX21zZ2ludChcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gpIFx1MDAyNlx1MDAyNiAodmVjdG9yID09IElOVF9BVkVDKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG5AQCAtMTQ3Myw3ICsxNDc2LDcgQEAgaW50IGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1faW50ZXJydXB0ICppcnEpXG4gXHRlbHNlIGlmIChpbnRyIFx1MDAzYyAwKVxuIFx0XHRrdm1fZGVxdWV1ZV9pcnEodmNwdSwgLWludHIpO1xuIFx0ZWxzZSB7XG4tXHRcdGt2bV9lcnIoXCIlczogaW52YWxpZCBpbnRlcnJ1cHQgaW9jdGwgJWRcXG5cIiwgX19mdW5jX18sIGlycS1cdTAwM2VpcnEpO1xuK1x0XHRrdm1fcHJfdW5pbXBsKFwiJXM6IGludmFsaWQgaW50ZXJydXB0IGlvY3RsICVkXFxuXCIsIF9fZnVuY19fLCBpcnEtXHUwMDNlaXJxKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxMDoyMDoyMS45MjU2MzY5MTFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzY4MTc1OTQ3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipMb29uZ0FyY2ggS1ZNIFBhdGNoIEFuYWx5c2lzOiBBIEZvY3VzZWQgRXhhbWluYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGZvciBMb29uZ0FyY2ggS1ZNLCBhbmQgaXQgbG9va3MgbGlrZSBhIHRhcmdldGVkIHJlZmFjdG9yaW5nIG9mIGludGVycnVwdCBoYW5kbGluZy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2hhdCdzIHRoZSBtb3RpdmF0aW9uIGFuZCwgY3JpdGljYWxseSwgaXMgdGhpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlP1wiIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2VzIHNlZW0gdG8gcmV2b2x2ZSBhcm91bmQgcmVwbGFjaW5nIGBrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHRgIHdpdGggYGt2bV9xdWV1ZV9pcnFgIGFuZCBga3ZtX2RlcXVldWVfaXJxYCBpbiBzZXZlcmFsIGNydWNpYWwgYXJlYXM6IGBkbXNpbnRjX2RlbGl2ZXJfbXNpX3RvX3ZjcHVgLCBgZWlvaW50Y191cGRhdGVfaXJxYCwgYGlwaV9zZXRgLCBhbmQgYGlwaV9jbGVhcmAuIFRoZSBwYXRjaCBhbHNvIGludHJvZHVjZXMgY2hlY2tzIGZvciBga3ZtX2FyY2hfaXJxY2hpcF9pbl9rZXJuZWxgIGluIGBrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHRgLCBlZmZlY3RpdmVseSBnYXRpbmcgdGhhdCBmdW5jdGlvbmFsaXR5IHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucywgYW5kIGl0IGxvb2tzIGxpa2Ugc29tZSBjaGVja3MgaW4gYGxvb25nYXJjaF9pcGlfcmVhZGxgIGFuZCBgbG9vbmdhcmNoX2lwaV93cml0ZWxgIHRvIHZhbGlkYXRlIGFkZHJlc3MgYWxpZ25tZW50LlxuXG5UaGUgZmlyc3QgdGhpbmcgSSdtIGNoZWNraW5nIGlzIHJlYWNoYWJpbGl0eS4gSXMgdGhpcyBjb2RlIHBhdGggZXZlbiAqcG9zc2libGUqIHRvIGhpdCwgYW5kIGhvdz8gR2l2ZW4gdGhhdCBpdCdzIExvb25nQXJjaC1zcGVjaWZpYywgSSBrbm93IHRoaXMgaXMgb25seSBhY2Nlc3NpYmxlIHdpdGhpbiBhIExvb25nQXJjaCBLVk0gZW52aXJvbm1lbnQuIFNwZWNpZmljYWxseSwgdGhlIHBhdGNoIHRvdWNoZXMgS1ZNIGlvY3Rscy5cblxuTXkgZXhwZXJ0IGluc3RpbmN0IGdvZXMgc3RyYWlnaHQgdG8gZnV6emluZy4gQ2FuIHdlIHN0cmVzcy10ZXN0IHRoaXMgbmV3IGNvZGU/IFN5emthbGxlciBpcyBteSB1c3VhbCBnby10bywgYnV0IEkgaW1tZWRpYXRlbHkgaGl0IGEgc25hZzogc3l6a2FsbGVyIGhhcyBoaXN0b3JpY2FsbHkgYmVlbiBjaGFsbGVuZ2luZyB0byB1c2Ugd2l0aCBub24teDg2IGFyY2hpdGVjdHVyZXMgd2l0aG91dCBtb3JlIHNwZWNpZmljIHNldHVwLiBTbyBJIGRpZyBpbnRvIGlmIHRoZXJlIGlzIGEgd2F5IHRvIGZ1enogTG9vbmdBcmNoLiBJJ20gcmVtaW5kZWQgdGhhdCB0aGUgaW5zdHJ1Y3Rpb25zIHN0YXRlIHRoZSBjb2RlIHBhdGhzIHNob3VsZG4ndCBiZSB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLiBUaGF0J3MgYSBnb29kIHByb21wdCBhbmQgb25lIHRoYXQncyBiZWVuIGhlbHBmdWwgaW4gdGhlIHBhc3QuIExvb25nQXJjaCBRRU1VIGFuZCBzeXprYWxsZXIgb24gTG9vbmdBcmNoIGFyZSBub3cgcGxhdXNpYmxlLlxuXG5MZXQncyBhc3N1bWUgdGhhdCBpdCdzIHdvcnRoIGZ1enppbmcsIGJhc2VkIG9uIHRoaXMuXG5cbkknbSB0aGlua2luZywgXCJPa2F5LCBpZiBpdCdzIGZ1enphYmxlLCB3aGF0J3MgcmVxdWlyZWQ/XCIgYENPTkZJR19LVk1gIGlzIG9idmlvdXMsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBzdWJ0bGUgZGVwZW5kZW5jaWVzLiBUaGUgY29uZmlnIHJlcXVpcmVtZW50cyBiZWNvbWUgYSBjcnVjaWFsIG5leHQgc3RlcCB0byBmaWd1cmUgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTAwMCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NDMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxMDoyMDozNS42MDczOTk1MzdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2MDUzNzYzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvbG9vbmdhcmNoL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnLTE5LVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1cXG5hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZy0yMS1cXHR0cmlzdGF0ZSBcXFwiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxMDoyMDozNy4zNjc5NDIxMTdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODE5ODMwNjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktWTSBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGludG8gdGhpcyBLVk0gc3R1ZmYgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIHRoYXQgYENPTkZJR19LVk1gIGlzIGdvaW5nIHRvIGJlIGEgY3J1Y2lhbCBzdGFydGluZyBwb2ludC4gVGhhdCBzZWVtcyBwcmV0dHkgb2J2aW91cywgYnV0IGxldCdzIG5vdCBtYWtlIGFueSBhc3N1bXB0aW9ucy4gQmVmb3JlIEkgZGlnIHRvbyBkZWVwLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgSSBtaWdodCBiZSBvdmVybG9va2luZy4gSXQncyBlYXN5IHRvIGdldCB0dW5uZWwgdmlzaW9uLiBCZXN0IHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlIGZpcnN0LiBSaWdodCwgbGV0J3MgdGFrZSBhIHF1aWNrIGxvb2sgYXQgdGhlIGBhcmNoL2xvb25nYXJjaC9rdm0vTWFrZWZpbGVgIGZvciBhbnkgcmVsYXRlZCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBvciBidWlsZCBkZXBlbmRlbmNpZXMuIFRoYXQgTWFrZWZpbGUgc2hvdWxkIGhvbGQgdGhlIGtleSwgb3IgYXQgbGVhc3QgcG9pbnQgbWUgaW4gdGhlIHJpZ2h0IGRpcmVjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwNjAsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxMDoyMDo0Mi4xODc3NzYxOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODI5Nzg0MjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiLipcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9sb29uZ2FyY2gva3ZtL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvbG9vbmdhcmNoL2t2bS9NYWtlZmlsZToxOiMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG5hcmNoL2xvb25nYXJjaC9rdm0vTWFrZWZpbGU6MjojXFxuYXJjaC9sb29uZ2FyY2gva3ZtL01ha2VmaWxlOjM6IyBNYWtlZmlsZSBmb3IgTG9vbmdBcmNoIEtWTSBzdXBwb3J0XFxuYXJjaC9sb29uZ2FyY2gva3ZtL01ha2VmaWxlOjQ6I1xcbmFyY2gvbG9vbmdhcmNoL2t2bS9NYWtlZmlsZTo1OlxcbmFyY2gvbG9vbmdhcmNoL2t2bS9NYWtlZmlsZTo2OmluY2x1ZGUgJChzcmN0cmVlKS92aXJ0L2t2bS9NYWtlZmlsZS5rdm1cXG5hcmNoL2xvb25nYXJjaC9rdm0vTWFrZWZpbGU6NzpcXG5hcmNoL2xvb25nYXJjaC9rdm0vTWFrZWZpbGU6ODpvYmotJChDT05GSUdfS1ZNKSArPSBrdm0ub1xcbmFyY2gvbG9vbmdhcmNoL2t2bS9NYWtlZmlsZTo5OlxcbmFyY2gvbG9vbmdhcmNoL2t2bS9NYWtlZmlsZToxMDpvYmoteSArPSBzd2l0Y2gub1xcbmFyY2gvbG9vbmdhcmNoL2t2bS9NYWtlZmlsZToxMTpcXG5hcmNoL2xvb25nYXJjaC9rdm0vTWFrZWZpbGU6MTI6a3ZtLXkgKz0gZXhpdC5vXFxuYXJjaC9sb29uZ2FyY2gva3ZtL01ha2VmaWxlOjEzOmt2bS15ICs9IGludGVycnVwdC5vXFxuYXJjaC9sb29uZ2FyY2gva3ZtL01ha2VmaWxlOjE0Omt2bS15ICs9IG1haW4ub1xcbmFyY2gvbG9vbmdhcmNoL2t2bS9NYWtlZmlsZToxNTprdm0teSArPSBtbXUub1xcbmFyY2gvbG9vbmdhcmNoL2t2bS9NYWtlZmlsZToxNjprdm0teSArPSB0aW1lci5vXFxuYXJjaC9sb29uZ2FyY2gva3ZtL01ha2VmaWxlOjE3Omt2bS15ICs9IHRsYi5vXFxuYXJjaC9sb29uZ2FyY2gva3ZtL01ha2VmaWxlOjE4Omt2bS15ICs9IHZjcHUub1xcbmFyY2gvbG9vbmdhcmNoL2t2bS9NYWtlZmlsZToxOTprdm0teSArPSB2bS5vXFxuYXJjaC9sb29uZ2FyY2gva3ZtL01ha2VmaWxlOjIwOmt2bS15ICs9IGludGMvaXBpLm9cXG5hcmNoL2xvb25nYXJjaC9rdm0vTWFrZWZpbGU6MjE6a3ZtLXkgKz0gaW50Yy9kbXNpbnRjLm9cXG5hcmNoL2xvb25nYXJjaC9rdm0vTWFrZWZpbGU6MjI6a3ZtLXkgKz0gaW50Yy9laW9pbnRjLm9cXG5hcmNoL2xvb25nYXJjaC9rdm0vTWFrZWZpbGU6MjM6a3ZtLXkgKz0gaW50Yy9wY2hfcGljLm9cXG5hcmNoL2xvb25nYXJjaC9rdm0vTWFrZWZpbGU6MjQ6a3ZtLXkgKz0gaXJxZmQub1xcbmFyY2gvbG9vbmdhcmNoL2t2bS9NYWtlZmlsZToyNTpcXG5hcmNoL2xvb25nYXJjaC9rdm0vTWFrZWZpbGU6MjY6Q0ZMQUdTX2V4aXQub1xcdCs9ICQoY2FsbCBjYy1kaXNhYmxlLXdhcm5pbmcsIG92ZXJyaWRlLWluaXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDEwOjIwOjQyLjY3MDc2MTI0NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMzU2NDQ4MjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIG9uIEtleSBLVk0gQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEkndmUgZ290IGBDT05GSUdfS1ZNYCBmbGFnZ2VkIGFzIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIGl0ZW0uIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBjb3JlIGNoYW5nZXMuIFRoZSBhbmFseXNpcyBpbmRpY2F0ZXMgYSBzaWduaWZpY2FudCBudW1iZXIgb2YgZnVuY3Rpb25zIGhhdmUgYmVlbiB0b3VjaGVkLCBidXQgbWFueSBhcmUganVzdCB0cml2aWFsIHJlcGxhY2VtZW50cyBvZiBga3ZtX2VycmAgd2l0aCBga3ZtX3ByX3VuaW1wbGAuIEknbSBnb2luZyB0byBmb2N1cyBvbiB0aGUgb25lcyB0aGF0IHJlcHJlc2VudCBtb3JlIHN1YnN0YW50aXZlIGFsdGVyYXRpb25zIHRvIHRoZSBLVk0gZnVuY3Rpb25hbGl0eS5cblxuSSd2ZSBpZGVudGlmaWVkIGEgbGlzdCBvZiBtb2RpZmllZCBmdW5jdGlvbnMsIHRoZW4gbmFycm93ZWQgdGhhdCBsaXN0IHRvIHRoZSBvbmVzIHdpdGggc3Vic3RhbnRpYWwgY2hhbmdlcy4gTm93LCBJJ20gc2VsZWN0aW5nIHNvbWUgb2YgdGhlc2UgZnVuY3Rpb25zIHRvIHVzZSBhcyBmb2N1cyBzeW1ib2xzOiBga3ZtX3ZjcHVfaW9jdGxfaW50ZXJydXB0YCwgYGRtc2ludGNfZGVsaXZlcl9tc2lfdG9fdmNwdWAsIGBlaW9pbnRjX3VwZGF0ZV9pcnFgLCBgbG9vbmdhcmNoX2lwaV9yZWFkbGAsIGFuZCBgbG9vbmdhcmNoX2lwaV93cml0ZWxgLlxuXG5MZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBJIGhhdmUgdGhlIGZ1bmN0aW9uIG5hbWVzIGNvcnJlY3Q7IHl1cCwgYWxsIGdvb2QuXG5cblRoZSByZWFzb25pbmcgYmVoaW5kIHRoaXMgc2VsZWN0aW9uPyBUaGUgcGF0Y2ggaXMgZnVuZGFtZW50YWxseSBjaGFuZ2luZyBob3cgaW50ZXJydXB0cyBhcmUgaW5qZWN0ZWQgYW5kIElQSSBoYW5kbGluZyB3b3JrcyB3aXRoaW4gdGhlIExvb25nQXJjaCBLVk0gZW52aXJvbm1lbnQuIFNwZWNpZmljYWxseSwgaXQncyByZXBsYWNpbmcgYGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdGAgd2l0aCBga3ZtX3F1ZXVlX2lycWAgZm9yIGludGVycnVwdCBpbmplY3Rpb24gYW5kIGNvcnJlY3RpbmcgYWxpZ25tZW50IGNoZWNrcyBpbiBJUEkgcmVhZC93cml0ZSBoYW5kbGVycy4gVGhlc2UgZnVuY3Rpb25zIGFyZSBjcml0aWNhbCBiZWNhdXNlIHRoZXkncmUgZGlyZWN0bHkgaW52b2x2ZWQgaW4gaW50ZXJhY3Rpb25zIHRocm91Z2ggS1ZNIGlvY3RscyBhbmQgTU1JTy9JT0NTUiBleGl0cywgbWFraW5nIHRoZW0gYSBnb29kIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcGF0Y2guIFRpbWUgdG8gcmVwb3J0IHRoZXNlIGZpbmRpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzg2NywiT3V0cHV0VG9rZW5zIjoxNTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDEwOjIwOjU0LjAyNzIxMjEyMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQxODY2MTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHRcIixcbiAgICBcImRtc2ludGNfZGVsaXZlcl9tc2lfdG9fdmNwdVwiLFxuICAgIFwiZWlvaW50Y191cGRhdGVfaXJxXCIsXG4gICAgXCJsb29uZ2FyY2hfaXBpX3JlYWRsXCIsXG4gICAgXCJsb29uZ2FyY2hfaXBpX3dyaXRlbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIExvb25nQXJjaCBLVk0gaW50ZXJydXB0IGluamVjdGlvbiBhbmQgSVBJIGhhbmRsaW5nLCByZXBsYWNpbmcga3ZtX3ZjcHVfaW9jdGxfaW50ZXJydXB0IHdpdGgga3ZtX3F1ZXVlX2lycSBhbmQgZml4aW5nIGFsaWdubWVudCBjaGVja3MgaW4gSVBJIHJlYWQvd3JpdGUgaGFuZGxlcnMuIFRoZXNlIGFyZSByZWFjaGFibGUgdmlhIEtWTSBpb2N0bHMgYW5kIE1NSU8vSU9DU1IgZXhpdHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3ZjcHVfaW9jdGxfaW50ZXJydXB0XCIsXG4gICAgXCJkbXNpbnRjX2RlbGl2ZXJfbXNpX3RvX3ZjcHVcIixcbiAgICBcImVpb2ludGNfdXBkYXRlX2lycVwiLFxuICAgIFwibG9vbmdhcmNoX2lwaV9yZWFkbFwiLFxuICAgIFwibG9vbmdhcmNoX2lwaV93cml0ZWxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBMb29uZ0FyY2ggS1ZNIGludGVycnVwdCBpbmplY3Rpb24gYW5kIElQSSBoYW5kbGluZywgcmVwbGFjaW5nIGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdCB3aXRoIGt2bV9xdWV1ZV9pcnEgYW5kIGZpeGluZyBhbGlnbm1lbnQgY2hlY2tzIGluIElQSSByZWFkL3dyaXRlIGhhbmRsZXJzLiBUaGVzZSBhcmUgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIGFuZCBNTUlPL0lPQ1NSIGV4aXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowz7p9m[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-14 10:03:26 +0000 UTC FinishedAt: 2026-07-14 10:20:56 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "a13c140cc289c0b7b3770bce5b3ad42ab35074aa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "a13c140cc289c0b7b3770bce5b3ad42ab35074aa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "1353c962-63a9-49b0-9bf5-26170b2b5a88" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_vcpu_ioctl_interrupt", "dmsintc_deliver_msi_to_vcpu", "eiointc_update_irq", "loongarch_ipi_readl", "loongarch_ipi_writel" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDEwOjIwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV92Y3B1X2lvY3RsX2ludGVycnVwdCYjMzQ7LAogICAgJiMzNDtkbXNpbnRjX2RlbGl2ZXJfbXNpX3RvX3ZjcHUmIzM0OywKICAgICYjMzQ7ZWlvaW50Y191cGRhdGVfaXJxJiMzNDssCiAgICAmIzM0O2xvb25nYXJjaF9pcGlfcmVhZGwmIzM0OywKICAgICYjMzQ7bG9vbmdhcmNoX2lwaV93cml0ZWwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgTG9vbmdBcmNoIEtWTSBpbnRlcnJ1cHQgaW5qZWN0aW9uIGFuZCBJUEkgaGFuZGxpbmcsIHJlcGxhY2luZyBrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHQgd2l0aCBrdm1fcXVldWVfaXJxIGFuZCBmaXhpbmcgYWxpZ25tZW50IGNoZWNrcyBpbiBJUEkgcmVhZC93cml0ZSBoYW5kbGVycy4gVGhlc2UgYXJlIHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyBhbmQgTU1JTy9JT0NTUiBleGl0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxMDoyMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDkzMmEyYWY2MWMwMDg4NGE5OGRiMDI2NzEwNTAwNDY5NDM0NmEzMWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCAxNCAxMDoyMDoxOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9rdm0vZXhpdC5jIGIvYXJjaC9sb29uZ2FyY2gva3ZtL2V4aXQuY1xuaW5kZXggODU3MmI2MzQ3OGJiOTguLjU5MDU4MGQwMzAzZWE5IDEwMDY0NFxuLS0tIGEvYXJjaC9sb29uZ2FyY2gva3ZtL2V4aXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9sb29uZ2FyY2gva3ZtL2V4aXQuY1xuQEAgLTI1Miw3ICYjNDM7MjUyLDcgQEAgaW50IGt2bV9jb21wbGV0ZV9pb2Nzcl9yZWFkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKnJ1bilcbiBcdFx0KmdwciA9ICooczY0ICopcnVuLVx1MDAzZWlvY3NyX2lvLmRhdGE7XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbi1cdFx0a3ZtX2VycihcJiMzNDtCYWQgSU9DU1IgbGVuZ3RoOiAlZCwgYWRkciBpcyAweCVseFxcblwmIzM0OyxcbiYjNDM7XHRcdGt2bV9wcl91bmltcGwoXCYjMzQ7QmFkIElPQ1NSIGxlbmd0aDogJWQsIGFkZHIgaXMgMHglbHhcXG5cJiMzNDssXG4gXHRcdFx0XHRydW4tXHUwMDNlaW9jc3JfaW8ubGVuLCB2Y3B1LVx1MDAzZWFyY2guYmFkdik7XG4gXHRcdGVyID0gRU1VTEFURV9GQUlMO1xuIFx0XHRicmVhaztcbkBAIC0zMjYsNyAmIzQzOzMyNiw3IEBAIHN0YXRpYyBpbnQga3ZtX3RyYXBfaGFuZGxlX2dzcHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIFx0LyogUm9sbGJhY2sgUEMgb25seSBpZiBlbXVsYXRpb24gd2FzIHVuc3VjY2Vzc2Z1bCAqL1xuIFx0aWYgKGVyID09IEVNVUxBVEVfRkFJTCkge1xuLVx0XHRrdm1fZXJyKFwmIzM0O1slI2x4XSVzOiB1bnN1cHBvcnRlZCBnc3ByIGluc3RydWN0aW9uIDB4JTA4eFxcblwmIzM0OyxcbiYjNDM7XHRcdGt2bV9wcl91bmltcGwoXCYjMzQ7WyUjbHhdJXM6IHVuc3VwcG9ydGVkIGdzcHIgaW5zdHJ1Y3Rpb24gMHglMDh4XFxuXCYjMzQ7LFxuIFx0XHRcdGN1cnJfcGMsIF9fZnVuY19fLCBpbnN0LndvcmQpO1xuIFxuIFx0XHRrdm1fYXJjaF92Y3B1X2R1bXBfcmVncyh2Y3B1KTtcbkBAIC00OTEsNyAmIzQzOzQ5MSw3IEBAIGludCBrdm1fZW11X21taW9fcmVhZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGxhcmNoX2luc3QgaW5zdClcbiBcdFx0cmV0dXJuIEVNVUxBVEVfRE9fTU1JTztcbiBcdH1cbiBcbi1cdGt2bV9lcnIoXCYjMzQ7UmVhZCBub3Qgc3VwcG9ydGVkIEluc3Q9MHglMDh4IEAlbHggQmFkVmFkZHI6JSNseFxcblwmIzM0OyxcbiYjNDM7XHRrdm1fcHJfdW5pbXBsKFwmIzM0O1JlYWQgbm90IHN1cHBvcnRlZCBJbnN0PTB4JTA4eCBAJWx4IEJhZFZhZGRyOiUjbHhcXG5cJiMzNDssXG4gXHRcdFx0aW5zdC53b3JkLCB2Y3B1LVx1MDAzZWFyY2gucGMsIHZjcHUtXHUwMDNlYXJjaC5iYWR2KTtcbiBcdGt2bV9hcmNoX3ZjcHVfZHVtcF9yZWdzKHZjcHUpO1xuIFx0dmNwdS1cdTAwM2VtbWlvX25lZWRlZCA9IDA7XG5AQCAtNTI5LDcgJiM0Mzs1MjksNyBAQCBpbnQga3ZtX2NvbXBsZXRlX21taW9fcmVhZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcnVuICpydW4pXG4gXHRcdCpncHIgPSAqKHM2NCAqKXJ1bi1cdTAwM2VtbWlvLmRhdGE7XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbi1cdFx0a3ZtX2VycihcJiMzNDtCYWQgTU1JTyBsZW5ndGg6ICVkLCBhZGRyIGlzIDB4JWx4XFxuXCYjMzQ7LFxuJiM0MztcdFx0a3ZtX3ByX3VuaW1wbChcJiMzNDtCYWQgTU1JTyBsZW5ndGg6ICVkLCBhZGRyIGlzIDB4JWx4XFxuXCYjMzQ7LFxuIFx0XHRcdFx0cnVuLVx1MDAzZW1taW8ubGVuLCB2Y3B1LVx1MDAzZWFyY2guYmFkdik7XG4gXHRcdGVyID0gRU1VTEFURV9GQUlMO1xuIFx0XHRicmVhaztcbkBAIC02NTYsNyAmIzQzOzY1Niw3IEBAIGludCBrdm1fZW11X21taW9fd3JpdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBsYXJjaF9pbnN0IGluc3QpXG4gXHR9XG4gXG4gXHR2Y3B1LVx1MDAzZWFyY2gucGMgPSBjdXJyX3BjO1xuLVx0a3ZtX2VycihcJiMzNDtXcml0ZSBub3Qgc3VwcG9ydGVkIEluc3Q9MHglMDh4IEAlbHggQmFkVmFkZHI6JSNseFxcblwmIzM0OyxcbiYjNDM7XHRrdm1fcHJfdW5pbXBsKFwmIzM0O1dyaXRlIG5vdCBzdXBwb3J0ZWQgSW5zdD0weCUwOHggQCVseCBCYWRWYWRkcjolI2x4XFxuXCYjMzQ7LFxuIFx0XHRcdGluc3Qud29yZCwgdmNwdS1cdTAwM2VhcmNoLnBjLCB2Y3B1LVx1MDAzZWFyY2guYmFkdik7XG4gXHRrdm1fYXJjaF92Y3B1X2R1bXBfcmVncyh2Y3B1KTtcbiBcdC8qIFJvbGxiYWNrIFBDIGlmIGVtdWxhdGlvbiB3YXMgdW5zdWNjZXNzZnVsICovXG5AQCAtNzQ4LDggJiM0Mzs3NDgsOCBAQCBzdGF0aWMgaW50IGt2bV9oYW5kbGVfZnB1X2Rpc2FibGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGVjb2RlKVxuIFx0ICogdHJlYXRlZCBhcyBhIHJlc2VydmVkIGluc3RydWN0aW9uIVxuIFx0ICogSWYgRlBVIGFscmVhZHkgaW4gdXNlLCB3ZSBzaG91bGRuJiMzOTt0IGdldCB0aGlzIGF0IGFsbC5cbiBcdCAqL1xuLVx0aWYgKFdBUk5fT04odmNwdS1cdTAwM2VhcmNoLmF1eF9pbnVzZSBcdTAwMjYgS1ZNX0xBUkNIX0ZQVSkpIHtcbi1cdFx0a3ZtX2VycihcJiMzNDslcyBpbnRlcm5hbCBlcnJvclxcblwmIzM0OywgX19mdW5jX18pO1xuJiM0MztcdGlmICh2Y3B1LVx1MDAzZWFyY2guYXV4X2ludXNlIFx1MDAyNiBLVk1fTEFSQ0hfRlBVKSB7XG4mIzQzO1x0XHRrdm1fcHJfdW5pbXBsKFwmIzM0OyVzIGludGVybmFsIGVycm9yXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4gXHRcdHJ1bi1cdTAwM2VleGl0X3JlYXNvbiA9IEtWTV9FWElUX0lOVEVSTkFMX0VSUk9SO1xuIFx0XHRyZXR1cm4gUkVTVU1FX0hPU1Q7XG4gXHR9XG5AQCAtOTQzLDcgJiM0Mzs5NDMsNyBAQCBzdGF0aWMgaW50IGt2bV9mYXVsdF9uaShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBlY29kZSlcbiBcdC8qIEZldGNoIHRoZSBpbnN0cnVjdGlvbiAqL1xuIFx0aW5zdCA9IHZjcHUtXHUwMDNlYXJjaC5iYWRpO1xuIFx0YmFkdiA9IHZjcHUtXHUwMDNlYXJjaC5iYWR2O1xuLVx0a3ZtX2VycihcJiMzNDtFQ29kZTogJWQgUEM9JSNseCBJbnN0PTB4JTA4eCBCYWRWYWRkcj0lI2x4IEVTVEFUPSUjbHhcXG5cJiMzNDssXG4mIzQzO1x0a3ZtX3ByX3VuaW1wbChcJiMzNDtFQ29kZTogJWQgUEM9JSNseCBJbnN0PTB4JTA4eCBCYWRWYWRkcj0lI2x4IEVTVEFUPSUjbHhcXG5cJiMzNDssXG4gXHRcdFx0ZWNvZGUsIHZjcHUtXHUwMDNlYXJjaC5wYywgaW5zdCwgYmFkdiwgcmVhZF9nY3NyX2VzdGF0KCkpO1xuIFx0a3ZtX2FyY2hfdmNwdV9kdW1wX3JlZ3ModmNwdSk7XG4gXHRrdm1fcXVldWVfZXhjZXB0aW9uKHZjcHUsIEVYQ0NPREVfSU5FLCAwKTtcbmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9kbXNpbnRjLmMgYi9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9kbXNpbnRjLmNcbmluZGV4IGRlMjU3MzVjZTAzOTQ2Li4xYzcxNmUyNGM1YjAyMiAxMDA2NDRcbi0tLSBhL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Rtc2ludGMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZG1zaW50Yy5jXG5AQCAtMjEsNiAmIzQzOzIxLDggQEAgdm9pZCBkbXNpbnRjX2luamVjdF9pcnEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHRvbGQgPSBhdG9taWM2NF9yZWFkKFx1MDAyNihkcy1cdTAwM2V2ZWN0b3JfbWFwW2ldKSk7XG4gXHRcdGlmIChvbGQpXG4gXHRcdFx0dmVjdG9yW2ldID0gYXRvbWljNjRfeGNoZyhcdTAwMjYoZHMtXHUwMDNldmVjdG9yX21hcFtpXSksIDApO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHR2ZWN0b3JbaV0gPSAwO1xuIFx0fVxuIFxuIFx0aWYgKHZlY3RvclswXSkge1xuQEAgLTQ3LDcgJiM0Mzs0OSw2IEBAIHZvaWQgZG1zaW50Y19pbmplY3RfaXJxKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBpbnQgZG1zaW50Y19kZWxpdmVyX21zaV90b192Y3B1KHN0cnVjdCBrdm0gKmt2bSxcbiBcdFx0XHRcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHZlY3RvciwgaW50IGxldmVsKVxuIHtcbi1cdHN0cnVjdCBrdm1faW50ZXJydXB0IHZjcHVfaXJxO1xuIFx0c3RydWN0IGRtc2ludGNfc3RhdGUgKmRzID0gXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmRtc2ludGNfc3RhdGU7XG4gXG4gXHRpZiAoIWxldmVsKVxuQEAgLTU3LDkgJiM0Mzs1OCwxMSBAQCBpbnQgZG1zaW50Y19kZWxpdmVyX21zaV90b192Y3B1KHN0cnVjdCBrdm0gKmt2bSxcbiBcdGlmICghZHMpXG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFxuLVx0dmNwdV9pcnEuaXJxID0gSU5UX0FWRUM7XG4mIzQzO1x0aWYgKCFrdm1fZ3Vlc3RfaGFzX21zZ2ludChcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuIFx0c2V0X2JpdCh2ZWN0b3IsICh1bnNpZ25lZCBsb25nICopXHUwMDI2ZHMtXHUwMDNldmVjdG9yX21hcCk7XG4tXHRrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHQodmNwdSwgXHUwMDI2dmNwdV9pcnEpO1xuJiM0MztcdGt2bV9xdWV1ZV9pcnEodmNwdSwgSU5UX0FWRUMpO1xuIFx0a3ZtX3ZjcHVfa2ljayh2Y3B1KTtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTExNCw3ICYjNDM7MTE3LDcgQEAgc3RhdGljIGludCBrdm1fZG1zaW50Y19jdHJsX2FjY2VzcyhzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LFxuIFx0XHR9XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbi1cdFx0a3ZtX2VycihcJiMzNDslczogdW5rbm93biBkbXNpbnRjIHJlZ2lzdGVyLCBhZGRyID0gJWRcXG5cJiMzNDssIF9fZnVuY19fLCBhZGRyKTtcbiYjNDM7XHRcdGt2bV9wcl91bmltcGwoXCYjMzQ7JXM6IHVua25vd24gZG1zaW50YyByZWdpc3RlciwgYWRkciA9ICVkXFxuXCYjMzQ7LCBfX2Z1bmNfXywgYWRkcik7XG4gXHRcdHJldHVybiAtRU5YSU87XG4gXHR9XG4gXG5AQCAtMTI4LDcgJiM0MzsxMzEsNyBAQCBzdGF0aWMgaW50IGt2bV9kbXNpbnRjX3NldF9hdHRyKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsXG4gXHRjYXNlIEtWTV9ERVZfTE9PTkdBUkNIX0RNU0lOVENfR1JQX0NUUkw6XG4gXHRcdHJldHVybiBrdm1fZG1zaW50Y19jdHJsX2FjY2VzcyhkZXYsIGF0dHIsIHRydWUpO1xuIFx0ZGVmYXVsdDpcbi1cdFx0a3ZtX2VycihcJiMzNDslczogdW5rbm93biBncm91cCAoJWQpXFxuXCYjMzQ7LCBfX2Z1bmNfXywgYXR0ci1cdTAwM2Vncm91cCk7XG4mIzQzO1x0XHRrdm1fcHJfdW5pbXBsKFwmIzM0OyVzOiB1bmtub3duIGdyb3VwICglZClcXG5cJiMzNDssIF9fZnVuY19fLCBhdHRyLVx1MDAzZWdyb3VwKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gfVxuQEAgLTEzOSwxMyAmIzQzOzE0MiwxMyBAQCBzdGF0aWMgaW50IGt2bV9kbXNpbnRjX2NyZWF0ZShzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LCB1MzIgdHlwZSlcbiBcdHN0cnVjdCBsb29uZ2FyY2hfZG1zaW50YyAqcztcbiBcbiBcdGlmICghZGV2KSB7XG4tXHRcdGt2bV9lcnIoXCYjMzQ7JXM6IGt2bV9kZXZpY2UgcHRyIGlzIGludmFsaWQhXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4mIzQzO1x0XHRrdm1fcHJfdW5pbXBsKFwmIzM0OyVzOiBrdm1fZGV2aWNlIHB0ciBpcyBpbnZhbGlkIVxcblwmIzM0OywgX19mdW5jX18pO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbiBcdGt2bSA9IGRldi1cdTAwM2Vrdm07XG4gXHRpZiAoa3ZtLVx1MDAzZWFyY2guZG1zaW50Yykge1xuLVx0XHRrdm1fZXJyKFwmIzM0OyVzOiBMb29uZ0FyY2ggRE1TSU5UQyBoYXMgYWxyZWFkeSBiZWVuIGNyZWF0ZWQhXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4mIzQzO1x0XHRrdm1fcHJfdW5pbXBsKFwmIzM0OyVzOiBMb29uZ0FyY2ggRE1TSU5UQyBoYXMgYWxyZWFkeSBiZWVuIGNyZWF0ZWQhXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYyBiL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuY1xuaW5kZXggMmIxNDQ4NWQxNGE3MDguLmUwNGFhZGJkNjhkYjk2IDEwMDY0NFxuLS0tIGEvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmNcbkBAIC0xNyw3ICYjNDM7MTcsOCBAQCBzdGF0aWMgdm9pZCBlaW9pbnRjX3NldF9zd19jb3JlaXNyKHN0cnVjdCBsb29uZ2FyY2hfZWlvaW50YyAqcylcbiBcdFx0aWYgKCEocy1cdTAwM2VzdGF0dXMgXHUwMDI2IEJJVChFSU9JTlRDX0VOQUJMRV9JTlRfRU5DT0RFKSkpIHtcbiBcdFx0XHRpcG51bSA9IGNvdW50X3RyYWlsaW5nX3plcm9zKGlwbnVtKTtcbiBcdFx0XHRpcG51bSA9IGlwbnVtIFx1MDAzYyA0ID8gaXBudW0gOiAwO1xuLVx0XHR9XG4mIzQzO1x0XHR9IGVsc2UgaWYgKGlwbnVtIFx1MDAzZT0gTE9PTkdTT05fSVBfTlVNKVxuJiM0MztcdFx0XHRpcG51bSA9IDA7XG4gXG4gXHRcdGNwdWlkID0gKCh1OCAqKXMtXHUwMDNlY29yZW1hcClbaXJxXTtcbiBcdFx0dmNwdSA9IGt2bV9nZXRfdmNwdV9ieV9jcHVpZChzLVx1MDAzZWt2bSwgY3B1aWQpO1xuQEAgLTM2LDE4ICYjNDM7MzcsMTggQEAgc3RhdGljIHZvaWQgZWlvaW50Y191cGRhdGVfaXJxKHN0cnVjdCBsb29uZ2FyY2hfZWlvaW50YyAqcywgaW50IGlycSwgaW50IGxldmVsKVxuIHtcbiBcdGludCBpcG51bSwgY3B1LCBmb3VuZDtcbiBcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbi1cdHN0cnVjdCBrdm1faW50ZXJydXB0IHZjcHVfaXJxO1xuIFxuIFx0aXBudW0gPSAocy1cdTAwM2VpcG1hcCBcdTAwM2VcdTAwM2UgKGlycSAvIDMyICogOCkpIFx1MDAyNiAweGZmO1xuIFx0aWYgKCEocy1cdTAwM2VzdGF0dXMgXHUwMDI2IEJJVChFSU9JTlRDX0VOQUJMRV9JTlRfRU5DT0RFKSkpIHtcbiBcdFx0aXBudW0gPSBjb3VudF90cmFpbGluZ196ZXJvcyhpcG51bSk7XG4gXHRcdGlwbnVtID0gaXBudW0gXHUwMDNjIDQgPyBpcG51bSA6IDA7XG4tXHR9XG4mIzQzO1x0fSBlbHNlIGlmIChpcG51bSBcdTAwM2U9IExPT05HU09OX0lQX05VTSlcbiYjNDM7XHRcdGlwbnVtID0gMDtcbiBcbiBcdGNwdSA9IHMtXHUwMDNlc3dfY29yZW1hcFtpcnFdO1xuIFx0dmNwdSA9IGt2bV9nZXRfdmNwdV9ieV9pZChzLVx1MDAzZWt2bSwgY3B1KTtcbiBcdGlmICh1bmxpa2VseSh2Y3B1ID09IE5VTEwpKSB7XG4tXHRcdGt2bV9lcnIoXCYjMzQ7JXM6IGludmFsaWQgdGFyZ2V0IGNwdTogJWRcXG5cJiMzNDssIF9fZnVuY19fLCBjcHUpO1xuJiM0MztcdFx0a3ZtX3ByX3VuaW1wbChcJiMzNDslczogaW52YWxpZCB0YXJnZXQgY3B1OiAlZFxcblwmIzM0OywgX19mdW5jX18sIGNwdSk7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbkBAIC02Nyw4ICYjNDM7NjgsMTEgQEAgc3RhdGljIHZvaWQgZWlvaW50Y191cGRhdGVfaXJxKHN0cnVjdCBsb29uZ2FyY2hfZWlvaW50YyAqcywgaW50IGlycSwgaW50IGxldmVsKVxuIFx0aWYgKGZvdW5kIFx1MDAzYyBFSU9JTlRDX0lSUVMpXG4gXHRcdHJldHVybjsgLyogb3RoZXIgaXJxIGlzIGhhbmRsaW5nLCBuZWVkbiYjMzk7dCB1cGRhdGUgcGFyZW50IGlycSAqL1xuIFxuLVx0dmNwdV9pcnEuaXJxID0gbGV2ZWwgPyAoSU5UX0hXSTAgJiM0MzsgaXBudW0pIDogLShJTlRfSFdJMCAmIzQzOyBpcG51bSk7XG4tXHRrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHQodmNwdSwgXHUwMDI2dmNwdV9pcnEpO1xuJiM0MztcdGlmIChsZXZlbClcbiYjNDM7XHRcdGt2bV9xdWV1ZV9pcnEodmNwdSwgSU5UX0hXSTAgJiM0MzsgaXBudW0pO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGt2bV9kZXF1ZXVlX2lycSh2Y3B1LCBJTlRfSFdJMCAmIzQzOyBpcG51bSk7XG4mIzQzO1x0a3ZtX3ZjcHVfa2ljayh2Y3B1KTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIGVpb2ludGNfdXBkYXRlX3N3X2NvcmVtYXAoc3RydWN0IGxvb25nYXJjaF9laW9pbnRjICpzLFxuQEAgLTE2NSwxMiAmIzQzOzE2OSwxMiBAQCBzdGF0aWMgaW50IGt2bV9laW9pbnRjX3JlYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0c3RydWN0IGxvb25nYXJjaF9laW9pbnRjICplaW9pbnRjID0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5laW9pbnRjO1xuIFxuIFx0aWYgKCFlaW9pbnRjKSB7XG4tXHRcdGt2bV9lcnIoXCYjMzQ7JXM6IGVpb2ludGMgaXJxY2hpcCBub3QgdmFsaWQhXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4mIzQzO1x0XHRrdm1fcHJfdW5pbXBsKFwmIzM0OyVzOiBlaW9pbnRjIGlycWNoaXAgbm90IHZhbGlkIVxcblwmIzM0OywgX19mdW5jX18pO1xuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbiBcdGlmIChhZGRyIFx1MDAyNiAobGVuIC0gMSkpIHtcbi1cdFx0a3ZtX2VycihcJiMzNDslczogZWlvaW50YyBub3QgYWxpZ25lZCBhZGRyICVsbHggbGVuICVkXFxuXCYjMzQ7LCBfX2Z1bmNfXywgYWRkciwgbGVuKTtcbiYjNDM7XHRcdGt2bV9wcl91bmltcGwoXCYjMzQ7JXM6IGVpb2ludGMgbm90IGFsaWduZWQgYWRkciAlbGx4IGxlbiAlZFxcblwmIzM0OywgX19mdW5jX18sIGFkZHIsIGxlbik7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuQEAgLTI5NywxMiAmIzQzOzMwMSwxMiBAQCBzdGF0aWMgaW50IGt2bV9laW9pbnRjX3dyaXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdHN0cnVjdCBsb29uZ2FyY2hfZWlvaW50YyAqZWlvaW50YyA9IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guZWlvaW50YztcbiBcbiBcdGlmICghZWlvaW50Yykge1xuLVx0XHRrdm1fZXJyKFwmIzM0OyVzOiBlaW9pbnRjIGlycWNoaXAgbm90IHZhbGlkIVxcblwmIzM0OywgX19mdW5jX18pO1xuJiM0MztcdFx0a3ZtX3ByX3VuaW1wbChcJiMzNDslczogZWlvaW50YyBpcnFjaGlwIG5vdCB2YWxpZCFcXG5cJiMzNDssIF9fZnVuY19fKTtcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG4gXHRpZiAoYWRkciBcdTAwMjYgKGxlbiAtIDEpKSB7XG4tXHRcdGt2bV9lcnIoXCYjMzQ7JXM6IGVpb2ludGMgbm90IGFsaWduZWQgYWRkciAlbGx4IGxlbiAlZFxcblwmIzM0OywgX19mdW5jX18sIGFkZHIsIGxlbik7XG4mIzQzO1x0XHRrdm1fcHJfdW5pbXBsKFwmIzM0OyVzOiBlaW9pbnRjIG5vdCBhbGlnbmVkIGFkZHIgJWxseCBsZW4gJWRcXG5cJiMzNDssIF9fZnVuY19fLCBhZGRyLCBsZW4pO1xuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbkBAIC0zNDUsNyAmIzQzOzM0OSw3IEBAIHN0YXRpYyBpbnQga3ZtX2Vpb2ludGNfdmlydF9yZWFkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdHN0cnVjdCBsb29uZ2FyY2hfZWlvaW50YyAqZWlvaW50YyA9IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guZWlvaW50YztcbiBcbiBcdGlmICghZWlvaW50Yykge1xuLVx0XHRrdm1fZXJyKFwmIzM0OyVzOiBlaW9pbnRjIGlycWNoaXAgbm90IHZhbGlkIVxcblwmIzM0OywgX19mdW5jX18pO1xuJiM0MztcdFx0a3ZtX3ByX3VuaW1wbChcJiMzNDslczogZWlvaW50YyBpcnFjaGlwIG5vdCB2YWxpZCFcXG5cJiMzNDssIF9fZnVuY19fKTtcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG5AQCAtMzc1LDcgJiM0MzszNzksNyBAQCBzdGF0aWMgaW50IGt2bV9laW9pbnRjX3ZpcnRfd3JpdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0c3RydWN0IGxvb25nYXJjaF9laW9pbnRjICplaW9pbnRjID0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5laW9pbnRjO1xuIFxuIFx0aWYgKCFlaW9pbnRjKSB7XG4tXHRcdGt2bV9lcnIoXCYjMzQ7JXM6IGVpb2ludGMgaXJxY2hpcCBub3QgdmFsaWQhXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4mIzQzO1x0XHRrdm1fcHJfdW5pbXBsKFwmIzM0OyVzOiBlaW9pbnRjIGlycWNoaXAgbm90IHZhbGlkIVxcblwmIzM0OywgX19mdW5jX18pO1xuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbkBAIC01MDIsNyAmIzQzOzUwNiw3IEBAIHN0YXRpYyBpbnQga3ZtX2Vpb2ludGNfcmVnc19hY2Nlc3Moc3RydWN0IGt2bV9kZXZpY2UgKmRldixcbiBcdFx0cCA9ICh2b2lkICopcy1cdTAwM2Vjb3JlbWFwICYjNDM7IG9mZnNldCAqIDQ7XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbi1cdFx0a3ZtX2VycihcJiMzNDslczogdW5rbm93biBlaW9pbnRjIHJlZ2lzdGVyLCBhZGRyID0gJWRcXG5cJiMzNDssIF9fZnVuY19fLCBhZGRyKTtcbiYjNDM7XHRcdGt2bV9wcl91bmltcGwoXCYjMzQ7JXM6IHVua25vd24gZWlvaW50YyByZWdpc3RlciwgYWRkciA9ICVkXFxuXCYjMzQ7LCBfX2Z1bmNfXywgYWRkcik7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuQEAgLTU0Niw3ICYjNDM7NTUwLDcgQEAgc3RhdGljIGludCBrdm1fZWlvaW50Y19zd19zdGF0dXNfYWNjZXNzKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsXG4gXHRcdHAgPSBcdTAwMjZzLVx1MDAzZXN0YXR1cztcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuLVx0XHRrdm1fZXJyKFwmIzM0OyVzOiB1bmtub3duIGVpb2ludGMgcmVnaXN0ZXIsIGFkZHIgPSAlZFxcblwmIzM0OywgX19mdW5jX18sIGFkZHIpO1xuJiM0MztcdFx0a3ZtX3ByX3VuaW1wbChcJiMzNDslczogdW5rbm93biBlaW9pbnRjIHJlZ2lzdGVyLCBhZGRyID0gJWRcXG5cJiMzNDssIF9fZnVuY19fLCBhZGRyKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZzLVx1MDAzZWxvY2ssIGZsYWdzKTtcbmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuYyBiL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jXG5pbmRleCA0ZmEwODk3ZDdiZGIwMC4uZjMwZDBkMTNmNTRkMDUgMTAwNjQ0XG4tLS0gYS9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmNcbkBAIC0xMCwxNiAmIzQzOzEwLDE1IEBAXG4gc3RhdGljIHZvaWQgaXBpX3NldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVpbnQzMl90IGRhdGEpXG4ge1xuIFx0dWludDMyX3Qgc3RhdHVzO1xuLVx0c3RydWN0IGt2bV9pbnRlcnJ1cHQgaXJxO1xuIFxuIFx0c3Bpbl9sb2NrKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5pcGlfc3RhdGUubG9jayk7XG4gXHRzdGF0dXMgPSB2Y3B1LVx1MDAzZWFyY2guaXBpX3N0YXRlLnN0YXR1cztcbiBcdHZjcHUtXHUwMDNlYXJjaC5pcGlfc3RhdGUuc3RhdHVzIHw9IGRhdGE7XG4tXHRzcGluX3VubG9jayhcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXBpX3N0YXRlLmxvY2spO1xuIFx0aWYgKChzdGF0dXMgPT0gMCkgXHUwMDI2XHUwMDI2IGRhdGEpIHtcbi1cdFx0aXJxLmlycSA9IExBUkNIX0lOVF9JUEk7XG4tXHRcdGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdCh2Y3B1LCBcdTAwMjZpcnEpO1xuJiM0MztcdFx0a3ZtX3F1ZXVlX2lycSh2Y3B1LCBMQVJDSF9JTlRfSVBJKTtcbiYjNDM7XHRcdGt2bV92Y3B1X2tpY2sodmNwdSk7XG4gXHR9XG4mIzQzO1x0c3Bpbl91bmxvY2soXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmlwaV9zdGF0ZS5sb2NrKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgaXBpX3NlbmQoc3RydWN0IGt2bSAqa3ZtLCB1aW50NjRfdCBkYXRhKVxuQEAgLTMwLDcgJiM0MzsyOSw3IEBAIHN0YXRpYyB2b2lkIGlwaV9zZW5kKHN0cnVjdCBrdm0gKmt2bSwgdWludDY0X3QgZGF0YSlcbiBcdGNwdSA9ICgoZGF0YSBcdTAwMjYgMHhmZmZmZmZmZikgXHUwMDNlXHUwMDNlIDE2KSBcdTAwMjYgMHgzZmY7XG4gXHR2Y3B1ID0ga3ZtX2dldF92Y3B1X2J5X2NwdWlkKGt2bSwgY3B1KTtcbiBcdGlmICh1bmxpa2VseSh2Y3B1ID09IE5VTEwpKSB7XG4tXHRcdGt2bV9lcnIoXCYjMzQ7JXM6IGludmFsaWQgdGFyZ2V0IGNwdTogJWRcXG5cJiMzNDssIF9fZnVuY19fLCBjcHUpO1xuJiM0MztcdFx0a3ZtX3ByX3VuaW1wbChcJiMzNDslczogaW52YWxpZCB0YXJnZXQgY3B1OiAlZFxcblwmIzM0OywgX19mdW5jX18sIGNwdSk7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbkBAIC00MCwxNiAmIzQzOzM5LDE1IEBAIHN0YXRpYyB2b2lkIGlwaV9zZW5kKHN0cnVjdCBrdm0gKmt2bSwgdWludDY0X3QgZGF0YSlcbiBzdGF0aWMgdm9pZCBpcGlfY2xlYXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1aW50NjRfdCBkYXRhKVxuIHtcbiBcdHVpbnQzMl90IHN0YXR1cztcbi1cdHN0cnVjdCBrdm1faW50ZXJydXB0IGlycTtcbiBcbiBcdHNwaW5fbG9jayhcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXBpX3N0YXRlLmxvY2spO1xuIFx0dmNwdS1cdTAwM2VhcmNoLmlwaV9zdGF0ZS5zdGF0dXMgXHUwMDI2PSB+ZGF0YTtcbiBcdHN0YXR1cyA9IHZjcHUtXHUwMDNlYXJjaC5pcGlfc3RhdGUuc3RhdHVzO1xuLVx0c3Bpbl91bmxvY2soXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmlwaV9zdGF0ZS5sb2NrKTtcbiBcdGlmIChzdGF0dXMgPT0gMCkge1xuLVx0XHRpcnEuaXJxID0gLUxBUkNIX0lOVF9JUEk7XG4tXHRcdGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdCh2Y3B1LCBcdTAwMjZpcnEpO1xuJiM0MztcdFx0a3ZtX2RlcXVldWVfaXJxKHZjcHUsIExBUkNIX0lOVF9JUEkpO1xuJiM0MztcdFx0a3ZtX3ZjcHVfa2ljayh2Y3B1KTtcbiBcdH1cbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXBpX3N0YXRlLmxvY2spO1xuIH1cbiBcbiBzdGF0aWMgdWludDY0X3QgcmVhZF9tYWlsYm94KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IG9mZnNldCwgaW50IGxlbilcbkBAIC02NywxMSAmIzQzOzY1LDggQEAgc3RhdGljIHVpbnQ2NF90IHJlYWRfbWFpbGJveChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBvZmZzZXQsIGludCBsZW4pXG4gXHRcdHJldHVybiBkYXRhIFx1MDAyNiAweGZmZmY7XG4gXHRjYXNlIDQ6XG4gXHRcdHJldHVybiBkYXRhIFx1MDAyNiAweGZmZmZmZmZmO1xuLVx0Y2FzZSA4OlxuLVx0XHRyZXR1cm4gZGF0YTtcbiBcdGRlZmF1bHQ6XG4tXHRcdGt2bV9lcnIoXCYjMzQ7JXM6IHVua25vd24gZGF0YSBsZW46ICVkXFxuXCYjMzQ7LCBfX2Z1bmNfXywgbGVuKTtcbi1cdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHRyZXR1cm4gZGF0YTtcbiBcdH1cbiB9XG4gXG5AQCAtOTIsMTEgJiM0Mzs4Nyw5IEBAIHN0YXRpYyB2b2lkIHdyaXRlX21haWxib3goc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgb2Zmc2V0LCB1aW50NjRfdCBkYXRhLCBpbnRcbiBcdGNhc2UgNDpcbiBcdFx0Kih1bnNpZ25lZCBpbnQgKilwYnVmID0gKHVuc2lnbmVkIGludClkYXRhO1xuIFx0XHRicmVhaztcbi1cdGNhc2UgODpcbiYjNDM7XHRkZWZhdWx0OlxuIFx0XHQqKHVuc2lnbmVkIGxvbmcgKilwYnVmID0gKHVuc2lnbmVkIGxvbmcpZGF0YTtcbiBcdFx0YnJlYWs7XG4tXHRkZWZhdWx0OlxuLVx0XHRrdm1fZXJyKFwmIzM0OyVzOiB1bmtub3duIGRhdGEgbGVuOiAlZFxcblwmIzM0OywgX19mdW5jX18sIGxlbik7XG4gXHR9XG4gXHRzcGluX3VubG9jayhcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXBpX3N0YXRlLmxvY2spO1xuIH1cbkBAIC0xMTAsNyAmIzQzOzEwMyw3IEBAIHN0YXRpYyBpbnQgbWFpbF9zZW5kKHN0cnVjdCBrdm0gKmt2bSwgdWludDY0X3QgZGF0YSlcbiBcdGNwdSA9ICgoZGF0YSBcdTAwMjYgMHhmZmZmZmZmZikgXHUwMDNlXHUwMDNlIDE2KSBcdTAwMjYgMHgzZmY7XG4gXHR2Y3B1ID0ga3ZtX2dldF92Y3B1X2J5X2NwdWlkKGt2bSwgY3B1KTtcbiBcdGlmICh1bmxpa2VseSh2Y3B1ID09IE5VTEwpKSB7XG4tXHRcdGt2bV9lcnIoXCYjMzQ7JXM6IGludmFsaWQgdGFyZ2V0IGNwdTogJWRcXG5cJiMzNDssIF9fZnVuY19fLCBjcHUpO1xuJiM0MztcdFx0a3ZtX3ByX3VuaW1wbChcJiMzNDslczogaW52YWxpZCB0YXJnZXQgY3B1OiAlZFxcblwmIzM0OywgX19mdW5jX18sIGNwdSk7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFx0bWFpbGJveCA9ICgoZGF0YSBcdTAwMjYgMHhmZmZmZmZmZikgXHUwMDNlXHUwMDNlIDIpIFx1MDAyNiAweDc7XG5AQCAtMTQ0LDcgJiM0MzsxMzcsNyBAQCBzdGF0aWMgaW50IHNlbmRfaXBpX2RhdGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBhZGRyLCB1aW50NjRfdCBkYXRhKVxuIFx0XHRyZXQgPSBrdm1faW9fYnVzX3JlYWQodmNwdSwgS1ZNX0lPQ1NSX0JVUywgYWRkciwgNCwgXHUwMDI2dmFsKTtcbiBcdFx0c3JjdV9yZWFkX3VubG9jayhcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VzcmN1LCBpZHgpO1xuIFx0XHRpZiAodW5saWtlbHkocmV0KSkge1xuLVx0XHRcdGt2bV9lcnIoXCYjMzQ7JXM6IDogcmVhZCBkYXRhIGZyb20gYWRkciAlbGx4IGZhaWxlZFxcblwmIzM0OywgX19mdW5jX18sIGFkZHIpO1xuJiM0MztcdFx0XHRrdm1fcHJfdW5pbXBsKFwmIzM0OyVzOiA6IHJlYWQgZGF0YSBmcm9tIGFkZHIgJWxseCBmYWlsZWRcXG5cJiMzNDssIF9fZnVuY19fLCBhZGRyKTtcbiBcdFx0XHRyZXR1cm4gMDtcbiBcdFx0fVxuIFx0XHQvKiBDb25zdHJ1Y3QgdGhlIG1hc2sgYnkgc2Nhbm5pbmcgdGhlIGJpdCAyNy0zMCAqL1xuQEAgLTE2MCw3ICYjNDM7MTUzLDcgQEAgc3RhdGljIGludCBzZW5kX2lwaV9kYXRhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgYWRkciwgdWludDY0X3QgZGF0YSlcbiBcdHJldCA9IGt2bV9pb19idXNfd3JpdGUodmNwdSwgS1ZNX0lPQ1NSX0JVUywgYWRkciwgNCwgXHUwMDI2dmFsKTtcbiBcdHNyY3VfcmVhZF91bmxvY2soXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlc3JjdSwgaWR4KTtcbiBcdGlmICh1bmxpa2VseShyZXQpKVxuLVx0XHRrdm1fZXJyKFwmIzM0OyVzOiA6IHdyaXRlIGRhdGEgdG8gYWRkciAlbGx4IGZhaWxlZFxcblwmIzM0OywgX19mdW5jX18sIGFkZHIpO1xuJiM0MztcdFx0a3ZtX3ByX3VuaW1wbChcJiMzNDslczogOiB3cml0ZSBkYXRhIHRvIGFkZHIgJWxseCBmYWlsZWRcXG5cJiMzNDssIF9fZnVuY19fLCBhZGRyKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0xNzMsNyAmIzQzOzE2Niw3IEBAIHN0YXRpYyBpbnQgYW55X3NlbmQoc3RydWN0IGt2bSAqa3ZtLCB1aW50NjRfdCBkYXRhKVxuIFx0Y3B1ID0gKChkYXRhIFx1MDAyNiAweGZmZmZmZmZmKSBcdTAwM2VcdTAwM2UgMTYpIFx1MDAyNiAweDNmZjtcbiBcdHZjcHUgPSBrdm1fZ2V0X3ZjcHVfYnlfY3B1aWQoa3ZtLCBjcHUpO1xuIFx0aWYgKHVubGlrZWx5KHZjcHUgPT0gTlVMTCkpIHtcbi1cdFx0a3ZtX2VycihcJiMzNDslczogaW52YWxpZCB0YXJnZXQgY3B1OiAlZFxcblwmIzM0OywgX19mdW5jX18sIGNwdSk7XG4mIzQzO1x0XHRrdm1fcHJfdW5pbXBsKFwmIzM0OyVzOiBpbnZhbGlkIHRhcmdldCBjcHU6ICVkXFxuXCYjMzQ7LCBfX2Z1bmNfXywgY3B1KTtcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXHRvZmZzZXQgPSBkYXRhIFx1MDAyNiAweGZmZmY7XG5AQCAtMTg2LDkgJiM0MzsxNzksMTMgQEAgc3RhdGljIGludCBsb29uZ2FyY2hfaXBpX3JlYWRsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgYWRkciwgaW50IGxlbiwgdm9pZFxuIFx0dWludDMyX3Qgb2Zmc2V0O1xuIFx0dWludDY0X3QgcmVzID0gMDtcbiBcbi1cdG9mZnNldCA9ICh1aW50MzJfdCkoYWRkciBcdTAwMjYgMHgxZmYpO1xuLVx0V0FSTl9PTl9PTkNFKG9mZnNldCBcdTAwMjYgKGxlbiAtIDEpKTtcbiYjNDM7XHRpZiAoYWRkciBcdTAwMjYgKGxlbiAtIDEpKSB7XG4mIzQzO1x0XHQqKHVpbnQ2NF90ICopdmFsID0gcmVzO1xuJiM0MztcdFx0a3ZtX3ByX3VuaW1wbChcJiMzNDslczogaXBpIG5vdCBhbGlnbmVkIGFkZHIgJWxseCBsZW4gJWRcXG5cJiMzNDssIF9fZnVuY19fLCBhZGRyLCBsZW4pO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuIFxuJiM0MztcdG9mZnNldCA9IGFkZHIgLSBJT0NTUl9JUElfQkFTRTtcbiBcdHN3aXRjaCAob2Zmc2V0KSB7XG4gXHRjYXNlIElPQ1NSX0lQSV9TVEFUVVM6XG4gXHRcdHNwaW5fbG9jayhcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXBpX3N0YXRlLmxvY2spO1xuQEAgLTIwNCwxNSAmIzQzOzIwMSwxMCBAQCBzdGF0aWMgaW50IGxvb25nYXJjaF9pcGlfcmVhZGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBhZGRyLCBpbnQgbGVuLCB2b2lkXG4gXHRjYXNlIElPQ1NSX0lQSV9DTEVBUjpcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIElPQ1NSX0lQSV9CVUZfMjAgLi4uIElPQ1NSX0lQSV9CVUZfMzggJiM0MzsgNzpcbi1cdFx0aWYgKG9mZnNldCAmIzQzOyBsZW4gXHUwMDNlIElPQ1NSX0lQSV9CVUZfMzggJiM0MzsgOCkge1xuLVx0XHRcdGt2bV9lcnIoXCYjMzQ7JXM6IGludmFsaWQgb2Zmc2V0IG9yIGxlbjogb2Zmc2V0ID0gJWQsIGxlbiA9ICVkXFxuXCYjMzQ7LFxuLVx0XHRcdFx0X19mdW5jX18sIG9mZnNldCwgbGVuKTtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuIFx0XHRyZXMgPSByZWFkX21haWxib3godmNwdSwgb2Zmc2V0LCBsZW4pO1xuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4tXHRcdGt2bV9lcnIoXCYjMzQ7JXM6IHVua25vd24gYWRkcjogJWxseFxcblwmIzM0OywgX19mdW5jX18sIGFkZHIpO1xuJiM0MztcdFx0a3ZtX3ByX3VuaW1wbChcJiMzNDslczogdW5rbm93biBhZGRyOiAlbGx4XFxuXCYjMzQ7LCBfX2Z1bmNfXywgYWRkcik7XG4gXHRcdGJyZWFrO1xuIFx0fVxuIFx0Kih1aW50NjRfdCAqKXZhbCA9IHJlcztcbkBAIC0yMjcsOSAmIzQzOzIxOSwxMiBAQCBzdGF0aWMgaW50IGxvb25nYXJjaF9pcGlfd3JpdGVsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgYWRkciwgaW50IGxlbiwgY29uc1xuIFxuIFx0ZGF0YSA9ICoodWludDY0X3QgKil2YWw7XG4gXG4tXHRvZmZzZXQgPSAodWludDMyX3QpKGFkZHIgXHUwMDI2IDB4MWZmKTtcbi1cdFdBUk5fT05fT05DRShvZmZzZXQgXHUwMDI2IChsZW4gLSAxKSk7XG4mIzQzO1x0aWYgKGFkZHIgXHUwMDI2IChsZW4gLSAxKSkge1xuJiM0MztcdFx0a3ZtX3ByX3VuaW1wbChcJiMzNDslczogaXBpIG5vdCBhbGlnbmVkIGFkZHIgJWxseCBsZW4gJWRcXG5cJiMzNDssIF9fZnVuY19fLCBhZGRyLCBsZW4pO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuIFxuJiM0MztcdG9mZnNldCA9IGFkZHIgLSBJT0NTUl9JUElfQkFTRTtcbiBcdHN3aXRjaCAob2Zmc2V0KSB7XG4gXHRjYXNlIElPQ1NSX0lQSV9TVEFUVVM6XG4gXHRcdGJyZWFrO1xuQEAgLTI0Nyw3ICYjNDM7MjQyLDcgQEAgc3RhdGljIGludCBsb29uZ2FyY2hfaXBpX3dyaXRlbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGFkZHIsIGludCBsZW4sIGNvbnNcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIElPQ1NSX0lQSV9CVUZfMjAgLi4uIElPQ1NSX0lQSV9CVUZfMzggJiM0MzsgNzpcbiBcdFx0aWYgKG9mZnNldCAmIzQzOyBsZW4gXHUwMDNlIElPQ1NSX0lQSV9CVUZfMzggJiM0MzsgOCkge1xuLVx0XHRcdGt2bV9lcnIoXCYjMzQ7JXM6IGludmFsaWQgb2Zmc2V0IG9yIGxlbjogb2Zmc2V0ID0gJWQsIGxlbiA9ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRrdm1fcHJfdW5pbXBsKFwmIzM0OyVzOiBpbnZhbGlkIG9mZnNldCBvciBsZW46IG9mZnNldCA9ICVkLCBsZW4gPSAlZFxcblwmIzM0OyxcbiBcdFx0XHRcdF9fZnVuY19fLCBvZmZzZXQsIGxlbik7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbkBAIC0yNjMsNyAmIzQzOzI1OCw3IEBAIHN0YXRpYyBpbnQgbG9vbmdhcmNoX2lwaV93cml0ZWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBhZGRyLCBpbnQgbGVuLCBjb25zXG4gXHRcdGFueV9zZW5kKHZjcHUtXHUwMDNla3ZtLCBkYXRhKTtcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuLVx0XHRrdm1fZXJyKFwmIzM0OyVzOiB1bmtub3duIGFkZHI6ICVsbHhcXG5cJiMzNDssIF9fZnVuY19fLCBhZGRyKTtcbiYjNDM7XHRcdGt2bV9wcl91bmltcGwoXCYjMzQ7JXM6IHVua25vd24gYWRkcjogJWxseFxcblwmIzM0OywgX19mdW5jX18sIGFkZHIpO1xuIFx0XHRicmVhaztcbiBcdH1cbiBcbkBAIC0zMDYsNyAmIzQzOzMwMSw3IEBAIHN0YXRpYyBpbnQga3ZtX2lwaV9yZWdzX2FjY2VzcyhzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LFxuIFxuIFx0dmNwdSA9IGt2bV9nZXRfdmNwdV9ieV9pZChkZXYtXHUwMDNla3ZtLCBjcHUpO1xuIFx0aWYgKHVubGlrZWx5KHZjcHUgPT0gTlVMTCkpIHtcbi1cdFx0a3ZtX2VycihcJiMzNDslczogaW52YWxpZCB0YXJnZXQgY3B1OiAlZFxcblwmIzM0OywgX19mdW5jX18sIGNwdSk7XG4mIzQzO1x0XHRrdm1fcHJfdW5pbXBsKFwmIzM0OyVzOiBpbnZhbGlkIHRhcmdldCBjcHU6ICVkXFxuXCYjMzQ7LCBfX2Z1bmNfXywgY3B1KTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG5AQCAtMzQwLDcgJiM0MzszMzUsNyBAQCBzdGF0aWMgaW50IGt2bV9pcGlfcmVnc19hY2Nlc3Moc3RydWN0IGt2bV9kZXZpY2UgKmRldixcbiBcdFx0bGVuID0gODtcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuLVx0XHRrdm1fZXJyKFwmIzM0OyVzOiB1bmtub3duIGlwaSByZWdpc3RlciwgYWRkciA9ICVkXFxuXCYjMzQ7LCBfX2Z1bmNfXywgYWRkcik7XG4mIzQzO1x0XHRrdm1fcHJfdW5pbXBsKFwmIzM0OyVzOiB1bmtub3duIGlwaSByZWdpc3RlciwgYWRkciA9ICVkXFxuXCYjMzQ7LCBfX2Z1bmNfXywgYWRkcik7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuQEAgLTM3NCw3ICYjNDM7MzY5LDcgQEAgc3RhdGljIGludCBrdm1faXBpX2dldF9hdHRyKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsXG4gXHRjYXNlIEtWTV9ERVZfTE9PTkdBUkNIX0lQSV9HUlBfUkVHUzpcbiBcdFx0cmV0dXJuIGt2bV9pcGlfcmVnc19hY2Nlc3MoZGV2LCBhdHRyLCBmYWxzZSk7XG4gXHRkZWZhdWx0OlxuLVx0XHRrdm1fZXJyKFwmIzM0OyVzOiB1bmtub3duIGdyb3VwICglZClcXG5cJiMzNDssIF9fZnVuY19fLCBhdHRyLVx1MDAzZWdyb3VwKTtcbiYjNDM7XHRcdGt2bV9wcl91bmltcGwoXCYjMzQ7JXM6IHVua25vd24gZ3JvdXAgKCVkKVxcblwmIzM0OywgX19mdW5jX18sIGF0dHItXHUwMDNlZ3JvdXApO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiB9XG5AQCAtMzg2LDcgJiM0MzszODEsNyBAQCBzdGF0aWMgaW50IGt2bV9pcGlfc2V0X2F0dHIoc3RydWN0IGt2bV9kZXZpY2UgKmRldixcbiBcdGNhc2UgS1ZNX0RFVl9MT09OR0FSQ0hfSVBJX0dSUF9SRUdTOlxuIFx0XHRyZXR1cm4ga3ZtX2lwaV9yZWdzX2FjY2VzcyhkZXYsIGF0dHIsIHRydWUpO1xuIFx0ZGVmYXVsdDpcbi1cdFx0a3ZtX2VycihcJiMzNDslczogdW5rbm93biBncm91cCAoJWQpXFxuXCYjMzQ7LCBfX2Z1bmNfXywgYXR0ci1cdTAwM2Vncm91cCk7XG4mIzQzO1x0XHRrdm1fcHJfdW5pbXBsKFwmIzM0OyVzOiB1bmtub3duIGdyb3VwICglZClcXG5cJiMzNDssIF9fZnVuY19fLCBhdHRyLVx1MDAzZWdyb3VwKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gfVxuQEAgLTM5OSwxMyAmIzQzOzM5NCwxMyBAQCBzdGF0aWMgaW50IGt2bV9pcGlfY3JlYXRlKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsIHUzMiB0eXBlKVxuIFx0c3RydWN0IGxvb25nYXJjaF9pcGkgKnM7XG4gXG4gXHRpZiAoIWRldikge1xuLVx0XHRrdm1fZXJyKFwmIzM0OyVzOiBrdm1fZGV2aWNlIHB0ciBpcyBpbnZhbGlkIVxcblwmIzM0OywgX19mdW5jX18pO1xuJiM0MztcdFx0a3ZtX3ByX3VuaW1wbChcJiMzNDslczoga3ZtX2RldmljZSBwdHIgaXMgaW52YWxpZCFcXG5cJiMzNDssIF9fZnVuY19fKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4gXHRrdm0gPSBkZXYtXHUwMDNla3ZtO1xuIFx0aWYgKGt2bS1cdTAwM2VhcmNoLmlwaSkge1xuLVx0XHRrdm1fZXJyKFwmIzM0OyVzOiBMb29uZ0FyY2ggSVBJIGhhcyBhbHJlYWR5IGJlZW4gY3JlYXRlZCFcXG5cJiMzNDssIF9fZnVuY19fKTtcbiYjNDM7XHRcdGt2bV9wcl91bmltcGwoXCYjMzQ7JXM6IExvb25nQXJjaCBJUEkgaGFzIGFscmVhZHkgYmVlbiBjcmVhdGVkIVxcblwmIzM0OywgX19mdW5jX18pO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbkBAIC00MjUsNyAmIzQzOzQyMCw3IEBAIHN0YXRpYyBpbnQga3ZtX2lwaV9jcmVhdGUoc3RydWN0IGt2bV9kZXZpY2UgKmRldiwgdTMyIHR5cGUpXG4gXHRyZXQgPSBrdm1faW9fYnVzX3JlZ2lzdGVyX2Rldihrdm0sIEtWTV9JT0NTUl9CVVMsIElPQ1NSX0lQSV9CQVNFLCBJT0NTUl9JUElfU0laRSwgZGV2aWNlKTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tXHRcdGt2bV9lcnIoXCYjMzQ7JXM6IEluaXRpYWxpemUgSU9DU1IgZGV2IGZhaWxlZCwgcmV0ID0gJWRcXG5cJiMzNDssIF9fZnVuY19fLCByZXQpO1xuJiM0MztcdFx0a3ZtX3ByX3VuaW1wbChcJiMzNDslczogSW5pdGlhbGl6ZSBJT0NTUiBkZXYgZmFpbGVkLCByZXQgPSAlZFxcblwmIzM0OywgX19mdW5jX18sIHJldCk7XG4gXHRcdGdvdG8gZXJyO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL3BjaF9waWMuYyBiL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL3BjaF9waWMuY1xuaW5kZXggMTc1YTYzMGFjZWI0MTYuLmU3Yjc3NzA1YzUxNmFjIDEwMDY0NFxuLS0tIGEvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvcGNoX3BpYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9wY2hfcGljLmNcbkBAIC0xNTEsMTIgJiM0MzsxNTEsMTIgQEAgc3RhdGljIGludCBrdm1fcGNoX3BpY19yZWFkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdHN0cnVjdCBsb29uZ2FyY2hfcGNoX3BpYyAqcyA9IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gucGNoX3BpYztcbiBcbiBcdGlmICghcykge1xuLVx0XHRrdm1fZXJyKFwmIzM0OyVzOiBwY2ggcGljIGlycWNoaXAgbm90IHZhbGlkIVxcblwmIzM0OywgX19mdW5jX18pO1xuJiM0MztcdFx0a3ZtX3ByX3VuaW1wbChcJiMzNDslczogcGNoIHBpYyBpcnFjaGlwIG5vdCB2YWxpZCFcXG5cJiMzNDssIF9fZnVuY19fKTtcbiBcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbiBcdGlmIChhZGRyIFx1MDAyNiAobGVuIC0gMSkpIHtcbi1cdFx0a3ZtX2VycihcJiMzNDslczogcGNoIHBpYyBub3QgYWxpZ25lZCBhZGRyICVsbHggbGVuICVkXFxuXCYjMzQ7LCBfX2Z1bmNfXywgYWRkciwgbGVuKTtcbiYjNDM7XHRcdGt2bV9wcl91bmltcGwoXCYjMzQ7JXM6IHBjaCBwaWMgbm90IGFsaWduZWQgYWRkciAlbGx4IGxlbiAlZFxcblwmIzM0OywgX19mdW5jX18sIGFkZHIsIGxlbik7XG4gXHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXG5AQCAtMjUwLDEyICYjNDM7MjUwLDEyIEBAIHN0YXRpYyBpbnQga3ZtX3BjaF9waWNfd3JpdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0c3RydWN0IGxvb25nYXJjaF9wY2hfcGljICpzID0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5wY2hfcGljO1xuIFxuIFx0aWYgKCFzKSB7XG4tXHRcdGt2bV9lcnIoXCYjMzQ7JXM6IHBjaCBwaWMgaXJxY2hpcCBub3QgdmFsaWQhXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4mIzQzO1x0XHRrdm1fcHJfdW5pbXBsKFwmIzM0OyVzOiBwY2ggcGljIGlycWNoaXAgbm90IHZhbGlkIVxcblwmIzM0OywgX19mdW5jX18pO1xuIFx0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFxuIFx0aWYgKGFkZHIgXHUwMDI2IChsZW4gLSAxKSkge1xuLVx0XHRrdm1fZXJyKFwmIzM0OyVzOiBwY2ggcGljIG5vdCBhbGlnbmVkIGFkZHIgJWxseCBsZW4gJWRcXG5cJiMzNDssIF9fZnVuY19fLCBhZGRyLCBsZW4pO1xuJiM0MztcdFx0a3ZtX3ByX3VuaW1wbChcJiMzNDslczogcGNoIHBpYyBub3QgYWxpZ25lZCBhZGRyICVsbHggbGVuICVkXFxuXCYjMzQ7LCBfX2Z1bmNfXywgYWRkciwgbGVuKTtcbiBcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbkBAIC0zOTAsMTMgJiM0MzszOTAsMTMgQEAgc3RhdGljIGludCBrdm1fcGNoX3BpY19zZXRfYXR0cihzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LFxuIFx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXG4gXHRcdFx0aWYgKCFkZXYtXHUwMDNla3ZtLVx1MDAzZWFyY2gucGNoX3BpYykge1xuLVx0XHRcdFx0a3ZtX2VycihcJiMzNDslczogcGxlYXNlIGNyZWF0ZSBwY2hfcGljIGlycWNoaXAgZmlyc3QhXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4mIzQzO1x0XHRcdFx0a3ZtX3ByX3VuaW1wbChcJiMzNDslczogcGNoX3BpYyBpcnFjaGlwIG5vdCBjcmVhdGVkXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4gXHRcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcdFx0XHR9XG4gXG4gXHRcdFx0cmV0dXJuIGt2bV9wY2hfcGljX2luaXQoZGV2LCBhZGRyKTtcbiBcdFx0ZGVmYXVsdDpcbi1cdFx0XHRrdm1fZXJyKFwmIzM0OyVzOiB1bmtub3duIGdyb3VwICglZCkgYXR0ciAoJWxsZClcXG5cJiMzNDssIF9fZnVuY19fLCBhdHRyLVx1MDAzZWdyb3VwLFxuJiM0MztcdFx0XHRrdm1fcHJfdW5pbXBsKFwmIzM0OyVzOiB1bmtub3duIGdyb3VwICglZCkgYXR0ciAoJWxsZClcXG5cJiMzNDssIF9fZnVuY19fLCBhdHRyLVx1MDAzZWdyb3VwLFxuIFx0XHRcdFx0XHRhdHRyLVx1MDAzZWF0dHIpO1xuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHR9XG5kaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuYyBiL2FyY2gvbG9vbmdhcmNoL2t2bS92Y3B1LmNcbmluZGV4IDIwYzIwN2Q4MGUzMWFlLi5mODFkYWRjNjJjOTg2ZSAxMDA2NDRcbi0tLSBhL2FyY2gvbG9vbmdhcmNoL2t2bS92Y3B1LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbG9vbmdhcmNoL2t2bS92Y3B1LmNcbkBAIC0xNDY1LDYgJiM0MzsxNDY1LDkgQEAgaW50IGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1faW50ZXJydXB0ICppcnEpXG4gXHRpZiAodmVjdG9yIFx1MDAzZT0gRVhDQ09ERV9JTlRfTlVNKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiYjNDM7XHRpZiAoa3ZtX2FyY2hfaXJxY2hpcF9pbl9rZXJuZWwodmNwdS1cdTAwM2Vrdm0pKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuIFx0aWYgKCFrdm1fZ3Vlc3RfaGFzX21zZ2ludChcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gpIFx1MDAyNlx1MDAyNiAodmVjdG9yID09IElOVF9BVkVDKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG5AQCAtMTQ3Myw3ICYjNDM7MTQ3Niw3IEBAIGludCBrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2ludGVycnVwdCAqaXJxKVxuIFx0ZWxzZSBpZiAoaW50ciBcdTAwM2MgMClcbiBcdFx0a3ZtX2RlcXVldWVfaXJxKHZjcHUsIC1pbnRyKTtcbiBcdGVsc2Uge1xuLVx0XHRrdm1fZXJyKFwmIzM0OyVzOiBpbnZhbGlkIGludGVycnVwdCBpb2N0bCAlZFxcblwmIzM0OywgX19mdW5jX18sIGlycS1cdTAwM2VpcnEpO1xuJiM0MztcdFx0a3ZtX3ByX3VuaW1wbChcJiMzNDslczogaW52YWxpZCBpbnRlcnJ1cHQgaW9jdGwgJWRcXG5cJiMzNDssIF9fZnVuY19fLCBpcnEtXHUwMDNlaXJxKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTA6MjA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3ZjcHVfaW9jdGxfaW50ZXJydXB0JiMzNDssCiAgICAmIzM0O2Rtc2ludGNfZGVsaXZlcl9tc2lfdG9fdmNwdSYjMzQ7LAogICAgJiMzNDtlaW9pbnRjX3VwZGF0ZV9pcnEmIzM0OywKICAgICYjMzQ7bG9vbmdhcmNoX2lwaV9yZWFkbCYjMzQ7LAogICAgJiMzNDtsb29uZ2FyY2hfaXBpX3dyaXRlbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBMb29uZ0FyY2ggS1ZNIGludGVycnVwdCBpbmplY3Rpb24gYW5kIElQSSBoYW5kbGluZywgcmVwbGFjaW5nIGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdCB3aXRoIGt2bV9xdWV1ZV9pcnEgYW5kIGZpeGluZyBhbGlnbm1lbnQgY2hlY2tzIGluIElQSSByZWFkL3dyaXRlIGhhbmRsZXJzLiBUaGVzZSBhcmUgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIGFuZCBNTUlPL0lPQ1NSIGV4aXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5MzJhMmFmNjFjMDA4ODRhOThkYjAyNjcxMDUwMDQ2OTQzNDZhMzFmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdWwgMTQgMTA6MjA6MTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9rdm0vZXhpdC5jIGIvYXJjaC9sb29uZ2FyY2gva3ZtL2V4aXQuYwppbmRleCA4NTcyYjYzNDc4YmI5OC4uNTkwNTgwZDAzMDNlYTkgMTAwNjQ0Ci0tLSBhL2FyY2gvbG9vbmdhcmNoL2t2bS9leGl0LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9sb29uZ2FyY2gva3ZtL2V4aXQuYwpAQCAtMjUyLDcgJiM0MzsyNTIsNyBAQCBpbnQga3ZtX2NvbXBsZXRlX2lvY3NyX3JlYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3J1biAqcnVuKQogCQkqZ3ByID0gKihzNjQgKilydW4tJmd0O2lvY3NyX2lvLmRhdGE7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWt2bV9lcnIoJiMzNDtCYWQgSU9DU1IgbGVuZ3RoOiAlZCwgYWRkciBpcyAweCVseFxuJiMzNDssCiYjNDM7CQlrdm1fcHJfdW5pbXBsKCYjMzQ7QmFkIElPQ1NSIGxlbmd0aDogJWQsIGFkZHIgaXMgMHglbHhcbiYjMzQ7LAogCQkJCXJ1bi0mZ3Q7aW9jc3JfaW8ubGVuLCB2Y3B1LSZndDthcmNoLmJhZHYpOwogCQllciA9IEVNVUxBVEVfRkFJTDsKIAkJYnJlYWs7CkBAIC0zMjYsNyAmIzQzOzMyNiw3IEBAIHN0YXRpYyBpbnQga3ZtX3RyYXBfaGFuZGxlX2dzcHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiAJLyogUm9sbGJhY2sgUEMgb25seSBpZiBlbXVsYXRpb24gd2FzIHVuc3VjY2Vzc2Z1bCAqLwogCWlmIChlciA9PSBFTVVMQVRFX0ZBSUwpIHsKLQkJa3ZtX2VycigmIzM0O1slI2x4XSVzOiB1bnN1cHBvcnRlZCBnc3ByIGluc3RydWN0aW9uIDB4JTA4eFxuJiMzNDssCiYjNDM7CQlrdm1fcHJfdW5pbXBsKCYjMzQ7WyUjbHhdJXM6IHVuc3VwcG9ydGVkIGdzcHIgaW5zdHJ1Y3Rpb24gMHglMDh4XG4mIzM0OywKIAkJCWN1cnJfcGMsIF9fZnVuY19fLCBpbnN0LndvcmQpOwogCiAJCWt2bV9hcmNoX3ZjcHVfZHVtcF9yZWdzKHZjcHUpOwpAQCAtNDkxLDcgJiM0Mzs0OTEsNyBAQCBpbnQga3ZtX2VtdV9tbWlvX3JlYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBsYXJjaF9pbnN0IGluc3QpCiAJCXJldHVybiBFTVVMQVRFX0RPX01NSU87CiAJfQogCi0Ja3ZtX2VycigmIzM0O1JlYWQgbm90IHN1cHBvcnRlZCBJbnN0PTB4JTA4eCBAJWx4IEJhZFZhZGRyOiUjbHhcbiYjMzQ7LAomIzQzOwlrdm1fcHJfdW5pbXBsKCYjMzQ7UmVhZCBub3Qgc3VwcG9ydGVkIEluc3Q9MHglMDh4IEAlbHggQmFkVmFkZHI6JSNseFxuJiMzNDssCiAJCQlpbnN0LndvcmQsIHZjcHUtJmd0O2FyY2gucGMsIHZjcHUtJmd0O2FyY2guYmFkdik7CiAJa3ZtX2FyY2hfdmNwdV9kdW1wX3JlZ3ModmNwdSk7CiAJdmNwdS0mZ3Q7bW1pb19uZWVkZWQgPSAwOwpAQCAtNTI5LDcgJiM0Mzs1MjksNyBAQCBpbnQga3ZtX2NvbXBsZXRlX21taW9fcmVhZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcnVuICpydW4pCiAJCSpncHIgPSAqKHM2NCAqKXJ1bi0mZ3Q7bW1pby5kYXRhOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlrdm1fZXJyKCYjMzQ7QmFkIE1NSU8gbGVuZ3RoOiAlZCwgYWRkciBpcyAweCVseFxuJiMzNDssCiYjNDM7CQlrdm1fcHJfdW5pbXBsKCYjMzQ7QmFkIE1NSU8gbGVuZ3RoOiAlZCwgYWRkciBpcyAweCVseFxuJiMzNDssCiAJCQkJcnVuLSZndDttbWlvLmxlbiwgdmNwdS0mZ3Q7YXJjaC5iYWR2KTsKIAkJZXIgPSBFTVVMQVRFX0ZBSUw7CiAJCWJyZWFrOwpAQCAtNjU2LDcgJiM0Mzs2NTYsNyBAQCBpbnQga3ZtX2VtdV9tbWlvX3dyaXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgbGFyY2hfaW5zdCBpbnN0KQogCX0KIAogCXZjcHUtJmd0O2FyY2gucGMgPSBjdXJyX3BjOwotCWt2bV9lcnIoJiMzNDtXcml0ZSBub3Qgc3VwcG9ydGVkIEluc3Q9MHglMDh4IEAlbHggQmFkVmFkZHI6JSNseFxuJiMzNDssCiYjNDM7CWt2bV9wcl91bmltcGwoJiMzNDtXcml0ZSBub3Qgc3VwcG9ydGVkIEluc3Q9MHglMDh4IEAlbHggQmFkVmFkZHI6JSNseFxuJiMzNDssCiAJCQlpbnN0LndvcmQsIHZjcHUtJmd0O2FyY2gucGMsIHZjcHUtJmd0O2FyY2guYmFkdik7CiAJa3ZtX2FyY2hfdmNwdV9kdW1wX3JlZ3ModmNwdSk7CiAJLyogUm9sbGJhY2sgUEMgaWYgZW11bGF0aW9uIHdhcyB1bnN1Y2Nlc3NmdWwgKi8KQEAgLTc0OCw4ICYjNDM7NzQ4LDggQEAgc3RhdGljIGludCBrdm1faGFuZGxlX2ZwdV9kaXNhYmxlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBlY29kZSkKIAkgKiB0cmVhdGVkIGFzIGEgcmVzZXJ2ZWQgaW5zdHJ1Y3Rpb24hCiAJICogSWYgRlBVIGFscmVhZHkgaW4gdXNlLCB3ZSBzaG91bGRuJiMzOTt0IGdldCB0aGlzIGF0IGFsbC4KIAkgKi8KLQlpZiAoV0FSTl9PTih2Y3B1LSZndDthcmNoLmF1eF9pbnVzZSAmYW1wOyBLVk1fTEFSQ0hfRlBVKSkgewotCQlrdm1fZXJyKCYjMzQ7JXMgaW50ZXJuYWwgZXJyb3JcbiYjMzQ7LCBfX2Z1bmNfXyk7CiYjNDM7CWlmICh2Y3B1LSZndDthcmNoLmF1eF9pbnVzZSAmYW1wOyBLVk1fTEFSQ0hfRlBVKSB7CiYjNDM7CQlrdm1fcHJfdW5pbXBsKCYjMzQ7JXMgaW50ZXJuYWwgZXJyb3JcbiYjMzQ7LCBfX2Z1bmNfXyk7CiAJCXJ1bi0mZ3Q7ZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9JTlRFUk5BTF9FUlJPUjsKIAkJcmV0dXJuIFJFU1VNRV9IT1NUOwogCX0KQEAgLTk0Myw3ICYjNDM7OTQzLDcgQEAgc3RhdGljIGludCBrdm1fZmF1bHRfbmkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgZWNvZGUpCiAJLyogRmV0Y2ggdGhlIGluc3RydWN0aW9uICovCiAJaW5zdCA9IHZjcHUtJmd0O2FyY2guYmFkaTsKIAliYWR2ID0gdmNwdS0mZ3Q7YXJjaC5iYWR2OwotCWt2bV9lcnIoJiMzNDtFQ29kZTogJWQgUEM9JSNseCBJbnN0PTB4JTA4eCBCYWRWYWRkcj0lI2x4IEVTVEFUPSUjbHhcbiYjMzQ7LAomIzQzOwlrdm1fcHJfdW5pbXBsKCYjMzQ7RUNvZGU6ICVkIFBDPSUjbHggSW5zdD0weCUwOHggQmFkVmFkZHI9JSNseCBFU1RBVD0lI2x4XG4mIzM0OywKIAkJCWVjb2RlLCB2Y3B1LSZndDthcmNoLnBjLCBpbnN0LCBiYWR2LCByZWFkX2djc3JfZXN0YXQoKSk7CiAJa3ZtX2FyY2hfdmNwdV9kdW1wX3JlZ3ModmNwdSk7CiAJa3ZtX3F1ZXVlX2V4Y2VwdGlvbih2Y3B1LCBFWENDT0RFX0lORSwgMCk7CmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9kbXNpbnRjLmMgYi9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9kbXNpbnRjLmMKaW5kZXggZGUyNTczNWNlMDM5NDYuLjFjNzE2ZTI0YzViMDIyIDEwMDY0NAotLS0gYS9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9kbXNpbnRjLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZG1zaW50Yy5jCkBAIC0yMSw2ICYjNDM7MjEsOCBAQCB2b2lkIGRtc2ludGNfaW5qZWN0X2lycShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJCW9sZCA9IGF0b21pYzY0X3JlYWQoJmFtcDsoZHMtJmd0O3ZlY3Rvcl9tYXBbaV0pKTsKIAkJaWYgKG9sZCkKIAkJCXZlY3RvcltpXSA9IGF0b21pYzY0X3hjaGcoJmFtcDsoZHMtJmd0O3ZlY3Rvcl9tYXBbaV0pLCAwKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQl2ZWN0b3JbaV0gPSAwOwogCX0KIAogCWlmICh2ZWN0b3JbMF0pIHsKQEAgLTQ3LDcgJiM0Mzs0OSw2IEBAIHZvaWQgZG1zaW50Y19pbmplY3RfaXJxKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIGludCBkbXNpbnRjX2RlbGl2ZXJfbXNpX3RvX3ZjcHUoc3RydWN0IGt2bSAqa3ZtLAogCQkJCXN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHZlY3RvciwgaW50IGxldmVsKQogewotCXN0cnVjdCBrdm1faW50ZXJydXB0IHZjcHVfaXJxOwogCXN0cnVjdCBkbXNpbnRjX3N0YXRlICpkcyA9ICZhbXA7dmNwdS0mZ3Q7YXJjaC5kbXNpbnRjX3N0YXRlOwogCiAJaWYgKCFsZXZlbCkKQEAgLTU3LDkgJiM0Mzs1OCwxMSBAQCBpbnQgZG1zaW50Y19kZWxpdmVyX21zaV90b192Y3B1KHN0cnVjdCBrdm0gKmt2bSwKIAlpZiAoIWRzKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXZjcHVfaXJxLmlycSA9IElOVF9BVkVDOwomIzQzOwlpZiAoIWt2bV9ndWVzdF9oYXNfbXNnaW50KCZhbXA7dmNwdS0mZ3Q7YXJjaCkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKIAlzZXRfYml0KHZlY3RvciwgKHVuc2lnbmVkIGxvbmcgKikmYW1wO2RzLSZndDt2ZWN0b3JfbWFwKTsKLQlrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHQodmNwdSwgJmFtcDt2Y3B1X2lycSk7CiYjNDM7CWt2bV9xdWV1ZV9pcnEodmNwdSwgSU5UX0FWRUMpOwogCWt2bV92Y3B1X2tpY2sodmNwdSk7CiAKIAlyZXR1cm4gMDsKQEAgLTExNCw3ICYjNDM7MTE3LDcgQEAgc3RhdGljIGludCBrdm1fZG1zaW50Y19jdHJsX2FjY2VzcyhzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LAogCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWt2bV9lcnIoJiMzNDslczogdW5rbm93biBkbXNpbnRjIHJlZ2lzdGVyLCBhZGRyID0gJWRcbiYjMzQ7LCBfX2Z1bmNfXywgYWRkcik7CiYjNDM7CQlrdm1fcHJfdW5pbXBsKCYjMzQ7JXM6IHVua25vd24gZG1zaW50YyByZWdpc3RlciwgYWRkciA9ICVkXG4mIzM0OywgX19mdW5jX18sIGFkZHIpOwogCQlyZXR1cm4gLUVOWElPOwogCX0KIApAQCAtMTI4LDcgJiM0MzsxMzEsNyBAQCBzdGF0aWMgaW50IGt2bV9kbXNpbnRjX3NldF9hdHRyKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsCiAJY2FzZSBLVk1fREVWX0xPT05HQVJDSF9ETVNJTlRDX0dSUF9DVFJMOgogCQlyZXR1cm4ga3ZtX2Rtc2ludGNfY3RybF9hY2Nlc3MoZGV2LCBhdHRyLCB0cnVlKTsKIAlkZWZhdWx0OgotCQlrdm1fZXJyKCYjMzQ7JXM6IHVua25vd24gZ3JvdXAgKCVkKVxuJiMzNDssIF9fZnVuY19fLCBhdHRyLSZndDtncm91cCk7CiYjNDM7CQlrdm1fcHJfdW5pbXBsKCYjMzQ7JXM6IHVua25vd24gZ3JvdXAgKCVkKVxuJiMzNDssIF9fZnVuY19fLCBhdHRyLSZndDtncm91cCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIH0KQEAgLTEzOSwxMyAmIzQzOzE0MiwxMyBAQCBzdGF0aWMgaW50IGt2bV9kbXNpbnRjX2NyZWF0ZShzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LCB1MzIgdHlwZSkKIAlzdHJ1Y3QgbG9vbmdhcmNoX2Rtc2ludGMgKnM7CiAKIAlpZiAoIWRldikgewotCQlrdm1fZXJyKCYjMzQ7JXM6IGt2bV9kZXZpY2UgcHRyIGlzIGludmFsaWQhXG4mIzM0OywgX19mdW5jX18pOwomIzQzOwkJa3ZtX3ByX3VuaW1wbCgmIzM0OyVzOiBrdm1fZGV2aWNlIHB0ciBpcyBpbnZhbGlkIVxuJiMzNDssIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJa3ZtID0gZGV2LSZndDtrdm07CiAJaWYgKGt2bS0mZ3Q7YXJjaC5kbXNpbnRjKSB7Ci0JCWt2bV9lcnIoJiMzNDslczogTG9vbmdBcmNoIERNU0lOVEMgaGFzIGFscmVhZHkgYmVlbiBjcmVhdGVkIVxuJiMzNDssIF9fZnVuY19fKTsKJiM0MzsJCWt2bV9wcl91bmltcGwoJiMzNDslczogTG9vbmdBcmNoIERNU0lOVEMgaGFzIGFscmVhZHkgYmVlbiBjcmVhdGVkIVxuJiMzNDssIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmMgYi9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmMKaW5kZXggMmIxNDQ4NWQxNGE3MDguLmUwNGFhZGJkNjhkYjk2IDEwMDY0NAotLS0gYS9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jCkBAIC0xNyw3ICYjNDM7MTcsOCBAQCBzdGF0aWMgdm9pZCBlaW9pbnRjX3NldF9zd19jb3JlaXNyKHN0cnVjdCBsb29uZ2FyY2hfZWlvaW50YyAqcykKIAkJaWYgKCEocy0mZ3Q7c3RhdHVzICZhbXA7IEJJVChFSU9JTlRDX0VOQUJMRV9JTlRfRU5DT0RFKSkpIHsKIAkJCWlwbnVtID0gY291bnRfdHJhaWxpbmdfemVyb3MoaXBudW0pOwogCQkJaXBudW0gPSBpcG51bSAmbHQ7IDQgPyBpcG51bSA6IDA7Ci0JCX0KJiM0MzsJCX0gZWxzZSBpZiAoaXBudW0gJmd0Oz0gTE9PTkdTT05fSVBfTlVNKQomIzQzOwkJCWlwbnVtID0gMDsKIAogCQljcHVpZCA9ICgodTggKilzLSZndDtjb3JlbWFwKVtpcnFdOwogCQl2Y3B1ID0ga3ZtX2dldF92Y3B1X2J5X2NwdWlkKHMtJmd0O2t2bSwgY3B1aWQpOwpAQCAtMzYsMTggJiM0MzszNywxOCBAQCBzdGF0aWMgdm9pZCBlaW9pbnRjX3VwZGF0ZV9pcnEoc3RydWN0IGxvb25nYXJjaF9laW9pbnRjICpzLCBpbnQgaXJxLCBpbnQgbGV2ZWwpCiB7CiAJaW50IGlwbnVtLCBjcHUsIGZvdW5kOwogCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKLQlzdHJ1Y3Qga3ZtX2ludGVycnVwdCB2Y3B1X2lycTsKIAogCWlwbnVtID0gKHMtJmd0O2lwbWFwICZndDsmZ3Q7IChpcnEgLyAzMiAqIDgpKSAmYW1wOyAweGZmOwogCWlmICghKHMtJmd0O3N0YXR1cyAmYW1wOyBCSVQoRUlPSU5UQ19FTkFCTEVfSU5UX0VOQ09ERSkpKSB7CiAJCWlwbnVtID0gY291bnRfdHJhaWxpbmdfemVyb3MoaXBudW0pOwogCQlpcG51bSA9IGlwbnVtICZsdDsgNCA/IGlwbnVtIDogMDsKLQl9CiYjNDM7CX0gZWxzZSBpZiAoaXBudW0gJmd0Oz0gTE9PTkdTT05fSVBfTlVNKQomIzQzOwkJaXBudW0gPSAwOwogCiAJY3B1ID0gcy0mZ3Q7c3dfY29yZW1hcFtpcnFdOwogCXZjcHUgPSBrdm1fZ2V0X3ZjcHVfYnlfaWQocy0mZ3Q7a3ZtLCBjcHUpOwogCWlmICh1bmxpa2VseSh2Y3B1ID09IE5VTEwpKSB7Ci0JCWt2bV9lcnIoJiMzNDslczogaW52YWxpZCB0YXJnZXQgY3B1OiAlZFxuJiMzNDssIF9fZnVuY19fLCBjcHUpOwomIzQzOwkJa3ZtX3ByX3VuaW1wbCgmIzM0OyVzOiBpbnZhbGlkIHRhcmdldCBjcHU6ICVkXG4mIzM0OywgX19mdW5jX18sIGNwdSk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTY3LDggJiM0Mzs2OCwxMSBAQCBzdGF0aWMgdm9pZCBlaW9pbnRjX3VwZGF0ZV9pcnEoc3RydWN0IGxvb25nYXJjaF9laW9pbnRjICpzLCBpbnQgaXJxLCBpbnQgbGV2ZWwpCiAJaWYgKGZvdW5kICZsdDsgRUlPSU5UQ19JUlFTKQogCQlyZXR1cm47IC8qIG90aGVyIGlycSBpcyBoYW5kbGluZywgbmVlZG4mIzM5O3QgdXBkYXRlIHBhcmVudCBpcnEgKi8KIAotCXZjcHVfaXJxLmlycSA9IGxldmVsID8gKElOVF9IV0kwICYjNDM7IGlwbnVtKSA6IC0oSU5UX0hXSTAgJiM0MzsgaXBudW0pOwotCWt2bV92Y3B1X2lvY3RsX2ludGVycnVwdCh2Y3B1LCAmYW1wO3ZjcHVfaXJxKTsKJiM0MzsJaWYgKGxldmVsKQomIzQzOwkJa3ZtX3F1ZXVlX2lycSh2Y3B1LCBJTlRfSFdJMCAmIzQzOyBpcG51bSk7CiYjNDM7CWVsc2UKJiM0MzsJCWt2bV9kZXF1ZXVlX2lycSh2Y3B1LCBJTlRfSFdJMCAmIzQzOyBpcG51bSk7CiYjNDM7CWt2bV92Y3B1X2tpY2sodmNwdSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBlaW9pbnRjX3VwZGF0ZV9zd19jb3JlbWFwKHN0cnVjdCBsb29uZ2FyY2hfZWlvaW50YyAqcywKQEAgLTE2NSwxMiAmIzQzOzE2OSwxMiBAQCBzdGF0aWMgaW50IGt2bV9laW9pbnRjX3JlYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCXN0cnVjdCBsb29uZ2FyY2hfZWlvaW50YyAqZWlvaW50YyA9IHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5laW9pbnRjOwogCiAJaWYgKCFlaW9pbnRjKSB7Ci0JCWt2bV9lcnIoJiMzNDslczogZWlvaW50YyBpcnFjaGlwIG5vdCB2YWxpZCFcbiYjMzQ7LCBfX2Z1bmNfXyk7CiYjNDM7CQlrdm1fcHJfdW5pbXBsKCYjMzQ7JXM6IGVpb2ludGMgaXJxY2hpcCBub3QgdmFsaWQhXG4mIzM0OywgX19mdW5jX18pOwogCQlyZXR1cm4gMDsKIAl9CiAKIAlpZiAoYWRkciAmYW1wOyAobGVuIC0gMSkpIHsKLQkJa3ZtX2VycigmIzM0OyVzOiBlaW9pbnRjIG5vdCBhbGlnbmVkIGFkZHIgJWxseCBsZW4gJWRcbiYjMzQ7LCBfX2Z1bmNfXywgYWRkciwgbGVuKTsKJiM0MzsJCWt2bV9wcl91bmltcGwoJiMzNDslczogZWlvaW50YyBub3QgYWxpZ25lZCBhZGRyICVsbHggbGVuICVkXG4mIzM0OywgX19mdW5jX18sIGFkZHIsIGxlbik7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMjk3LDEyICYjNDM7MzAxLDEyIEBAIHN0YXRpYyBpbnQga3ZtX2Vpb2ludGNfd3JpdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCXN0cnVjdCBsb29uZ2FyY2hfZWlvaW50YyAqZWlvaW50YyA9IHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5laW9pbnRjOwogCiAJaWYgKCFlaW9pbnRjKSB7Ci0JCWt2bV9lcnIoJiMzNDslczogZWlvaW50YyBpcnFjaGlwIG5vdCB2YWxpZCFcbiYjMzQ7LCBfX2Z1bmNfXyk7CiYjNDM7CQlrdm1fcHJfdW5pbXBsKCYjMzQ7JXM6IGVpb2ludGMgaXJxY2hpcCBub3QgdmFsaWQhXG4mIzM0OywgX19mdW5jX18pOwogCQlyZXR1cm4gMDsKIAl9CiAKIAlpZiAoYWRkciAmYW1wOyAobGVuIC0gMSkpIHsKLQkJa3ZtX2VycigmIzM0OyVzOiBlaW9pbnRjIG5vdCBhbGlnbmVkIGFkZHIgJWxseCBsZW4gJWRcbiYjMzQ7LCBfX2Z1bmNfXywgYWRkciwgbGVuKTsKJiM0MzsJCWt2bV9wcl91bmltcGwoJiMzNDslczogZWlvaW50YyBub3QgYWxpZ25lZCBhZGRyICVsbHggbGVuICVkXG4mIzM0OywgX19mdW5jX18sIGFkZHIsIGxlbik7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMzQ1LDcgJiM0MzszNDksNyBAQCBzdGF0aWMgaW50IGt2bV9laW9pbnRjX3ZpcnRfcmVhZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJc3RydWN0IGxvb25nYXJjaF9laW9pbnRjICplaW9pbnRjID0gdmNwdS0mZ3Q7a3ZtLSZndDthcmNoLmVpb2ludGM7CiAKIAlpZiAoIWVpb2ludGMpIHsKLQkJa3ZtX2VycigmIzM0OyVzOiBlaW9pbnRjIGlycWNoaXAgbm90IHZhbGlkIVxuJiMzNDssIF9fZnVuY19fKTsKJiM0MzsJCWt2bV9wcl91bmltcGwoJiMzNDslczogZWlvaW50YyBpcnFjaGlwIG5vdCB2YWxpZCFcbiYjMzQ7LCBfX2Z1bmNfXyk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMzc1LDcgJiM0MzszNzksNyBAQCBzdGF0aWMgaW50IGt2bV9laW9pbnRjX3ZpcnRfd3JpdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCXN0cnVjdCBsb29uZ2FyY2hfZWlvaW50YyAqZWlvaW50YyA9IHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5laW9pbnRjOwogCiAJaWYgKCFlaW9pbnRjKSB7Ci0JCWt2bV9lcnIoJiMzNDslczogZWlvaW50YyBpcnFjaGlwIG5vdCB2YWxpZCFcbiYjMzQ7LCBfX2Z1bmNfXyk7CiYjNDM7CQlrdm1fcHJfdW5pbXBsKCYjMzQ7JXM6IGVpb2ludGMgaXJxY2hpcCBub3QgdmFsaWQhXG4mIzM0OywgX19mdW5jX18pOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTUwMiw3ICYjNDM7NTA2LDcgQEAgc3RhdGljIGludCBrdm1fZWlvaW50Y19yZWdzX2FjY2VzcyhzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LAogCQlwID0gKHZvaWQgKilzLSZndDtjb3JlbWFwICYjNDM7IG9mZnNldCAqIDQ7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWt2bV9lcnIoJiMzNDslczogdW5rbm93biBlaW9pbnRjIHJlZ2lzdGVyLCBhZGRyID0gJWRcbiYjMzQ7LCBfX2Z1bmNfXywgYWRkcik7CiYjNDM7CQlrdm1fcHJfdW5pbXBsKCYjMzQ7JXM6IHVua25vd24gZWlvaW50YyByZWdpc3RlciwgYWRkciA9ICVkXG4mIzM0OywgX19mdW5jX18sIGFkZHIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTU0Niw3ICYjNDM7NTUwLDcgQEAgc3RhdGljIGludCBrdm1fZWlvaW50Y19zd19zdGF0dXNfYWNjZXNzKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsCiAJCXAgPSAmYW1wO3MtJmd0O3N0YXR1czsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJa3ZtX2VycigmIzM0OyVzOiB1bmtub3duIGVpb2ludGMgcmVnaXN0ZXIsIGFkZHIgPSAlZFxuJiMzNDssIF9fZnVuY19fLCBhZGRyKTsKJiM0MzsJCWt2bV9wcl91bmltcGwoJiMzNDslczogdW5rbm93biBlaW9pbnRjIHJlZ2lzdGVyLCBhZGRyID0gJWRcbiYjMzQ7LCBfX2Z1bmNfXywgYWRkcik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3MtJmd0O2xvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jIGIvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmMKaW5kZXggNGZhMDg5N2Q3YmRiMDAuLmYzMGQwZDEzZjU0ZDA1IDEwMDY0NAotLS0gYS9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuYwpAQCAtMTAsMTYgJiM0MzsxMCwxNSBAQAogc3RhdGljIHZvaWQgaXBpX3NldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVpbnQzMl90IGRhdGEpCiB7CiAJdWludDMyX3Qgc3RhdHVzOwotCXN0cnVjdCBrdm1faW50ZXJydXB0IGlycTsKIAogCXNwaW5fbG9jaygmYW1wO3ZjcHUtJmd0O2FyY2guaXBpX3N0YXRlLmxvY2spOwogCXN0YXR1cyA9IHZjcHUtJmd0O2FyY2guaXBpX3N0YXRlLnN0YXR1czsKIAl2Y3B1LSZndDthcmNoLmlwaV9zdGF0ZS5zdGF0dXMgfD0gZGF0YTsKLQlzcGluX3VubG9jaygmYW1wO3ZjcHUtJmd0O2FyY2guaXBpX3N0YXRlLmxvY2spOwogCWlmICgoc3RhdHVzID09IDApICZhbXA7JmFtcDsgZGF0YSkgewotCQlpcnEuaXJxID0gTEFSQ0hfSU5UX0lQSTsKLQkJa3ZtX3ZjcHVfaW9jdGxfaW50ZXJydXB0KHZjcHUsICZhbXA7aXJxKTsKJiM0MzsJCWt2bV9xdWV1ZV9pcnEodmNwdSwgTEFSQ0hfSU5UX0lQSSk7CiYjNDM7CQlrdm1fdmNwdV9raWNrKHZjcHUpOwogCX0KJiM0MzsJc3Bpbl91bmxvY2soJmFtcDt2Y3B1LSZndDthcmNoLmlwaV9zdGF0ZS5sb2NrKTsKIH0KIAogc3RhdGljIHZvaWQgaXBpX3NlbmQoc3RydWN0IGt2bSAqa3ZtLCB1aW50NjRfdCBkYXRhKQpAQCAtMzAsNyAmIzQzOzI5LDcgQEAgc3RhdGljIHZvaWQgaXBpX3NlbmQoc3RydWN0IGt2bSAqa3ZtLCB1aW50NjRfdCBkYXRhKQogCWNwdSA9ICgoZGF0YSAmYW1wOyAweGZmZmZmZmZmKSAmZ3Q7Jmd0OyAxNikgJmFtcDsgMHgzZmY7CiAJdmNwdSA9IGt2bV9nZXRfdmNwdV9ieV9jcHVpZChrdm0sIGNwdSk7CiAJaWYgKHVubGlrZWx5KHZjcHUgPT0gTlVMTCkpIHsKLQkJa3ZtX2VycigmIzM0OyVzOiBpbnZhbGlkIHRhcmdldCBjcHU6ICVkXG4mIzM0OywgX19mdW5jX18sIGNwdSk7CiYjNDM7CQlrdm1fcHJfdW5pbXBsKCYjMzQ7JXM6IGludmFsaWQgdGFyZ2V0IGNwdTogJWRcbiYjMzQ7LCBfX2Z1bmNfXywgY3B1KTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNDAsMTYgJiM0MzszOSwxNSBAQCBzdGF0aWMgdm9pZCBpcGlfc2VuZChzdHJ1Y3Qga3ZtICprdm0sIHVpbnQ2NF90IGRhdGEpCiBzdGF0aWMgdm9pZCBpcGlfY2xlYXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1aW50NjRfdCBkYXRhKQogewogCXVpbnQzMl90IHN0YXR1czsKLQlzdHJ1Y3Qga3ZtX2ludGVycnVwdCBpcnE7CiAKIAlzcGluX2xvY2soJmFtcDt2Y3B1LSZndDthcmNoLmlwaV9zdGF0ZS5sb2NrKTsKIAl2Y3B1LSZndDthcmNoLmlwaV9zdGF0ZS5zdGF0dXMgJmFtcDs9IH5kYXRhOwogCXN0YXR1cyA9IHZjcHUtJmd0O2FyY2guaXBpX3N0YXRlLnN0YXR1czsKLQlzcGluX3VubG9jaygmYW1wO3ZjcHUtJmd0O2FyY2guaXBpX3N0YXRlLmxvY2spOwogCWlmIChzdGF0dXMgPT0gMCkgewotCQlpcnEuaXJxID0gLUxBUkNIX0lOVF9JUEk7Ci0JCWt2bV92Y3B1X2lvY3RsX2ludGVycnVwdCh2Y3B1LCAmYW1wO2lycSk7CiYjNDM7CQlrdm1fZGVxdWV1ZV9pcnEodmNwdSwgTEFSQ0hfSU5UX0lQSSk7CiYjNDM7CQlrdm1fdmNwdV9raWNrKHZjcHUpOwogCX0KJiM0MzsJc3Bpbl91bmxvY2soJmFtcDt2Y3B1LSZndDthcmNoLmlwaV9zdGF0ZS5sb2NrKTsKIH0KIAogc3RhdGljIHVpbnQ2NF90IHJlYWRfbWFpbGJveChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBvZmZzZXQsIGludCBsZW4pCkBAIC02NywxMSAmIzQzOzY1LDggQEAgc3RhdGljIHVpbnQ2NF90IHJlYWRfbWFpbGJveChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBvZmZzZXQsIGludCBsZW4pCiAJCXJldHVybiBkYXRhICZhbXA7IDB4ZmZmZjsKIAljYXNlIDQ6CiAJCXJldHVybiBkYXRhICZhbXA7IDB4ZmZmZmZmZmY7Ci0JY2FzZSA4OgotCQlyZXR1cm4gZGF0YTsKIAlkZWZhdWx0OgotCQlrdm1fZXJyKCYjMzQ7JXM6IHVua25vd24gZGF0YSBsZW46ICVkXG4mIzM0OywgX19mdW5jX18sIGxlbik7Ci0JCXJldHVybiAwOwomIzQzOwkJcmV0dXJuIGRhdGE7CiAJfQogfQogCkBAIC05MiwxMSAmIzQzOzg3LDkgQEAgc3RhdGljIHZvaWQgd3JpdGVfbWFpbGJveChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBvZmZzZXQsIHVpbnQ2NF90IGRhdGEsIGludAogCWNhc2UgNDoKIAkJKih1bnNpZ25lZCBpbnQgKilwYnVmID0gKHVuc2lnbmVkIGludClkYXRhOwogCQlicmVhazsKLQljYXNlIDg6CiYjNDM7CWRlZmF1bHQ6CiAJCSoodW5zaWduZWQgbG9uZyAqKXBidWYgPSAodW5zaWduZWQgbG9uZylkYXRhOwogCQlicmVhazsKLQlkZWZhdWx0OgotCQlrdm1fZXJyKCYjMzQ7JXM6IHVua25vd24gZGF0YSBsZW46ICVkXG4mIzM0OywgX19mdW5jX18sIGxlbik7CiAJfQogCXNwaW5fdW5sb2NrKCZhbXA7dmNwdS0mZ3Q7YXJjaC5pcGlfc3RhdGUubG9jayk7CiB9CkBAIC0xMTAsNyAmIzQzOzEwMyw3IEBAIHN0YXRpYyBpbnQgbWFpbF9zZW5kKHN0cnVjdCBrdm0gKmt2bSwgdWludDY0X3QgZGF0YSkKIAljcHUgPSAoKGRhdGEgJmFtcDsgMHhmZmZmZmZmZikgJmd0OyZndDsgMTYpICZhbXA7IDB4M2ZmOwogCXZjcHUgPSBrdm1fZ2V0X3ZjcHVfYnlfY3B1aWQoa3ZtLCBjcHUpOwogCWlmICh1bmxpa2VseSh2Y3B1ID09IE5VTEwpKSB7Ci0JCWt2bV9lcnIoJiMzNDslczogaW52YWxpZCB0YXJnZXQgY3B1OiAlZFxuJiMzNDssIF9fZnVuY19fLCBjcHUpOwomIzQzOwkJa3ZtX3ByX3VuaW1wbCgmIzM0OyVzOiBpbnZhbGlkIHRhcmdldCBjcHU6ICVkXG4mIzM0OywgX19mdW5jX18sIGNwdSk7CiAJCXJldHVybiAwOwogCX0KIAltYWlsYm94ID0gKChkYXRhICZhbXA7IDB4ZmZmZmZmZmYpICZndDsmZ3Q7IDIpICZhbXA7IDB4NzsKQEAgLTE0NCw3ICYjNDM7MTM3LDcgQEAgc3RhdGljIGludCBzZW5kX2lwaV9kYXRhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgYWRkciwgdWludDY0X3QgZGF0YSkKIAkJcmV0ID0ga3ZtX2lvX2J1c19yZWFkKHZjcHUsIEtWTV9JT0NTUl9CVVMsIGFkZHIsIDQsICZhbXA7dmFsKTsKIAkJc3JjdV9yZWFkX3VubG9jaygmYW1wO3ZjcHUtJmd0O2t2bS0mZ3Q7c3JjdSwgaWR4KTsKIAkJaWYgKHVubGlrZWx5KHJldCkpIHsKLQkJCWt2bV9lcnIoJiMzNDslczogOiByZWFkIGRhdGEgZnJvbSBhZGRyICVsbHggZmFpbGVkXG4mIzM0OywgX19mdW5jX18sIGFkZHIpOwomIzQzOwkJCWt2bV9wcl91bmltcGwoJiMzNDslczogOiByZWFkIGRhdGEgZnJvbSBhZGRyICVsbHggZmFpbGVkXG4mIzM0OywgX19mdW5jX18sIGFkZHIpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAkJLyogQ29uc3RydWN0IHRoZSBtYXNrIGJ5IHNjYW5uaW5nIHRoZSBiaXQgMjctMzAgKi8KQEAgLTE2MCw3ICYjNDM7MTUzLDcgQEAgc3RhdGljIGludCBzZW5kX2lwaV9kYXRhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgYWRkciwgdWludDY0X3QgZGF0YSkKIAlyZXQgPSBrdm1faW9fYnVzX3dyaXRlKHZjcHUsIEtWTV9JT0NTUl9CVVMsIGFkZHIsIDQsICZhbXA7dmFsKTsKIAlzcmN1X3JlYWRfdW5sb2NrKCZhbXA7dmNwdS0mZ3Q7a3ZtLSZndDtzcmN1LCBpZHgpOwogCWlmICh1bmxpa2VseShyZXQpKQotCQlrdm1fZXJyKCYjMzQ7JXM6IDogd3JpdGUgZGF0YSB0byBhZGRyICVsbHggZmFpbGVkXG4mIzM0OywgX19mdW5jX18sIGFkZHIpOwomIzQzOwkJa3ZtX3ByX3VuaW1wbCgmIzM0OyVzOiA6IHdyaXRlIGRhdGEgdG8gYWRkciAlbGx4IGZhaWxlZFxuJiMzNDssIF9fZnVuY19fLCBhZGRyKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTczLDcgJiM0MzsxNjYsNyBAQCBzdGF0aWMgaW50IGFueV9zZW5kKHN0cnVjdCBrdm0gKmt2bSwgdWludDY0X3QgZGF0YSkKIAljcHUgPSAoKGRhdGEgJmFtcDsgMHhmZmZmZmZmZikgJmd0OyZndDsgMTYpICZhbXA7IDB4M2ZmOwogCXZjcHUgPSBrdm1fZ2V0X3ZjcHVfYnlfY3B1aWQoa3ZtLCBjcHUpOwogCWlmICh1bmxpa2VseSh2Y3B1ID09IE5VTEwpKSB7Ci0JCWt2bV9lcnIoJiMzNDslczogaW52YWxpZCB0YXJnZXQgY3B1OiAlZFxuJiMzNDssIF9fZnVuY19fLCBjcHUpOwomIzQzOwkJa3ZtX3ByX3VuaW1wbCgmIzM0OyVzOiBpbnZhbGlkIHRhcmdldCBjcHU6ICVkXG4mIzM0OywgX19mdW5jX18sIGNwdSk7CiAJCXJldHVybiAwOwogCX0KIAlvZmZzZXQgPSBkYXRhICZhbXA7IDB4ZmZmZjsKQEAgLTE4Niw5ICYjNDM7MTc5LDEzIEBAIHN0YXRpYyBpbnQgbG9vbmdhcmNoX2lwaV9yZWFkbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGFkZHIsIGludCBsZW4sIHZvaWQKIAl1aW50MzJfdCBvZmZzZXQ7CiAJdWludDY0X3QgcmVzID0gMDsKIAotCW9mZnNldCA9ICh1aW50MzJfdCkoYWRkciAmYW1wOyAweDFmZik7Ci0JV0FSTl9PTl9PTkNFKG9mZnNldCAmYW1wOyAobGVuIC0gMSkpOwomIzQzOwlpZiAoYWRkciAmYW1wOyAobGVuIC0gMSkpIHsKJiM0MzsJCSoodWludDY0X3QgKil2YWwgPSByZXM7CiYjNDM7CQlrdm1fcHJfdW5pbXBsKCYjMzQ7JXM6IGlwaSBub3QgYWxpZ25lZCBhZGRyICVsbHggbGVuICVkXG4mIzM0OywgX19mdW5jX18sIGFkZHIsIGxlbik7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQogCiYjNDM7CW9mZnNldCA9IGFkZHIgLSBJT0NTUl9JUElfQkFTRTsKIAlzd2l0Y2ggKG9mZnNldCkgewogCWNhc2UgSU9DU1JfSVBJX1NUQVRVUzoKIAkJc3Bpbl9sb2NrKCZhbXA7dmNwdS0mZ3Q7YXJjaC5pcGlfc3RhdGUubG9jayk7CkBAIC0yMDQsMTUgJiM0MzsyMDEsMTAgQEAgc3RhdGljIGludCBsb29uZ2FyY2hfaXBpX3JlYWRsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgYWRkciwgaW50IGxlbiwgdm9pZAogCWNhc2UgSU9DU1JfSVBJX0NMRUFSOgogCQlicmVhazsKIAljYXNlIElPQ1NSX0lQSV9CVUZfMjAgLi4uIElPQ1NSX0lQSV9CVUZfMzggJiM0MzsgNzoKLQkJaWYgKG9mZnNldCAmIzQzOyBsZW4gJmd0OyBJT0NTUl9JUElfQlVGXzM4ICYjNDM7IDgpIHsKLQkJCWt2bV9lcnIoJiMzNDslczogaW52YWxpZCBvZmZzZXQgb3IgbGVuOiBvZmZzZXQgPSAlZCwgbGVuID0gJWRcbiYjMzQ7LAotCQkJCV9fZnVuY19fLCBvZmZzZXQsIGxlbik7Ci0JCQlicmVhazsKLQkJfQogCQlyZXMgPSByZWFkX21haWxib3godmNwdSwgb2Zmc2V0LCBsZW4pOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlrdm1fZXJyKCYjMzQ7JXM6IHVua25vd24gYWRkcjogJWxseFxuJiMzNDssIF9fZnVuY19fLCBhZGRyKTsKJiM0MzsJCWt2bV9wcl91bmltcGwoJiMzNDslczogdW5rbm93biBhZGRyOiAlbGx4XG4mIzM0OywgX19mdW5jX18sIGFkZHIpOwogCQlicmVhazsKIAl9CiAJKih1aW50NjRfdCAqKXZhbCA9IHJlczsKQEAgLTIyNyw5ICYjNDM7MjE5LDEyIEBAIHN0YXRpYyBpbnQgbG9vbmdhcmNoX2lwaV93cml0ZWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBhZGRyLCBpbnQgbGVuLCBjb25zCiAKIAlkYXRhID0gKih1aW50NjRfdCAqKXZhbDsKIAotCW9mZnNldCA9ICh1aW50MzJfdCkoYWRkciAmYW1wOyAweDFmZik7Ci0JV0FSTl9PTl9PTkNFKG9mZnNldCAmYW1wOyAobGVuIC0gMSkpOwomIzQzOwlpZiAoYWRkciAmYW1wOyAobGVuIC0gMSkpIHsKJiM0MzsJCWt2bV9wcl91bmltcGwoJiMzNDslczogaXBpIG5vdCBhbGlnbmVkIGFkZHIgJWxseCBsZW4gJWRcbiYjMzQ7LCBfX2Z1bmNfXywgYWRkciwgbGVuKTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiAKJiM0MzsJb2Zmc2V0ID0gYWRkciAtIElPQ1NSX0lQSV9CQVNFOwogCXN3aXRjaCAob2Zmc2V0KSB7CiAJY2FzZSBJT0NTUl9JUElfU1RBVFVTOgogCQlicmVhazsKQEAgLTI0Nyw3ICYjNDM7MjQyLDcgQEAgc3RhdGljIGludCBsb29uZ2FyY2hfaXBpX3dyaXRlbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGFkZHIsIGludCBsZW4sIGNvbnMKIAkJYnJlYWs7CiAJY2FzZSBJT0NTUl9JUElfQlVGXzIwIC4uLiBJT0NTUl9JUElfQlVGXzM4ICYjNDM7IDc6CiAJCWlmIChvZmZzZXQgJiM0MzsgbGVuICZndDsgSU9DU1JfSVBJX0JVRl8zOCAmIzQzOyA4KSB7Ci0JCQlrdm1fZXJyKCYjMzQ7JXM6IGludmFsaWQgb2Zmc2V0IG9yIGxlbjogb2Zmc2V0ID0gJWQsIGxlbiA9ICVkXG4mIzM0OywKJiM0MzsJCQlrdm1fcHJfdW5pbXBsKCYjMzQ7JXM6IGludmFsaWQgb2Zmc2V0IG9yIGxlbjogb2Zmc2V0ID0gJWQsIGxlbiA9ICVkXG4mIzM0OywKIAkJCQlfX2Z1bmNfXywgb2Zmc2V0LCBsZW4pOwogCQkJYnJlYWs7CiAJCX0KQEAgLTI2Myw3ICYjNDM7MjU4LDcgQEAgc3RhdGljIGludCBsb29uZ2FyY2hfaXBpX3dyaXRlbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGFkZHIsIGludCBsZW4sIGNvbnMKIAkJYW55X3NlbmQodmNwdS0mZ3Q7a3ZtLCBkYXRhKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJa3ZtX2VycigmIzM0OyVzOiB1bmtub3duIGFkZHI6ICVsbHhcbiYjMzQ7LCBfX2Z1bmNfXywgYWRkcik7CiYjNDM7CQlrdm1fcHJfdW5pbXBsKCYjMzQ7JXM6IHVua25vd24gYWRkcjogJWxseFxuJiMzNDssIF9fZnVuY19fLCBhZGRyKTsKIAkJYnJlYWs7CiAJfQogCkBAIC0zMDYsNyAmIzQzOzMwMSw3IEBAIHN0YXRpYyBpbnQga3ZtX2lwaV9yZWdzX2FjY2VzcyhzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LAogCiAJdmNwdSA9IGt2bV9nZXRfdmNwdV9ieV9pZChkZXYtJmd0O2t2bSwgY3B1KTsKIAlpZiAodW5saWtlbHkodmNwdSA9PSBOVUxMKSkgewotCQlrdm1fZXJyKCYjMzQ7JXM6IGludmFsaWQgdGFyZ2V0IGNwdTogJWRcbiYjMzQ7LCBfX2Z1bmNfXywgY3B1KTsKJiM0MzsJCWt2bV9wcl91bmltcGwoJiMzNDslczogaW52YWxpZCB0YXJnZXQgY3B1OiAlZFxuJiMzNDssIF9fZnVuY19fLCBjcHUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTM0MCw3ICYjNDM7MzM1LDcgQEAgc3RhdGljIGludCBrdm1faXBpX3JlZ3NfYWNjZXNzKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsCiAJCWxlbiA9IDg7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWt2bV9lcnIoJiMzNDslczogdW5rbm93biBpcGkgcmVnaXN0ZXIsIGFkZHIgPSAlZFxuJiMzNDssIF9fZnVuY19fLCBhZGRyKTsKJiM0MzsJCWt2bV9wcl91bmltcGwoJiMzNDslczogdW5rbm93biBpcGkgcmVnaXN0ZXIsIGFkZHIgPSAlZFxuJiMzNDssIF9fZnVuY19fLCBhZGRyKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0zNzQsNyAmIzQzOzM2OSw3IEBAIHN0YXRpYyBpbnQga3ZtX2lwaV9nZXRfYXR0cihzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LAogCWNhc2UgS1ZNX0RFVl9MT09OR0FSQ0hfSVBJX0dSUF9SRUdTOgogCQlyZXR1cm4ga3ZtX2lwaV9yZWdzX2FjY2VzcyhkZXYsIGF0dHIsIGZhbHNlKTsKIAlkZWZhdWx0OgotCQlrdm1fZXJyKCYjMzQ7JXM6IHVua25vd24gZ3JvdXAgKCVkKVxuJiMzNDssIF9fZnVuY19fLCBhdHRyLSZndDtncm91cCk7CiYjNDM7CQlrdm1fcHJfdW5pbXBsKCYjMzQ7JXM6IHVua25vd24gZ3JvdXAgKCVkKVxuJiMzNDssIF9fZnVuY19fLCBhdHRyLSZndDtncm91cCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIH0KQEAgLTM4Niw3ICYjNDM7MzgxLDcgQEAgc3RhdGljIGludCBrdm1faXBpX3NldF9hdHRyKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsCiAJY2FzZSBLVk1fREVWX0xPT05HQVJDSF9JUElfR1JQX1JFR1M6CiAJCXJldHVybiBrdm1faXBpX3JlZ3NfYWNjZXNzKGRldiwgYXR0ciwgdHJ1ZSk7CiAJZGVmYXVsdDoKLQkJa3ZtX2VycigmIzM0OyVzOiB1bmtub3duIGdyb3VwICglZClcbiYjMzQ7LCBfX2Z1bmNfXywgYXR0ci0mZ3Q7Z3JvdXApOwomIzQzOwkJa3ZtX3ByX3VuaW1wbCgmIzM0OyVzOiB1bmtub3duIGdyb3VwICglZClcbiYjMzQ7LCBfX2Z1bmNfXywgYXR0ci0mZ3Q7Z3JvdXApOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiB9CkBAIC0zOTksMTMgJiM0MzszOTQsMTMgQEAgc3RhdGljIGludCBrdm1faXBpX2NyZWF0ZShzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LCB1MzIgdHlwZSkKIAlzdHJ1Y3QgbG9vbmdhcmNoX2lwaSAqczsKIAogCWlmICghZGV2KSB7Ci0JCWt2bV9lcnIoJiMzNDslczoga3ZtX2RldmljZSBwdHIgaXMgaW52YWxpZCFcbiYjMzQ7LCBfX2Z1bmNfXyk7CiYjNDM7CQlrdm1fcHJfdW5pbXBsKCYjMzQ7JXM6IGt2bV9kZXZpY2UgcHRyIGlzIGludmFsaWQhXG4mIzM0OywgX19mdW5jX18pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlrdm0gPSBkZXYtJmd0O2t2bTsKIAlpZiAoa3ZtLSZndDthcmNoLmlwaSkgewotCQlrdm1fZXJyKCYjMzQ7JXM6IExvb25nQXJjaCBJUEkgaGFzIGFscmVhZHkgYmVlbiBjcmVhdGVkIVxuJiMzNDssIF9fZnVuY19fKTsKJiM0MzsJCWt2bV9wcl91bmltcGwoJiMzNDslczogTG9vbmdBcmNoIElQSSBoYXMgYWxyZWFkeSBiZWVuIGNyZWF0ZWQhXG4mIzM0OywgX19mdW5jX18pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTQyNSw3ICYjNDM7NDIwLDcgQEAgc3RhdGljIGludCBrdm1faXBpX2NyZWF0ZShzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LCB1MzIgdHlwZSkKIAlyZXQgPSBrdm1faW9fYnVzX3JlZ2lzdGVyX2Rldihrdm0sIEtWTV9JT0NTUl9CVVMsIElPQ1NSX0lQSV9CQVNFLCBJT0NTUl9JUElfU0laRSwgZGV2aWNlKTsKIAltdXRleF91bmxvY2soJmFtcDtrdm0tJmd0O3Nsb3RzX2xvY2spOwogCWlmIChyZXQgJmx0OyAwKSB7Ci0JCWt2bV9lcnIoJiMzNDslczogSW5pdGlhbGl6ZSBJT0NTUiBkZXYgZmFpbGVkLCByZXQgPSAlZFxuJiMzNDssIF9fZnVuY19fLCByZXQpOwomIzQzOwkJa3ZtX3ByX3VuaW1wbCgmIzM0OyVzOiBJbml0aWFsaXplIElPQ1NSIGRldiBmYWlsZWQsIHJldCA9ICVkXG4mIzM0OywgX19mdW5jX18sIHJldCk7CiAJCWdvdG8gZXJyOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvcGNoX3BpYy5jIGIvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvcGNoX3BpYy5jCmluZGV4IDE3NWE2MzBhY2ViNDE2Li5lN2I3NzcwNWM1MTZhYyAxMDA2NDQKLS0tIGEvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvcGNoX3BpYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL3BjaF9waWMuYwpAQCAtMTUxLDEyICYjNDM7MTUxLDEyIEBAIHN0YXRpYyBpbnQga3ZtX3BjaF9waWNfcmVhZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJc3RydWN0IGxvb25nYXJjaF9wY2hfcGljICpzID0gdmNwdS0mZ3Q7a3ZtLSZndDthcmNoLnBjaF9waWM7CiAKIAlpZiAoIXMpIHsKLQkJa3ZtX2VycigmIzM0OyVzOiBwY2ggcGljIGlycWNoaXAgbm90IHZhbGlkIVxuJiMzNDssIF9fZnVuY19fKTsKJiM0MzsJCWt2bV9wcl91bmltcGwoJiMzNDslczogcGNoIHBpYyBpcnFjaGlwIG5vdCB2YWxpZCFcbiYjMzQ7LCBfX2Z1bmNfXyk7CiAJCXJldHVybiByZXQ7CiAJfQogCiAJaWYgKGFkZHIgJmFtcDsgKGxlbiAtIDEpKSB7Ci0JCWt2bV9lcnIoJiMzNDslczogcGNoIHBpYyBub3QgYWxpZ25lZCBhZGRyICVsbHggbGVuICVkXG4mIzM0OywgX19mdW5jX18sIGFkZHIsIGxlbik7CiYjNDM7CQlrdm1fcHJfdW5pbXBsKCYjMzQ7JXM6IHBjaCBwaWMgbm90IGFsaWduZWQgYWRkciAlbGx4IGxlbiAlZFxuJiMzNDssIF9fZnVuY19fLCBhZGRyLCBsZW4pOwogCQlyZXR1cm4gcmV0OwogCX0KIApAQCAtMjUwLDEyICYjNDM7MjUwLDEyIEBAIHN0YXRpYyBpbnQga3ZtX3BjaF9waWNfd3JpdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCXN0cnVjdCBsb29uZ2FyY2hfcGNoX3BpYyAqcyA9IHZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5wY2hfcGljOwogCiAJaWYgKCFzKSB7Ci0JCWt2bV9lcnIoJiMzNDslczogcGNoIHBpYyBpcnFjaGlwIG5vdCB2YWxpZCFcbiYjMzQ7LCBfX2Z1bmNfXyk7CiYjNDM7CQlrdm1fcHJfdW5pbXBsKCYjMzQ7JXM6IHBjaCBwaWMgaXJxY2hpcCBub3QgdmFsaWQhXG4mIzM0OywgX19mdW5jX18pOwogCQlyZXR1cm4gcmV0OwogCX0KIAogCWlmIChhZGRyICZhbXA7IChsZW4gLSAxKSkgewotCQlrdm1fZXJyKCYjMzQ7JXM6IHBjaCBwaWMgbm90IGFsaWduZWQgYWRkciAlbGx4IGxlbiAlZFxuJiMzNDssIF9fZnVuY19fLCBhZGRyLCBsZW4pOwomIzQzOwkJa3ZtX3ByX3VuaW1wbCgmIzM0OyVzOiBwY2ggcGljIG5vdCBhbGlnbmVkIGFkZHIgJWxseCBsZW4gJWRcbiYjMzQ7LCBfX2Z1bmNfXywgYWRkciwgbGVuKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKQEAgLTM5MCwxMyAmIzQzOzM5MCwxMyBAQCBzdGF0aWMgaW50IGt2bV9wY2hfcGljX3NldF9hdHRyKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsCiAJCQkJcmV0dXJuIC1FRkFVTFQ7CiAKIAkJCWlmICghZGV2LSZndDtrdm0tJmd0O2FyY2gucGNoX3BpYykgewotCQkJCWt2bV9lcnIoJiMzNDslczogcGxlYXNlIGNyZWF0ZSBwY2hfcGljIGlycWNoaXAgZmlyc3QhXG4mIzM0OywgX19mdW5jX18pOwomIzQzOwkJCQlrdm1fcHJfdW5pbXBsKCYjMzQ7JXM6IHBjaF9waWMgaXJxY2hpcCBub3QgY3JlYXRlZFxuJiMzNDssIF9fZnVuY19fKTsKIAkJCQlyZXR1cm4gLUVOT0RFVjsKIAkJCX0KIAogCQkJcmV0dXJuIGt2bV9wY2hfcGljX2luaXQoZGV2LCBhZGRyKTsKIAkJZGVmYXVsdDoKLQkJCWt2bV9lcnIoJiMzNDslczogdW5rbm93biBncm91cCAoJWQpIGF0dHIgKCVsbGQpXG4mIzM0OywgX19mdW5jX18sIGF0dHItJmd0O2dyb3VwLAomIzQzOwkJCWt2bV9wcl91bmltcGwoJiMzNDslczogdW5rbm93biBncm91cCAoJWQpIGF0dHIgKCVsbGQpXG4mIzM0OywgX19mdW5jX18sIGF0dHItJmd0O2dyb3VwLAogCQkJCQlhdHRyLSZndDthdHRyKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9rdm0vdmNwdS5jIGIvYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuYwppbmRleCAyMGMyMDdkODBlMzFhZS4uZjgxZGFkYzYyYzk4NmUgMTAwNjQ0Ci0tLSBhL2FyY2gvbG9vbmdhcmNoL2t2bS92Y3B1LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuYwpAQCAtMTQ2NSw2ICYjNDM7MTQ2NSw5IEBAIGludCBrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2ludGVycnVwdCAqaXJxKQogCWlmICh2ZWN0b3IgJmd0Oz0gRVhDQ09ERV9JTlRfTlVNKQogCQlyZXR1cm4gLUVJTlZBTDsKIAomIzQzOwlpZiAoa3ZtX2FyY2hfaXJxY2hpcF9pbl9rZXJuZWwodmNwdS0mZ3Q7a3ZtKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwogCWlmICgha3ZtX2d1ZXN0X2hhc19tc2dpbnQoJmFtcDt2Y3B1LSZndDthcmNoKSAmYW1wOyZhbXA7ICh2ZWN0b3IgPT0gSU5UX0FWRUMpKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtMTQ3Myw3ICYjNDM7MTQ3Niw3IEBAIGludCBrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2ludGVycnVwdCAqaXJxKQogCWVsc2UgaWYgKGludHIgJmx0OyAwKQogCQlrdm1fZGVxdWV1ZV9pcnEodmNwdSwgLWludHIpOwogCWVsc2UgewotCQlrdm1fZXJyKCYjMzQ7JXM6IGludmFsaWQgaW50ZXJydXB0IGlvY3RsICVkXG4mIzM0OywgX19mdW5jX18sIGlycS0mZ3Q7aXJxKTsKJiM0MzsJCWt2bV9wcl91bmltcGwoJiMzNDslczogaW52YWxpZCBpbnRlcnJ1cHQgaW9jdGwgJWRcbiYjMzQ7LCBfX2Z1bmNfXywgaXJxLSZndDtpcnEpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTA6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwMDAKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxNDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkxvb25nQXJjaCBLVk0gUGF0Y2ggQW5hbHlzaXM6IEEgRm9jdXNlZCBFeGFtaW5hdGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBmb3IgTG9vbmdBcmNoIEtWTSwgYW5kIGl0IGxvb2tzIGxpa2UgYSB0YXJnZXRlZCByZWZhY3RvcmluZyBvZiBpbnRlcnJ1cHQgaGFuZGxpbmcuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1doYXQmIzM5O3MgdGhlIG1vdGl2YXRpb24gYW5kLCBjcml0aWNhbGx5LCBpcyB0aGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2U/JiMzNDsgVGhlIGNvcmUgb2YgdGhlIGNoYW5nZXMgc2VlbSB0byByZXZvbHZlIGFyb3VuZCByZXBsYWNpbmcgYGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdGAgd2l0aCBga3ZtX3F1ZXVlX2lycWAgYW5kIGBrdm1fZGVxdWV1ZV9pcnFgIGluIHNldmVyYWwgY3J1Y2lhbCBhcmVhczogYGRtc2ludGNfZGVsaXZlcl9tc2lfdG9fdmNwdWAsIGBlaW9pbnRjX3VwZGF0ZV9pcnFgLCBgaXBpX3NldGAsIGFuZCBgaXBpX2NsZWFyYC4gVGhlIHBhdGNoIGFsc28gaW50cm9kdWNlcyBjaGVja3MgZm9yIGBrdm1fYXJjaF9pcnFjaGlwX2luX2tlcm5lbGAgaW4gYGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdGAsIGVmZmVjdGl2ZWx5IGdhdGluZyB0aGF0IGZ1bmN0aW9uYWxpdHkgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLCBhbmQgaXQgbG9va3MgbGlrZSBzb21lIGNoZWNrcyBpbiBgbG9vbmdhcmNoX2lwaV9yZWFkbGAgYW5kIGBsb29uZ2FyY2hfaXBpX3dyaXRlbGAgdG8gdmFsaWRhdGUgYWRkcmVzcyBhbGlnbm1lbnQuCgpUaGUgZmlyc3QgdGhpbmcgSSYjMzk7bSBjaGVja2luZyBpcyByZWFjaGFiaWxpdHkuIElzIHRoaXMgY29kZSBwYXRoIGV2ZW4gKnBvc3NpYmxlKiB0byBoaXQsIGFuZCBob3c/IEdpdmVuIHRoYXQgaXQmIzM5O3MgTG9vbmdBcmNoLXNwZWNpZmljLCBJIGtub3cgdGhpcyBpcyBvbmx5IGFjY2Vzc2libGUgd2l0aGluIGEgTG9vbmdBcmNoIEtWTSBlbnZpcm9ubWVudC4gU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggdG91Y2hlcyBLVk0gaW9jdGxzLgoKTXkgZXhwZXJ0IGluc3RpbmN0IGdvZXMgc3RyYWlnaHQgdG8gZnV6emluZy4gQ2FuIHdlIHN0cmVzcy10ZXN0IHRoaXMgbmV3IGNvZGU/IFN5emthbGxlciBpcyBteSB1c3VhbCBnby10bywgYnV0IEkgaW1tZWRpYXRlbHkgaGl0IGEgc25hZzogc3l6a2FsbGVyIGhhcyBoaXN0b3JpY2FsbHkgYmVlbiBjaGFsbGVuZ2luZyB0byB1c2Ugd2l0aCBub24teDg2IGFyY2hpdGVjdHVyZXMgd2l0aG91dCBtb3JlIHNwZWNpZmljIHNldHVwLiBTbyBJIGRpZyBpbnRvIGlmIHRoZXJlIGlzIGEgd2F5IHRvIGZ1enogTG9vbmdBcmNoLiBJJiMzOTttIHJlbWluZGVkIHRoYXQgdGhlIGluc3RydWN0aW9ucyBzdGF0ZSB0aGUgY29kZSBwYXRocyBzaG91bGRuJiMzOTt0IGJlIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUuIFRoYXQmIzM5O3MgYSBnb29kIHByb21wdCBhbmQgb25lIHRoYXQmIzM5O3MgYmVlbiBoZWxwZnVsIGluIHRoZSBwYXN0LiBMb29uZ0FyY2ggUUVNVSBhbmQgc3l6a2FsbGVyIG9uIExvb25nQXJjaCBhcmUgbm93IHBsYXVzaWJsZS4KCkxldCYjMzk7cyBhc3N1bWUgdGhhdCBpdCYjMzk7cyB3b3J0aCBmdXp6aW5nLCBiYXNlZCBvbiB0aGlzLgoKSSYjMzk7bSB0aGlua2luZywgJiMzNDtPa2F5LCBpZiBpdCYjMzk7cyBmdXp6YWJsZSwgd2hhdCYjMzk7cyByZXF1aXJlZD8mIzM0OyBgQ09ORklHX0tWTWAgaXMgb2J2aW91cywgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIHN1YnRsZSBkZXBlbmRlbmNpZXMuIFRoZSBjb25maWcgcmVxdWlyZW1lbnRzIGJlY29tZSBhIGNydWNpYWwgbmV4dCBzdGVwIHRvIGZpZ3VyZSBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTA6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvbG9vbmdhcmNoLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWctMTktXG5hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNXG5hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZy0yMS1cdHRyaXN0YXRlIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDEwOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDYwCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS1ZNIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIHRoaXMgS1ZNIHN0dWZmIGFuZCBpbW1lZGlhdGVseSBJIHNlZSB0aGF0IGBDT05GSUdfS1ZNYCBpcyBnb2luZyB0byBiZSBhIGNydWNpYWwgc3RhcnRpbmcgcG9pbnQuIFRoYXQgc2VlbXMgcHJldHR5IG9idmlvdXMsIGJ1dCBsZXQmIzM5O3Mgbm90IG1ha2UgYW55IGFzc3VtcHRpb25zLiBCZWZvcmUgSSBkaWcgdG9vIGRlZXAsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgSSBtaWdodCBiZSBvdmVybG9va2luZy4gSXQmIzM5O3MgZWFzeSB0byBnZXQgdHVubmVsIHZpc2lvbi4gQmVzdCB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZSBmaXJzdC4gUmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgcXVpY2sgbG9vayBhdCB0aGUgYGFyY2gvbG9vbmdhcmNoL2t2bS9NYWtlZmlsZWAgZm9yIGFueSByZWxhdGVkIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIG9yIGJ1aWxkIGRlcGVuZGVuY2llcy4gVGhhdCBNYWtlZmlsZSBzaG91bGQgaG9sZCB0aGUga2V5LCBvciBhdCBsZWFzdCBwb2ludCBtZSBpbiB0aGUgcmlnaHQgZGlyZWN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDEwOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0Oy4qJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9sb29uZ2FyY2gva3ZtL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvbG9vbmdhcmNoL2t2bS9NYWtlZmlsZToxOiMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbmFyY2gvbG9vbmdhcmNoL2t2bS9NYWtlZmlsZToyOiNcbmFyY2gvbG9vbmdhcmNoL2t2bS9NYWtlZmlsZTozOiMgTWFrZWZpbGUgZm9yIExvb25nQXJjaCBLVk0gc3VwcG9ydFxuYXJjaC9sb29uZ2FyY2gva3ZtL01ha2VmaWxlOjQ6I1xuYXJjaC9sb29uZ2FyY2gva3ZtL01ha2VmaWxlOjU6XG5hcmNoL2xvb25nYXJjaC9rdm0vTWFrZWZpbGU6NjppbmNsdWRlICQoc3JjdHJlZSkvdmlydC9rdm0vTWFrZWZpbGUua3ZtXG5hcmNoL2xvb25nYXJjaC9rdm0vTWFrZWZpbGU6NzpcbmFyY2gvbG9vbmdhcmNoL2t2bS9NYWtlZmlsZTo4Om9iai0kKENPTkZJR19LVk0pICYjNDM7PSBrdm0ub1xuYXJjaC9sb29uZ2FyY2gva3ZtL01ha2VmaWxlOjk6XG5hcmNoL2xvb25nYXJjaC9rdm0vTWFrZWZpbGU6MTA6b2JqLXkgJiM0Mzs9IHN3aXRjaC5vXG5hcmNoL2xvb25nYXJjaC9rdm0vTWFrZWZpbGU6MTE6XG5hcmNoL2xvb25nYXJjaC9rdm0vTWFrZWZpbGU6MTI6a3ZtLXkgJiM0Mzs9IGV4aXQub1xuYXJjaC9sb29uZ2FyY2gva3ZtL01ha2VmaWxlOjEzOmt2bS15ICYjNDM7PSBpbnRlcnJ1cHQub1xuYXJjaC9sb29uZ2FyY2gva3ZtL01ha2VmaWxlOjE0Omt2bS15ICYjNDM7PSBtYWluLm9cbmFyY2gvbG9vbmdhcmNoL2t2bS9NYWtlZmlsZToxNTprdm0teSAmIzQzOz0gbW11Lm9cbmFyY2gvbG9vbmdhcmNoL2t2bS9NYWtlZmlsZToxNjprdm0teSAmIzQzOz0gdGltZXIub1xuYXJjaC9sb29uZ2FyY2gva3ZtL01ha2VmaWxlOjE3Omt2bS15ICYjNDM7PSB0bGIub1xuYXJjaC9sb29uZ2FyY2gva3ZtL01ha2VmaWxlOjE4Omt2bS15ICYjNDM7PSB2Y3B1Lm9cbmFyY2gvbG9vbmdhcmNoL2t2bS9NYWtlZmlsZToxOTprdm0teSAmIzQzOz0gdm0ub1xuYXJjaC9sb29uZ2FyY2gva3ZtL01ha2VmaWxlOjIwOmt2bS15ICYjNDM7PSBpbnRjL2lwaS5vXG5hcmNoL2xvb25nYXJjaC9rdm0vTWFrZWZpbGU6MjE6a3ZtLXkgJiM0Mzs9IGludGMvZG1zaW50Yy5vXG5hcmNoL2xvb25nYXJjaC9rdm0vTWFrZWZpbGU6MjI6a3ZtLXkgJiM0Mzs9IGludGMvZWlvaW50Yy5vXG5hcmNoL2xvb25nYXJjaC9rdm0vTWFrZWZpbGU6MjM6a3ZtLXkgJiM0Mzs9IGludGMvcGNoX3BpYy5vXG5hcmNoL2xvb25nYXJjaC9rdm0vTWFrZWZpbGU6MjQ6a3ZtLXkgJiM0Mzs9IGlycWZkLm9cbmFyY2gvbG9vbmdhcmNoL2t2bS9NYWtlZmlsZToyNTpcbmFyY2gvbG9vbmdhcmNoL2t2bS9NYWtlZmlsZToyNjpDRkxBR1NfZXhpdC5vXHQmIzQzOz0gJChjYWxsIGNjLWRpc2FibGUtd2FybmluZywgb3ZlcnJpZGUtaW5pdClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxMDoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzg2NwoJCQkJCQkJb3V0cHV0OiAxNTkKCQkJCQkJCXRob3VnaHRzOiAxMDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIEtleSBLVk0gQ2hhbmdlcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYENPTkZJR19LVk1gIGZsYWdnZWQgYXMgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gaXRlbS4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGNvcmUgY2hhbmdlcy4gVGhlIGFuYWx5c2lzIGluZGljYXRlcyBhIHNpZ25pZmljYW50IG51bWJlciBvZiBmdW5jdGlvbnMgaGF2ZSBiZWVuIHRvdWNoZWQsIGJ1dCBtYW55IGFyZSBqdXN0IHRyaXZpYWwgcmVwbGFjZW1lbnRzIG9mIGBrdm1fZXJyYCB3aXRoIGBrdm1fcHJfdW5pbXBsYC4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBvbiB0aGUgb25lcyB0aGF0IHJlcHJlc2VudCBtb3JlIHN1YnN0YW50aXZlIGFsdGVyYXRpb25zIHRvIHRoZSBLVk0gZnVuY3Rpb25hbGl0eS4KCkkmIzM5O3ZlIGlkZW50aWZpZWQgYSBsaXN0IG9mIG1vZGlmaWVkIGZ1bmN0aW9ucywgdGhlbiBuYXJyb3dlZCB0aGF0IGxpc3QgdG8gdGhlIG9uZXMgd2l0aCBzdWJzdGFudGlhbCBjaGFuZ2VzLiBOb3csIEkmIzM5O20gc2VsZWN0aW5nIHNvbWUgb2YgdGhlc2UgZnVuY3Rpb25zIHRvIHVzZSBhcyBmb2N1cyBzeW1ib2xzOiBga3ZtX3ZjcHVfaW9jdGxfaW50ZXJydXB0YCwgYGRtc2ludGNfZGVsaXZlcl9tc2lfdG9fdmNwdWAsIGBlaW9pbnRjX3VwZGF0ZV9pcnFgLCBgbG9vbmdhcmNoX2lwaV9yZWFkbGAsIGFuZCBgbG9vbmdhcmNoX2lwaV93cml0ZWxgLgoKTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgSSBoYXZlIHRoZSBmdW5jdGlvbiBuYW1lcyBjb3JyZWN0OyB5dXAsIGFsbCBnb29kLgoKVGhlIHJlYXNvbmluZyBiZWhpbmQgdGhpcyBzZWxlY3Rpb24/IFRoZSBwYXRjaCBpcyBmdW5kYW1lbnRhbGx5IGNoYW5naW5nIGhvdyBpbnRlcnJ1cHRzIGFyZSBpbmplY3RlZCBhbmQgSVBJIGhhbmRsaW5nIHdvcmtzIHdpdGhpbiB0aGUgTG9vbmdBcmNoIEtWTSBlbnZpcm9ubWVudC4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyByZXBsYWNpbmcgYGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdGAgd2l0aCBga3ZtX3F1ZXVlX2lycWAgZm9yIGludGVycnVwdCBpbmplY3Rpb24gYW5kIGNvcnJlY3RpbmcgYWxpZ25tZW50IGNoZWNrcyBpbiBJUEkgcmVhZC93cml0ZSBoYW5kbGVycy4gVGhlc2UgZnVuY3Rpb25zIGFyZSBjcml0aWNhbCBiZWNhdXNlIHRoZXkmIzM5O3JlIGRpcmVjdGx5IGludm9sdmVkIGluIGludGVyYWN0aW9ucyB0aHJvdWdoIEtWTSBpb2N0bHMgYW5kIE1NSU8vSU9DU1IgZXhpdHMsIG1ha2luZyB0aGVtIGEgZ29vZCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHBhdGNoLiBUaW1lIHRvIHJlcG9ydCB0aGVzZSBmaW5kaW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxMDoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3ZjcHVfaW9jdGxfaW50ZXJydXB0JiMzNDssCiAgICAmIzM0O2Rtc2ludGNfZGVsaXZlcl9tc2lfdG9fdmNwdSYjMzQ7LAogICAgJiMzNDtlaW9pbnRjX3VwZGF0ZV9pcnEmIzM0OywKICAgICYjMzQ7bG9vbmdhcmNoX2lwaV9yZWFkbCYjMzQ7LAogICAgJiMzNDtsb29uZ2FyY2hfaXBpX3dyaXRlbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBMb29uZ0FyY2ggS1ZNIGludGVycnVwdCBpbmplY3Rpb24gYW5kIElQSSBoYW5kbGluZywgcmVwbGFjaW5nIGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdCB3aXRoIGt2bV9xdWV1ZV9pcnEgYW5kIGZpeGluZyBhbGlnbm1lbnQgY2hlY2tzIGluIElQSSByZWFkL3dyaXRlIGhhbmRsZXJzLiBUaGVzZSBhcmUgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIGFuZCBNTUlPL0lPQ1NSIGV4aXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHQmIzM0OywKICAgICYjMzQ7ZG1zaW50Y19kZWxpdmVyX21zaV90b192Y3B1JiMzNDssCiAgICAmIzM0O2Vpb2ludGNfdXBkYXRlX2lycSYjMzQ7LAogICAgJiMzNDtsb29uZ2FyY2hfaXBpX3JlYWRsJiMzNDssCiAgICAmIzM0O2xvb25nYXJjaF9pcGlfd3JpdGVsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIExvb25nQXJjaCBLVk0gaW50ZXJydXB0IGluamVjdGlvbiBhbmQgSVBJIGhhbmRsaW5nLCByZXBsYWNpbmcga3ZtX3ZjcHVfaW9jdGxfaW50ZXJydXB0IHdpdGgga3ZtX3F1ZXVlX2lycSBhbmQgZml4aW5nIGFsaWdubWVudCBjaGVja3MgaW4gSVBJIHJlYWQvd3JpdGUgaGFuZGxlcnMuIFRoZXNlIGFyZSByZWFjaGFibGUgdmlhIEtWTSBpb2N0bHMgYW5kIE1NSU8vSU9DU1IgZXhpdHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxMDoyMDoyMC4zODY1NTk0MDVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzc4MjUzMjUyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHRcIixcbiAgICBcImRtc2ludGNfZGVsaXZlcl9tc2lfdG9fdmNwdVwiLFxuICAgIFwiZWlvaW50Y191cGRhdGVfaXJxXCIsXG4gICAgXCJsb29uZ2FyY2hfaXBpX3JlYWRsXCIsXG4gICAgXCJsb29uZ2FyY2hfaXBpX3dyaXRlbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIExvb25nQXJjaCBLVk0gaW50ZXJydXB0IGluamVjdGlvbiBhbmQgSVBJIGhhbmRsaW5nLCByZXBsYWNpbmcga3ZtX3ZjcHVfaW9jdGxfaW50ZXJydXB0IHdpdGgga3ZtX3F1ZXVlX2lycSBhbmQgZml4aW5nIGFsaWdubWVudCBjaGVja3MgaW4gSVBJIHJlYWQvd3JpdGUgaGFuZGxlcnMuIFRoZXNlIGFyZSByZWFjaGFibGUgdmlhIEtWTSBpb2N0bHMgYW5kIE1NSU8vSU9DU1IgZXhpdHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDEwOjIwOjIwLjM4NjU2NjMzNVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzNTc3NTU5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDkzMmEyYWY2MWMwMDg4NGE5OGRiMDI2NzEwNTAwNDY5NDM0NmEzMWZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBKdWwgMTQgMTA6MjA6MTggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gva3ZtL2V4aXQuYyBiL2FyY2gvbG9vbmdhcmNoL2t2bS9leGl0LmNcXG5pbmRleCA4NTcyYjYzNDc4YmI5OC4uNTkwNTgwZDAzMDNlYTkgMTAwNjQ0XFxuLS0tIGEvYXJjaC9sb29uZ2FyY2gva3ZtL2V4aXQuY1xcbisrKyBiL2FyY2gvbG9vbmdhcmNoL2t2bS9leGl0LmNcXG5AQCAtMjUyLDcgKzI1Miw3IEBAIGludCBrdm1fY29tcGxldGVfaW9jc3JfcmVhZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcnVuICpydW4pXFxuIFxcdFxcdCpncHIgPSAqKHM2NCAqKXJ1bi1cXHUwMDNlaW9jc3JfaW8uZGF0YTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGRlZmF1bHQ6XFxuLVxcdFxcdGt2bV9lcnIoXFxcIkJhZCBJT0NTUiBsZW5ndGg6ICVkLCBhZGRyIGlzIDB4JWx4XFxcXG5cXFwiLFxcbitcXHRcXHRrdm1fcHJfdW5pbXBsKFxcXCJCYWQgSU9DU1IgbGVuZ3RoOiAlZCwgYWRkciBpcyAweCVseFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0XFx0cnVuLVxcdTAwM2Vpb2Nzcl9pby5sZW4sIHZjcHUtXFx1MDAzZWFyY2guYmFkdik7XFxuIFxcdFxcdGVyID0gRU1VTEFURV9GQUlMO1xcbiBcXHRcXHRicmVhaztcXG5AQCAtMzI2LDcgKzMyNiw3IEBAIHN0YXRpYyBpbnQga3ZtX3RyYXBfaGFuZGxlX2dzcHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXG4gXFx0LyogUm9sbGJhY2sgUEMgb25seSBpZiBlbXVsYXRpb24gd2FzIHVuc3VjY2Vzc2Z1bCAqL1xcbiBcXHRpZiAoZXIgPT0gRU1VTEFURV9GQUlMKSB7XFxuLVxcdFxcdGt2bV9lcnIoXFxcIlslI2x4XSVzOiB1bnN1cHBvcnRlZCBnc3ByIGluc3RydWN0aW9uIDB4JTA4eFxcXFxuXFxcIixcXG4rXFx0XFx0a3ZtX3ByX3VuaW1wbChcXFwiWyUjbHhdJXM6IHVuc3VwcG9ydGVkIGdzcHIgaW5zdHJ1Y3Rpb24gMHglMDh4XFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRjdXJyX3BjLCBfX2Z1bmNfXywgaW5zdC53b3JkKTtcXG4gXFxuIFxcdFxcdGt2bV9hcmNoX3ZjcHVfZHVtcF9yZWdzKHZjcHUpO1xcbkBAIC00OTEsNyArNDkxLDcgQEAgaW50IGt2bV9lbXVfbW1pb19yZWFkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgbGFyY2hfaW5zdCBpbnN0KVxcbiBcXHRcXHRyZXR1cm4gRU1VTEFURV9ET19NTUlPO1xcbiBcXHR9XFxuIFxcbi1cXHRrdm1fZXJyKFxcXCJSZWFkIG5vdCBzdXBwb3J0ZWQgSW5zdD0weCUwOHggQCVseCBCYWRWYWRkcjolI2x4XFxcXG5cXFwiLFxcbitcXHRrdm1fcHJfdW5pbXBsKFxcXCJSZWFkIG5vdCBzdXBwb3J0ZWQgSW5zdD0weCUwOHggQCVseCBCYWRWYWRkcjolI2x4XFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRpbnN0LndvcmQsIHZjcHUtXFx1MDAzZWFyY2gucGMsIHZjcHUtXFx1MDAzZWFyY2guYmFkdik7XFxuIFxcdGt2bV9hcmNoX3ZjcHVfZHVtcF9yZWdzKHZjcHUpO1xcbiBcXHR2Y3B1LVxcdTAwM2VtbWlvX25lZWRlZCA9IDA7XFxuQEAgLTUyOSw3ICs1MjksNyBAQCBpbnQga3ZtX2NvbXBsZXRlX21taW9fcmVhZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcnVuICpydW4pXFxuIFxcdFxcdCpncHIgPSAqKHM2NCAqKXJ1bi1cXHUwMDNlbW1pby5kYXRhO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0ZGVmYXVsdDpcXG4tXFx0XFx0a3ZtX2VycihcXFwiQmFkIE1NSU8gbGVuZ3RoOiAlZCwgYWRkciBpcyAweCVseFxcXFxuXFxcIixcXG4rXFx0XFx0a3ZtX3ByX3VuaW1wbChcXFwiQmFkIE1NSU8gbGVuZ3RoOiAlZCwgYWRkciBpcyAweCVseFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0XFx0cnVuLVxcdTAwM2VtbWlvLmxlbiwgdmNwdS1cXHUwMDNlYXJjaC5iYWR2KTtcXG4gXFx0XFx0ZXIgPSBFTVVMQVRFX0ZBSUw7XFxuIFxcdFxcdGJyZWFrO1xcbkBAIC02NTYsNyArNjU2LDcgQEAgaW50IGt2bV9lbXVfbW1pb193cml0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGxhcmNoX2luc3QgaW5zdClcXG4gXFx0fVxcbiBcXG4gXFx0dmNwdS1cXHUwMDNlYXJjaC5wYyA9IGN1cnJfcGM7XFxuLVxcdGt2bV9lcnIoXFxcIldyaXRlIG5vdCBzdXBwb3J0ZWQgSW5zdD0weCUwOHggQCVseCBCYWRWYWRkcjolI2x4XFxcXG5cXFwiLFxcbitcXHRrdm1fcHJfdW5pbXBsKFxcXCJXcml0ZSBub3Qgc3VwcG9ydGVkIEluc3Q9MHglMDh4IEAlbHggQmFkVmFkZHI6JSNseFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0aW5zdC53b3JkLCB2Y3B1LVxcdTAwM2VhcmNoLnBjLCB2Y3B1LVxcdTAwM2VhcmNoLmJhZHYpO1xcbiBcXHRrdm1fYXJjaF92Y3B1X2R1bXBfcmVncyh2Y3B1KTtcXG4gXFx0LyogUm9sbGJhY2sgUEMgaWYgZW11bGF0aW9uIHdhcyB1bnN1Y2Nlc3NmdWwgKi9cXG5AQCAtNzQ4LDggKzc0OCw4IEBAIHN0YXRpYyBpbnQga3ZtX2hhbmRsZV9mcHVfZGlzYWJsZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgZWNvZGUpXFxuIFxcdCAqIHRyZWF0ZWQgYXMgYSByZXNlcnZlZCBpbnN0cnVjdGlvbiFcXG4gXFx0ICogSWYgRlBVIGFscmVhZHkgaW4gdXNlLCB3ZSBzaG91bGRuJ3QgZ2V0IHRoaXMgYXQgYWxsLlxcbiBcXHQgKi9cXG4tXFx0aWYgKFdBUk5fT04odmNwdS1cXHUwMDNlYXJjaC5hdXhfaW51c2UgXFx1MDAyNiBLVk1fTEFSQ0hfRlBVKSkge1xcbi1cXHRcXHRrdm1fZXJyKFxcXCIlcyBpbnRlcm5hbCBlcnJvclxcXFxuXFxcIiwgX19mdW5jX18pO1xcbitcXHRpZiAodmNwdS1cXHUwMDNlYXJjaC5hdXhfaW51c2UgXFx1MDAyNiBLVk1fTEFSQ0hfRlBVKSB7XFxuK1xcdFxcdGt2bV9wcl91bmltcGwoXFxcIiVzIGludGVybmFsIGVycm9yXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuIFxcdFxcdHJ1bi1cXHUwMDNlZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9JTlRFUk5BTF9FUlJPUjtcXG4gXFx0XFx0cmV0dXJuIFJFU1VNRV9IT1NUO1xcbiBcXHR9XFxuQEAgLTk0Myw3ICs5NDMsNyBAQCBzdGF0aWMgaW50IGt2bV9mYXVsdF9uaShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBlY29kZSlcXG4gXFx0LyogRmV0Y2ggdGhlIGluc3RydWN0aW9uICovXFxuIFxcdGluc3QgPSB2Y3B1LVxcdTAwM2VhcmNoLmJhZGk7XFxuIFxcdGJhZHYgPSB2Y3B1LVxcdTAwM2VhcmNoLmJhZHY7XFxuLVxcdGt2bV9lcnIoXFxcIkVDb2RlOiAlZCBQQz0lI2x4IEluc3Q9MHglMDh4IEJhZFZhZGRyPSUjbHggRVNUQVQ9JSNseFxcXFxuXFxcIixcXG4rXFx0a3ZtX3ByX3VuaW1wbChcXFwiRUNvZGU6ICVkIFBDPSUjbHggSW5zdD0weCUwOHggQmFkVmFkZHI9JSNseCBFU1RBVD0lI2x4XFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRlY29kZSwgdmNwdS1cXHUwMDNlYXJjaC5wYywgaW5zdCwgYmFkdiwgcmVhZF9nY3NyX2VzdGF0KCkpO1xcbiBcXHRrdm1fYXJjaF92Y3B1X2R1bXBfcmVncyh2Y3B1KTtcXG4gXFx0a3ZtX3F1ZXVlX2V4Y2VwdGlvbih2Y3B1LCBFWENDT0RFX0lORSwgMCk7XFxuZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Rtc2ludGMuYyBiL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Rtc2ludGMuY1xcbmluZGV4IGRlMjU3MzVjZTAzOTQ2Li4xYzcxNmUyNGM1YjAyMiAxMDA2NDRcXG4tLS0gYS9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9kbXNpbnRjLmNcXG4rKysgYi9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9kbXNpbnRjLmNcXG5AQCAtMjEsNiArMjEsOCBAQCB2b2lkIGRtc2ludGNfaW5qZWN0X2lycShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdFxcdG9sZCA9IGF0b21pYzY0X3JlYWQoXFx1MDAyNihkcy1cXHUwMDNldmVjdG9yX21hcFtpXSkpO1xcbiBcXHRcXHRpZiAob2xkKVxcbiBcXHRcXHRcXHR2ZWN0b3JbaV0gPSBhdG9taWM2NF94Y2hnKFxcdTAwMjYoZHMtXFx1MDAzZXZlY3Rvcl9tYXBbaV0pLCAwKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHR2ZWN0b3JbaV0gPSAwO1xcbiBcXHR9XFxuIFxcbiBcXHRpZiAodmVjdG9yWzBdKSB7XFxuQEAgLTQ3LDcgKzQ5LDYgQEAgdm9pZCBkbXNpbnRjX2luamVjdF9pcnEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBpbnQgZG1zaW50Y19kZWxpdmVyX21zaV90b192Y3B1KHN0cnVjdCBrdm0gKmt2bSxcXG4gXFx0XFx0XFx0XFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgdmVjdG9yLCBpbnQgbGV2ZWwpXFxuIHtcXG4tXFx0c3RydWN0IGt2bV9pbnRlcnJ1cHQgdmNwdV9pcnE7XFxuIFxcdHN0cnVjdCBkbXNpbnRjX3N0YXRlICpkcyA9IFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLmRtc2ludGNfc3RhdGU7XFxuIFxcbiBcXHRpZiAoIWxldmVsKVxcbkBAIC01Nyw5ICs1OCwxMSBAQCBpbnQgZG1zaW50Y19kZWxpdmVyX21zaV90b192Y3B1KHN0cnVjdCBrdm0gKmt2bSxcXG4gXFx0aWYgKCFkcylcXG4gXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuIFxcbi1cXHR2Y3B1X2lycS5pcnEgPSBJTlRfQVZFQztcXG4rXFx0aWYgKCFrdm1fZ3Vlc3RfaGFzX21zZ2ludChcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaCkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4gXFx0c2V0X2JpdCh2ZWN0b3IsICh1bnNpZ25lZCBsb25nICopXFx1MDAyNmRzLVxcdTAwM2V2ZWN0b3JfbWFwKTtcXG4tXFx0a3ZtX3ZjcHVfaW9jdGxfaW50ZXJydXB0KHZjcHUsIFxcdTAwMjZ2Y3B1X2lycSk7XFxuK1xcdGt2bV9xdWV1ZV9pcnEodmNwdSwgSU5UX0FWRUMpO1xcbiBcXHRrdm1fdmNwdV9raWNrKHZjcHUpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTExNCw3ICsxMTcsNyBAQCBzdGF0aWMgaW50IGt2bV9kbXNpbnRjX2N0cmxfYWNjZXNzKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsXFxuIFxcdFxcdH1cXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGRlZmF1bHQ6XFxuLVxcdFxcdGt2bV9lcnIoXFxcIiVzOiB1bmtub3duIGRtc2ludGMgcmVnaXN0ZXIsIGFkZHIgPSAlZFxcXFxuXFxcIiwgX19mdW5jX18sIGFkZHIpO1xcbitcXHRcXHRrdm1fcHJfdW5pbXBsKFxcXCIlczogdW5rbm93biBkbXNpbnRjIHJlZ2lzdGVyLCBhZGRyID0gJWRcXFxcblxcXCIsIF9fZnVuY19fLCBhZGRyKTtcXG4gXFx0XFx0cmV0dXJuIC1FTlhJTztcXG4gXFx0fVxcbiBcXG5AQCAtMTI4LDcgKzEzMSw3IEBAIHN0YXRpYyBpbnQga3ZtX2Rtc2ludGNfc2V0X2F0dHIoc3RydWN0IGt2bV9kZXZpY2UgKmRldixcXG4gXFx0Y2FzZSBLVk1fREVWX0xPT05HQVJDSF9ETVNJTlRDX0dSUF9DVFJMOlxcbiBcXHRcXHRyZXR1cm4ga3ZtX2Rtc2ludGNfY3RybF9hY2Nlc3MoZGV2LCBhdHRyLCB0cnVlKTtcXG4gXFx0ZGVmYXVsdDpcXG4tXFx0XFx0a3ZtX2VycihcXFwiJXM6IHVua25vd24gZ3JvdXAgKCVkKVxcXFxuXFxcIiwgX19mdW5jX18sIGF0dHItXFx1MDAzZWdyb3VwKTtcXG4rXFx0XFx0a3ZtX3ByX3VuaW1wbChcXFwiJXM6IHVua25vd24gZ3JvdXAgKCVkKVxcXFxuXFxcIiwgX19mdW5jX18sIGF0dHItXFx1MDAzZWdyb3VwKTtcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gfVxcbkBAIC0xMzksMTMgKzE0MiwxMyBAQCBzdGF0aWMgaW50IGt2bV9kbXNpbnRjX2NyZWF0ZShzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LCB1MzIgdHlwZSlcXG4gXFx0c3RydWN0IGxvb25nYXJjaF9kbXNpbnRjICpzO1xcbiBcXG4gXFx0aWYgKCFkZXYpIHtcXG4tXFx0XFx0a3ZtX2VycihcXFwiJXM6IGt2bV9kZXZpY2UgcHRyIGlzIGludmFsaWQhXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuK1xcdFxcdGt2bV9wcl91bmltcGwoXFxcIiVzOiBrdm1fZGV2aWNlIHB0ciBpcyBpbnZhbGlkIVxcXFxuXFxcIiwgX19mdW5jX18pO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXG4gXFx0a3ZtID0gZGV2LVxcdTAwM2Vrdm07XFxuIFxcdGlmIChrdm0tXFx1MDAzZWFyY2guZG1zaW50Yykge1xcbi1cXHRcXHRrdm1fZXJyKFxcXCIlczogTG9vbmdBcmNoIERNU0lOVEMgaGFzIGFscmVhZHkgYmVlbiBjcmVhdGVkIVxcXFxuXFxcIiwgX19mdW5jX18pO1xcbitcXHRcXHRrdm1fcHJfdW5pbXBsKFxcXCIlczogTG9vbmdBcmNoIERNU0lOVEMgaGFzIGFscmVhZHkgYmVlbiBjcmVhdGVkIVxcXFxuXFxcIiwgX19mdW5jX18pO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jIGIvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jXFxuaW5kZXggMmIxNDQ4NWQxNGE3MDguLmUwNGFhZGJkNjhkYjk2IDEwMDY0NFxcbi0tLSBhL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuY1xcbisrKyBiL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuY1xcbkBAIC0xNyw3ICsxNyw4IEBAIHN0YXRpYyB2b2lkIGVpb2ludGNfc2V0X3N3X2NvcmVpc3Ioc3RydWN0IGxvb25nYXJjaF9laW9pbnRjICpzKVxcbiBcXHRcXHRpZiAoIShzLVxcdTAwM2VzdGF0dXMgXFx1MDAyNiBCSVQoRUlPSU5UQ19FTkFCTEVfSU5UX0VOQ09ERSkpKSB7XFxuIFxcdFxcdFxcdGlwbnVtID0gY291bnRfdHJhaWxpbmdfemVyb3MoaXBudW0pO1xcbiBcXHRcXHRcXHRpcG51bSA9IGlwbnVtIFxcdTAwM2MgNCA/IGlwbnVtIDogMDtcXG4tXFx0XFx0fVxcbitcXHRcXHR9IGVsc2UgaWYgKGlwbnVtIFxcdTAwM2U9IExPT05HU09OX0lQX05VTSlcXG4rXFx0XFx0XFx0aXBudW0gPSAwO1xcbiBcXG4gXFx0XFx0Y3B1aWQgPSAoKHU4ICopcy1cXHUwMDNlY29yZW1hcClbaXJxXTtcXG4gXFx0XFx0dmNwdSA9IGt2bV9nZXRfdmNwdV9ieV9jcHVpZChzLVxcdTAwM2Vrdm0sIGNwdWlkKTtcXG5AQCAtMzYsMTggKzM3LDE4IEBAIHN0YXRpYyB2b2lkIGVpb2ludGNfdXBkYXRlX2lycShzdHJ1Y3QgbG9vbmdhcmNoX2Vpb2ludGMgKnMsIGludCBpcnEsIGludCBsZXZlbClcXG4ge1xcbiBcXHRpbnQgaXBudW0sIGNwdSwgZm91bmQ7XFxuIFxcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcXG4tXFx0c3RydWN0IGt2bV9pbnRlcnJ1cHQgdmNwdV9pcnE7XFxuIFxcbiBcXHRpcG51bSA9IChzLVxcdTAwM2VpcG1hcCBcXHUwMDNlXFx1MDAzZSAoaXJxIC8gMzIgKiA4KSkgXFx1MDAyNiAweGZmO1xcbiBcXHRpZiAoIShzLVxcdTAwM2VzdGF0dXMgXFx1MDAyNiBCSVQoRUlPSU5UQ19FTkFCTEVfSU5UX0VOQ09ERSkpKSB7XFxuIFxcdFxcdGlwbnVtID0gY291bnRfdHJhaWxpbmdfemVyb3MoaXBudW0pO1xcbiBcXHRcXHRpcG51bSA9IGlwbnVtIFxcdTAwM2MgNCA/IGlwbnVtIDogMDtcXG4tXFx0fVxcbitcXHR9IGVsc2UgaWYgKGlwbnVtIFxcdTAwM2U9IExPT05HU09OX0lQX05VTSlcXG4rXFx0XFx0aXBudW0gPSAwO1xcbiBcXG4gXFx0Y3B1ID0gcy1cXHUwMDNlc3dfY29yZW1hcFtpcnFdO1xcbiBcXHR2Y3B1ID0ga3ZtX2dldF92Y3B1X2J5X2lkKHMtXFx1MDAzZWt2bSwgY3B1KTtcXG4gXFx0aWYgKHVubGlrZWx5KHZjcHUgPT0gTlVMTCkpIHtcXG4tXFx0XFx0a3ZtX2VycihcXFwiJXM6IGludmFsaWQgdGFyZ2V0IGNwdTogJWRcXFxcblxcXCIsIF9fZnVuY19fLCBjcHUpO1xcbitcXHRcXHRrdm1fcHJfdW5pbXBsKFxcXCIlczogaW52YWxpZCB0YXJnZXQgY3B1OiAlZFxcXFxuXFxcIiwgX19mdW5jX18sIGNwdSk7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG5AQCAtNjcsOCArNjgsMTEgQEAgc3RhdGljIHZvaWQgZWlvaW50Y191cGRhdGVfaXJxKHN0cnVjdCBsb29uZ2FyY2hfZWlvaW50YyAqcywgaW50IGlycSwgaW50IGxldmVsKVxcbiBcXHRpZiAoZm91bmQgXFx1MDAzYyBFSU9JTlRDX0lSUVMpXFxuIFxcdFxcdHJldHVybjsgLyogb3RoZXIgaXJxIGlzIGhhbmRsaW5nLCBuZWVkbid0IHVwZGF0ZSBwYXJlbnQgaXJxICovXFxuIFxcbi1cXHR2Y3B1X2lycS5pcnEgPSBsZXZlbCA/IChJTlRfSFdJMCArIGlwbnVtKSA6IC0oSU5UX0hXSTAgKyBpcG51bSk7XFxuLVxcdGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdCh2Y3B1LCBcXHUwMDI2dmNwdV9pcnEpO1xcbitcXHRpZiAobGV2ZWwpXFxuK1xcdFxcdGt2bV9xdWV1ZV9pcnEodmNwdSwgSU5UX0hXSTAgKyBpcG51bSk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0a3ZtX2RlcXVldWVfaXJxKHZjcHUsIElOVF9IV0kwICsgaXBudW0pO1xcbitcXHRrdm1fdmNwdV9raWNrKHZjcHUpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgZWlvaW50Y191cGRhdGVfc3dfY29yZW1hcChzdHJ1Y3QgbG9vbmdhcmNoX2Vpb2ludGMgKnMsXFxuQEAgLTE2NSwxMiArMTY5LDEyIEBAIHN0YXRpYyBpbnQga3ZtX2Vpb2ludGNfcmVhZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIFxcdHN0cnVjdCBsb29uZ2FyY2hfZWlvaW50YyAqZWlvaW50YyA9IHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5laW9pbnRjO1xcbiBcXG4gXFx0aWYgKCFlaW9pbnRjKSB7XFxuLVxcdFxcdGt2bV9lcnIoXFxcIiVzOiBlaW9pbnRjIGlycWNoaXAgbm90IHZhbGlkIVxcXFxuXFxcIiwgX19mdW5jX18pO1xcbitcXHRcXHRrdm1fcHJfdW5pbXBsKFxcXCIlczogZWlvaW50YyBpcnFjaGlwIG5vdCB2YWxpZCFcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG4gXFxuIFxcdGlmIChhZGRyIFxcdTAwMjYgKGxlbiAtIDEpKSB7XFxuLVxcdFxcdGt2bV9lcnIoXFxcIiVzOiBlaW9pbnRjIG5vdCBhbGlnbmVkIGFkZHIgJWxseCBsZW4gJWRcXFxcblxcXCIsIF9fZnVuY19fLCBhZGRyLCBsZW4pO1xcbitcXHRcXHRrdm1fcHJfdW5pbXBsKFxcXCIlczogZWlvaW50YyBub3QgYWxpZ25lZCBhZGRyICVsbHggbGVuICVkXFxcXG5cXFwiLCBfX2Z1bmNfXywgYWRkciwgbGVuKTtcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG4gXFxuQEAgLTI5NywxMiArMzAxLDEyIEBAIHN0YXRpYyBpbnQga3ZtX2Vpb2ludGNfd3JpdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXHRzdHJ1Y3QgbG9vbmdhcmNoX2Vpb2ludGMgKmVpb2ludGMgPSB2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2guZWlvaW50YztcXG4gXFxuIFxcdGlmICghZWlvaW50Yykge1xcbi1cXHRcXHRrdm1fZXJyKFxcXCIlczogZWlvaW50YyBpcnFjaGlwIG5vdCB2YWxpZCFcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4rXFx0XFx0a3ZtX3ByX3VuaW1wbChcXFwiJXM6IGVpb2ludGMgaXJxY2hpcCBub3QgdmFsaWQhXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuIFxcbiBcXHRpZiAoYWRkciBcXHUwMDI2IChsZW4gLSAxKSkge1xcbi1cXHRcXHRrdm1fZXJyKFxcXCIlczogZWlvaW50YyBub3QgYWxpZ25lZCBhZGRyICVsbHggbGVuICVkXFxcXG5cXFwiLCBfX2Z1bmNfXywgYWRkciwgbGVuKTtcXG4rXFx0XFx0a3ZtX3ByX3VuaW1wbChcXFwiJXM6IGVpb2ludGMgbm90IGFsaWduZWQgYWRkciAlbGx4IGxlbiAlZFxcXFxuXFxcIiwgX19mdW5jX18sIGFkZHIsIGxlbik7XFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuIFxcbkBAIC0zNDUsNyArMzQ5LDcgQEAgc3RhdGljIGludCBrdm1fZWlvaW50Y192aXJ0X3JlYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXHRzdHJ1Y3QgbG9vbmdhcmNoX2Vpb2ludGMgKmVpb2ludGMgPSB2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2guZWlvaW50YztcXG4gXFxuIFxcdGlmICghZWlvaW50Yykge1xcbi1cXHRcXHRrdm1fZXJyKFxcXCIlczogZWlvaW50YyBpcnFjaGlwIG5vdCB2YWxpZCFcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4rXFx0XFx0a3ZtX3ByX3VuaW1wbChcXFwiJXM6IGVpb2ludGMgaXJxY2hpcCBub3QgdmFsaWQhXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuIFxcbkBAIC0zNzUsNyArMzc5LDcgQEAgc3RhdGljIGludCBrdm1fZWlvaW50Y192aXJ0X3dyaXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4gXFx0c3RydWN0IGxvb25nYXJjaF9laW9pbnRjICplaW9pbnRjID0gdmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLmVpb2ludGM7XFxuIFxcbiBcXHRpZiAoIWVpb2ludGMpIHtcXG4tXFx0XFx0a3ZtX2VycihcXFwiJXM6IGVpb2ludGMgaXJxY2hpcCBub3QgdmFsaWQhXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuK1xcdFxcdGt2bV9wcl91bmltcGwoXFxcIiVzOiBlaW9pbnRjIGlycWNoaXAgbm90IHZhbGlkIVxcXFxuXFxcIiwgX19mdW5jX18pO1xcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiBcXG5AQCAtNTAyLDcgKzUwNiw3IEBAIHN0YXRpYyBpbnQga3ZtX2Vpb2ludGNfcmVnc19hY2Nlc3Moc3RydWN0IGt2bV9kZXZpY2UgKmRldixcXG4gXFx0XFx0cCA9ICh2b2lkICopcy1cXHUwMDNlY29yZW1hcCArIG9mZnNldCAqIDQ7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRkZWZhdWx0Olxcbi1cXHRcXHRrdm1fZXJyKFxcXCIlczogdW5rbm93biBlaW9pbnRjIHJlZ2lzdGVyLCBhZGRyID0gJWRcXFxcblxcXCIsIF9fZnVuY19fLCBhZGRyKTtcXG4rXFx0XFx0a3ZtX3ByX3VuaW1wbChcXFwiJXM6IHVua25vd24gZWlvaW50YyByZWdpc3RlciwgYWRkciA9ICVkXFxcXG5cXFwiLCBfX2Z1bmNfXywgYWRkcik7XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuIFxcbkBAIC01NDYsNyArNTUwLDcgQEAgc3RhdGljIGludCBrdm1fZWlvaW50Y19zd19zdGF0dXNfYWNjZXNzKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsXFxuIFxcdFxcdHAgPSBcXHUwMDI2cy1cXHUwMDNlc3RhdHVzO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0ZGVmYXVsdDpcXG4tXFx0XFx0a3ZtX2VycihcXFwiJXM6IHVua25vd24gZWlvaW50YyByZWdpc3RlciwgYWRkciA9ICVkXFxcXG5cXFwiLCBfX2Z1bmNfXywgYWRkcik7XFxuK1xcdFxcdGt2bV9wcl91bmltcGwoXFxcIiVzOiB1bmtub3duIGVpb2ludGMgcmVnaXN0ZXIsIGFkZHIgPSAlZFxcXFxuXFxcIiwgX19mdW5jX18sIGFkZHIpO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2cy1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuYyBiL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jXFxuaW5kZXggNGZhMDg5N2Q3YmRiMDAuLmYzMGQwZDEzZjU0ZDA1IDEwMDY0NFxcbi0tLSBhL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jXFxuKysrIGIvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmNcXG5AQCAtMTAsMTYgKzEwLDE1IEBAXFxuIHN0YXRpYyB2b2lkIGlwaV9zZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1aW50MzJfdCBkYXRhKVxcbiB7XFxuIFxcdHVpbnQzMl90IHN0YXR1cztcXG4tXFx0c3RydWN0IGt2bV9pbnRlcnJ1cHQgaXJxO1xcbiBcXG4gXFx0c3Bpbl9sb2NrKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLmlwaV9zdGF0ZS5sb2NrKTtcXG4gXFx0c3RhdHVzID0gdmNwdS1cXHUwMDNlYXJjaC5pcGlfc3RhdGUuc3RhdHVzO1xcbiBcXHR2Y3B1LVxcdTAwM2VhcmNoLmlwaV9zdGF0ZS5zdGF0dXMgfD0gZGF0YTtcXG4tXFx0c3Bpbl91bmxvY2soXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2guaXBpX3N0YXRlLmxvY2spO1xcbiBcXHRpZiAoKHN0YXR1cyA9PSAwKSBcXHUwMDI2XFx1MDAyNiBkYXRhKSB7XFxuLVxcdFxcdGlycS5pcnEgPSBMQVJDSF9JTlRfSVBJO1xcbi1cXHRcXHRrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHQodmNwdSwgXFx1MDAyNmlycSk7XFxuK1xcdFxcdGt2bV9xdWV1ZV9pcnEodmNwdSwgTEFSQ0hfSU5UX0lQSSk7XFxuK1xcdFxcdGt2bV92Y3B1X2tpY2sodmNwdSk7XFxuIFxcdH1cXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2guaXBpX3N0YXRlLmxvY2spO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBpcGlfc2VuZChzdHJ1Y3Qga3ZtICprdm0sIHVpbnQ2NF90IGRhdGEpXFxuQEAgLTMwLDcgKzI5LDcgQEAgc3RhdGljIHZvaWQgaXBpX3NlbmQoc3RydWN0IGt2bSAqa3ZtLCB1aW50NjRfdCBkYXRhKVxcbiBcXHRjcHUgPSAoKGRhdGEgXFx1MDAyNiAweGZmZmZmZmZmKSBcXHUwMDNlXFx1MDAzZSAxNikgXFx1MDAyNiAweDNmZjtcXG4gXFx0dmNwdSA9IGt2bV9nZXRfdmNwdV9ieV9jcHVpZChrdm0sIGNwdSk7XFxuIFxcdGlmICh1bmxpa2VseSh2Y3B1ID09IE5VTEwpKSB7XFxuLVxcdFxcdGt2bV9lcnIoXFxcIiVzOiBpbnZhbGlkIHRhcmdldCBjcHU6ICVkXFxcXG5cXFwiLCBfX2Z1bmNfXywgY3B1KTtcXG4rXFx0XFx0a3ZtX3ByX3VuaW1wbChcXFwiJXM6IGludmFsaWQgdGFyZ2V0IGNwdTogJWRcXFxcblxcXCIsIF9fZnVuY19fLCBjcHUpO1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuQEAgLTQwLDE2ICszOSwxNSBAQCBzdGF0aWMgdm9pZCBpcGlfc2VuZChzdHJ1Y3Qga3ZtICprdm0sIHVpbnQ2NF90IGRhdGEpXFxuIHN0YXRpYyB2b2lkIGlwaV9jbGVhcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVpbnQ2NF90IGRhdGEpXFxuIHtcXG4gXFx0dWludDMyX3Qgc3RhdHVzO1xcbi1cXHRzdHJ1Y3Qga3ZtX2ludGVycnVwdCBpcnE7XFxuIFxcbiBcXHRzcGluX2xvY2soXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2guaXBpX3N0YXRlLmxvY2spO1xcbiBcXHR2Y3B1LVxcdTAwM2VhcmNoLmlwaV9zdGF0ZS5zdGF0dXMgXFx1MDAyNj0gfmRhdGE7XFxuIFxcdHN0YXR1cyA9IHZjcHUtXFx1MDAzZWFyY2guaXBpX3N0YXRlLnN0YXR1cztcXG4tXFx0c3Bpbl91bmxvY2soXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2guaXBpX3N0YXRlLmxvY2spO1xcbiBcXHRpZiAoc3RhdHVzID09IDApIHtcXG4tXFx0XFx0aXJxLmlycSA9IC1MQVJDSF9JTlRfSVBJO1xcbi1cXHRcXHRrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHQodmNwdSwgXFx1MDAyNmlycSk7XFxuK1xcdFxcdGt2bV9kZXF1ZXVlX2lycSh2Y3B1LCBMQVJDSF9JTlRfSVBJKTtcXG4rXFx0XFx0a3ZtX3ZjcHVfa2ljayh2Y3B1KTtcXG4gXFx0fVxcbitcXHRzcGluX3VubG9jayhcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5pcGlfc3RhdGUubG9jayk7XFxuIH1cXG4gXFxuIHN0YXRpYyB1aW50NjRfdCByZWFkX21haWxib3goc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgb2Zmc2V0LCBpbnQgbGVuKVxcbkBAIC02NywxMSArNjUsOCBAQCBzdGF0aWMgdWludDY0X3QgcmVhZF9tYWlsYm94KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IG9mZnNldCwgaW50IGxlbilcXG4gXFx0XFx0cmV0dXJuIGRhdGEgXFx1MDAyNiAweGZmZmY7XFxuIFxcdGNhc2UgNDpcXG4gXFx0XFx0cmV0dXJuIGRhdGEgXFx1MDAyNiAweGZmZmZmZmZmO1xcbi1cXHRjYXNlIDg6XFxuLVxcdFxcdHJldHVybiBkYXRhO1xcbiBcXHRkZWZhdWx0Olxcbi1cXHRcXHRrdm1fZXJyKFxcXCIlczogdW5rbm93biBkYXRhIGxlbjogJWRcXFxcblxcXCIsIF9fZnVuY19fLCBsZW4pO1xcbi1cXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0cmV0dXJuIGRhdGE7XFxuIFxcdH1cXG4gfVxcbiBcXG5AQCAtOTIsMTEgKzg3LDkgQEAgc3RhdGljIHZvaWQgd3JpdGVfbWFpbGJveChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBvZmZzZXQsIHVpbnQ2NF90IGRhdGEsIGludFxcbiBcXHRjYXNlIDQ6XFxuIFxcdFxcdCoodW5zaWduZWQgaW50ICopcGJ1ZiA9ICh1bnNpZ25lZCBpbnQpZGF0YTtcXG4gXFx0XFx0YnJlYWs7XFxuLVxcdGNhc2UgODpcXG4rXFx0ZGVmYXVsdDpcXG4gXFx0XFx0Kih1bnNpZ25lZCBsb25nICopcGJ1ZiA9ICh1bnNpZ25lZCBsb25nKWRhdGE7XFxuIFxcdFxcdGJyZWFrO1xcbi1cXHRkZWZhdWx0Olxcbi1cXHRcXHRrdm1fZXJyKFxcXCIlczogdW5rbm93biBkYXRhIGxlbjogJWRcXFxcblxcXCIsIF9fZnVuY19fLCBsZW4pO1xcbiBcXHR9XFxuIFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLmlwaV9zdGF0ZS5sb2NrKTtcXG4gfVxcbkBAIC0xMTAsNyArMTAzLDcgQEAgc3RhdGljIGludCBtYWlsX3NlbmQoc3RydWN0IGt2bSAqa3ZtLCB1aW50NjRfdCBkYXRhKVxcbiBcXHRjcHUgPSAoKGRhdGEgXFx1MDAyNiAweGZmZmZmZmZmKSBcXHUwMDNlXFx1MDAzZSAxNikgXFx1MDAyNiAweDNmZjtcXG4gXFx0dmNwdSA9IGt2bV9nZXRfdmNwdV9ieV9jcHVpZChrdm0sIGNwdSk7XFxuIFxcdGlmICh1bmxpa2VseSh2Y3B1ID09IE5VTEwpKSB7XFxuLVxcdFxcdGt2bV9lcnIoXFxcIiVzOiBpbnZhbGlkIHRhcmdldCBjcHU6ICVkXFxcXG5cXFwiLCBfX2Z1bmNfXywgY3B1KTtcXG4rXFx0XFx0a3ZtX3ByX3VuaW1wbChcXFwiJXM6IGludmFsaWQgdGFyZ2V0IGNwdTogJWRcXFxcblxcXCIsIF9fZnVuY19fLCBjcHUpO1xcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiBcXHRtYWlsYm94ID0gKChkYXRhIFxcdTAwMjYgMHhmZmZmZmZmZikgXFx1MDAzZVxcdTAwM2UgMikgXFx1MDAyNiAweDc7XFxuQEAgLTE0NCw3ICsxMzcsNyBAQCBzdGF0aWMgaW50IHNlbmRfaXBpX2RhdGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBhZGRyLCB1aW50NjRfdCBkYXRhKVxcbiBcXHRcXHRyZXQgPSBrdm1faW9fYnVzX3JlYWQodmNwdSwgS1ZNX0lPQ1NSX0JVUywgYWRkciwgNCwgXFx1MDAyNnZhbCk7XFxuIFxcdFxcdHNyY3VfcmVhZF91bmxvY2soXFx1MDAyNnZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlc3JjdSwgaWR4KTtcXG4gXFx0XFx0aWYgKHVubGlrZWx5KHJldCkpIHtcXG4tXFx0XFx0XFx0a3ZtX2VycihcXFwiJXM6IDogcmVhZCBkYXRhIGZyb20gYWRkciAlbGx4IGZhaWxlZFxcXFxuXFxcIiwgX19mdW5jX18sIGFkZHIpO1xcbitcXHRcXHRcXHRrdm1fcHJfdW5pbXBsKFxcXCIlczogOiByZWFkIGRhdGEgZnJvbSBhZGRyICVsbHggZmFpbGVkXFxcXG5cXFwiLCBfX2Z1bmNfXywgYWRkcik7XFxuIFxcdFxcdFxcdHJldHVybiAwO1xcbiBcXHRcXHR9XFxuIFxcdFxcdC8qIENvbnN0cnVjdCB0aGUgbWFzayBieSBzY2FubmluZyB0aGUgYml0IDI3LTMwICovXFxuQEAgLTE2MCw3ICsxNTMsNyBAQCBzdGF0aWMgaW50IHNlbmRfaXBpX2RhdGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBhZGRyLCB1aW50NjRfdCBkYXRhKVxcbiBcXHRyZXQgPSBrdm1faW9fYnVzX3dyaXRlKHZjcHUsIEtWTV9JT0NTUl9CVVMsIGFkZHIsIDQsIFxcdTAwMjZ2YWwpO1xcbiBcXHRzcmN1X3JlYWRfdW5sb2NrKFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZXNyY3UsIGlkeCk7XFxuIFxcdGlmICh1bmxpa2VseShyZXQpKVxcbi1cXHRcXHRrdm1fZXJyKFxcXCIlczogOiB3cml0ZSBkYXRhIHRvIGFkZHIgJWxseCBmYWlsZWRcXFxcblxcXCIsIF9fZnVuY19fLCBhZGRyKTtcXG4rXFx0XFx0a3ZtX3ByX3VuaW1wbChcXFwiJXM6IDogd3JpdGUgZGF0YSB0byBhZGRyICVsbHggZmFpbGVkXFxcXG5cXFwiLCBfX2Z1bmNfXywgYWRkcik7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbkBAIC0xNzMsNyArMTY2LDcgQEAgc3RhdGljIGludCBhbnlfc2VuZChzdHJ1Y3Qga3ZtICprdm0sIHVpbnQ2NF90IGRhdGEpXFxuIFxcdGNwdSA9ICgoZGF0YSBcXHUwMDI2IDB4ZmZmZmZmZmYpIFxcdTAwM2VcXHUwMDNlIDE2KSBcXHUwMDI2IDB4M2ZmO1xcbiBcXHR2Y3B1ID0ga3ZtX2dldF92Y3B1X2J5X2NwdWlkKGt2bSwgY3B1KTtcXG4gXFx0aWYgKHVubGlrZWx5KHZjcHUgPT0gTlVMTCkpIHtcXG4tXFx0XFx0a3ZtX2VycihcXFwiJXM6IGludmFsaWQgdGFyZ2V0IGNwdTogJWRcXFxcblxcXCIsIF9fZnVuY19fLCBjcHUpO1xcbitcXHRcXHRrdm1fcHJfdW5pbXBsKFxcXCIlczogaW52YWxpZCB0YXJnZXQgY3B1OiAlZFxcXFxuXFxcIiwgX19mdW5jX18sIGNwdSk7XFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuIFxcdG9mZnNldCA9IGRhdGEgXFx1MDAyNiAweGZmZmY7XFxuQEAgLTE4Niw5ICsxNzksMTMgQEAgc3RhdGljIGludCBsb29uZ2FyY2hfaXBpX3JlYWRsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgYWRkciwgaW50IGxlbiwgdm9pZFxcbiBcXHR1aW50MzJfdCBvZmZzZXQ7XFxuIFxcdHVpbnQ2NF90IHJlcyA9IDA7XFxuIFxcbi1cXHRvZmZzZXQgPSAodWludDMyX3QpKGFkZHIgXFx1MDAyNiAweDFmZik7XFxuLVxcdFdBUk5fT05fT05DRShvZmZzZXQgXFx1MDAyNiAobGVuIC0gMSkpO1xcbitcXHRpZiAoYWRkciBcXHUwMDI2IChsZW4gLSAxKSkge1xcbitcXHRcXHQqKHVpbnQ2NF90ICopdmFsID0gcmVzO1xcbitcXHRcXHRrdm1fcHJfdW5pbXBsKFxcXCIlczogaXBpIG5vdCBhbGlnbmVkIGFkZHIgJWxseCBsZW4gJWRcXFxcblxcXCIsIF9fZnVuY19fLCBhZGRyLCBsZW4pO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbiBcXG4rXFx0b2Zmc2V0ID0gYWRkciAtIElPQ1NSX0lQSV9CQVNFO1xcbiBcXHRzd2l0Y2ggKG9mZnNldCkge1xcbiBcXHRjYXNlIElPQ1NSX0lQSV9TVEFUVVM6XFxuIFxcdFxcdHNwaW5fbG9jayhcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5pcGlfc3RhdGUubG9jayk7XFxuQEAgLTIwNCwxNSArMjAxLDEwIEBAIHN0YXRpYyBpbnQgbG9vbmdhcmNoX2lwaV9yZWFkbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGFkZHIsIGludCBsZW4sIHZvaWRcXG4gXFx0Y2FzZSBJT0NTUl9JUElfQ0xFQVI6XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIElPQ1NSX0lQSV9CVUZfMjAgLi4uIElPQ1NSX0lQSV9CVUZfMzggKyA3Olxcbi1cXHRcXHRpZiAob2Zmc2V0ICsgbGVuIFxcdTAwM2UgSU9DU1JfSVBJX0JVRl8zOCArIDgpIHtcXG4tXFx0XFx0XFx0a3ZtX2VycihcXFwiJXM6IGludmFsaWQgb2Zmc2V0IG9yIGxlbjogb2Zmc2V0ID0gJWQsIGxlbiA9ICVkXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHRfX2Z1bmNfXywgb2Zmc2V0LCBsZW4pO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0fVxcbiBcXHRcXHRyZXMgPSByZWFkX21haWxib3godmNwdSwgb2Zmc2V0LCBsZW4pO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0ZGVmYXVsdDpcXG4tXFx0XFx0a3ZtX2VycihcXFwiJXM6IHVua25vd24gYWRkcjogJWxseFxcXFxuXFxcIiwgX19mdW5jX18sIGFkZHIpO1xcbitcXHRcXHRrdm1fcHJfdW5pbXBsKFxcXCIlczogdW5rbm93biBhZGRyOiAlbGx4XFxcXG5cXFwiLCBfX2Z1bmNfXywgYWRkcik7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuIFxcdCoodWludDY0X3QgKil2YWwgPSByZXM7XFxuQEAgLTIyNyw5ICsyMTksMTIgQEAgc3RhdGljIGludCBsb29uZ2FyY2hfaXBpX3dyaXRlbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGFkZHIsIGludCBsZW4sIGNvbnNcXG4gXFxuIFxcdGRhdGEgPSAqKHVpbnQ2NF90ICopdmFsO1xcbiBcXG4tXFx0b2Zmc2V0ID0gKHVpbnQzMl90KShhZGRyIFxcdTAwMjYgMHgxZmYpO1xcbi1cXHRXQVJOX09OX09OQ0Uob2Zmc2V0IFxcdTAwMjYgKGxlbiAtIDEpKTtcXG4rXFx0aWYgKGFkZHIgXFx1MDAyNiAobGVuIC0gMSkpIHtcXG4rXFx0XFx0a3ZtX3ByX3VuaW1wbChcXFwiJXM6IGlwaSBub3QgYWxpZ25lZCBhZGRyICVsbHggbGVuICVkXFxcXG5cXFwiLCBfX2Z1bmNfXywgYWRkciwgbGVuKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4gXFxuK1xcdG9mZnNldCA9IGFkZHIgLSBJT0NTUl9JUElfQkFTRTtcXG4gXFx0c3dpdGNoIChvZmZzZXQpIHtcXG4gXFx0Y2FzZSBJT0NTUl9JUElfU1RBVFVTOlxcbiBcXHRcXHRicmVhaztcXG5AQCAtMjQ3LDcgKzI0Miw3IEBAIHN0YXRpYyBpbnQgbG9vbmdhcmNoX2lwaV93cml0ZWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBhZGRyLCBpbnQgbGVuLCBjb25zXFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIElPQ1NSX0lQSV9CVUZfMjAgLi4uIElPQ1NSX0lQSV9CVUZfMzggKyA3OlxcbiBcXHRcXHRpZiAob2Zmc2V0ICsgbGVuIFxcdTAwM2UgSU9DU1JfSVBJX0JVRl8zOCArIDgpIHtcXG4tXFx0XFx0XFx0a3ZtX2VycihcXFwiJXM6IGludmFsaWQgb2Zmc2V0IG9yIGxlbjogb2Zmc2V0ID0gJWQsIGxlbiA9ICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRrdm1fcHJfdW5pbXBsKFxcXCIlczogaW52YWxpZCBvZmZzZXQgb3IgbGVuOiBvZmZzZXQgPSAlZCwgbGVuID0gJWRcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdF9fZnVuY19fLCBvZmZzZXQsIGxlbik7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHR9XFxuQEAgLTI2Myw3ICsyNTgsNyBAQCBzdGF0aWMgaW50IGxvb25nYXJjaF9pcGlfd3JpdGVsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgYWRkciwgaW50IGxlbiwgY29uc1xcbiBcXHRcXHRhbnlfc2VuZCh2Y3B1LVxcdTAwM2Vrdm0sIGRhdGEpO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0ZGVmYXVsdDpcXG4tXFx0XFx0a3ZtX2VycihcXFwiJXM6IHVua25vd24gYWRkcjogJWxseFxcXFxuXFxcIiwgX19mdW5jX18sIGFkZHIpO1xcbitcXHRcXHRrdm1fcHJfdW5pbXBsKFxcXCIlczogdW5rbm93biBhZGRyOiAlbGx4XFxcXG5cXFwiLCBfX2Z1bmNfXywgYWRkcik7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuIFxcbkBAIC0zMDYsNyArMzAxLDcgQEAgc3RhdGljIGludCBrdm1faXBpX3JlZ3NfYWNjZXNzKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsXFxuIFxcbiBcXHR2Y3B1ID0ga3ZtX2dldF92Y3B1X2J5X2lkKGRldi1cXHUwMDNla3ZtLCBjcHUpO1xcbiBcXHRpZiAodW5saWtlbHkodmNwdSA9PSBOVUxMKSkge1xcbi1cXHRcXHRrdm1fZXJyKFxcXCIlczogaW52YWxpZCB0YXJnZXQgY3B1OiAlZFxcXFxuXFxcIiwgX19mdW5jX18sIGNwdSk7XFxuK1xcdFxcdGt2bV9wcl91bmltcGwoXFxcIiVzOiBpbnZhbGlkIHRhcmdldCBjcHU6ICVkXFxcXG5cXFwiLCBfX2Z1bmNfXywgY3B1KTtcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFxuQEAgLTM0MCw3ICszMzUsNyBAQCBzdGF0aWMgaW50IGt2bV9pcGlfcmVnc19hY2Nlc3Moc3RydWN0IGt2bV9kZXZpY2UgKmRldixcXG4gXFx0XFx0bGVuID0gODtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGRlZmF1bHQ6XFxuLVxcdFxcdGt2bV9lcnIoXFxcIiVzOiB1bmtub3duIGlwaSByZWdpc3RlciwgYWRkciA9ICVkXFxcXG5cXFwiLCBfX2Z1bmNfXywgYWRkcik7XFxuK1xcdFxcdGt2bV9wcl91bmltcGwoXFxcIiVzOiB1bmtub3duIGlwaSByZWdpc3RlciwgYWRkciA9ICVkXFxcXG5cXFwiLCBfX2Z1bmNfXywgYWRkcik7XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuIFxcbkBAIC0zNzQsNyArMzY5LDcgQEAgc3RhdGljIGludCBrdm1faXBpX2dldF9hdHRyKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsXFxuIFxcdGNhc2UgS1ZNX0RFVl9MT09OR0FSQ0hfSVBJX0dSUF9SRUdTOlxcbiBcXHRcXHRyZXR1cm4ga3ZtX2lwaV9yZWdzX2FjY2VzcyhkZXYsIGF0dHIsIGZhbHNlKTtcXG4gXFx0ZGVmYXVsdDpcXG4tXFx0XFx0a3ZtX2VycihcXFwiJXM6IHVua25vd24gZ3JvdXAgKCVkKVxcXFxuXFxcIiwgX19mdW5jX18sIGF0dHItXFx1MDAzZWdyb3VwKTtcXG4rXFx0XFx0a3ZtX3ByX3VuaW1wbChcXFwiJXM6IHVua25vd24gZ3JvdXAgKCVkKVxcXFxuXFxcIiwgX19mdW5jX18sIGF0dHItXFx1MDAzZWdyb3VwKTtcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gfVxcbkBAIC0zODYsNyArMzgxLDcgQEAgc3RhdGljIGludCBrdm1faXBpX3NldF9hdHRyKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsXFxuIFxcdGNhc2UgS1ZNX0RFVl9MT09OR0FSQ0hfSVBJX0dSUF9SRUdTOlxcbiBcXHRcXHRyZXR1cm4ga3ZtX2lwaV9yZWdzX2FjY2VzcyhkZXYsIGF0dHIsIHRydWUpO1xcbiBcXHRkZWZhdWx0Olxcbi1cXHRcXHRrdm1fZXJyKFxcXCIlczogdW5rbm93biBncm91cCAoJWQpXFxcXG5cXFwiLCBfX2Z1bmNfXywgYXR0ci1cXHUwMDNlZ3JvdXApO1xcbitcXHRcXHRrdm1fcHJfdW5pbXBsKFxcXCIlczogdW5rbm93biBncm91cCAoJWQpXFxcXG5cXFwiLCBfX2Z1bmNfXywgYXR0ci1cXHUwMDNlZ3JvdXApO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiB9XFxuQEAgLTM5OSwxMyArMzk0LDEzIEBAIHN0YXRpYyBpbnQga3ZtX2lwaV9jcmVhdGUoc3RydWN0IGt2bV9kZXZpY2UgKmRldiwgdTMyIHR5cGUpXFxuIFxcdHN0cnVjdCBsb29uZ2FyY2hfaXBpICpzO1xcbiBcXG4gXFx0aWYgKCFkZXYpIHtcXG4tXFx0XFx0a3ZtX2VycihcXFwiJXM6IGt2bV9kZXZpY2UgcHRyIGlzIGludmFsaWQhXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuK1xcdFxcdGt2bV9wcl91bmltcGwoXFxcIiVzOiBrdm1fZGV2aWNlIHB0ciBpcyBpbnZhbGlkIVxcXFxuXFxcIiwgX19mdW5jX18pO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXG4gXFx0a3ZtID0gZGV2LVxcdTAwM2Vrdm07XFxuIFxcdGlmIChrdm0tXFx1MDAzZWFyY2guaXBpKSB7XFxuLVxcdFxcdGt2bV9lcnIoXFxcIiVzOiBMb29uZ0FyY2ggSVBJIGhhcyBhbHJlYWR5IGJlZW4gY3JlYXRlZCFcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4rXFx0XFx0a3ZtX3ByX3VuaW1wbChcXFwiJXM6IExvb25nQXJjaCBJUEkgaGFzIGFscmVhZHkgYmVlbiBjcmVhdGVkIVxcXFxuXFxcIiwgX19mdW5jX18pO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXG5AQCAtNDI1LDcgKzQyMCw3IEBAIHN0YXRpYyBpbnQga3ZtX2lwaV9jcmVhdGUoc3RydWN0IGt2bV9kZXZpY2UgKmRldiwgdTMyIHR5cGUpXFxuIFxcdHJldCA9IGt2bV9pb19idXNfcmVnaXN0ZXJfZGV2KGt2bSwgS1ZNX0lPQ1NSX0JVUywgSU9DU1JfSVBJX0JBU0UsIElPQ1NSX0lQSV9TSVpFLCBkZXZpY2UpO1xcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlc2xvdHNfbG9jayk7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuLVxcdFxcdGt2bV9lcnIoXFxcIiVzOiBJbml0aWFsaXplIElPQ1NSIGRldiBmYWlsZWQsIHJldCA9ICVkXFxcXG5cXFwiLCBfX2Z1bmNfXywgcmV0KTtcXG4rXFx0XFx0a3ZtX3ByX3VuaW1wbChcXFwiJXM6IEluaXRpYWxpemUgSU9DU1IgZGV2IGZhaWxlZCwgcmV0ID0gJWRcXFxcblxcXCIsIF9fZnVuY19fLCByZXQpO1xcbiBcXHRcXHRnb3RvIGVycjtcXG4gXFx0fVxcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvcGNoX3BpYy5jIGIvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvcGNoX3BpYy5jXFxuaW5kZXggMTc1YTYzMGFjZWI0MTYuLmU3Yjc3NzA1YzUxNmFjIDEwMDY0NFxcbi0tLSBhL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL3BjaF9waWMuY1xcbisrKyBiL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL3BjaF9waWMuY1xcbkBAIC0xNTEsMTIgKzE1MSwxMiBAQCBzdGF0aWMgaW50IGt2bV9wY2hfcGljX3JlYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXHRzdHJ1Y3QgbG9vbmdhcmNoX3BjaF9waWMgKnMgPSB2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2gucGNoX3BpYztcXG4gXFxuIFxcdGlmICghcykge1xcbi1cXHRcXHRrdm1fZXJyKFxcXCIlczogcGNoIHBpYyBpcnFjaGlwIG5vdCB2YWxpZCFcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4rXFx0XFx0a3ZtX3ByX3VuaW1wbChcXFwiJXM6IHBjaCBwaWMgaXJxY2hpcCBub3QgdmFsaWQhXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcdH1cXG4gXFxuIFxcdGlmIChhZGRyIFxcdTAwMjYgKGxlbiAtIDEpKSB7XFxuLVxcdFxcdGt2bV9lcnIoXFxcIiVzOiBwY2ggcGljIG5vdCBhbGlnbmVkIGFkZHIgJWxseCBsZW4gJWRcXFxcblxcXCIsIF9fZnVuY19fLCBhZGRyLCBsZW4pO1xcbitcXHRcXHRrdm1fcHJfdW5pbXBsKFxcXCIlczogcGNoIHBpYyBub3QgYWxpZ25lZCBhZGRyICVsbHggbGVuICVkXFxcXG5cXFwiLCBfX2Z1bmNfXywgYWRkciwgbGVuKTtcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0fVxcbiBcXG5AQCAtMjUwLDEyICsyNTAsMTIgQEAgc3RhdGljIGludCBrdm1fcGNoX3BpY193cml0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIFxcdHN0cnVjdCBsb29uZ2FyY2hfcGNoX3BpYyAqcyA9IHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5wY2hfcGljO1xcbiBcXG4gXFx0aWYgKCFzKSB7XFxuLVxcdFxcdGt2bV9lcnIoXFxcIiVzOiBwY2ggcGljIGlycWNoaXAgbm90IHZhbGlkIVxcXFxuXFxcIiwgX19mdW5jX18pO1xcbitcXHRcXHRrdm1fcHJfdW5pbXBsKFxcXCIlczogcGNoIHBpYyBpcnFjaGlwIG5vdCB2YWxpZCFcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKGFkZHIgXFx1MDAyNiAobGVuIC0gMSkpIHtcXG4tXFx0XFx0a3ZtX2VycihcXFwiJXM6IHBjaCBwaWMgbm90IGFsaWduZWQgYWRkciAlbGx4IGxlbiAlZFxcXFxuXFxcIiwgX19mdW5jX18sIGFkZHIsIGxlbik7XFxuK1xcdFxcdGt2bV9wcl91bmltcGwoXFxcIiVzOiBwY2ggcGljIG5vdCBhbGlnbmVkIGFkZHIgJWxseCBsZW4gJWRcXFxcblxcXCIsIF9fZnVuY19fLCBhZGRyLCBsZW4pO1xcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHR9XFxuIFxcbkBAIC0zOTAsMTMgKzM5MCwxMyBAQCBzdGF0aWMgaW50IGt2bV9wY2hfcGljX3NldF9hdHRyKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsXFxuIFxcdFxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiBcXG4gXFx0XFx0XFx0aWYgKCFkZXYtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5wY2hfcGljKSB7XFxuLVxcdFxcdFxcdFxcdGt2bV9lcnIoXFxcIiVzOiBwbGVhc2UgY3JlYXRlIHBjaF9waWMgaXJxY2hpcCBmaXJzdCFcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4rXFx0XFx0XFx0XFx0a3ZtX3ByX3VuaW1wbChcXFwiJXM6IHBjaF9waWMgaXJxY2hpcCBub3QgY3JlYXRlZFxcXFxuXFxcIiwgX19mdW5jX18pO1xcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gXFx0XFx0XFx0fVxcbiBcXG4gXFx0XFx0XFx0cmV0dXJuIGt2bV9wY2hfcGljX2luaXQoZGV2LCBhZGRyKTtcXG4gXFx0XFx0ZGVmYXVsdDpcXG4tXFx0XFx0XFx0a3ZtX2VycihcXFwiJXM6IHVua25vd24gZ3JvdXAgKCVkKSBhdHRyICglbGxkKVxcXFxuXFxcIiwgX19mdW5jX18sIGF0dHItXFx1MDAzZWdyb3VwLFxcbitcXHRcXHRcXHRrdm1fcHJfdW5pbXBsKFxcXCIlczogdW5rbm93biBncm91cCAoJWQpIGF0dHIgKCVsbGQpXFxcXG5cXFwiLCBfX2Z1bmNfXywgYXR0ci1cXHUwMDNlZ3JvdXAsXFxuIFxcdFxcdFxcdFxcdFxcdGF0dHItXFx1MDAzZWF0dHIpO1xcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0fVxcbmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9rdm0vdmNwdS5jIGIvYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuY1xcbmluZGV4IDIwYzIwN2Q4MGUzMWFlLi5mODFkYWRjNjJjOTg2ZSAxMDA2NDRcXG4tLS0gYS9hcmNoL2xvb25nYXJjaC9rdm0vdmNwdS5jXFxuKysrIGIvYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuY1xcbkBAIC0xNDY1LDYgKzE0NjUsOSBAQCBpbnQga3ZtX3ZjcHVfaW9jdGxfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9pbnRlcnJ1cHQgKmlycSlcXG4gXFx0aWYgKHZlY3RvciBcXHUwMDNlPSBFWENDT0RFX0lOVF9OVU0pXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4rXFx0aWYgKGt2bV9hcmNoX2lycWNoaXBfaW5fa2VybmVsKHZjcHUtXFx1MDAzZWt2bSkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4gXFx0aWYgKCFrdm1fZ3Vlc3RfaGFzX21zZ2ludChcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaCkgXFx1MDAyNlxcdTAwMjYgKHZlY3RvciA9PSBJTlRfQVZFQykpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG5AQCAtMTQ3Myw3ICsxNDc2LDcgQEAgaW50IGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1faW50ZXJydXB0ICppcnEpXFxuIFxcdGVsc2UgaWYgKGludHIgXFx1MDAzYyAwKVxcbiBcXHRcXHRrdm1fZGVxdWV1ZV9pcnEodmNwdSwgLWludHIpO1xcbiBcXHRlbHNlIHtcXG4tXFx0XFx0a3ZtX2VycihcXFwiJXM6IGludmFsaWQgaW50ZXJydXB0IGlvY3RsICVkXFxcXG5cXFwiLCBfX2Z1bmNfXywgaXJxLVxcdTAwM2VpcnEpO1xcbitcXHRcXHRrdm1fcHJfdW5pbXBsKFxcXCIlczogaW52YWxpZCBpbnRlcnJ1cHQgaW9jdGwgJWRcXFxcblxcXCIsIF9fZnVuY19fLCBpcnEtXFx1MDAzZWlycSk7XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxMDoyMDoyMS45MjU2MDU5NTFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMjQzNDc2NjIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV92Y3B1X2lvY3RsX2ludGVycnVwdFwiLFxuICAgIFwiZG1zaW50Y19kZWxpdmVyX21zaV90b192Y3B1XCIsXG4gICAgXCJlaW9pbnRjX3VwZGF0ZV9pcnFcIixcbiAgICBcImxvb25nYXJjaF9pcGlfcmVhZGxcIixcbiAgICBcImxvb25nYXJjaF9pcGlfd3JpdGVsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgTG9vbmdBcmNoIEtWTSBpbnRlcnJ1cHQgaW5qZWN0aW9uIGFuZCBJUEkgaGFuZGxpbmcsIHJlcGxhY2luZyBrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHQgd2l0aCBrdm1fcXVldWVfaXJxIGFuZCBmaXhpbmcgYWxpZ25tZW50IGNoZWNrcyBpbiBJUEkgcmVhZC93cml0ZSBoYW5kbGVycy4gVGhlc2UgYXJlIHJlYWNoYWJsZSB2aWEgS1ZNIGlvY3RscyBhbmQgTU1JTy9JT0NTUiBleGl0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5MzJhMmFmNjFjMDA4ODRhOThkYjAyNjcxMDUwMDQ2OTQzNDZhMzFmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMTQgMTA6MjA6MTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9rdm0vZXhpdC5jIGIvYXJjaC9sb29uZ2FyY2gva3ZtL2V4aXQuY1xuaW5kZXggODU3MmI2MzQ3OGJiOTguLjU5MDU4MGQwMzAzZWE5IDEwMDY0NFxuLS0tIGEvYXJjaC9sb29uZ2FyY2gva3ZtL2V4aXQuY1xuKysrIGIvYXJjaC9sb29uZ2FyY2gva3ZtL2V4aXQuY1xuQEAgLTI1Miw3ICsyNTIsNyBAQCBpbnQga3ZtX2NvbXBsZXRlX2lvY3NyX3JlYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3J1biAqcnVuKVxuIFx0XHQqZ3ByID0gKihzNjQgKilydW4tXHUwMDNlaW9jc3JfaW8uZGF0YTtcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuLVx0XHRrdm1fZXJyKFwiQmFkIElPQ1NSIGxlbmd0aDogJWQsIGFkZHIgaXMgMHglbHhcXG5cIixcbitcdFx0a3ZtX3ByX3VuaW1wbChcIkJhZCBJT0NTUiBsZW5ndGg6ICVkLCBhZGRyIGlzIDB4JWx4XFxuXCIsXG4gXHRcdFx0XHRydW4tXHUwMDNlaW9jc3JfaW8ubGVuLCB2Y3B1LVx1MDAzZWFyY2guYmFkdik7XG4gXHRcdGVyID0gRU1VTEFURV9GQUlMO1xuIFx0XHRicmVhaztcbkBAIC0zMjYsNyArMzI2LDcgQEAgc3RhdGljIGludCBrdm1fdHJhcF9oYW5kbGVfZ3NwcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gXHQvKiBSb2xsYmFjayBQQyBvbmx5IGlmIGVtdWxhdGlvbiB3YXMgdW5zdWNjZXNzZnVsICovXG4gXHRpZiAoZXIgPT0gRU1VTEFURV9GQUlMKSB7XG4tXHRcdGt2bV9lcnIoXCJbJSNseF0lczogdW5zdXBwb3J0ZWQgZ3NwciBpbnN0cnVjdGlvbiAweCUwOHhcXG5cIixcbitcdFx0a3ZtX3ByX3VuaW1wbChcIlslI2x4XSVzOiB1bnN1cHBvcnRlZCBnc3ByIGluc3RydWN0aW9uIDB4JTA4eFxcblwiLFxuIFx0XHRcdGN1cnJfcGMsIF9fZnVuY19fLCBpbnN0LndvcmQpO1xuIFxuIFx0XHRrdm1fYXJjaF92Y3B1X2R1bXBfcmVncyh2Y3B1KTtcbkBAIC00OTEsNyArNDkxLDcgQEAgaW50IGt2bV9lbXVfbW1pb19yZWFkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgbGFyY2hfaW5zdCBpbnN0KVxuIFx0XHRyZXR1cm4gRU1VTEFURV9ET19NTUlPO1xuIFx0fVxuIFxuLVx0a3ZtX2VycihcIlJlYWQgbm90IHN1cHBvcnRlZCBJbnN0PTB4JTA4eCBAJWx4IEJhZFZhZGRyOiUjbHhcXG5cIixcbitcdGt2bV9wcl91bmltcGwoXCJSZWFkIG5vdCBzdXBwb3J0ZWQgSW5zdD0weCUwOHggQCVseCBCYWRWYWRkcjolI2x4XFxuXCIsXG4gXHRcdFx0aW5zdC53b3JkLCB2Y3B1LVx1MDAzZWFyY2gucGMsIHZjcHUtXHUwMDNlYXJjaC5iYWR2KTtcbiBcdGt2bV9hcmNoX3ZjcHVfZHVtcF9yZWdzKHZjcHUpO1xuIFx0dmNwdS1cdTAwM2VtbWlvX25lZWRlZCA9IDA7XG5AQCAtNTI5LDcgKzUyOSw3IEBAIGludCBrdm1fY29tcGxldGVfbW1pb19yZWFkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKnJ1bilcbiBcdFx0KmdwciA9ICooczY0ICopcnVuLVx1MDAzZW1taW8uZGF0YTtcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuLVx0XHRrdm1fZXJyKFwiQmFkIE1NSU8gbGVuZ3RoOiAlZCwgYWRkciBpcyAweCVseFxcblwiLFxuK1x0XHRrdm1fcHJfdW5pbXBsKFwiQmFkIE1NSU8gbGVuZ3RoOiAlZCwgYWRkciBpcyAweCVseFxcblwiLFxuIFx0XHRcdFx0cnVuLVx1MDAzZW1taW8ubGVuLCB2Y3B1LVx1MDAzZWFyY2guYmFkdik7XG4gXHRcdGVyID0gRU1VTEFURV9GQUlMO1xuIFx0XHRicmVhaztcbkBAIC02NTYsNyArNjU2LDcgQEAgaW50IGt2bV9lbXVfbW1pb193cml0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGxhcmNoX2luc3QgaW5zdClcbiBcdH1cbiBcbiBcdHZjcHUtXHUwMDNlYXJjaC5wYyA9IGN1cnJfcGM7XG4tXHRrdm1fZXJyKFwiV3JpdGUgbm90IHN1cHBvcnRlZCBJbnN0PTB4JTA4eCBAJWx4IEJhZFZhZGRyOiUjbHhcXG5cIixcbitcdGt2bV9wcl91bmltcGwoXCJXcml0ZSBub3Qgc3VwcG9ydGVkIEluc3Q9MHglMDh4IEAlbHggQmFkVmFkZHI6JSNseFxcblwiLFxuIFx0XHRcdGluc3Qud29yZCwgdmNwdS1cdTAwM2VhcmNoLnBjLCB2Y3B1LVx1MDAzZWFyY2guYmFkdik7XG4gXHRrdm1fYXJjaF92Y3B1X2R1bXBfcmVncyh2Y3B1KTtcbiBcdC8qIFJvbGxiYWNrIFBDIGlmIGVtdWxhdGlvbiB3YXMgdW5zdWNjZXNzZnVsICovXG5AQCAtNzQ4LDggKzc0OCw4IEBAIHN0YXRpYyBpbnQga3ZtX2hhbmRsZV9mcHVfZGlzYWJsZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgZWNvZGUpXG4gXHQgKiB0cmVhdGVkIGFzIGEgcmVzZXJ2ZWQgaW5zdHJ1Y3Rpb24hXG4gXHQgKiBJZiBGUFUgYWxyZWFkeSBpbiB1c2UsIHdlIHNob3VsZG4ndCBnZXQgdGhpcyBhdCBhbGwuXG4gXHQgKi9cbi1cdGlmIChXQVJOX09OKHZjcHUtXHUwMDNlYXJjaC5hdXhfaW51c2UgXHUwMDI2IEtWTV9MQVJDSF9GUFUpKSB7XG4tXHRcdGt2bV9lcnIoXCIlcyBpbnRlcm5hbCBlcnJvclxcblwiLCBfX2Z1bmNfXyk7XG4rXHRpZiAodmNwdS1cdTAwM2VhcmNoLmF1eF9pbnVzZSBcdTAwMjYgS1ZNX0xBUkNIX0ZQVSkge1xuK1x0XHRrdm1fcHJfdW5pbXBsKFwiJXMgaW50ZXJuYWwgZXJyb3JcXG5cIiwgX19mdW5jX18pO1xuIFx0XHRydW4tXHUwMDNlZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9JTlRFUk5BTF9FUlJPUjtcbiBcdFx0cmV0dXJuIFJFU1VNRV9IT1NUO1xuIFx0fVxuQEAgLTk0Myw3ICs5NDMsNyBAQCBzdGF0aWMgaW50IGt2bV9mYXVsdF9uaShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBlY29kZSlcbiBcdC8qIEZldGNoIHRoZSBpbnN0cnVjdGlvbiAqL1xuIFx0aW5zdCA9IHZjcHUtXHUwMDNlYXJjaC5iYWRpO1xuIFx0YmFkdiA9IHZjcHUtXHUwMDNlYXJjaC5iYWR2O1xuLVx0a3ZtX2VycihcIkVDb2RlOiAlZCBQQz0lI2x4IEluc3Q9MHglMDh4IEJhZFZhZGRyPSUjbHggRVNUQVQ9JSNseFxcblwiLFxuK1x0a3ZtX3ByX3VuaW1wbChcIkVDb2RlOiAlZCBQQz0lI2x4IEluc3Q9MHglMDh4IEJhZFZhZGRyPSUjbHggRVNUQVQ9JSNseFxcblwiLFxuIFx0XHRcdGVjb2RlLCB2Y3B1LVx1MDAzZWFyY2gucGMsIGluc3QsIGJhZHYsIHJlYWRfZ2Nzcl9lc3RhdCgpKTtcbiBcdGt2bV9hcmNoX3ZjcHVfZHVtcF9yZWdzKHZjcHUpO1xuIFx0a3ZtX3F1ZXVlX2V4Y2VwdGlvbih2Y3B1LCBFWENDT0RFX0lORSwgMCk7XG5kaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZG1zaW50Yy5jIGIvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZG1zaW50Yy5jXG5pbmRleCBkZTI1NzM1Y2UwMzk0Ni4uMWM3MTZlMjRjNWIwMjIgMTAwNjQ0XG4tLS0gYS9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9kbXNpbnRjLmNcbisrKyBiL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Rtc2ludGMuY1xuQEAgLTIxLDYgKzIxLDggQEAgdm9pZCBkbXNpbnRjX2luamVjdF9pcnEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHRvbGQgPSBhdG9taWM2NF9yZWFkKFx1MDAyNihkcy1cdTAwM2V2ZWN0b3JfbWFwW2ldKSk7XG4gXHRcdGlmIChvbGQpXG4gXHRcdFx0dmVjdG9yW2ldID0gYXRvbWljNjRfeGNoZyhcdTAwMjYoZHMtXHUwMDNldmVjdG9yX21hcFtpXSksIDApO1xuK1x0XHRlbHNlXG4rXHRcdFx0dmVjdG9yW2ldID0gMDtcbiBcdH1cbiBcbiBcdGlmICh2ZWN0b3JbMF0pIHtcbkBAIC00Nyw3ICs0OSw2IEBAIHZvaWQgZG1zaW50Y19pbmplY3RfaXJxKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBpbnQgZG1zaW50Y19kZWxpdmVyX21zaV90b192Y3B1KHN0cnVjdCBrdm0gKmt2bSxcbiBcdFx0XHRcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHZlY3RvciwgaW50IGxldmVsKVxuIHtcbi1cdHN0cnVjdCBrdm1faW50ZXJydXB0IHZjcHVfaXJxO1xuIFx0c3RydWN0IGRtc2ludGNfc3RhdGUgKmRzID0gXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmRtc2ludGNfc3RhdGU7XG4gXG4gXHRpZiAoIWxldmVsKVxuQEAgLTU3LDkgKzU4LDExIEBAIGludCBkbXNpbnRjX2RlbGl2ZXJfbXNpX3RvX3ZjcHUoc3RydWN0IGt2bSAqa3ZtLFxuIFx0aWYgKCFkcylcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXG4tXHR2Y3B1X2lycS5pcnEgPSBJTlRfQVZFQztcbitcdGlmICgha3ZtX2d1ZXN0X2hhc19tc2dpbnQoXHUwMDI2dmNwdS1cdTAwM2VhcmNoKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4gXHRzZXRfYml0KHZlY3RvciwgKHVuc2lnbmVkIGxvbmcgKilcdTAwMjZkcy1cdTAwM2V2ZWN0b3JfbWFwKTtcbi1cdGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdCh2Y3B1LCBcdTAwMjZ2Y3B1X2lycSk7XG4rXHRrdm1fcXVldWVfaXJxKHZjcHUsIElOVF9BVkVDKTtcbiBcdGt2bV92Y3B1X2tpY2sodmNwdSk7XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC0xMTQsNyArMTE3LDcgQEAgc3RhdGljIGludCBrdm1fZG1zaW50Y19jdHJsX2FjY2VzcyhzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LFxuIFx0XHR9XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbi1cdFx0a3ZtX2VycihcIiVzOiB1bmtub3duIGRtc2ludGMgcmVnaXN0ZXIsIGFkZHIgPSAlZFxcblwiLCBfX2Z1bmNfXywgYWRkcik7XG4rXHRcdGt2bV9wcl91bmltcGwoXCIlczogdW5rbm93biBkbXNpbnRjIHJlZ2lzdGVyLCBhZGRyID0gJWRcXG5cIiwgX19mdW5jX18sIGFkZHIpO1xuIFx0XHRyZXR1cm4gLUVOWElPO1xuIFx0fVxuIFxuQEAgLTEyOCw3ICsxMzEsNyBAQCBzdGF0aWMgaW50IGt2bV9kbXNpbnRjX3NldF9hdHRyKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsXG4gXHRjYXNlIEtWTV9ERVZfTE9PTkdBUkNIX0RNU0lOVENfR1JQX0NUUkw6XG4gXHRcdHJldHVybiBrdm1fZG1zaW50Y19jdHJsX2FjY2VzcyhkZXYsIGF0dHIsIHRydWUpO1xuIFx0ZGVmYXVsdDpcbi1cdFx0a3ZtX2VycihcIiVzOiB1bmtub3duIGdyb3VwICglZClcXG5cIiwgX19mdW5jX18sIGF0dHItXHUwMDNlZ3JvdXApO1xuK1x0XHRrdm1fcHJfdW5pbXBsKFwiJXM6IHVua25vd24gZ3JvdXAgKCVkKVxcblwiLCBfX2Z1bmNfXywgYXR0ci1cdTAwM2Vncm91cCk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIH1cbkBAIC0xMzksMTMgKzE0MiwxMyBAQCBzdGF0aWMgaW50IGt2bV9kbXNpbnRjX2NyZWF0ZShzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LCB1MzIgdHlwZSlcbiBcdHN0cnVjdCBsb29uZ2FyY2hfZG1zaW50YyAqcztcbiBcbiBcdGlmICghZGV2KSB7XG4tXHRcdGt2bV9lcnIoXCIlczoga3ZtX2RldmljZSBwdHIgaXMgaW52YWxpZCFcXG5cIiwgX19mdW5jX18pO1xuK1x0XHRrdm1fcHJfdW5pbXBsKFwiJXM6IGt2bV9kZXZpY2UgcHRyIGlzIGludmFsaWQhXFxuXCIsIF9fZnVuY19fKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4gXHRrdm0gPSBkZXYtXHUwMDNla3ZtO1xuIFx0aWYgKGt2bS1cdTAwM2VhcmNoLmRtc2ludGMpIHtcbi1cdFx0a3ZtX2VycihcIiVzOiBMb29uZ0FyY2ggRE1TSU5UQyBoYXMgYWxyZWFkeSBiZWVuIGNyZWF0ZWQhXFxuXCIsIF9fZnVuY19fKTtcbitcdFx0a3ZtX3ByX3VuaW1wbChcIiVzOiBMb29uZ0FyY2ggRE1TSU5UQyBoYXMgYWxyZWFkeSBiZWVuIGNyZWF0ZWQhXFxuXCIsIF9fZnVuY19fKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jIGIvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jXG5pbmRleCAyYjE0NDg1ZDE0YTcwOC4uZTA0YWFkYmQ2OGRiOTYgMTAwNjQ0XG4tLS0gYS9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmNcbisrKyBiL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuY1xuQEAgLTE3LDcgKzE3LDggQEAgc3RhdGljIHZvaWQgZWlvaW50Y19zZXRfc3dfY29yZWlzcihzdHJ1Y3QgbG9vbmdhcmNoX2Vpb2ludGMgKnMpXG4gXHRcdGlmICghKHMtXHUwMDNlc3RhdHVzIFx1MDAyNiBCSVQoRUlPSU5UQ19FTkFCTEVfSU5UX0VOQ09ERSkpKSB7XG4gXHRcdFx0aXBudW0gPSBjb3VudF90cmFpbGluZ196ZXJvcyhpcG51bSk7XG4gXHRcdFx0aXBudW0gPSBpcG51bSBcdTAwM2MgNCA/IGlwbnVtIDogMDtcbi1cdFx0fVxuK1x0XHR9IGVsc2UgaWYgKGlwbnVtIFx1MDAzZT0gTE9PTkdTT05fSVBfTlVNKVxuK1x0XHRcdGlwbnVtID0gMDtcbiBcbiBcdFx0Y3B1aWQgPSAoKHU4ICopcy1cdTAwM2Vjb3JlbWFwKVtpcnFdO1xuIFx0XHR2Y3B1ID0ga3ZtX2dldF92Y3B1X2J5X2NwdWlkKHMtXHUwMDNla3ZtLCBjcHVpZCk7XG5AQCAtMzYsMTggKzM3LDE4IEBAIHN0YXRpYyB2b2lkIGVpb2ludGNfdXBkYXRlX2lycShzdHJ1Y3QgbG9vbmdhcmNoX2Vpb2ludGMgKnMsIGludCBpcnEsIGludCBsZXZlbClcbiB7XG4gXHRpbnQgaXBudW0sIGNwdSwgZm91bmQ7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4tXHRzdHJ1Y3Qga3ZtX2ludGVycnVwdCB2Y3B1X2lycTtcbiBcbiBcdGlwbnVtID0gKHMtXHUwMDNlaXBtYXAgXHUwMDNlXHUwMDNlIChpcnEgLyAzMiAqIDgpKSBcdTAwMjYgMHhmZjtcbiBcdGlmICghKHMtXHUwMDNlc3RhdHVzIFx1MDAyNiBCSVQoRUlPSU5UQ19FTkFCTEVfSU5UX0VOQ09ERSkpKSB7XG4gXHRcdGlwbnVtID0gY291bnRfdHJhaWxpbmdfemVyb3MoaXBudW0pO1xuIFx0XHRpcG51bSA9IGlwbnVtIFx1MDAzYyA0ID8gaXBudW0gOiAwO1xuLVx0fVxuK1x0fSBlbHNlIGlmIChpcG51bSBcdTAwM2U9IExPT05HU09OX0lQX05VTSlcbitcdFx0aXBudW0gPSAwO1xuIFxuIFx0Y3B1ID0gcy1cdTAwM2Vzd19jb3JlbWFwW2lycV07XG4gXHR2Y3B1ID0ga3ZtX2dldF92Y3B1X2J5X2lkKHMtXHUwMDNla3ZtLCBjcHUpO1xuIFx0aWYgKHVubGlrZWx5KHZjcHUgPT0gTlVMTCkpIHtcbi1cdFx0a3ZtX2VycihcIiVzOiBpbnZhbGlkIHRhcmdldCBjcHU6ICVkXFxuXCIsIF9fZnVuY19fLCBjcHUpO1xuK1x0XHRrdm1fcHJfdW5pbXBsKFwiJXM6IGludmFsaWQgdGFyZ2V0IGNwdTogJWRcXG5cIiwgX19mdW5jX18sIGNwdSk7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbkBAIC02Nyw4ICs2OCwxMSBAQCBzdGF0aWMgdm9pZCBlaW9pbnRjX3VwZGF0ZV9pcnEoc3RydWN0IGxvb25nYXJjaF9laW9pbnRjICpzLCBpbnQgaXJxLCBpbnQgbGV2ZWwpXG4gXHRpZiAoZm91bmQgXHUwMDNjIEVJT0lOVENfSVJRUylcbiBcdFx0cmV0dXJuOyAvKiBvdGhlciBpcnEgaXMgaGFuZGxpbmcsIG5lZWRuJ3QgdXBkYXRlIHBhcmVudCBpcnEgKi9cbiBcbi1cdHZjcHVfaXJxLmlycSA9IGxldmVsID8gKElOVF9IV0kwICsgaXBudW0pIDogLShJTlRfSFdJMCArIGlwbnVtKTtcbi1cdGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdCh2Y3B1LCBcdTAwMjZ2Y3B1X2lycSk7XG4rXHRpZiAobGV2ZWwpXG4rXHRcdGt2bV9xdWV1ZV9pcnEodmNwdSwgSU5UX0hXSTAgKyBpcG51bSk7XG4rXHRlbHNlXG4rXHRcdGt2bV9kZXF1ZXVlX2lycSh2Y3B1LCBJTlRfSFdJMCArIGlwbnVtKTtcbitcdGt2bV92Y3B1X2tpY2sodmNwdSk7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBlaW9pbnRjX3VwZGF0ZV9zd19jb3JlbWFwKHN0cnVjdCBsb29uZ2FyY2hfZWlvaW50YyAqcyxcbkBAIC0xNjUsMTIgKzE2OSwxMiBAQCBzdGF0aWMgaW50IGt2bV9laW9pbnRjX3JlYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0c3RydWN0IGxvb25nYXJjaF9laW9pbnRjICplaW9pbnRjID0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5laW9pbnRjO1xuIFxuIFx0aWYgKCFlaW9pbnRjKSB7XG4tXHRcdGt2bV9lcnIoXCIlczogZWlvaW50YyBpcnFjaGlwIG5vdCB2YWxpZCFcXG5cIiwgX19mdW5jX18pO1xuK1x0XHRrdm1fcHJfdW5pbXBsKFwiJXM6IGVpb2ludGMgaXJxY2hpcCBub3QgdmFsaWQhXFxuXCIsIF9fZnVuY19fKTtcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG4gXHRpZiAoYWRkciBcdTAwMjYgKGxlbiAtIDEpKSB7XG4tXHRcdGt2bV9lcnIoXCIlczogZWlvaW50YyBub3QgYWxpZ25lZCBhZGRyICVsbHggbGVuICVkXFxuXCIsIF9fZnVuY19fLCBhZGRyLCBsZW4pO1xuK1x0XHRrdm1fcHJfdW5pbXBsKFwiJXM6IGVpb2ludGMgbm90IGFsaWduZWQgYWRkciAlbGx4IGxlbiAlZFxcblwiLCBfX2Z1bmNfXywgYWRkciwgbGVuKTtcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG5AQCAtMjk3LDEyICszMDEsMTIgQEAgc3RhdGljIGludCBrdm1fZWlvaW50Y193cml0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRzdHJ1Y3QgbG9vbmdhcmNoX2Vpb2ludGMgKmVpb2ludGMgPSB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmVpb2ludGM7XG4gXG4gXHRpZiAoIWVpb2ludGMpIHtcbi1cdFx0a3ZtX2VycihcIiVzOiBlaW9pbnRjIGlycWNoaXAgbm90IHZhbGlkIVxcblwiLCBfX2Z1bmNfXyk7XG4rXHRcdGt2bV9wcl91bmltcGwoXCIlczogZWlvaW50YyBpcnFjaGlwIG5vdCB2YWxpZCFcXG5cIiwgX19mdW5jX18pO1xuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbiBcdGlmIChhZGRyIFx1MDAyNiAobGVuIC0gMSkpIHtcbi1cdFx0a3ZtX2VycihcIiVzOiBlaW9pbnRjIG5vdCBhbGlnbmVkIGFkZHIgJWxseCBsZW4gJWRcXG5cIiwgX19mdW5jX18sIGFkZHIsIGxlbik7XG4rXHRcdGt2bV9wcl91bmltcGwoXCIlczogZWlvaW50YyBub3QgYWxpZ25lZCBhZGRyICVsbHggbGVuICVkXFxuXCIsIF9fZnVuY19fLCBhZGRyLCBsZW4pO1xuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbkBAIC0zNDUsNyArMzQ5LDcgQEAgc3RhdGljIGludCBrdm1fZWlvaW50Y192aXJ0X3JlYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0c3RydWN0IGxvb25nYXJjaF9laW9pbnRjICplaW9pbnRjID0gdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5laW9pbnRjO1xuIFxuIFx0aWYgKCFlaW9pbnRjKSB7XG4tXHRcdGt2bV9lcnIoXCIlczogZWlvaW50YyBpcnFjaGlwIG5vdCB2YWxpZCFcXG5cIiwgX19mdW5jX18pO1xuK1x0XHRrdm1fcHJfdW5pbXBsKFwiJXM6IGVpb2ludGMgaXJxY2hpcCBub3QgdmFsaWQhXFxuXCIsIF9fZnVuY19fKTtcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG5AQCAtMzc1LDcgKzM3OSw3IEBAIHN0YXRpYyBpbnQga3ZtX2Vpb2ludGNfdmlydF93cml0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRzdHJ1Y3QgbG9vbmdhcmNoX2Vpb2ludGMgKmVpb2ludGMgPSB2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmVpb2ludGM7XG4gXG4gXHRpZiAoIWVpb2ludGMpIHtcbi1cdFx0a3ZtX2VycihcIiVzOiBlaW9pbnRjIGlycWNoaXAgbm90IHZhbGlkIVxcblwiLCBfX2Z1bmNfXyk7XG4rXHRcdGt2bV9wcl91bmltcGwoXCIlczogZWlvaW50YyBpcnFjaGlwIG5vdCB2YWxpZCFcXG5cIiwgX19mdW5jX18pO1xuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbkBAIC01MDIsNyArNTA2LDcgQEAgc3RhdGljIGludCBrdm1fZWlvaW50Y19yZWdzX2FjY2VzcyhzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LFxuIFx0XHRwID0gKHZvaWQgKilzLVx1MDAzZWNvcmVtYXAgKyBvZmZzZXQgKiA0O1xuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4tXHRcdGt2bV9lcnIoXCIlczogdW5rbm93biBlaW9pbnRjIHJlZ2lzdGVyLCBhZGRyID0gJWRcXG5cIiwgX19mdW5jX18sIGFkZHIpO1xuK1x0XHRrdm1fcHJfdW5pbXBsKFwiJXM6IHVua25vd24gZWlvaW50YyByZWdpc3RlciwgYWRkciA9ICVkXFxuXCIsIF9fZnVuY19fLCBhZGRyKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG5AQCAtNTQ2LDcgKzU1MCw3IEBAIHN0YXRpYyBpbnQga3ZtX2Vpb2ludGNfc3dfc3RhdHVzX2FjY2VzcyhzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LFxuIFx0XHRwID0gXHUwMDI2cy1cdTAwM2VzdGF0dXM7XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbi1cdFx0a3ZtX2VycihcIiVzOiB1bmtub3duIGVpb2ludGMgcmVnaXN0ZXIsIGFkZHIgPSAlZFxcblwiLCBfX2Z1bmNfXywgYWRkcik7XG4rXHRcdGt2bV9wcl91bmltcGwoXCIlczogdW5rbm93biBlaW9pbnRjIHJlZ2lzdGVyLCBhZGRyID0gJWRcXG5cIiwgX19mdW5jX18sIGFkZHIpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jIGIvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmNcbmluZGV4IDRmYTA4OTdkN2JkYjAwLi5mMzBkMGQxM2Y1NGQwNSAxMDA2NDRcbi0tLSBhL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jXG4rKysgYi9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuY1xuQEAgLTEwLDE2ICsxMCwxNSBAQFxuIHN0YXRpYyB2b2lkIGlwaV9zZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1aW50MzJfdCBkYXRhKVxuIHtcbiBcdHVpbnQzMl90IHN0YXR1cztcbi1cdHN0cnVjdCBrdm1faW50ZXJydXB0IGlycTtcbiBcbiBcdHNwaW5fbG9jayhcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXBpX3N0YXRlLmxvY2spO1xuIFx0c3RhdHVzID0gdmNwdS1cdTAwM2VhcmNoLmlwaV9zdGF0ZS5zdGF0dXM7XG4gXHR2Y3B1LVx1MDAzZWFyY2guaXBpX3N0YXRlLnN0YXR1cyB8PSBkYXRhO1xuLVx0c3Bpbl91bmxvY2soXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmlwaV9zdGF0ZS5sb2NrKTtcbiBcdGlmICgoc3RhdHVzID09IDApIFx1MDAyNlx1MDAyNiBkYXRhKSB7XG4tXHRcdGlycS5pcnEgPSBMQVJDSF9JTlRfSVBJO1xuLVx0XHRrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHQodmNwdSwgXHUwMDI2aXJxKTtcbitcdFx0a3ZtX3F1ZXVlX2lycSh2Y3B1LCBMQVJDSF9JTlRfSVBJKTtcbitcdFx0a3ZtX3ZjcHVfa2ljayh2Y3B1KTtcbiBcdH1cbitcdHNwaW5fdW5sb2NrKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5pcGlfc3RhdGUubG9jayk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGlwaV9zZW5kKHN0cnVjdCBrdm0gKmt2bSwgdWludDY0X3QgZGF0YSlcbkBAIC0zMCw3ICsyOSw3IEBAIHN0YXRpYyB2b2lkIGlwaV9zZW5kKHN0cnVjdCBrdm0gKmt2bSwgdWludDY0X3QgZGF0YSlcbiBcdGNwdSA9ICgoZGF0YSBcdTAwMjYgMHhmZmZmZmZmZikgXHUwMDNlXHUwMDNlIDE2KSBcdTAwMjYgMHgzZmY7XG4gXHR2Y3B1ID0ga3ZtX2dldF92Y3B1X2J5X2NwdWlkKGt2bSwgY3B1KTtcbiBcdGlmICh1bmxpa2VseSh2Y3B1ID09IE5VTEwpKSB7XG4tXHRcdGt2bV9lcnIoXCIlczogaW52YWxpZCB0YXJnZXQgY3B1OiAlZFxcblwiLCBfX2Z1bmNfXywgY3B1KTtcbitcdFx0a3ZtX3ByX3VuaW1wbChcIiVzOiBpbnZhbGlkIHRhcmdldCBjcHU6ICVkXFxuXCIsIF9fZnVuY19fLCBjcHUpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG5AQCAtNDAsMTYgKzM5LDE1IEBAIHN0YXRpYyB2b2lkIGlwaV9zZW5kKHN0cnVjdCBrdm0gKmt2bSwgdWludDY0X3QgZGF0YSlcbiBzdGF0aWMgdm9pZCBpcGlfY2xlYXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1aW50NjRfdCBkYXRhKVxuIHtcbiBcdHVpbnQzMl90IHN0YXR1cztcbi1cdHN0cnVjdCBrdm1faW50ZXJydXB0IGlycTtcbiBcbiBcdHNwaW5fbG9jayhcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXBpX3N0YXRlLmxvY2spO1xuIFx0dmNwdS1cdTAwM2VhcmNoLmlwaV9zdGF0ZS5zdGF0dXMgXHUwMDI2PSB+ZGF0YTtcbiBcdHN0YXR1cyA9IHZjcHUtXHUwMDNlYXJjaC5pcGlfc3RhdGUuc3RhdHVzO1xuLVx0c3Bpbl91bmxvY2soXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmlwaV9zdGF0ZS5sb2NrKTtcbiBcdGlmIChzdGF0dXMgPT0gMCkge1xuLVx0XHRpcnEuaXJxID0gLUxBUkNIX0lOVF9JUEk7XG4tXHRcdGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdCh2Y3B1LCBcdTAwMjZpcnEpO1xuK1x0XHRrdm1fZGVxdWV1ZV9pcnEodmNwdSwgTEFSQ0hfSU5UX0lQSSk7XG4rXHRcdGt2bV92Y3B1X2tpY2sodmNwdSk7XG4gXHR9XG4rXHRzcGluX3VubG9jayhcdTAwMjZ2Y3B1LVx1MDAzZWFyY2guaXBpX3N0YXRlLmxvY2spO1xuIH1cbiBcbiBzdGF0aWMgdWludDY0X3QgcmVhZF9tYWlsYm94KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IG9mZnNldCwgaW50IGxlbilcbkBAIC02NywxMSArNjUsOCBAQCBzdGF0aWMgdWludDY0X3QgcmVhZF9tYWlsYm94KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IG9mZnNldCwgaW50IGxlbilcbiBcdFx0cmV0dXJuIGRhdGEgXHUwMDI2IDB4ZmZmZjtcbiBcdGNhc2UgNDpcbiBcdFx0cmV0dXJuIGRhdGEgXHUwMDI2IDB4ZmZmZmZmZmY7XG4tXHRjYXNlIDg6XG4tXHRcdHJldHVybiBkYXRhO1xuIFx0ZGVmYXVsdDpcbi1cdFx0a3ZtX2VycihcIiVzOiB1bmtub3duIGRhdGEgbGVuOiAlZFxcblwiLCBfX2Z1bmNfXywgbGVuKTtcbi1cdFx0cmV0dXJuIDA7XG4rXHRcdHJldHVybiBkYXRhO1xuIFx0fVxuIH1cbiBcbkBAIC05MiwxMSArODcsOSBAQCBzdGF0aWMgdm9pZCB3cml0ZV9tYWlsYm94KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IG9mZnNldCwgdWludDY0X3QgZGF0YSwgaW50XG4gXHRjYXNlIDQ6XG4gXHRcdCoodW5zaWduZWQgaW50ICopcGJ1ZiA9ICh1bnNpZ25lZCBpbnQpZGF0YTtcbiBcdFx0YnJlYWs7XG4tXHRjYXNlIDg6XG4rXHRkZWZhdWx0OlxuIFx0XHQqKHVuc2lnbmVkIGxvbmcgKilwYnVmID0gKHVuc2lnbmVkIGxvbmcpZGF0YTtcbiBcdFx0YnJlYWs7XG4tXHRkZWZhdWx0OlxuLVx0XHRrdm1fZXJyKFwiJXM6IHVua25vd24gZGF0YSBsZW46ICVkXFxuXCIsIF9fZnVuY19fLCBsZW4pO1xuIFx0fVxuIFx0c3Bpbl91bmxvY2soXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmlwaV9zdGF0ZS5sb2NrKTtcbiB9XG5AQCAtMTEwLDcgKzEwMyw3IEBAIHN0YXRpYyBpbnQgbWFpbF9zZW5kKHN0cnVjdCBrdm0gKmt2bSwgdWludDY0X3QgZGF0YSlcbiBcdGNwdSA9ICgoZGF0YSBcdTAwMjYgMHhmZmZmZmZmZikgXHUwMDNlXHUwMDNlIDE2KSBcdTAwMjYgMHgzZmY7XG4gXHR2Y3B1ID0ga3ZtX2dldF92Y3B1X2J5X2NwdWlkKGt2bSwgY3B1KTtcbiBcdGlmICh1bmxpa2VseSh2Y3B1ID09IE5VTEwpKSB7XG4tXHRcdGt2bV9lcnIoXCIlczogaW52YWxpZCB0YXJnZXQgY3B1OiAlZFxcblwiLCBfX2Z1bmNfXywgY3B1KTtcbitcdFx0a3ZtX3ByX3VuaW1wbChcIiVzOiBpbnZhbGlkIHRhcmdldCBjcHU6ICVkXFxuXCIsIF9fZnVuY19fLCBjcHUpO1xuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcdG1haWxib3ggPSAoKGRhdGEgXHUwMDI2IDB4ZmZmZmZmZmYpIFx1MDAzZVx1MDAzZSAyKSBcdTAwMjYgMHg3O1xuQEAgLTE0NCw3ICsxMzcsNyBAQCBzdGF0aWMgaW50IHNlbmRfaXBpX2RhdGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBhZGRyLCB1aW50NjRfdCBkYXRhKVxuIFx0XHRyZXQgPSBrdm1faW9fYnVzX3JlYWQodmNwdSwgS1ZNX0lPQ1NSX0JVUywgYWRkciwgNCwgXHUwMDI2dmFsKTtcbiBcdFx0c3JjdV9yZWFkX3VubG9jayhcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VzcmN1LCBpZHgpO1xuIFx0XHRpZiAodW5saWtlbHkocmV0KSkge1xuLVx0XHRcdGt2bV9lcnIoXCIlczogOiByZWFkIGRhdGEgZnJvbSBhZGRyICVsbHggZmFpbGVkXFxuXCIsIF9fZnVuY19fLCBhZGRyKTtcbitcdFx0XHRrdm1fcHJfdW5pbXBsKFwiJXM6IDogcmVhZCBkYXRhIGZyb20gYWRkciAlbGx4IGZhaWxlZFxcblwiLCBfX2Z1bmNfXywgYWRkcik7XG4gXHRcdFx0cmV0dXJuIDA7XG4gXHRcdH1cbiBcdFx0LyogQ29uc3RydWN0IHRoZSBtYXNrIGJ5IHNjYW5uaW5nIHRoZSBiaXQgMjctMzAgKi9cbkBAIC0xNjAsNyArMTUzLDcgQEAgc3RhdGljIGludCBzZW5kX2lwaV9kYXRhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgYWRkciwgdWludDY0X3QgZGF0YSlcbiBcdHJldCA9IGt2bV9pb19idXNfd3JpdGUodmNwdSwgS1ZNX0lPQ1NSX0JVUywgYWRkciwgNCwgXHUwMDI2dmFsKTtcbiBcdHNyY3VfcmVhZF91bmxvY2soXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlc3JjdSwgaWR4KTtcbiBcdGlmICh1bmxpa2VseShyZXQpKVxuLVx0XHRrdm1fZXJyKFwiJXM6IDogd3JpdGUgZGF0YSB0byBhZGRyICVsbHggZmFpbGVkXFxuXCIsIF9fZnVuY19fLCBhZGRyKTtcbitcdFx0a3ZtX3ByX3VuaW1wbChcIiVzOiA6IHdyaXRlIGRhdGEgdG8gYWRkciAlbGx4IGZhaWxlZFxcblwiLCBfX2Z1bmNfXywgYWRkcik7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtMTczLDcgKzE2Niw3IEBAIHN0YXRpYyBpbnQgYW55X3NlbmQoc3RydWN0IGt2bSAqa3ZtLCB1aW50NjRfdCBkYXRhKVxuIFx0Y3B1ID0gKChkYXRhIFx1MDAyNiAweGZmZmZmZmZmKSBcdTAwM2VcdTAwM2UgMTYpIFx1MDAyNiAweDNmZjtcbiBcdHZjcHUgPSBrdm1fZ2V0X3ZjcHVfYnlfY3B1aWQoa3ZtLCBjcHUpO1xuIFx0aWYgKHVubGlrZWx5KHZjcHUgPT0gTlVMTCkpIHtcbi1cdFx0a3ZtX2VycihcIiVzOiBpbnZhbGlkIHRhcmdldCBjcHU6ICVkXFxuXCIsIF9fZnVuY19fLCBjcHUpO1xuK1x0XHRrdm1fcHJfdW5pbXBsKFwiJXM6IGludmFsaWQgdGFyZ2V0IGNwdTogJWRcXG5cIiwgX19mdW5jX18sIGNwdSk7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFx0b2Zmc2V0ID0gZGF0YSBcdTAwMjYgMHhmZmZmO1xuQEAgLTE4Niw5ICsxNzksMTMgQEAgc3RhdGljIGludCBsb29uZ2FyY2hfaXBpX3JlYWRsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgYWRkciwgaW50IGxlbiwgdm9pZFxuIFx0dWludDMyX3Qgb2Zmc2V0O1xuIFx0dWludDY0X3QgcmVzID0gMDtcbiBcbi1cdG9mZnNldCA9ICh1aW50MzJfdCkoYWRkciBcdTAwMjYgMHgxZmYpO1xuLVx0V0FSTl9PTl9PTkNFKG9mZnNldCBcdTAwMjYgKGxlbiAtIDEpKTtcbitcdGlmIChhZGRyIFx1MDAyNiAobGVuIC0gMSkpIHtcbitcdFx0Kih1aW50NjRfdCAqKXZhbCA9IHJlcztcbitcdFx0a3ZtX3ByX3VuaW1wbChcIiVzOiBpcGkgbm90IGFsaWduZWQgYWRkciAlbGx4IGxlbiAlZFxcblwiLCBfX2Z1bmNfXywgYWRkciwgbGVuKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4gXG4rXHRvZmZzZXQgPSBhZGRyIC0gSU9DU1JfSVBJX0JBU0U7XG4gXHRzd2l0Y2ggKG9mZnNldCkge1xuIFx0Y2FzZSBJT0NTUl9JUElfU1RBVFVTOlxuIFx0XHRzcGluX2xvY2soXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmlwaV9zdGF0ZS5sb2NrKTtcbkBAIC0yMDQsMTUgKzIwMSwxMCBAQCBzdGF0aWMgaW50IGxvb25nYXJjaF9pcGlfcmVhZGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBhZGRyLCBpbnQgbGVuLCB2b2lkXG4gXHRjYXNlIElPQ1NSX0lQSV9DTEVBUjpcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIElPQ1NSX0lQSV9CVUZfMjAgLi4uIElPQ1NSX0lQSV9CVUZfMzggKyA3OlxuLVx0XHRpZiAob2Zmc2V0ICsgbGVuIFx1MDAzZSBJT0NTUl9JUElfQlVGXzM4ICsgOCkge1xuLVx0XHRcdGt2bV9lcnIoXCIlczogaW52YWxpZCBvZmZzZXQgb3IgbGVuOiBvZmZzZXQgPSAlZCwgbGVuID0gJWRcXG5cIixcbi1cdFx0XHRcdF9fZnVuY19fLCBvZmZzZXQsIGxlbik7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbiBcdFx0cmVzID0gcmVhZF9tYWlsYm94KHZjcHUsIG9mZnNldCwgbGVuKTtcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuLVx0XHRrdm1fZXJyKFwiJXM6IHVua25vd24gYWRkcjogJWxseFxcblwiLCBfX2Z1bmNfXywgYWRkcik7XG4rXHRcdGt2bV9wcl91bmltcGwoXCIlczogdW5rbm93biBhZGRyOiAlbGx4XFxuXCIsIF9fZnVuY19fLCBhZGRyKTtcbiBcdFx0YnJlYWs7XG4gXHR9XG4gXHQqKHVpbnQ2NF90ICopdmFsID0gcmVzO1xuQEAgLTIyNyw5ICsyMTksMTIgQEAgc3RhdGljIGludCBsb29uZ2FyY2hfaXBpX3dyaXRlbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGFkZHIsIGludCBsZW4sIGNvbnNcbiBcbiBcdGRhdGEgPSAqKHVpbnQ2NF90ICopdmFsO1xuIFxuLVx0b2Zmc2V0ID0gKHVpbnQzMl90KShhZGRyIFx1MDAyNiAweDFmZik7XG4tXHRXQVJOX09OX09OQ0Uob2Zmc2V0IFx1MDAyNiAobGVuIC0gMSkpO1xuK1x0aWYgKGFkZHIgXHUwMDI2IChsZW4gLSAxKSkge1xuK1x0XHRrdm1fcHJfdW5pbXBsKFwiJXM6IGlwaSBub3QgYWxpZ25lZCBhZGRyICVsbHggbGVuICVkXFxuXCIsIF9fZnVuY19fLCBhZGRyLCBsZW4pO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbiBcbitcdG9mZnNldCA9IGFkZHIgLSBJT0NTUl9JUElfQkFTRTtcbiBcdHN3aXRjaCAob2Zmc2V0KSB7XG4gXHRjYXNlIElPQ1NSX0lQSV9TVEFUVVM6XG4gXHRcdGJyZWFrO1xuQEAgLTI0Nyw3ICsyNDIsNyBAQCBzdGF0aWMgaW50IGxvb25nYXJjaF9pcGlfd3JpdGVsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgYWRkciwgaW50IGxlbiwgY29uc1xuIFx0XHRicmVhaztcbiBcdGNhc2UgSU9DU1JfSVBJX0JVRl8yMCAuLi4gSU9DU1JfSVBJX0JVRl8zOCArIDc6XG4gXHRcdGlmIChvZmZzZXQgKyBsZW4gXHUwMDNlIElPQ1NSX0lQSV9CVUZfMzggKyA4KSB7XG4tXHRcdFx0a3ZtX2VycihcIiVzOiBpbnZhbGlkIG9mZnNldCBvciBsZW46IG9mZnNldCA9ICVkLCBsZW4gPSAlZFxcblwiLFxuK1x0XHRcdGt2bV9wcl91bmltcGwoXCIlczogaW52YWxpZCBvZmZzZXQgb3IgbGVuOiBvZmZzZXQgPSAlZCwgbGVuID0gJWRcXG5cIixcbiBcdFx0XHRcdF9fZnVuY19fLCBvZmZzZXQsIGxlbik7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbkBAIC0yNjMsNyArMjU4LDcgQEAgc3RhdGljIGludCBsb29uZ2FyY2hfaXBpX3dyaXRlbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGFkZHIsIGludCBsZW4sIGNvbnNcbiBcdFx0YW55X3NlbmQodmNwdS1cdTAwM2Vrdm0sIGRhdGEpO1xuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4tXHRcdGt2bV9lcnIoXCIlczogdW5rbm93biBhZGRyOiAlbGx4XFxuXCIsIF9fZnVuY19fLCBhZGRyKTtcbitcdFx0a3ZtX3ByX3VuaW1wbChcIiVzOiB1bmtub3duIGFkZHI6ICVsbHhcXG5cIiwgX19mdW5jX18sIGFkZHIpO1xuIFx0XHRicmVhaztcbiBcdH1cbiBcbkBAIC0zMDYsNyArMzAxLDcgQEAgc3RhdGljIGludCBrdm1faXBpX3JlZ3NfYWNjZXNzKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsXG4gXG4gXHR2Y3B1ID0ga3ZtX2dldF92Y3B1X2J5X2lkKGRldi1cdTAwM2Vrdm0sIGNwdSk7XG4gXHRpZiAodW5saWtlbHkodmNwdSA9PSBOVUxMKSkge1xuLVx0XHRrdm1fZXJyKFwiJXM6IGludmFsaWQgdGFyZ2V0IGNwdTogJWRcXG5cIiwgX19mdW5jX18sIGNwdSk7XG4rXHRcdGt2bV9wcl91bmltcGwoXCIlczogaW52YWxpZCB0YXJnZXQgY3B1OiAlZFxcblwiLCBfX2Z1bmNfXywgY3B1KTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG5AQCAtMzQwLDcgKzMzNSw3IEBAIHN0YXRpYyBpbnQga3ZtX2lwaV9yZWdzX2FjY2VzcyhzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LFxuIFx0XHRsZW4gPSA4O1xuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4tXHRcdGt2bV9lcnIoXCIlczogdW5rbm93biBpcGkgcmVnaXN0ZXIsIGFkZHIgPSAlZFxcblwiLCBfX2Z1bmNfXywgYWRkcik7XG4rXHRcdGt2bV9wcl91bmltcGwoXCIlczogdW5rbm93biBpcGkgcmVnaXN0ZXIsIGFkZHIgPSAlZFxcblwiLCBfX2Z1bmNfXywgYWRkcik7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuQEAgLTM3NCw3ICszNjksNyBAQCBzdGF0aWMgaW50IGt2bV9pcGlfZ2V0X2F0dHIoc3RydWN0IGt2bV9kZXZpY2UgKmRldixcbiBcdGNhc2UgS1ZNX0RFVl9MT09OR0FSQ0hfSVBJX0dSUF9SRUdTOlxuIFx0XHRyZXR1cm4ga3ZtX2lwaV9yZWdzX2FjY2VzcyhkZXYsIGF0dHIsIGZhbHNlKTtcbiBcdGRlZmF1bHQ6XG4tXHRcdGt2bV9lcnIoXCIlczogdW5rbm93biBncm91cCAoJWQpXFxuXCIsIF9fZnVuY19fLCBhdHRyLVx1MDAzZWdyb3VwKTtcbitcdFx0a3ZtX3ByX3VuaW1wbChcIiVzOiB1bmtub3duIGdyb3VwICglZClcXG5cIiwgX19mdW5jX18sIGF0dHItXHUwMDNlZ3JvdXApO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiB9XG5AQCAtMzg2LDcgKzM4MSw3IEBAIHN0YXRpYyBpbnQga3ZtX2lwaV9zZXRfYXR0cihzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LFxuIFx0Y2FzZSBLVk1fREVWX0xPT05HQVJDSF9JUElfR1JQX1JFR1M6XG4gXHRcdHJldHVybiBrdm1faXBpX3JlZ3NfYWNjZXNzKGRldiwgYXR0ciwgdHJ1ZSk7XG4gXHRkZWZhdWx0OlxuLVx0XHRrdm1fZXJyKFwiJXM6IHVua25vd24gZ3JvdXAgKCVkKVxcblwiLCBfX2Z1bmNfXywgYXR0ci1cdTAwM2Vncm91cCk7XG4rXHRcdGt2bV9wcl91bmltcGwoXCIlczogdW5rbm93biBncm91cCAoJWQpXFxuXCIsIF9fZnVuY19fLCBhdHRyLVx1MDAzZWdyb3VwKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gfVxuQEAgLTM5OSwxMyArMzk0LDEzIEBAIHN0YXRpYyBpbnQga3ZtX2lwaV9jcmVhdGUoc3RydWN0IGt2bV9kZXZpY2UgKmRldiwgdTMyIHR5cGUpXG4gXHRzdHJ1Y3QgbG9vbmdhcmNoX2lwaSAqcztcbiBcbiBcdGlmICghZGV2KSB7XG4tXHRcdGt2bV9lcnIoXCIlczoga3ZtX2RldmljZSBwdHIgaXMgaW52YWxpZCFcXG5cIiwgX19mdW5jX18pO1xuK1x0XHRrdm1fcHJfdW5pbXBsKFwiJXM6IGt2bV9kZXZpY2UgcHRyIGlzIGludmFsaWQhXFxuXCIsIF9fZnVuY19fKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4gXHRrdm0gPSBkZXYtXHUwMDNla3ZtO1xuIFx0aWYgKGt2bS1cdTAwM2VhcmNoLmlwaSkge1xuLVx0XHRrdm1fZXJyKFwiJXM6IExvb25nQXJjaCBJUEkgaGFzIGFscmVhZHkgYmVlbiBjcmVhdGVkIVxcblwiLCBfX2Z1bmNfXyk7XG4rXHRcdGt2bV9wcl91bmltcGwoXCIlczogTG9vbmdBcmNoIElQSSBoYXMgYWxyZWFkeSBiZWVuIGNyZWF0ZWQhXFxuXCIsIF9fZnVuY19fKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG5AQCAtNDI1LDcgKzQyMCw3IEBAIHN0YXRpYyBpbnQga3ZtX2lwaV9jcmVhdGUoc3RydWN0IGt2bV9kZXZpY2UgKmRldiwgdTMyIHR5cGUpXG4gXHRyZXQgPSBrdm1faW9fYnVzX3JlZ2lzdGVyX2Rldihrdm0sIEtWTV9JT0NTUl9CVVMsIElPQ1NSX0lQSV9CQVNFLCBJT0NTUl9JUElfU0laRSwgZGV2aWNlKTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tXHRcdGt2bV9lcnIoXCIlczogSW5pdGlhbGl6ZSBJT0NTUiBkZXYgZmFpbGVkLCByZXQgPSAlZFxcblwiLCBfX2Z1bmNfXywgcmV0KTtcbitcdFx0a3ZtX3ByX3VuaW1wbChcIiVzOiBJbml0aWFsaXplIElPQ1NSIGRldiBmYWlsZWQsIHJldCA9ICVkXFxuXCIsIF9fZnVuY19fLCByZXQpO1xuIFx0XHRnb3RvIGVycjtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9wY2hfcGljLmMgYi9hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9wY2hfcGljLmNcbmluZGV4IDE3NWE2MzBhY2ViNDE2Li5lN2I3NzcwNWM1MTZhYyAxMDA2NDRcbi0tLSBhL2FyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL3BjaF9waWMuY1xuKysrIGIvYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvcGNoX3BpYy5jXG5AQCAtMTUxLDEyICsxNTEsMTIgQEAgc3RhdGljIGludCBrdm1fcGNoX3BpY19yZWFkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdHN0cnVjdCBsb29uZ2FyY2hfcGNoX3BpYyAqcyA9IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gucGNoX3BpYztcbiBcbiBcdGlmICghcykge1xuLVx0XHRrdm1fZXJyKFwiJXM6IHBjaCBwaWMgaXJxY2hpcCBub3QgdmFsaWQhXFxuXCIsIF9fZnVuY19fKTtcbitcdFx0a3ZtX3ByX3VuaW1wbChcIiVzOiBwY2ggcGljIGlycWNoaXAgbm90IHZhbGlkIVxcblwiLCBfX2Z1bmNfXyk7XG4gXHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXG4gXHRpZiAoYWRkciBcdTAwMjYgKGxlbiAtIDEpKSB7XG4tXHRcdGt2bV9lcnIoXCIlczogcGNoIHBpYyBub3QgYWxpZ25lZCBhZGRyICVsbHggbGVuICVkXFxuXCIsIF9fZnVuY19fLCBhZGRyLCBsZW4pO1xuK1x0XHRrdm1fcHJfdW5pbXBsKFwiJXM6IHBjaCBwaWMgbm90IGFsaWduZWQgYWRkciAlbGx4IGxlbiAlZFxcblwiLCBfX2Z1bmNfXywgYWRkciwgbGVuKTtcbiBcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbkBAIC0yNTAsMTIgKzI1MCwxMiBAQCBzdGF0aWMgaW50IGt2bV9wY2hfcGljX3dyaXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdHN0cnVjdCBsb29uZ2FyY2hfcGNoX3BpYyAqcyA9IHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gucGNoX3BpYztcbiBcbiBcdGlmICghcykge1xuLVx0XHRrdm1fZXJyKFwiJXM6IHBjaCBwaWMgaXJxY2hpcCBub3QgdmFsaWQhXFxuXCIsIF9fZnVuY19fKTtcbitcdFx0a3ZtX3ByX3VuaW1wbChcIiVzOiBwY2ggcGljIGlycWNoaXAgbm90IHZhbGlkIVxcblwiLCBfX2Z1bmNfXyk7XG4gXHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXG4gXHRpZiAoYWRkciBcdTAwMjYgKGxlbiAtIDEpKSB7XG4tXHRcdGt2bV9lcnIoXCIlczogcGNoIHBpYyBub3QgYWxpZ25lZCBhZGRyICVsbHggbGVuICVkXFxuXCIsIF9fZnVuY19fLCBhZGRyLCBsZW4pO1xuK1x0XHRrdm1fcHJfdW5pbXBsKFwiJXM6IHBjaCBwaWMgbm90IGFsaWduZWQgYWRkciAlbGx4IGxlbiAlZFxcblwiLCBfX2Z1bmNfXywgYWRkciwgbGVuKTtcbiBcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbkBAIC0zOTAsMTMgKzM5MCwxMyBAQCBzdGF0aWMgaW50IGt2bV9wY2hfcGljX3NldF9hdHRyKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsXG4gXHRcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcbiBcdFx0XHRpZiAoIWRldi1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5wY2hfcGljKSB7XG4tXHRcdFx0XHRrdm1fZXJyKFwiJXM6IHBsZWFzZSBjcmVhdGUgcGNoX3BpYyBpcnFjaGlwIGZpcnN0IVxcblwiLCBfX2Z1bmNfXyk7XG4rXHRcdFx0XHRrdm1fcHJfdW5pbXBsKFwiJXM6IHBjaF9waWMgaXJxY2hpcCBub3QgY3JlYXRlZFxcblwiLCBfX2Z1bmNfXyk7XG4gXHRcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcdFx0XHR9XG4gXG4gXHRcdFx0cmV0dXJuIGt2bV9wY2hfcGljX2luaXQoZGV2LCBhZGRyKTtcbiBcdFx0ZGVmYXVsdDpcbi1cdFx0XHRrdm1fZXJyKFwiJXM6IHVua25vd24gZ3JvdXAgKCVkKSBhdHRyICglbGxkKVxcblwiLCBfX2Z1bmNfXywgYXR0ci1cdTAwM2Vncm91cCxcbitcdFx0XHRrdm1fcHJfdW5pbXBsKFwiJXM6IHVua25vd24gZ3JvdXAgKCVkKSBhdHRyICglbGxkKVxcblwiLCBfX2Z1bmNfXywgYXR0ci1cdTAwM2Vncm91cCxcbiBcdFx0XHRcdFx0YXR0ci1cdTAwM2VhdHRyKTtcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0fVxuZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL2t2bS92Y3B1LmMgYi9hcmNoL2xvb25nYXJjaC9rdm0vdmNwdS5jXG5pbmRleCAyMGMyMDdkODBlMzFhZS4uZjgxZGFkYzYyYzk4NmUgMTAwNjQ0XG4tLS0gYS9hcmNoL2xvb25nYXJjaC9rdm0vdmNwdS5jXG4rKysgYi9hcmNoL2xvb25nYXJjaC9rdm0vdmNwdS5jXG5AQCAtMTQ2NSw2ICsxNDY1LDkgQEAgaW50IGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1faW50ZXJydXB0ICppcnEpXG4gXHRpZiAodmVjdG9yIFx1MDAzZT0gRVhDQ09ERV9JTlRfTlVNKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbitcdGlmIChrdm1fYXJjaF9pcnFjaGlwX2luX2tlcm5lbCh2Y3B1LVx1MDAzZWt2bSkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuIFx0aWYgKCFrdm1fZ3Vlc3RfaGFzX21zZ2ludChcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gpIFx1MDAyNlx1MDAyNiAodmVjdG9yID09IElOVF9BVkVDKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG5AQCAtMTQ3Myw3ICsxNDc2LDcgQEAgaW50IGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1faW50ZXJydXB0ICppcnEpXG4gXHRlbHNlIGlmIChpbnRyIFx1MDAzYyAwKVxuIFx0XHRrdm1fZGVxdWV1ZV9pcnEodmNwdSwgLWludHIpO1xuIFx0ZWxzZSB7XG4tXHRcdGt2bV9lcnIoXCIlczogaW52YWxpZCBpbnRlcnJ1cHQgaW9jdGwgJWRcXG5cIiwgX19mdW5jX18sIGlycS1cdTAwM2VpcnEpO1xuK1x0XHRrdm1fcHJfdW5pbXBsKFwiJXM6IGludmFsaWQgaW50ZXJydXB0IGlvY3RsICVkXFxuXCIsIF9fZnVuY19fLCBpcnEtXHUwMDNlaXJxKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxMDoyMDoyMS45MjU2MzY5MTFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzY4MTc1OTQ3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipMb29uZ0FyY2ggS1ZNIFBhdGNoIEFuYWx5c2lzOiBBIEZvY3VzZWQgRXhhbWluYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGZvciBMb29uZ0FyY2ggS1ZNLCBhbmQgaXQgbG9va3MgbGlrZSBhIHRhcmdldGVkIHJlZmFjdG9yaW5nIG9mIGludGVycnVwdCBoYW5kbGluZy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2hhdCdzIHRoZSBtb3RpdmF0aW9uIGFuZCwgY3JpdGljYWxseSwgaXMgdGhpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlP1wiIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2VzIHNlZW0gdG8gcmV2b2x2ZSBhcm91bmQgcmVwbGFjaW5nIGBrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHRgIHdpdGggYGt2bV9xdWV1ZV9pcnFgIGFuZCBga3ZtX2RlcXVldWVfaXJxYCBpbiBzZXZlcmFsIGNydWNpYWwgYXJlYXM6IGBkbXNpbnRjX2RlbGl2ZXJfbXNpX3RvX3ZjcHVgLCBgZWlvaW50Y191cGRhdGVfaXJxYCwgYGlwaV9zZXRgLCBhbmQgYGlwaV9jbGVhcmAuIFRoZSBwYXRjaCBhbHNvIGludHJvZHVjZXMgY2hlY2tzIGZvciBga3ZtX2FyY2hfaXJxY2hpcF9pbl9rZXJuZWxgIGluIGBrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHRgLCBlZmZlY3RpdmVseSBnYXRpbmcgdGhhdCBmdW5jdGlvbmFsaXR5IHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucywgYW5kIGl0IGxvb2tzIGxpa2Ugc29tZSBjaGVja3MgaW4gYGxvb25nYXJjaF9pcGlfcmVhZGxgIGFuZCBgbG9vbmdhcmNoX2lwaV93cml0ZWxgIHRvIHZhbGlkYXRlIGFkZHJlc3MgYWxpZ25tZW50LlxuXG5UaGUgZmlyc3QgdGhpbmcgSSdtIGNoZWNraW5nIGlzIHJlYWNoYWJpbGl0eS4gSXMgdGhpcyBjb2RlIHBhdGggZXZlbiAqcG9zc2libGUqIHRvIGhpdCwgYW5kIGhvdz8gR2l2ZW4gdGhhdCBpdCdzIExvb25nQXJjaC1zcGVjaWZpYywgSSBrbm93IHRoaXMgaXMgb25seSBhY2Nlc3NpYmxlIHdpdGhpbiBhIExvb25nQXJjaCBLVk0gZW52aXJvbm1lbnQuIFNwZWNpZmljYWxseSwgdGhlIHBhdGNoIHRvdWNoZXMgS1ZNIGlvY3Rscy5cblxuTXkgZXhwZXJ0IGluc3RpbmN0IGdvZXMgc3RyYWlnaHQgdG8gZnV6emluZy4gQ2FuIHdlIHN0cmVzcy10ZXN0IHRoaXMgbmV3IGNvZGU/IFN5emthbGxlciBpcyBteSB1c3VhbCBnby10bywgYnV0IEkgaW1tZWRpYXRlbHkgaGl0IGEgc25hZzogc3l6a2FsbGVyIGhhcyBoaXN0b3JpY2FsbHkgYmVlbiBjaGFsbGVuZ2luZyB0byB1c2Ugd2l0aCBub24teDg2IGFyY2hpdGVjdHVyZXMgd2l0aG91dCBtb3JlIHNwZWNpZmljIHNldHVwLiBTbyBJIGRpZyBpbnRvIGlmIHRoZXJlIGlzIGEgd2F5IHRvIGZ1enogTG9vbmdBcmNoLiBJJ20gcmVtaW5kZWQgdGhhdCB0aGUgaW5zdHJ1Y3Rpb25zIHN0YXRlIHRoZSBjb2RlIHBhdGhzIHNob3VsZG4ndCBiZSB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLiBUaGF0J3MgYSBnb29kIHByb21wdCBhbmQgb25lIHRoYXQncyBiZWVuIGhlbHBmdWwgaW4gdGhlIHBhc3QuIExvb25nQXJjaCBRRU1VIGFuZCBzeXprYWxsZXIgb24gTG9vbmdBcmNoIGFyZSBub3cgcGxhdXNpYmxlLlxuXG5MZXQncyBhc3N1bWUgdGhhdCBpdCdzIHdvcnRoIGZ1enppbmcsIGJhc2VkIG9uIHRoaXMuXG5cbkknbSB0aGlua2luZywgXCJPa2F5LCBpZiBpdCdzIGZ1enphYmxlLCB3aGF0J3MgcmVxdWlyZWQ/XCIgYENPTkZJR19LVk1gIGlzIG9idmlvdXMsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBzdWJ0bGUgZGVwZW5kZW5jaWVzLiBUaGUgY29uZmlnIHJlcXVpcmVtZW50cyBiZWNvbWUgYSBjcnVjaWFsIG5leHQgc3RlcCB0byBmaWd1cmUgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTAwMCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NDMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxMDoyMDozNS42MDczOTk1MzdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2MDUzNzYzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvbG9vbmdhcmNoL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnLTE5LVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1cXG5hcmNoL2xvb25nYXJjaC9rdm0vS2NvbmZpZy0yMS1cXHR0cmlzdGF0ZSBcXFwiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxMDoyMDozNy4zNjc5NDIxMTdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODE5ODMwNjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktWTSBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGludG8gdGhpcyBLVk0gc3R1ZmYgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIHRoYXQgYENPTkZJR19LVk1gIGlzIGdvaW5nIHRvIGJlIGEgY3J1Y2lhbCBzdGFydGluZyBwb2ludC4gVGhhdCBzZWVtcyBwcmV0dHkgb2J2aW91cywgYnV0IGxldCdzIG5vdCBtYWtlIGFueSBhc3N1bXB0aW9ucy4gQmVmb3JlIEkgZGlnIHRvbyBkZWVwLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgSSBtaWdodCBiZSBvdmVybG9va2luZy4gSXQncyBlYXN5IHRvIGdldCB0dW5uZWwgdmlzaW9uLiBCZXN0IHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlIGZpcnN0LiBSaWdodCwgbGV0J3MgdGFrZSBhIHF1aWNrIGxvb2sgYXQgdGhlIGBhcmNoL2xvb25nYXJjaC9rdm0vTWFrZWZpbGVgIGZvciBhbnkgcmVsYXRlZCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBvciBidWlsZCBkZXBlbmRlbmNpZXMuIFRoYXQgTWFrZWZpbGUgc2hvdWxkIGhvbGQgdGhlIGtleSwgb3IgYXQgbGVhc3QgcG9pbnQgbWUgaW4gdGhlIHJpZ2h0IGRpcmVjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwNjAsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxMDoyMDo0Mi4xODc3NzYxOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODI5Nzg0MjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiLipcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9sb29uZ2FyY2gva3ZtL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvbG9vbmdhcmNoL2t2bS9NYWtlZmlsZToxOiMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG5hcmNoL2xvb25nYXJjaC9rdm0vTWFrZWZpbGU6MjojXFxuYXJjaC9sb29uZ2FyY2gva3ZtL01ha2VmaWxlOjM6IyBNYWtlZmlsZSBmb3IgTG9vbmdBcmNoIEtWTSBzdXBwb3J0XFxuYXJjaC9sb29uZ2FyY2gva3ZtL01ha2VmaWxlOjQ6I1xcbmFyY2gvbG9vbmdhcmNoL2t2bS9NYWtlZmlsZTo1OlxcbmFyY2gvbG9vbmdhcmNoL2t2bS9NYWtlZmlsZTo2OmluY2x1ZGUgJChzcmN0cmVlKS92aXJ0L2t2bS9NYWtlZmlsZS5rdm1cXG5hcmNoL2xvb25nYXJjaC9rdm0vTWFrZWZpbGU6NzpcXG5hcmNoL2xvb25nYXJjaC9rdm0vTWFrZWZpbGU6ODpvYmotJChDT05GSUdfS1ZNKSArPSBrdm0ub1xcbmFyY2gvbG9vbmdhcmNoL2t2bS9NYWtlZmlsZTo5OlxcbmFyY2gvbG9vbmdhcmNoL2t2bS9NYWtlZmlsZToxMDpvYmoteSArPSBzd2l0Y2gub1xcbmFyY2gvbG9vbmdhcmNoL2t2bS9NYWtlZmlsZToxMTpcXG5hcmNoL2xvb25nYXJjaC9rdm0vTWFrZWZpbGU6MTI6a3ZtLXkgKz0gZXhpdC5vXFxuYXJjaC9sb29uZ2FyY2gva3ZtL01ha2VmaWxlOjEzOmt2bS15ICs9IGludGVycnVwdC5vXFxuYXJjaC9sb29uZ2FyY2gva3ZtL01ha2VmaWxlOjE0Omt2bS15ICs9IG1haW4ub1xcbmFyY2gvbG9vbmdhcmNoL2t2bS9NYWtlZmlsZToxNTprdm0teSArPSBtbXUub1xcbmFyY2gvbG9vbmdhcmNoL2t2bS9NYWtlZmlsZToxNjprdm0teSArPSB0aW1lci5vXFxuYXJjaC9sb29uZ2FyY2gva3ZtL01ha2VmaWxlOjE3Omt2bS15ICs9IHRsYi5vXFxuYXJjaC9sb29uZ2FyY2gva3ZtL01ha2VmaWxlOjE4Omt2bS15ICs9IHZjcHUub1xcbmFyY2gvbG9vbmdhcmNoL2t2bS9NYWtlZmlsZToxOTprdm0teSArPSB2bS5vXFxuYXJjaC9sb29uZ2FyY2gva3ZtL01ha2VmaWxlOjIwOmt2bS15ICs9IGludGMvaXBpLm9cXG5hcmNoL2xvb25nYXJjaC9rdm0vTWFrZWZpbGU6MjE6a3ZtLXkgKz0gaW50Yy9kbXNpbnRjLm9cXG5hcmNoL2xvb25nYXJjaC9rdm0vTWFrZWZpbGU6MjI6a3ZtLXkgKz0gaW50Yy9laW9pbnRjLm9cXG5hcmNoL2xvb25nYXJjaC9rdm0vTWFrZWZpbGU6MjM6a3ZtLXkgKz0gaW50Yy9wY2hfcGljLm9cXG5hcmNoL2xvb25nYXJjaC9rdm0vTWFrZWZpbGU6MjQ6a3ZtLXkgKz0gaXJxZmQub1xcbmFyY2gvbG9vbmdhcmNoL2t2bS9NYWtlZmlsZToyNTpcXG5hcmNoL2xvb25nYXJjaC9rdm0vTWFrZWZpbGU6MjY6Q0ZMQUdTX2V4aXQub1xcdCs9ICQoY2FsbCBjYy1kaXNhYmxlLXdhcm5pbmcsIG92ZXJyaWRlLWluaXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDEwOjIwOjQyLjY3MDc2MTI0NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMzU2NDQ4MjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIG9uIEtleSBLVk0gQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEkndmUgZ290IGBDT05GSUdfS1ZNYCBmbGFnZ2VkIGFzIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIGl0ZW0uIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBjb3JlIGNoYW5nZXMuIFRoZSBhbmFseXNpcyBpbmRpY2F0ZXMgYSBzaWduaWZpY2FudCBudW1iZXIgb2YgZnVuY3Rpb25zIGhhdmUgYmVlbiB0b3VjaGVkLCBidXQgbWFueSBhcmUganVzdCB0cml2aWFsIHJlcGxhY2VtZW50cyBvZiBga3ZtX2VycmAgd2l0aCBga3ZtX3ByX3VuaW1wbGAuIEknbSBnb2luZyB0byBmb2N1cyBvbiB0aGUgb25lcyB0aGF0IHJlcHJlc2VudCBtb3JlIHN1YnN0YW50aXZlIGFsdGVyYXRpb25zIHRvIHRoZSBLVk0gZnVuY3Rpb25hbGl0eS5cblxuSSd2ZSBpZGVudGlmaWVkIGEgbGlzdCBvZiBtb2RpZmllZCBmdW5jdGlvbnMsIHRoZW4gbmFycm93ZWQgdGhhdCBsaXN0IHRvIHRoZSBvbmVzIHdpdGggc3Vic3RhbnRpYWwgY2hhbmdlcy4gTm93LCBJJ20gc2VsZWN0aW5nIHNvbWUgb2YgdGhlc2UgZnVuY3Rpb25zIHRvIHVzZSBhcyBmb2N1cyBzeW1ib2xzOiBga3ZtX3ZjcHVfaW9jdGxfaW50ZXJydXB0YCwgYGRtc2ludGNfZGVsaXZlcl9tc2lfdG9fdmNwdWAsIGBlaW9pbnRjX3VwZGF0ZV9pcnFgLCBgbG9vbmdhcmNoX2lwaV9yZWFkbGAsIGFuZCBgbG9vbmdhcmNoX2lwaV93cml0ZWxgLlxuXG5MZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBJIGhhdmUgdGhlIGZ1bmN0aW9uIG5hbWVzIGNvcnJlY3Q7IHl1cCwgYWxsIGdvb2QuXG5cblRoZSByZWFzb25pbmcgYmVoaW5kIHRoaXMgc2VsZWN0aW9uPyBUaGUgcGF0Y2ggaXMgZnVuZGFtZW50YWxseSBjaGFuZ2luZyBob3cgaW50ZXJydXB0cyBhcmUgaW5qZWN0ZWQgYW5kIElQSSBoYW5kbGluZyB3b3JrcyB3aXRoaW4gdGhlIExvb25nQXJjaCBLVk0gZW52aXJvbm1lbnQuIFNwZWNpZmljYWxseSwgaXQncyByZXBsYWNpbmcgYGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdGAgd2l0aCBga3ZtX3F1ZXVlX2lycWAgZm9yIGludGVycnVwdCBpbmplY3Rpb24gYW5kIGNvcnJlY3RpbmcgYWxpZ25tZW50IGNoZWNrcyBpbiBJUEkgcmVhZC93cml0ZSBoYW5kbGVycy4gVGhlc2UgZnVuY3Rpb25zIGFyZSBjcml0aWNhbCBiZWNhdXNlIHRoZXkncmUgZGlyZWN0bHkgaW52b2x2ZWQgaW4gaW50ZXJhY3Rpb25zIHRocm91Z2ggS1ZNIGlvY3RscyBhbmQgTU1JTy9JT0NTUiBleGl0cywgbWFraW5nIHRoZW0gYSBnb29kIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgcGF0Y2guIFRpbWUgdG8gcmVwb3J0IHRoZXNlIGZpbmRpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzg2NywiT3V0cHV0VG9rZW5zIjoxNTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDEwOjIwOjU0LjAyNzIxMjEyMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQxODY2MTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHRcIixcbiAgICBcImRtc2ludGNfZGVsaXZlcl9tc2lfdG9fdmNwdVwiLFxuICAgIFwiZWlvaW50Y191cGRhdGVfaXJxXCIsXG4gICAgXCJsb29uZ2FyY2hfaXBpX3JlYWRsXCIsXG4gICAgXCJsb29uZ2FyY2hfaXBpX3dyaXRlbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIExvb25nQXJjaCBLVk0gaW50ZXJydXB0IGluamVjdGlvbiBhbmQgSVBJIGhhbmRsaW5nLCByZXBsYWNpbmcga3ZtX3ZjcHVfaW9jdGxfaW50ZXJydXB0IHdpdGgga3ZtX3F1ZXVlX2lycSBhbmQgZml4aW5nIGFsaWdubWVudCBjaGVja3MgaW4gSVBJIHJlYWQvd3JpdGUgaGFuZGxlcnMuIFRoZXNlIGFyZSByZWFjaGFibGUgdmlhIEtWTSBpb2N0bHMgYW5kIE1NSU8vSU9DU1IgZXhpdHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3ZjcHVfaW9jdGxfaW50ZXJydXB0XCIsXG4gICAgXCJkbXNpbnRjX2RlbGl2ZXJfbXNpX3RvX3ZjcHVcIixcbiAgICBcImVpb2ludGNfdXBkYXRlX2lycVwiLFxuICAgIFwibG9vbmdhcmNoX2lwaV9yZWFkbFwiLFxuICAgIFwibG9vbmdhcmNoX2lwaV93cml0ZWxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBMb29uZ0FyY2ggS1ZNIGludGVycnVwdCBpbmplY3Rpb24gYW5kIElQSSBoYW5kbGluZywgcmVwbGFjaW5nIGt2bV92Y3B1X2lvY3RsX2ludGVycnVwdCB3aXRoIGt2bV9xdWV1ZV9pcnEgYW5kIGZpeGluZyBhbGlnbm1lbnQgY2hlY2tzIGluIElQSSByZWFkL3dyaXRlIGhhbmRsZXJzLiBUaGVzZSBhcmUgcmVhY2hhYmxlIHZpYSBLVk0gaW9jdGxzIGFuZCBNTUlPL0lPQ1NSIGV4aXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowz7p9m[1] Phase: Succeeded StartedAt: 2026-07-14 10:21:42 +0000 UTC FinishedAt: 2026-07-14 10:21:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7p9m[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-14 10:21:42 +0000 UTC FinishedAt: 2026-07-14 10:21:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7p9m[2] Phase: Succeeded StartedAt: 2026-07-14 10:21:42 +0000 UTC FinishedAt: 2026-07-14 12:03:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7p9m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vcpu_ioctl_interrupt","dmsintc_deliver_msi_to_vcpu","eiointc_update_irq","loongarch_ipi_readl","loongarch_ipi_writel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"1353c962-63a9-49b0-9bf5-26170b2b5a88","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-14 10:21:43 +0000 UTC FinishedAt: 2026-07-14 12:03:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vcpu_ioctl_interrupt","dmsintc_deliver_msi_to_vcpu","eiointc_update_irq","loongarch_ipi_readl","loongarch_ipi_writel"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"1353c962-63a9-49b0-9bf5-26170b2b5a88","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowz7p9m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vcpu_ioctl_interrupt","dmsintc_deliver_msi_to_vcpu","eiointc_update_irq","loongarch_ipi_readl","loongarch_ipi_writel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"1353c962-63a9-49b0-9bf5-26170b2b5a88","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-14 10:21:43 +0000 UTC FinishedAt: 2026-07-14 10:22:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7p9m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vcpu_ioctl_interrupt","dmsintc_deliver_msi_to_vcpu","eiointc_update_irq","loongarch_ipi_readl","loongarch_ipi_writel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"1353c962-63a9-49b0-9bf5-26170b2b5a88","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-14 10:21:43 +0000 UTC FinishedAt: 2026-07-14 10:22:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowz7p9m/series-workflowz7p9m-convert-artifact-2636305061/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz7p9m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vcpu_ioctl_interrupt","dmsintc_deliver_msi_to_vcpu","eiointc_update_irq","loongarch_ipi_readl","loongarch_ipi_writel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"1353c962-63a9-49b0-9bf5-26170b2b5a88","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-14 10:22:37 +0000 UTC FinishedAt: 2026-07-14 10:58:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7p9m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vcpu_ioctl_interrupt","dmsintc_deliver_msi_to_vcpu","eiointc_update_irq","loongarch_ipi_readl","loongarch_ipi_writel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"1353c962-63a9-49b0-9bf5-26170b2b5a88","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-14 10:22:37 +0000 UTC FinishedAt: 2026-07-14 10:58:51 +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:*41d79355-8e1d-4b31-8fca-4a790d9cd0da,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-workflowz7p9m/series-workflowz7p9m-convert-artifact-2636305061/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": "d36d4694-1ee0-4fab-a633-3a1b4ba80848", "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-workflowz7p9m/series-workflowz7p9m-build-action-2369171147/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz7p9m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vcpu_ioctl_interrupt","dmsintc_deliver_msi_to_vcpu","eiointc_update_irq","loongarch_ipi_readl","loongarch_ipi_writel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"1353c962-63a9-49b0-9bf5-26170b2b5a88","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-14 10:22:39 +0000 UTC FinishedAt: 2026-07-14 10:58:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*41d79355-8e1d-4b31-8fca-4a790d9cd0da,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-workflowz7p9m/series-workflowz7p9m-convert-artifact-2636305061/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": "d36d4694-1ee0-4fab-a633-3a1b4ba80848", "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-workflowz7p9m/series-workflowz7p9m-build-action-2369171147/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz7p9m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vcpu_ioctl_interrupt","dmsintc_deliver_msi_to_vcpu","eiointc_update_irq","loongarch_ipi_readl","loongarch_ipi_writel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"1353c962-63a9-49b0-9bf5-26170b2b5a88","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-14 10:58:51 +0000 UTC FinishedAt: 2026-07-14 10:58:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7p9m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vcpu_ioctl_interrupt","dmsintc_deliver_msi_to_vcpu","eiointc_update_irq","loongarch_ipi_readl","loongarch_ipi_writel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"1353c962-63a9-49b0-9bf5-26170b2b5a88","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-14 10:58:51 +0000 UTC FinishedAt: 2026-07-14 10:58:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7p9m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vcpu_ioctl_interrupt","dmsintc_deliver_msi_to_vcpu","eiointc_update_irq","loongarch_ipi_readl","loongarch_ipi_writel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"1353c962-63a9-49b0-9bf5-26170b2b5a88","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-14 10:58:51 +0000 UTC FinishedAt: 2026-07-14 10:59:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7p9m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vcpu_ioctl_interrupt","dmsintc_deliver_msi_to_vcpu","eiointc_update_irq","loongarch_ipi_readl","loongarch_ipi_writel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"1353c962-63a9-49b0-9bf5-26170b2b5a88","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-14 10:58:51 +0000 UTC FinishedAt: 2026-07-14 10:59:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"1353c962-63a9-49b0-9bf5-26170b2b5a88","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowz7p9m/series-workflowz7p9m-convert-artifact-2876451968/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz7p9m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vcpu_ioctl_interrupt","dmsintc_deliver_msi_to_vcpu","eiointc_update_irq","loongarch_ipi_readl","loongarch_ipi_writel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"1353c962-63a9-49b0-9bf5-26170b2b5a88","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-14 10:59:14 +0000 UTC FinishedAt: 2026-07-14 11:01:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7p9m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vcpu_ioctl_interrupt","dmsintc_deliver_msi_to_vcpu","eiointc_update_irq","loongarch_ipi_readl","loongarch_ipi_writel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"1353c962-63a9-49b0-9bf5-26170b2b5a88","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-14 10:59:14 +0000 UTC FinishedAt: 2026-07-14 11:01:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d36d4694-1ee0-4fab-a633-3a1b4ba80848,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-workflowz7p9m/series-workflowz7p9m-build-action-2369171147/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-workflowz7p9m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vcpu_ioctl_interrupt","dmsintc_deliver_msi_to_vcpu","eiointc_update_irq","loongarch_ipi_readl","loongarch_ipi_writel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"1353c962-63a9-49b0-9bf5-26170b2b5a88","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-14 11:01:11 +0000 UTC FinishedAt: 2026-07-14 11:01:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7p9m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vcpu_ioctl_interrupt","dmsintc_deliver_msi_to_vcpu","eiointc_update_irq","loongarch_ipi_readl","loongarch_ipi_writel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"1353c962-63a9-49b0-9bf5-26170b2b5a88","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-14 11:01:11 +0000 UTC FinishedAt: 2026-07-14 11:01:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7p9m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vcpu_ioctl_interrupt","dmsintc_deliver_msi_to_vcpu","eiointc_update_irq","loongarch_ipi_readl","loongarch_ipi_writel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"1353c962-63a9-49b0-9bf5-26170b2b5a88","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-14 11:01:11 +0000 UTC FinishedAt: 2026-07-14 11:57:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7p9m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vcpu_ioctl_interrupt","dmsintc_deliver_msi_to_vcpu","eiointc_update_irq","loongarch_ipi_readl","loongarch_ipi_writel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"1353c962-63a9-49b0-9bf5-26170b2b5a88","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-14 11:01:11 +0000 UTC FinishedAt: 2026-07-14 11:57:57 +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:*41d79355-8e1d-4b31-8fca-4a790d9cd0da,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-workflowz7p9m/series-workflowz7p9m-convert-artifact-2876451968/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": "0c196a5c-0323-4f75-a7db-c16815504d6c", "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-workflowz7p9m/series-workflowz7p9m-build-action-627120700/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz7p9m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vcpu_ioctl_interrupt","dmsintc_deliver_msi_to_vcpu","eiointc_update_irq","loongarch_ipi_readl","loongarch_ipi_writel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"1353c962-63a9-49b0-9bf5-26170b2b5a88","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-14 11:01:11 +0000 UTC FinishedAt: 2026-07-14 11:57:47 +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:*41d79355-8e1d-4b31-8fca-4a790d9cd0da,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-workflowz7p9m/series-workflowz7p9m-convert-artifact-2876451968/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": "0c196a5c-0323-4f75-a7db-c16815504d6c", "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-workflowz7p9m/series-workflowz7p9m-build-action-627120700/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz7p9m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vcpu_ioctl_interrupt","dmsintc_deliver_msi_to_vcpu","eiointc_update_irq","loongarch_ipi_readl","loongarch_ipi_writel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"1353c962-63a9-49b0-9bf5-26170b2b5a88","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-14 11:57:57 +0000 UTC FinishedAt: 2026-07-14 11:57:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7p9m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vcpu_ioctl_interrupt","dmsintc_deliver_msi_to_vcpu","eiointc_update_irq","loongarch_ipi_readl","loongarch_ipi_writel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"1353c962-63a9-49b0-9bf5-26170b2b5a88","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-14 11:57:57 +0000 UTC FinishedAt: 2026-07-14 11:57:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7p9m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vcpu_ioctl_interrupt","dmsintc_deliver_msi_to_vcpu","eiointc_update_irq","loongarch_ipi_readl","loongarch_ipi_writel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"1353c962-63a9-49b0-9bf5-26170b2b5a88","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-14 11:57:57 +0000 UTC FinishedAt: 2026-07-14 12:00:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7p9m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vcpu_ioctl_interrupt","dmsintc_deliver_msi_to_vcpu","eiointc_update_irq","loongarch_ipi_readl","loongarch_ipi_writel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"1353c962-63a9-49b0-9bf5-26170b2b5a88","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-14 11:57:57 +0000 UTC FinishedAt: 2026-07-14 12:00:44 +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:*0c196a5c-0323-4f75-a7db-c16815504d6c,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-workflowz7p9m/series-workflowz7p9m-build-action-627120700/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-workflowz7p9m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vcpu_ioctl_interrupt","dmsintc_deliver_msi_to_vcpu","eiointc_update_irq","loongarch_ipi_readl","loongarch_ipi_writel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"1353c962-63a9-49b0-9bf5-26170b2b5a88","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-14 12:00:56 +0000 UTC FinishedAt: 2026-07-14 12:03:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7p9m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vcpu_ioctl_interrupt","dmsintc_deliver_msi_to_vcpu","eiointc_update_irq","loongarch_ipi_readl","loongarch_ipi_writel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"1353c962-63a9-49b0-9bf5-26170b2b5a88","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-14 12:00:56 +0000 UTC FinishedAt: 2026-07-14 12:03:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vcpu_ioctl_interrupt","dmsintc_deliver_msi_to_vcpu","eiointc_update_irq","loongarch_ipi_readl","loongarch_ipi_writel"],"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:*d36d4694-1ee0-4fab-a633-3a1b4ba80848,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0c196a5c-0323-4f75-a7db-c16815504d6c,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-workflowz7p9m/series-workflowz7p9m-build-action-2369171147/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-workflowz7p9m/series-workflowz7p9m-build-action-627120700/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowz7p9m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vcpu_ioctl_interrupt","dmsintc_deliver_msi_to_vcpu","eiointc_update_irq","loongarch_ipi_readl","loongarch_ipi_writel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"1353c962-63a9-49b0-9bf5-26170b2b5a88","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-14 12:00:56 +0000 UTC FinishedAt: 2026-07-14 12:01:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7p9m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vcpu_ioctl_interrupt","dmsintc_deliver_msi_to_vcpu","eiointc_update_irq","loongarch_ipi_readl","loongarch_ipi_writel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"1353c962-63a9-49b0-9bf5-26170b2b5a88","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-14 12:00:56 +0000 UTC FinishedAt: 2026-07-14 12:01:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vcpu_ioctl_interrupt","dmsintc_deliver_msi_to_vcpu","eiointc_update_irq","loongarch_ipi_readl","loongarch_ipi_writel"],"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-workflowz7p9m/series-workflowz7p9m-convert-artifact-811384537/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz7p9m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vcpu_ioctl_interrupt","dmsintc_deliver_msi_to_vcpu","eiointc_update_irq","loongarch_ipi_readl","loongarch_ipi_writel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"1353c962-63a9-49b0-9bf5-26170b2b5a88","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-14 12:00:56 +0000 UTC FinishedAt: 2026-07-14 12:00:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7p9m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vcpu_ioctl_interrupt","dmsintc_deliver_msi_to_vcpu","eiointc_update_irq","loongarch_ipi_readl","loongarch_ipi_writel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"1353c962-63a9-49b0-9bf5-26170b2b5a88","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-14 12:00:56 +0000 UTC FinishedAt: 2026-07-14 12:00:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7p9m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vcpu_ioctl_interrupt","dmsintc_deliver_msi_to_vcpu","eiointc_update_irq","loongarch_ipi_readl","loongarch_ipi_writel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"1353c962-63a9-49b0-9bf5-26170b2b5a88","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-14 12:00:56 +0000 UTC FinishedAt: 2026-07-14 12:00:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7p9m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vcpu_ioctl_interrupt","dmsintc_deliver_msi_to_vcpu","eiointc_update_irq","loongarch_ipi_readl","loongarch_ipi_writel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"1353c962-63a9-49b0-9bf5-26170b2b5a88","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-14 12:01:06 +0000 UTC FinishedAt: 2026-07-14 12:03:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7p9m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_vcpu_ioctl_interrupt","dmsintc_deliver_msi_to_vcpu","eiointc_update_irq","loongarch_ipi_readl","loongarch_ipi_writel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"1353c962-63a9-49b0-9bf5-26170b2b5a88","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-14 12:01:06 +0000 UTC FinishedAt: 2026-07-14 12:03:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d36d4694-1ee0-4fab-a633-3a1b4ba80848,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0c196a5c-0323-4f75-a7db-c16815504d6c,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-workflowz7p9m/series-workflowz7p9m-build-action-2369171147/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-workflowz7p9m/series-workflowz7p9m-build-action-627120700/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-workflowz7p9m/series-workflowz7p9m-convert-artifact-811384537/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,}