Name: series-workflowlrbzn Phase: Succeeded StartedAt: 2026-06-24 17:35:08 +0000 UTC FinishedAt: 2026-06-24 21:41:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlrbzn[0] Phase: Succeeded StartedAt: 2026-06-24 17:35:08 +0000 UTC FinishedAt: 2026-06-24 17:43:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlrbzn[0].run-triage Phase: Succeeded StartedAt: 2026-06-24 17:35:08 +0000 UTC FinishedAt: 2026-06-24 17:43:27 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "5c7804e3279c9bdc36e5eac743b4000633b25f65", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_LOOP", "BLK_DEV_ZONED_LOOP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "5c7804e3279c9bdc36e5eac743b4000633b25f65", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_LOOP", "BLK_DEV_ZONED_LOOP" ], "series_id": "34e23873-7e4a-4f53-b8d3-6caac0785b84" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "bio_iov_iter_get_pages", "iov_iter_extract_bvecs", "loop_update_dio_alignment", "loop_set_dma_limit", "zloop_get_block_size", "zloop_ctl_add" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDE3OjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTE9PUCYjMzQ7LAogICAgJiMzNDtCTEtfREVWX1pPTkVEX0xPT1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzJiMzNDssCiAgICAmIzM0O2lvdl9pdGVyX2V4dHJhY3RfYnZlY3MmIzM0OywKICAgICYjMzQ7bG9vcF91cGRhdGVfZGlvX2FsaWdubWVudCYjMzQ7LAogICAgJiMzNDtsb29wX3NldF9kbWFfbGltaXQmIzM0OywKICAgICYjMzQ7emxvb3BfZ2V0X2Jsb2NrX3NpemUmIzM0OywKICAgICYjMzQ7emxvb3BfY3RsX2FkZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBibG9jayBsYXllciBkaXJlY3QgSS9PIGxvZ2ljIHRvIGVuZm9yY2UgbWVtb3J5IGFsaWdubWVudCBjaGVja3MgdmlhIGBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzYCBhbmQgYGlvdl9pdGVyX2V4dHJhY3RfYnZlY3NgLiBJdCBhbHNvIHVwZGF0ZXMgdGhlIGBsb29wYCBhbmQgYHpsb29wYCBkcml2ZXJzIHRvIGNvcnJlY3RseSBzZXQgRE1BIGxpbWl0cyBiYXNlZCBvbiB0aGUgYmFja2luZyBmaWxlJiMzOTtzIGRpcmVjdCBJL08gYWxpZ25tZW50LiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIGJsb2NrIGxheWVyIGZ1bmN0aW9uYWxpdHkgYW5kIGRyaXZlciBiZWhhdmlvciwgbWFraW5nIHRoZW0gaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDE3OjQyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZGM1ZTE2ZGQ1NGM4ZDEwNjg3Yzk0ZjUwNTY5MWEwOWQ1N2UxNGYwOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVuIDI0IDE3OjQyOjIxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jpby5jIGIvYmxvY2svYmlvLmNcbmluZGV4IGYyYTVmNGQwYTk2NzJiLi5mYWFkNDFhNzJhYzc3ZiAxMDA2NDRcbi0tLSBhL2Jsb2NrL2Jpby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9iaW8uY1xuQEAgLTEyMjAsMTAgJiM0MzsxMjIwLDQ1IEBAIHN0YXRpYyBpbnQgYmlvX2lvdl9pdGVyX2FsaWduX2Rvd24oc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfREVCVUdfS0VSTkVMXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBiaW9faW92X2J2ZWNfYWxpZ25lZChjb25zdCBzdHJ1Y3QgYmlvICpiaW8sXG4mIzQzO1x0XHRcdFx0XHR1bnNpZ25lZCBtZW1fYWxpZ25fbWFzaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBidmVjX2l0ZXIgaXRlcjtcbiYjNDM7XHRzdHJ1Y3QgYmlvX3ZlYyBidjtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBDb3JyZWN0IGNhbGxlcnMgbmV2ZXIgYnJlYWsgdGhlIGFsaWdubWVudCByZXF1aXJlbWVudHMsIHNvIHRoaXNcbiYjNDM7XHQgKiBleGhhdXN0aXZlIGNoZWNrIGlzIG9ubHkgcGFpZCBmb3IgaW4gZGVidWcgYnVpbGRzLlxuJiM0MztcdCAqL1xuJiM0MztcdGZvcl9lYWNoX21wX2J2ZWMoYnYsIGJpby1cdTAwM2ViaV9pb192ZWMsIGl0ZXIsIGJpby1cdTAwM2ViaV9pdGVyKVxuJiM0MztcdFx0aWYgKChidi5idl9vZmZzZXQgfCBidi5idl9sZW4pIFx1MDAyNiBtZW1fYWxpZ25fbWFzaylcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzOyNlbHNlXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBiaW9faW92X2J2ZWNfYWxpZ25lZChjb25zdCBzdHJ1Y3QgYmlvICpiaW8sXG4mIzQzO1x0XHRcdFx0XHR1bnNpZ25lZCBtZW1fYWxpZ25fbWFzaylcbiYjNDM7e1xuJiM0MztcdC8qXG4mIzQzO1x0ICogV2UgZm9yd2FyZCB0aGUgYmlvX3ZlYyBhcy1pcywgc28gSVRFUl9CVkVDIGNhbGxlcnMgbXVzdCBwcm92aWRlXG4mIzQzO1x0ICogc2VnbWVudHMgYWxyZWFkeSBhbGlnbmVkIHRvIHRoZSBkZXZpY2UmIzM5O3MgRE1BIGFsaWdubWVudC4gVGhlIG9ubHlcbiYjNDM7XHQgKiB1bmNoZWNrZWQgdXNlci1jb250cm9sbGFibGUgb2Zmc2V0IHRoYXQgcmVhY2hlcyBoZXJlIGlzIGFuIGlvX3VyaW5nXG4mIzQzO1x0ICogcmVnaXN0ZXJlZCBidWZmZXIgd2hlcmUganVzdCB0aGUgZmlyc3Qgc2VnbWVudCBjYW4gYmUgdW5hbGlnbmVkXG4mIzQzO1x0ICogKHRoZSByZXN0IGlzIHZpcnR1YWxseSBjb250aWd1b3VzKSwgc28gY2hlY2tpbmcgb25seSB0aGF0IG9uZSBpc1xuJiM0MztcdCAqIHN1ZmZpY2llbnQgdG8ga25vdyBpZiB0aGUgZW50aXJlIHZlY3RvciBpcyB2YWxpZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXR1cm4gIShtcF9idmVjX2l0ZXJfb2Zmc2V0KGJpby1cdTAwM2ViaV9pb192ZWMsIGJpby1cdTAwM2ViaV9pdGVyKSBcdTAwMjZcbiYjNDM7XHRcdFx0XHRcdFx0XHRtZW1fYWxpZ25fbWFzayk7XG4mIzQzO31cbiYjNDM7I2VuZGlmXG4mIzQzO1xuIC8qKlxuICAqIGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMgLSBhZGQgdXNlciBvciBrZXJuZWwgcGFnZXMgdG8gYSBiaW9cbiAgKiBAYmlvOiBiaW8gdG8gYWRkIHBhZ2VzIHRvXG4gICogQGl0ZXI6IGlvdiBpdGVyYXRvciBkZXNjcmliaW5nIHRoZSByZWdpb24gdG8gYmUgYWRkZWRcbiYjNDM7ICogQG1lbV9hbGlnbl9tYXNrOiB0aGUgbWFzayB0aGUgc291cmNlIGFkZHJlc3MgYW5kIGxlbmd0aCBtdXN0IGJlIGFsaWduZWQgdG8sXG4mIzQzOyAqXHQwIGZvciBubyByZXF1aXJlbWVudFxuICAqIEBsZW5fYWxpZ25fbWFzazogdGhlIG1hc2sgdG8gYWxpZ24gdGhlIHRvdGFsIHNpemUgdG8sIDAgZm9yIGFueSBsZW5ndGhcbiAgKlxuICAqIFRoaXMgdGFrZXMgZWl0aGVyIGFuIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHVzZXIgbWVtb3J5LCBvciBvbmUgcG9pbnRpbmcgdG9cbkBAIC0xMjQyLDcgJiM0MzsxMjc3LDcgQEAgc3RhdGljIGludCBiaW9faW92X2l0ZXJfYWxpZ25fZG93bihzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiAgKiBpcyByZXR1cm5lZCBvbmx5IGlmIDAgcGFnZXMgY291bGQgYmUgcGlubmVkLlxuICAqL1xuIGludCBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuLVx0XHRcdCAgIHVuc2lnbmVkIGxlbl9hbGlnbl9tYXNrKVxuJiM0MztcdFx0XHQgICB1bnNpZ25lZCBtZW1fYWxpZ25fbWFzaywgdW5zaWduZWQgbGVuX2FsaWduX21hc2spXG4ge1xuIFx0aW92X2l0ZXJfZXh0cmFjdGlvbl90IGZsYWdzID0gMDtcbiBcbkBAIC0xMjUxLDYgJiM0MzsxMjg2LDEwIEBAIGludCBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuIFxuIFx0aWYgKGlvdl9pdGVyX2lzX2J2ZWMoaXRlcikpIHtcbiBcdFx0YmlvX2lvdl9idmVjX3NldChiaW8sIGl0ZXIpO1xuJiM0MztcbiYjNDM7XHRcdGlmICghYmlvX2lvdl9idmVjX2FsaWduZWQoYmlvLCBtZW1fYWxpZ25fbWFzaykpXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiBcdFx0aW92X2l0ZXJfYWR2YW5jZShpdGVyLCBiaW8tXHUwMDNlYmlfaXRlci5iaV9zaXplKTtcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG5AQCAtMTI2NSw4ICYjNDM7MTMwNCwxOSBAQCBpbnQgYmlvX2lvdl9pdGVyX2dldF9wYWdlcyhzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiBcbiBcdFx0cmV0ID0gaW92X2l0ZXJfZXh0cmFjdF9idmVjcyhpdGVyLCBiaW8tXHUwMDNlYmlfaW9fdmVjLFxuIFx0XHRcdFx0QklPX01BWF9TSVpFIC0gYmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSxcbi1cdFx0XHRcdFx1MDAyNmJpby1cdTAwM2ViaV92Y250LCBiaW8tXHUwMDNlYmlfbWF4X3ZlY3MsIGZsYWdzKTtcbiYjNDM7XHRcdFx0XHRcdTAwMjZiaW8tXHUwMDNlYmlfdmNudCwgYmlvLVx1MDAzZWJpX21heF92ZWNzLFxuJiM0MztcdFx0XHRcdG1lbV9hbGlnbl9tYXNrLCBmbGFncyk7XG4gXHRcdGlmIChyZXQgXHUwMDNjPSAwKSB7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIEEgbWlzYWxpZ25lZCB2ZWN0b3IgZmFpbHMgdGhlIHdob2xlIEkvTy4gIFJlbGVhc2UgYW55XG4mIzQzO1x0XHRcdCAqIHBhZ2VzIHBpbm5lZCBieSBlYXJsaWVyIGl0ZXJhdGlvbnMgYmVmb3JlIHJldHVybmluZ1xuJiM0MztcdFx0XHQgKiBzaW5jZSB0aGlzIGJpbyB3b24mIzM5O3QgYmUgc3VibWl0dGVkIHRvIHJlbGVhc2UgdGhlbS5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdGlmIChyZXQgPT0gLUVJTlZBTCkge1xuJiM0MztcdFx0XHRcdGJpb19yZWxlYXNlX3BhZ2VzKGJpbywgZmFsc2UpO1xuJiM0MztcdFx0XHRcdGJpb19jbGVhcl9mbGFnKGJpbywgQklPX1BBR0VfUElOTkVEKTtcbiYjNDM7XHRcdFx0XHRiaW8tXHUwMDNlYmlfdmNudCA9IDA7XG4mIzQzO1x0XHRcdH1cbiBcdFx0XHRpZiAoIWJpby1cdTAwM2ViaV92Y250KVxuIFx0XHRcdFx0cmV0dXJuIHJldDtcbiBcdFx0XHRicmVhaztcbkBAIC0xMzc3LDcgJiM0MzsxNDI3LDcgQEAgc3RhdGljIGludCBiaW9faW92X2l0ZXJfYm91bmNlX3JlYWQoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXHRcdHNzaXplX3QgcmV0O1xuIFxuIFx0XHRyZXQgPSBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzKGl0ZXIsIGJpby1cdTAwM2ViaV9pb192ZWMgJiM0MzsgMSwgbGVuLFxuLVx0XHRcdFx0XHUwMDI2YmlvLVx1MDAzZWJpX3ZjbnQsIGJpby1cdTAwM2ViaV9tYXhfdmVjcyAtIDEsIDApO1xuJiM0MztcdFx0XHRcdFx1MDAyNmJpby1cdTAwM2ViaV92Y250LCBiaW8tXHUwMDNlYmlfbWF4X3ZlY3MgLSAxLCAwLCAwKTtcbiBcdFx0aWYgKHJldCBcdTAwM2M9IDApIHtcbiBcdFx0XHRpZiAoIWJpby1cdTAwM2ViaV92Y250KSB7XG4gXHRcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1tYXAuYyBiL2Jsb2NrL2Jsay1tYXAuY1xuaW5kZXggNzY4NTQ5ZjE5Zjk3ZWMuLmM5NTM1ZWZlMWE5MTNjIDEwMDY0NFxuLS0tIGEvYmxvY2svYmxrLW1hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9ibGstbWFwLmNcbkBAIC0yNzQsNyAmIzQzOzI3NCw3IEBAIHN0YXRpYyBpbnQgYmlvX21hcF91c2VyX2lvdihzdHJ1Y3QgcmVxdWVzdCAqcnEsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiBcdCAqIE5vIGFsaWdubWVudCByZXF1aXJlbWVudHMgb24gb3VyIHBhcnQgdG8gc3VwcG9ydCBhcmJpdHJhcnlcbiBcdCAqIHBhc3N0aHJvdWdoIGNvbW1hbmRzLlxuIFx0ICovXG4tXHRyZXQgPSBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKGJpbywgaXRlciwgMCk7XG4mIzQzO1x0cmV0ID0gYmlvX2lvdl9pdGVyX2dldF9wYWdlcyhiaW8sIGl0ZXIsIDAsIDApO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byBvdXRfcHV0O1xuIFx0cmV0ID0gYmxrX3JxX2FwcGVuZF9iaW8ocnEsIGJpbyk7XG5kaWZmIC0tZ2l0IGEvYmxvY2svZm9wcy5jIGIvYmxvY2svZm9wcy5jXG5pbmRleCAxNTc4M2E2MTgwZGVjMS4uZTUxOWQ3ZjQzYjMxMDYgMTAwNjQ0XG4tLS0gYS9ibG9jay9mb3BzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2ZvcHMuY1xuQEAgLTQ2LDcgJiM0Mzs0Niw3IEBAIHN0YXRpYyBib29sIGJsa2Rldl9kaW9faW52YWxpZChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4gc3RhdGljIGlubGluZSBpbnQgYmxrZGV2X2lvdl9pdGVyX2dldF9wYWdlcyhzdHJ1Y3QgYmlvICpiaW8sXG4gXHRcdHN0cnVjdCBpb3ZfaXRlciAqaXRlciwgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldilcbiB7XG4tXHRyZXR1cm4gYmlvX2lvdl9pdGVyX2dldF9wYWdlcyhiaW8sIGl0ZXIsXG4mIzQzO1x0cmV0dXJuIGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoYmlvLCBpdGVyLCBiZGV2X2RtYV9hbGlnbm1lbnQoYmRldiksXG4gXHRcdFx0YmRldl9sb2dpY2FsX2Jsb2NrX3NpemUoYmRldikgLSAxKTtcbiB9XG4gXG5AQCAtMjE4LDcgJiM0MzsyMTgsNyBAQCBzdGF0aWMgc3NpemVfdCBfX2Jsa2Rldl9kaXJlY3RfSU8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXG4gXHRcdHJldCA9IGJsa2Rldl9pb3ZfaXRlcl9nZXRfcGFnZXMoYmlvLCBpdGVyLCBiZGV2KTtcbiBcdFx0aWYgKHVubGlrZWx5KHJldCkpIHtcbi1cdFx0XHRiaW9fZW5kaW9fc3RhdHVzKGJpbywgQkxLX1NUU19JT0VSUik7XG4mIzQzO1x0XHRcdGJpb19lbmRpb19zdGF0dXMoYmlvLCBlcnJub190b19ibGtfc3RhdHVzKHJldCkpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXHRcdGlmIChpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNiBJT0NCX05PV0FJVCkge1xuQEAgLTIzOCw4ICYjNDM7MjM4LDEwIEBAIHN0YXRpYyBzc2l6ZV90IF9fYmxrZGV2X2RpcmVjdF9JTyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiBcdFx0fVxuIFx0XHRpZiAoaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9IQVNfTUVUQURBVEEpIHtcbiBcdFx0XHRyZXQgPSBiaW9faW50ZWdyaXR5X21hcF9pdGVyKGJpbywgaW9jYi1cdTAwM2Vwcml2YXRlKTtcbi1cdFx0XHRpZiAodW5saWtlbHkocmV0KSlcbi1cdFx0XHRcdGdvdG8gZmFpbDtcbiYjNDM7XHRcdFx0aWYgKHVubGlrZWx5KHJldCkpIHtcbiYjNDM7XHRcdFx0XHRiaW9fZW5kaW9fc3RhdHVzKGJpbywgZXJybm9fdG9fYmxrX3N0YXR1cyhyZXQpKTtcbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0fVxuIFx0XHR9XG4gXG4gXHRcdGlmIChpc19yZWFkKSB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9sb29wLmMgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xuaW5kZXggMzEwZGUwNDYzYmViMTQuLjVmZTYxZDU0MmY4Yjc1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay9sb29wLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jXG5AQCAtNTQsNiAmIzQzOzU0LDcgQEAgc3RydWN0IGxvb3BfZGV2aWNlIHtcbiBcbiBcdHN0cnVjdCBmaWxlXHQqbG9fYmFja2luZ19maWxlO1xuIFx0dW5zaWduZWQgaW50XHRsb19taW5fZGlvX3NpemU7XG4mIzQzO1x0dW5zaWduZWQgaW50XHRsb19kaW9fbWVtX2FsaWduO1xuIFx0c3RydWN0IGJsb2NrX2RldmljZSAqbG9fZGV2aWNlO1xuIFxuIFx0Z2ZwX3RcdFx0b2xkX2dmcF9tYXNrO1xuQEAgLTQ0NywyNiAmIzQzOzQ0OCwzNyBAQCBzdGF0aWMgdm9pZCBsb29wX3JlcmVhZF9wYXJ0aXRpb25zKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4gXHRcdFx0X19mdW5jX18sIGxvLVx1MDAzZWxvX251bWJlciwgbG8tXHUwMDNlbG9fZmlsZV9uYW1lLCByYyk7XG4gfVxuIFxuLXN0YXRpYyB1bnNpZ25lZCBpbnQgbG9vcF9xdWVyeV9taW5fZGlvX3NpemUoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbiYjNDM7c3RhdGljIHZvaWQgbG9vcF91cGRhdGVfZGlvX2FsaWdubWVudChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuIHtcbiBcdHN0cnVjdCBmaWxlICpmaWxlID0gbG8tXHUwMDNlbG9fYmFja2luZ19maWxlO1xuIFx0c3RydWN0IGJsb2NrX2RldmljZSAqc2JfYmRldiA9IGZpbGUtXHUwMDNlZl9tYXBwaW5nLVx1MDAzZWhvc3QtXHUwMDNlaV9zYi1cdTAwM2VzX2JkZXY7XG4gXHRzdHJ1Y3Qga3N0YXQgc3Q7XG4gXG4gXHQvKlxuLVx0ICogVXNlIHRoZSBtaW5pbWFsIGRpbyBhbGlnbm1lbnQgb2YgdGhlIGZpbGUgc3lzdGVtIGlmIHByb3ZpZGVkLlxuJiM0MztcdCAqIFVzZSB0aGUgZGlvIGFsaWdubWVudCBvZiB0aGUgZmlsZSBzeXN0ZW0gaWYgcHJvdmlkZWQuICBUaGUgaW5jb21vaW5nXG4mIzQzO1x0ICogcmVxdWVzdCYjMzk7cyBiaW9fdmVjIGlzIGZvcndhcmRlZCB0byB0aGUgYmFja2luZyBmaWxlIHVuY2hhbmdlZCwgc28gaXRzXG4mIzQzO1x0ICogcmVxdWlyZWQgbWVtb3J5IGFsaWdubWVudCBiZWNvbWVzIHRoZSBkZXZpY2UmIzM5O3MgZG1hX2FsaWdubWVudCB3aGVuXG4mIzQzO1x0ICogdXNlZCBmb3IgZGlyZWN0LWlvLlxuIFx0ICovXG4gXHRpZiAoIXZmc19nZXRhdHRyKFx1MDAyNmZpbGUtXHUwMDNlZl9wYXRoLCBcdTAwMjZzdCwgU1RBVFhfRElPQUxJR04sIDApIFx1MDAyNlx1MDAyNlxuLVx0ICAgIChzdC5yZXN1bHRfbWFzayBcdTAwMjYgU1RBVFhfRElPQUxJR04pKVxuLVx0XHRyZXR1cm4gc3QuZGlvX29mZnNldF9hbGlnbjtcbiYjNDM7XHQgICAgKHN0LnJlc3VsdF9tYXNrIFx1MDAyNiBTVEFUWF9ESU9BTElHTikpIHtcbiYjNDM7XHRcdGxvLVx1MDAzZWxvX21pbl9kaW9fc2l6ZSA9IHN0LmRpb19vZmZzZXRfYWxpZ247XG4mIzQzO1x0XHRsby1cdTAwM2Vsb19kaW9fbWVtX2FsaWduID0gc3QuZGlvX21lbV9hbGlnbiAtIDE7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuIFxuIFx0LypcbiBcdCAqIEluIGEgcGVyZmVjdCB3b3JsZCB0aGlzIHdvdWxkbiYjMzk7dCBiZSBuZWVkZWQsIGJ1dCBhcyBvZiBMaW51eCA2LjEzIG9ubHlcbiBcdCAqIGEgaGFuZGZ1bCBvZiBmaWxlIHN5c3RlbXMgc3VwcG9ydCB0aGUgU1RBVFhfRElPQUxJR04gZmxhZy5cbiBcdCAqL1xuLVx0aWYgKHNiX2JkZXYpXG4tXHRcdHJldHVybiBiZGV2X2xvZ2ljYWxfYmxvY2tfc2l6ZShzYl9iZGV2KTtcbi1cdHJldHVybiBTRUNUT1JfU0laRTtcbiYjNDM7XHRpZiAoc2JfYmRldikge1xuJiM0MztcdFx0bG8tXHUwMDNlbG9fbWluX2Rpb19zaXplID0gYmRldl9sb2dpY2FsX2Jsb2NrX3NpemUoc2JfYmRldik7XG4mIzQzO1x0XHRsby1cdTAwM2Vsb19kaW9fbWVtX2FsaWduID0gYmRldl9kbWFfYWxpZ25tZW50KHNiX2JkZXYpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bG8tXHUwMDNlbG9fbWluX2Rpb19zaXplID0gU0VDVE9SX1NJWkU7XG4mIzQzO1x0bG8tXHUwMDNlbG9fZGlvX21lbV9hbGlnbiA9IFNFQ1RPUl9TSVpFIC0gMTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBpbnQgaXNfbG9vcF9kZXZpY2Uoc3RydWN0IGZpbGUgKmZpbGUpXG5AQCAtNTA5LDcgJiM0Mzs1MjEsNyBAQCBzdGF0aWMgdm9pZCBsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IGZpbGUgKmZpbGUpXG4gXHRcdFx0bG8tXHUwMDNlb2xkX2dmcF9tYXNrIFx1MDAyNiB+KF9fR0ZQX0lPIHwgX19HRlBfRlMpKTtcbiBcdGlmIChsby1cdTAwM2Vsb19iYWNraW5nX2ZpbGUtXHUwMDNlZl9mbGFncyBcdTAwMjYgT19ESVJFQ1QpXG4gXHRcdGxvLVx1MDAzZWxvX2ZsYWdzIHw9IExPX0ZMQUdTX0RJUkVDVF9JTztcbi1cdGxvLVx1MDAzZWxvX21pbl9kaW9fc2l6ZSA9IGxvb3BfcXVlcnlfbWluX2Rpb19zaXplKGxvKTtcbiYjNDM7XHRsb29wX3VwZGF0ZV9kaW9fYWxpZ25tZW50KGxvKTtcbiB9XG4gXG4gc3RhdGljIGludCBsb29wX2NoZWNrX2JhY2tpbmdfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSlcbkBAIC05NDAsNiAmIzQzOzk1MiwxOSBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGxvb3BfZGVmYXVsdF9ibG9ja3NpemUoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbiBcdHJldHVybiBTRUNUT1JfU0laRTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGxvb3Bfc2V0X2RtYV9saW1pdChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqIERpcmVjdCBJL08gZm9yd2FyZHMgdGhlIHVzZXIgcGFnZXMgdG8gdGhlIGJhY2tpbmcgZmlsZSB1bmNoYW5nZWQsIHNvXG4mIzQzO1x0ICogdHJhY2sgdGhlIGJhY2tpbmcmIzM5O3MgRE1BIGFsaWdubWVudCByZXF1aXJlbWVudCBhcyB0aGUgbW9kZSBpcyB0b2dnbGVkLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChsby1cdTAwM2Vsb19mbGFncyBcdTAwMjYgTE9fRkxBR1NfRElSRUNUX0lPKVxuJiM0MztcdFx0bGltLVx1MDAzZWRtYV9hbGlnbm1lbnQgPSBtYXhfdCh1bnNpZ25lZCBpbnQsIGxvLVx1MDAzZWxvX2Rpb19tZW1fYWxpZ24sXG4mIzQzO1x0XHRcdFx0XHQgICBTRUNUT1JfU0laRSAtIDEpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGxpbS1cdTAwM2VkbWFfYWxpZ25tZW50ID0gU0VDVE9SX1NJWkUgLSAxO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGxvb3BfdXBkYXRlX2xpbWl0cyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sXG4gXHRcdHVuc2lnbmVkIGludCBic2l6ZSlcbiB7XG5AQCAtOTYxLDYgJiM0Mzs5ODYsNyBAQCBzdGF0aWMgdm9pZCBsb29wX3VwZGF0ZV9saW1pdHMoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLFxuIFx0bGltLVx1MDAzZWxvZ2ljYWxfYmxvY2tfc2l6ZSA9IGJzaXplO1xuIFx0bGltLVx1MDAzZXBoeXNpY2FsX2Jsb2NrX3NpemUgPSBic2l6ZTtcbiBcdGxpbS1cdTAwM2Vpb19taW4gPSBic2l6ZTtcbiYjNDM7XHRsb29wX3NldF9kbWFfbGltaXQobG8sIGxpbSk7XG4gXHRsaW0tXHUwMDNlZmVhdHVyZXMgXHUwMDI2PSB+KEJMS19GRUFUX1dSSVRFX0NBQ0hFIHwgQkxLX0ZFQVRfUk9UQVRJT05BTCk7XG4gXHRpZiAoZmlsZS1cdTAwM2VmX29wLVx1MDAzZWZzeW5jIFx1MDAyNlx1MDAyNiAhKGxvLVx1MDAzZWxvX2ZsYWdzIFx1MDAyNiBMT19GTEFHU19SRUFEX09OTFkpKVxuIFx0XHRsaW0tXHUwMDNlZmVhdHVyZXMgfD0gQkxLX0ZFQVRfV1JJVEVfQ0FDSEU7XG5AQCAtMTQxNiw2ICYjNDM7MTQ0Miw3IEBAIHN0YXRpYyBpbnQgbG9vcF9zZXRfZGlvKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHVuc2lnbmVkIGxvbmcgYXJnKVxuIHtcbiBcdGJvb2wgdXNlX2RpbyA9ICEhYXJnO1xuIFx0dW5zaWduZWQgaW50IG1lbWZsYWdzO1xuJiM0MztcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltO1xuIFxuIFx0aWYgKGxvLVx1MDAzZWxvX3N0YXRlICE9IExvX2JvdW5kKVxuIFx0XHRyZXR1cm4gLUVOWElPO1xuQEAgLTE0MzQsNiAmIzQzOzE0NjEsOSBAQCBzdGF0aWMgaW50IGxvb3Bfc2V0X2RpbyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcdFx0bG8tXHUwMDNlbG9fZmxhZ3MgfD0gTE9fRkxBR1NfRElSRUNUX0lPO1xuIFx0ZWxzZVxuIFx0XHRsby1cdTAwM2Vsb19mbGFncyBcdTAwMjY9IH5MT19GTEFHU19ESVJFQ1RfSU87XG4mIzQzO1x0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby1cdTAwM2Vsb19xdWV1ZSk7XG4mIzQzO1x0bG9vcF9zZXRfZG1hX2xpbWl0KGxvLCBcdTAwMjZsaW0pO1xuJiM0MztcdHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKGxvLVx1MDAzZWxvX3F1ZXVlLCBcdTAwMjZsaW0pO1xuIFx0YmxrX21xX3VuZnJlZXplX3F1ZXVlKGxvLVx1MDAzZWxvX3F1ZXVlLCBtZW1mbGFncyk7XG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96bG9vcC5jIGIvZHJpdmVycy9ibG9jay96bG9vcC5jXG5pbmRleCA1NWVlYjZhYWMwZWEzYi4uZjk3YTIwY2ZkYjdjZTYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3psb29wLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svemxvb3AuY1xuQEAgLTE0NCw2ICYjNDM7MTQ0LDcgQEAgc3RydWN0IHpsb29wX2RldmljZSB7XG4gXHR1bnNpZ25lZCBpbnRcdFx0bnJfY29udl96b25lcztcbiBcdHVuc2lnbmVkIGludFx0XHRtYXhfb3Blbl96b25lcztcbiBcdHVuc2lnbmVkIGludFx0XHRibG9ja19zaXplO1xuJiM0MztcdHVuc2lnbmVkIGludFx0XHRkaW9fbWVtX2FsaWduO1xuIFxuIFx0c3BpbmxvY2tfdFx0XHRvcGVuX3pvbmVzX2xvY2s7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRvcGVuX3pvbmVzX2xydV9saXN0O1xuQEAgLTEwMzcsMjAgJiM0MzsxMDM4LDMwIEBAIHN0YXRpYyBpbnQgemxvb3BfZ2V0X2Jsb2NrX3NpemUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLFxuIFx0c3RydWN0IGtzdGF0IHN0O1xuIFxuIFx0Lypcbi1cdCAqIElmIHRoZSBGUyBibG9jayBzaXplIGlzIGxvd2VyIHRoYW4gb3IgZXF1YWwgdG8gNEssIHVzZSB0aGF0IGFzIHRoZVxuLVx0ICogZGV2aWNlIGJsb2NrIHNpemUuIE90aGVyd2lzZSwgZmFsbGJhY2sgdG8gdGhlIEZTIGRpcmVjdCBJTyBhbGlnbm1lbnRcbi1cdCAqIGNvbnN0cmFpbnQgaWYgdGhhdCBpcyBwcm92aWRlZCwgYW5kIHRvIHRoZSBGUyB1bmRlcmx5aW5nIGRldmljZVxuLVx0ICogcGh5c2ljYWwgYmxvY2sgc2l6ZSBpZiB0aGUgZGlyZWN0IElPIGFsaWdubWVudCBpcyB1bmtub3duLlxuJiM0MztcdCAqIFVzZSB0aGUgZGlvIGFsaWdubWVudCBvZiB0aGUgZmlsZSBzeXN0ZW0gaWYgcHJvdmlkZWQuICBUaGUgaW5jb21pbmdcbiYjNDM7XHQgKiByZXF1ZXN0JiMzOTtzIGJpb192ZWMgaXMgZm9yd2FyZGVkIHRvIHRoZSBiYWNraW5nIGZpbGUgdW5jaGFuZ2VkLCBzbyBpdHNcbiYjNDM7XHQgKiByZXF1aXJlZCBtZW1vcnkgYWxpZ25tZW50IGJlY29tZXMgdGhlIGRldmljZSYjMzk7cyBkbWFfYWxpZ25tZW50IHdoZW5cbiYjNDM7XHQgKiB1c2VkIGZvciBkaXJlY3QtaW8uXG4gXHQgKi9cbi1cdGlmIChmaWxlX2lub2RlKHpvbmUtXHUwMDNlZmlsZSktXHUwMDNlaV9zYi1cdTAwM2VzX2Jsb2Nrc2l6ZSBcdTAwM2M9IFNaXzRLKVxuLVx0XHR6bG8tXHUwMDNlYmxvY2tfc2l6ZSA9IGZpbGVfaW5vZGUoem9uZS1cdTAwM2VmaWxlKS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplO1xuLVx0ZWxzZSBpZiAoIXZmc19nZXRhdHRyKFx1MDAyNnpvbmUtXHUwMDNlZmlsZS1cdTAwM2VmX3BhdGgsIFx1MDAyNnN0LCBTVEFUWF9ESU9BTElHTiwgMCkgXHUwMDI2XHUwMDI2XG4tXHRcdCAoc3QucmVzdWx0X21hc2sgXHUwMDI2IFNUQVRYX0RJT0FMSUdOKSlcbiYjNDM7XHRpZiAoIXZmc19nZXRhdHRyKFx1MDAyNnpvbmUtXHUwMDNlZmlsZS1cdTAwM2VmX3BhdGgsIFx1MDAyNnN0LCBTVEFUWF9ESU9BTElHTiwgMCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIChzdC5yZXN1bHRfbWFzayBcdTAwMjYgU1RBVFhfRElPQUxJR04pKSB7XG4gXHRcdHpsby1cdTAwM2VibG9ja19zaXplID0gc3QuZGlvX29mZnNldF9hbGlnbjtcbi1cdGVsc2UgaWYgKHNiX2JkZXYpXG4mIzQzO1x0XHR6bG8tXHUwMDNlZGlvX21lbV9hbGlnbiA9IHN0LmRpb19tZW1fYWxpZ24gLSAxO1xuJiM0MztcdH0gZWxzZSBpZiAoc2JfYmRldikge1xuIFx0XHR6bG8tXHUwMDNlYmxvY2tfc2l6ZSA9IGJkZXZfcGh5c2ljYWxfYmxvY2tfc2l6ZShzYl9iZGV2KTtcbi1cdGVsc2VcbiYjNDM7XHRcdHpsby1cdTAwM2VkaW9fbWVtX2FsaWduID0gYmRldl9kbWFfYWxpZ25tZW50KHNiX2JkZXYpO1xuJiM0MztcdH0gZWxzZSB7XG4gXHRcdHpsby1cdTAwM2VibG9ja19zaXplID0gU0VDVE9SX1NJWkU7XG4mIzQzO1x0XHR6bG8tXHUwMDNlZGlvX21lbV9hbGlnbiA9IFNFQ1RPUl9TSVpFIC0gMTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUHJlZmVyIHRoZSBGUyBibG9jayBzaXplIGZvciB0aGUgZGV2aWNlIGJsb2NrIHNpemUgd2hlbiBpdCBpcyBub1xuJiM0MztcdCAqIGxhcmdlciB0aGFuIDRLOyBvdGhlcndpc2Uga2VlcCB0aGUgZGlyZWN0IEkvTyAvIHBoeXNpY2FsIGJsb2NrIHNpemVcbiYjNDM7XHQgKiBzZWxlY3RlZCBhYm92ZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoZmlsZV9pbm9kZSh6b25lLVx1MDAzZWZpbGUpLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemUgXHUwMDNjPSBTWl80SylcbiYjNDM7XHRcdHpsby1cdTAwM2VibG9ja19zaXplID0gZmlsZV9pbm9kZSh6b25lLVx1MDAzZWZpbGUpLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemU7XG4gXG4gXHRpZiAoemxvLVx1MDAzZXpvbmVfY2FwYWNpdHkgXHUwMDI2ICgoemxvLVx1MDAzZWJsb2NrX3NpemUgXHUwMDNlXHUwMDNlIFNFQ1RPUl9TSElGVCkgLSAxKSkge1xuIFx0XHRwcl9lcnIoXCYjMzQ7Wm9uZSBjYXBhY2l0eSBpcyBub3QgYWxpZ25lZCB0byBibG9jayBzaXplICV1XFxuXCYjMzQ7LFxuQEAgLTEyNzksNiAmIzQzOzEyOTAsMTAgQEAgc3RhdGljIGludCB6bG9vcF9jdGxfYWRkKHN0cnVjdCB6bG9vcF9vcHRpb25zICpvcHRzKVxuIFxuIFx0bGltLnBoeXNpY2FsX2Jsb2NrX3NpemUgPSB6bG8tXHUwMDNlYmxvY2tfc2l6ZTtcbiBcdGxpbS5sb2dpY2FsX2Jsb2NrX3NpemUgPSB6bG8tXHUwMDNlYmxvY2tfc2l6ZTtcbiYjNDM7XHQvKiBEaXJlY3QgSS9PIGZvcndhcmRzIHRoZSByZXF1ZXN0IHBhZ2VzIHRvIHRoZSBiYWNraW5nIGZpbGVzIGFzLWlzLiAqL1xuJiM0MztcdGlmICghb3B0cy1cdTAwM2VidWZmZXJlZF9pbylcbiYjNDM7XHRcdGxpbS5kbWFfYWxpZ25tZW50ID0gbWF4X3QodW5zaWduZWQgaW50LCB6bG8tXHUwMDNlZGlvX21lbV9hbGlnbixcbiYjNDM7XHRcdFx0XHRcdCAgU0VDVE9SX1NJWkUgLSAxKTtcbiBcdGlmICh6bG8tXHUwMDNlem9uZV9hcHBlbmQpXG4gXHRcdGxpbS5tYXhfaHdfem9uZV9hcHBlbmRfc2VjdG9ycyA9IGxpbS5tYXhfaHdfc2VjdG9ycztcbiBcdGxpbS5tYXhfb3Blbl96b25lcyA9IHpsby1cdTAwM2VtYXhfb3Blbl96b25lcztcbmRpZmYgLS1naXQgYS9mcy9pb21hcC9kaXJlY3QtaW8uYyBiL2ZzL2lvbWFwL2RpcmVjdC1pby5jXG5pbmRleCBiNDg1ZTNiMTkxZGFmYS4uZmY0NThhYTEyYWUyOTggMTAwNjQ0XG4tLS0gYS9mcy9pb21hcC9kaXJlY3QtaW8uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvaW9tYXAvZGlyZWN0LWlvLmNcbkBAIC0zNTgsNiAmIzQzOzM1OCw3IEBAIHN0YXRpYyBzc2l6ZV90IGlvbWFwX2Rpb19iaW9faXRlcl9vbmUoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsXG4gXHRcdFx0XHRpb21hcF9tYXhfYmlvX3NpemUoXHUwMDI2aXRlci1cdTAwM2Vpb21hcCksIGFsaWdubWVudCk7XG4gXHRlbHNlXG4gXHRcdHJldCA9IGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoYmlvLCBkaW8tXHUwMDNlc3VibWl0Lml0ZXIsXG4mIzQzO1x0XHRcdFx0XHQgICAgIGJkZXZfZG1hX2FsaWdubWVudChiaW8tXHUwMDNlYmlfYmRldiksXG4gXHRcdFx0XHRcdCAgICAgYWxpZ25tZW50IC0gMSk7XG4gXHRpZiAodW5saWtlbHkocmV0KSlcbiBcdFx0Z290byBvdXRfcHV0X2JpbztcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jpby5oIGIvaW5jbHVkZS9saW51eC9iaW8uaFxuaW5kZXggOGYzM2Y3MTdiMTRmNWIuLmNlMzRlYTQ5ZWYzNTgyIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9iaW8uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9iaW8uaFxuQEAgLTQ3Nyw3ICYjNDM7NDc3LDcgQEAgaW50IGJkZXZfcndfdmlydChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBzZWN0b3IsIHZvaWQgKmRhdGEsXG4gXHRcdHNpemVfdCBsZW4sIGVudW0gcmVxX29wIG9wKTtcbiBcbiBpbnQgYmlvX2lvdl9pdGVyX2dldF9wYWdlcyhzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbi1cdFx0dW5zaWduZWQgbGVuX2FsaWduX21hc2spO1xuJiM0MztcdFx0dW5zaWduZWQgbWVtX2FsaWduX21hc2ssIHVuc2lnbmVkIGxlbl9hbGlnbl9tYXNrKTtcbiBcbiB2b2lkIGJpb19pb3ZfYnZlY19zZXQoc3RydWN0IGJpbyAqYmlvLCBjb25zdCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpO1xuIHZvaWQgX19iaW9fcmVsZWFzZV9wYWdlcyhzdHJ1Y3QgYmlvICpiaW8sIGJvb2wgbWFya19kaXJ0eSk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91aW8uaCBiL2luY2x1ZGUvbGludXgvdWlvLmhcbmluZGV4IGE5YmM1YjMwNjdlMzIwLi5mZTJlOTg1ZDc0ZDI0YiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvdWlvLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvdWlvLmhcbkBAIC0zODksOSAmIzQzOzM4OSwxNyBAQCBzc2l6ZV90IGlvdl9pdGVyX2V4dHJhY3RfcGFnZXMoc3RydWN0IGlvdl9pdGVyICppLCBzdHJ1Y3QgcGFnZSAqKipwYWdlcyxcbiBcdFx0XHQgICAgICAgc2l6ZV90IG1heHNpemUsIHVuc2lnbmVkIGludCBtYXhwYWdlcyxcbiBcdFx0XHQgICAgICAgaW92X2l0ZXJfZXh0cmFjdGlvbl90IGV4dHJhY3Rpb25fZmxhZ3MsXG4gXHRcdFx0ICAgICAgIHNpemVfdCAqb2Zmc2V0MCk7XG4mIzQzOy8qXG4mIzQzOyAqIEJsb2NrLWxheWVyIGNvbnN1bWVycyAoZS5nLiBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKCkpIHJlcXVpcmUgdGhhdCB0aGVcbiYjNDM7ICogc2VnbWVudHMgb2YgYW4gSVRFUl9CVkVDIGl0ZXJhdG9yIGFyZSBhbHJlYWR5IGFsaWduZWQgdG8gdGhlIHRhcmdldCBkZXZpY2UmIzM5O3NcbiYjNDM7ICogRE1BIGFsaWdubWVudCwgYW5kIGZvcndhcmQgdGhlbSBhcy1pcy4gIEluLWtlcm5lbCB1c2VycyB0aGF0IGJ1aWxkIHRoZWlyIG93blxuJiM0MzsgKiBidmVjcyBtdXN0IG5vdCBjcmVhdGUgc3ViLWFsaWduZWQgc2VnbWVudHM7IGlvdl9pdGVyX2V4dHJhY3RfYnZlY3MoKSBlbmZvcmNlc1xuJiM0MzsgKiB0aGUgc2FtZSBmb3IgdGhlIHNlZ21lbnRzIGl0IGV4dHJhY3RzIHZpYSBAbWVtX2FsaWduX21hc2suXG4mIzQzOyAqL1xuIHNzaXplX3QgaW92X2l0ZXJfZXh0cmFjdF9idmVjcyhzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsIHN0cnVjdCBiaW9fdmVjICpidixcbiBcdFx0c2l6ZV90IG1heF9zaXplLCB1bnNpZ25lZCBzaG9ydCAqbnJfdmVjcyxcbi1cdFx0dW5zaWduZWQgc2hvcnQgbWF4X3ZlY3MsIGlvdl9pdGVyX2V4dHJhY3Rpb25fdCBleHRyYWN0aW9uX2ZsYWdzKTtcbiYjNDM7XHRcdHVuc2lnbmVkIHNob3J0IG1heF92ZWNzLCB1bnNpZ25lZCBtZW1fYWxpZ25fbWFzayxcbiYjNDM7XHRcdGlvdl9pdGVyX2V4dHJhY3Rpb25fdCBleHRyYWN0aW9uX2ZsYWdzKTtcbiBcbiAvKipcbiAgKiBpb3ZfaXRlcl9leHRyYWN0X3dpbGxfcGluIC0gSW5kaWNhdGUgaG93IHBhZ2VzIGZyb20gdGhlIGl0ZXJhdG9yIHdpbGwgYmUgcmV0YWluZWRcbmRpZmYgLS1naXQgYS9saWIvaW92X2l0ZXIuYyBiL2xpYi9pb3ZfaXRlci5jXG5pbmRleCAyNzM5MTliMTYxNjE3Ni4uYzM0MzA3NTk1MWRlZDAgMTAwNjQ0XG4tLS0gYS9saWIvaW92X2l0ZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbGliL2lvdl9pdGVyLmNcbkBAIC0xODg2LDYgJiM0MzsxODg2LDggQEAgc3RhdGljIHVuc2lnbmVkIGludCBnZXRfY29udGlnX2ZvbGlvX2xlbihzdHJ1Y3QgcGFnZSAqKnBhZ2VzLFxuICAqIEBtYXhfc2l6ZTpcdG1heGltdW0gc2l6ZSB0byBleHRyYWN0IGZyb20gQGl0ZXJcbiAgKiBAbnJfdmVjczpcdG51bWJlciBvZiB2ZWN0b3JzIGluIEBidiAob24gaW4gYW5kIG91dHB1dClcbiAgKiBAbWF4X3ZlY3M6XHRtYXhpbXVtIHZlY3RvcnMgaW4gQGJ2LCBpbmNsdWRpbmcgdGhvc2UgZmlsbGVkIGJlZm9yZSBjYWxsaW5nXG4mIzQzOyAqIEBtZW1fYWxpZ25fbWFzazpcdHJlamVjdCB3aXRoIC1FSU5WQUwgaWYgdGhlIHNvdXJjZSBhZGRyZXNzIG9yXG4mIzQzOyAqXHRcdGxlbmd0aCBpcyBub3QgYWxpZ25lZCB0byB0aGlzIG1hc2tcbiAgKiBAZXh0cmFjdGlvbl9mbGFnczogZmxhZ3MgdG8gcXVhbGlmeSByZXF1ZXN0XG4gICpcbiAgKiBMaWtlIGlvdl9pdGVyX2V4dHJhY3RfcGFnZXMoKSwgYnV0IHJldHVybnMgcGh5c2ljYWxseSBjb250aWd1b3VzIHJhbmdlc1xuQEAgLTE4OTcsMTQgJiM0MzsxODk5LDE5IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2NvbnRpZ19mb2xpb19sZW4oc3RydWN0IHBhZ2UgKipwYWdlcyxcbiAgKi9cbiBzc2l6ZV90IGlvdl9pdGVyX2V4dHJhY3RfYnZlY3Moc3RydWN0IGlvdl9pdGVyICppdGVyLCBzdHJ1Y3QgYmlvX3ZlYyAqYnYsXG4gXHRcdHNpemVfdCBtYXhfc2l6ZSwgdW5zaWduZWQgc2hvcnQgKm5yX3ZlY3MsXG4tXHRcdHVuc2lnbmVkIHNob3J0IG1heF92ZWNzLCBpb3ZfaXRlcl9leHRyYWN0aW9uX3QgZXh0cmFjdGlvbl9mbGFncylcbiYjNDM7XHRcdHVuc2lnbmVkIHNob3J0IG1heF92ZWNzLCB1bnNpZ25lZCBtZW1fYWxpZ25fbWFzayxcbiYjNDM7XHRcdGlvdl9pdGVyX2V4dHJhY3Rpb25fdCBleHRyYWN0aW9uX2ZsYWdzKVxuIHtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHN0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpaXRlcl9pb3ZfYWRkcihpdGVyKTtcbiBcdHVuc2lnbmVkIHNob3J0IGVudHJpZXNfbGVmdCA9IG1heF92ZWNzIC0gKm5yX3ZlY3M7XG4gXHR1bnNpZ25lZCBzaG9ydCBucl9wYWdlcywgaSA9IDA7XG4gXHRzaXplX3QgbGVmdCwgb2Zmc2V0LCBsZW47XG4gXHRzdHJ1Y3QgcGFnZSAqKnBhZ2VzO1xuIFx0c3NpemVfdCBzaXplO1xuIFxuJiM0MztcdGlmICgoc3RhcnQgfCBpdGVyX2lvdl9sZW4oaXRlcikpIFx1MDAyNiBtZW1fYWxpZ25fbWFzaylcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiBcdC8qXG4gXHQgKiBNb3ZlIHBhZ2UgYXJyYXkgdXAgaW4gdGhlIGFsbG9jYXRlZCBtZW1vcnkgZm9yIHRoZSBiaW8gdmVjcyBhcyBmYXIgYXNcbiBcdCAqIHBvc3NpYmxlIHNvIHRoYXQgd2UgY2FuIHN0YXJ0IGZpbGxpbmcgYmlvdmVjcyBmcm9tIHRoZSBiZWdpbm5pbmdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAxNzo0MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX0xPT1AmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9aT05FRF9MT09QJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmlvX2lvdl9pdGVyX2dldF9wYWdlcyYjMzQ7LAogICAgJiMzNDtpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzJiMzNDssCiAgICAmIzM0O2xvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnQmIzM0OywKICAgICYjMzQ7bG9vcF9zZXRfZG1hX2xpbWl0JiMzNDssCiAgICAmIzM0O3psb29wX2dldF9ibG9ja19zaXplJiMzNDssCiAgICAmIzM0O3psb29wX2N0bF9hZGQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYmxvY2sgbGF5ZXIgZGlyZWN0IEkvTyBsb2dpYyB0byBlbmZvcmNlIG1lbW9yeSBhbGlnbm1lbnQgY2hlY2tzIHZpYSBgYmlvX2lvdl9pdGVyX2dldF9wYWdlc2AgYW5kIGBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzYC4gSXQgYWxzbyB1cGRhdGVzIHRoZSBgbG9vcGAgYW5kIGB6bG9vcGAgZHJpdmVycyB0byBjb3JyZWN0bHkgc2V0IERNQSBsaW1pdHMgYmFzZWQgb24gdGhlIGJhY2tpbmcgZmlsZSYjMzk7cyBkaXJlY3QgSS9PIGFsaWdubWVudC4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSBibG9jayBsYXllciBmdW5jdGlvbmFsaXR5IGFuZCBkcml2ZXIgYmVoYXZpb3IsIG1ha2luZyB0aGVtIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZGM1ZTE2ZGQ1NGM4ZDEwNjg3Yzk0ZjUwNTY5MWEwOWQ1N2UxNGYwOApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVuIDI0IDE3OjQyOjIxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYmxvY2svYmlvLmMgYi9ibG9jay9iaW8uYwppbmRleCBmMmE1ZjRkMGE5NjcyYi4uZmFhZDQxYTcyYWM3N2YgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jpby5jCiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2Jpby5jCkBAIC0xMjIwLDEwICYjNDM7MTIyMCw0NSBAQCBzdGF0aWMgaW50IGJpb19pb3ZfaXRlcl9hbGlnbl9kb3duKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLAogCXJldHVybiAwOwogfQogCiYjNDM7I2lmZGVmIENPTkZJR19ERUJVR19LRVJORUwKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgYmlvX2lvdl9idmVjX2FsaWduZWQoY29uc3Qgc3RydWN0IGJpbyAqYmlvLAomIzQzOwkJCQkJdW5zaWduZWQgbWVtX2FsaWduX21hc2spCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnZlY19pdGVyIGl0ZXI7CiYjNDM7CXN0cnVjdCBiaW9fdmVjIGJ2OwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBDb3JyZWN0IGNhbGxlcnMgbmV2ZXIgYnJlYWsgdGhlIGFsaWdubWVudCByZXF1aXJlbWVudHMsIHNvIHRoaXMKJiM0MzsJICogZXhoYXVzdGl2ZSBjaGVjayBpcyBvbmx5IHBhaWQgZm9yIGluIGRlYnVnIGJ1aWxkcy4KJiM0MzsJICovCiYjNDM7CWZvcl9lYWNoX21wX2J2ZWMoYnYsIGJpby0mZ3Q7YmlfaW9fdmVjLCBpdGVyLCBiaW8tJmd0O2JpX2l0ZXIpCiYjNDM7CQlpZiAoKGJ2LmJ2X29mZnNldCB8IGJ2LmJ2X2xlbikgJmFtcDsgbWVtX2FsaWduX21hc2spCiYjNDM7CQkJcmV0dXJuIGZhbHNlOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7I2Vsc2UKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgYmlvX2lvdl9idmVjX2FsaWduZWQoY29uc3Qgc3RydWN0IGJpbyAqYmlvLAomIzQzOwkJCQkJdW5zaWduZWQgbWVtX2FsaWduX21hc2spCiYjNDM7ewomIzQzOwkvKgomIzQzOwkgKiBXZSBmb3J3YXJkIHRoZSBiaW9fdmVjIGFzLWlzLCBzbyBJVEVSX0JWRUMgY2FsbGVycyBtdXN0IHByb3ZpZGUKJiM0MzsJICogc2VnbWVudHMgYWxyZWFkeSBhbGlnbmVkIHRvIHRoZSBkZXZpY2UmIzM5O3MgRE1BIGFsaWdubWVudC4gVGhlIG9ubHkKJiM0MzsJICogdW5jaGVja2VkIHVzZXItY29udHJvbGxhYmxlIG9mZnNldCB0aGF0IHJlYWNoZXMgaGVyZSBpcyBhbiBpb191cmluZwomIzQzOwkgKiByZWdpc3RlcmVkIGJ1ZmZlciB3aGVyZSBqdXN0IHRoZSBmaXJzdCBzZWdtZW50IGNhbiBiZSB1bmFsaWduZWQKJiM0MzsJICogKHRoZSByZXN0IGlzIHZpcnR1YWxseSBjb250aWd1b3VzKSwgc28gY2hlY2tpbmcgb25seSB0aGF0IG9uZSBpcwomIzQzOwkgKiBzdWZmaWNpZW50IHRvIGtub3cgaWYgdGhlIGVudGlyZSB2ZWN0b3IgaXMgdmFsaWQuCiYjNDM7CSAqLwomIzQzOwlyZXR1cm4gIShtcF9idmVjX2l0ZXJfb2Zmc2V0KGJpby0mZ3Q7YmlfaW9fdmVjLCBiaW8tJmd0O2JpX2l0ZXIpICZhbXA7CiYjNDM7CQkJCQkJCW1lbV9hbGlnbl9tYXNrKTsKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiAvKioKICAqIGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMgLSBhZGQgdXNlciBvciBrZXJuZWwgcGFnZXMgdG8gYSBiaW8KICAqIEBiaW86IGJpbyB0byBhZGQgcGFnZXMgdG8KICAqIEBpdGVyOiBpb3YgaXRlcmF0b3IgZGVzY3JpYmluZyB0aGUgcmVnaW9uIHRvIGJlIGFkZGVkCiYjNDM7ICogQG1lbV9hbGlnbl9tYXNrOiB0aGUgbWFzayB0aGUgc291cmNlIGFkZHJlc3MgYW5kIGxlbmd0aCBtdXN0IGJlIGFsaWduZWQgdG8sCiYjNDM7ICoJMCBmb3Igbm8gcmVxdWlyZW1lbnQKICAqIEBsZW5fYWxpZ25fbWFzazogdGhlIG1hc2sgdG8gYWxpZ24gdGhlIHRvdGFsIHNpemUgdG8sIDAgZm9yIGFueSBsZW5ndGgKICAqCiAgKiBUaGlzIHRha2VzIGVpdGhlciBhbiBpdGVyYXRvciBwb2ludGluZyB0byB1c2VyIG1lbW9yeSwgb3Igb25lIHBvaW50aW5nIHRvCkBAIC0xMjQyLDcgJiM0MzsxMjc3LDcgQEAgc3RhdGljIGludCBiaW9faW92X2l0ZXJfYWxpZ25fZG93bihzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlciwKICAqIGlzIHJldHVybmVkIG9ubHkgaWYgMCBwYWdlcyBjb3VsZCBiZSBwaW5uZWQuCiAgKi8KIGludCBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLAotCQkJICAgdW5zaWduZWQgbGVuX2FsaWduX21hc2spCiYjNDM7CQkJICAgdW5zaWduZWQgbWVtX2FsaWduX21hc2ssIHVuc2lnbmVkIGxlbl9hbGlnbl9tYXNrKQogewogCWlvdl9pdGVyX2V4dHJhY3Rpb25fdCBmbGFncyA9IDA7CiAKQEAgLTEyNTEsNiAmIzQzOzEyODYsMTAgQEAgaW50IGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsCiAKIAlpZiAoaW92X2l0ZXJfaXNfYnZlYyhpdGVyKSkgewogCQliaW9faW92X2J2ZWNfc2V0KGJpbywgaXRlcik7CiYjNDM7CiYjNDM7CQlpZiAoIWJpb19pb3ZfYnZlY19hbGlnbmVkKGJpbywgbWVtX2FsaWduX21hc2spKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwogCQlpb3ZfaXRlcl9hZHZhbmNlKGl0ZXIsIGJpby0mZ3Q7YmlfaXRlci5iaV9zaXplKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMTI2NSw4ICYjNDM7MTMwNCwxOSBAQCBpbnQgYmlvX2lvdl9pdGVyX2dldF9wYWdlcyhzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlciwKIAogCQlyZXQgPSBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzKGl0ZXIsIGJpby0mZ3Q7YmlfaW9fdmVjLAogCQkJCUJJT19NQVhfU0laRSAtIGJpby0mZ3Q7YmlfaXRlci5iaV9zaXplLAotCQkJCSZhbXA7YmlvLSZndDtiaV92Y250LCBiaW8tJmd0O2JpX21heF92ZWNzLCBmbGFncyk7CiYjNDM7CQkJCSZhbXA7YmlvLSZndDtiaV92Y250LCBiaW8tJmd0O2JpX21heF92ZWNzLAomIzQzOwkJCQltZW1fYWxpZ25fbWFzaywgZmxhZ3MpOwogCQlpZiAocmV0ICZsdDs9IDApIHsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIEEgbWlzYWxpZ25lZCB2ZWN0b3IgZmFpbHMgdGhlIHdob2xlIEkvTy4gIFJlbGVhc2UgYW55CiYjNDM7CQkJICogcGFnZXMgcGlubmVkIGJ5IGVhcmxpZXIgaXRlcmF0aW9ucyBiZWZvcmUgcmV0dXJuaW5nCiYjNDM7CQkJICogc2luY2UgdGhpcyBiaW8gd29uJiMzOTt0IGJlIHN1Ym1pdHRlZCB0byByZWxlYXNlIHRoZW0uCiYjNDM7CQkJICovCiYjNDM7CQkJaWYgKHJldCA9PSAtRUlOVkFMKSB7CiYjNDM7CQkJCWJpb19yZWxlYXNlX3BhZ2VzKGJpbywgZmFsc2UpOwomIzQzOwkJCQliaW9fY2xlYXJfZmxhZyhiaW8sIEJJT19QQUdFX1BJTk5FRCk7CiYjNDM7CQkJCWJpby0mZ3Q7YmlfdmNudCA9IDA7CiYjNDM7CQkJfQogCQkJaWYgKCFiaW8tJmd0O2JpX3ZjbnQpCiAJCQkJcmV0dXJuIHJldDsKIAkJCWJyZWFrOwpAQCAtMTM3Nyw3ICYjNDM7MTQyNyw3IEBAIHN0YXRpYyBpbnQgYmlvX2lvdl9pdGVyX2JvdW5jZV9yZWFkKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLAogCQlzc2l6ZV90IHJldDsKIAogCQlyZXQgPSBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzKGl0ZXIsIGJpby0mZ3Q7YmlfaW9fdmVjICYjNDM7IDEsIGxlbiwKLQkJCQkmYW1wO2Jpby0mZ3Q7YmlfdmNudCwgYmlvLSZndDtiaV9tYXhfdmVjcyAtIDEsIDApOwomIzQzOwkJCQkmYW1wO2Jpby0mZ3Q7YmlfdmNudCwgYmlvLSZndDtiaV9tYXhfdmVjcyAtIDEsIDAsIDApOwogCQlpZiAocmV0ICZsdDs9IDApIHsKIAkJCWlmICghYmlvLSZndDtiaV92Y250KSB7CiAJCQkJZm9saW9fcHV0KGZvbGlvKTsKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1tYXAuYyBiL2Jsb2NrL2Jsay1tYXAuYwppbmRleCA3Njg1NDlmMTlmOTdlYy4uYzk1MzVlZmUxYTkxM2MgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1tYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9ibGstbWFwLmMKQEAgLTI3NCw3ICYjNDM7Mjc0LDcgQEAgc3RhdGljIGludCBiaW9fbWFwX3VzZXJfaW92KHN0cnVjdCByZXF1ZXN0ICpycSwgc3RydWN0IGlvdl9pdGVyICppdGVyLAogCSAqIE5vIGFsaWdubWVudCByZXF1aXJlbWVudHMgb24gb3VyIHBhcnQgdG8gc3VwcG9ydCBhcmJpdHJhcnkKIAkgKiBwYXNzdGhyb3VnaCBjb21tYW5kcy4KIAkgKi8KLQlyZXQgPSBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKGJpbywgaXRlciwgMCk7CiYjNDM7CXJldCA9IGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoYmlvLCBpdGVyLCAwLCAwKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dF9wdXQ7CiAJcmV0ID0gYmxrX3JxX2FwcGVuZF9iaW8ocnEsIGJpbyk7CmRpZmYgLS1naXQgYS9ibG9jay9mb3BzLmMgYi9ibG9jay9mb3BzLmMKaW5kZXggMTU3ODNhNjE4MGRlYzEuLmU1MTlkN2Y0M2IzMTA2IDEwMDY0NAotLS0gYS9ibG9jay9mb3BzLmMKJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svZm9wcy5jCkBAIC00Niw3ICYjNDM7NDYsNyBAQCBzdGF0aWMgYm9vbCBibGtkZXZfZGlvX2ludmFsaWQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IGtpb2NiICppb2NiLAogc3RhdGljIGlubGluZSBpbnQgYmxrZGV2X2lvdl9pdGVyX2dldF9wYWdlcyhzdHJ1Y3QgYmlvICpiaW8sCiAJCXN0cnVjdCBpb3ZfaXRlciAqaXRlciwgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldikKIHsKLQlyZXR1cm4gYmlvX2lvdl9pdGVyX2dldF9wYWdlcyhiaW8sIGl0ZXIsCiYjNDM7CXJldHVybiBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKGJpbywgaXRlciwgYmRldl9kbWFfYWxpZ25tZW50KGJkZXYpLAogCQkJYmRldl9sb2dpY2FsX2Jsb2NrX3NpemUoYmRldikgLSAxKTsKIH0KIApAQCAtMjE4LDcgJiM0MzsyMTgsNyBAQCBzdGF0aWMgc3NpemVfdCBfX2Jsa2Rldl9kaXJlY3RfSU8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsCiAKIAkJcmV0ID0gYmxrZGV2X2lvdl9pdGVyX2dldF9wYWdlcyhiaW8sIGl0ZXIsIGJkZXYpOwogCQlpZiAodW5saWtlbHkocmV0KSkgewotCQkJYmlvX2VuZGlvX3N0YXR1cyhiaW8sIEJMS19TVFNfSU9FUlIpOwomIzQzOwkJCWJpb19lbmRpb19zdGF0dXMoYmlvLCBlcnJub190b19ibGtfc3RhdHVzKHJldCkpOwogCQkJYnJlYWs7CiAJCX0KIAkJaWYgKGlvY2ItJmd0O2tpX2ZsYWdzICZhbXA7IElPQ0JfTk9XQUlUKSB7CkBAIC0yMzgsOCAmIzQzOzIzOCwxMCBAQCBzdGF0aWMgc3NpemVfdCBfX2Jsa2Rldl9kaXJlY3RfSU8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsCiAJCX0KIAkJaWYgKGlvY2ItJmd0O2tpX2ZsYWdzICZhbXA7IElPQ0JfSEFTX01FVEFEQVRBKSB7CiAJCQlyZXQgPSBiaW9faW50ZWdyaXR5X21hcF9pdGVyKGJpbywgaW9jYi0mZ3Q7cHJpdmF0ZSk7Ci0JCQlpZiAodW5saWtlbHkocmV0KSkKLQkJCQlnb3RvIGZhaWw7CiYjNDM7CQkJaWYgKHVubGlrZWx5KHJldCkpIHsKJiM0MzsJCQkJYmlvX2VuZGlvX3N0YXR1cyhiaW8sIGVycm5vX3RvX2Jsa19zdGF0dXMocmV0KSk7CiYjNDM7CQkJCWJyZWFrOwomIzQzOwkJCX0KIAkJfQogCiAJCWlmIChpc19yZWFkKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jCmluZGV4IDMxMGRlMDQ2M2JlYjE0Li41ZmU2MWQ1NDJmOGI3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9sb29wLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay9sb29wLmMKQEAgLTU0LDYgJiM0Mzs1NCw3IEBAIHN0cnVjdCBsb29wX2RldmljZSB7CiAKIAlzdHJ1Y3QgZmlsZQkqbG9fYmFja2luZ19maWxlOwogCXVuc2lnbmVkIGludAlsb19taW5fZGlvX3NpemU7CiYjNDM7CXVuc2lnbmVkIGludAlsb19kaW9fbWVtX2FsaWduOwogCXN0cnVjdCBibG9ja19kZXZpY2UgKmxvX2RldmljZTsKIAogCWdmcF90CQlvbGRfZ2ZwX21hc2s7CkBAIC00NDcsMjYgJiM0Mzs0NDgsMzcgQEAgc3RhdGljIHZvaWQgbG9vcF9yZXJlYWRfcGFydGl0aW9ucyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKQogCQkJX19mdW5jX18sIGxvLSZndDtsb19udW1iZXIsIGxvLSZndDtsb19maWxlX25hbWUsIHJjKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBsb29wX3F1ZXJ5X21pbl9kaW9fc2l6ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKQomIzQzO3N0YXRpYyB2b2lkIGxvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnQoc3RydWN0IGxvb3BfZGV2aWNlICpsbykKIHsKIAlzdHJ1Y3QgZmlsZSAqZmlsZSA9IGxvLSZndDtsb19iYWNraW5nX2ZpbGU7CiAJc3RydWN0IGJsb2NrX2RldmljZSAqc2JfYmRldiA9IGZpbGUtJmd0O2ZfbWFwcGluZy0mZ3Q7aG9zdC0mZ3Q7aV9zYi0mZ3Q7c19iZGV2OwogCXN0cnVjdCBrc3RhdCBzdDsKIAogCS8qCi0JICogVXNlIHRoZSBtaW5pbWFsIGRpbyBhbGlnbm1lbnQgb2YgdGhlIGZpbGUgc3lzdGVtIGlmIHByb3ZpZGVkLgomIzQzOwkgKiBVc2UgdGhlIGRpbyBhbGlnbm1lbnQgb2YgdGhlIGZpbGUgc3lzdGVtIGlmIHByb3ZpZGVkLiAgVGhlIGluY29tb2luZwomIzQzOwkgKiByZXF1ZXN0JiMzOTtzIGJpb192ZWMgaXMgZm9yd2FyZGVkIHRvIHRoZSBiYWNraW5nIGZpbGUgdW5jaGFuZ2VkLCBzbyBpdHMKJiM0MzsJICogcmVxdWlyZWQgbWVtb3J5IGFsaWdubWVudCBiZWNvbWVzIHRoZSBkZXZpY2UmIzM5O3MgZG1hX2FsaWdubWVudCB3aGVuCiYjNDM7CSAqIHVzZWQgZm9yIGRpcmVjdC1pby4KIAkgKi8KIAlpZiAoIXZmc19nZXRhdHRyKCZhbXA7ZmlsZS0mZ3Q7Zl9wYXRoLCAmYW1wO3N0LCBTVEFUWF9ESU9BTElHTiwgMCkgJmFtcDsmYW1wOwotCSAgICAoc3QucmVzdWx0X21hc2sgJmFtcDsgU1RBVFhfRElPQUxJR04pKQotCQlyZXR1cm4gc3QuZGlvX29mZnNldF9hbGlnbjsKJiM0MzsJICAgIChzdC5yZXN1bHRfbWFzayAmYW1wOyBTVEFUWF9ESU9BTElHTikpIHsKJiM0MzsJCWxvLSZndDtsb19taW5fZGlvX3NpemUgPSBzdC5kaW9fb2Zmc2V0X2FsaWduOwomIzQzOwkJbG8tJmd0O2xvX2Rpb19tZW1fYWxpZ24gPSBzdC5kaW9fbWVtX2FsaWduIC0gMTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQogCiAJLyoKIAkgKiBJbiBhIHBlcmZlY3Qgd29ybGQgdGhpcyB3b3VsZG4mIzM5O3QgYmUgbmVlZGVkLCBidXQgYXMgb2YgTGludXggNi4xMyBvbmx5CiAJICogYSBoYW5kZnVsIG9mIGZpbGUgc3lzdGVtcyBzdXBwb3J0IHRoZSBTVEFUWF9ESU9BTElHTiBmbGFnLgogCSAqLwotCWlmIChzYl9iZGV2KQotCQlyZXR1cm4gYmRldl9sb2dpY2FsX2Jsb2NrX3NpemUoc2JfYmRldik7Ci0JcmV0dXJuIFNFQ1RPUl9TSVpFOwomIzQzOwlpZiAoc2JfYmRldikgewomIzQzOwkJbG8tJmd0O2xvX21pbl9kaW9fc2l6ZSA9IGJkZXZfbG9naWNhbF9ibG9ja19zaXplKHNiX2JkZXYpOwomIzQzOwkJbG8tJmd0O2xvX2Rpb19tZW1fYWxpZ24gPSBiZGV2X2RtYV9hbGlnbm1lbnQoc2JfYmRldik7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJbG8tJmd0O2xvX21pbl9kaW9fc2l6ZSA9IFNFQ1RPUl9TSVpFOwomIzQzOwlsby0mZ3Q7bG9fZGlvX21lbV9hbGlnbiA9IFNFQ1RPUl9TSVpFIC0gMTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgaXNfbG9vcF9kZXZpY2Uoc3RydWN0IGZpbGUgKmZpbGUpCkBAIC01MDksNyAmIzQzOzUyMSw3IEBAIHN0YXRpYyB2b2lkIGxvb3BfYXNzaWduX2JhY2tpbmdfZmlsZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIAkJCWxvLSZndDtvbGRfZ2ZwX21hc2sgJmFtcDsgfihfX0dGUF9JTyB8IF9fR0ZQX0ZTKSk7CiAJaWYgKGxvLSZndDtsb19iYWNraW5nX2ZpbGUtJmd0O2ZfZmxhZ3MgJmFtcDsgT19ESVJFQ1QpCiAJCWxvLSZndDtsb19mbGFncyB8PSBMT19GTEFHU19ESVJFQ1RfSU87Ci0JbG8tJmd0O2xvX21pbl9kaW9fc2l6ZSA9IGxvb3BfcXVlcnlfbWluX2Rpb19zaXplKGxvKTsKJiM0MzsJbG9vcF91cGRhdGVfZGlvX2FsaWdubWVudChsbyk7CiB9CiAKIHN0YXRpYyBpbnQgbG9vcF9jaGVja19iYWNraW5nX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUpCkBAIC05NDAsNiAmIzQzOzk1MiwxOSBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGxvb3BfZGVmYXVsdF9ibG9ja3NpemUoc3RydWN0IGxvb3BfZGV2aWNlICpsbykKIAlyZXR1cm4gU0VDVE9SX1NJWkU7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBsb29wX3NldF9kbWFfbGltaXQoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogRGlyZWN0IEkvTyBmb3J3YXJkcyB0aGUgdXNlciBwYWdlcyB0byB0aGUgYmFja2luZyBmaWxlIHVuY2hhbmdlZCwgc28KJiM0MzsJICogdHJhY2sgdGhlIGJhY2tpbmcmIzM5O3MgRE1BIGFsaWdubWVudCByZXF1aXJlbWVudCBhcyB0aGUgbW9kZSBpcyB0b2dnbGVkLgomIzQzOwkgKi8KJiM0MzsJaWYgKGxvLSZndDtsb19mbGFncyAmYW1wOyBMT19GTEFHU19ESVJFQ1RfSU8pCiYjNDM7CQlsaW0tJmd0O2RtYV9hbGlnbm1lbnQgPSBtYXhfdCh1bnNpZ25lZCBpbnQsIGxvLSZndDtsb19kaW9fbWVtX2FsaWduLAomIzQzOwkJCQkJICAgU0VDVE9SX1NJWkUgLSAxKTsKJiM0MzsJZWxzZQomIzQzOwkJbGltLSZndDtkbWFfYWxpZ25tZW50ID0gU0VDVE9SX1NJWkUgLSAxOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIGxvb3BfdXBkYXRlX2xpbWl0cyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sCiAJCXVuc2lnbmVkIGludCBic2l6ZSkKIHsKQEAgLTk2MSw2ICYjNDM7OTg2LDcgQEAgc3RhdGljIHZvaWQgbG9vcF91cGRhdGVfbGltaXRzKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSwKIAlsaW0tJmd0O2xvZ2ljYWxfYmxvY2tfc2l6ZSA9IGJzaXplOwogCWxpbS0mZ3Q7cGh5c2ljYWxfYmxvY2tfc2l6ZSA9IGJzaXplOwogCWxpbS0mZ3Q7aW9fbWluID0gYnNpemU7CiYjNDM7CWxvb3Bfc2V0X2RtYV9saW1pdChsbywgbGltKTsKIAlsaW0tJmd0O2ZlYXR1cmVzICZhbXA7PSB+KEJMS19GRUFUX1dSSVRFX0NBQ0hFIHwgQkxLX0ZFQVRfUk9UQVRJT05BTCk7CiAJaWYgKGZpbGUtJmd0O2Zfb3AtJmd0O2ZzeW5jICZhbXA7JmFtcDsgIShsby0mZ3Q7bG9fZmxhZ3MgJmFtcDsgTE9fRkxBR1NfUkVBRF9PTkxZKSkKIAkJbGltLSZndDtmZWF0dXJlcyB8PSBCTEtfRkVBVF9XUklURV9DQUNIRTsKQEAgLTE0MTYsNiAmIzQzOzE0NDIsNyBAQCBzdGF0aWMgaW50IGxvb3Bfc2V0X2RpbyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlib29sIHVzZV9kaW8gPSAhIWFyZzsKIAl1bnNpZ25lZCBpbnQgbWVtZmxhZ3M7CiYjNDM7CXN0cnVjdCBxdWV1ZV9saW1pdHMgbGltOwogCiAJaWYgKGxvLSZndDtsb19zdGF0ZSAhPSBMb19ib3VuZCkKIAkJcmV0dXJuIC1FTlhJTzsKQEAgLTE0MzQsNiAmIzQzOzE0NjEsOSBAQCBzdGF0aWMgaW50IGxvb3Bfc2V0X2RpbyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCB1bnNpZ25lZCBsb25nIGFyZykKIAkJbG8tJmd0O2xvX2ZsYWdzIHw9IExPX0ZMQUdTX0RJUkVDVF9JTzsKIAllbHNlCiAJCWxvLSZndDtsb19mbGFncyAmYW1wOz0gfkxPX0ZMQUdTX0RJUkVDVF9JTzsKJiM0MzsJbGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby0mZ3Q7bG9fcXVldWUpOwomIzQzOwlsb29wX3NldF9kbWFfbGltaXQobG8sICZhbXA7bGltKTsKJiM0MzsJcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUobG8tJmd0O2xvX3F1ZXVlLCAmYW1wO2xpbSk7CiAJYmxrX21xX3VuZnJlZXplX3F1ZXVlKGxvLSZndDtsb19xdWV1ZSwgbWVtZmxhZ3MpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96bG9vcC5jIGIvZHJpdmVycy9ibG9jay96bG9vcC5jCmluZGV4IDU1ZWViNmFhYzBlYTNiLi5mOTdhMjBjZmRiN2NlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay96bG9vcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svemxvb3AuYwpAQCAtMTQ0LDYgJiM0MzsxNDQsNyBAQCBzdHJ1Y3Qgemxvb3BfZGV2aWNlIHsKIAl1bnNpZ25lZCBpbnQJCW5yX2NvbnZfem9uZXM7CiAJdW5zaWduZWQgaW50CQltYXhfb3Blbl96b25lczsKIAl1bnNpZ25lZCBpbnQJCWJsb2NrX3NpemU7CiYjNDM7CXVuc2lnbmVkIGludAkJZGlvX21lbV9hbGlnbjsKIAogCXNwaW5sb2NrX3QJCW9wZW5fem9uZXNfbG9jazsKIAlzdHJ1Y3QgbGlzdF9oZWFkCW9wZW5fem9uZXNfbHJ1X2xpc3Q7CkBAIC0xMDM3LDIwICYjNDM7MTAzOCwzMCBAQCBzdGF0aWMgaW50IHpsb29wX2dldF9ibG9ja19zaXplKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbywKIAlzdHJ1Y3Qga3N0YXQgc3Q7CiAKIAkvKgotCSAqIElmIHRoZSBGUyBibG9jayBzaXplIGlzIGxvd2VyIHRoYW4gb3IgZXF1YWwgdG8gNEssIHVzZSB0aGF0IGFzIHRoZQotCSAqIGRldmljZSBibG9jayBzaXplLiBPdGhlcndpc2UsIGZhbGxiYWNrIHRvIHRoZSBGUyBkaXJlY3QgSU8gYWxpZ25tZW50Ci0JICogY29uc3RyYWludCBpZiB0aGF0IGlzIHByb3ZpZGVkLCBhbmQgdG8gdGhlIEZTIHVuZGVybHlpbmcgZGV2aWNlCi0JICogcGh5c2ljYWwgYmxvY2sgc2l6ZSBpZiB0aGUgZGlyZWN0IElPIGFsaWdubWVudCBpcyB1bmtub3duLgomIzQzOwkgKiBVc2UgdGhlIGRpbyBhbGlnbm1lbnQgb2YgdGhlIGZpbGUgc3lzdGVtIGlmIHByb3ZpZGVkLiAgVGhlIGluY29taW5nCiYjNDM7CSAqIHJlcXVlc3QmIzM5O3MgYmlvX3ZlYyBpcyBmb3J3YXJkZWQgdG8gdGhlIGJhY2tpbmcgZmlsZSB1bmNoYW5nZWQsIHNvIGl0cwomIzQzOwkgKiByZXF1aXJlZCBtZW1vcnkgYWxpZ25tZW50IGJlY29tZXMgdGhlIGRldmljZSYjMzk7cyBkbWFfYWxpZ25tZW50IHdoZW4KJiM0MzsJICogdXNlZCBmb3IgZGlyZWN0LWlvLgogCSAqLwotCWlmIChmaWxlX2lub2RlKHpvbmUtJmd0O2ZpbGUpLSZndDtpX3NiLSZndDtzX2Jsb2Nrc2l6ZSAmbHQ7PSBTWl80SykKLQkJemxvLSZndDtibG9ja19zaXplID0gZmlsZV9pbm9kZSh6b25lLSZndDtmaWxlKS0mZ3Q7aV9zYi0mZ3Q7c19ibG9ja3NpemU7Ci0JZWxzZSBpZiAoIXZmc19nZXRhdHRyKCZhbXA7em9uZS0mZ3Q7ZmlsZS0mZ3Q7Zl9wYXRoLCAmYW1wO3N0LCBTVEFUWF9ESU9BTElHTiwgMCkgJmFtcDsmYW1wOwotCQkgKHN0LnJlc3VsdF9tYXNrICZhbXA7IFNUQVRYX0RJT0FMSUdOKSkKJiM0MzsJaWYgKCF2ZnNfZ2V0YXR0cigmYW1wO3pvbmUtJmd0O2ZpbGUtJmd0O2ZfcGF0aCwgJmFtcDtzdCwgU1RBVFhfRElPQUxJR04sIDApICZhbXA7JmFtcDsKJiM0MzsJICAgIChzdC5yZXN1bHRfbWFzayAmYW1wOyBTVEFUWF9ESU9BTElHTikpIHsKIAkJemxvLSZndDtibG9ja19zaXplID0gc3QuZGlvX29mZnNldF9hbGlnbjsKLQllbHNlIGlmIChzYl9iZGV2KQomIzQzOwkJemxvLSZndDtkaW9fbWVtX2FsaWduID0gc3QuZGlvX21lbV9hbGlnbiAtIDE7CiYjNDM7CX0gZWxzZSBpZiAoc2JfYmRldikgewogCQl6bG8tJmd0O2Jsb2NrX3NpemUgPSBiZGV2X3BoeXNpY2FsX2Jsb2NrX3NpemUoc2JfYmRldik7Ci0JZWxzZQomIzQzOwkJemxvLSZndDtkaW9fbWVtX2FsaWduID0gYmRldl9kbWFfYWxpZ25tZW50KHNiX2JkZXYpOwomIzQzOwl9IGVsc2UgewogCQl6bG8tJmd0O2Jsb2NrX3NpemUgPSBTRUNUT1JfU0laRTsKJiM0MzsJCXpsby0mZ3Q7ZGlvX21lbV9hbGlnbiA9IFNFQ1RPUl9TSVpFIC0gMTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBQcmVmZXIgdGhlIEZTIGJsb2NrIHNpemUgZm9yIHRoZSBkZXZpY2UgYmxvY2sgc2l6ZSB3aGVuIGl0IGlzIG5vCiYjNDM7CSAqIGxhcmdlciB0aGFuIDRLOyBvdGhlcndpc2Uga2VlcCB0aGUgZGlyZWN0IEkvTyAvIHBoeXNpY2FsIGJsb2NrIHNpemUKJiM0MzsJICogc2VsZWN0ZWQgYWJvdmUuCiYjNDM7CSAqLwomIzQzOwlpZiAoZmlsZV9pbm9kZSh6b25lLSZndDtmaWxlKS0mZ3Q7aV9zYi0mZ3Q7c19ibG9ja3NpemUgJmx0Oz0gU1pfNEspCiYjNDM7CQl6bG8tJmd0O2Jsb2NrX3NpemUgPSBmaWxlX2lub2RlKHpvbmUtJmd0O2ZpbGUpLSZndDtpX3NiLSZndDtzX2Jsb2Nrc2l6ZTsKIAogCWlmICh6bG8tJmd0O3pvbmVfY2FwYWNpdHkgJmFtcDsgKCh6bG8tJmd0O2Jsb2NrX3NpemUgJmd0OyZndDsgU0VDVE9SX1NISUZUKSAtIDEpKSB7CiAJCXByX2VycigmIzM0O1pvbmUgY2FwYWNpdHkgaXMgbm90IGFsaWduZWQgdG8gYmxvY2sgc2l6ZSAldVxuJiMzNDssCkBAIC0xMjc5LDYgJiM0MzsxMjkwLDEwIEBAIHN0YXRpYyBpbnQgemxvb3BfY3RsX2FkZChzdHJ1Y3Qgemxvb3Bfb3B0aW9ucyAqb3B0cykKIAogCWxpbS5waHlzaWNhbF9ibG9ja19zaXplID0gemxvLSZndDtibG9ja19zaXplOwogCWxpbS5sb2dpY2FsX2Jsb2NrX3NpemUgPSB6bG8tJmd0O2Jsb2NrX3NpemU7CiYjNDM7CS8qIERpcmVjdCBJL08gZm9yd2FyZHMgdGhlIHJlcXVlc3QgcGFnZXMgdG8gdGhlIGJhY2tpbmcgZmlsZXMgYXMtaXMuICovCiYjNDM7CWlmICghb3B0cy0mZ3Q7YnVmZmVyZWRfaW8pCiYjNDM7CQlsaW0uZG1hX2FsaWdubWVudCA9IG1heF90KHVuc2lnbmVkIGludCwgemxvLSZndDtkaW9fbWVtX2FsaWduLAomIzQzOwkJCQkJICBTRUNUT1JfU0laRSAtIDEpOwogCWlmICh6bG8tJmd0O3pvbmVfYXBwZW5kKQogCQlsaW0ubWF4X2h3X3pvbmVfYXBwZW5kX3NlY3RvcnMgPSBsaW0ubWF4X2h3X3NlY3RvcnM7CiAJbGltLm1heF9vcGVuX3pvbmVzID0gemxvLSZndDttYXhfb3Blbl96b25lczsKZGlmZiAtLWdpdCBhL2ZzL2lvbWFwL2RpcmVjdC1pby5jIGIvZnMvaW9tYXAvZGlyZWN0LWlvLmMKaW5kZXggYjQ4NWUzYjE5MWRhZmEuLmZmNDU4YWExMmFlMjk4IDEwMDY0NAotLS0gYS9mcy9pb21hcC9kaXJlY3QtaW8uYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9pb21hcC9kaXJlY3QtaW8uYwpAQCAtMzU4LDYgJiM0MzszNTgsNyBAQCBzdGF0aWMgc3NpemVfdCBpb21hcF9kaW9fYmlvX2l0ZXJfb25lKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLAogCQkJCWlvbWFwX21heF9iaW9fc2l6ZSgmYW1wO2l0ZXItJmd0O2lvbWFwKSwgYWxpZ25tZW50KTsKIAllbHNlCiAJCXJldCA9IGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoYmlvLCBkaW8tJmd0O3N1Ym1pdC5pdGVyLAomIzQzOwkJCQkJICAgICBiZGV2X2RtYV9hbGlnbm1lbnQoYmlvLSZndDtiaV9iZGV2KSwKIAkJCQkJICAgICBhbGlnbm1lbnQgLSAxKTsKIAlpZiAodW5saWtlbHkocmV0KSkKIAkJZ290byBvdXRfcHV0X2JpbzsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmlvLmggYi9pbmNsdWRlL2xpbnV4L2Jpby5oCmluZGV4IDhmMzNmNzE3YjE0ZjViLi5jZTM0ZWE0OWVmMzU4MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9iaW8uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2Jpby5oCkBAIC00NzcsNyAmIzQzOzQ3Nyw3IEBAIGludCBiZGV2X3J3X3ZpcnQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3Qgc2VjdG9yLCB2b2lkICpkYXRhLAogCQlzaXplX3QgbGVuLCBlbnVtIHJlcV9vcCBvcCk7CiAKIGludCBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLAotCQl1bnNpZ25lZCBsZW5fYWxpZ25fbWFzayk7CiYjNDM7CQl1bnNpZ25lZCBtZW1fYWxpZ25fbWFzaywgdW5zaWduZWQgbGVuX2FsaWduX21hc2spOwogCiB2b2lkIGJpb19pb3ZfYnZlY19zZXQoc3RydWN0IGJpbyAqYmlvLCBjb25zdCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpOwogdm9pZCBfX2Jpb19yZWxlYXNlX3BhZ2VzKHN0cnVjdCBiaW8gKmJpbywgYm9vbCBtYXJrX2RpcnR5KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdWlvLmggYi9pbmNsdWRlL2xpbnV4L3Vpby5oCmluZGV4IGE5YmM1YjMwNjdlMzIwLi5mZTJlOTg1ZDc0ZDI0YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91aW8uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3Vpby5oCkBAIC0zODksOSAmIzQzOzM4OSwxNyBAQCBzc2l6ZV90IGlvdl9pdGVyX2V4dHJhY3RfcGFnZXMoc3RydWN0IGlvdl9pdGVyICppLCBzdHJ1Y3QgcGFnZSAqKipwYWdlcywKIAkJCSAgICAgICBzaXplX3QgbWF4c2l6ZSwgdW5zaWduZWQgaW50IG1heHBhZ2VzLAogCQkJICAgICAgIGlvdl9pdGVyX2V4dHJhY3Rpb25fdCBleHRyYWN0aW9uX2ZsYWdzLAogCQkJICAgICAgIHNpemVfdCAqb2Zmc2V0MCk7CiYjNDM7LyoKJiM0MzsgKiBCbG9jay1sYXllciBjb25zdW1lcnMgKGUuZy4gYmlvX2lvdl9pdGVyX2dldF9wYWdlcygpKSByZXF1aXJlIHRoYXQgdGhlCiYjNDM7ICogc2VnbWVudHMgb2YgYW4gSVRFUl9CVkVDIGl0ZXJhdG9yIGFyZSBhbHJlYWR5IGFsaWduZWQgdG8gdGhlIHRhcmdldCBkZXZpY2UmIzM5O3MKJiM0MzsgKiBETUEgYWxpZ25tZW50LCBhbmQgZm9yd2FyZCB0aGVtIGFzLWlzLiAgSW4ta2VybmVsIHVzZXJzIHRoYXQgYnVpbGQgdGhlaXIgb3duCiYjNDM7ICogYnZlY3MgbXVzdCBub3QgY3JlYXRlIHN1Yi1hbGlnbmVkIHNlZ21lbnRzOyBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzKCkgZW5mb3JjZXMKJiM0MzsgKiB0aGUgc2FtZSBmb3IgdGhlIHNlZ21lbnRzIGl0IGV4dHJhY3RzIHZpYSBAbWVtX2FsaWduX21hc2suCiYjNDM7ICovCiBzc2l6ZV90IGlvdl9pdGVyX2V4dHJhY3RfYnZlY3Moc3RydWN0IGlvdl9pdGVyICppdGVyLCBzdHJ1Y3QgYmlvX3ZlYyAqYnYsCiAJCXNpemVfdCBtYXhfc2l6ZSwgdW5zaWduZWQgc2hvcnQgKm5yX3ZlY3MsCi0JCXVuc2lnbmVkIHNob3J0IG1heF92ZWNzLCBpb3ZfaXRlcl9leHRyYWN0aW9uX3QgZXh0cmFjdGlvbl9mbGFncyk7CiYjNDM7CQl1bnNpZ25lZCBzaG9ydCBtYXhfdmVjcywgdW5zaWduZWQgbWVtX2FsaWduX21hc2ssCiYjNDM7CQlpb3ZfaXRlcl9leHRyYWN0aW9uX3QgZXh0cmFjdGlvbl9mbGFncyk7CiAKIC8qKgogICogaW92X2l0ZXJfZXh0cmFjdF93aWxsX3BpbiAtIEluZGljYXRlIGhvdyBwYWdlcyBmcm9tIHRoZSBpdGVyYXRvciB3aWxsIGJlIHJldGFpbmVkCmRpZmYgLS1naXQgYS9saWIvaW92X2l0ZXIuYyBiL2xpYi9pb3ZfaXRlci5jCmluZGV4IDI3MzkxOWIxNjE2MTc2Li5jMzQzMDc1OTUxZGVkMCAxMDA2NDQKLS0tIGEvbGliL2lvdl9pdGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbGliL2lvdl9pdGVyLmMKQEAgLTE4ODYsNiAmIzQzOzE4ODYsOCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGdldF9jb250aWdfZm9saW9fbGVuKHN0cnVjdCBwYWdlICoqcGFnZXMsCiAgKiBAbWF4X3NpemU6CW1heGltdW0gc2l6ZSB0byBleHRyYWN0IGZyb20gQGl0ZXIKICAqIEBucl92ZWNzOgludW1iZXIgb2YgdmVjdG9ycyBpbiBAYnYgKG9uIGluIGFuZCBvdXRwdXQpCiAgKiBAbWF4X3ZlY3M6CW1heGltdW0gdmVjdG9ycyBpbiBAYnYsIGluY2x1ZGluZyB0aG9zZSBmaWxsZWQgYmVmb3JlIGNhbGxpbmcKJiM0MzsgKiBAbWVtX2FsaWduX21hc2s6CXJlamVjdCB3aXRoIC1FSU5WQUwgaWYgdGhlIHNvdXJjZSBhZGRyZXNzIG9yCiYjNDM7ICoJCWxlbmd0aCBpcyBub3QgYWxpZ25lZCB0byB0aGlzIG1hc2sKICAqIEBleHRyYWN0aW9uX2ZsYWdzOiBmbGFncyB0byBxdWFsaWZ5IHJlcXVlc3QKICAqCiAgKiBMaWtlIGlvdl9pdGVyX2V4dHJhY3RfcGFnZXMoKSwgYnV0IHJldHVybnMgcGh5c2ljYWxseSBjb250aWd1b3VzIHJhbmdlcwpAQCAtMTg5NywxNCAmIzQzOzE4OTksMTkgQEAgc3RhdGljIHVuc2lnbmVkIGludCBnZXRfY29udGlnX2ZvbGlvX2xlbihzdHJ1Y3QgcGFnZSAqKnBhZ2VzLAogICovCiBzc2l6ZV90IGlvdl9pdGVyX2V4dHJhY3RfYnZlY3Moc3RydWN0IGlvdl9pdGVyICppdGVyLCBzdHJ1Y3QgYmlvX3ZlYyAqYnYsCiAJCXNpemVfdCBtYXhfc2l6ZSwgdW5zaWduZWQgc2hvcnQgKm5yX3ZlY3MsCi0JCXVuc2lnbmVkIHNob3J0IG1heF92ZWNzLCBpb3ZfaXRlcl9leHRyYWN0aW9uX3QgZXh0cmFjdGlvbl9mbGFncykKJiM0MzsJCXVuc2lnbmVkIHNob3J0IG1heF92ZWNzLCB1bnNpZ25lZCBtZW1fYWxpZ25fbWFzaywKJiM0MzsJCWlvdl9pdGVyX2V4dHJhY3Rpb25fdCBleHRyYWN0aW9uX2ZsYWdzKQogewomIzQzOwl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpaXRlcl9pb3ZfYWRkcihpdGVyKTsKIAl1bnNpZ25lZCBzaG9ydCBlbnRyaWVzX2xlZnQgPSBtYXhfdmVjcyAtICpucl92ZWNzOwogCXVuc2lnbmVkIHNob3J0IG5yX3BhZ2VzLCBpID0gMDsKIAlzaXplX3QgbGVmdCwgb2Zmc2V0LCBsZW47CiAJc3RydWN0IHBhZ2UgKipwYWdlczsKIAlzc2l6ZV90IHNpemU7CiAKJiM0MzsJaWYgKChzdGFydCB8IGl0ZXJfaW92X2xlbihpdGVyKSkgJmFtcDsgbWVtX2FsaWduX21hc2spCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKIAkvKgogCSAqIE1vdmUgcGFnZSBhcnJheSB1cCBpbiB0aGUgYWxsb2NhdGVkIG1lbW9yeSBmb3IgdGhlIGJpbyB2ZWNzIGFzIGZhciBhcwogCSAqIHBvc3NpYmxlIHNvIHRoYXQgd2UgY2FuIHN0YXJ0IGZpbGxpbmcgYmlvdmVjcyBmcm9tIHRoZSBiZWdpbm5pbmcKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTc6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc2OAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDM3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJsb2NrIExheWVyIERJTyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgbWFraW5nIHNvbWUgbW9kaWZpY2F0aW9ucyB0byB0aGUgYmxvY2sgbGF5ZXIsIHNwZWNpZmljYWxseSBhcm91bmQgZGlyZWN0IEkvTyAoRElPKSBhbmQgaG93IGl0IGhhbmRsZXMgYGlvdl9pdGVyYCBsb2dpYy4gSXQgbG9va3MgbGlrZSB0aGUgbWFpbiB0aHJ1c3Qgb2YgdGhpcyBjaGFuZ2UgaXMgdG8gaW50cm9kdWNlIG1lbW9yeSBhbGlnbm1lbnQgY2hlY2tzLiBTcGVjaWZpY2FsbHksIHRoZXkmIzM5O3JlIHRpZ2h0ZW5pbmcgdXAgaG93IHdlIGhhbmRsZSBtZW1vcnkgYWxpZ25tZW50IHJlcXVpcmVtZW50cyBmb3IgRElPIHVzaW5nIGBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzYCBhbmQgYGlvdl9pdGVyX2V4dHJhY3RfYnZlY3NgLiBUaGlzIGlzIGNydWNpYWwgZm9yIGF2b2lkaW5nIHRob3NlIHBlc2t5IGFsaWdubWVudC1yZWxhdGVkIHBlcmZvcm1hbmNlIHByb2JsZW1zIGFuZCBlbnN1cmluZyB0aGUgRE1BIHRyYW5zZmVycyB3b3JrIGFzIGV4cGVjdGVkLgoKSSBzZWUgdGhhdCBgYmlvX2lvdl9pdGVyX2dldF9wYWdlc2AgYW5kIGBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzYCBub3cgYm90aCBhY2NlcHQgYSBgbWVtX2FsaWduX21hc2tgIGFyZ3VtZW50LCB3aGljaCBjb25maXJtcyBteSBpbml0aWFsIGFzc2Vzc21lbnQuIEZ1cnRoZXJtb3JlLCB0aGUgYGxvb3BgIGFuZCBgemxvb3BgIGRyaXZlcnMgaGF2ZSBiZWVuIG1vZGlmaWVkIHRvIGhhbmRsZSBETUEgbGltaXRzIGNvcnJlY3RseSBiYXNlZCBvbiB0aGUgRElPIGFsaWdubWVudCBvZiB0aGUgYmFja2luZyBmaWxlLiBgbG9vcF91cGRhdGVfZGlvX2FsaWdubWVudGAgYW5kIGBsb29wX3NldF9kbWFfbGltaXRgIGFyZSB0aGUgbmV3IGFkZGl0aW9ucyB0byBgbG9vcC5jYCBhbmQgc2ltaWxhciBjaGFuZ2VzIGhhdmUgYmVlbiBtYWRlIGluIHRoZSBgemxvb3BgIGRyaXZlci4KCkkgc2VlIGhvdyB0aGlzIGFmZmVjdHMgdGhlIGFjdHVhbCBjYWxsczogYGlvbWFwX2Rpb19iaW9faXRlcl9vbmVgIGFuZCBgX19ibGtkZXZfZGlyZWN0X0lPYCBub3cgYXJlIHBhc3NpbmcgdGhlIERNQSBhbGlnbm1lbnQgb2YgdGhlIGJsb2NrIGRldmljZSB0byBgYmlvX2lvdl9pdGVyX2dldF9wYWdlc2AuIEdvb2QsIHRoYXQmIzM5O3Mgd2hhdCBJJiMzOTtkIGV4cGVjdC4gQmFzZWQgb24gdGhpcyBxdWljayBza2ltLCB0aGlzIHBhdGNoIHNlZW1zIGZ1bmN0aW9uYWwgYW5kLCBtb3JlIGltcG9ydGFudGx5LCAqcmVhY2hhYmxlKiDigJMgbWVhbmluZyB3ZSYjMzk7cmUgYWN0dWFsbHkgKnVzaW5nKiB0aGVzZSBtb2RpZmllZCBmdW5jdGlvbnMuIFRoYXQmIzM5O3MgYSBrZXkgcG9pbnQuCgpNeSBuZXh0IHN0ZXAgaXMgY2xlYXI6IHdlIG5lZWQgdG8gZnV6eiB0aGlzISBJIG5lZWQgdG8gaGFtbWVyIGF0IHRob3NlIGFsaWdubWVudCBjaGVja3MgdG8gbG9vayBmb3IgZWRnZSBjYXNlcy4gSSYjMzk7bGwgbmVlZCB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMgb24gdGhlc2Uga2V5IHN5bWJvbHM6IGBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzYCwgYGlvdl9pdGVyX2V4dHJhY3RfYnZlY3NgLCBgbG9vcF91cGRhdGVfZGlvX2FsaWdubWVudGAsIGBsb29wX3NldF9kbWFfbGltaXRgLCBgemxvb3BfZ2V0X2Jsb2NrX3NpemVgLCBhbmQgYHpsb29wX2N0bF9hZGRgLiBUaGVzZSBhcmUgdGhlIGNvcmUgZnVuY3Rpb25zIHRoYXQgYXJlIGhhbmRsaW5nIHRoZSBESU8gYWxpZ25tZW50IGNoZWNrcyBhbmQgRE1BIGxpbWl0IGxvZ2ljLgoKRmluYWxseSwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgemxvb3BgIGlzIGFjdHVhbGx5IGEgZHJpdmVyIHdlIG5lZWQgdG8gd29ycnkgYWJvdXQuIEkgd2lsbCBxdWlja2x5IHJ1biBhIHNlYXJjaCB0byBjb25maXJtLCBsaWtlbHkgdXNpbmcgYGNvZGVzZWFyY2gtZGlyLWluZGV4YCBvciBgZ3JlcHBlcmAg4oCTIGhvcGVmdWxseSwgSSBmaW5kIGl0LCBhcyB0aGF0IHdpbGwgYWRkIGFub3RoZXIgY29tcG9uZW50IHRvIHRoZSBwdXp6bGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTc6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7emxvb3AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNjg0IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc9MzU2PWNvbmZpZyBCTEtfREVWX1pPTkVEX0xPT1Bcbi0tXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzY3LVx0ICBlY2hvIFwmIzM0O2FkZCBpZD0wLHpvbmVfc2l6ZV9tYj0yNTYsY2FwYWNpdHlfbWI9MTYzODQsY29udl96b25lcz0xMVwmIzM0OyBcdTAwM2UgXFxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzozNjg6XHRcdC9kZXYvemxvb3AtY29udHJvbFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTM2OS1cbi0tXG5kcml2ZXJzL2Jsb2NrL01ha2VmaWxlPTQwPW9iai0kKENPTkZJR19CTEtfREVWX1VCTEspXHRcdFx0JiM0Mzs9IHVibGtfZHJ2Lm9cbmRyaXZlcnMvYmxvY2svTWFrZWZpbGU6NDE6b2JqLSQoQ09ORklHX0JMS19ERVZfWk9ORURfTE9PUCkgJiM0Mzs9IHpsb29wLm9cbmRyaXZlcnMvYmxvY2svTWFrZWZpbGUtNDItXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jPTI1PWVudW0ge1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy00MS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzo0MjpzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB6bG9vcF9vcHRfdG9rZW5zID0ge1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTQzLVx0eyBaTE9PUF9PUFRfSUQsXHRcdFx0XCYjMzQ7aWQ9JWRcJiMzNDtcdH0sXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTY0LSNkZWZpbmUgWkxPT1BfREVGX01BWF9PUEVOX1pPTkVTXHQwXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NjU6I2RlZmluZSBaTE9PUF9ERUZfQkFTRV9ESVJcdFx0XCYjMzQ7L3Zhci9sb2NhbC96bG9vcFwmIzM0O1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTY2LSNkZWZpbmUgWkxPT1BfREVGX05SX1FVRVVFU1x0XHQxXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc0LVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjc1OnN0cnVjdCB6bG9vcF9vcHRpb25zIHtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03Ni1cdHVuc2lnbmVkIGludFx0XHRtYXNrO1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYz05NT1lbnVtIHtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTAwLVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEwMTplbnVtIHpsb29wX3pvbmVfZmxhZ3Mge1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwMi1cdFpMT09QX1pPTkVfQ09OViA9IDAsXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwOS0gKi9cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMTA6c3RydWN0IHpsb29wX3pvbmUge1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTExMS1cdHN0cnVjdCBsaXN0X2hlYWRcdG9wZW5fem9uZV9lbnRyeTtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTIzLVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEyNDpzdHJ1Y3Qgemxvb3BfZGV2aWNlIHtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMjUtXHR1bnNpZ25lZCBpbnRcdFx0aWQ7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTE1Mi1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxNTM6XHRzdHJ1Y3Qgemxvb3Bfem9uZVx0em9uZXNbXSBfX2NvdW50ZWRfYnkobnJfem9uZXMpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTE1NC19O1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTE1NS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxNTY6c3RydWN0IHpsb29wX2NtZCB7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTU3LVx0c3RydWN0IHdvcmtfc3RydWN0XHR3b3JrO1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xNjUtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTY2OnN0YXRpYyBERUZJTkVfSURSKHpsb29wX2luZGV4X2lkcik7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTY3OnN0YXRpYyBERUZJTkVfTVVURVgoemxvb3BfY3RsX211dGV4KTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xNjgtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM9MTY5PXN0YXRpYyB1bnNpZ25lZCBpbnQgcnFfem9uZV9ubyhzdHJ1Y3QgcmVxdWVzdCAqcnEpXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTcwLXtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxNzE6XHRzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8gPSBycS1cdTAwM2VxLVx1MDAzZXF1ZXVlZGF0YTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xNzItXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTE4MS0gKi9cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxODI6c3RhdGljIGlubGluZSB2b2lkIHpsb29wX2xydV9yb3RhdGVfb3Blbl96b25lKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxODM6XHRcdFx0XHRcdCAgICAgIHN0cnVjdCB6bG9vcF96b25lICp6b25lKVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTE4NC17XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTE5Mi1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxOTM6c3RhdGljIGlubGluZSB2b2lkIHpsb29wX2xydV9yZW1vdmVfb3Blbl96b25lKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxOTQ6XHRcdFx0XHRcdCAgICAgIHN0cnVjdCB6bG9vcF96b25lICp6b25lKVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTE5NS17XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTIwNC1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoyMDU6c3RhdGljIGlubGluZSBib29sIHpsb29wX2Nhbl9vcGVuX3pvbmUoc3RydWN0IHpsb29wX2RldmljZSAqemxvKVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTIwNi17XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTIxNC0gKi9cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoyMTU6c3RhdGljIGJvb2wgemxvb3BfY2xvc2VfaW1wX29wZW5fem9uZShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8pXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjE2LXtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoyMTc6XHRzdHJ1Y3Qgemxvb3Bfem9uZSAqem9uZTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0yMTgtXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTIyMC1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoyMjE6XHRpZiAoemxvb3BfY2FuX29wZW5fem9uZSh6bG8pKVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTIyMi1cdFx0cmV0dXJuIHRydWU7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTIzNS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoyMzY6c3RhdGljIGJvb2wgemxvb3Bfb3Blbl9jbG9zZWRfb3JfZW1wdHlfem9uZShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8sXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MjM3Olx0XHRcdFx0XHQgICAgc3RydWN0IHpsb29wX3pvbmUgKnpvbmUsXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjM4LVx0XHRcdFx0XHQgICAgYm9vbCBleHBsaWNpdClcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjQ2LVx0XHQgKi9cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoyNDc6XHRcdGlmICghemxvb3BfY2FuX29wZW5fem9uZSh6bG8pKVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTI0OC1cdFx0XHRnb3RvIGZhaWw7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTI1NC1cdFx0ICovXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MjU1Olx0XHRpZiAoIXpsb29wX2Nsb3NlX2ltcF9vcGVuX3pvbmUoemxvKSlcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0yNTYtXHRcdFx0Z290byBmYWlsO1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0yNzMtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6Mjc0OnN0YXRpYyBib29sIHpsb29wX2RvX29wZW5fem9uZShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8sXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6Mjc1Olx0XHRcdCAgICAgICBzdHJ1Y3Qgemxvb3Bfem9uZSAqem9uZSwgYm9vbCBleHBsaWNpdClcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0yNzYte1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0yODEtXHRcdFx0em9uZS1cdTAwM2Vjb25kID0gQkxLX1pPTkVfQ09ORF9FWFBfT1BFTjtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoyODI6XHRcdHpsb29wX2xydV9yb3RhdGVfb3Blbl96b25lKHpsbywgem9uZSk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjgzLVx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjg1LVx0Y2FzZSBCTEtfWk9ORV9DT05EX0NMT1NFRDpcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoyODY6XHRcdHJldHVybiB6bG9vcF9vcGVuX2Nsb3NlZF9vcl9lbXB0eV96b25lKHpsbywgem9uZSwgZXhwbGljaXQpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTI4Ny1cdGRlZmF1bHQ6XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTI5MS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoyOTI6c3RhdGljIHZvaWQgemxvb3BfbWFya19mdWxsKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbywgc3RydWN0IHpsb29wX3pvbmUgKnpvbmUpXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjkzLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjk1LVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjI5NjpcdHpsb29wX2xydV9yZW1vdmVfb3Blbl96b25lKHpsbywgem9uZSk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjk3LVx0em9uZS1cdTAwM2Vjb25kID0gQkxLX1pPTkVfQ09ORF9GVUxMO1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zMDAtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MzAxOnN0YXRpYyB2b2lkIHpsb29wX21hcmtfZW1wdHkoc3RydWN0IHpsb29wX2RldmljZSAqemxvLCBzdHJ1Y3Qgemxvb3Bfem9uZSAqem9uZSlcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zMDIte1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zMDQtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MzA1Olx0emxvb3BfbHJ1X3JlbW92ZV9vcGVuX3pvbmUoemxvLCB6b25lKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zMDYtXHR6b25lLVx1MDAzZWNvbmQgPSBCTEtfWk9ORV9DT05EX0VNUFRZO1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zMDktXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MzEwOnN0YXRpYyBpbnQgemxvb3BfdXBkYXRlX3NlcV96b25lKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbywgdW5zaWduZWQgaW50IHpvbmVfbm8pXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMzExLXtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzozMTI6XHRzdHJ1Y3Qgemxvb3Bfem9uZSAqem9uZSA9IFx1MDAyNnpsby1cdTAwM2V6b25lc1t6b25lX25vXTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zMTMtXHRzdHJ1Y3Qga3N0YXQgc3RhdDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMzQxLVx0aWYgKCFmaWxlX3NlY3RvcnMpIHtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzozNDI6XHRcdHpsb29wX21hcmtfZW1wdHkoemxvLCB6b25lKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zNDMtXHR9IGVsc2UgaWYgKGZpbGVfc2VjdG9ycyA9PSB6bG8tXHUwMDNlem9uZV9jYXBhY2l0eSkge1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjM0NDpcdFx0emxvb3BfbWFya19mdWxsKHpsbywgem9uZSk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMzQ1LVx0fSBlbHNlIHtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMzU1LVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjM1NjpzdGF0aWMgaW50IHpsb29wX29wZW5fem9uZShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8sIHVuc2lnbmVkIGludCB6b25lX25vKVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTM1Ny17XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MzU4Olx0c3RydWN0IHpsb29wX3pvbmUgKnpvbmUgPSBcdTAwMjZ6bG8tXHUwMDNlem9uZXNbem9uZV9ub107XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMzU5LVx0aW50IHJldCA9IDA7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTM2Ni1cdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoWkxPT1BfWk9ORV9TRVFfRVJST1IsIFx1MDAyNnpvbmUtXHUwMDNlZmxhZ3MpKSB7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MzY3Olx0XHRyZXQgPSB6bG9vcF91cGRhdGVfc2VxX3pvbmUoemxvLCB6b25lX25vKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zNjgtXHRcdGlmIChyZXQpXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTM3MS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzozNzI6XHRpZiAoIXpsb29wX2RvX29wZW5fem9uZSh6bG8sIHpvbmUsIHRydWUpKVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTM3My1cdFx0cmV0ID0gLUVJTztcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMzgwLVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjM4MTpzdGF0aWMgaW50IHpsb29wX2Nsb3NlX3pvbmUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLCB1bnNpZ25lZCBpbnQgem9uZV9ubylcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zODIte1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjM4MzpcdHN0cnVjdCB6bG9vcF96b25lICp6b25lID0gXHUwMDI2emxvLVx1MDAzZXpvbmVzW3pvbmVfbm9dO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTM4NC1cdGludCByZXQgPSAwO1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zOTEtXHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KFpMT09QX1pPTkVfU0VRX0VSUk9SLCBcdTAwMjZ6b25lLVx1MDAzZWZsYWdzKSkge1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjM5MjpcdFx0cmV0ID0gemxvb3BfdXBkYXRlX3NlcV96b25lKHpsbywgem9uZV9ubyk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMzkzLVx0XHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy00MDItXHRcdHNwaW5fbG9jayhcdTAwMjZ6b25lLVx1MDAzZXdwX2xvY2spO1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjQwMzpcdFx0emxvb3BfbHJ1X3JlbW92ZV9vcGVuX3pvbmUoemxvLCB6b25lKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy00MDQtXHRcdGlmICh6b25lLVx1MDAzZXdwID09IHpvbmUtXHUwMDNlc3RhcnQpXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTQyMi1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzo0MjM6c3RhdGljIGludCB6bG9vcF9yZXNldF96b25lKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbywgdW5zaWduZWQgaW50IHpvbmVfbm8pXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNDI0LXtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo0MjU6XHRzdHJ1Y3Qgemxvb3Bfem9uZSAqem9uZSA9IFx1MDAyNnpsby1cdTAwM2V6b25lc1t6b25lX25vXTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy00MjYtXHRpbnQgcmV0ID0gMDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNDQzLVx0c3Bpbl9sb2NrKFx1MDAyNnpvbmUtXHUwMDNld3BfbG9jayk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NDQ0Olx0emxvb3BfbWFya19lbXB0eSh6bG8sIHpvbmUpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTQ0NS1cdGNsZWFyX2JpdChaTE9PUF9aT05FX1NFUV9FUlJPUiwgXHUwMDI2em9uZS1cdTAwM2VmbGFncyk7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTQ1My1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzo0NTQ6c3RhdGljIGludCB6bG9vcF9yZXNldF9hbGxfem9uZXMoc3RydWN0IHpsb29wX2RldmljZSAqemxvKVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTQ1NS17XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTQ1OS1cdGZvciAoaSA9IHpsby1cdTAwM2Vucl9jb252X3pvbmVzOyBpIFx1MDAzYyB6bG8tXHUwMDNlbnJfem9uZXM7IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NDYwOlx0XHRyZXQgPSB6bG9vcF9yZXNldF96b25lKHpsbywgaSk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNDYxLVx0XHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy00NjctXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NDY4OnN0YXRpYyBpbnQgemxvb3BfZmluaXNoX3pvbmUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLCB1bnNpZ25lZCBpbnQgem9uZV9ubylcbmRyaXZlcnMvYmxvY2svemxvb3AuYy00Njkte1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjQ3MDpcdHN0cnVjdCB6bG9vcF96b25lICp6b25lID0gXHUwMDI2emxvLVx1MDAzZXpvbmVzW3pvbmVfbm9dO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTQ3MS1cdGludCByZXQgPSAwO1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy00ODgtXHRzcGluX2xvY2soXHUwMDI2em9uZS1cdTAwM2V3cF9sb2NrKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo0ODk6XHR6bG9vcF9tYXJrX2Z1bGwoemxvLCB6b25lKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy00OTAtXHRjbGVhcl9iaXQoWkxPT1BfWk9ORV9TRVFfRVJST1IsIFx1MDAyNnpvbmUtXHUwMDNlZmxhZ3MpO1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy00OTgtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NDk5OnN0YXRpYyB2b2lkIHpsb29wX3B1dF9jbWQoc3RydWN0IHpsb29wX2NtZCAqY21kKVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTUwMC17XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTUxMC1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzo1MTE6c3RhdGljIHZvaWQgemxvb3BfcndfY29tcGxldGUoc3RydWN0IGtpb2NiICppb2NiLCBsb25nIHJldClcbmRyaXZlcnMvYmxvY2svemxvb3AuYy01MTIte1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjUxMzpcdHN0cnVjdCB6bG9vcF9jbWQgKmNtZCA9IGNvbnRhaW5lcl9vZihpb2NiLCBzdHJ1Y3Qgemxvb3BfY21kLCBpb2NiKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy01MTQtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTE1LVx0Y21kLVx1MDAzZXJldCA9IHJldDtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo1MTY6XHR6bG9vcF9wdXRfY21kKGNtZCk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTE3LX1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy01MTgtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NTE5OnN0YXRpYyBpbnQgemxvb3BfZG9fcncoc3RydWN0IHpsb29wX2NtZCAqY21kKVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTUyMC17XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTUyMy1cdHVuc2lnbmVkIGludCBucl9idmVjID0gYmxrX3JxX25yX2J2ZWMocnEpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjUyNDpcdHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyA9IHJxLVx1MDAzZXEtXHUwMDNlcXVldWVkYXRhO1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjUyNTpcdHN0cnVjdCB6bG9vcF96b25lICp6b25lID0gXHUwMDI2emxvLVx1MDAzZXpvbmVzW3JxX3pvbmVfbm8ocnEpXTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy01MjYtXHRzdHJ1Y3QgcmVxX2l0ZXJhdG9yIHJxX2l0ZXI7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTU2MS1cdGNtZC1cdTAwM2Vpb2NiLmtpX2ZpbHAgPSB6b25lLVx1MDAzZWZpbGU7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NTYyOlx0Y21kLVx1MDAzZWlvY2Iua2lfY29tcGxldGUgPSB6bG9vcF9yd19jb21wbGV0ZTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy01NjMtXHRpZiAoIXpsby1cdTAwM2VidWZmZXJlZF9pbylcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTcxLVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjU3MjpzdGF0aWMgaW50IHpsb29wX3NlcV93cml0ZV9wcmVwKHN0cnVjdCB6bG9vcF9jbWQgKmNtZClcbmRyaXZlcnMvYmxvY2svemxvb3AuYy01NzMte1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTU3NC1cdHN0cnVjdCByZXF1ZXN0ICpycSA9IGJsa19tcV9ycV9mcm9tX3BkdShjbWQpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjU3NTpcdHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyA9IHJxLVx1MDAzZXEtXHUwMDNlcXVldWVkYXRhO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTU3Ni1cdHVuc2lnbmVkIGludCB6b25lX25vID0gcnFfem9uZV9ubyhycSk7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTU3OC1cdGJvb2wgaXNfYXBwZW5kID0gcmVxX29wKHJxKSA9PSBSRVFfT1BfWk9ORV9BUFBFTkQ7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NTc5Olx0c3RydWN0IHpsb29wX3pvbmUgKnpvbmUgPSBcdTAwMjZ6bG8tXHUwMDNlem9uZXNbem9uZV9ub107XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTgwLVx0c2VjdG9yX3Qgem9uZV9lbmQgPSB6b25lLVx1MDAzZXN0YXJ0ICYjNDM7IHpsby1cdTAwM2V6b25lX2NhcGFjaXR5O1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy01OTItXHRcdCAqIElmIG9yZGVyZWQgem9uZSBhcHBlbmQgaXMgaW4gdXNlLCB3ZSBhbHJlYWR5IGNoZWNrZWQgYW5kIHNldFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjU5MzpcdFx0ICogdGhlIHRhcmdldCBzZWN0b3IgaW4gemxvb3BfcXVldWVfcnEoKS5cbmRyaXZlcnMvYmxvY2svemxvb3AuYy01OTQtXHRcdCAqL1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy02MTItXHQvKiBJbXBsaWNpdGx5IG9wZW4gdGhlIHRhcmdldCB6b25lLiAqL1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjYxMzpcdGlmICghemxvb3BfZG9fb3Blbl96b25lKHpsbywgem9uZSwgZmFsc2UpKSB7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNjE0LVx0XHRyZXQgPSAtRUlPO1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy02MjUtXHRcdGlmICh6b25lLVx1MDAzZXdwID09IHpvbmVfZW5kKVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjYyNjpcdFx0XHR6bG9vcF9tYXJrX2Z1bGwoemxvLCB6b25lKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy02MjctXHR9XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTYzMi1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzo2MzM6c3RhdGljIHZvaWQgemxvb3Bfcncoc3RydWN0IHpsb29wX2NtZCAqY21kKVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTYzNC17XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNjM1LVx0c3RydWN0IHJlcXVlc3QgKnJxID0gYmxrX21xX3JxX2Zyb21fcGR1KGNtZCk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NjM2Olx0c3RydWN0IHpsb29wX2RldmljZSAqemxvID0gcnEtXHUwMDNlcS1cdTAwM2VxdWV1ZWRhdGE7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNjM3LVx0dW5zaWduZWQgaW50IHpvbmVfbm8gPSBycV96b25lX25vKHJxKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNjQwLVx0Ym9vbCBpc193cml0ZSA9IHJlcV9vcChycSkgPT0gUkVRX09QX1dSSVRFIHx8IGlzX2FwcGVuZDtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo2NDE6XHRzdHJ1Y3Qgemxvb3Bfem9uZSAqem9uZTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy02NDItXHRpbnQgcmV0ID0gLUVJTztcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNjY3LVx0XHRtdXRleF9sb2NrKFx1MDAyNnpvbmUtXHUwMDNlbG9jayk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NjY4Olx0XHRyZXQgPSB6bG9vcF91cGRhdGVfc2VxX3pvbmUoemxvLCB6b25lX25vKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy02NjktXHRcdG11dGV4X3VubG9jayhcdTAwMjZ6b25lLVx1MDAzZWxvY2spO1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy02NzUtXHRcdG11dGV4X2xvY2soXHUwMDI2em9uZS1cdTAwM2Vsb2NrKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo2NzY6XHRcdHJldCA9IHpsb29wX3NlcV93cml0ZV9wcmVwKGNtZCk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNjc3LVx0XHRpZiAoIXJldClcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo2Nzg6XHRcdFx0cmV0ID0gemxvb3BfZG9fcncoY21kKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy02NzktXHRcdG11dGV4X3VubG9jayhcdTAwMjZ6b25lLVx1MDAzZWxvY2spO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTY4MC1cdH0gZWxzZSB7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NjgxOlx0XHRyZXQgPSB6bG9vcF9kb19ydyhjbWQpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTY4Mi1cdH1cbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNjg0LVx0aWYgKHJldCAhPSAtRUlPQ0JRVUVVRUQpXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6Njg1Olx0XHR6bG9vcF9yd19jb21wbGV0ZShcdTAwMjZjbWQtXHUwMDNlaW9jYiwgcmV0KTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo2ODY6XHR6bG9vcF9wdXRfY21kKGNtZCk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNjg3LX1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy02ODgtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6Njg5OnN0YXRpYyBpbmxpbmUgYm9vbCB6bG9vcF96b25lX2lzX2FjdGl2ZShzdHJ1Y3Qgemxvb3Bfem9uZSAqem9uZSlcbmRyaXZlcnMvYmxvY2svemxvb3AuYy02OTAte1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy03MDAtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NzAxOnN0YXRpYyBpbnQgemxvb3BfcmVjb3JkX3NhZmVfd3BzKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbylcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03MDIte1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy03MDYtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB6bG8tXHUwMDNlbnJfem9uZXM7IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NzA3Olx0XHRzdHJ1Y3Qgemxvb3Bfem9uZSAqem9uZSA9IFx1MDAyNnpsby1cdTAwM2V6b25lc1tpXTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03MDgtXHRcdHN0cnVjdCBmaWxlICpmaWxlID0gem9uZS1cdTAwM2VmaWxlO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTcwOS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzo3MTA6XHRcdGlmICghemxvb3Bfem9uZV9pc19hY3RpdmUoem9uZSkpXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzExLVx0XHRcdGNvbnRpbnVlO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTcxMi1cdFx0cmV0ID0gdmZzX3NldHhhdHRyKGZpbGVfbW50X2lkbWFwKGZpbGUpLCBmaWxlX2RlbnRyeShmaWxlKSxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo3MTM6XHRcdFx0XHRcJiMzNDt1c2VyLnpsb29wLndwXCYjMzQ7LCBcdTAwMjZ6b25lLVx1MDAzZXdwLCBzaXplb2Yoem9uZS1cdTAwM2V3cCksIDApO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTcxNC1cdFx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy03MjYtICovXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NzI3OnN0YXRpYyBpbnQgemxvb3BfZmx1c2goc3RydWN0IHpsb29wX2RldmljZSAqemxvKVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTcyOC17XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTczMi1cdGlmICh6bG8tXHUwMDNlZGlzY2FyZF93cml0ZV9jYWNoZSkge1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjczMzpcdFx0cmV0ID0gemxvb3BfcmVjb3JkX3NhZmVfd3BzKHpsbyk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzM0LVx0XHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy03NDQtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NzQ1OnN0YXRpYyB2b2lkIHpsb29wX2hhbmRsZV9jbWQoc3RydWN0IHpsb29wX2NtZCAqY21kKVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc0Ni17XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzQ3LVx0c3RydWN0IHJlcXVlc3QgKnJxID0gYmxrX21xX3JxX2Zyb21fcGR1KGNtZCk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NzQ4Olx0c3RydWN0IHpsb29wX2RldmljZSAqemxvID0gcnEtXHUwMDNlcS1cdTAwM2VxdWV1ZWRhdGE7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzQ5LVxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy03NTgtXHRcdC8qXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NzU5Olx0XHQgKiB6bG9vcF9ydygpIGFsd2F5cyBleGVjdXRlcyBhc3luY2hyb25vdXNseSBvciBjb21wbGV0ZXNcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03NjAtXHRcdCAqIGRpcmVjdGx5LlxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc2MS1cdFx0ICovXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NzYyOlx0XHR6bG9vcF9ydyhjbWQpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTc2My1cdFx0cmV0dXJuO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTc2NC1cdGNhc2UgUkVRX09QX0ZMVVNIOlxuZHJpdmVycy9ibG9jay96bG9vcC5jOjc2NTpcdFx0Y21kLVx1MDAzZXJldCA9IHpsb29wX2ZsdXNoKHpsbyk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzY2LVx0XHRicmVhaztcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03NjctXHRjYXNlIFJFUV9PUF9aT05FX1JFU0VUOlxuZHJpdmVycy9ibG9jay96bG9vcC5jOjc2ODpcdFx0Y21kLVx1MDAzZXJldCA9IHpsb29wX3Jlc2V0X3pvbmUoemxvLCBycV96b25lX25vKHJxKSk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzY5LVx0XHRicmVhaztcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03NzAtXHRjYXNlIFJFUV9PUF9aT05FX1JFU0VUX0FMTDpcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo3NzE6XHRcdGNtZC1cdTAwM2VyZXQgPSB6bG9vcF9yZXNldF9hbGxfem9uZXMoemxvKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03NzItXHRcdGJyZWFrO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTc3My1cdGNhc2UgUkVRX09QX1pPTkVfRklOSVNIOlxuZHJpdmVycy9ibG9jay96bG9vcC5jOjc3NDpcdFx0Y21kLVx1MDAzZXJldCA9IHpsb29wX2ZpbmlzaF96b25lKHpsbywgcnFfem9uZV9ubyhycSkpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTc3NS1cdFx0YnJlYWs7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzc2LVx0Y2FzZSBSRVFfT1BfWk9ORV9PUEVOOlxuZHJpdmVycy9ibG9jay96bG9vcC5jOjc3NzpcdFx0Y21kLVx1MDAzZXJldCA9IHpsb29wX29wZW5fem9uZSh6bG8sIHJxX3pvbmVfbm8ocnEpKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03NzgtXHRcdGJyZWFrO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTc3OS1cdGNhc2UgUkVRX09QX1pPTkVfQ0xPU0U6XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NzgwOlx0XHRjbWQtXHUwMDNlcmV0ID0gemxvb3BfY2xvc2Vfem9uZSh6bG8sIHJxX3pvbmVfbm8ocnEpKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03ODEtXHRcdGJyZWFrO1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy03OTEtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NzkyOnN0YXRpYyB2b2lkIHpsb29wX2NtZF93b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc5My17XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6Nzk0Olx0c3RydWN0IHpsb29wX2NtZCAqY21kID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB6bG9vcF9jbWQsIHdvcmspO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTc5NS1cdGludCBvcmlnX2ZsYWdzID0gY3VycmVudC1cdTAwM2VmbGFncztcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzk3LVx0Y3VycmVudC1cdTAwM2VmbGFncyB8PSBQRl9MT0NBTF9USFJPVFRMRSB8IFBGX01FTUFMTE9DX05PSU87XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6Nzk4Olx0emxvb3BfaGFuZGxlX2NtZChjbWQpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTc5OS1cdGN1cnJlbnQtXHUwMDNlZmxhZ3MgPSBvcmlnX2ZsYWdzO1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy04MDEtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6ODAyOnN0YXRpYyB2b2lkIHpsb29wX2NvbXBsZXRlX3JxKHN0cnVjdCByZXF1ZXN0ICpycSlcbmRyaXZlcnMvYmxvY2svemxvb3AuYy04MDMte1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjgwNDpcdHN0cnVjdCB6bG9vcF9jbWQgKmNtZCA9IGJsa19tcV9ycV90b19wZHUocnEpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjgwNTpcdHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyA9IHJxLVx1MDAzZXEtXHUwMDNlcXVldWVkYXRhO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTgwNi1cdHVuc2lnbmVkIGludCB6b25lX25vID0gY21kLVx1MDAzZXNlY3RvciBcdTAwM2VcdTAwM2UgemxvLVx1MDAzZXpvbmVfc2hpZnQ7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6ODA3Olx0c3RydWN0IHpsb29wX3pvbmUgKnpvbmUgPSBcdTAwMjZ6bG8tXHUwMDNlem9uZXNbem9uZV9ub107XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtODA4LVx0YmxrX3N0YXR1c190IHN0cyA9IEJMS19TVFNfT0s7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTg1OS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzo4NjA6c3RhdGljIGJvb2wgemxvb3Bfc2V0X3pvbmVfYXBwZW5kX3NlY3RvcihzdHJ1Y3QgcmVxdWVzdCAqcnEpXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtODYxLXtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo4NjI6XHRzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8gPSBycS1cdTAwM2VxLVx1MDAzZXF1ZXVlZGF0YTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy04NjMtXHR1bnNpZ25lZCBpbnQgem9uZV9ubyA9IHJxX3pvbmVfbm8ocnEpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjg2NDpcdHN0cnVjdCB6bG9vcF96b25lICp6b25lID0gXHUwMDI2emxvLVx1MDAzZXpvbmVzW3pvbmVfbm9dO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTg2NS1cdHNlY3Rvcl90IHpvbmVfZW5kID0gem9uZS1cdTAwM2VzdGFydCAmIzQzOyB6bG8tXHUwMDNlem9uZV9jYXBhY2l0eTtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtODc4LVx0aWYgKHpvbmUtXHUwMDNld3AgXHUwMDNlPSB6b25lX2VuZClcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo4Nzk6XHRcdHpsb29wX21hcmtfZnVsbCh6bG8sIHpvbmUpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTg4MC1cbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtODg1LVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjg4NjpzdGF0aWMgYmxrX3N0YXR1c190IHpsb29wX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTg4Ny1cdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBibGtfbXFfcXVldWVfZGF0YSAqYmQpXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTg4OS1cdHN0cnVjdCByZXF1ZXN0ICpycSA9IGJkLVx1MDAzZXJxO1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjg5MDpcdHN0cnVjdCB6bG9vcF9jbWQgKmNtZCA9IGJsa19tcV9ycV90b19wZHUocnEpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjg5MTpcdHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyA9IHJxLVx1MDAzZXEtXHUwMDNlcXVldWVkYXRhO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTg5Mi1cbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTAzLVx0aWYgKHpsby1cdTAwM2VvcmRlcmVkX3pvbmVfYXBwZW5kIFx1MDAyNlx1MDAyNiByZXFfb3AocnEpID09IFJFUV9PUF9aT05FX0FQUEVORCkge1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjkwNDpcdFx0aWYgKCF6bG9vcF9zZXRfem9uZV9hcHBlbmRfc2VjdG9yKHJxKSlcbmRyaXZlcnMvYmxvY2svemxvb3AuYy05MDUtXHRcdFx0cmV0dXJuIEJMS19TVFNfSU9FUlI7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTkwOS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzo5MTA6XHRJTklUX1dPUksoXHUwMDI2Y21kLVx1MDAzZXdvcmssIHpsb29wX2NtZF93b3JrZm4pO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTkxMS1cdHF1ZXVlX3dvcmsoemxvLVx1MDAzZXdvcmtxdWV1ZSwgXHUwMDI2Y21kLVx1MDAzZXdvcmspO1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy05MTUtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6OTE2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxrX21xX29wcyB6bG9vcF9tcV9vcHMgPSB7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6OTE3Olx0LnF1ZXVlX3JxICAgICAgID0gemxvb3BfcXVldWVfcnEsXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6OTE4Olx0LmNvbXBsZXRlXHQ9IHpsb29wX2NvbXBsZXRlX3JxLFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTkxOS19O1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTkyMC1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzo5MjE6c3RhdGljIGludCB6bG9vcF9vcGVuKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBibGtfbW9kZV90IG1vZGUpXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTIyLXtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo5MjM6XHRzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8gPSBkaXNrLVx1MDAzZXByaXZhdGVfZGF0YTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy05MjQtXHRpbnQgcmV0O1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTkyNS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzo5MjY6XHRyZXQgPSBtdXRleF9sb2NrX2tpbGxhYmxlKFx1MDAyNnpsb29wX2N0bF9tdXRleCk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTI3LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTMxLVx0XHRyZXQgPSAtRU5YSU87XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6OTMyOlx0bXV0ZXhfdW5sb2NrKFx1MDAyNnpsb29wX2N0bF9tdXRleCk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTMzLVx0cmV0dXJuIHJldDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTM1LVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjkzNjpzdGF0aWMgaW50IHpsb29wX3JlcG9ydF96b25lcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgc2VjdG9yX3Qgc2VjdG9yLFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTkzNy1cdFx0dW5zaWduZWQgaW50IG5yX3pvbmVzLCBzdHJ1Y3QgYmxrX3JlcG9ydF96b25lc19hcmdzICphcmdzKVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTkzOC17XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6OTM5Olx0c3RydWN0IHpsb29wX2RldmljZSAqemxvID0gZGlzay1cdTAwM2Vwcml2YXRlX2RhdGE7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTQwLVx0c3RydWN0IGJsa196b25lIGJsa3ogPSB7fTtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTUwLVx0XHR1bnNpZ25lZCBpbnQgem9uZV9ubyA9IGZpcnN0ICYjNDM7IGk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6OTUxOlx0XHRzdHJ1Y3Qgemxvb3Bfem9uZSAqem9uZSA9IFx1MDAyNnpsby1cdTAwM2V6b25lc1t6b25lX25vXTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy05NTItXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTk1NS1cdFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChaTE9PUF9aT05FX1NFUV9FUlJPUiwgXHUwMDI2em9uZS1cdTAwM2VmbGFncykpIHtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo5NTY6XHRcdFx0cmV0ID0gemxvb3BfdXBkYXRlX3NlcV96b25lKHpsbywgem9uZV9ubyk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTU3LVx0XHRcdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTg2LVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjk4NzpzdGF0aWMgdm9pZCB6bG9vcF9mcmVlX2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTg4LXtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo5ODk6XHRzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8gPSBkaXNrLVx1MDAzZXByaXZhdGVfZGF0YTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy05OTAtXHR1bnNpZ25lZCBpbnQgaTtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTk0LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgemxvLVx1MDAzZW5yX3pvbmVzOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjk5NTpcdFx0c3RydWN0IHpsb29wX3pvbmUgKnpvbmUgPSBcdTAwMjZ6bG8tXHUwMDNlem9uZXNbaV07XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTk2LVxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDA3LVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEwMDg6c3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyB6bG9vcF9mb3BzID0ge1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwMDktXHQub3duZXJcdFx0XHQ9IFRISVNfTU9EVUxFLFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEwMTA6XHQub3Blblx0XHRcdD0gemxvb3Bfb3BlbixcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMDExOlx0LnJlcG9ydF96b25lc1x0XHQ9IHpsb29wX3JlcG9ydF96b25lcyxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMDEyOlx0LmZyZWVfZGlza1x0XHQ9IHpsb29wX2ZyZWVfZGlzayxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDEzLX07XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jPTEwMTU9X19wcmludGYoMywgNClcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMDE2OnN0YXRpYyBzdHJ1Y3QgZmlsZSAqemxvb3BfZmlscF9vcGVuX2ZtdChpbnQgb2ZsYWdzLCB1bW9kZV90IG1vZGUsXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTAxNy1cdFx0Y29uc3QgY2hhciAqZm10LCAuLi4pXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwMzMtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTAzNDpzdGF0aWMgaW50IHpsb29wX2dldF9ibG9ja19zaXplKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMDM1Olx0XHRcdFx0c3RydWN0IHpsb29wX3pvbmUgKnpvbmUpXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTAzNi17XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwNzQtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTA3NTpzdGF0aWMgaW50IHpsb29wX2luaXRfem9uZShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8sIHN0cnVjdCB6bG9vcF9vcHRpb25zICpvcHRzLFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwNzYtXHRcdFx0ICAgdW5zaWduZWQgaW50IHpvbmVfbm8sIGJvb2wgcmVzdG9yZSlcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDc3LXtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMDc4Olx0c3RydWN0IHpsb29wX3pvbmUgKnpvbmUgPSBcdTAwMjZ6bG8tXHUwMDNlem9uZXNbem9uZV9ub107XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTA3OS1cdGludCBvZmxhZ3MgPSBPX1JEV1I7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExMDAtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTEwMTpcdFx0em9uZS1cdTAwM2VmaWxlID0gemxvb3BfZmlscF9vcGVuX2ZtdChvZmxhZ3MsIDA2MDAsIFwmIzM0OyVzLyV1L2Nudi0lMDZ1XCYjMzQ7LFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExMDItXHRcdFx0XHRcdHpsby1cdTAwM2ViYXNlX2RpciwgemxvLVx1MDAzZWlkLCB6b25lX25vKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTExMC1cdFx0aWYgKCF6bG8tXHUwMDNlYmxvY2tfc2l6ZSkge1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjExMTE6XHRcdFx0cmV0ID0gemxvb3BfZ2V0X2Jsb2NrX3NpemUoemxvLCB6b25lKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTEyLVx0XHRcdGlmIChyZXQpXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExNDAtXHQvKiBTZXF1ZW50aWFsIHpvbmUgZmlsZS4gKi9cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMTQxOlx0em9uZS1cdTAwM2VmaWxlID0gemxvb3BfZmlscF9vcGVuX2ZtdChvZmxhZ3MsIDA2MDAsIFwmIzM0OyVzLyV1L3NlcS0lMDZ1XCYjMzQ7LFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExNDItXHRcdFx0XHRcdCB6bG8tXHUwMDNlYmFzZV9kaXIsIHpsby1cdTAwM2VpZCwgem9uZV9ubyk7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExNTAtXHRpZiAoIXpsby1cdTAwM2VibG9ja19zaXplKSB7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTE1MTpcdFx0cmV0ID0gemxvb3BfZ2V0X2Jsb2NrX3NpemUoemxvLCB6b25lKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTUyLVx0XHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTU1LVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjExNTY6XHR6bG9vcF9nZXRfYmxvY2tfc2l6ZSh6bG8sIHpvbmUpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTExNTctXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE1OC1cdG11dGV4X2xvY2soXHUwMDI2em9uZS1cdTAwM2Vsb2NrKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMTU5Olx0cmV0ID0gemxvb3BfdXBkYXRlX3NlcV96b25lKHpsbywgem9uZV9ubyk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE2MC1cdG11dGV4X3VubG9jayhcdTAwMjZ6b25lLVx1MDAzZWxvY2spO1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTY0LVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjExNjU6c3RhdGljIGJvb2wgemxvb3BfZGV2X2V4aXN0cyhzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8pXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE2Ni17XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExNjktXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTE3MDpcdGNudiA9IHpsb29wX2ZpbHBfb3Blbl9mbXQoT19SRE9OTFksIDA2MDAsIFwmIzM0OyVzLyV1L2Nudi0lMDZ1XCYjMzQ7LFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExNzEtXHRcdFx0XHQgIHpsby1cdTAwM2ViYXNlX2RpciwgemxvLVx1MDAzZWlkLCAwKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMTcyOlx0c2VxID0gemxvb3BfZmlscF9vcGVuX2ZtdChPX1JET05MWSwgMDYwMCwgXCYjMzQ7JXMvJXUvc2VxLSUwNnVcJiMzNDssXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE3My1cdFx0XHRcdCAgemxvLVx1MDAzZWJhc2VfZGlyLCB6bG8tXHUwMDNlaWQsIDApO1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTgzLVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjExODQ6c3RhdGljIGludCB6bG9vcF9jdGxfYWRkKHN0cnVjdCB6bG9vcF9vcHRpb25zICpvcHRzKVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExODUte1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTkyLVx0dW5zaWduZWQgaW50IG5yX3pvbmVzLCBpLCBqO1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjExOTM6XHRzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG87XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE5NC1cdGludCByZXQgPSAtRUlOVkFMO1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMjIwLVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEyMjE6XHRyZXQgPSBtdXRleF9sb2NrX2tpbGxhYmxlKFx1MDAyNnpsb29wX2N0bF9tdXRleCk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTIyMi1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEyMjYtXHRpZiAob3B0cy1cdTAwM2VpZCBcdTAwM2U9IDApIHtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMjI3Olx0XHRyZXQgPSBpZHJfYWxsb2MoXHUwMDI2emxvb3BfaW5kZXhfaWRyLCB6bG8sXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTIyOC1cdFx0XHRcdCAgb3B0cy1cdTAwM2VpZCwgb3B0cy1cdTAwM2VpZCAmIzQzOyAxLCBHRlBfS0VSTkVMKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTIzMS1cdH0gZWxzZSB7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTIzMjpcdFx0cmV0ID0gaWRyX2FsbG9jKFx1MDAyNnpsb29wX2luZGV4X2lkciwgemxvLCAwLCAwLCBHRlBfS0VSTkVMKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMjMzLVx0fVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEyMzQ6XHRtdXRleF91bmxvY2soXHUwMDI2emxvb3BfY3RsX211dGV4KTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMjM1LVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTI1My1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMjU0Olx0emxvLVx1MDAzZXdvcmtxdWV1ZSA9IGFsbG9jX3dvcmtxdWV1ZShcJiMzNDt6bG9vcCVkXCYjMzQ7LCBXUV9VTkJPVU5EIHwgV1FfRlJFRVpBQkxFLFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEyNTUtXHRcdFx0XHRvcHRzLVx1MDAzZW5yX3F1ZXVlcyAqIG9wdHMtXHUwMDNlcXVldWVfZGVwdGgsIHpsby1cdTAwM2VpZCk7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEyNjktXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTI3MDpcdHpsby1cdTAwM2VkYXRhX2RpciA9IHpsb29wX2ZpbHBfb3Blbl9mbXQoT19SRE9OTFkgfCBPX0RJUkVDVE9SWSwgMCwgXCYjMzQ7JXMvJXVcJiMzNDssXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTI3MS1cdFx0XHRcdFx0ICAgIHpsby1cdTAwM2ViYXNlX2RpciwgemxvLVx1MDAzZWlkKTtcbi0tXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAxNzo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODg2MgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFpvbmVkIExvb3AgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIHRoZSBwYXRjaCBpcyBkZWZpbml0ZWx5IHdvcmtpbmcgd2l0aCBgemxvb3BgIOKAkyBnb29kLCBpdCYjMzk7cyBhIHJlYWwgZHJpdmVyIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaGVyZS4gQW5kIGl0JiMzOTtzIG5vdCBqdXN0IHRoYXQsIGl0JiMzOTtzIGFsc28gdG91Y2hpbmcgdGhlIHN0YW5kYXJkIGBsb29wYCBkcml2ZXIsIHdoaWNoIG1ha2VzIHNlbnNlIGZvciBjb21wYXRpYmlsaXR5LCBJIHN1cHBvc2UuIFRoZSBtb2RpZmljYXRpb25zIGV4dGVuZCBmdXJ0aGVyLCB0aG91Z2g7IHRoaXMgZ2V0cyBpbnRlcmVzdGluZy4gSSBzZWUgaXQmIzM5O3MgYWxzbyBtYWtpbmcgY2hhbmdlcyB0byBgYmlvX2lvdl9pdGVyX2dldF9wYWdlc2AgYW5kIGBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzYC4gVGhpcyBzdWdnZXN0cyB0aGUgcGF0Y2ggaXMgbGlrZWx5IGRlYWxpbmcgd2l0aCBkYXRhIHRyYW5zZmVyIG1lY2hhbmlzbXMgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggYm90aCB0aGUgbG9vcCBhbmQgem9uZWQgbG9vcCBibG9jayBkZXZpY2VzIGF0IGEgbG93ZXIgbGV2ZWwuCgpOb3csIEkgbmVlZCB0byBsb29rIGF0IHRoZSBjb25maWd1cmF0aW9ucyByZXF1aXJlZC4gVGhlIG5lY2Vzc2FyeSBrZXJuZWwgY29uZmlncyBhcmUgYENPTkZJR19CTEtfREVWX0xPT1BgIGFuZCBgQ09ORklHX0JMS19ERVZfWk9ORURfTE9PUGAsIGFzIGV4cGVjdGVkLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBgQ09ORklHX0JMS19ERVZfWk9ORURfTE9PUGAgd2l0aGluIHRoZSBgZHJpdmVycy9ibG9jay9LY29uZmlnYCBmaWxlLiBUaGF0IHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBicm9hZGVyIGNvbnRleHQgYW5kIGRlcGVuZGVuY2llcyBvZiB0aGlzIG5ldyBmdW5jdGlvbmFsaXR5LCBhbmQgZW5zdXJlIGV2ZXJ5dGhpbmcgaXMgc2V0IHVwIGNvcnJlY3RseSBpbiB0aGUgYnVpbGQgZW52aXJvbm1lbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgem9uaW5nIGltcGxlbWVudGF0aW9uIHRvIHZlcmlmeSB0aGF0IGl0JiMzOTtzIGRlc2lnbmVkIGluIGEgcGVyZm9ybWFudCBhbmQgY29tcGF0aWJsZSB3YXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTc6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19ERVZfWk9ORURfTE9PUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svS2NvbmZpZz0zNTQ9c291cmNlIFwmIzM0O2RyaXZlcnMvYmxvY2svcm5iZC9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzU1LVxuZHJpdmVycy9ibG9jay9LY29uZmlnOjM1Njpjb25maWcgQkxLX0RFVl9aT05FRF9MT09QXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzU3LVx0dHJpc3RhdGUgXCYjMzQ7Wm9uZWQgbG9vcGJhY2sgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAxNzo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTM3MAoJCQkJCQkJb3V0cHV0OiAyMDMKCQkJCQkJCXRob3VnaHRzOiAxMDkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRm9jdXMgZm9yIEJsb2NrIExheWVyIERpcmVjdCBJL08gYW5kIExvb3AgRHJpdmVycyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBhcmVhcyBhbmQgY29uZmlndXJhdGlvbnMgZm9yIGZ1enppbmcgdGhpcyBkaXJlY3QgSS9PIGxvZ2ljLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBibG9jayBsYXllciBhbmQgbG9vcCBkcml2ZXJzLiAgSSYjMzk7dmUgYWxyZWFkeSBpZGVudGlmaWVkIHR3byBjb25maWd1cmF0aW9ucyB0aGF0IHNlZW0gcmVsZXZhbnQ6IGBCTEtfREVWX0xPT1BgIGFuZCBgQkxLX0RFVl9aT05FRF9MT09QYC4gSSYjMzk7bSBvbWl0dGluZyBgREVCVUdfS0VSTkVMYCBhcyB0aGUgcHJvbXB0IGluZGljYXRlcyBpdCBpcyBhIG1vcmUgZ2VuZXJhbCBjb25maWcgdGhhdCB3ZSBsaWtlbHkgYWxyZWFkeSBoYXZlIGVuYWJsZWQuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucy4gSW5pdGlhbGx5LCBJIGhhZCBhIGxpc3QsIGJ1dCBpdCYjMzk7cyBpbXBvcnRhbnQgdG8gcmVmaW5lIHRoaXMuICBJ4oCZdmUgaWRlbnRpZmllZCBgYmlvX2lvdl9pdGVyX2dldF9wYWdlc2AsIGBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzYCwgYGxvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnRgLCBgbG9vcF9zZXRfZG1hX2xpbWl0YCwgYHpsb29wX2dldF9ibG9ja19zaXplYCwgYW5kIGB6bG9vcF9jdGxfYWRkYCBhcyBwb3RlbnRpYWwgZm9jdXMgc3ltYm9scy4gSSBhbHNvIHNwb3R0ZWQgYGJpb19pb3ZfYnZlY19hbGlnbmVkYCwgYnV0IHNpbmNlIGl0JiMzOTtzIGFuIGlubGluZSBmdW5jdGlvbiwgaXQmIzM5O3MgcHJvYmFibHkgbm90IGFzIGltcGFjdGZ1bCBmb3IgZnV6emluZyBhcyBhbiBleHBvcnRlZCBvbmUuIFRoZXJlZm9yZSwgSeKAmW0gZHJvcHBpbmcgaXQuCgpJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCB0aGUgcmVzdCBhcmUgc3RhdGljIHdpdGhpbiB0aGUgbG9vcCBhbmQgemxvb3AgZHJpdmVycyBidXQgZXhwb3J0ZWQgZnJvbSB0aGVpciByZXNwZWN0aXZlIGZpbGVzLCB3aGljaCBtYWtlcyB0aGVtIGdvb2QgY2FuZGlkYXRlcy4gYGJpb19pb3ZfaXRlcl9nZXRfcGFnZXNgIGlzIGV4cG9ydGVkIGFuZCB1c2VkIHRocm91Z2hvdXQgdGhlIGJsb2NrIGxheWVyLCBhbmQgYGlvdl9pdGVyX2V4dHJhY3RfYnZlY3NgIGlzIGFsc28gZXhwb3J0ZWQuICBUaGlzIG1ha2VzIHRoZW0gcHJpbWUgdGFyZ2V0cy4gVGhlIGxvb3AgYW5kIHpsb29wIGZ1bmN0aW9ucyBhcmUgYWxzbyBjcml0aWNhbCwgYmVjYXVzZSB0aGV5IGhhbmRsZSB0aGUgZGF0YSBwYXRoIG1vZGlmaWNhdGlvbnMuCgpTbywgaGVyZSYjMzk7cyB0aGUgZmluYWwgbGlzdDoKCioqQ29uZmlndXJhdGlvbnM6KioKKiAgIGBCTEtfREVWX0xPT1BgCiogICBgQkxLX0RFVl9aT05FRF9MT09QYAoKKipGb2N1cyBTeW1ib2xzOioqCiogICBgYmlvX2lvdl9pdGVyX2dldF9wYWdlc2AKKiAgIGBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzYAoqICAgYGxvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnRgCiogICBgbG9vcF9zZXRfZG1hX2xpbWl0YAoqICAgYHpsb29wX2dldF9ibG9ja19zaXplYAoqICAgYHpsb29wX2N0bF9hZGRgCgpUaGUgcGF0Y2ggaXMgdG91Y2hpbmcgY29yZSBibG9jayBsYXllciBmdW5jdGlvbmFsaXR5LCBhbmQgSS9PIGFuZCBhbGlnbm1lbnQsIHNvIHRoZXNlIGFyZSB0aGUgYXJlYXMgdG8gaG9uZSBpbiBvbi4gSXQgYWxzbyB1cGRhdGVzIHRoZSBsb29wIGRyaXZlcnMsIHNvIHRob3NlIGZ1bmN0aW9ucyB3aWxsIG5lZWQgdG8gYmUgd2VsbC1jb3ZlcmVkIGluIHRlc3RpbmcuIFRoaXMgc2VlbXMgbGlrZSBhIHNvbGlkIHNldCBvZiB0YXJnZXRzIGZvciBmdXp6aW5nIHRvIHVuY292ZXIgcG90ZW50aWFsIGlzc3VlcyByZWxhdGVkIHRvIGFsaWdubWVudCBjaGVja3MgYW5kIERNQSBsaW1pdHMsIHBhcnRpY3VsYXJseSBpbiB0aGUgY29udGV4dCBvZiBkaXJlY3QgSS9PIHdpdGhpbiB0aGUgYmxvY2sgbGF5ZXIgYW5kIGxvb3AgZHJpdmVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAxNzo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9MT09QJiMzNDssCiAgICAmIzM0O0JMS19ERVZfWk9ORURfTE9PUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Jpb19pb3ZfaXRlcl9nZXRfcGFnZXMmIzM0OywKICAgICYjMzQ7aW92X2l0ZXJfZXh0cmFjdF9idmVjcyYjMzQ7LAogICAgJiMzNDtsb29wX3VwZGF0ZV9kaW9fYWxpZ25tZW50JiMzNDssCiAgICAmIzM0O2xvb3Bfc2V0X2RtYV9saW1pdCYjMzQ7LAogICAgJiMzNDt6bG9vcF9nZXRfYmxvY2tfc2l6ZSYjMzQ7LAogICAgJiMzNDt6bG9vcF9jdGxfYWRkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGJsb2NrIGxheWVyIGRpcmVjdCBJL08gbG9naWMgdG8gZW5mb3JjZSBtZW1vcnkgYWxpZ25tZW50IGNoZWNrcyB2aWEgYGJpb19pb3ZfaXRlcl9nZXRfcGFnZXNgIGFuZCBgaW92X2l0ZXJfZXh0cmFjdF9idmVjc2AuIEl0IGFsc28gdXBkYXRlcyB0aGUgYGxvb3BgIGFuZCBgemxvb3BgIGRyaXZlcnMgdG8gY29ycmVjdGx5IHNldCBETUEgbGltaXRzIGJhc2VkIG9uIHRoZSBiYWNraW5nIGZpbGUmIzM5O3MgZGlyZWN0IEkvTyBhbGlnbm1lbnQuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgYmxvY2sgbGF5ZXIgZnVuY3Rpb25hbGl0eSBhbmQgZHJpdmVyIGJlaGF2aW9yLCBtYWtpbmcgdGhlbSBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTE9PUCYjMzQ7LAogICAgJiMzNDtCTEtfREVWX1pPTkVEX0xPT1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzJiMzNDssCiAgICAmIzM0O2lvdl9pdGVyX2V4dHJhY3RfYnZlY3MmIzM0OywKICAgICYjMzQ7bG9vcF91cGRhdGVfZGlvX2FsaWdubWVudCYjMzQ7LAogICAgJiMzNDtsb29wX3NldF9kbWFfbGltaXQmIzM0OywKICAgICYjMzQ7emxvb3BfZ2V0X2Jsb2NrX3NpemUmIzM0OywKICAgICYjMzQ7emxvb3BfY3RsX2FkZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBibG9jayBsYXllciBkaXJlY3QgSS9PIGxvZ2ljIHRvIGVuZm9yY2UgbWVtb3J5IGFsaWdubWVudCBjaGVja3MgdmlhIGBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzYCBhbmQgYGlvdl9pdGVyX2V4dHJhY3RfYnZlY3NgLiBJdCBhbHNvIHVwZGF0ZXMgdGhlIGBsb29wYCBhbmQgYHpsb29wYCBkcml2ZXJzIHRvIGNvcnJlY3RseSBzZXQgRE1BIGxpbWl0cyBiYXNlZCBvbiB0aGUgYmFja2luZyBmaWxlJiMzOTtzIGRpcmVjdCBJL08gYWxpZ25tZW50LiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIGJsb2NrIGxheWVyIGZ1bmN0aW9uYWxpdHkgYW5kIGRyaXZlciBiZWhhdmlvciwgbWFraW5nIHRoZW0gaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTc6NDI6MjIuNjkwMDE1MzAzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc1OTU5MDkwNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9MT09QXCIsXG4gICAgXCJCTEtfREVWX1pPTkVEX0xPT1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzXCIsXG4gICAgXCJpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzXCIsXG4gICAgXCJsb29wX3VwZGF0ZV9kaW9fYWxpZ25tZW50XCIsXG4gICAgXCJsb29wX3NldF9kbWFfbGltaXRcIixcbiAgICBcInpsb29wX2dldF9ibG9ja19zaXplXCIsXG4gICAgXCJ6bG9vcF9jdGxfYWRkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYmxvY2sgbGF5ZXIgZGlyZWN0IEkvTyBsb2dpYyB0byBlbmZvcmNlIG1lbW9yeSBhbGlnbm1lbnQgY2hlY2tzIHZpYSBgYmlvX2lvdl9pdGVyX2dldF9wYWdlc2AgYW5kIGBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzYC4gSXQgYWxzbyB1cGRhdGVzIHRoZSBgbG9vcGAgYW5kIGB6bG9vcGAgZHJpdmVycyB0byBjb3JyZWN0bHkgc2V0IERNQSBsaW1pdHMgYmFzZWQgb24gdGhlIGJhY2tpbmcgZmlsZSdzIGRpcmVjdCBJL08gYWxpZ25tZW50LiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIGJsb2NrIGxheWVyIGZ1bmN0aW9uYWxpdHkgYW5kIGRyaXZlciBiZWhhdmlvciwgbWFraW5nIHRoZW0gaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxNzo0MjoyMi42OTAwMjQ4NzNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODA2NDIxMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkYzVlMTZkZDU0YzhkMTA2ODdjOTRmNTA1NjkxYTA5ZDU3ZTE0ZjA4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVuIDI0IDE3OjQyOjIxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jpby5jIGIvYmxvY2svYmlvLmNcXG5pbmRleCBmMmE1ZjRkMGE5NjcyYi4uZmFhZDQxYTcyYWM3N2YgMTAwNjQ0XFxuLS0tIGEvYmxvY2svYmlvLmNcXG4rKysgYi9ibG9jay9iaW8uY1xcbkBAIC0xMjIwLDEwICsxMjIwLDQ1IEBAIHN0YXRpYyBpbnQgYmlvX2lvdl9pdGVyX2FsaWduX2Rvd24oc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbisjaWZkZWYgQ09ORklHX0RFQlVHX0tFUk5FTFxcbitzdGF0aWMgaW5saW5lIGJvb2wgYmlvX2lvdl9idmVjX2FsaWduZWQoY29uc3Qgc3RydWN0IGJpbyAqYmlvLFxcbitcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBtZW1fYWxpZ25fbWFzaylcXG4re1xcbitcXHRzdHJ1Y3QgYnZlY19pdGVyIGl0ZXI7XFxuK1xcdHN0cnVjdCBiaW9fdmVjIGJ2O1xcbitcXG4rXFx0LypcXG4rXFx0ICogQ29ycmVjdCBjYWxsZXJzIG5ldmVyIGJyZWFrIHRoZSBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzLCBzbyB0aGlzXFxuK1xcdCAqIGV4aGF1c3RpdmUgY2hlY2sgaXMgb25seSBwYWlkIGZvciBpbiBkZWJ1ZyBidWlsZHMuXFxuK1xcdCAqL1xcbitcXHRmb3JfZWFjaF9tcF9idmVjKGJ2LCBiaW8tXFx1MDAzZWJpX2lvX3ZlYywgaXRlciwgYmlvLVxcdTAwM2ViaV9pdGVyKVxcbitcXHRcXHRpZiAoKGJ2LmJ2X29mZnNldCB8IGJ2LmJ2X2xlbikgXFx1MDAyNiBtZW1fYWxpZ25fbWFzaylcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbisjZWxzZVxcbitzdGF0aWMgaW5saW5lIGJvb2wgYmlvX2lvdl9idmVjX2FsaWduZWQoY29uc3Qgc3RydWN0IGJpbyAqYmlvLFxcbitcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBtZW1fYWxpZ25fbWFzaylcXG4re1xcbitcXHQvKlxcbitcXHQgKiBXZSBmb3J3YXJkIHRoZSBiaW9fdmVjIGFzLWlzLCBzbyBJVEVSX0JWRUMgY2FsbGVycyBtdXN0IHByb3ZpZGVcXG4rXFx0ICogc2VnbWVudHMgYWxyZWFkeSBhbGlnbmVkIHRvIHRoZSBkZXZpY2UncyBETUEgYWxpZ25tZW50LiBUaGUgb25seVxcbitcXHQgKiB1bmNoZWNrZWQgdXNlci1jb250cm9sbGFibGUgb2Zmc2V0IHRoYXQgcmVhY2hlcyBoZXJlIGlzIGFuIGlvX3VyaW5nXFxuK1xcdCAqIHJlZ2lzdGVyZWQgYnVmZmVyIHdoZXJlIGp1c3QgdGhlIGZpcnN0IHNlZ21lbnQgY2FuIGJlIHVuYWxpZ25lZFxcbitcXHQgKiAodGhlIHJlc3QgaXMgdmlydHVhbGx5IGNvbnRpZ3VvdXMpLCBzbyBjaGVja2luZyBvbmx5IHRoYXQgb25lIGlzXFxuK1xcdCAqIHN1ZmZpY2llbnQgdG8ga25vdyBpZiB0aGUgZW50aXJlIHZlY3RvciBpcyB2YWxpZC5cXG4rXFx0ICovXFxuK1xcdHJldHVybiAhKG1wX2J2ZWNfaXRlcl9vZmZzZXQoYmlvLVxcdTAwM2ViaV9pb192ZWMsIGJpby1cXHUwMDNlYmlfaXRlcikgXFx1MDAyNlxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRtZW1fYWxpZ25fbWFzayk7XFxuK31cXG4rI2VuZGlmXFxuK1xcbiAvKipcXG4gICogYmlvX2lvdl9pdGVyX2dldF9wYWdlcyAtIGFkZCB1c2VyIG9yIGtlcm5lbCBwYWdlcyB0byBhIGJpb1xcbiAgKiBAYmlvOiBiaW8gdG8gYWRkIHBhZ2VzIHRvXFxuICAqIEBpdGVyOiBpb3YgaXRlcmF0b3IgZGVzY3JpYmluZyB0aGUgcmVnaW9uIHRvIGJlIGFkZGVkXFxuKyAqIEBtZW1fYWxpZ25fbWFzazogdGhlIG1hc2sgdGhlIHNvdXJjZSBhZGRyZXNzIGFuZCBsZW5ndGggbXVzdCBiZSBhbGlnbmVkIHRvLFxcbisgKlxcdDAgZm9yIG5vIHJlcXVpcmVtZW50XFxuICAqIEBsZW5fYWxpZ25fbWFzazogdGhlIG1hc2sgdG8gYWxpZ24gdGhlIHRvdGFsIHNpemUgdG8sIDAgZm9yIGFueSBsZW5ndGhcXG4gICpcXG4gICogVGhpcyB0YWtlcyBlaXRoZXIgYW4gaXRlcmF0b3IgcG9pbnRpbmcgdG8gdXNlciBtZW1vcnksIG9yIG9uZSBwb2ludGluZyB0b1xcbkBAIC0xMjQyLDcgKzEyNzcsNyBAQCBzdGF0aWMgaW50IGJpb19pb3ZfaXRlcl9hbGlnbl9kb3duKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbiAgKiBpcyByZXR1cm5lZCBvbmx5IGlmIDAgcGFnZXMgY291bGQgYmUgcGlubmVkLlxcbiAgKi9cXG4gaW50IGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuLVxcdFxcdFxcdCAgIHVuc2lnbmVkIGxlbl9hbGlnbl9tYXNrKVxcbitcXHRcXHRcXHQgICB1bnNpZ25lZCBtZW1fYWxpZ25fbWFzaywgdW5zaWduZWQgbGVuX2FsaWduX21hc2spXFxuIHtcXG4gXFx0aW92X2l0ZXJfZXh0cmFjdGlvbl90IGZsYWdzID0gMDtcXG4gXFxuQEAgLTEyNTEsNiArMTI4NiwxMCBAQCBpbnQgYmlvX2lvdl9pdGVyX2dldF9wYWdlcyhzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4gXFxuIFxcdGlmIChpb3ZfaXRlcl9pc19idmVjKGl0ZXIpKSB7XFxuIFxcdFxcdGJpb19pb3ZfYnZlY19zZXQoYmlvLCBpdGVyKTtcXG4rXFxuK1xcdFxcdGlmICghYmlvX2lvdl9idmVjX2FsaWduZWQoYmlvLCBtZW1fYWxpZ25fbWFzaykpXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4gXFx0XFx0aW92X2l0ZXJfYWR2YW5jZShpdGVyLCBiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSk7XFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuQEAgLTEyNjUsOCArMTMwNCwxOSBAQCBpbnQgYmlvX2lvdl9pdGVyX2dldF9wYWdlcyhzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4gXFxuIFxcdFxcdHJldCA9IGlvdl9pdGVyX2V4dHJhY3RfYnZlY3MoaXRlciwgYmlvLVxcdTAwM2ViaV9pb192ZWMsXFxuIFxcdFxcdFxcdFxcdEJJT19NQVhfU0laRSAtIGJpby1cXHUwMDNlYmlfaXRlci5iaV9zaXplLFxcbi1cXHRcXHRcXHRcXHRcXHUwMDI2YmlvLVxcdTAwM2ViaV92Y250LCBiaW8tXFx1MDAzZWJpX21heF92ZWNzLCBmbGFncyk7XFxuK1xcdFxcdFxcdFxcdFxcdTAwMjZiaW8tXFx1MDAzZWJpX3ZjbnQsIGJpby1cXHUwMDNlYmlfbWF4X3ZlY3MsXFxuK1xcdFxcdFxcdFxcdG1lbV9hbGlnbl9tYXNrLCBmbGFncyk7XFxuIFxcdFxcdGlmIChyZXQgXFx1MDAzYz0gMCkge1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBBIG1pc2FsaWduZWQgdmVjdG9yIGZhaWxzIHRoZSB3aG9sZSBJL08uICBSZWxlYXNlIGFueVxcbitcXHRcXHRcXHQgKiBwYWdlcyBwaW5uZWQgYnkgZWFybGllciBpdGVyYXRpb25zIGJlZm9yZSByZXR1cm5pbmdcXG4rXFx0XFx0XFx0ICogc2luY2UgdGhpcyBiaW8gd29uJ3QgYmUgc3VibWl0dGVkIHRvIHJlbGVhc2UgdGhlbS5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGlmIChyZXQgPT0gLUVJTlZBTCkge1xcbitcXHRcXHRcXHRcXHRiaW9fcmVsZWFzZV9wYWdlcyhiaW8sIGZhbHNlKTtcXG4rXFx0XFx0XFx0XFx0YmlvX2NsZWFyX2ZsYWcoYmlvLCBCSU9fUEFHRV9QSU5ORUQpO1xcbitcXHRcXHRcXHRcXHRiaW8tXFx1MDAzZWJpX3ZjbnQgPSAwO1xcbitcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdGlmICghYmlvLVxcdTAwM2ViaV92Y250KVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHRcXHRcXHRicmVhaztcXG5AQCAtMTM3Nyw3ICsxNDI3LDcgQEAgc3RhdGljIGludCBiaW9faW92X2l0ZXJfYm91bmNlX3JlYWQoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuIFxcdFxcdHNzaXplX3QgcmV0O1xcbiBcXG4gXFx0XFx0cmV0ID0gaW92X2l0ZXJfZXh0cmFjdF9idmVjcyhpdGVyLCBiaW8tXFx1MDAzZWJpX2lvX3ZlYyArIDEsIGxlbixcXG4tXFx0XFx0XFx0XFx0XFx1MDAyNmJpby1cXHUwMDNlYmlfdmNudCwgYmlvLVxcdTAwM2ViaV9tYXhfdmVjcyAtIDEsIDApO1xcbitcXHRcXHRcXHRcXHRcXHUwMDI2YmlvLVxcdTAwM2ViaV92Y250LCBiaW8tXFx1MDAzZWJpX21heF92ZWNzIC0gMSwgMCwgMCk7XFxuIFxcdFxcdGlmIChyZXQgXFx1MDAzYz0gMCkge1xcbiBcXHRcXHRcXHRpZiAoIWJpby1cXHUwMDNlYmlfdmNudCkge1xcbiBcXHRcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbmRpZmYgLS1naXQgYS9ibG9jay9ibGstbWFwLmMgYi9ibG9jay9ibGstbWFwLmNcXG5pbmRleCA3Njg1NDlmMTlmOTdlYy4uYzk1MzVlZmUxYTkxM2MgMTAwNjQ0XFxuLS0tIGEvYmxvY2svYmxrLW1hcC5jXFxuKysrIGIvYmxvY2svYmxrLW1hcC5jXFxuQEAgLTI3NCw3ICsyNzQsNyBAQCBzdGF0aWMgaW50IGJpb19tYXBfdXNlcl9pb3Yoc3RydWN0IHJlcXVlc3QgKnJxLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuIFxcdCAqIE5vIGFsaWdubWVudCByZXF1aXJlbWVudHMgb24gb3VyIHBhcnQgdG8gc3VwcG9ydCBhcmJpdHJhcnlcXG4gXFx0ICogcGFzc3Rocm91Z2ggY29tbWFuZHMuXFxuIFxcdCAqL1xcbi1cXHRyZXQgPSBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKGJpbywgaXRlciwgMCk7XFxuK1xcdHJldCA9IGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoYmlvLCBpdGVyLCAwLCAwKTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0Z290byBvdXRfcHV0O1xcbiBcXHRyZXQgPSBibGtfcnFfYXBwZW5kX2JpbyhycSwgYmlvKTtcXG5kaWZmIC0tZ2l0IGEvYmxvY2svZm9wcy5jIGIvYmxvY2svZm9wcy5jXFxuaW5kZXggMTU3ODNhNjE4MGRlYzEuLmU1MTlkN2Y0M2IzMTA2IDEwMDY0NFxcbi0tLSBhL2Jsb2NrL2ZvcHMuY1xcbisrKyBiL2Jsb2NrL2ZvcHMuY1xcbkBAIC00Niw3ICs0Niw3IEBAIHN0YXRpYyBib29sIGJsa2Rldl9kaW9faW52YWxpZChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXFxuIHN0YXRpYyBpbmxpbmUgaW50IGJsa2Rldl9pb3ZfaXRlcl9nZXRfcGFnZXMoc3RydWN0IGJpbyAqYmlvLFxcbiBcXHRcXHRzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpXFxuIHtcXG4tXFx0cmV0dXJuIGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoYmlvLCBpdGVyLFxcbitcXHRyZXR1cm4gYmlvX2lvdl9pdGVyX2dldF9wYWdlcyhiaW8sIGl0ZXIsIGJkZXZfZG1hX2FsaWdubWVudChiZGV2KSxcXG4gXFx0XFx0XFx0YmRldl9sb2dpY2FsX2Jsb2NrX3NpemUoYmRldikgLSAxKTtcXG4gfVxcbiBcXG5AQCAtMjE4LDcgKzIxOCw3IEBAIHN0YXRpYyBzc2l6ZV90IF9fYmxrZGV2X2RpcmVjdF9JTyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4gXFxuIFxcdFxcdHJldCA9IGJsa2Rldl9pb3ZfaXRlcl9nZXRfcGFnZXMoYmlvLCBpdGVyLCBiZGV2KTtcXG4gXFx0XFx0aWYgKHVubGlrZWx5KHJldCkpIHtcXG4tXFx0XFx0XFx0YmlvX2VuZGlvX3N0YXR1cyhiaW8sIEJMS19TVFNfSU9FUlIpO1xcbitcXHRcXHRcXHRiaW9fZW5kaW9fc3RhdHVzKGJpbywgZXJybm9fdG9fYmxrX3N0YXR1cyhyZXQpKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG4gXFx0XFx0aWYgKGlvY2ItXFx1MDAzZWtpX2ZsYWdzIFxcdTAwMjYgSU9DQl9OT1dBSVQpIHtcXG5AQCAtMjM4LDggKzIzOCwxMCBAQCBzdGF0aWMgc3NpemVfdCBfX2Jsa2Rldl9kaXJlY3RfSU8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuIFxcdFxcdH1cXG4gXFx0XFx0aWYgKGlvY2ItXFx1MDAzZWtpX2ZsYWdzIFxcdTAwMjYgSU9DQl9IQVNfTUVUQURBVEEpIHtcXG4gXFx0XFx0XFx0cmV0ID0gYmlvX2ludGVncml0eV9tYXBfaXRlcihiaW8sIGlvY2ItXFx1MDAzZXByaXZhdGUpO1xcbi1cXHRcXHRcXHRpZiAodW5saWtlbHkocmV0KSlcXG4tXFx0XFx0XFx0XFx0Z290byBmYWlsO1xcbitcXHRcXHRcXHRpZiAodW5saWtlbHkocmV0KSkge1xcbitcXHRcXHRcXHRcXHRiaW9fZW5kaW9fc3RhdHVzKGJpbywgZXJybm9fdG9fYmxrX3N0YXR1cyhyZXQpKTtcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdH1cXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0aWYgKGlzX3JlYWQpIHtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9sb29wLmMgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xcbmluZGV4IDMxMGRlMDQ2M2JlYjE0Li41ZmU2MWQ1NDJmOGI3NSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xcbisrKyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jXFxuQEAgLTU0LDYgKzU0LDcgQEAgc3RydWN0IGxvb3BfZGV2aWNlIHtcXG4gXFxuIFxcdHN0cnVjdCBmaWxlXFx0KmxvX2JhY2tpbmdfZmlsZTtcXG4gXFx0dW5zaWduZWQgaW50XFx0bG9fbWluX2Rpb19zaXplO1xcbitcXHR1bnNpZ25lZCBpbnRcXHRsb19kaW9fbWVtX2FsaWduO1xcbiBcXHRzdHJ1Y3QgYmxvY2tfZGV2aWNlICpsb19kZXZpY2U7XFxuIFxcbiBcXHRnZnBfdFxcdFxcdG9sZF9nZnBfbWFzaztcXG5AQCAtNDQ3LDI2ICs0NDgsMzcgQEAgc3RhdGljIHZvaWQgbG9vcF9yZXJlYWRfcGFydGl0aW9ucyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxcbiBcXHRcXHRcXHRfX2Z1bmNfXywgbG8tXFx1MDAzZWxvX251bWJlciwgbG8tXFx1MDAzZWxvX2ZpbGVfbmFtZSwgcmMpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdW5zaWduZWQgaW50IGxvb3BfcXVlcnlfbWluX2Rpb19zaXplKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXFxuK3N0YXRpYyB2b2lkIGxvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcXG4ge1xcbiBcXHRzdHJ1Y3QgZmlsZSAqZmlsZSA9IGxvLVxcdTAwM2Vsb19iYWNraW5nX2ZpbGU7XFxuIFxcdHN0cnVjdCBibG9ja19kZXZpY2UgKnNiX2JkZXYgPSBmaWxlLVxcdTAwM2VmX21hcHBpbmctXFx1MDAzZWhvc3QtXFx1MDAzZWlfc2ItXFx1MDAzZXNfYmRldjtcXG4gXFx0c3RydWN0IGtzdGF0IHN0O1xcbiBcXG4gXFx0LypcXG4tXFx0ICogVXNlIHRoZSBtaW5pbWFsIGRpbyBhbGlnbm1lbnQgb2YgdGhlIGZpbGUgc3lzdGVtIGlmIHByb3ZpZGVkLlxcbitcXHQgKiBVc2UgdGhlIGRpbyBhbGlnbm1lbnQgb2YgdGhlIGZpbGUgc3lzdGVtIGlmIHByb3ZpZGVkLiAgVGhlIGluY29tb2luZ1xcbitcXHQgKiByZXF1ZXN0J3MgYmlvX3ZlYyBpcyBmb3J3YXJkZWQgdG8gdGhlIGJhY2tpbmcgZmlsZSB1bmNoYW5nZWQsIHNvIGl0c1xcbitcXHQgKiByZXF1aXJlZCBtZW1vcnkgYWxpZ25tZW50IGJlY29tZXMgdGhlIGRldmljZSdzIGRtYV9hbGlnbm1lbnQgd2hlblxcbitcXHQgKiB1c2VkIGZvciBkaXJlY3QtaW8uXFxuIFxcdCAqL1xcbiBcXHRpZiAoIXZmc19nZXRhdHRyKFxcdTAwMjZmaWxlLVxcdTAwM2VmX3BhdGgsIFxcdTAwMjZzdCwgU1RBVFhfRElPQUxJR04sIDApIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAoc3QucmVzdWx0X21hc2sgXFx1MDAyNiBTVEFUWF9ESU9BTElHTikpXFxuLVxcdFxcdHJldHVybiBzdC5kaW9fb2Zmc2V0X2FsaWduO1xcbitcXHQgICAgKHN0LnJlc3VsdF9tYXNrIFxcdTAwMjYgU1RBVFhfRElPQUxJR04pKSB7XFxuK1xcdFxcdGxvLVxcdTAwM2Vsb19taW5fZGlvX3NpemUgPSBzdC5kaW9fb2Zmc2V0X2FsaWduO1xcbitcXHRcXHRsby1cXHUwMDNlbG9fZGlvX21lbV9hbGlnbiA9IHN0LmRpb19tZW1fYWxpZ24gLSAxO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4gXFxuIFxcdC8qXFxuIFxcdCAqIEluIGEgcGVyZmVjdCB3b3JsZCB0aGlzIHdvdWxkbid0IGJlIG5lZWRlZCwgYnV0IGFzIG9mIExpbnV4IDYuMTMgb25seVxcbiBcXHQgKiBhIGhhbmRmdWwgb2YgZmlsZSBzeXN0ZW1zIHN1cHBvcnQgdGhlIFNUQVRYX0RJT0FMSUdOIGZsYWcuXFxuIFxcdCAqL1xcbi1cXHRpZiAoc2JfYmRldilcXG4tXFx0XFx0cmV0dXJuIGJkZXZfbG9naWNhbF9ibG9ja19zaXplKHNiX2JkZXYpO1xcbi1cXHRyZXR1cm4gU0VDVE9SX1NJWkU7XFxuK1xcdGlmIChzYl9iZGV2KSB7XFxuK1xcdFxcdGxvLVxcdTAwM2Vsb19taW5fZGlvX3NpemUgPSBiZGV2X2xvZ2ljYWxfYmxvY2tfc2l6ZShzYl9iZGV2KTtcXG4rXFx0XFx0bG8tXFx1MDAzZWxvX2Rpb19tZW1fYWxpZ24gPSBiZGV2X2RtYV9hbGlnbm1lbnQoc2JfYmRldik7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0bG8tXFx1MDAzZWxvX21pbl9kaW9fc2l6ZSA9IFNFQ1RPUl9TSVpFO1xcbitcXHRsby1cXHUwMDNlbG9fZGlvX21lbV9hbGlnbiA9IFNFQ1RPUl9TSVpFIC0gMTtcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSBpbnQgaXNfbG9vcF9kZXZpY2Uoc3RydWN0IGZpbGUgKmZpbGUpXFxuQEAgLTUwOSw3ICs1MjEsNyBAQCBzdGF0aWMgdm9pZCBsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IGZpbGUgKmZpbGUpXFxuIFxcdFxcdFxcdGxvLVxcdTAwM2VvbGRfZ2ZwX21hc2sgXFx1MDAyNiB+KF9fR0ZQX0lPIHwgX19HRlBfRlMpKTtcXG4gXFx0aWYgKGxvLVxcdTAwM2Vsb19iYWNraW5nX2ZpbGUtXFx1MDAzZWZfZmxhZ3MgXFx1MDAyNiBPX0RJUkVDVClcXG4gXFx0XFx0bG8tXFx1MDAzZWxvX2ZsYWdzIHw9IExPX0ZMQUdTX0RJUkVDVF9JTztcXG4tXFx0bG8tXFx1MDAzZWxvX21pbl9kaW9fc2l6ZSA9IGxvb3BfcXVlcnlfbWluX2Rpb19zaXplKGxvKTtcXG4rXFx0bG9vcF91cGRhdGVfZGlvX2FsaWdubWVudChsbyk7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgbG9vcF9jaGVja19iYWNraW5nX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUpXFxuQEAgLTk0MCw2ICs5NTIsMTkgQEAgc3RhdGljIHVuc2lnbmVkIGludCBsb29wX2RlZmF1bHRfYmxvY2tzaXplKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXFxuIFxcdHJldHVybiBTRUNUT1JfU0laRTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgbG9vcF9zZXRfZG1hX2xpbWl0KHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSlcXG4re1xcbitcXHQvKlxcbitcXHQgKiBEaXJlY3QgSS9PIGZvcndhcmRzIHRoZSB1c2VyIHBhZ2VzIHRvIHRoZSBiYWNraW5nIGZpbGUgdW5jaGFuZ2VkLCBzb1xcbitcXHQgKiB0cmFjayB0aGUgYmFja2luZydzIERNQSBhbGlnbm1lbnQgcmVxdWlyZW1lbnQgYXMgdGhlIG1vZGUgaXMgdG9nZ2xlZC5cXG4rXFx0ICovXFxuK1xcdGlmIChsby1cXHUwMDNlbG9fZmxhZ3MgXFx1MDAyNiBMT19GTEFHU19ESVJFQ1RfSU8pXFxuK1xcdFxcdGxpbS1cXHUwMDNlZG1hX2FsaWdubWVudCA9IG1heF90KHVuc2lnbmVkIGludCwgbG8tXFx1MDAzZWxvX2Rpb19tZW1fYWxpZ24sXFxuK1xcdFxcdFxcdFxcdFxcdCAgIFNFQ1RPUl9TSVpFIC0gMSk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0bGltLVxcdTAwM2VkbWFfYWxpZ25tZW50ID0gU0VDVE9SX1NJWkUgLSAxO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBsb29wX3VwZGF0ZV9saW1pdHMoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLFxcbiBcXHRcXHR1bnNpZ25lZCBpbnQgYnNpemUpXFxuIHtcXG5AQCAtOTYxLDYgKzk4Niw3IEBAIHN0YXRpYyB2b2lkIGxvb3BfdXBkYXRlX2xpbWl0cyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sXFxuIFxcdGxpbS1cXHUwMDNlbG9naWNhbF9ibG9ja19zaXplID0gYnNpemU7XFxuIFxcdGxpbS1cXHUwMDNlcGh5c2ljYWxfYmxvY2tfc2l6ZSA9IGJzaXplO1xcbiBcXHRsaW0tXFx1MDAzZWlvX21pbiA9IGJzaXplO1xcbitcXHRsb29wX3NldF9kbWFfbGltaXQobG8sIGxpbSk7XFxuIFxcdGxpbS1cXHUwMDNlZmVhdHVyZXMgXFx1MDAyNj0gfihCTEtfRkVBVF9XUklURV9DQUNIRSB8IEJMS19GRUFUX1JPVEFUSU9OQUwpO1xcbiBcXHRpZiAoZmlsZS1cXHUwMDNlZl9vcC1cXHUwMDNlZnN5bmMgXFx1MDAyNlxcdTAwMjYgIShsby1cXHUwMDNlbG9fZmxhZ3MgXFx1MDAyNiBMT19GTEFHU19SRUFEX09OTFkpKVxcbiBcXHRcXHRsaW0tXFx1MDAzZWZlYXR1cmVzIHw9IEJMS19GRUFUX1dSSVRFX0NBQ0hFO1xcbkBAIC0xNDE2LDYgKzE0NDIsNyBAQCBzdGF0aWMgaW50IGxvb3Bfc2V0X2RpbyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCB1bnNpZ25lZCBsb25nIGFyZylcXG4ge1xcbiBcXHRib29sIHVzZV9kaW8gPSAhIWFyZztcXG4gXFx0dW5zaWduZWQgaW50IG1lbWZsYWdzO1xcbitcXHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTtcXG4gXFxuIFxcdGlmIChsby1cXHUwMDNlbG9fc3RhdGUgIT0gTG9fYm91bmQpXFxuIFxcdFxcdHJldHVybiAtRU5YSU87XFxuQEAgLTE0MzQsNiArMTQ2MSw5IEBAIHN0YXRpYyBpbnQgbG9vcF9zZXRfZGlvKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHVuc2lnbmVkIGxvbmcgYXJnKVxcbiBcXHRcXHRsby1cXHUwMDNlbG9fZmxhZ3MgfD0gTE9fRkxBR1NfRElSRUNUX0lPO1xcbiBcXHRlbHNlXFxuIFxcdFxcdGxvLVxcdTAwM2Vsb19mbGFncyBcXHUwMDI2PSB+TE9fRkxBR1NfRElSRUNUX0lPO1xcbitcXHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKGxvLVxcdTAwM2Vsb19xdWV1ZSk7XFxuK1xcdGxvb3Bfc2V0X2RtYV9saW1pdChsbywgXFx1MDAyNmxpbSk7XFxuK1xcdHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKGxvLVxcdTAwM2Vsb19xdWV1ZSwgXFx1MDAyNmxpbSk7XFxuIFxcdGJsa19tcV91bmZyZWV6ZV9xdWV1ZShsby1cXHUwMDNlbG9fcXVldWUsIG1lbWZsYWdzKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96bG9vcC5jIGIvZHJpdmVycy9ibG9jay96bG9vcC5jXFxuaW5kZXggNTVlZWI2YWFjMGVhM2IuLmY5N2EyMGNmZGI3Y2U2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYmxvY2svemxvb3AuY1xcbisrKyBiL2RyaXZlcnMvYmxvY2svemxvb3AuY1xcbkBAIC0xNDQsNiArMTQ0LDcgQEAgc3RydWN0IHpsb29wX2RldmljZSB7XFxuIFxcdHVuc2lnbmVkIGludFxcdFxcdG5yX2NvbnZfem9uZXM7XFxuIFxcdHVuc2lnbmVkIGludFxcdFxcdG1heF9vcGVuX3pvbmVzO1xcbiBcXHR1bnNpZ25lZCBpbnRcXHRcXHRibG9ja19zaXplO1xcbitcXHR1bnNpZ25lZCBpbnRcXHRcXHRkaW9fbWVtX2FsaWduO1xcbiBcXG4gXFx0c3BpbmxvY2tfdFxcdFxcdG9wZW5fem9uZXNfbG9jaztcXG4gXFx0c3RydWN0IGxpc3RfaGVhZFxcdG9wZW5fem9uZXNfbHJ1X2xpc3Q7XFxuQEAgLTEwMzcsMjAgKzEwMzgsMzAgQEAgc3RhdGljIGludCB6bG9vcF9nZXRfYmxvY2tfc2l6ZShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8sXFxuIFxcdHN0cnVjdCBrc3RhdCBzdDtcXG4gXFxuIFxcdC8qXFxuLVxcdCAqIElmIHRoZSBGUyBibG9jayBzaXplIGlzIGxvd2VyIHRoYW4gb3IgZXF1YWwgdG8gNEssIHVzZSB0aGF0IGFzIHRoZVxcbi1cXHQgKiBkZXZpY2UgYmxvY2sgc2l6ZS4gT3RoZXJ3aXNlLCBmYWxsYmFjayB0byB0aGUgRlMgZGlyZWN0IElPIGFsaWdubWVudFxcbi1cXHQgKiBjb25zdHJhaW50IGlmIHRoYXQgaXMgcHJvdmlkZWQsIGFuZCB0byB0aGUgRlMgdW5kZXJseWluZyBkZXZpY2VcXG4tXFx0ICogcGh5c2ljYWwgYmxvY2sgc2l6ZSBpZiB0aGUgZGlyZWN0IElPIGFsaWdubWVudCBpcyB1bmtub3duLlxcbitcXHQgKiBVc2UgdGhlIGRpbyBhbGlnbm1lbnQgb2YgdGhlIGZpbGUgc3lzdGVtIGlmIHByb3ZpZGVkLiAgVGhlIGluY29taW5nXFxuK1xcdCAqIHJlcXVlc3QncyBiaW9fdmVjIGlzIGZvcndhcmRlZCB0byB0aGUgYmFja2luZyBmaWxlIHVuY2hhbmdlZCwgc28gaXRzXFxuK1xcdCAqIHJlcXVpcmVkIG1lbW9yeSBhbGlnbm1lbnQgYmVjb21lcyB0aGUgZGV2aWNlJ3MgZG1hX2FsaWdubWVudCB3aGVuXFxuK1xcdCAqIHVzZWQgZm9yIGRpcmVjdC1pby5cXG4gXFx0ICovXFxuLVxcdGlmIChmaWxlX2lub2RlKHpvbmUtXFx1MDAzZWZpbGUpLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2Jsb2Nrc2l6ZSBcXHUwMDNjPSBTWl80SylcXG4tXFx0XFx0emxvLVxcdTAwM2VibG9ja19zaXplID0gZmlsZV9pbm9kZSh6b25lLVxcdTAwM2VmaWxlKS1cXHUwMDNlaV9zYi1cXHUwMDNlc19ibG9ja3NpemU7XFxuLVxcdGVsc2UgaWYgKCF2ZnNfZ2V0YXR0cihcXHUwMDI2em9uZS1cXHUwMDNlZmlsZS1cXHUwMDNlZl9wYXRoLCBcXHUwMDI2c3QsIFNUQVRYX0RJT0FMSUdOLCAwKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgKHN0LnJlc3VsdF9tYXNrIFxcdTAwMjYgU1RBVFhfRElPQUxJR04pKVxcbitcXHRpZiAoIXZmc19nZXRhdHRyKFxcdTAwMjZ6b25lLVxcdTAwM2VmaWxlLVxcdTAwM2VmX3BhdGgsIFxcdTAwMjZzdCwgU1RBVFhfRElPQUxJR04sIDApIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAoc3QucmVzdWx0X21hc2sgXFx1MDAyNiBTVEFUWF9ESU9BTElHTikpIHtcXG4gXFx0XFx0emxvLVxcdTAwM2VibG9ja19zaXplID0gc3QuZGlvX29mZnNldF9hbGlnbjtcXG4tXFx0ZWxzZSBpZiAoc2JfYmRldilcXG4rXFx0XFx0emxvLVxcdTAwM2VkaW9fbWVtX2FsaWduID0gc3QuZGlvX21lbV9hbGlnbiAtIDE7XFxuK1xcdH0gZWxzZSBpZiAoc2JfYmRldikge1xcbiBcXHRcXHR6bG8tXFx1MDAzZWJsb2NrX3NpemUgPSBiZGV2X3BoeXNpY2FsX2Jsb2NrX3NpemUoc2JfYmRldik7XFxuLVxcdGVsc2VcXG4rXFx0XFx0emxvLVxcdTAwM2VkaW9fbWVtX2FsaWduID0gYmRldl9kbWFfYWxpZ25tZW50KHNiX2JkZXYpO1xcbitcXHR9IGVsc2Uge1xcbiBcXHRcXHR6bG8tXFx1MDAzZWJsb2NrX3NpemUgPSBTRUNUT1JfU0laRTtcXG4rXFx0XFx0emxvLVxcdTAwM2VkaW9fbWVtX2FsaWduID0gU0VDVE9SX1NJWkUgLSAxO1xcbitcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBQcmVmZXIgdGhlIEZTIGJsb2NrIHNpemUgZm9yIHRoZSBkZXZpY2UgYmxvY2sgc2l6ZSB3aGVuIGl0IGlzIG5vXFxuK1xcdCAqIGxhcmdlciB0aGFuIDRLOyBvdGhlcndpc2Uga2VlcCB0aGUgZGlyZWN0IEkvTyAvIHBoeXNpY2FsIGJsb2NrIHNpemVcXG4rXFx0ICogc2VsZWN0ZWQgYWJvdmUuXFxuK1xcdCAqL1xcbitcXHRpZiAoZmlsZV9pbm9kZSh6b25lLVxcdTAwM2VmaWxlKS1cXHUwMDNlaV9zYi1cXHUwMDNlc19ibG9ja3NpemUgXFx1MDAzYz0gU1pfNEspXFxuK1xcdFxcdHpsby1cXHUwMDNlYmxvY2tfc2l6ZSA9IGZpbGVfaW5vZGUoem9uZS1cXHUwMDNlZmlsZSktXFx1MDAzZWlfc2ItXFx1MDAzZXNfYmxvY2tzaXplO1xcbiBcXG4gXFx0aWYgKHpsby1cXHUwMDNlem9uZV9jYXBhY2l0eSBcXHUwMDI2ICgoemxvLVxcdTAwM2VibG9ja19zaXplIFxcdTAwM2VcXHUwMDNlIFNFQ1RPUl9TSElGVCkgLSAxKSkge1xcbiBcXHRcXHRwcl9lcnIoXFxcIlpvbmUgY2FwYWNpdHkgaXMgbm90IGFsaWduZWQgdG8gYmxvY2sgc2l6ZSAldVxcXFxuXFxcIixcXG5AQCAtMTI3OSw2ICsxMjkwLDEwIEBAIHN0YXRpYyBpbnQgemxvb3BfY3RsX2FkZChzdHJ1Y3Qgemxvb3Bfb3B0aW9ucyAqb3B0cylcXG4gXFxuIFxcdGxpbS5waHlzaWNhbF9ibG9ja19zaXplID0gemxvLVxcdTAwM2VibG9ja19zaXplO1xcbiBcXHRsaW0ubG9naWNhbF9ibG9ja19zaXplID0gemxvLVxcdTAwM2VibG9ja19zaXplO1xcbitcXHQvKiBEaXJlY3QgSS9PIGZvcndhcmRzIHRoZSByZXF1ZXN0IHBhZ2VzIHRvIHRoZSBiYWNraW5nIGZpbGVzIGFzLWlzLiAqL1xcbitcXHRpZiAoIW9wdHMtXFx1MDAzZWJ1ZmZlcmVkX2lvKVxcbitcXHRcXHRsaW0uZG1hX2FsaWdubWVudCA9IG1heF90KHVuc2lnbmVkIGludCwgemxvLVxcdTAwM2VkaW9fbWVtX2FsaWduLFxcbitcXHRcXHRcXHRcXHRcXHQgIFNFQ1RPUl9TSVpFIC0gMSk7XFxuIFxcdGlmICh6bG8tXFx1MDAzZXpvbmVfYXBwZW5kKVxcbiBcXHRcXHRsaW0ubWF4X2h3X3pvbmVfYXBwZW5kX3NlY3RvcnMgPSBsaW0ubWF4X2h3X3NlY3RvcnM7XFxuIFxcdGxpbS5tYXhfb3Blbl96b25lcyA9IHpsby1cXHUwMDNlbWF4X29wZW5fem9uZXM7XFxuZGlmZiAtLWdpdCBhL2ZzL2lvbWFwL2RpcmVjdC1pby5jIGIvZnMvaW9tYXAvZGlyZWN0LWlvLmNcXG5pbmRleCBiNDg1ZTNiMTkxZGFmYS4uZmY0NThhYTEyYWUyOTggMTAwNjQ0XFxuLS0tIGEvZnMvaW9tYXAvZGlyZWN0LWlvLmNcXG4rKysgYi9mcy9pb21hcC9kaXJlY3QtaW8uY1xcbkBAIC0zNTgsNiArMzU4LDcgQEAgc3RhdGljIHNzaXplX3QgaW9tYXBfZGlvX2Jpb19pdGVyX29uZShzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlcixcXG4gXFx0XFx0XFx0XFx0aW9tYXBfbWF4X2Jpb19zaXplKFxcdTAwMjZpdGVyLVxcdTAwM2Vpb21hcCksIGFsaWdubWVudCk7XFxuIFxcdGVsc2VcXG4gXFx0XFx0cmV0ID0gYmlvX2lvdl9pdGVyX2dldF9wYWdlcyhiaW8sIGRpby1cXHUwMDNlc3VibWl0Lml0ZXIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgYmRldl9kbWFfYWxpZ25tZW50KGJpby1cXHUwMDNlYmlfYmRldiksXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgYWxpZ25tZW50IC0gMSk7XFxuIFxcdGlmICh1bmxpa2VseShyZXQpKVxcbiBcXHRcXHRnb3RvIG91dF9wdXRfYmlvO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jpby5oIGIvaW5jbHVkZS9saW51eC9iaW8uaFxcbmluZGV4IDhmMzNmNzE3YjE0ZjViLi5jZTM0ZWE0OWVmMzU4MiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2Jpby5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9iaW8uaFxcbkBAIC00NzcsNyArNDc3LDcgQEAgaW50IGJkZXZfcndfdmlydChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBzZWN0b3IsIHZvaWQgKmRhdGEsXFxuIFxcdFxcdHNpemVfdCBsZW4sIGVudW0gcmVxX29wIG9wKTtcXG4gXFxuIGludCBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbi1cXHRcXHR1bnNpZ25lZCBsZW5fYWxpZ25fbWFzayk7XFxuK1xcdFxcdHVuc2lnbmVkIG1lbV9hbGlnbl9tYXNrLCB1bnNpZ25lZCBsZW5fYWxpZ25fbWFzayk7XFxuIFxcbiB2b2lkIGJpb19pb3ZfYnZlY19zZXQoc3RydWN0IGJpbyAqYmlvLCBjb25zdCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpO1xcbiB2b2lkIF9fYmlvX3JlbGVhc2VfcGFnZXMoc3RydWN0IGJpbyAqYmlvLCBib29sIG1hcmtfZGlydHkpO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Vpby5oIGIvaW5jbHVkZS9saW51eC91aW8uaFxcbmluZGV4IGE5YmM1YjMwNjdlMzIwLi5mZTJlOTg1ZDc0ZDI0YiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3Vpby5oXFxuKysrIGIvaW5jbHVkZS9saW51eC91aW8uaFxcbkBAIC0zODksOSArMzg5LDE3IEBAIHNzaXplX3QgaW92X2l0ZXJfZXh0cmFjdF9wYWdlcyhzdHJ1Y3QgaW92X2l0ZXIgKmksIHN0cnVjdCBwYWdlICoqKnBhZ2VzLFxcbiBcXHRcXHRcXHQgICAgICAgc2l6ZV90IG1heHNpemUsIHVuc2lnbmVkIGludCBtYXhwYWdlcyxcXG4gXFx0XFx0XFx0ICAgICAgIGlvdl9pdGVyX2V4dHJhY3Rpb25fdCBleHRyYWN0aW9uX2ZsYWdzLFxcbiBcXHRcXHRcXHQgICAgICAgc2l6ZV90ICpvZmZzZXQwKTtcXG4rLypcXG4rICogQmxvY2stbGF5ZXIgY29uc3VtZXJzIChlLmcuIGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoKSkgcmVxdWlyZSB0aGF0IHRoZVxcbisgKiBzZWdtZW50cyBvZiBhbiBJVEVSX0JWRUMgaXRlcmF0b3IgYXJlIGFscmVhZHkgYWxpZ25lZCB0byB0aGUgdGFyZ2V0IGRldmljZSdzXFxuKyAqIERNQSBhbGlnbm1lbnQsIGFuZCBmb3J3YXJkIHRoZW0gYXMtaXMuICBJbi1rZXJuZWwgdXNlcnMgdGhhdCBidWlsZCB0aGVpciBvd25cXG4rICogYnZlY3MgbXVzdCBub3QgY3JlYXRlIHN1Yi1hbGlnbmVkIHNlZ21lbnRzOyBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzKCkgZW5mb3JjZXNcXG4rICogdGhlIHNhbWUgZm9yIHRoZSBzZWdtZW50cyBpdCBleHRyYWN0cyB2aWEgQG1lbV9hbGlnbl9tYXNrLlxcbisgKi9cXG4gc3NpemVfdCBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzKHN0cnVjdCBpb3ZfaXRlciAqaXRlciwgc3RydWN0IGJpb192ZWMgKmJ2LFxcbiBcXHRcXHRzaXplX3QgbWF4X3NpemUsIHVuc2lnbmVkIHNob3J0ICpucl92ZWNzLFxcbi1cXHRcXHR1bnNpZ25lZCBzaG9ydCBtYXhfdmVjcywgaW92X2l0ZXJfZXh0cmFjdGlvbl90IGV4dHJhY3Rpb25fZmxhZ3MpO1xcbitcXHRcXHR1bnNpZ25lZCBzaG9ydCBtYXhfdmVjcywgdW5zaWduZWQgbWVtX2FsaWduX21hc2ssXFxuK1xcdFxcdGlvdl9pdGVyX2V4dHJhY3Rpb25fdCBleHRyYWN0aW9uX2ZsYWdzKTtcXG4gXFxuIC8qKlxcbiAgKiBpb3ZfaXRlcl9leHRyYWN0X3dpbGxfcGluIC0gSW5kaWNhdGUgaG93IHBhZ2VzIGZyb20gdGhlIGl0ZXJhdG9yIHdpbGwgYmUgcmV0YWluZWRcXG5kaWZmIC0tZ2l0IGEvbGliL2lvdl9pdGVyLmMgYi9saWIvaW92X2l0ZXIuY1xcbmluZGV4IDI3MzkxOWIxNjE2MTc2Li5jMzQzMDc1OTUxZGVkMCAxMDA2NDRcXG4tLS0gYS9saWIvaW92X2l0ZXIuY1xcbisrKyBiL2xpYi9pb3ZfaXRlci5jXFxuQEAgLTE4ODYsNiArMTg4Niw4IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2NvbnRpZ19mb2xpb19sZW4oc3RydWN0IHBhZ2UgKipwYWdlcyxcXG4gICogQG1heF9zaXplOlxcdG1heGltdW0gc2l6ZSB0byBleHRyYWN0IGZyb20gQGl0ZXJcXG4gICogQG5yX3ZlY3M6XFx0bnVtYmVyIG9mIHZlY3RvcnMgaW4gQGJ2IChvbiBpbiBhbmQgb3V0cHV0KVxcbiAgKiBAbWF4X3ZlY3M6XFx0bWF4aW11bSB2ZWN0b3JzIGluIEBidiwgaW5jbHVkaW5nIHRob3NlIGZpbGxlZCBiZWZvcmUgY2FsbGluZ1xcbisgKiBAbWVtX2FsaWduX21hc2s6XFx0cmVqZWN0IHdpdGggLUVJTlZBTCBpZiB0aGUgc291cmNlIGFkZHJlc3Mgb3JcXG4rICpcXHRcXHRsZW5ndGggaXMgbm90IGFsaWduZWQgdG8gdGhpcyBtYXNrXFxuICAqIEBleHRyYWN0aW9uX2ZsYWdzOiBmbGFncyB0byBxdWFsaWZ5IHJlcXVlc3RcXG4gICpcXG4gICogTGlrZSBpb3ZfaXRlcl9leHRyYWN0X3BhZ2VzKCksIGJ1dCByZXR1cm5zIHBoeXNpY2FsbHkgY29udGlndW91cyByYW5nZXNcXG5AQCAtMTg5NywxNCArMTg5OSwxOSBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGdldF9jb250aWdfZm9saW9fbGVuKHN0cnVjdCBwYWdlICoqcGFnZXMsXFxuICAqL1xcbiBzc2l6ZV90IGlvdl9pdGVyX2V4dHJhY3RfYnZlY3Moc3RydWN0IGlvdl9pdGVyICppdGVyLCBzdHJ1Y3QgYmlvX3ZlYyAqYnYsXFxuIFxcdFxcdHNpemVfdCBtYXhfc2l6ZSwgdW5zaWduZWQgc2hvcnQgKm5yX3ZlY3MsXFxuLVxcdFxcdHVuc2lnbmVkIHNob3J0IG1heF92ZWNzLCBpb3ZfaXRlcl9leHRyYWN0aW9uX3QgZXh0cmFjdGlvbl9mbGFncylcXG4rXFx0XFx0dW5zaWduZWQgc2hvcnQgbWF4X3ZlY3MsIHVuc2lnbmVkIG1lbV9hbGlnbl9tYXNrLFxcbitcXHRcXHRpb3ZfaXRlcl9leHRyYWN0aW9uX3QgZXh0cmFjdGlvbl9mbGFncylcXG4ge1xcbitcXHR1bnNpZ25lZCBsb25nIHN0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpaXRlcl9pb3ZfYWRkcihpdGVyKTtcXG4gXFx0dW5zaWduZWQgc2hvcnQgZW50cmllc19sZWZ0ID0gbWF4X3ZlY3MgLSAqbnJfdmVjcztcXG4gXFx0dW5zaWduZWQgc2hvcnQgbnJfcGFnZXMsIGkgPSAwO1xcbiBcXHRzaXplX3QgbGVmdCwgb2Zmc2V0LCBsZW47XFxuIFxcdHN0cnVjdCBwYWdlICoqcGFnZXM7XFxuIFxcdHNzaXplX3Qgc2l6ZTtcXG4gXFxuK1xcdGlmICgoc3RhcnQgfCBpdGVyX2lvdl9sZW4oaXRlcikpIFxcdTAwMjYgbWVtX2FsaWduX21hc2spXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4gXFx0LypcXG4gXFx0ICogTW92ZSBwYWdlIGFycmF5IHVwIGluIHRoZSBhbGxvY2F0ZWQgbWVtb3J5IGZvciB0aGUgYmlvIHZlY3MgYXMgZmFyIGFzXFxuIFxcdCAqIHBvc3NpYmxlIHNvIHRoYXQgd2UgY2FuIHN0YXJ0IGZpbGxpbmcgYmlvdmVjcyBmcm9tIHRoZSBiZWdpbm5pbmdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTc6NDI6MjQuMzcxNDEzNDgxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNTkxNDUwMjU5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX0xPT1BcIixcbiAgICBcIkJMS19ERVZfWk9ORURfTE9PUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJpb19pb3ZfaXRlcl9nZXRfcGFnZXNcIixcbiAgICBcImlvdl9pdGVyX2V4dHJhY3RfYnZlY3NcIixcbiAgICBcImxvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnRcIixcbiAgICBcImxvb3Bfc2V0X2RtYV9saW1pdFwiLFxuICAgIFwiemxvb3BfZ2V0X2Jsb2NrX3NpemVcIixcbiAgICBcInpsb29wX2N0bF9hZGRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBibG9jayBsYXllciBkaXJlY3QgSS9PIGxvZ2ljIHRvIGVuZm9yY2UgbWVtb3J5IGFsaWdubWVudCBjaGVja3MgdmlhIGBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzYCBhbmQgYGlvdl9pdGVyX2V4dHJhY3RfYnZlY3NgLiBJdCBhbHNvIHVwZGF0ZXMgdGhlIGBsb29wYCBhbmQgYHpsb29wYCBkcml2ZXJzIHRvIGNvcnJlY3RseSBzZXQgRE1BIGxpbWl0cyBiYXNlZCBvbiB0aGUgYmFja2luZyBmaWxlJ3MgZGlyZWN0IEkvTyBhbGlnbm1lbnQuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgYmxvY2sgbGF5ZXIgZnVuY3Rpb25hbGl0eSBhbmQgZHJpdmVyIGJlaGF2aW9yLCBtYWtpbmcgdGhlbSBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZGM1ZTE2ZGQ1NGM4ZDEwNjg3Yzk0ZjUwNTY5MWEwOWQ1N2UxNGYwOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVuIDI0IDE3OjQyOjIxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmlvLmMgYi9ibG9jay9iaW8uY1xuaW5kZXggZjJhNWY0ZDBhOTY3MmIuLmZhYWQ0MWE3MmFjNzdmIDEwMDY0NFxuLS0tIGEvYmxvY2svYmlvLmNcbisrKyBiL2Jsb2NrL2Jpby5jXG5AQCAtMTIyMCwxMCArMTIyMCw0NSBAQCBzdGF0aWMgaW50IGJpb19pb3ZfaXRlcl9hbGlnbl9kb3duKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuKyNpZmRlZiBDT05GSUdfREVCVUdfS0VSTkVMXG4rc3RhdGljIGlubGluZSBib29sIGJpb19pb3ZfYnZlY19hbGlnbmVkKGNvbnN0IHN0cnVjdCBiaW8gKmJpbyxcbitcdFx0XHRcdFx0dW5zaWduZWQgbWVtX2FsaWduX21hc2spXG4re1xuK1x0c3RydWN0IGJ2ZWNfaXRlciBpdGVyO1xuK1x0c3RydWN0IGJpb192ZWMgYnY7XG4rXG4rXHQvKlxuK1x0ICogQ29ycmVjdCBjYWxsZXJzIG5ldmVyIGJyZWFrIHRoZSBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzLCBzbyB0aGlzXG4rXHQgKiBleGhhdXN0aXZlIGNoZWNrIGlzIG9ubHkgcGFpZCBmb3IgaW4gZGVidWcgYnVpbGRzLlxuK1x0ICovXG4rXHRmb3JfZWFjaF9tcF9idmVjKGJ2LCBiaW8tXHUwMDNlYmlfaW9fdmVjLCBpdGVyLCBiaW8tXHUwMDNlYmlfaXRlcilcbitcdFx0aWYgKChidi5idl9vZmZzZXQgfCBidi5idl9sZW4pIFx1MDAyNiBtZW1fYWxpZ25fbWFzaylcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rI2Vsc2VcbitzdGF0aWMgaW5saW5lIGJvb2wgYmlvX2lvdl9idmVjX2FsaWduZWQoY29uc3Qgc3RydWN0IGJpbyAqYmlvLFxuK1x0XHRcdFx0XHR1bnNpZ25lZCBtZW1fYWxpZ25fbWFzaylcbit7XG4rXHQvKlxuK1x0ICogV2UgZm9yd2FyZCB0aGUgYmlvX3ZlYyBhcy1pcywgc28gSVRFUl9CVkVDIGNhbGxlcnMgbXVzdCBwcm92aWRlXG4rXHQgKiBzZWdtZW50cyBhbHJlYWR5IGFsaWduZWQgdG8gdGhlIGRldmljZSdzIERNQSBhbGlnbm1lbnQuIFRoZSBvbmx5XG4rXHQgKiB1bmNoZWNrZWQgdXNlci1jb250cm9sbGFibGUgb2Zmc2V0IHRoYXQgcmVhY2hlcyBoZXJlIGlzIGFuIGlvX3VyaW5nXG4rXHQgKiByZWdpc3RlcmVkIGJ1ZmZlciB3aGVyZSBqdXN0IHRoZSBmaXJzdCBzZWdtZW50IGNhbiBiZSB1bmFsaWduZWRcbitcdCAqICh0aGUgcmVzdCBpcyB2aXJ0dWFsbHkgY29udGlndW91cyksIHNvIGNoZWNraW5nIG9ubHkgdGhhdCBvbmUgaXNcbitcdCAqIHN1ZmZpY2llbnQgdG8ga25vdyBpZiB0aGUgZW50aXJlIHZlY3RvciBpcyB2YWxpZC5cbitcdCAqL1xuK1x0cmV0dXJuICEobXBfYnZlY19pdGVyX29mZnNldChiaW8tXHUwMDNlYmlfaW9fdmVjLCBiaW8tXHUwMDNlYmlfaXRlcikgXHUwMDI2XG4rXHRcdFx0XHRcdFx0XHRtZW1fYWxpZ25fbWFzayk7XG4rfVxuKyNlbmRpZlxuK1xuIC8qKlxuICAqIGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMgLSBhZGQgdXNlciBvciBrZXJuZWwgcGFnZXMgdG8gYSBiaW9cbiAgKiBAYmlvOiBiaW8gdG8gYWRkIHBhZ2VzIHRvXG4gICogQGl0ZXI6IGlvdiBpdGVyYXRvciBkZXNjcmliaW5nIHRoZSByZWdpb24gdG8gYmUgYWRkZWRcbisgKiBAbWVtX2FsaWduX21hc2s6IHRoZSBtYXNrIHRoZSBzb3VyY2UgYWRkcmVzcyBhbmQgbGVuZ3RoIG11c3QgYmUgYWxpZ25lZCB0byxcbisgKlx0MCBmb3Igbm8gcmVxdWlyZW1lbnRcbiAgKiBAbGVuX2FsaWduX21hc2s6IHRoZSBtYXNrIHRvIGFsaWduIHRoZSB0b3RhbCBzaXplIHRvLCAwIGZvciBhbnkgbGVuZ3RoXG4gICpcbiAgKiBUaGlzIHRha2VzIGVpdGhlciBhbiBpdGVyYXRvciBwb2ludGluZyB0byB1c2VyIG1lbW9yeSwgb3Igb25lIHBvaW50aW5nIHRvXG5AQCAtMTI0Miw3ICsxMjc3LDcgQEAgc3RhdGljIGludCBiaW9faW92X2l0ZXJfYWxpZ25fZG93bihzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiAgKiBpcyByZXR1cm5lZCBvbmx5IGlmIDAgcGFnZXMgY291bGQgYmUgcGlubmVkLlxuICAqL1xuIGludCBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuLVx0XHRcdCAgIHVuc2lnbmVkIGxlbl9hbGlnbl9tYXNrKVxuK1x0XHRcdCAgIHVuc2lnbmVkIG1lbV9hbGlnbl9tYXNrLCB1bnNpZ25lZCBsZW5fYWxpZ25fbWFzaylcbiB7XG4gXHRpb3ZfaXRlcl9leHRyYWN0aW9uX3QgZmxhZ3MgPSAwO1xuIFxuQEAgLTEyNTEsNiArMTI4NiwxMCBAQCBpbnQgYmlvX2lvdl9pdGVyX2dldF9wYWdlcyhzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiBcbiBcdGlmIChpb3ZfaXRlcl9pc19idmVjKGl0ZXIpKSB7XG4gXHRcdGJpb19pb3ZfYnZlY19zZXQoYmlvLCBpdGVyKTtcbitcbitcdFx0aWYgKCFiaW9faW92X2J2ZWNfYWxpZ25lZChiaW8sIG1lbV9hbGlnbl9tYXNrKSlcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcbiBcdFx0aW92X2l0ZXJfYWR2YW5jZShpdGVyLCBiaW8tXHUwMDNlYmlfaXRlci5iaV9zaXplKTtcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG5AQCAtMTI2NSw4ICsxMzA0LDE5IEBAIGludCBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuIFxuIFx0XHRyZXQgPSBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzKGl0ZXIsIGJpby1cdTAwM2ViaV9pb192ZWMsXG4gXHRcdFx0XHRCSU9fTUFYX1NJWkUgLSBiaW8tXHUwMDNlYmlfaXRlci5iaV9zaXplLFxuLVx0XHRcdFx0XHUwMDI2YmlvLVx1MDAzZWJpX3ZjbnQsIGJpby1cdTAwM2ViaV9tYXhfdmVjcywgZmxhZ3MpO1xuK1x0XHRcdFx0XHUwMDI2YmlvLVx1MDAzZWJpX3ZjbnQsIGJpby1cdTAwM2ViaV9tYXhfdmVjcyxcbitcdFx0XHRcdG1lbV9hbGlnbl9tYXNrLCBmbGFncyk7XG4gXHRcdGlmIChyZXQgXHUwMDNjPSAwKSB7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBBIG1pc2FsaWduZWQgdmVjdG9yIGZhaWxzIHRoZSB3aG9sZSBJL08uICBSZWxlYXNlIGFueVxuK1x0XHRcdCAqIHBhZ2VzIHBpbm5lZCBieSBlYXJsaWVyIGl0ZXJhdGlvbnMgYmVmb3JlIHJldHVybmluZ1xuK1x0XHRcdCAqIHNpbmNlIHRoaXMgYmlvIHdvbid0IGJlIHN1Ym1pdHRlZCB0byByZWxlYXNlIHRoZW0uXG4rXHRcdFx0ICovXG4rXHRcdFx0aWYgKHJldCA9PSAtRUlOVkFMKSB7XG4rXHRcdFx0XHRiaW9fcmVsZWFzZV9wYWdlcyhiaW8sIGZhbHNlKTtcbitcdFx0XHRcdGJpb19jbGVhcl9mbGFnKGJpbywgQklPX1BBR0VfUElOTkVEKTtcbitcdFx0XHRcdGJpby1cdTAwM2ViaV92Y250ID0gMDtcbitcdFx0XHR9XG4gXHRcdFx0aWYgKCFiaW8tXHUwMDNlYmlfdmNudClcbiBcdFx0XHRcdHJldHVybiByZXQ7XG4gXHRcdFx0YnJlYWs7XG5AQCAtMTM3Nyw3ICsxNDI3LDcgQEAgc3RhdGljIGludCBiaW9faW92X2l0ZXJfYm91bmNlX3JlYWQoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXHRcdHNzaXplX3QgcmV0O1xuIFxuIFx0XHRyZXQgPSBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzKGl0ZXIsIGJpby1cdTAwM2ViaV9pb192ZWMgKyAxLCBsZW4sXG4tXHRcdFx0XHRcdTAwMjZiaW8tXHUwMDNlYmlfdmNudCwgYmlvLVx1MDAzZWJpX21heF92ZWNzIC0gMSwgMCk7XG4rXHRcdFx0XHRcdTAwMjZiaW8tXHUwMDNlYmlfdmNudCwgYmlvLVx1MDAzZWJpX21heF92ZWNzIC0gMSwgMCwgMCk7XG4gXHRcdGlmIChyZXQgXHUwMDNjPSAwKSB7XG4gXHRcdFx0aWYgKCFiaW8tXHUwMDNlYmlfdmNudCkge1xuIFx0XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbmRpZmYgLS1naXQgYS9ibG9jay9ibGstbWFwLmMgYi9ibG9jay9ibGstbWFwLmNcbmluZGV4IDc2ODU0OWYxOWY5N2VjLi5jOTUzNWVmZTFhOTEzYyAxMDA2NDRcbi0tLSBhL2Jsb2NrL2Jsay1tYXAuY1xuKysrIGIvYmxvY2svYmxrLW1hcC5jXG5AQCAtMjc0LDcgKzI3NCw3IEBAIHN0YXRpYyBpbnQgYmlvX21hcF91c2VyX2lvdihzdHJ1Y3QgcmVxdWVzdCAqcnEsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiBcdCAqIE5vIGFsaWdubWVudCByZXF1aXJlbWVudHMgb24gb3VyIHBhcnQgdG8gc3VwcG9ydCBhcmJpdHJhcnlcbiBcdCAqIHBhc3N0aHJvdWdoIGNvbW1hbmRzLlxuIFx0ICovXG4tXHRyZXQgPSBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKGJpbywgaXRlciwgMCk7XG4rXHRyZXQgPSBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKGJpbywgaXRlciwgMCwgMCk7XG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIG91dF9wdXQ7XG4gXHRyZXQgPSBibGtfcnFfYXBwZW5kX2JpbyhycSwgYmlvKTtcbmRpZmYgLS1naXQgYS9ibG9jay9mb3BzLmMgYi9ibG9jay9mb3BzLmNcbmluZGV4IDE1NzgzYTYxODBkZWMxLi5lNTE5ZDdmNDNiMzEwNiAxMDA2NDRcbi0tLSBhL2Jsb2NrL2ZvcHMuY1xuKysrIGIvYmxvY2svZm9wcy5jXG5AQCAtNDYsNyArNDYsNyBAQCBzdGF0aWMgYm9vbCBibGtkZXZfZGlvX2ludmFsaWQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IGtpb2NiICppb2NiLFxuIHN0YXRpYyBpbmxpbmUgaW50IGJsa2Rldl9pb3ZfaXRlcl9nZXRfcGFnZXMoc3RydWN0IGJpbyAqYmlvLFxuIFx0XHRzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpXG4ge1xuLVx0cmV0dXJuIGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoYmlvLCBpdGVyLFxuK1x0cmV0dXJuIGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoYmlvLCBpdGVyLCBiZGV2X2RtYV9hbGlnbm1lbnQoYmRldiksXG4gXHRcdFx0YmRldl9sb2dpY2FsX2Jsb2NrX3NpemUoYmRldikgLSAxKTtcbiB9XG4gXG5AQCAtMjE4LDcgKzIxOCw3IEBAIHN0YXRpYyBzc2l6ZV90IF9fYmxrZGV2X2RpcmVjdF9JTyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiBcbiBcdFx0cmV0ID0gYmxrZGV2X2lvdl9pdGVyX2dldF9wYWdlcyhiaW8sIGl0ZXIsIGJkZXYpO1xuIFx0XHRpZiAodW5saWtlbHkocmV0KSkge1xuLVx0XHRcdGJpb19lbmRpb19zdGF0dXMoYmlvLCBCTEtfU1RTX0lPRVJSKTtcbitcdFx0XHRiaW9fZW5kaW9fc3RhdHVzKGJpbywgZXJybm9fdG9fYmxrX3N0YXR1cyhyZXQpKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFx0XHRpZiAoaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9OT1dBSVQpIHtcbkBAIC0yMzgsOCArMjM4LDEwIEBAIHN0YXRpYyBzc2l6ZV90IF9fYmxrZGV2X2RpcmVjdF9JTyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiBcdFx0fVxuIFx0XHRpZiAoaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9IQVNfTUVUQURBVEEpIHtcbiBcdFx0XHRyZXQgPSBiaW9faW50ZWdyaXR5X21hcF9pdGVyKGJpbywgaW9jYi1cdTAwM2Vwcml2YXRlKTtcbi1cdFx0XHRpZiAodW5saWtlbHkocmV0KSlcbi1cdFx0XHRcdGdvdG8gZmFpbDtcbitcdFx0XHRpZiAodW5saWtlbHkocmV0KSkge1xuK1x0XHRcdFx0YmlvX2VuZGlvX3N0YXR1cyhiaW8sIGVycm5vX3RvX2Jsa19zdGF0dXMocmV0KSk7XG4rXHRcdFx0XHRicmVhaztcbitcdFx0XHR9XG4gXHRcdH1cbiBcbiBcdFx0aWYgKGlzX3JlYWQpIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jXG5pbmRleCAzMTBkZTA0NjNiZWIxNC4uNWZlNjFkNTQyZjhiNzUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xuKysrIGIvZHJpdmVycy9ibG9jay9sb29wLmNcbkBAIC01NCw2ICs1NCw3IEBAIHN0cnVjdCBsb29wX2RldmljZSB7XG4gXG4gXHRzdHJ1Y3QgZmlsZVx0KmxvX2JhY2tpbmdfZmlsZTtcbiBcdHVuc2lnbmVkIGludFx0bG9fbWluX2Rpb19zaXplO1xuK1x0dW5zaWduZWQgaW50XHRsb19kaW9fbWVtX2FsaWduO1xuIFx0c3RydWN0IGJsb2NrX2RldmljZSAqbG9fZGV2aWNlO1xuIFxuIFx0Z2ZwX3RcdFx0b2xkX2dmcF9tYXNrO1xuQEAgLTQ0NywyNiArNDQ4LDM3IEBAIHN0YXRpYyB2b2lkIGxvb3BfcmVyZWFkX3BhcnRpdGlvbnMoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbiBcdFx0XHRfX2Z1bmNfXywgbG8tXHUwMDNlbG9fbnVtYmVyLCBsby1cdTAwM2Vsb19maWxlX25hbWUsIHJjKTtcbiB9XG4gXG4tc3RhdGljIHVuc2lnbmVkIGludCBsb29wX3F1ZXJ5X21pbl9kaW9fc2l6ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuK3N0YXRpYyB2b2lkIGxvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbiB7XG4gXHRzdHJ1Y3QgZmlsZSAqZmlsZSA9IGxvLVx1MDAzZWxvX2JhY2tpbmdfZmlsZTtcbiBcdHN0cnVjdCBibG9ja19kZXZpY2UgKnNiX2JkZXYgPSBmaWxlLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0LVx1MDAzZWlfc2ItXHUwMDNlc19iZGV2O1xuIFx0c3RydWN0IGtzdGF0IHN0O1xuIFxuIFx0Lypcbi1cdCAqIFVzZSB0aGUgbWluaW1hbCBkaW8gYWxpZ25tZW50IG9mIHRoZSBmaWxlIHN5c3RlbSBpZiBwcm92aWRlZC5cbitcdCAqIFVzZSB0aGUgZGlvIGFsaWdubWVudCBvZiB0aGUgZmlsZSBzeXN0ZW0gaWYgcHJvdmlkZWQuICBUaGUgaW5jb21vaW5nXG4rXHQgKiByZXF1ZXN0J3MgYmlvX3ZlYyBpcyBmb3J3YXJkZWQgdG8gdGhlIGJhY2tpbmcgZmlsZSB1bmNoYW5nZWQsIHNvIGl0c1xuK1x0ICogcmVxdWlyZWQgbWVtb3J5IGFsaWdubWVudCBiZWNvbWVzIHRoZSBkZXZpY2UncyBkbWFfYWxpZ25tZW50IHdoZW5cbitcdCAqIHVzZWQgZm9yIGRpcmVjdC1pby5cbiBcdCAqL1xuIFx0aWYgKCF2ZnNfZ2V0YXR0cihcdTAwMjZmaWxlLVx1MDAzZWZfcGF0aCwgXHUwMDI2c3QsIFNUQVRYX0RJT0FMSUdOLCAwKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAoc3QucmVzdWx0X21hc2sgXHUwMDI2IFNUQVRYX0RJT0FMSUdOKSlcbi1cdFx0cmV0dXJuIHN0LmRpb19vZmZzZXRfYWxpZ247XG4rXHQgICAgKHN0LnJlc3VsdF9tYXNrIFx1MDAyNiBTVEFUWF9ESU9BTElHTikpIHtcbitcdFx0bG8tXHUwMDNlbG9fbWluX2Rpb19zaXplID0gc3QuZGlvX29mZnNldF9hbGlnbjtcbitcdFx0bG8tXHUwMDNlbG9fZGlvX21lbV9hbGlnbiA9IHN0LmRpb19tZW1fYWxpZ24gLSAxO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4gXG4gXHQvKlxuIFx0ICogSW4gYSBwZXJmZWN0IHdvcmxkIHRoaXMgd291bGRuJ3QgYmUgbmVlZGVkLCBidXQgYXMgb2YgTGludXggNi4xMyBvbmx5XG4gXHQgKiBhIGhhbmRmdWwgb2YgZmlsZSBzeXN0ZW1zIHN1cHBvcnQgdGhlIFNUQVRYX0RJT0FMSUdOIGZsYWcuXG4gXHQgKi9cbi1cdGlmIChzYl9iZGV2KVxuLVx0XHRyZXR1cm4gYmRldl9sb2dpY2FsX2Jsb2NrX3NpemUoc2JfYmRldik7XG4tXHRyZXR1cm4gU0VDVE9SX1NJWkU7XG4rXHRpZiAoc2JfYmRldikge1xuK1x0XHRsby1cdTAwM2Vsb19taW5fZGlvX3NpemUgPSBiZGV2X2xvZ2ljYWxfYmxvY2tfc2l6ZShzYl9iZGV2KTtcbitcdFx0bG8tXHUwMDNlbG9fZGlvX21lbV9hbGlnbiA9IGJkZXZfZG1hX2FsaWdubWVudChzYl9iZGV2KTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0bG8tXHUwMDNlbG9fbWluX2Rpb19zaXplID0gU0VDVE9SX1NJWkU7XG4rXHRsby1cdTAwM2Vsb19kaW9fbWVtX2FsaWduID0gU0VDVE9SX1NJWkUgLSAxO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGludCBpc19sb29wX2RldmljZShzdHJ1Y3QgZmlsZSAqZmlsZSlcbkBAIC01MDksNyArNTIxLDcgQEAgc3RhdGljIHZvaWQgbG9vcF9hc3NpZ25fYmFja2luZ19maWxlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBmaWxlICpmaWxlKVxuIFx0XHRcdGxvLVx1MDAzZW9sZF9nZnBfbWFzayBcdTAwMjYgfihfX0dGUF9JTyB8IF9fR0ZQX0ZTKSk7XG4gXHRpZiAobG8tXHUwMDNlbG9fYmFja2luZ19maWxlLVx1MDAzZWZfZmxhZ3MgXHUwMDI2IE9fRElSRUNUKVxuIFx0XHRsby1cdTAwM2Vsb19mbGFncyB8PSBMT19GTEFHU19ESVJFQ1RfSU87XG4tXHRsby1cdTAwM2Vsb19taW5fZGlvX3NpemUgPSBsb29wX3F1ZXJ5X21pbl9kaW9fc2l6ZShsbyk7XG4rXHRsb29wX3VwZGF0ZV9kaW9fYWxpZ25tZW50KGxvKTtcbiB9XG4gXG4gc3RhdGljIGludCBsb29wX2NoZWNrX2JhY2tpbmdfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSlcbkBAIC05NDAsNiArOTUyLDE5IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgbG9vcF9kZWZhdWx0X2Jsb2Nrc2l6ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuIFx0cmV0dXJuIFNFQ1RPUl9TSVpFO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBsb29wX3NldF9kbWFfbGltaXQoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuK3tcbitcdC8qXG4rXHQgKiBEaXJlY3QgSS9PIGZvcndhcmRzIHRoZSB1c2VyIHBhZ2VzIHRvIHRoZSBiYWNraW5nIGZpbGUgdW5jaGFuZ2VkLCBzb1xuK1x0ICogdHJhY2sgdGhlIGJhY2tpbmcncyBETUEgYWxpZ25tZW50IHJlcXVpcmVtZW50IGFzIHRoZSBtb2RlIGlzIHRvZ2dsZWQuXG4rXHQgKi9cbitcdGlmIChsby1cdTAwM2Vsb19mbGFncyBcdTAwMjYgTE9fRkxBR1NfRElSRUNUX0lPKVxuK1x0XHRsaW0tXHUwMDNlZG1hX2FsaWdubWVudCA9IG1heF90KHVuc2lnbmVkIGludCwgbG8tXHUwMDNlbG9fZGlvX21lbV9hbGlnbixcbitcdFx0XHRcdFx0ICAgU0VDVE9SX1NJWkUgLSAxKTtcbitcdGVsc2VcbitcdFx0bGltLVx1MDAzZWRtYV9hbGlnbm1lbnQgPSBTRUNUT1JfU0laRSAtIDE7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIGxvb3BfdXBkYXRlX2xpbWl0cyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sXG4gXHRcdHVuc2lnbmVkIGludCBic2l6ZSlcbiB7XG5AQCAtOTYxLDYgKzk4Niw3IEBAIHN0YXRpYyB2b2lkIGxvb3BfdXBkYXRlX2xpbWl0cyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sXG4gXHRsaW0tXHUwMDNlbG9naWNhbF9ibG9ja19zaXplID0gYnNpemU7XG4gXHRsaW0tXHUwMDNlcGh5c2ljYWxfYmxvY2tfc2l6ZSA9IGJzaXplO1xuIFx0bGltLVx1MDAzZWlvX21pbiA9IGJzaXplO1xuK1x0bG9vcF9zZXRfZG1hX2xpbWl0KGxvLCBsaW0pO1xuIFx0bGltLVx1MDAzZWZlYXR1cmVzIFx1MDAyNj0gfihCTEtfRkVBVF9XUklURV9DQUNIRSB8IEJMS19GRUFUX1JPVEFUSU9OQUwpO1xuIFx0aWYgKGZpbGUtXHUwMDNlZl9vcC1cdTAwM2Vmc3luYyBcdTAwMjZcdTAwMjYgIShsby1cdTAwM2Vsb19mbGFncyBcdTAwMjYgTE9fRkxBR1NfUkVBRF9PTkxZKSlcbiBcdFx0bGltLVx1MDAzZWZlYXR1cmVzIHw9IEJMS19GRUFUX1dSSVRFX0NBQ0hFO1xuQEAgLTE0MTYsNiArMTQ0Miw3IEBAIHN0YXRpYyBpbnQgbG9vcF9zZXRfZGlvKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHVuc2lnbmVkIGxvbmcgYXJnKVxuIHtcbiBcdGJvb2wgdXNlX2RpbyA9ICEhYXJnO1xuIFx0dW5zaWduZWQgaW50IG1lbWZsYWdzO1xuK1x0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW07XG4gXG4gXHRpZiAobG8tXHUwMDNlbG9fc3RhdGUgIT0gTG9fYm91bmQpXG4gXHRcdHJldHVybiAtRU5YSU87XG5AQCAtMTQzNCw2ICsxNDYxLDkgQEAgc3RhdGljIGludCBsb29wX3NldF9kaW8oc3RydWN0IGxvb3BfZGV2aWNlICpsbywgdW5zaWduZWQgbG9uZyBhcmcpXG4gXHRcdGxvLVx1MDAzZWxvX2ZsYWdzIHw9IExPX0ZMQUdTX0RJUkVDVF9JTztcbiBcdGVsc2VcbiBcdFx0bG8tXHUwMDNlbG9fZmxhZ3MgXHUwMDI2PSB+TE9fRkxBR1NfRElSRUNUX0lPO1xuK1x0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby1cdTAwM2Vsb19xdWV1ZSk7XG4rXHRsb29wX3NldF9kbWFfbGltaXQobG8sIFx1MDAyNmxpbSk7XG4rXHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShsby1cdTAwM2Vsb19xdWV1ZSwgXHUwMDI2bGltKTtcbiBcdGJsa19tcV91bmZyZWV6ZV9xdWV1ZShsby1cdTAwM2Vsb19xdWV1ZSwgbWVtZmxhZ3MpO1xuIFx0cmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svemxvb3AuYyBiL2RyaXZlcnMvYmxvY2svemxvb3AuY1xuaW5kZXggNTVlZWI2YWFjMGVhM2IuLmY5N2EyMGNmZGI3Y2U2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay96bG9vcC5jXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3psb29wLmNcbkBAIC0xNDQsNiArMTQ0LDcgQEAgc3RydWN0IHpsb29wX2RldmljZSB7XG4gXHR1bnNpZ25lZCBpbnRcdFx0bnJfY29udl96b25lcztcbiBcdHVuc2lnbmVkIGludFx0XHRtYXhfb3Blbl96b25lcztcbiBcdHVuc2lnbmVkIGludFx0XHRibG9ja19zaXplO1xuK1x0dW5zaWduZWQgaW50XHRcdGRpb19tZW1fYWxpZ247XG4gXG4gXHRzcGlubG9ja190XHRcdG9wZW5fem9uZXNfbG9jaztcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdG9wZW5fem9uZXNfbHJ1X2xpc3Q7XG5AQCAtMTAzNywyMCArMTAzOCwzMCBAQCBzdGF0aWMgaW50IHpsb29wX2dldF9ibG9ja19zaXplKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyxcbiBcdHN0cnVjdCBrc3RhdCBzdDtcbiBcbiBcdC8qXG4tXHQgKiBJZiB0aGUgRlMgYmxvY2sgc2l6ZSBpcyBsb3dlciB0aGFuIG9yIGVxdWFsIHRvIDRLLCB1c2UgdGhhdCBhcyB0aGVcbi1cdCAqIGRldmljZSBibG9jayBzaXplLiBPdGhlcndpc2UsIGZhbGxiYWNrIHRvIHRoZSBGUyBkaXJlY3QgSU8gYWxpZ25tZW50XG4tXHQgKiBjb25zdHJhaW50IGlmIHRoYXQgaXMgcHJvdmlkZWQsIGFuZCB0byB0aGUgRlMgdW5kZXJseWluZyBkZXZpY2Vcbi1cdCAqIHBoeXNpY2FsIGJsb2NrIHNpemUgaWYgdGhlIGRpcmVjdCBJTyBhbGlnbm1lbnQgaXMgdW5rbm93bi5cbitcdCAqIFVzZSB0aGUgZGlvIGFsaWdubWVudCBvZiB0aGUgZmlsZSBzeXN0ZW0gaWYgcHJvdmlkZWQuICBUaGUgaW5jb21pbmdcbitcdCAqIHJlcXVlc3QncyBiaW9fdmVjIGlzIGZvcndhcmRlZCB0byB0aGUgYmFja2luZyBmaWxlIHVuY2hhbmdlZCwgc28gaXRzXG4rXHQgKiByZXF1aXJlZCBtZW1vcnkgYWxpZ25tZW50IGJlY29tZXMgdGhlIGRldmljZSdzIGRtYV9hbGlnbm1lbnQgd2hlblxuK1x0ICogdXNlZCBmb3IgZGlyZWN0LWlvLlxuIFx0ICovXG4tXHRpZiAoZmlsZV9pbm9kZSh6b25lLVx1MDAzZWZpbGUpLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemUgXHUwMDNjPSBTWl80Sylcbi1cdFx0emxvLVx1MDAzZWJsb2NrX3NpemUgPSBmaWxlX2lub2RlKHpvbmUtXHUwMDNlZmlsZSktXHUwMDNlaV9zYi1cdTAwM2VzX2Jsb2Nrc2l6ZTtcbi1cdGVsc2UgaWYgKCF2ZnNfZ2V0YXR0cihcdTAwMjZ6b25lLVx1MDAzZWZpbGUtXHUwMDNlZl9wYXRoLCBcdTAwMjZzdCwgU1RBVFhfRElPQUxJR04sIDApIFx1MDAyNlx1MDAyNlxuLVx0XHQgKHN0LnJlc3VsdF9tYXNrIFx1MDAyNiBTVEFUWF9ESU9BTElHTikpXG4rXHRpZiAoIXZmc19nZXRhdHRyKFx1MDAyNnpvbmUtXHUwMDNlZmlsZS1cdTAwM2VmX3BhdGgsIFx1MDAyNnN0LCBTVEFUWF9ESU9BTElHTiwgMCkgXHUwMDI2XHUwMDI2XG4rXHQgICAgKHN0LnJlc3VsdF9tYXNrIFx1MDAyNiBTVEFUWF9ESU9BTElHTikpIHtcbiBcdFx0emxvLVx1MDAzZWJsb2NrX3NpemUgPSBzdC5kaW9fb2Zmc2V0X2FsaWduO1xuLVx0ZWxzZSBpZiAoc2JfYmRldilcbitcdFx0emxvLVx1MDAzZWRpb19tZW1fYWxpZ24gPSBzdC5kaW9fbWVtX2FsaWduIC0gMTtcbitcdH0gZWxzZSBpZiAoc2JfYmRldikge1xuIFx0XHR6bG8tXHUwMDNlYmxvY2tfc2l6ZSA9IGJkZXZfcGh5c2ljYWxfYmxvY2tfc2l6ZShzYl9iZGV2KTtcbi1cdGVsc2VcbitcdFx0emxvLVx1MDAzZWRpb19tZW1fYWxpZ24gPSBiZGV2X2RtYV9hbGlnbm1lbnQoc2JfYmRldik7XG4rXHR9IGVsc2Uge1xuIFx0XHR6bG8tXHUwMDNlYmxvY2tfc2l6ZSA9IFNFQ1RPUl9TSVpFO1xuK1x0XHR6bG8tXHUwMDNlZGlvX21lbV9hbGlnbiA9IFNFQ1RPUl9TSVpFIC0gMTtcbitcdH1cbitcbitcdC8qXG4rXHQgKiBQcmVmZXIgdGhlIEZTIGJsb2NrIHNpemUgZm9yIHRoZSBkZXZpY2UgYmxvY2sgc2l6ZSB3aGVuIGl0IGlzIG5vXG4rXHQgKiBsYXJnZXIgdGhhbiA0Szsgb3RoZXJ3aXNlIGtlZXAgdGhlIGRpcmVjdCBJL08gLyBwaHlzaWNhbCBibG9jayBzaXplXG4rXHQgKiBzZWxlY3RlZCBhYm92ZS5cbitcdCAqL1xuK1x0aWYgKGZpbGVfaW5vZGUoem9uZS1cdTAwM2VmaWxlKS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplIFx1MDAzYz0gU1pfNEspXG4rXHRcdHpsby1cdTAwM2VibG9ja19zaXplID0gZmlsZV9pbm9kZSh6b25lLVx1MDAzZWZpbGUpLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemU7XG4gXG4gXHRpZiAoemxvLVx1MDAzZXpvbmVfY2FwYWNpdHkgXHUwMDI2ICgoemxvLVx1MDAzZWJsb2NrX3NpemUgXHUwMDNlXHUwMDNlIFNFQ1RPUl9TSElGVCkgLSAxKSkge1xuIFx0XHRwcl9lcnIoXCJab25lIGNhcGFjaXR5IGlzIG5vdCBhbGlnbmVkIHRvIGJsb2NrIHNpemUgJXVcXG5cIixcbkBAIC0xMjc5LDYgKzEyOTAsMTAgQEAgc3RhdGljIGludCB6bG9vcF9jdGxfYWRkKHN0cnVjdCB6bG9vcF9vcHRpb25zICpvcHRzKVxuIFxuIFx0bGltLnBoeXNpY2FsX2Jsb2NrX3NpemUgPSB6bG8tXHUwMDNlYmxvY2tfc2l6ZTtcbiBcdGxpbS5sb2dpY2FsX2Jsb2NrX3NpemUgPSB6bG8tXHUwMDNlYmxvY2tfc2l6ZTtcbitcdC8qIERpcmVjdCBJL08gZm9yd2FyZHMgdGhlIHJlcXVlc3QgcGFnZXMgdG8gdGhlIGJhY2tpbmcgZmlsZXMgYXMtaXMuICovXG4rXHRpZiAoIW9wdHMtXHUwMDNlYnVmZmVyZWRfaW8pXG4rXHRcdGxpbS5kbWFfYWxpZ25tZW50ID0gbWF4X3QodW5zaWduZWQgaW50LCB6bG8tXHUwMDNlZGlvX21lbV9hbGlnbixcbitcdFx0XHRcdFx0ICBTRUNUT1JfU0laRSAtIDEpO1xuIFx0aWYgKHpsby1cdTAwM2V6b25lX2FwcGVuZClcbiBcdFx0bGltLm1heF9od196b25lX2FwcGVuZF9zZWN0b3JzID0gbGltLm1heF9od19zZWN0b3JzO1xuIFx0bGltLm1heF9vcGVuX3pvbmVzID0gemxvLVx1MDAzZW1heF9vcGVuX3pvbmVzO1xuZGlmZiAtLWdpdCBhL2ZzL2lvbWFwL2RpcmVjdC1pby5jIGIvZnMvaW9tYXAvZGlyZWN0LWlvLmNcbmluZGV4IGI0ODVlM2IxOTFkYWZhLi5mZjQ1OGFhMTJhZTI5OCAxMDA2NDRcbi0tLSBhL2ZzL2lvbWFwL2RpcmVjdC1pby5jXG4rKysgYi9mcy9pb21hcC9kaXJlY3QtaW8uY1xuQEAgLTM1OCw2ICszNTgsNyBAQCBzdGF0aWMgc3NpemVfdCBpb21hcF9kaW9fYmlvX2l0ZXJfb25lKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLFxuIFx0XHRcdFx0aW9tYXBfbWF4X2Jpb19zaXplKFx1MDAyNml0ZXItXHUwMDNlaW9tYXApLCBhbGlnbm1lbnQpO1xuIFx0ZWxzZVxuIFx0XHRyZXQgPSBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKGJpbywgZGlvLVx1MDAzZXN1Ym1pdC5pdGVyLFxuK1x0XHRcdFx0XHQgICAgIGJkZXZfZG1hX2FsaWdubWVudChiaW8tXHUwMDNlYmlfYmRldiksXG4gXHRcdFx0XHRcdCAgICAgYWxpZ25tZW50IC0gMSk7XG4gXHRpZiAodW5saWtlbHkocmV0KSlcbiBcdFx0Z290byBvdXRfcHV0X2JpbztcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jpby5oIGIvaW5jbHVkZS9saW51eC9iaW8uaFxuaW5kZXggOGYzM2Y3MTdiMTRmNWIuLmNlMzRlYTQ5ZWYzNTgyIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9iaW8uaFxuKysrIGIvaW5jbHVkZS9saW51eC9iaW8uaFxuQEAgLTQ3Nyw3ICs0NzcsNyBAQCBpbnQgYmRldl9yd192aXJ0KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IHNlY3Rvciwgdm9pZCAqZGF0YSxcbiBcdFx0c2l6ZV90IGxlbiwgZW51bSByZXFfb3Agb3ApO1xuIFxuIGludCBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuLVx0XHR1bnNpZ25lZCBsZW5fYWxpZ25fbWFzayk7XG4rXHRcdHVuc2lnbmVkIG1lbV9hbGlnbl9tYXNrLCB1bnNpZ25lZCBsZW5fYWxpZ25fbWFzayk7XG4gXG4gdm9pZCBiaW9faW92X2J2ZWNfc2V0KHN0cnVjdCBiaW8gKmJpbywgY29uc3Qgc3RydWN0IGlvdl9pdGVyICppdGVyKTtcbiB2b2lkIF9fYmlvX3JlbGVhc2VfcGFnZXMoc3RydWN0IGJpbyAqYmlvLCBib29sIG1hcmtfZGlydHkpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdWlvLmggYi9pbmNsdWRlL2xpbnV4L3Vpby5oXG5pbmRleCBhOWJjNWIzMDY3ZTMyMC4uZmUyZTk4NWQ3NGQyNGIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3Vpby5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3Vpby5oXG5AQCAtMzg5LDkgKzM4OSwxNyBAQCBzc2l6ZV90IGlvdl9pdGVyX2V4dHJhY3RfcGFnZXMoc3RydWN0IGlvdl9pdGVyICppLCBzdHJ1Y3QgcGFnZSAqKipwYWdlcyxcbiBcdFx0XHQgICAgICAgc2l6ZV90IG1heHNpemUsIHVuc2lnbmVkIGludCBtYXhwYWdlcyxcbiBcdFx0XHQgICAgICAgaW92X2l0ZXJfZXh0cmFjdGlvbl90IGV4dHJhY3Rpb25fZmxhZ3MsXG4gXHRcdFx0ICAgICAgIHNpemVfdCAqb2Zmc2V0MCk7XG4rLypcbisgKiBCbG9jay1sYXllciBjb25zdW1lcnMgKGUuZy4gYmlvX2lvdl9pdGVyX2dldF9wYWdlcygpKSByZXF1aXJlIHRoYXQgdGhlXG4rICogc2VnbWVudHMgb2YgYW4gSVRFUl9CVkVDIGl0ZXJhdG9yIGFyZSBhbHJlYWR5IGFsaWduZWQgdG8gdGhlIHRhcmdldCBkZXZpY2Unc1xuKyAqIERNQSBhbGlnbm1lbnQsIGFuZCBmb3J3YXJkIHRoZW0gYXMtaXMuICBJbi1rZXJuZWwgdXNlcnMgdGhhdCBidWlsZCB0aGVpciBvd25cbisgKiBidmVjcyBtdXN0IG5vdCBjcmVhdGUgc3ViLWFsaWduZWQgc2VnbWVudHM7IGlvdl9pdGVyX2V4dHJhY3RfYnZlY3MoKSBlbmZvcmNlc1xuKyAqIHRoZSBzYW1lIGZvciB0aGUgc2VnbWVudHMgaXQgZXh0cmFjdHMgdmlhIEBtZW1fYWxpZ25fbWFzay5cbisgKi9cbiBzc2l6ZV90IGlvdl9pdGVyX2V4dHJhY3RfYnZlY3Moc3RydWN0IGlvdl9pdGVyICppdGVyLCBzdHJ1Y3QgYmlvX3ZlYyAqYnYsXG4gXHRcdHNpemVfdCBtYXhfc2l6ZSwgdW5zaWduZWQgc2hvcnQgKm5yX3ZlY3MsXG4tXHRcdHVuc2lnbmVkIHNob3J0IG1heF92ZWNzLCBpb3ZfaXRlcl9leHRyYWN0aW9uX3QgZXh0cmFjdGlvbl9mbGFncyk7XG4rXHRcdHVuc2lnbmVkIHNob3J0IG1heF92ZWNzLCB1bnNpZ25lZCBtZW1fYWxpZ25fbWFzayxcbitcdFx0aW92X2l0ZXJfZXh0cmFjdGlvbl90IGV4dHJhY3Rpb25fZmxhZ3MpO1xuIFxuIC8qKlxuICAqIGlvdl9pdGVyX2V4dHJhY3Rfd2lsbF9waW4gLSBJbmRpY2F0ZSBob3cgcGFnZXMgZnJvbSB0aGUgaXRlcmF0b3Igd2lsbCBiZSByZXRhaW5lZFxuZGlmZiAtLWdpdCBhL2xpYi9pb3ZfaXRlci5jIGIvbGliL2lvdl9pdGVyLmNcbmluZGV4IDI3MzkxOWIxNjE2MTc2Li5jMzQzMDc1OTUxZGVkMCAxMDA2NDRcbi0tLSBhL2xpYi9pb3ZfaXRlci5jXG4rKysgYi9saWIvaW92X2l0ZXIuY1xuQEAgLTE4ODYsNiArMTg4Niw4IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2NvbnRpZ19mb2xpb19sZW4oc3RydWN0IHBhZ2UgKipwYWdlcyxcbiAgKiBAbWF4X3NpemU6XHRtYXhpbXVtIHNpemUgdG8gZXh0cmFjdCBmcm9tIEBpdGVyXG4gICogQG5yX3ZlY3M6XHRudW1iZXIgb2YgdmVjdG9ycyBpbiBAYnYgKG9uIGluIGFuZCBvdXRwdXQpXG4gICogQG1heF92ZWNzOlx0bWF4aW11bSB2ZWN0b3JzIGluIEBidiwgaW5jbHVkaW5nIHRob3NlIGZpbGxlZCBiZWZvcmUgY2FsbGluZ1xuKyAqIEBtZW1fYWxpZ25fbWFzazpcdHJlamVjdCB3aXRoIC1FSU5WQUwgaWYgdGhlIHNvdXJjZSBhZGRyZXNzIG9yXG4rICpcdFx0bGVuZ3RoIGlzIG5vdCBhbGlnbmVkIHRvIHRoaXMgbWFza1xuICAqIEBleHRyYWN0aW9uX2ZsYWdzOiBmbGFncyB0byBxdWFsaWZ5IHJlcXVlc3RcbiAgKlxuICAqIExpa2UgaW92X2l0ZXJfZXh0cmFjdF9wYWdlcygpLCBidXQgcmV0dXJucyBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgcmFuZ2VzXG5AQCAtMTg5NywxNCArMTg5OSwxOSBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGdldF9jb250aWdfZm9saW9fbGVuKHN0cnVjdCBwYWdlICoqcGFnZXMsXG4gICovXG4gc3NpemVfdCBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzKHN0cnVjdCBpb3ZfaXRlciAqaXRlciwgc3RydWN0IGJpb192ZWMgKmJ2LFxuIFx0XHRzaXplX3QgbWF4X3NpemUsIHVuc2lnbmVkIHNob3J0ICpucl92ZWNzLFxuLVx0XHR1bnNpZ25lZCBzaG9ydCBtYXhfdmVjcywgaW92X2l0ZXJfZXh0cmFjdGlvbl90IGV4dHJhY3Rpb25fZmxhZ3MpXG4rXHRcdHVuc2lnbmVkIHNob3J0IG1heF92ZWNzLCB1bnNpZ25lZCBtZW1fYWxpZ25fbWFzayxcbitcdFx0aW92X2l0ZXJfZXh0cmFjdGlvbl90IGV4dHJhY3Rpb25fZmxhZ3MpXG4ge1xuK1x0dW5zaWduZWQgbG9uZyBzdGFydCA9ICh1bnNpZ25lZCBsb25nKWl0ZXJfaW92X2FkZHIoaXRlcik7XG4gXHR1bnNpZ25lZCBzaG9ydCBlbnRyaWVzX2xlZnQgPSBtYXhfdmVjcyAtICpucl92ZWNzO1xuIFx0dW5zaWduZWQgc2hvcnQgbnJfcGFnZXMsIGkgPSAwO1xuIFx0c2l6ZV90IGxlZnQsIG9mZnNldCwgbGVuO1xuIFx0c3RydWN0IHBhZ2UgKipwYWdlcztcbiBcdHNzaXplX3Qgc2l6ZTtcbiBcbitcdGlmICgoc3RhcnQgfCBpdGVyX2lvdl9sZW4oaXRlcikpIFx1MDAyNiBtZW1fYWxpZ25fbWFzaylcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4gXHQvKlxuIFx0ICogTW92ZSBwYWdlIGFycmF5IHVwIGluIHRoZSBhbGxvY2F0ZWQgbWVtb3J5IGZvciB0aGUgYmlvIHZlY3MgYXMgZmFyIGFzXG4gXHQgKiBwb3NzaWJsZSBzbyB0aGF0IHdlIGNhbiBzdGFydCBmaWxsaW5nIGJpb3ZlY3MgZnJvbSB0aGUgYmVnaW5uaW5nXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxNzo0MjoyNC4zNzE0MTUwMzFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NDY0NTczOTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQmxvY2sgTGF5ZXIgRElPIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQncyBtYWtpbmcgc29tZSBtb2RpZmljYXRpb25zIHRvIHRoZSBibG9jayBsYXllciwgc3BlY2lmaWNhbGx5IGFyb3VuZCBkaXJlY3QgSS9PIChESU8pIGFuZCBob3cgaXQgaGFuZGxlcyBgaW92X2l0ZXJgIGxvZ2ljLiBJdCBsb29rcyBsaWtlIHRoZSBtYWluIHRocnVzdCBvZiB0aGlzIGNoYW5nZSBpcyB0byBpbnRyb2R1Y2UgbWVtb3J5IGFsaWdubWVudCBjaGVja3MuIFNwZWNpZmljYWxseSwgdGhleSdyZSB0aWdodGVuaW5nIHVwIGhvdyB3ZSBoYW5kbGUgbWVtb3J5IGFsaWdubWVudCByZXF1aXJlbWVudHMgZm9yIERJTyB1c2luZyBgYmlvX2lvdl9pdGVyX2dldF9wYWdlc2AgYW5kIGBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzYC4gVGhpcyBpcyBjcnVjaWFsIGZvciBhdm9pZGluZyB0aG9zZSBwZXNreSBhbGlnbm1lbnQtcmVsYXRlZCBwZXJmb3JtYW5jZSBwcm9ibGVtcyBhbmQgZW5zdXJpbmcgdGhlIERNQSB0cmFuc2ZlcnMgd29yayBhcyBleHBlY3RlZC5cblxuSSBzZWUgdGhhdCBgYmlvX2lvdl9pdGVyX2dldF9wYWdlc2AgYW5kIGBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzYCBub3cgYm90aCBhY2NlcHQgYSBgbWVtX2FsaWduX21hc2tgIGFyZ3VtZW50LCB3aGljaCBjb25maXJtcyBteSBpbml0aWFsIGFzc2Vzc21lbnQuIEZ1cnRoZXJtb3JlLCB0aGUgYGxvb3BgIGFuZCBgemxvb3BgIGRyaXZlcnMgaGF2ZSBiZWVuIG1vZGlmaWVkIHRvIGhhbmRsZSBETUEgbGltaXRzIGNvcnJlY3RseSBiYXNlZCBvbiB0aGUgRElPIGFsaWdubWVudCBvZiB0aGUgYmFja2luZyBmaWxlLiBgbG9vcF91cGRhdGVfZGlvX2FsaWdubWVudGAgYW5kIGBsb29wX3NldF9kbWFfbGltaXRgIGFyZSB0aGUgbmV3IGFkZGl0aW9ucyB0byBgbG9vcC5jYCBhbmQgc2ltaWxhciBjaGFuZ2VzIGhhdmUgYmVlbiBtYWRlIGluIHRoZSBgemxvb3BgIGRyaXZlci5cblxuSSBzZWUgaG93IHRoaXMgYWZmZWN0cyB0aGUgYWN0dWFsIGNhbGxzOiBgaW9tYXBfZGlvX2Jpb19pdGVyX29uZWAgYW5kIGBfX2Jsa2Rldl9kaXJlY3RfSU9gIG5vdyBhcmUgcGFzc2luZyB0aGUgRE1BIGFsaWdubWVudCBvZiB0aGUgYmxvY2sgZGV2aWNlIHRvIGBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzYC4gR29vZCwgdGhhdCdzIHdoYXQgSSdkIGV4cGVjdC4gQmFzZWQgb24gdGhpcyBxdWljayBza2ltLCB0aGlzIHBhdGNoIHNlZW1zIGZ1bmN0aW9uYWwgYW5kLCBtb3JlIGltcG9ydGFudGx5LCAqcmVhY2hhYmxlKiDigJMgbWVhbmluZyB3ZSdyZSBhY3R1YWxseSAqdXNpbmcqIHRoZXNlIG1vZGlmaWVkIGZ1bmN0aW9ucy4gVGhhdCdzIGEga2V5IHBvaW50LlxuXG5NeSBuZXh0IHN0ZXAgaXMgY2xlYXI6IHdlIG5lZWQgdG8gZnV6eiB0aGlzISBJIG5lZWQgdG8gaGFtbWVyIGF0IHRob3NlIGFsaWdubWVudCBjaGVja3MgdG8gbG9vayBmb3IgZWRnZSBjYXNlcy4gSSdsbCBuZWVkIHRvIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cyBvbiB0aGVzZSBrZXkgc3ltYm9sczogYGJpb19pb3ZfaXRlcl9nZXRfcGFnZXNgLCBgaW92X2l0ZXJfZXh0cmFjdF9idmVjc2AsIGBsb29wX3VwZGF0ZV9kaW9fYWxpZ25tZW50YCwgYGxvb3Bfc2V0X2RtYV9saW1pdGAsIGB6bG9vcF9nZXRfYmxvY2tfc2l6ZWAsIGFuZCBgemxvb3BfY3RsX2FkZGAuIFRoZXNlIGFyZSB0aGUgY29yZSBmdW5jdGlvbnMgdGhhdCBhcmUgaGFuZGxpbmcgdGhlIERJTyBhbGlnbm1lbnQgY2hlY2tzIGFuZCBETUEgbGltaXQgbG9naWMuXG5cbkZpbmFsbHksIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYHpsb29wYCBpcyBhY3R1YWxseSBhIGRyaXZlciB3ZSBuZWVkIHRvIHdvcnJ5IGFib3V0LiBJIHdpbGwgcXVpY2tseSBydW4gYSBzZWFyY2ggdG8gY29uZmlybSwgbGlrZWx5IHVzaW5nIGBjb2Rlc2VhcmNoLWRpci1pbmRleGAgb3IgYGdyZXBwZXJgIOKAkyBob3BlZnVsbHksIEkgZmluZCBpdCwgYXMgdGhhdCB3aWxsIGFkZCBhbm90aGVyIGNvbXBvbmVudCB0byB0aGUgcHV6emxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NzY4LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzc2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTc6NDI6MzEuODM1OTkxODY2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MDc1MDE3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6bG9vcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDY4NCBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuZHJpdmVycy9ibG9jay9LY29uZmlnPTM1Nj1jb25maWcgQkxLX0RFVl9aT05FRF9MT09QXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzY3LVxcdCAgZWNobyBcXFwiYWRkIGlkPTAsem9uZV9zaXplX21iPTI1NixjYXBhY2l0eV9tYj0xNjM4NCxjb252X3pvbmVzPTExXFxcIiBcXHUwMDNlIFxcXFxcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MzY4OlxcdFxcdC9kZXYvemxvb3AtY29udHJvbFxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zNjktXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL01ha2VmaWxlPTQwPW9iai0kKENPTkZJR19CTEtfREVWX1VCTEspXFx0XFx0XFx0Kz0gdWJsa19kcnYub1xcbmRyaXZlcnMvYmxvY2svTWFrZWZpbGU6NDE6b2JqLSQoQ09ORklHX0JMS19ERVZfWk9ORURfTE9PUCkgKz0gemxvb3Aub1xcbmRyaXZlcnMvYmxvY2svTWFrZWZpbGUtNDItXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM9MjU9ZW51bSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNDEtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjQyOnN0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHpsb29wX29wdF90b2tlbnMgPSB7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTQzLVxcdHsgWkxPT1BfT1BUX0lELFxcdFxcdFxcdFxcXCJpZD0lZFxcXCJcXHR9LFxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTY0LSNkZWZpbmUgWkxPT1BfREVGX01BWF9PUEVOX1pPTkVTXFx0MFxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo2NTojZGVmaW5lIFpMT09QX0RFRl9CQVNFX0RJUlxcdFxcdFxcXCIvdmFyL2xvY2FsL3psb29wXFxcIlxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy02Ni0jZGVmaW5lIFpMT09QX0RFRl9OUl9RVUVVRVNcXHRcXHQxXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzQtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjc1OnN0cnVjdCB6bG9vcF9vcHRpb25zIHtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzYtXFx0dW5zaWduZWQgaW50XFx0XFx0bWFzaztcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYz05NT1lbnVtIHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDAtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEwMTplbnVtIHpsb29wX3pvbmVfZmxhZ3Mge1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDItXFx0WkxPT1BfWk9ORV9DT05WID0gMCxcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDktICovXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjExMDpzdHJ1Y3Qgemxvb3Bfem9uZSB7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExMS1cXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0b3Blbl96b25lX2VudHJ5O1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEyMy1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTI0OnN0cnVjdCB6bG9vcF9kZXZpY2Uge1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMjUtXFx0dW5zaWduZWQgaW50XFx0XFx0aWQ7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTUyLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxNTM6XFx0c3RydWN0IHpsb29wX3pvbmVcXHR6b25lc1tdIF9fY291bnRlZF9ieShucl96b25lcyk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTE1NC19O1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xNTUtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjE1NjpzdHJ1Y3Qgemxvb3BfY21kIHtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTU3LVxcdHN0cnVjdCB3b3JrX3N0cnVjdFxcdHdvcms7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTY1LVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxNjY6c3RhdGljIERFRklORV9JRFIoemxvb3BfaW5kZXhfaWRyKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTY3OnN0YXRpYyBERUZJTkVfTVVURVgoemxvb3BfY3RsX211dGV4KTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTY4LVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYz0xNjk9c3RhdGljIHVuc2lnbmVkIGludCBycV96b25lX25vKHN0cnVjdCByZXF1ZXN0ICpycSlcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTcwLXtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTcxOlxcdHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyA9IHJxLVxcdTAwM2VxLVxcdTAwM2VxdWV1ZWRhdGE7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTE3Mi1cXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xODEtICovXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjE4MjpzdGF0aWMgaW5saW5lIHZvaWQgemxvb3BfbHJ1X3JvdGF0ZV9vcGVuX3pvbmUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLFxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxODM6XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHpsb29wX3pvbmUgKnpvbmUpXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTE4NC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTkyLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxOTM6c3RhdGljIGlubGluZSB2b2lkIHpsb29wX2xydV9yZW1vdmVfb3Blbl96b25lKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyxcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTk0OlxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCB6bG9vcF96b25lICp6b25lKVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xOTUte1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTIwNC1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MjA1OnN0YXRpYyBpbmxpbmUgYm9vbCB6bG9vcF9jYW5fb3Blbl96b25lKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbylcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjA2LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0yMTQtICovXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjIxNTpzdGF0aWMgYm9vbCB6bG9vcF9jbG9zZV9pbXBfb3Blbl96b25lKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbylcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjE2LXtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MjE3OlxcdHN0cnVjdCB6bG9vcF96b25lICp6b25lO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0yMTgtXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjIwLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoyMjE6XFx0aWYgKHpsb29wX2Nhbl9vcGVuX3pvbmUoemxvKSlcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjIyLVxcdFxcdHJldHVybiB0cnVlO1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTIzNS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MjM2OnN0YXRpYyBib29sIHpsb29wX29wZW5fY2xvc2VkX29yX2VtcHR5X3pvbmUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLFxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoyMzc6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCB6bG9vcF96b25lICp6b25lLFxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0yMzgtXFx0XFx0XFx0XFx0XFx0ICAgIGJvb2wgZXhwbGljaXQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjQ2LVxcdFxcdCAqL1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoyNDc6XFx0XFx0aWYgKCF6bG9vcF9jYW5fb3Blbl96b25lKHpsbykpXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTI0OC1cXHRcXHRcXHRnb3RvIGZhaWw7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjU0LVxcdFxcdCAqL1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoyNTU6XFx0XFx0aWYgKCF6bG9vcF9jbG9zZV9pbXBfb3Blbl96b25lKHpsbykpXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTI1Ni1cXHRcXHRcXHRnb3RvIGZhaWw7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjczLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoyNzQ6c3RhdGljIGJvb2wgemxvb3BfZG9fb3Blbl96b25lKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyxcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6Mjc1OlxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgemxvb3Bfem9uZSAqem9uZSwgYm9vbCBleHBsaWNpdClcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjc2LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0yODEtXFx0XFx0XFx0em9uZS1cXHUwMDNlY29uZCA9IEJMS19aT05FX0NPTkRfRVhQX09QRU47XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjI4MjpcXHRcXHR6bG9vcF9scnVfcm90YXRlX29wZW5fem9uZSh6bG8sIHpvbmUpO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0yODMtXFx0XFx0cmV0dXJuIHRydWU7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjg1LVxcdGNhc2UgQkxLX1pPTkVfQ09ORF9DTE9TRUQ6XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjI4NjpcXHRcXHRyZXR1cm4gemxvb3Bfb3Blbl9jbG9zZWRfb3JfZW1wdHlfem9uZSh6bG8sIHpvbmUsIGV4cGxpY2l0KTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjg3LVxcdGRlZmF1bHQ6XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjkxLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoyOTI6c3RhdGljIHZvaWQgemxvb3BfbWFya19mdWxsKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbywgc3RydWN0IHpsb29wX3pvbmUgKnpvbmUpXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTI5My17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjk1LVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoyOTY6XFx0emxvb3BfbHJ1X3JlbW92ZV9vcGVuX3pvbmUoemxvLCB6b25lKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjk3LVxcdHpvbmUtXFx1MDAzZWNvbmQgPSBCTEtfWk9ORV9DT05EX0ZVTEw7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMzAwLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzozMDE6c3RhdGljIHZvaWQgemxvb3BfbWFya19lbXB0eShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8sIHN0cnVjdCB6bG9vcF96b25lICp6b25lKVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zMDIte1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTMwNC1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MzA1OlxcdHpsb29wX2xydV9yZW1vdmVfb3Blbl96b25lKHpsbywgem9uZSk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTMwNi1cXHR6b25lLVxcdTAwM2Vjb25kID0gQkxLX1pPTkVfQ09ORF9FTVBUWTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zMDktXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjMxMDpzdGF0aWMgaW50IHpsb29wX3VwZGF0ZV9zZXFfem9uZShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8sIHVuc2lnbmVkIGludCB6b25lX25vKVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zMTEte1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzozMTI6XFx0c3RydWN0IHpsb29wX3pvbmUgKnpvbmUgPSBcXHUwMDI2emxvLVxcdTAwM2V6b25lc1t6b25lX25vXTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMzEzLVxcdHN0cnVjdCBrc3RhdCBzdGF0O1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTM0MS1cXHRpZiAoIWZpbGVfc2VjdG9ycykge1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzozNDI6XFx0XFx0emxvb3BfbWFya19lbXB0eSh6bG8sIHpvbmUpO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zNDMtXFx0fSBlbHNlIGlmIChmaWxlX3NlY3RvcnMgPT0gemxvLVxcdTAwM2V6b25lX2NhcGFjaXR5KSB7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjM0NDpcXHRcXHR6bG9vcF9tYXJrX2Z1bGwoemxvLCB6b25lKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMzQ1LVxcdH0gZWxzZSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMzU1LVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzozNTY6c3RhdGljIGludCB6bG9vcF9vcGVuX3pvbmUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLCB1bnNpZ25lZCBpbnQgem9uZV9ubylcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMzU3LXtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MzU4OlxcdHN0cnVjdCB6bG9vcF96b25lICp6b25lID0gXFx1MDAyNnpsby1cXHUwMDNlem9uZXNbem9uZV9ub107XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTM1OS1cXHRpbnQgcmV0ID0gMDtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zNjYtXFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChaTE9PUF9aT05FX1NFUV9FUlJPUiwgXFx1MDAyNnpvbmUtXFx1MDAzZWZsYWdzKSkge1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzozNjc6XFx0XFx0cmV0ID0gemxvb3BfdXBkYXRlX3NlcV96b25lKHpsbywgem9uZV9ubyk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTM2OC1cXHRcXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTM3MS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MzcyOlxcdGlmICghemxvb3BfZG9fb3Blbl96b25lKHpsbywgem9uZSwgdHJ1ZSkpXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTM3My1cXHRcXHRyZXQgPSAtRUlPO1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTM4MC1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MzgxOnN0YXRpYyBpbnQgemxvb3BfY2xvc2Vfem9uZShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8sIHVuc2lnbmVkIGludCB6b25lX25vKVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zODIte1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzozODM6XFx0c3RydWN0IHpsb29wX3pvbmUgKnpvbmUgPSBcXHUwMDI2emxvLVxcdTAwM2V6b25lc1t6b25lX25vXTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMzg0LVxcdGludCByZXQgPSAwO1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTM5MS1cXHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KFpMT09QX1pPTkVfU0VRX0VSUk9SLCBcXHUwMDI2em9uZS1cXHUwMDNlZmxhZ3MpKSB7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjM5MjpcXHRcXHRyZXQgPSB6bG9vcF91cGRhdGVfc2VxX3pvbmUoemxvLCB6b25lX25vKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMzkzLVxcdFxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNDAyLVxcdFxcdHNwaW5fbG9jayhcXHUwMDI2em9uZS1cXHUwMDNld3BfbG9jayk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjQwMzpcXHRcXHR6bG9vcF9scnVfcmVtb3ZlX29wZW5fem9uZSh6bG8sIHpvbmUpO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy00MDQtXFx0XFx0aWYgKHpvbmUtXFx1MDAzZXdwID09IHpvbmUtXFx1MDAzZXN0YXJ0KVxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTQyMi1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NDIzOnN0YXRpYyBpbnQgemxvb3BfcmVzZXRfem9uZShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8sIHVuc2lnbmVkIGludCB6b25lX25vKVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy00MjQte1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo0MjU6XFx0c3RydWN0IHpsb29wX3pvbmUgKnpvbmUgPSBcXHUwMDI2emxvLVxcdTAwM2V6b25lc1t6b25lX25vXTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNDI2LVxcdGludCByZXQgPSAwO1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTQ0My1cXHRzcGluX2xvY2soXFx1MDAyNnpvbmUtXFx1MDAzZXdwX2xvY2spO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo0NDQ6XFx0emxvb3BfbWFya19lbXB0eSh6bG8sIHpvbmUpO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy00NDUtXFx0Y2xlYXJfYml0KFpMT09QX1pPTkVfU0VRX0VSUk9SLCBcXHUwMDI2em9uZS1cXHUwMDNlZmxhZ3MpO1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTQ1My1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NDU0OnN0YXRpYyBpbnQgemxvb3BfcmVzZXRfYWxsX3pvbmVzKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbylcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNDU1LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy00NTktXFx0Zm9yIChpID0gemxvLVxcdTAwM2Vucl9jb252X3pvbmVzOyBpIFxcdTAwM2MgemxvLVxcdTAwM2Vucl96b25lczsgaSsrKSB7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjQ2MDpcXHRcXHRyZXQgPSB6bG9vcF9yZXNldF96b25lKHpsbywgaSk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTQ2MS1cXHRcXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTQ2Ny1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NDY4OnN0YXRpYyBpbnQgemxvb3BfZmluaXNoX3pvbmUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLCB1bnNpZ25lZCBpbnQgem9uZV9ubylcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNDY5LXtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NDcwOlxcdHN0cnVjdCB6bG9vcF96b25lICp6b25lID0gXFx1MDAyNnpsby1cXHUwMDNlem9uZXNbem9uZV9ub107XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTQ3MS1cXHRpbnQgcmV0ID0gMDtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy00ODgtXFx0c3Bpbl9sb2NrKFxcdTAwMjZ6b25lLVxcdTAwM2V3cF9sb2NrKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NDg5OlxcdHpsb29wX21hcmtfZnVsbCh6bG8sIHpvbmUpO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy00OTAtXFx0Y2xlYXJfYml0KFpMT09QX1pPTkVfU0VRX0VSUk9SLCBcXHUwMDI2em9uZS1cXHUwMDNlZmxhZ3MpO1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTQ5OC1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NDk5OnN0YXRpYyB2b2lkIHpsb29wX3B1dF9jbWQoc3RydWN0IHpsb29wX2NtZCAqY21kKVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy01MDAte1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTUxMC1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NTExOnN0YXRpYyB2b2lkIHpsb29wX3J3X2NvbXBsZXRlKHN0cnVjdCBraW9jYiAqaW9jYiwgbG9uZyByZXQpXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTUxMi17XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjUxMzpcXHRzdHJ1Y3Qgemxvb3BfY21kICpjbWQgPSBjb250YWluZXJfb2YoaW9jYiwgc3RydWN0IHpsb29wX2NtZCwgaW9jYik7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTUxNC1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTE1LVxcdGNtZC1cXHUwMDNlcmV0ID0gcmV0O1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo1MTY6XFx0emxvb3BfcHV0X2NtZChjbWQpO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy01MTctfVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy01MTgtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjUxOTpzdGF0aWMgaW50IHpsb29wX2RvX3J3KHN0cnVjdCB6bG9vcF9jbWQgKmNtZClcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTIwLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy01MjMtXFx0dW5zaWduZWQgaW50IG5yX2J2ZWMgPSBibGtfcnFfbnJfYnZlYyhycSk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjUyNDpcXHRzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8gPSBycS1cXHUwMDNlcS1cXHUwMDNlcXVldWVkYXRhO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo1MjU6XFx0c3RydWN0IHpsb29wX3pvbmUgKnpvbmUgPSBcXHUwMDI2emxvLVxcdTAwM2V6b25lc1tycV96b25lX25vKHJxKV07XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTUyNi1cXHRzdHJ1Y3QgcmVxX2l0ZXJhdG9yIHJxX2l0ZXI7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTYxLVxcdGNtZC1cXHUwMDNlaW9jYi5raV9maWxwID0gem9uZS1cXHUwMDNlZmlsZTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NTYyOlxcdGNtZC1cXHUwMDNlaW9jYi5raV9jb21wbGV0ZSA9IHpsb29wX3J3X2NvbXBsZXRlO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy01NjMtXFx0aWYgKCF6bG8tXFx1MDAzZWJ1ZmZlcmVkX2lvKVxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTU3MS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NTcyOnN0YXRpYyBpbnQgemxvb3Bfc2VxX3dyaXRlX3ByZXAoc3RydWN0IHpsb29wX2NtZCAqY21kKVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy01NzMte1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy01NzQtXFx0c3RydWN0IHJlcXVlc3QgKnJxID0gYmxrX21xX3JxX2Zyb21fcGR1KGNtZCk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjU3NTpcXHRzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8gPSBycS1cXHUwMDNlcS1cXHUwMDNlcXVldWVkYXRhO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy01NzYtXFx0dW5zaWduZWQgaW50IHpvbmVfbm8gPSBycV96b25lX25vKHJxKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy01NzgtXFx0Ym9vbCBpc19hcHBlbmQgPSByZXFfb3AocnEpID09IFJFUV9PUF9aT05FX0FQUEVORDtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NTc5OlxcdHN0cnVjdCB6bG9vcF96b25lICp6b25lID0gXFx1MDAyNnpsby1cXHUwMDNlem9uZXNbem9uZV9ub107XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTU4MC1cXHRzZWN0b3JfdCB6b25lX2VuZCA9IHpvbmUtXFx1MDAzZXN0YXJ0ICsgemxvLVxcdTAwM2V6b25lX2NhcGFjaXR5O1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTU5Mi1cXHRcXHQgKiBJZiBvcmRlcmVkIHpvbmUgYXBwZW5kIGlzIGluIHVzZSwgd2UgYWxyZWFkeSBjaGVja2VkIGFuZCBzZXRcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NTkzOlxcdFxcdCAqIHRoZSB0YXJnZXQgc2VjdG9yIGluIHpsb29wX3F1ZXVlX3JxKCkuXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTU5NC1cXHRcXHQgKi9cXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy02MTItXFx0LyogSW1wbGljaXRseSBvcGVuIHRoZSB0YXJnZXQgem9uZS4gKi9cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NjEzOlxcdGlmICghemxvb3BfZG9fb3Blbl96b25lKHpsbywgem9uZSwgZmFsc2UpKSB7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTYxNC1cXHRcXHRyZXQgPSAtRUlPO1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTYyNS1cXHRcXHRpZiAoem9uZS1cXHUwMDNld3AgPT0gem9uZV9lbmQpXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjYyNjpcXHRcXHRcXHR6bG9vcF9tYXJrX2Z1bGwoemxvLCB6b25lKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNjI3LVxcdH1cXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy02MzItXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjYzMzpzdGF0aWMgdm9pZCB6bG9vcF9ydyhzdHJ1Y3Qgemxvb3BfY21kICpjbWQpXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTYzNC17XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTYzNS1cXHRzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBibGtfbXFfcnFfZnJvbV9wZHUoY21kKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NjM2OlxcdHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyA9IHJxLVxcdTAwM2VxLVxcdTAwM2VxdWV1ZWRhdGE7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTYzNy1cXHR1bnNpZ25lZCBpbnQgem9uZV9ubyA9IHJxX3pvbmVfbm8ocnEpO1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTY0MC1cXHRib29sIGlzX3dyaXRlID0gcmVxX29wKHJxKSA9PSBSRVFfT1BfV1JJVEUgfHwgaXNfYXBwZW5kO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo2NDE6XFx0c3RydWN0IHpsb29wX3pvbmUgKnpvbmU7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTY0Mi1cXHRpbnQgcmV0ID0gLUVJTztcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy02NjctXFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2em9uZS1cXHUwMDNlbG9jayk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjY2ODpcXHRcXHRyZXQgPSB6bG9vcF91cGRhdGVfc2VxX3pvbmUoemxvLCB6b25lX25vKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNjY5LVxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2em9uZS1cXHUwMDNlbG9jayk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNjc1LVxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnpvbmUtXFx1MDAzZWxvY2spO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo2NzY6XFx0XFx0cmV0ID0gemxvb3Bfc2VxX3dyaXRlX3ByZXAoY21kKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNjc3LVxcdFxcdGlmICghcmV0KVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo2Nzg6XFx0XFx0XFx0cmV0ID0gemxvb3BfZG9fcncoY21kKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNjc5LVxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2em9uZS1cXHUwMDNlbG9jayk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTY4MC1cXHR9IGVsc2Uge1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo2ODE6XFx0XFx0cmV0ID0gemxvb3BfZG9fcncoY21kKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNjgyLVxcdH1cXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy02ODQtXFx0aWYgKHJldCAhPSAtRUlPQ0JRVUVVRUQpXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjY4NTpcXHRcXHR6bG9vcF9yd19jb21wbGV0ZShcXHUwMDI2Y21kLVxcdTAwM2Vpb2NiLCByZXQpO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo2ODY6XFx0emxvb3BfcHV0X2NtZChjbWQpO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy02ODctfVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy02ODgtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjY4OTpzdGF0aWMgaW5saW5lIGJvb2wgemxvb3Bfem9uZV9pc19hY3RpdmUoc3RydWN0IHpsb29wX3pvbmUgKnpvbmUpXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTY5MC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzAwLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo3MDE6c3RhdGljIGludCB6bG9vcF9yZWNvcmRfc2FmZV93cHMoc3RydWN0IHpsb29wX2RldmljZSAqemxvKVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03MDIte1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTcwNi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgemxvLVxcdTAwM2Vucl96b25lczsgaSsrKSB7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjcwNzpcXHRcXHRzdHJ1Y3Qgemxvb3Bfem9uZSAqem9uZSA9IFxcdTAwMjZ6bG8tXFx1MDAzZXpvbmVzW2ldO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03MDgtXFx0XFx0c3RydWN0IGZpbGUgKmZpbGUgPSB6b25lLVxcdTAwM2VmaWxlO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03MDktXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjcxMDpcXHRcXHRpZiAoIXpsb29wX3pvbmVfaXNfYWN0aXZlKHpvbmUpKVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03MTEtXFx0XFx0XFx0Y29udGludWU7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTcxMi1cXHRcXHRyZXQgPSB2ZnNfc2V0eGF0dHIoZmlsZV9tbnRfaWRtYXAoZmlsZSksIGZpbGVfZGVudHJ5KGZpbGUpLFxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo3MTM6XFx0XFx0XFx0XFx0XFxcInVzZXIuemxvb3Aud3BcXFwiLCBcXHUwMDI2em9uZS1cXHUwMDNld3AsIHNpemVvZih6b25lLVxcdTAwM2V3cCksIDApO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03MTQtXFx0XFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTcyNi0gKi9cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NzI3OnN0YXRpYyBpbnQgemxvb3BfZmx1c2goc3RydWN0IHpsb29wX2RldmljZSAqemxvKVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03Mjgte1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTczMi1cXHRpZiAoemxvLVxcdTAwM2VkaXNjYXJkX3dyaXRlX2NhY2hlKSB7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjczMzpcXHRcXHRyZXQgPSB6bG9vcF9yZWNvcmRfc2FmZV93cHMoemxvKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzM0LVxcdFxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzQ0LVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo3NDU6c3RhdGljIHZvaWQgemxvb3BfaGFuZGxlX2NtZChzdHJ1Y3Qgemxvb3BfY21kICpjbWQpXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc0Ni17XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc0Ny1cXHRzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBibGtfbXFfcnFfZnJvbV9wZHUoY21kKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NzQ4OlxcdHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyA9IHJxLVxcdTAwM2VxLVxcdTAwM2VxdWV1ZWRhdGE7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc0OS1cXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03NTgtXFx0XFx0LypcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NzU5OlxcdFxcdCAqIHpsb29wX3J3KCkgYWx3YXlzIGV4ZWN1dGVzIGFzeW5jaHJvbm91c2x5IG9yIGNvbXBsZXRlc1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03NjAtXFx0XFx0ICogZGlyZWN0bHkuXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc2MS1cXHRcXHQgKi9cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NzYyOlxcdFxcdHpsb29wX3J3KGNtZCk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc2My1cXHRcXHRyZXR1cm47XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc2NC1cXHRjYXNlIFJFUV9PUF9GTFVTSDpcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NzY1OlxcdFxcdGNtZC1cXHUwMDNlcmV0ID0gemxvb3BfZmx1c2goemxvKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzY2LVxcdFxcdGJyZWFrO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03NjctXFx0Y2FzZSBSRVFfT1BfWk9ORV9SRVNFVDpcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NzY4OlxcdFxcdGNtZC1cXHUwMDNlcmV0ID0gemxvb3BfcmVzZXRfem9uZSh6bG8sIHJxX3pvbmVfbm8ocnEpKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzY5LVxcdFxcdGJyZWFrO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03NzAtXFx0Y2FzZSBSRVFfT1BfWk9ORV9SRVNFVF9BTEw6XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjc3MTpcXHRcXHRjbWQtXFx1MDAzZXJldCA9IHpsb29wX3Jlc2V0X2FsbF96b25lcyh6bG8pO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03NzItXFx0XFx0YnJlYWs7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc3My1cXHRjYXNlIFJFUV9PUF9aT05FX0ZJTklTSDpcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6Nzc0OlxcdFxcdGNtZC1cXHUwMDNlcmV0ID0gemxvb3BfZmluaXNoX3pvbmUoemxvLCBycV96b25lX25vKHJxKSk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc3NS1cXHRcXHRicmVhaztcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzc2LVxcdGNhc2UgUkVRX09QX1pPTkVfT1BFTjpcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6Nzc3OlxcdFxcdGNtZC1cXHUwMDNlcmV0ID0gemxvb3Bfb3Blbl96b25lKHpsbywgcnFfem9uZV9ubyhycSkpO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03NzgtXFx0XFx0YnJlYWs7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc3OS1cXHRjYXNlIFJFUV9PUF9aT05FX0NMT1NFOlxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo3ODA6XFx0XFx0Y21kLVxcdTAwM2VyZXQgPSB6bG9vcF9jbG9zZV96b25lKHpsbywgcnFfem9uZV9ubyhycSkpO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03ODEtXFx0XFx0YnJlYWs7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzkxLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo3OTI6c3RhdGljIHZvaWQgemxvb3BfY21kX3dvcmtmbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc5My17XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjc5NDpcXHRzdHJ1Y3Qgemxvb3BfY21kICpjbWQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHpsb29wX2NtZCwgd29yayk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc5NS1cXHRpbnQgb3JpZ19mbGFncyA9IGN1cnJlbnQtXFx1MDAzZWZsYWdzO1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc5Ny1cXHRjdXJyZW50LVxcdTAwM2VmbGFncyB8PSBQRl9MT0NBTF9USFJPVFRMRSB8IFBGX01FTUFMTE9DX05PSU87XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjc5ODpcXHR6bG9vcF9oYW5kbGVfY21kKGNtZCk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc5OS1cXHRjdXJyZW50LVxcdTAwM2VmbGFncyA9IG9yaWdfZmxhZ3M7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtODAxLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo4MDI6c3RhdGljIHZvaWQgemxvb3BfY29tcGxldGVfcnEoc3RydWN0IHJlcXVlc3QgKnJxKVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy04MDMte1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo4MDQ6XFx0c3RydWN0IHpsb29wX2NtZCAqY21kID0gYmxrX21xX3JxX3RvX3BkdShycSk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjgwNTpcXHRzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8gPSBycS1cXHUwMDNlcS1cXHUwMDNlcXVldWVkYXRhO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy04MDYtXFx0dW5zaWduZWQgaW50IHpvbmVfbm8gPSBjbWQtXFx1MDAzZXNlY3RvciBcXHUwMDNlXFx1MDAzZSB6bG8tXFx1MDAzZXpvbmVfc2hpZnQ7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjgwNzpcXHRzdHJ1Y3Qgemxvb3Bfem9uZSAqem9uZSA9IFxcdTAwMjZ6bG8tXFx1MDAzZXpvbmVzW3pvbmVfbm9dO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy04MDgtXFx0YmxrX3N0YXR1c190IHN0cyA9IEJMS19TVFNfT0s7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtODU5LVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo4NjA6c3RhdGljIGJvb2wgemxvb3Bfc2V0X3pvbmVfYXBwZW5kX3NlY3RvcihzdHJ1Y3QgcmVxdWVzdCAqcnEpXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTg2MS17XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjg2MjpcXHRzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8gPSBycS1cXHUwMDNlcS1cXHUwMDNlcXVldWVkYXRhO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy04NjMtXFx0dW5zaWduZWQgaW50IHpvbmVfbm8gPSBycV96b25lX25vKHJxKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6ODY0OlxcdHN0cnVjdCB6bG9vcF96b25lICp6b25lID0gXFx1MDAyNnpsby1cXHUwMDNlem9uZXNbem9uZV9ub107XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTg2NS1cXHRzZWN0b3JfdCB6b25lX2VuZCA9IHpvbmUtXFx1MDAzZXN0YXJ0ICsgemxvLVxcdTAwM2V6b25lX2NhcGFjaXR5O1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTg3OC1cXHRpZiAoem9uZS1cXHUwMDNld3AgXFx1MDAzZT0gem9uZV9lbmQpXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjg3OTpcXHRcXHR6bG9vcF9tYXJrX2Z1bGwoemxvLCB6b25lKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtODgwLVxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTg4NS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6ODg2OnN0YXRpYyBibGtfc3RhdHVzX3Qgemxvb3BfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTg4Ny1cXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgYmxrX21xX3F1ZXVlX2RhdGEgKmJkKVxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTg4OS1cXHRzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBiZC1cXHUwMDNlcnE7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjg5MDpcXHRzdHJ1Y3Qgemxvb3BfY21kICpjbWQgPSBibGtfbXFfcnFfdG9fcGR1KHJxKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6ODkxOlxcdHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyA9IHJxLVxcdTAwM2VxLVxcdTAwM2VxdWV1ZWRhdGE7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTg5Mi1cXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy05MDMtXFx0aWYgKHpsby1cXHUwMDNlb3JkZXJlZF96b25lX2FwcGVuZCBcXHUwMDI2XFx1MDAyNiByZXFfb3AocnEpID09IFJFUV9PUF9aT05FX0FQUEVORCkge1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo5MDQ6XFx0XFx0aWYgKCF6bG9vcF9zZXRfem9uZV9hcHBlbmRfc2VjdG9yKHJxKSlcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTA1LVxcdFxcdFxcdHJldHVybiBCTEtfU1RTX0lPRVJSO1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTkwOS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6OTEwOlxcdElOSVRfV09SSyhcXHUwMDI2Y21kLVxcdTAwM2V3b3JrLCB6bG9vcF9jbWRfd29ya2ZuKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTExLVxcdHF1ZXVlX3dvcmsoemxvLVxcdTAwM2V3b3JrcXVldWUsIFxcdTAwMjZjbWQtXFx1MDAzZXdvcmspO1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTkxNS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6OTE2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxrX21xX29wcyB6bG9vcF9tcV9vcHMgPSB7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjkxNzpcXHQucXVldWVfcnEgICAgICAgPSB6bG9vcF9xdWV1ZV9ycSxcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6OTE4OlxcdC5jb21wbGV0ZVxcdD0gemxvb3BfY29tcGxldGVfcnEsXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTkxOS19O1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy05MjAtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjkyMTpzdGF0aWMgaW50IHpsb29wX29wZW4oc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJsa19tb2RlX3QgbW9kZSlcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTIyLXtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6OTIzOlxcdHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyA9IGRpc2stXFx1MDAzZXByaXZhdGVfZGF0YTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTI0LVxcdGludCByZXQ7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTkyNS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6OTI2OlxcdHJldCA9IG11dGV4X2xvY2tfa2lsbGFibGUoXFx1MDAyNnpsb29wX2N0bF9tdXRleCk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTkyNy1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTkzMS1cXHRcXHRyZXQgPSAtRU5YSU87XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjkzMjpcXHRtdXRleF91bmxvY2soXFx1MDAyNnpsb29wX2N0bF9tdXRleCk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTkzMy1cXHRyZXR1cm4gcmV0O1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTkzNS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6OTM2OnN0YXRpYyBpbnQgemxvb3BfcmVwb3J0X3pvbmVzKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBzZWN0b3JfdCBzZWN0b3IsXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTkzNy1cXHRcXHR1bnNpZ25lZCBpbnQgbnJfem9uZXMsIHN0cnVjdCBibGtfcmVwb3J0X3pvbmVzX2FyZ3MgKmFyZ3MpXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTkzOC17XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjkzOTpcXHRzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8gPSBkaXNrLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTk0MC1cXHRzdHJ1Y3QgYmxrX3pvbmUgYmxreiA9IHt9O1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTk1MC1cXHRcXHR1bnNpZ25lZCBpbnQgem9uZV9ubyA9IGZpcnN0ICsgaTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6OTUxOlxcdFxcdHN0cnVjdCB6bG9vcF96b25lICp6b25lID0gXFx1MDAyNnpsby1cXHUwMDNlem9uZXNbem9uZV9ub107XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTk1Mi1cXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy05NTUtXFx0XFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChaTE9PUF9aT05FX1NFUV9FUlJPUiwgXFx1MDAyNnpvbmUtXFx1MDAzZWZsYWdzKSkge1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo5NTY6XFx0XFx0XFx0cmV0ID0gemxvb3BfdXBkYXRlX3NlcV96b25lKHpsbywgem9uZV9ubyk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTk1Ny1cXHRcXHRcXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTg2LVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo5ODc6c3RhdGljIHZvaWQgemxvb3BfZnJlZV9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy05ODgte1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo5ODk6XFx0c3RydWN0IHpsb29wX2RldmljZSAqemxvID0gZGlzay1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy05OTAtXFx0dW5zaWduZWQgaW50IGk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTk0LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB6bG8tXFx1MDAzZW5yX3pvbmVzOyBpKyspIHtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6OTk1OlxcdFxcdHN0cnVjdCB6bG9vcF96b25lICp6b25lID0gXFx1MDAyNnpsby1cXHUwMDNlem9uZXNbaV07XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTk5Ni1cXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDA3LVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMDA4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgemxvb3BfZm9wcyA9IHtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTAwOS1cXHQub3duZXJcXHRcXHRcXHQ9IFRISVNfTU9EVUxFLFxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMDEwOlxcdC5vcGVuXFx0XFx0XFx0PSB6bG9vcF9vcGVuLFxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMDExOlxcdC5yZXBvcnRfem9uZXNcXHRcXHQ9IHpsb29wX3JlcG9ydF96b25lcyxcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTAxMjpcXHQuZnJlZV9kaXNrXFx0XFx0PSB6bG9vcF9mcmVlX2Rpc2ssXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwMTMtfTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYz0xMDE1PV9fcHJpbnRmKDMsIDQpXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEwMTY6c3RhdGljIHN0cnVjdCBmaWxlICp6bG9vcF9maWxwX29wZW5fZm10KGludCBvZmxhZ3MsIHVtb2RlX3QgbW9kZSxcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTAxNy1cXHRcXHRjb25zdCBjaGFyICpmbXQsIC4uLilcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDMzLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMDM0OnN0YXRpYyBpbnQgemxvb3BfZ2V0X2Jsb2NrX3NpemUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLFxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMDM1OlxcdFxcdFxcdFxcdHN0cnVjdCB6bG9vcF96b25lICp6b25lKVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDM2LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDc0LVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMDc1OnN0YXRpYyBpbnQgemxvb3BfaW5pdF96b25lKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbywgc3RydWN0IHpsb29wX29wdGlvbnMgKm9wdHMsXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwNzYtXFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IHpvbmVfbm8sIGJvb2wgcmVzdG9yZSlcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTA3Ny17XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEwNzg6XFx0c3RydWN0IHpsb29wX3pvbmUgKnpvbmUgPSBcXHUwMDI2emxvLVxcdTAwM2V6b25lc1t6b25lX25vXTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTA3OS1cXHRpbnQgb2ZsYWdzID0gT19SRFdSO1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExMDAtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjExMDE6XFx0XFx0em9uZS1cXHUwMDNlZmlsZSA9IHpsb29wX2ZpbHBfb3Blbl9mbXQob2ZsYWdzLCAwNjAwLCBcXFwiJXMvJXUvY252LSUwNnVcXFwiLFxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTAyLVxcdFxcdFxcdFxcdFxcdHpsby1cXHUwMDNlYmFzZV9kaXIsIHpsby1cXHUwMDNlaWQsIHpvbmVfbm8pO1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExMTAtXFx0XFx0aWYgKCF6bG8tXFx1MDAzZWJsb2NrX3NpemUpIHtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTExMTpcXHRcXHRcXHRyZXQgPSB6bG9vcF9nZXRfYmxvY2tfc2l6ZSh6bG8sIHpvbmUpO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTEyLVxcdFxcdFxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE0MC1cXHQvKiBTZXF1ZW50aWFsIHpvbmUgZmlsZS4gKi9cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTE0MTpcXHR6b25lLVxcdTAwM2VmaWxlID0gemxvb3BfZmlscF9vcGVuX2ZtdChvZmxhZ3MsIDA2MDAsIFxcXCIlcy8ldS9zZXEtJTA2dVxcXCIsXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExNDItXFx0XFx0XFx0XFx0XFx0IHpsby1cXHUwMDNlYmFzZV9kaXIsIHpsby1cXHUwMDNlaWQsIHpvbmVfbm8pO1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExNTAtXFx0aWYgKCF6bG8tXFx1MDAzZWJsb2NrX3NpemUpIHtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTE1MTpcXHRcXHRyZXQgPSB6bG9vcF9nZXRfYmxvY2tfc2l6ZSh6bG8sIHpvbmUpO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTUyLVxcdFxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE1NS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTE1NjpcXHR6bG9vcF9nZXRfYmxvY2tfc2l6ZSh6bG8sIHpvbmUpO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTU3LVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTU4LVxcdG11dGV4X2xvY2soXFx1MDAyNnpvbmUtXFx1MDAzZWxvY2spO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMTU5OlxcdHJldCA9IHpsb29wX3VwZGF0ZV9zZXFfem9uZSh6bG8sIHpvbmVfbm8pO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTYwLVxcdG11dGV4X3VubG9jayhcXHUwMDI2em9uZS1cXHUwMDNlbG9jayk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE2NC1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTE2NTpzdGF0aWMgYm9vbCB6bG9vcF9kZXZfZXhpc3RzKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbylcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE2Ni17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE2OS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTE3MDpcXHRjbnYgPSB6bG9vcF9maWxwX29wZW5fZm10KE9fUkRPTkxZLCAwNjAwLCBcXFwiJXMvJXUvY252LSUwNnVcXFwiLFxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTcxLVxcdFxcdFxcdFxcdCAgemxvLVxcdTAwM2ViYXNlX2RpciwgemxvLVxcdTAwM2VpZCwgMCk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjExNzI6XFx0c2VxID0gemxvb3BfZmlscF9vcGVuX2ZtdChPX1JET05MWSwgMDYwMCwgXFxcIiVzLyV1L3NlcS0lMDZ1XFxcIixcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE3My1cXHRcXHRcXHRcXHQgIHpsby1cXHUwMDNlYmFzZV9kaXIsIHpsby1cXHUwMDNlaWQsIDApO1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExODMtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjExODQ6c3RhdGljIGludCB6bG9vcF9jdGxfYWRkKHN0cnVjdCB6bG9vcF9vcHRpb25zICpvcHRzKVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTg1LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTkyLVxcdHVuc2lnbmVkIGludCBucl96b25lcywgaSwgajtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTE5MzpcXHRzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG87XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExOTQtXFx0aW50IHJldCA9IC1FSU5WQUw7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTIyMC1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTIyMTpcXHRyZXQgPSBtdXRleF9sb2NrX2tpbGxhYmxlKFxcdTAwMjZ6bG9vcF9jdGxfbXV0ZXgpO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMjIyLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTIyNi1cXHRpZiAob3B0cy1cXHUwMDNlaWQgXFx1MDAzZT0gMCkge1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMjI3OlxcdFxcdHJldCA9IGlkcl9hbGxvYyhcXHUwMDI2emxvb3BfaW5kZXhfaWRyLCB6bG8sXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEyMjgtXFx0XFx0XFx0XFx0ICBvcHRzLVxcdTAwM2VpZCwgb3B0cy1cXHUwMDNlaWQgKyAxLCBHRlBfS0VSTkVMKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMjMxLVxcdH0gZWxzZSB7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEyMzI6XFx0XFx0cmV0ID0gaWRyX2FsbG9jKFxcdTAwMjZ6bG9vcF9pbmRleF9pZHIsIHpsbywgMCwgMCwgR0ZQX0tFUk5FTCk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEyMzMtXFx0fVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMjM0OlxcdG11dGV4X3VubG9jayhcXHUwMDI2emxvb3BfY3RsX211dGV4KTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTIzNS1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMjUzLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMjU0OlxcdHpsby1cXHUwMDNld29ya3F1ZXVlID0gYWxsb2Nfd29ya3F1ZXVlKFxcXCJ6bG9vcCVkXFxcIiwgV1FfVU5CT1VORCB8IFdRX0ZSRUVaQUJMRSxcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTI1NS1cXHRcXHRcXHRcXHRvcHRzLVxcdTAwM2Vucl9xdWV1ZXMgKiBvcHRzLVxcdTAwM2VxdWV1ZV9kZXB0aCwgemxvLVxcdTAwM2VpZCk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTI2OS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTI3MDpcXHR6bG8tXFx1MDAzZWRhdGFfZGlyID0gemxvb3BfZmlscF9vcGVuX2ZtdChPX1JET05MWSB8IE9fRElSRUNUT1JZLCAwLCBcXFwiJXMvJXVcXFwiLFxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMjcxLVxcdFxcdFxcdFxcdFxcdCAgICB6bG8tXFx1MDAzZWJhc2VfZGlyLCB6bG8tXFx1MDAzZWlkKTtcXG4tLVxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxNzo0MjozMi4yNzY3ODE2NzVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjQ4MjI3NjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgWm9uZWQgTG9vcCBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGUgcGF0Y2ggaXMgZGVmaW5pdGVseSB3b3JraW5nIHdpdGggYHpsb29wYCDigJMgZ29vZCwgaXQncyBhIHJlYWwgZHJpdmVyIHdlJ3JlIGRlYWxpbmcgd2l0aCBoZXJlLiBBbmQgaXQncyBub3QganVzdCB0aGF0LCBpdCdzIGFsc28gdG91Y2hpbmcgdGhlIHN0YW5kYXJkIGBsb29wYCBkcml2ZXIsIHdoaWNoIG1ha2VzIHNlbnNlIGZvciBjb21wYXRpYmlsaXR5LCBJIHN1cHBvc2UuIFRoZSBtb2RpZmljYXRpb25zIGV4dGVuZCBmdXJ0aGVyLCB0aG91Z2g7IHRoaXMgZ2V0cyBpbnRlcmVzdGluZy4gSSBzZWUgaXQncyBhbHNvIG1ha2luZyBjaGFuZ2VzIHRvIGBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzYCBhbmQgYGlvdl9pdGVyX2V4dHJhY3RfYnZlY3NgLiBUaGlzIHN1Z2dlc3RzIHRoZSBwYXRjaCBpcyBsaWtlbHkgZGVhbGluZyB3aXRoIGRhdGEgdHJhbnNmZXIgbWVjaGFuaXNtcyBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCBib3RoIHRoZSBsb29wIGFuZCB6b25lZCBsb29wIGJsb2NrIGRldmljZXMgYXQgYSBsb3dlciBsZXZlbC5cblxuTm93LCBJIG5lZWQgdG8gbG9vayBhdCB0aGUgY29uZmlndXJhdGlvbnMgcmVxdWlyZWQuIFRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3MgYXJlIGBDT05GSUdfQkxLX0RFVl9MT09QYCBhbmQgYENPTkZJR19CTEtfREVWX1pPTkVEX0xPT1BgLCBhcyBleHBlY3RlZC4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBgQ09ORklHX0JMS19ERVZfWk9ORURfTE9PUGAgd2l0aGluIHRoZSBgZHJpdmVycy9ibG9jay9LY29uZmlnYCBmaWxlLiBUaGF0IHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBicm9hZGVyIGNvbnRleHQgYW5kIGRlcGVuZGVuY2llcyBvZiB0aGlzIG5ldyBmdW5jdGlvbmFsaXR5LCBhbmQgZW5zdXJlIGV2ZXJ5dGhpbmcgaXMgc2V0IHVwIGNvcnJlY3RseSBpbiB0aGUgYnVpbGQgZW52aXJvbm1lbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgem9uaW5nIGltcGxlbWVudGF0aW9uIHRvIHZlcmlmeSB0aGF0IGl0J3MgZGVzaWduZWQgaW4gYSBwZXJmb3JtYW50IGFuZCBjb21wYXRpYmxlIHdheS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg4NjIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTc6NDI6MzYuNTI1MDEyMzM5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4Mjk5NzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfREVWX1pPTkVEX0xPT1BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnPTM1ND1zb3VyY2UgXFxcImRyaXZlcnMvYmxvY2svcm5iZC9LY29uZmlnXFxcIlxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zNTUtXFxuZHJpdmVycy9ibG9jay9LY29uZmlnOjM1Njpjb25maWcgQkxLX0RFVl9aT05FRF9MT09QXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTM1Ny1cXHR0cmlzdGF0ZSBcXFwiWm9uZWQgbG9vcGJhY2sgZGV2aWNlIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDE3OjQyOjM2LjU5MzMxOTEwN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzNjA4MDE2NDUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRm9jdXMgZm9yIEJsb2NrIExheWVyIERpcmVjdCBJL08gYW5kIExvb3AgRHJpdmVycyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGFyZWFzIGFuZCBjb25maWd1cmF0aW9ucyBmb3IgZnV6emluZyB0aGlzIGRpcmVjdCBJL08gbG9naWMsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGJsb2NrIGxheWVyIGFuZCBsb29wIGRyaXZlcnMuICBJJ3ZlIGFscmVhZHkgaWRlbnRpZmllZCB0d28gY29uZmlndXJhdGlvbnMgdGhhdCBzZWVtIHJlbGV2YW50OiBgQkxLX0RFVl9MT09QYCBhbmQgYEJMS19ERVZfWk9ORURfTE9PUGAuIEknbSBvbWl0dGluZyBgREVCVUdfS0VSTkVMYCBhcyB0aGUgcHJvbXB0IGluZGljYXRlcyBpdCBpcyBhIG1vcmUgZ2VuZXJhbCBjb25maWcgdGhhdCB3ZSBsaWtlbHkgYWxyZWFkeSBoYXZlIGVuYWJsZWQuXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMuIEluaXRpYWxseSwgSSBoYWQgYSBsaXN0LCBidXQgaXQncyBpbXBvcnRhbnQgdG8gcmVmaW5lIHRoaXMuICBJ4oCZdmUgaWRlbnRpZmllZCBgYmlvX2lvdl9pdGVyX2dldF9wYWdlc2AsIGBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzYCwgYGxvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnRgLCBgbG9vcF9zZXRfZG1hX2xpbWl0YCwgYHpsb29wX2dldF9ibG9ja19zaXplYCwgYW5kIGB6bG9vcF9jdGxfYWRkYCBhcyBwb3RlbnRpYWwgZm9jdXMgc3ltYm9scy4gSSBhbHNvIHNwb3R0ZWQgYGJpb19pb3ZfYnZlY19hbGlnbmVkYCwgYnV0IHNpbmNlIGl0J3MgYW4gaW5saW5lIGZ1bmN0aW9uLCBpdCdzIHByb2JhYmx5IG5vdCBhcyBpbXBhY3RmdWwgZm9yIGZ1enppbmcgYXMgYW4gZXhwb3J0ZWQgb25lLiBUaGVyZWZvcmUsIEnigJltIGRyb3BwaW5nIGl0LlxuXG5JJ3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSByZXN0IGFyZSBzdGF0aWMgd2l0aGluIHRoZSBsb29wIGFuZCB6bG9vcCBkcml2ZXJzIGJ1dCBleHBvcnRlZCBmcm9tIHRoZWlyIHJlc3BlY3RpdmUgZmlsZXMsIHdoaWNoIG1ha2VzIHRoZW0gZ29vZCBjYW5kaWRhdGVzLiBgYmlvX2lvdl9pdGVyX2dldF9wYWdlc2AgaXMgZXhwb3J0ZWQgYW5kIHVzZWQgdGhyb3VnaG91dCB0aGUgYmxvY2sgbGF5ZXIsIGFuZCBgaW92X2l0ZXJfZXh0cmFjdF9idmVjc2AgaXMgYWxzbyBleHBvcnRlZC4gIFRoaXMgbWFrZXMgdGhlbSBwcmltZSB0YXJnZXRzLiBUaGUgbG9vcCBhbmQgemxvb3AgZnVuY3Rpb25zIGFyZSBhbHNvIGNyaXRpY2FsLCBiZWNhdXNlIHRoZXkgaGFuZGxlIHRoZSBkYXRhIHBhdGggbW9kaWZpY2F0aW9ucy5cblxuU28sIGhlcmUncyB0aGUgZmluYWwgbGlzdDpcblxuKipDb25maWd1cmF0aW9uczoqKlxuKiAgIGBCTEtfREVWX0xPT1BgXG4qICAgYEJMS19ERVZfWk9ORURfTE9PUGBcblxuKipGb2N1cyBTeW1ib2xzOioqXG4qICAgYGJpb19pb3ZfaXRlcl9nZXRfcGFnZXNgXG4qICAgYGlvdl9pdGVyX2V4dHJhY3RfYnZlY3NgXG4qICAgYGxvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnRgXG4qICAgYGxvb3Bfc2V0X2RtYV9saW1pdGBcbiogICBgemxvb3BfZ2V0X2Jsb2NrX3NpemVgXG4qICAgYHpsb29wX2N0bF9hZGRgXG5cblRoZSBwYXRjaCBpcyB0b3VjaGluZyBjb3JlIGJsb2NrIGxheWVyIGZ1bmN0aW9uYWxpdHksIGFuZCBJL08gYW5kIGFsaWdubWVudCwgc28gdGhlc2UgYXJlIHRoZSBhcmVhcyB0byBob25lIGluIG9uLiBJdCBhbHNvIHVwZGF0ZXMgdGhlIGxvb3AgZHJpdmVycywgc28gdGhvc2UgZnVuY3Rpb25zIHdpbGwgbmVlZCB0byBiZSB3ZWxsLWNvdmVyZWQgaW4gdGVzdGluZy4gVGhpcyBzZWVtcyBsaWtlIGEgc29saWQgc2V0IG9mIHRhcmdldHMgZm9yIGZ1enppbmcgdG8gdW5jb3ZlciBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gYWxpZ25tZW50IGNoZWNrcyBhbmQgRE1BIGxpbWl0cywgcGFydGljdWxhcmx5IGluIHRoZSBjb250ZXh0IG9mIGRpcmVjdCBJL08gd2l0aGluIHRoZSBibG9jayBsYXllciBhbmQgbG9vcCBkcml2ZXJzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTM3MCwiT3V0cHV0VG9rZW5zIjoyMDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDkzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDE3OjQyOjUwLjIwMTMzNzczOVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQ1NzQwNjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTE9PUFwiLFxuICAgIFwiQkxLX0RFVl9aT05FRF9MT09QXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmlvX2lvdl9pdGVyX2dldF9wYWdlc1wiLFxuICAgIFwiaW92X2l0ZXJfZXh0cmFjdF9idmVjc1wiLFxuICAgIFwibG9vcF91cGRhdGVfZGlvX2FsaWdubWVudFwiLFxuICAgIFwibG9vcF9zZXRfZG1hX2xpbWl0XCIsXG4gICAgXCJ6bG9vcF9nZXRfYmxvY2tfc2l6ZVwiLFxuICAgIFwiemxvb3BfY3RsX2FkZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGJsb2NrIGxheWVyIGRpcmVjdCBJL08gbG9naWMgdG8gZW5mb3JjZSBtZW1vcnkgYWxpZ25tZW50IGNoZWNrcyB2aWEgYGJpb19pb3ZfaXRlcl9nZXRfcGFnZXNgIGFuZCBgaW92X2l0ZXJfZXh0cmFjdF9idmVjc2AuIEl0IGFsc28gdXBkYXRlcyB0aGUgYGxvb3BgIGFuZCBgemxvb3BgIGRyaXZlcnMgdG8gY29ycmVjdGx5IHNldCBETUEgbGltaXRzIGJhc2VkIG9uIHRoZSBiYWNraW5nIGZpbGUncyBkaXJlY3QgSS9PIGFsaWdubWVudC4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSBibG9jayBsYXllciBmdW5jdGlvbmFsaXR5IGFuZCBkcml2ZXIgYmVoYXZpb3IsIG1ha2luZyB0aGVtIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX0xPT1BcIixcbiAgICBcIkJMS19ERVZfWk9ORURfTE9PUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJpb19pb3ZfaXRlcl9nZXRfcGFnZXNcIixcbiAgICBcImlvdl9pdGVyX2V4dHJhY3RfYnZlY3NcIixcbiAgICBcImxvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnRcIixcbiAgICBcImxvb3Bfc2V0X2RtYV9saW1pdFwiLFxuICAgIFwiemxvb3BfZ2V0X2Jsb2NrX3NpemVcIixcbiAgICBcInpsb29wX2N0bF9hZGRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBibG9jayBsYXllciBkaXJlY3QgSS9PIGxvZ2ljIHRvIGVuZm9yY2UgbWVtb3J5IGFsaWdubWVudCBjaGVja3MgdmlhIGBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzYCBhbmQgYGlvdl9pdGVyX2V4dHJhY3RfYnZlY3NgLiBJdCBhbHNvIHVwZGF0ZXMgdGhlIGBsb29wYCBhbmQgYHpsb29wYCBkcml2ZXJzIHRvIGNvcnJlY3RseSBzZXQgRE1BIGxpbWl0cyBiYXNlZCBvbiB0aGUgYmFja2luZyBmaWxlJ3MgZGlyZWN0IEkvTyBhbGlnbm1lbnQuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgYmxvY2sgbGF5ZXIgZnVuY3Rpb25hbGl0eSBhbmQgZHJpdmVyIGJlaGF2aW9yLCBtYWtpbmcgdGhlbSBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowlrbzn[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-24 17:35:08 +0000 UTC FinishedAt: 2026-06-24 17:42:51 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "5c7804e3279c9bdc36e5eac743b4000633b25f65", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_LOOP", "BLK_DEV_ZONED_LOOP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "5c7804e3279c9bdc36e5eac743b4000633b25f65", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_LOOP", "BLK_DEV_ZONED_LOOP" ], "series_id": "34e23873-7e4a-4f53-b8d3-6caac0785b84" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "bio_iov_iter_get_pages", "iov_iter_extract_bvecs", "loop_update_dio_alignment", "loop_set_dma_limit", "zloop_get_block_size", "zloop_ctl_add" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDE3OjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTE9PUCYjMzQ7LAogICAgJiMzNDtCTEtfREVWX1pPTkVEX0xPT1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzJiMzNDssCiAgICAmIzM0O2lvdl9pdGVyX2V4dHJhY3RfYnZlY3MmIzM0OywKICAgICYjMzQ7bG9vcF91cGRhdGVfZGlvX2FsaWdubWVudCYjMzQ7LAogICAgJiMzNDtsb29wX3NldF9kbWFfbGltaXQmIzM0OywKICAgICYjMzQ7emxvb3BfZ2V0X2Jsb2NrX3NpemUmIzM0OywKICAgICYjMzQ7emxvb3BfY3RsX2FkZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBibG9jayBsYXllciBkaXJlY3QgSS9PIGxvZ2ljIHRvIGVuZm9yY2UgbWVtb3J5IGFsaWdubWVudCBjaGVja3MgdmlhIGBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzYCBhbmQgYGlvdl9pdGVyX2V4dHJhY3RfYnZlY3NgLiBJdCBhbHNvIHVwZGF0ZXMgdGhlIGBsb29wYCBhbmQgYHpsb29wYCBkcml2ZXJzIHRvIGNvcnJlY3RseSBzZXQgRE1BIGxpbWl0cyBiYXNlZCBvbiB0aGUgYmFja2luZyBmaWxlJiMzOTtzIGRpcmVjdCBJL08gYWxpZ25tZW50LiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIGJsb2NrIGxheWVyIGZ1bmN0aW9uYWxpdHkgYW5kIGRyaXZlciBiZWhhdmlvciwgbWFraW5nIHRoZW0gaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDE3OjQyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZGM1ZTE2ZGQ1NGM4ZDEwNjg3Yzk0ZjUwNTY5MWEwOWQ1N2UxNGYwOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVuIDI0IDE3OjQyOjIxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jpby5jIGIvYmxvY2svYmlvLmNcbmluZGV4IGYyYTVmNGQwYTk2NzJiLi5mYWFkNDFhNzJhYzc3ZiAxMDA2NDRcbi0tLSBhL2Jsb2NrL2Jpby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9iaW8uY1xuQEAgLTEyMjAsMTAgJiM0MzsxMjIwLDQ1IEBAIHN0YXRpYyBpbnQgYmlvX2lvdl9pdGVyX2FsaWduX2Rvd24oc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfREVCVUdfS0VSTkVMXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBiaW9faW92X2J2ZWNfYWxpZ25lZChjb25zdCBzdHJ1Y3QgYmlvICpiaW8sXG4mIzQzO1x0XHRcdFx0XHR1bnNpZ25lZCBtZW1fYWxpZ25fbWFzaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBidmVjX2l0ZXIgaXRlcjtcbiYjNDM7XHRzdHJ1Y3QgYmlvX3ZlYyBidjtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBDb3JyZWN0IGNhbGxlcnMgbmV2ZXIgYnJlYWsgdGhlIGFsaWdubWVudCByZXF1aXJlbWVudHMsIHNvIHRoaXNcbiYjNDM7XHQgKiBleGhhdXN0aXZlIGNoZWNrIGlzIG9ubHkgcGFpZCBmb3IgaW4gZGVidWcgYnVpbGRzLlxuJiM0MztcdCAqL1xuJiM0MztcdGZvcl9lYWNoX21wX2J2ZWMoYnYsIGJpby1cdTAwM2ViaV9pb192ZWMsIGl0ZXIsIGJpby1cdTAwM2ViaV9pdGVyKVxuJiM0MztcdFx0aWYgKChidi5idl9vZmZzZXQgfCBidi5idl9sZW4pIFx1MDAyNiBtZW1fYWxpZ25fbWFzaylcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzOyNlbHNlXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBiaW9faW92X2J2ZWNfYWxpZ25lZChjb25zdCBzdHJ1Y3QgYmlvICpiaW8sXG4mIzQzO1x0XHRcdFx0XHR1bnNpZ25lZCBtZW1fYWxpZ25fbWFzaylcbiYjNDM7e1xuJiM0MztcdC8qXG4mIzQzO1x0ICogV2UgZm9yd2FyZCB0aGUgYmlvX3ZlYyBhcy1pcywgc28gSVRFUl9CVkVDIGNhbGxlcnMgbXVzdCBwcm92aWRlXG4mIzQzO1x0ICogc2VnbWVudHMgYWxyZWFkeSBhbGlnbmVkIHRvIHRoZSBkZXZpY2UmIzM5O3MgRE1BIGFsaWdubWVudC4gVGhlIG9ubHlcbiYjNDM7XHQgKiB1bmNoZWNrZWQgdXNlci1jb250cm9sbGFibGUgb2Zmc2V0IHRoYXQgcmVhY2hlcyBoZXJlIGlzIGFuIGlvX3VyaW5nXG4mIzQzO1x0ICogcmVnaXN0ZXJlZCBidWZmZXIgd2hlcmUganVzdCB0aGUgZmlyc3Qgc2VnbWVudCBjYW4gYmUgdW5hbGlnbmVkXG4mIzQzO1x0ICogKHRoZSByZXN0IGlzIHZpcnR1YWxseSBjb250aWd1b3VzKSwgc28gY2hlY2tpbmcgb25seSB0aGF0IG9uZSBpc1xuJiM0MztcdCAqIHN1ZmZpY2llbnQgdG8ga25vdyBpZiB0aGUgZW50aXJlIHZlY3RvciBpcyB2YWxpZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXR1cm4gIShtcF9idmVjX2l0ZXJfb2Zmc2V0KGJpby1cdTAwM2ViaV9pb192ZWMsIGJpby1cdTAwM2ViaV9pdGVyKSBcdTAwMjZcbiYjNDM7XHRcdFx0XHRcdFx0XHRtZW1fYWxpZ25fbWFzayk7XG4mIzQzO31cbiYjNDM7I2VuZGlmXG4mIzQzO1xuIC8qKlxuICAqIGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMgLSBhZGQgdXNlciBvciBrZXJuZWwgcGFnZXMgdG8gYSBiaW9cbiAgKiBAYmlvOiBiaW8gdG8gYWRkIHBhZ2VzIHRvXG4gICogQGl0ZXI6IGlvdiBpdGVyYXRvciBkZXNjcmliaW5nIHRoZSByZWdpb24gdG8gYmUgYWRkZWRcbiYjNDM7ICogQG1lbV9hbGlnbl9tYXNrOiB0aGUgbWFzayB0aGUgc291cmNlIGFkZHJlc3MgYW5kIGxlbmd0aCBtdXN0IGJlIGFsaWduZWQgdG8sXG4mIzQzOyAqXHQwIGZvciBubyByZXF1aXJlbWVudFxuICAqIEBsZW5fYWxpZ25fbWFzazogdGhlIG1hc2sgdG8gYWxpZ24gdGhlIHRvdGFsIHNpemUgdG8sIDAgZm9yIGFueSBsZW5ndGhcbiAgKlxuICAqIFRoaXMgdGFrZXMgZWl0aGVyIGFuIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHVzZXIgbWVtb3J5LCBvciBvbmUgcG9pbnRpbmcgdG9cbkBAIC0xMjQyLDcgJiM0MzsxMjc3LDcgQEAgc3RhdGljIGludCBiaW9faW92X2l0ZXJfYWxpZ25fZG93bihzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiAgKiBpcyByZXR1cm5lZCBvbmx5IGlmIDAgcGFnZXMgY291bGQgYmUgcGlubmVkLlxuICAqL1xuIGludCBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuLVx0XHRcdCAgIHVuc2lnbmVkIGxlbl9hbGlnbl9tYXNrKVxuJiM0MztcdFx0XHQgICB1bnNpZ25lZCBtZW1fYWxpZ25fbWFzaywgdW5zaWduZWQgbGVuX2FsaWduX21hc2spXG4ge1xuIFx0aW92X2l0ZXJfZXh0cmFjdGlvbl90IGZsYWdzID0gMDtcbiBcbkBAIC0xMjUxLDYgJiM0MzsxMjg2LDEwIEBAIGludCBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuIFxuIFx0aWYgKGlvdl9pdGVyX2lzX2J2ZWMoaXRlcikpIHtcbiBcdFx0YmlvX2lvdl9idmVjX3NldChiaW8sIGl0ZXIpO1xuJiM0MztcbiYjNDM7XHRcdGlmICghYmlvX2lvdl9idmVjX2FsaWduZWQoYmlvLCBtZW1fYWxpZ25fbWFzaykpXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiBcdFx0aW92X2l0ZXJfYWR2YW5jZShpdGVyLCBiaW8tXHUwMDNlYmlfaXRlci5iaV9zaXplKTtcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG5AQCAtMTI2NSw4ICYjNDM7MTMwNCwxOSBAQCBpbnQgYmlvX2lvdl9pdGVyX2dldF9wYWdlcyhzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiBcbiBcdFx0cmV0ID0gaW92X2l0ZXJfZXh0cmFjdF9idmVjcyhpdGVyLCBiaW8tXHUwMDNlYmlfaW9fdmVjLFxuIFx0XHRcdFx0QklPX01BWF9TSVpFIC0gYmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSxcbi1cdFx0XHRcdFx1MDAyNmJpby1cdTAwM2ViaV92Y250LCBiaW8tXHUwMDNlYmlfbWF4X3ZlY3MsIGZsYWdzKTtcbiYjNDM7XHRcdFx0XHRcdTAwMjZiaW8tXHUwMDNlYmlfdmNudCwgYmlvLVx1MDAzZWJpX21heF92ZWNzLFxuJiM0MztcdFx0XHRcdG1lbV9hbGlnbl9tYXNrLCBmbGFncyk7XG4gXHRcdGlmIChyZXQgXHUwMDNjPSAwKSB7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIEEgbWlzYWxpZ25lZCB2ZWN0b3IgZmFpbHMgdGhlIHdob2xlIEkvTy4gIFJlbGVhc2UgYW55XG4mIzQzO1x0XHRcdCAqIHBhZ2VzIHBpbm5lZCBieSBlYXJsaWVyIGl0ZXJhdGlvbnMgYmVmb3JlIHJldHVybmluZ1xuJiM0MztcdFx0XHQgKiBzaW5jZSB0aGlzIGJpbyB3b24mIzM5O3QgYmUgc3VibWl0dGVkIHRvIHJlbGVhc2UgdGhlbS5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdGlmIChyZXQgPT0gLUVJTlZBTCkge1xuJiM0MztcdFx0XHRcdGJpb19yZWxlYXNlX3BhZ2VzKGJpbywgZmFsc2UpO1xuJiM0MztcdFx0XHRcdGJpb19jbGVhcl9mbGFnKGJpbywgQklPX1BBR0VfUElOTkVEKTtcbiYjNDM7XHRcdFx0XHRiaW8tXHUwMDNlYmlfdmNudCA9IDA7XG4mIzQzO1x0XHRcdH1cbiBcdFx0XHRpZiAoIWJpby1cdTAwM2ViaV92Y250KVxuIFx0XHRcdFx0cmV0dXJuIHJldDtcbiBcdFx0XHRicmVhaztcbkBAIC0xMzc3LDcgJiM0MzsxNDI3LDcgQEAgc3RhdGljIGludCBiaW9faW92X2l0ZXJfYm91bmNlX3JlYWQoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXHRcdHNzaXplX3QgcmV0O1xuIFxuIFx0XHRyZXQgPSBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzKGl0ZXIsIGJpby1cdTAwM2ViaV9pb192ZWMgJiM0MzsgMSwgbGVuLFxuLVx0XHRcdFx0XHUwMDI2YmlvLVx1MDAzZWJpX3ZjbnQsIGJpby1cdTAwM2ViaV9tYXhfdmVjcyAtIDEsIDApO1xuJiM0MztcdFx0XHRcdFx1MDAyNmJpby1cdTAwM2ViaV92Y250LCBiaW8tXHUwMDNlYmlfbWF4X3ZlY3MgLSAxLCAwLCAwKTtcbiBcdFx0aWYgKHJldCBcdTAwM2M9IDApIHtcbiBcdFx0XHRpZiAoIWJpby1cdTAwM2ViaV92Y250KSB7XG4gXHRcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1tYXAuYyBiL2Jsb2NrL2Jsay1tYXAuY1xuaW5kZXggNzY4NTQ5ZjE5Zjk3ZWMuLmM5NTM1ZWZlMWE5MTNjIDEwMDY0NFxuLS0tIGEvYmxvY2svYmxrLW1hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9ibGstbWFwLmNcbkBAIC0yNzQsNyAmIzQzOzI3NCw3IEBAIHN0YXRpYyBpbnQgYmlvX21hcF91c2VyX2lvdihzdHJ1Y3QgcmVxdWVzdCAqcnEsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiBcdCAqIE5vIGFsaWdubWVudCByZXF1aXJlbWVudHMgb24gb3VyIHBhcnQgdG8gc3VwcG9ydCBhcmJpdHJhcnlcbiBcdCAqIHBhc3N0aHJvdWdoIGNvbW1hbmRzLlxuIFx0ICovXG4tXHRyZXQgPSBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKGJpbywgaXRlciwgMCk7XG4mIzQzO1x0cmV0ID0gYmlvX2lvdl9pdGVyX2dldF9wYWdlcyhiaW8sIGl0ZXIsIDAsIDApO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byBvdXRfcHV0O1xuIFx0cmV0ID0gYmxrX3JxX2FwcGVuZF9iaW8ocnEsIGJpbyk7XG5kaWZmIC0tZ2l0IGEvYmxvY2svZm9wcy5jIGIvYmxvY2svZm9wcy5jXG5pbmRleCAxNTc4M2E2MTgwZGVjMS4uZTUxOWQ3ZjQzYjMxMDYgMTAwNjQ0XG4tLS0gYS9ibG9jay9mb3BzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2ZvcHMuY1xuQEAgLTQ2LDcgJiM0Mzs0Niw3IEBAIHN0YXRpYyBib29sIGJsa2Rldl9kaW9faW52YWxpZChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4gc3RhdGljIGlubGluZSBpbnQgYmxrZGV2X2lvdl9pdGVyX2dldF9wYWdlcyhzdHJ1Y3QgYmlvICpiaW8sXG4gXHRcdHN0cnVjdCBpb3ZfaXRlciAqaXRlciwgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldilcbiB7XG4tXHRyZXR1cm4gYmlvX2lvdl9pdGVyX2dldF9wYWdlcyhiaW8sIGl0ZXIsXG4mIzQzO1x0cmV0dXJuIGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoYmlvLCBpdGVyLCBiZGV2X2RtYV9hbGlnbm1lbnQoYmRldiksXG4gXHRcdFx0YmRldl9sb2dpY2FsX2Jsb2NrX3NpemUoYmRldikgLSAxKTtcbiB9XG4gXG5AQCAtMjE4LDcgJiM0MzsyMTgsNyBAQCBzdGF0aWMgc3NpemVfdCBfX2Jsa2Rldl9kaXJlY3RfSU8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXG4gXHRcdHJldCA9IGJsa2Rldl9pb3ZfaXRlcl9nZXRfcGFnZXMoYmlvLCBpdGVyLCBiZGV2KTtcbiBcdFx0aWYgKHVubGlrZWx5KHJldCkpIHtcbi1cdFx0XHRiaW9fZW5kaW9fc3RhdHVzKGJpbywgQkxLX1NUU19JT0VSUik7XG4mIzQzO1x0XHRcdGJpb19lbmRpb19zdGF0dXMoYmlvLCBlcnJub190b19ibGtfc3RhdHVzKHJldCkpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXHRcdGlmIChpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNiBJT0NCX05PV0FJVCkge1xuQEAgLTIzOCw4ICYjNDM7MjM4LDEwIEBAIHN0YXRpYyBzc2l6ZV90IF9fYmxrZGV2X2RpcmVjdF9JTyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiBcdFx0fVxuIFx0XHRpZiAoaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9IQVNfTUVUQURBVEEpIHtcbiBcdFx0XHRyZXQgPSBiaW9faW50ZWdyaXR5X21hcF9pdGVyKGJpbywgaW9jYi1cdTAwM2Vwcml2YXRlKTtcbi1cdFx0XHRpZiAodW5saWtlbHkocmV0KSlcbi1cdFx0XHRcdGdvdG8gZmFpbDtcbiYjNDM7XHRcdFx0aWYgKHVubGlrZWx5KHJldCkpIHtcbiYjNDM7XHRcdFx0XHRiaW9fZW5kaW9fc3RhdHVzKGJpbywgZXJybm9fdG9fYmxrX3N0YXR1cyhyZXQpKTtcbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0fVxuIFx0XHR9XG4gXG4gXHRcdGlmIChpc19yZWFkKSB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9sb29wLmMgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xuaW5kZXggMzEwZGUwNDYzYmViMTQuLjVmZTYxZDU0MmY4Yjc1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay9sb29wLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jXG5AQCAtNTQsNiAmIzQzOzU0LDcgQEAgc3RydWN0IGxvb3BfZGV2aWNlIHtcbiBcbiBcdHN0cnVjdCBmaWxlXHQqbG9fYmFja2luZ19maWxlO1xuIFx0dW5zaWduZWQgaW50XHRsb19taW5fZGlvX3NpemU7XG4mIzQzO1x0dW5zaWduZWQgaW50XHRsb19kaW9fbWVtX2FsaWduO1xuIFx0c3RydWN0IGJsb2NrX2RldmljZSAqbG9fZGV2aWNlO1xuIFxuIFx0Z2ZwX3RcdFx0b2xkX2dmcF9tYXNrO1xuQEAgLTQ0NywyNiAmIzQzOzQ0OCwzNyBAQCBzdGF0aWMgdm9pZCBsb29wX3JlcmVhZF9wYXJ0aXRpb25zKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4gXHRcdFx0X19mdW5jX18sIGxvLVx1MDAzZWxvX251bWJlciwgbG8tXHUwMDNlbG9fZmlsZV9uYW1lLCByYyk7XG4gfVxuIFxuLXN0YXRpYyB1bnNpZ25lZCBpbnQgbG9vcF9xdWVyeV9taW5fZGlvX3NpemUoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbiYjNDM7c3RhdGljIHZvaWQgbG9vcF91cGRhdGVfZGlvX2FsaWdubWVudChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuIHtcbiBcdHN0cnVjdCBmaWxlICpmaWxlID0gbG8tXHUwMDNlbG9fYmFja2luZ19maWxlO1xuIFx0c3RydWN0IGJsb2NrX2RldmljZSAqc2JfYmRldiA9IGZpbGUtXHUwMDNlZl9tYXBwaW5nLVx1MDAzZWhvc3QtXHUwMDNlaV9zYi1cdTAwM2VzX2JkZXY7XG4gXHRzdHJ1Y3Qga3N0YXQgc3Q7XG4gXG4gXHQvKlxuLVx0ICogVXNlIHRoZSBtaW5pbWFsIGRpbyBhbGlnbm1lbnQgb2YgdGhlIGZpbGUgc3lzdGVtIGlmIHByb3ZpZGVkLlxuJiM0MztcdCAqIFVzZSB0aGUgZGlvIGFsaWdubWVudCBvZiB0aGUgZmlsZSBzeXN0ZW0gaWYgcHJvdmlkZWQuICBUaGUgaW5jb21vaW5nXG4mIzQzO1x0ICogcmVxdWVzdCYjMzk7cyBiaW9fdmVjIGlzIGZvcndhcmRlZCB0byB0aGUgYmFja2luZyBmaWxlIHVuY2hhbmdlZCwgc28gaXRzXG4mIzQzO1x0ICogcmVxdWlyZWQgbWVtb3J5IGFsaWdubWVudCBiZWNvbWVzIHRoZSBkZXZpY2UmIzM5O3MgZG1hX2FsaWdubWVudCB3aGVuXG4mIzQzO1x0ICogdXNlZCBmb3IgZGlyZWN0LWlvLlxuIFx0ICovXG4gXHRpZiAoIXZmc19nZXRhdHRyKFx1MDAyNmZpbGUtXHUwMDNlZl9wYXRoLCBcdTAwMjZzdCwgU1RBVFhfRElPQUxJR04sIDApIFx1MDAyNlx1MDAyNlxuLVx0ICAgIChzdC5yZXN1bHRfbWFzayBcdTAwMjYgU1RBVFhfRElPQUxJR04pKVxuLVx0XHRyZXR1cm4gc3QuZGlvX29mZnNldF9hbGlnbjtcbiYjNDM7XHQgICAgKHN0LnJlc3VsdF9tYXNrIFx1MDAyNiBTVEFUWF9ESU9BTElHTikpIHtcbiYjNDM7XHRcdGxvLVx1MDAzZWxvX21pbl9kaW9fc2l6ZSA9IHN0LmRpb19vZmZzZXRfYWxpZ247XG4mIzQzO1x0XHRsby1cdTAwM2Vsb19kaW9fbWVtX2FsaWduID0gc3QuZGlvX21lbV9hbGlnbiAtIDE7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuIFxuIFx0LypcbiBcdCAqIEluIGEgcGVyZmVjdCB3b3JsZCB0aGlzIHdvdWxkbiYjMzk7dCBiZSBuZWVkZWQsIGJ1dCBhcyBvZiBMaW51eCA2LjEzIG9ubHlcbiBcdCAqIGEgaGFuZGZ1bCBvZiBmaWxlIHN5c3RlbXMgc3VwcG9ydCB0aGUgU1RBVFhfRElPQUxJR04gZmxhZy5cbiBcdCAqL1xuLVx0aWYgKHNiX2JkZXYpXG4tXHRcdHJldHVybiBiZGV2X2xvZ2ljYWxfYmxvY2tfc2l6ZShzYl9iZGV2KTtcbi1cdHJldHVybiBTRUNUT1JfU0laRTtcbiYjNDM7XHRpZiAoc2JfYmRldikge1xuJiM0MztcdFx0bG8tXHUwMDNlbG9fbWluX2Rpb19zaXplID0gYmRldl9sb2dpY2FsX2Jsb2NrX3NpemUoc2JfYmRldik7XG4mIzQzO1x0XHRsby1cdTAwM2Vsb19kaW9fbWVtX2FsaWduID0gYmRldl9kbWFfYWxpZ25tZW50KHNiX2JkZXYpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bG8tXHUwMDNlbG9fbWluX2Rpb19zaXplID0gU0VDVE9SX1NJWkU7XG4mIzQzO1x0bG8tXHUwMDNlbG9fZGlvX21lbV9hbGlnbiA9IFNFQ1RPUl9TSVpFIC0gMTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBpbnQgaXNfbG9vcF9kZXZpY2Uoc3RydWN0IGZpbGUgKmZpbGUpXG5AQCAtNTA5LDcgJiM0Mzs1MjEsNyBAQCBzdGF0aWMgdm9pZCBsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IGZpbGUgKmZpbGUpXG4gXHRcdFx0bG8tXHUwMDNlb2xkX2dmcF9tYXNrIFx1MDAyNiB+KF9fR0ZQX0lPIHwgX19HRlBfRlMpKTtcbiBcdGlmIChsby1cdTAwM2Vsb19iYWNraW5nX2ZpbGUtXHUwMDNlZl9mbGFncyBcdTAwMjYgT19ESVJFQ1QpXG4gXHRcdGxvLVx1MDAzZWxvX2ZsYWdzIHw9IExPX0ZMQUdTX0RJUkVDVF9JTztcbi1cdGxvLVx1MDAzZWxvX21pbl9kaW9fc2l6ZSA9IGxvb3BfcXVlcnlfbWluX2Rpb19zaXplKGxvKTtcbiYjNDM7XHRsb29wX3VwZGF0ZV9kaW9fYWxpZ25tZW50KGxvKTtcbiB9XG4gXG4gc3RhdGljIGludCBsb29wX2NoZWNrX2JhY2tpbmdfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSlcbkBAIC05NDAsNiAmIzQzOzk1MiwxOSBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGxvb3BfZGVmYXVsdF9ibG9ja3NpemUoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbiBcdHJldHVybiBTRUNUT1JfU0laRTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGxvb3Bfc2V0X2RtYV9saW1pdChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqIERpcmVjdCBJL08gZm9yd2FyZHMgdGhlIHVzZXIgcGFnZXMgdG8gdGhlIGJhY2tpbmcgZmlsZSB1bmNoYW5nZWQsIHNvXG4mIzQzO1x0ICogdHJhY2sgdGhlIGJhY2tpbmcmIzM5O3MgRE1BIGFsaWdubWVudCByZXF1aXJlbWVudCBhcyB0aGUgbW9kZSBpcyB0b2dnbGVkLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChsby1cdTAwM2Vsb19mbGFncyBcdTAwMjYgTE9fRkxBR1NfRElSRUNUX0lPKVxuJiM0MztcdFx0bGltLVx1MDAzZWRtYV9hbGlnbm1lbnQgPSBtYXhfdCh1bnNpZ25lZCBpbnQsIGxvLVx1MDAzZWxvX2Rpb19tZW1fYWxpZ24sXG4mIzQzO1x0XHRcdFx0XHQgICBTRUNUT1JfU0laRSAtIDEpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGxpbS1cdTAwM2VkbWFfYWxpZ25tZW50ID0gU0VDVE9SX1NJWkUgLSAxO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGxvb3BfdXBkYXRlX2xpbWl0cyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sXG4gXHRcdHVuc2lnbmVkIGludCBic2l6ZSlcbiB7XG5AQCAtOTYxLDYgJiM0Mzs5ODYsNyBAQCBzdGF0aWMgdm9pZCBsb29wX3VwZGF0ZV9saW1pdHMoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLFxuIFx0bGltLVx1MDAzZWxvZ2ljYWxfYmxvY2tfc2l6ZSA9IGJzaXplO1xuIFx0bGltLVx1MDAzZXBoeXNpY2FsX2Jsb2NrX3NpemUgPSBic2l6ZTtcbiBcdGxpbS1cdTAwM2Vpb19taW4gPSBic2l6ZTtcbiYjNDM7XHRsb29wX3NldF9kbWFfbGltaXQobG8sIGxpbSk7XG4gXHRsaW0tXHUwMDNlZmVhdHVyZXMgXHUwMDI2PSB+KEJMS19GRUFUX1dSSVRFX0NBQ0hFIHwgQkxLX0ZFQVRfUk9UQVRJT05BTCk7XG4gXHRpZiAoZmlsZS1cdTAwM2VmX29wLVx1MDAzZWZzeW5jIFx1MDAyNlx1MDAyNiAhKGxvLVx1MDAzZWxvX2ZsYWdzIFx1MDAyNiBMT19GTEFHU19SRUFEX09OTFkpKVxuIFx0XHRsaW0tXHUwMDNlZmVhdHVyZXMgfD0gQkxLX0ZFQVRfV1JJVEVfQ0FDSEU7XG5AQCAtMTQxNiw2ICYjNDM7MTQ0Miw3IEBAIHN0YXRpYyBpbnQgbG9vcF9zZXRfZGlvKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHVuc2lnbmVkIGxvbmcgYXJnKVxuIHtcbiBcdGJvb2wgdXNlX2RpbyA9ICEhYXJnO1xuIFx0dW5zaWduZWQgaW50IG1lbWZsYWdzO1xuJiM0MztcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltO1xuIFxuIFx0aWYgKGxvLVx1MDAzZWxvX3N0YXRlICE9IExvX2JvdW5kKVxuIFx0XHRyZXR1cm4gLUVOWElPO1xuQEAgLTE0MzQsNiAmIzQzOzE0NjEsOSBAQCBzdGF0aWMgaW50IGxvb3Bfc2V0X2RpbyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcdFx0bG8tXHUwMDNlbG9fZmxhZ3MgfD0gTE9fRkxBR1NfRElSRUNUX0lPO1xuIFx0ZWxzZVxuIFx0XHRsby1cdTAwM2Vsb19mbGFncyBcdTAwMjY9IH5MT19GTEFHU19ESVJFQ1RfSU87XG4mIzQzO1x0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby1cdTAwM2Vsb19xdWV1ZSk7XG4mIzQzO1x0bG9vcF9zZXRfZG1hX2xpbWl0KGxvLCBcdTAwMjZsaW0pO1xuJiM0MztcdHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKGxvLVx1MDAzZWxvX3F1ZXVlLCBcdTAwMjZsaW0pO1xuIFx0YmxrX21xX3VuZnJlZXplX3F1ZXVlKGxvLVx1MDAzZWxvX3F1ZXVlLCBtZW1mbGFncyk7XG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96bG9vcC5jIGIvZHJpdmVycy9ibG9jay96bG9vcC5jXG5pbmRleCA1NWVlYjZhYWMwZWEzYi4uZjk3YTIwY2ZkYjdjZTYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3psb29wLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svemxvb3AuY1xuQEAgLTE0NCw2ICYjNDM7MTQ0LDcgQEAgc3RydWN0IHpsb29wX2RldmljZSB7XG4gXHR1bnNpZ25lZCBpbnRcdFx0bnJfY29udl96b25lcztcbiBcdHVuc2lnbmVkIGludFx0XHRtYXhfb3Blbl96b25lcztcbiBcdHVuc2lnbmVkIGludFx0XHRibG9ja19zaXplO1xuJiM0MztcdHVuc2lnbmVkIGludFx0XHRkaW9fbWVtX2FsaWduO1xuIFxuIFx0c3BpbmxvY2tfdFx0XHRvcGVuX3pvbmVzX2xvY2s7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRvcGVuX3pvbmVzX2xydV9saXN0O1xuQEAgLTEwMzcsMjAgJiM0MzsxMDM4LDMwIEBAIHN0YXRpYyBpbnQgemxvb3BfZ2V0X2Jsb2NrX3NpemUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLFxuIFx0c3RydWN0IGtzdGF0IHN0O1xuIFxuIFx0Lypcbi1cdCAqIElmIHRoZSBGUyBibG9jayBzaXplIGlzIGxvd2VyIHRoYW4gb3IgZXF1YWwgdG8gNEssIHVzZSB0aGF0IGFzIHRoZVxuLVx0ICogZGV2aWNlIGJsb2NrIHNpemUuIE90aGVyd2lzZSwgZmFsbGJhY2sgdG8gdGhlIEZTIGRpcmVjdCBJTyBhbGlnbm1lbnRcbi1cdCAqIGNvbnN0cmFpbnQgaWYgdGhhdCBpcyBwcm92aWRlZCwgYW5kIHRvIHRoZSBGUyB1bmRlcmx5aW5nIGRldmljZVxuLVx0ICogcGh5c2ljYWwgYmxvY2sgc2l6ZSBpZiB0aGUgZGlyZWN0IElPIGFsaWdubWVudCBpcyB1bmtub3duLlxuJiM0MztcdCAqIFVzZSB0aGUgZGlvIGFsaWdubWVudCBvZiB0aGUgZmlsZSBzeXN0ZW0gaWYgcHJvdmlkZWQuICBUaGUgaW5jb21pbmdcbiYjNDM7XHQgKiByZXF1ZXN0JiMzOTtzIGJpb192ZWMgaXMgZm9yd2FyZGVkIHRvIHRoZSBiYWNraW5nIGZpbGUgdW5jaGFuZ2VkLCBzbyBpdHNcbiYjNDM7XHQgKiByZXF1aXJlZCBtZW1vcnkgYWxpZ25tZW50IGJlY29tZXMgdGhlIGRldmljZSYjMzk7cyBkbWFfYWxpZ25tZW50IHdoZW5cbiYjNDM7XHQgKiB1c2VkIGZvciBkaXJlY3QtaW8uXG4gXHQgKi9cbi1cdGlmIChmaWxlX2lub2RlKHpvbmUtXHUwMDNlZmlsZSktXHUwMDNlaV9zYi1cdTAwM2VzX2Jsb2Nrc2l6ZSBcdTAwM2M9IFNaXzRLKVxuLVx0XHR6bG8tXHUwMDNlYmxvY2tfc2l6ZSA9IGZpbGVfaW5vZGUoem9uZS1cdTAwM2VmaWxlKS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplO1xuLVx0ZWxzZSBpZiAoIXZmc19nZXRhdHRyKFx1MDAyNnpvbmUtXHUwMDNlZmlsZS1cdTAwM2VmX3BhdGgsIFx1MDAyNnN0LCBTVEFUWF9ESU9BTElHTiwgMCkgXHUwMDI2XHUwMDI2XG4tXHRcdCAoc3QucmVzdWx0X21hc2sgXHUwMDI2IFNUQVRYX0RJT0FMSUdOKSlcbiYjNDM7XHRpZiAoIXZmc19nZXRhdHRyKFx1MDAyNnpvbmUtXHUwMDNlZmlsZS1cdTAwM2VmX3BhdGgsIFx1MDAyNnN0LCBTVEFUWF9ESU9BTElHTiwgMCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIChzdC5yZXN1bHRfbWFzayBcdTAwMjYgU1RBVFhfRElPQUxJR04pKSB7XG4gXHRcdHpsby1cdTAwM2VibG9ja19zaXplID0gc3QuZGlvX29mZnNldF9hbGlnbjtcbi1cdGVsc2UgaWYgKHNiX2JkZXYpXG4mIzQzO1x0XHR6bG8tXHUwMDNlZGlvX21lbV9hbGlnbiA9IHN0LmRpb19tZW1fYWxpZ24gLSAxO1xuJiM0MztcdH0gZWxzZSBpZiAoc2JfYmRldikge1xuIFx0XHR6bG8tXHUwMDNlYmxvY2tfc2l6ZSA9IGJkZXZfcGh5c2ljYWxfYmxvY2tfc2l6ZShzYl9iZGV2KTtcbi1cdGVsc2VcbiYjNDM7XHRcdHpsby1cdTAwM2VkaW9fbWVtX2FsaWduID0gYmRldl9kbWFfYWxpZ25tZW50KHNiX2JkZXYpO1xuJiM0MztcdH0gZWxzZSB7XG4gXHRcdHpsby1cdTAwM2VibG9ja19zaXplID0gU0VDVE9SX1NJWkU7XG4mIzQzO1x0XHR6bG8tXHUwMDNlZGlvX21lbV9hbGlnbiA9IFNFQ1RPUl9TSVpFIC0gMTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUHJlZmVyIHRoZSBGUyBibG9jayBzaXplIGZvciB0aGUgZGV2aWNlIGJsb2NrIHNpemUgd2hlbiBpdCBpcyBub1xuJiM0MztcdCAqIGxhcmdlciB0aGFuIDRLOyBvdGhlcndpc2Uga2VlcCB0aGUgZGlyZWN0IEkvTyAvIHBoeXNpY2FsIGJsb2NrIHNpemVcbiYjNDM7XHQgKiBzZWxlY3RlZCBhYm92ZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoZmlsZV9pbm9kZSh6b25lLVx1MDAzZWZpbGUpLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemUgXHUwMDNjPSBTWl80SylcbiYjNDM7XHRcdHpsby1cdTAwM2VibG9ja19zaXplID0gZmlsZV9pbm9kZSh6b25lLVx1MDAzZWZpbGUpLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemU7XG4gXG4gXHRpZiAoemxvLVx1MDAzZXpvbmVfY2FwYWNpdHkgXHUwMDI2ICgoemxvLVx1MDAzZWJsb2NrX3NpemUgXHUwMDNlXHUwMDNlIFNFQ1RPUl9TSElGVCkgLSAxKSkge1xuIFx0XHRwcl9lcnIoXCYjMzQ7Wm9uZSBjYXBhY2l0eSBpcyBub3QgYWxpZ25lZCB0byBibG9jayBzaXplICV1XFxuXCYjMzQ7LFxuQEAgLTEyNzksNiAmIzQzOzEyOTAsMTAgQEAgc3RhdGljIGludCB6bG9vcF9jdGxfYWRkKHN0cnVjdCB6bG9vcF9vcHRpb25zICpvcHRzKVxuIFxuIFx0bGltLnBoeXNpY2FsX2Jsb2NrX3NpemUgPSB6bG8tXHUwMDNlYmxvY2tfc2l6ZTtcbiBcdGxpbS5sb2dpY2FsX2Jsb2NrX3NpemUgPSB6bG8tXHUwMDNlYmxvY2tfc2l6ZTtcbiYjNDM7XHQvKiBEaXJlY3QgSS9PIGZvcndhcmRzIHRoZSByZXF1ZXN0IHBhZ2VzIHRvIHRoZSBiYWNraW5nIGZpbGVzIGFzLWlzLiAqL1xuJiM0MztcdGlmICghb3B0cy1cdTAwM2VidWZmZXJlZF9pbylcbiYjNDM7XHRcdGxpbS5kbWFfYWxpZ25tZW50ID0gbWF4X3QodW5zaWduZWQgaW50LCB6bG8tXHUwMDNlZGlvX21lbV9hbGlnbixcbiYjNDM7XHRcdFx0XHRcdCAgU0VDVE9SX1NJWkUgLSAxKTtcbiBcdGlmICh6bG8tXHUwMDNlem9uZV9hcHBlbmQpXG4gXHRcdGxpbS5tYXhfaHdfem9uZV9hcHBlbmRfc2VjdG9ycyA9IGxpbS5tYXhfaHdfc2VjdG9ycztcbiBcdGxpbS5tYXhfb3Blbl96b25lcyA9IHpsby1cdTAwM2VtYXhfb3Blbl96b25lcztcbmRpZmYgLS1naXQgYS9mcy9pb21hcC9kaXJlY3QtaW8uYyBiL2ZzL2lvbWFwL2RpcmVjdC1pby5jXG5pbmRleCBiNDg1ZTNiMTkxZGFmYS4uZmY0NThhYTEyYWUyOTggMTAwNjQ0XG4tLS0gYS9mcy9pb21hcC9kaXJlY3QtaW8uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvaW9tYXAvZGlyZWN0LWlvLmNcbkBAIC0zNTgsNiAmIzQzOzM1OCw3IEBAIHN0YXRpYyBzc2l6ZV90IGlvbWFwX2Rpb19iaW9faXRlcl9vbmUoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsXG4gXHRcdFx0XHRpb21hcF9tYXhfYmlvX3NpemUoXHUwMDI2aXRlci1cdTAwM2Vpb21hcCksIGFsaWdubWVudCk7XG4gXHRlbHNlXG4gXHRcdHJldCA9IGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoYmlvLCBkaW8tXHUwMDNlc3VibWl0Lml0ZXIsXG4mIzQzO1x0XHRcdFx0XHQgICAgIGJkZXZfZG1hX2FsaWdubWVudChiaW8tXHUwMDNlYmlfYmRldiksXG4gXHRcdFx0XHRcdCAgICAgYWxpZ25tZW50IC0gMSk7XG4gXHRpZiAodW5saWtlbHkocmV0KSlcbiBcdFx0Z290byBvdXRfcHV0X2JpbztcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jpby5oIGIvaW5jbHVkZS9saW51eC9iaW8uaFxuaW5kZXggOGYzM2Y3MTdiMTRmNWIuLmNlMzRlYTQ5ZWYzNTgyIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9iaW8uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9iaW8uaFxuQEAgLTQ3Nyw3ICYjNDM7NDc3LDcgQEAgaW50IGJkZXZfcndfdmlydChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBzZWN0b3IsIHZvaWQgKmRhdGEsXG4gXHRcdHNpemVfdCBsZW4sIGVudW0gcmVxX29wIG9wKTtcbiBcbiBpbnQgYmlvX2lvdl9pdGVyX2dldF9wYWdlcyhzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbi1cdFx0dW5zaWduZWQgbGVuX2FsaWduX21hc2spO1xuJiM0MztcdFx0dW5zaWduZWQgbWVtX2FsaWduX21hc2ssIHVuc2lnbmVkIGxlbl9hbGlnbl9tYXNrKTtcbiBcbiB2b2lkIGJpb19pb3ZfYnZlY19zZXQoc3RydWN0IGJpbyAqYmlvLCBjb25zdCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpO1xuIHZvaWQgX19iaW9fcmVsZWFzZV9wYWdlcyhzdHJ1Y3QgYmlvICpiaW8sIGJvb2wgbWFya19kaXJ0eSk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91aW8uaCBiL2luY2x1ZGUvbGludXgvdWlvLmhcbmluZGV4IGE5YmM1YjMwNjdlMzIwLi5mZTJlOTg1ZDc0ZDI0YiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvdWlvLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvdWlvLmhcbkBAIC0zODksOSAmIzQzOzM4OSwxNyBAQCBzc2l6ZV90IGlvdl9pdGVyX2V4dHJhY3RfcGFnZXMoc3RydWN0IGlvdl9pdGVyICppLCBzdHJ1Y3QgcGFnZSAqKipwYWdlcyxcbiBcdFx0XHQgICAgICAgc2l6ZV90IG1heHNpemUsIHVuc2lnbmVkIGludCBtYXhwYWdlcyxcbiBcdFx0XHQgICAgICAgaW92X2l0ZXJfZXh0cmFjdGlvbl90IGV4dHJhY3Rpb25fZmxhZ3MsXG4gXHRcdFx0ICAgICAgIHNpemVfdCAqb2Zmc2V0MCk7XG4mIzQzOy8qXG4mIzQzOyAqIEJsb2NrLWxheWVyIGNvbnN1bWVycyAoZS5nLiBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKCkpIHJlcXVpcmUgdGhhdCB0aGVcbiYjNDM7ICogc2VnbWVudHMgb2YgYW4gSVRFUl9CVkVDIGl0ZXJhdG9yIGFyZSBhbHJlYWR5IGFsaWduZWQgdG8gdGhlIHRhcmdldCBkZXZpY2UmIzM5O3NcbiYjNDM7ICogRE1BIGFsaWdubWVudCwgYW5kIGZvcndhcmQgdGhlbSBhcy1pcy4gIEluLWtlcm5lbCB1c2VycyB0aGF0IGJ1aWxkIHRoZWlyIG93blxuJiM0MzsgKiBidmVjcyBtdXN0IG5vdCBjcmVhdGUgc3ViLWFsaWduZWQgc2VnbWVudHM7IGlvdl9pdGVyX2V4dHJhY3RfYnZlY3MoKSBlbmZvcmNlc1xuJiM0MzsgKiB0aGUgc2FtZSBmb3IgdGhlIHNlZ21lbnRzIGl0IGV4dHJhY3RzIHZpYSBAbWVtX2FsaWduX21hc2suXG4mIzQzOyAqL1xuIHNzaXplX3QgaW92X2l0ZXJfZXh0cmFjdF9idmVjcyhzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsIHN0cnVjdCBiaW9fdmVjICpidixcbiBcdFx0c2l6ZV90IG1heF9zaXplLCB1bnNpZ25lZCBzaG9ydCAqbnJfdmVjcyxcbi1cdFx0dW5zaWduZWQgc2hvcnQgbWF4X3ZlY3MsIGlvdl9pdGVyX2V4dHJhY3Rpb25fdCBleHRyYWN0aW9uX2ZsYWdzKTtcbiYjNDM7XHRcdHVuc2lnbmVkIHNob3J0IG1heF92ZWNzLCB1bnNpZ25lZCBtZW1fYWxpZ25fbWFzayxcbiYjNDM7XHRcdGlvdl9pdGVyX2V4dHJhY3Rpb25fdCBleHRyYWN0aW9uX2ZsYWdzKTtcbiBcbiAvKipcbiAgKiBpb3ZfaXRlcl9leHRyYWN0X3dpbGxfcGluIC0gSW5kaWNhdGUgaG93IHBhZ2VzIGZyb20gdGhlIGl0ZXJhdG9yIHdpbGwgYmUgcmV0YWluZWRcbmRpZmYgLS1naXQgYS9saWIvaW92X2l0ZXIuYyBiL2xpYi9pb3ZfaXRlci5jXG5pbmRleCAyNzM5MTliMTYxNjE3Ni4uYzM0MzA3NTk1MWRlZDAgMTAwNjQ0XG4tLS0gYS9saWIvaW92X2l0ZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbGliL2lvdl9pdGVyLmNcbkBAIC0xODg2LDYgJiM0MzsxODg2LDggQEAgc3RhdGljIHVuc2lnbmVkIGludCBnZXRfY29udGlnX2ZvbGlvX2xlbihzdHJ1Y3QgcGFnZSAqKnBhZ2VzLFxuICAqIEBtYXhfc2l6ZTpcdG1heGltdW0gc2l6ZSB0byBleHRyYWN0IGZyb20gQGl0ZXJcbiAgKiBAbnJfdmVjczpcdG51bWJlciBvZiB2ZWN0b3JzIGluIEBidiAob24gaW4gYW5kIG91dHB1dClcbiAgKiBAbWF4X3ZlY3M6XHRtYXhpbXVtIHZlY3RvcnMgaW4gQGJ2LCBpbmNsdWRpbmcgdGhvc2UgZmlsbGVkIGJlZm9yZSBjYWxsaW5nXG4mIzQzOyAqIEBtZW1fYWxpZ25fbWFzazpcdHJlamVjdCB3aXRoIC1FSU5WQUwgaWYgdGhlIHNvdXJjZSBhZGRyZXNzIG9yXG4mIzQzOyAqXHRcdGxlbmd0aCBpcyBub3QgYWxpZ25lZCB0byB0aGlzIG1hc2tcbiAgKiBAZXh0cmFjdGlvbl9mbGFnczogZmxhZ3MgdG8gcXVhbGlmeSByZXF1ZXN0XG4gICpcbiAgKiBMaWtlIGlvdl9pdGVyX2V4dHJhY3RfcGFnZXMoKSwgYnV0IHJldHVybnMgcGh5c2ljYWxseSBjb250aWd1b3VzIHJhbmdlc1xuQEAgLTE4OTcsMTQgJiM0MzsxODk5LDE5IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2NvbnRpZ19mb2xpb19sZW4oc3RydWN0IHBhZ2UgKipwYWdlcyxcbiAgKi9cbiBzc2l6ZV90IGlvdl9pdGVyX2V4dHJhY3RfYnZlY3Moc3RydWN0IGlvdl9pdGVyICppdGVyLCBzdHJ1Y3QgYmlvX3ZlYyAqYnYsXG4gXHRcdHNpemVfdCBtYXhfc2l6ZSwgdW5zaWduZWQgc2hvcnQgKm5yX3ZlY3MsXG4tXHRcdHVuc2lnbmVkIHNob3J0IG1heF92ZWNzLCBpb3ZfaXRlcl9leHRyYWN0aW9uX3QgZXh0cmFjdGlvbl9mbGFncylcbiYjNDM7XHRcdHVuc2lnbmVkIHNob3J0IG1heF92ZWNzLCB1bnNpZ25lZCBtZW1fYWxpZ25fbWFzayxcbiYjNDM7XHRcdGlvdl9pdGVyX2V4dHJhY3Rpb25fdCBleHRyYWN0aW9uX2ZsYWdzKVxuIHtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHN0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpaXRlcl9pb3ZfYWRkcihpdGVyKTtcbiBcdHVuc2lnbmVkIHNob3J0IGVudHJpZXNfbGVmdCA9IG1heF92ZWNzIC0gKm5yX3ZlY3M7XG4gXHR1bnNpZ25lZCBzaG9ydCBucl9wYWdlcywgaSA9IDA7XG4gXHRzaXplX3QgbGVmdCwgb2Zmc2V0LCBsZW47XG4gXHRzdHJ1Y3QgcGFnZSAqKnBhZ2VzO1xuIFx0c3NpemVfdCBzaXplO1xuIFxuJiM0MztcdGlmICgoc3RhcnQgfCBpdGVyX2lvdl9sZW4oaXRlcikpIFx1MDAyNiBtZW1fYWxpZ25fbWFzaylcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiBcdC8qXG4gXHQgKiBNb3ZlIHBhZ2UgYXJyYXkgdXAgaW4gdGhlIGFsbG9jYXRlZCBtZW1vcnkgZm9yIHRoZSBiaW8gdmVjcyBhcyBmYXIgYXNcbiBcdCAqIHBvc3NpYmxlIHNvIHRoYXQgd2UgY2FuIHN0YXJ0IGZpbGxpbmcgYmlvdmVjcyBmcm9tIHRoZSBiZWdpbm5pbmdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAxNzo0MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX0xPT1AmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9aT05FRF9MT09QJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmlvX2lvdl9pdGVyX2dldF9wYWdlcyYjMzQ7LAogICAgJiMzNDtpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzJiMzNDssCiAgICAmIzM0O2xvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnQmIzM0OywKICAgICYjMzQ7bG9vcF9zZXRfZG1hX2xpbWl0JiMzNDssCiAgICAmIzM0O3psb29wX2dldF9ibG9ja19zaXplJiMzNDssCiAgICAmIzM0O3psb29wX2N0bF9hZGQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYmxvY2sgbGF5ZXIgZGlyZWN0IEkvTyBsb2dpYyB0byBlbmZvcmNlIG1lbW9yeSBhbGlnbm1lbnQgY2hlY2tzIHZpYSBgYmlvX2lvdl9pdGVyX2dldF9wYWdlc2AgYW5kIGBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzYC4gSXQgYWxzbyB1cGRhdGVzIHRoZSBgbG9vcGAgYW5kIGB6bG9vcGAgZHJpdmVycyB0byBjb3JyZWN0bHkgc2V0IERNQSBsaW1pdHMgYmFzZWQgb24gdGhlIGJhY2tpbmcgZmlsZSYjMzk7cyBkaXJlY3QgSS9PIGFsaWdubWVudC4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSBibG9jayBsYXllciBmdW5jdGlvbmFsaXR5IGFuZCBkcml2ZXIgYmVoYXZpb3IsIG1ha2luZyB0aGVtIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZGM1ZTE2ZGQ1NGM4ZDEwNjg3Yzk0ZjUwNTY5MWEwOWQ1N2UxNGYwOApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVuIDI0IDE3OjQyOjIxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYmxvY2svYmlvLmMgYi9ibG9jay9iaW8uYwppbmRleCBmMmE1ZjRkMGE5NjcyYi4uZmFhZDQxYTcyYWM3N2YgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jpby5jCiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2Jpby5jCkBAIC0xMjIwLDEwICYjNDM7MTIyMCw0NSBAQCBzdGF0aWMgaW50IGJpb19pb3ZfaXRlcl9hbGlnbl9kb3duKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLAogCXJldHVybiAwOwogfQogCiYjNDM7I2lmZGVmIENPTkZJR19ERUJVR19LRVJORUwKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgYmlvX2lvdl9idmVjX2FsaWduZWQoY29uc3Qgc3RydWN0IGJpbyAqYmlvLAomIzQzOwkJCQkJdW5zaWduZWQgbWVtX2FsaWduX21hc2spCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnZlY19pdGVyIGl0ZXI7CiYjNDM7CXN0cnVjdCBiaW9fdmVjIGJ2OwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBDb3JyZWN0IGNhbGxlcnMgbmV2ZXIgYnJlYWsgdGhlIGFsaWdubWVudCByZXF1aXJlbWVudHMsIHNvIHRoaXMKJiM0MzsJICogZXhoYXVzdGl2ZSBjaGVjayBpcyBvbmx5IHBhaWQgZm9yIGluIGRlYnVnIGJ1aWxkcy4KJiM0MzsJICovCiYjNDM7CWZvcl9lYWNoX21wX2J2ZWMoYnYsIGJpby0mZ3Q7YmlfaW9fdmVjLCBpdGVyLCBiaW8tJmd0O2JpX2l0ZXIpCiYjNDM7CQlpZiAoKGJ2LmJ2X29mZnNldCB8IGJ2LmJ2X2xlbikgJmFtcDsgbWVtX2FsaWduX21hc2spCiYjNDM7CQkJcmV0dXJuIGZhbHNlOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7I2Vsc2UKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgYmlvX2lvdl9idmVjX2FsaWduZWQoY29uc3Qgc3RydWN0IGJpbyAqYmlvLAomIzQzOwkJCQkJdW5zaWduZWQgbWVtX2FsaWduX21hc2spCiYjNDM7ewomIzQzOwkvKgomIzQzOwkgKiBXZSBmb3J3YXJkIHRoZSBiaW9fdmVjIGFzLWlzLCBzbyBJVEVSX0JWRUMgY2FsbGVycyBtdXN0IHByb3ZpZGUKJiM0MzsJICogc2VnbWVudHMgYWxyZWFkeSBhbGlnbmVkIHRvIHRoZSBkZXZpY2UmIzM5O3MgRE1BIGFsaWdubWVudC4gVGhlIG9ubHkKJiM0MzsJICogdW5jaGVja2VkIHVzZXItY29udHJvbGxhYmxlIG9mZnNldCB0aGF0IHJlYWNoZXMgaGVyZSBpcyBhbiBpb191cmluZwomIzQzOwkgKiByZWdpc3RlcmVkIGJ1ZmZlciB3aGVyZSBqdXN0IHRoZSBmaXJzdCBzZWdtZW50IGNhbiBiZSB1bmFsaWduZWQKJiM0MzsJICogKHRoZSByZXN0IGlzIHZpcnR1YWxseSBjb250aWd1b3VzKSwgc28gY2hlY2tpbmcgb25seSB0aGF0IG9uZSBpcwomIzQzOwkgKiBzdWZmaWNpZW50IHRvIGtub3cgaWYgdGhlIGVudGlyZSB2ZWN0b3IgaXMgdmFsaWQuCiYjNDM7CSAqLwomIzQzOwlyZXR1cm4gIShtcF9idmVjX2l0ZXJfb2Zmc2V0KGJpby0mZ3Q7YmlfaW9fdmVjLCBiaW8tJmd0O2JpX2l0ZXIpICZhbXA7CiYjNDM7CQkJCQkJCW1lbV9hbGlnbl9tYXNrKTsKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiAvKioKICAqIGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMgLSBhZGQgdXNlciBvciBrZXJuZWwgcGFnZXMgdG8gYSBiaW8KICAqIEBiaW86IGJpbyB0byBhZGQgcGFnZXMgdG8KICAqIEBpdGVyOiBpb3YgaXRlcmF0b3IgZGVzY3JpYmluZyB0aGUgcmVnaW9uIHRvIGJlIGFkZGVkCiYjNDM7ICogQG1lbV9hbGlnbl9tYXNrOiB0aGUgbWFzayB0aGUgc291cmNlIGFkZHJlc3MgYW5kIGxlbmd0aCBtdXN0IGJlIGFsaWduZWQgdG8sCiYjNDM7ICoJMCBmb3Igbm8gcmVxdWlyZW1lbnQKICAqIEBsZW5fYWxpZ25fbWFzazogdGhlIG1hc2sgdG8gYWxpZ24gdGhlIHRvdGFsIHNpemUgdG8sIDAgZm9yIGFueSBsZW5ndGgKICAqCiAgKiBUaGlzIHRha2VzIGVpdGhlciBhbiBpdGVyYXRvciBwb2ludGluZyB0byB1c2VyIG1lbW9yeSwgb3Igb25lIHBvaW50aW5nIHRvCkBAIC0xMjQyLDcgJiM0MzsxMjc3LDcgQEAgc3RhdGljIGludCBiaW9faW92X2l0ZXJfYWxpZ25fZG93bihzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlciwKICAqIGlzIHJldHVybmVkIG9ubHkgaWYgMCBwYWdlcyBjb3VsZCBiZSBwaW5uZWQuCiAgKi8KIGludCBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLAotCQkJICAgdW5zaWduZWQgbGVuX2FsaWduX21hc2spCiYjNDM7CQkJICAgdW5zaWduZWQgbWVtX2FsaWduX21hc2ssIHVuc2lnbmVkIGxlbl9hbGlnbl9tYXNrKQogewogCWlvdl9pdGVyX2V4dHJhY3Rpb25fdCBmbGFncyA9IDA7CiAKQEAgLTEyNTEsNiAmIzQzOzEyODYsMTAgQEAgaW50IGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsCiAKIAlpZiAoaW92X2l0ZXJfaXNfYnZlYyhpdGVyKSkgewogCQliaW9faW92X2J2ZWNfc2V0KGJpbywgaXRlcik7CiYjNDM7CiYjNDM7CQlpZiAoIWJpb19pb3ZfYnZlY19hbGlnbmVkKGJpbywgbWVtX2FsaWduX21hc2spKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwogCQlpb3ZfaXRlcl9hZHZhbmNlKGl0ZXIsIGJpby0mZ3Q7YmlfaXRlci5iaV9zaXplKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMTI2NSw4ICYjNDM7MTMwNCwxOSBAQCBpbnQgYmlvX2lvdl9pdGVyX2dldF9wYWdlcyhzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlciwKIAogCQlyZXQgPSBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzKGl0ZXIsIGJpby0mZ3Q7YmlfaW9fdmVjLAogCQkJCUJJT19NQVhfU0laRSAtIGJpby0mZ3Q7YmlfaXRlci5iaV9zaXplLAotCQkJCSZhbXA7YmlvLSZndDtiaV92Y250LCBiaW8tJmd0O2JpX21heF92ZWNzLCBmbGFncyk7CiYjNDM7CQkJCSZhbXA7YmlvLSZndDtiaV92Y250LCBiaW8tJmd0O2JpX21heF92ZWNzLAomIzQzOwkJCQltZW1fYWxpZ25fbWFzaywgZmxhZ3MpOwogCQlpZiAocmV0ICZsdDs9IDApIHsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIEEgbWlzYWxpZ25lZCB2ZWN0b3IgZmFpbHMgdGhlIHdob2xlIEkvTy4gIFJlbGVhc2UgYW55CiYjNDM7CQkJICogcGFnZXMgcGlubmVkIGJ5IGVhcmxpZXIgaXRlcmF0aW9ucyBiZWZvcmUgcmV0dXJuaW5nCiYjNDM7CQkJICogc2luY2UgdGhpcyBiaW8gd29uJiMzOTt0IGJlIHN1Ym1pdHRlZCB0byByZWxlYXNlIHRoZW0uCiYjNDM7CQkJICovCiYjNDM7CQkJaWYgKHJldCA9PSAtRUlOVkFMKSB7CiYjNDM7CQkJCWJpb19yZWxlYXNlX3BhZ2VzKGJpbywgZmFsc2UpOwomIzQzOwkJCQliaW9fY2xlYXJfZmxhZyhiaW8sIEJJT19QQUdFX1BJTk5FRCk7CiYjNDM7CQkJCWJpby0mZ3Q7YmlfdmNudCA9IDA7CiYjNDM7CQkJfQogCQkJaWYgKCFiaW8tJmd0O2JpX3ZjbnQpCiAJCQkJcmV0dXJuIHJldDsKIAkJCWJyZWFrOwpAQCAtMTM3Nyw3ICYjNDM7MTQyNyw3IEBAIHN0YXRpYyBpbnQgYmlvX2lvdl9pdGVyX2JvdW5jZV9yZWFkKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLAogCQlzc2l6ZV90IHJldDsKIAogCQlyZXQgPSBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzKGl0ZXIsIGJpby0mZ3Q7YmlfaW9fdmVjICYjNDM7IDEsIGxlbiwKLQkJCQkmYW1wO2Jpby0mZ3Q7YmlfdmNudCwgYmlvLSZndDtiaV9tYXhfdmVjcyAtIDEsIDApOwomIzQzOwkJCQkmYW1wO2Jpby0mZ3Q7YmlfdmNudCwgYmlvLSZndDtiaV9tYXhfdmVjcyAtIDEsIDAsIDApOwogCQlpZiAocmV0ICZsdDs9IDApIHsKIAkJCWlmICghYmlvLSZndDtiaV92Y250KSB7CiAJCQkJZm9saW9fcHV0KGZvbGlvKTsKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1tYXAuYyBiL2Jsb2NrL2Jsay1tYXAuYwppbmRleCA3Njg1NDlmMTlmOTdlYy4uYzk1MzVlZmUxYTkxM2MgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1tYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9ibGstbWFwLmMKQEAgLTI3NCw3ICYjNDM7Mjc0LDcgQEAgc3RhdGljIGludCBiaW9fbWFwX3VzZXJfaW92KHN0cnVjdCByZXF1ZXN0ICpycSwgc3RydWN0IGlvdl9pdGVyICppdGVyLAogCSAqIE5vIGFsaWdubWVudCByZXF1aXJlbWVudHMgb24gb3VyIHBhcnQgdG8gc3VwcG9ydCBhcmJpdHJhcnkKIAkgKiBwYXNzdGhyb3VnaCBjb21tYW5kcy4KIAkgKi8KLQlyZXQgPSBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKGJpbywgaXRlciwgMCk7CiYjNDM7CXJldCA9IGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoYmlvLCBpdGVyLCAwLCAwKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dF9wdXQ7CiAJcmV0ID0gYmxrX3JxX2FwcGVuZF9iaW8ocnEsIGJpbyk7CmRpZmYgLS1naXQgYS9ibG9jay9mb3BzLmMgYi9ibG9jay9mb3BzLmMKaW5kZXggMTU3ODNhNjE4MGRlYzEuLmU1MTlkN2Y0M2IzMTA2IDEwMDY0NAotLS0gYS9ibG9jay9mb3BzLmMKJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svZm9wcy5jCkBAIC00Niw3ICYjNDM7NDYsNyBAQCBzdGF0aWMgYm9vbCBibGtkZXZfZGlvX2ludmFsaWQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IGtpb2NiICppb2NiLAogc3RhdGljIGlubGluZSBpbnQgYmxrZGV2X2lvdl9pdGVyX2dldF9wYWdlcyhzdHJ1Y3QgYmlvICpiaW8sCiAJCXN0cnVjdCBpb3ZfaXRlciAqaXRlciwgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldikKIHsKLQlyZXR1cm4gYmlvX2lvdl9pdGVyX2dldF9wYWdlcyhiaW8sIGl0ZXIsCiYjNDM7CXJldHVybiBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKGJpbywgaXRlciwgYmRldl9kbWFfYWxpZ25tZW50KGJkZXYpLAogCQkJYmRldl9sb2dpY2FsX2Jsb2NrX3NpemUoYmRldikgLSAxKTsKIH0KIApAQCAtMjE4LDcgJiM0MzsyMTgsNyBAQCBzdGF0aWMgc3NpemVfdCBfX2Jsa2Rldl9kaXJlY3RfSU8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsCiAKIAkJcmV0ID0gYmxrZGV2X2lvdl9pdGVyX2dldF9wYWdlcyhiaW8sIGl0ZXIsIGJkZXYpOwogCQlpZiAodW5saWtlbHkocmV0KSkgewotCQkJYmlvX2VuZGlvX3N0YXR1cyhiaW8sIEJMS19TVFNfSU9FUlIpOwomIzQzOwkJCWJpb19lbmRpb19zdGF0dXMoYmlvLCBlcnJub190b19ibGtfc3RhdHVzKHJldCkpOwogCQkJYnJlYWs7CiAJCX0KIAkJaWYgKGlvY2ItJmd0O2tpX2ZsYWdzICZhbXA7IElPQ0JfTk9XQUlUKSB7CkBAIC0yMzgsOCAmIzQzOzIzOCwxMCBAQCBzdGF0aWMgc3NpemVfdCBfX2Jsa2Rldl9kaXJlY3RfSU8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsCiAJCX0KIAkJaWYgKGlvY2ItJmd0O2tpX2ZsYWdzICZhbXA7IElPQ0JfSEFTX01FVEFEQVRBKSB7CiAJCQlyZXQgPSBiaW9faW50ZWdyaXR5X21hcF9pdGVyKGJpbywgaW9jYi0mZ3Q7cHJpdmF0ZSk7Ci0JCQlpZiAodW5saWtlbHkocmV0KSkKLQkJCQlnb3RvIGZhaWw7CiYjNDM7CQkJaWYgKHVubGlrZWx5KHJldCkpIHsKJiM0MzsJCQkJYmlvX2VuZGlvX3N0YXR1cyhiaW8sIGVycm5vX3RvX2Jsa19zdGF0dXMocmV0KSk7CiYjNDM7CQkJCWJyZWFrOwomIzQzOwkJCX0KIAkJfQogCiAJCWlmIChpc19yZWFkKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jCmluZGV4IDMxMGRlMDQ2M2JlYjE0Li41ZmU2MWQ1NDJmOGI3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9sb29wLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay9sb29wLmMKQEAgLTU0LDYgJiM0Mzs1NCw3IEBAIHN0cnVjdCBsb29wX2RldmljZSB7CiAKIAlzdHJ1Y3QgZmlsZQkqbG9fYmFja2luZ19maWxlOwogCXVuc2lnbmVkIGludAlsb19taW5fZGlvX3NpemU7CiYjNDM7CXVuc2lnbmVkIGludAlsb19kaW9fbWVtX2FsaWduOwogCXN0cnVjdCBibG9ja19kZXZpY2UgKmxvX2RldmljZTsKIAogCWdmcF90CQlvbGRfZ2ZwX21hc2s7CkBAIC00NDcsMjYgJiM0Mzs0NDgsMzcgQEAgc3RhdGljIHZvaWQgbG9vcF9yZXJlYWRfcGFydGl0aW9ucyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKQogCQkJX19mdW5jX18sIGxvLSZndDtsb19udW1iZXIsIGxvLSZndDtsb19maWxlX25hbWUsIHJjKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBsb29wX3F1ZXJ5X21pbl9kaW9fc2l6ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKQomIzQzO3N0YXRpYyB2b2lkIGxvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnQoc3RydWN0IGxvb3BfZGV2aWNlICpsbykKIHsKIAlzdHJ1Y3QgZmlsZSAqZmlsZSA9IGxvLSZndDtsb19iYWNraW5nX2ZpbGU7CiAJc3RydWN0IGJsb2NrX2RldmljZSAqc2JfYmRldiA9IGZpbGUtJmd0O2ZfbWFwcGluZy0mZ3Q7aG9zdC0mZ3Q7aV9zYi0mZ3Q7c19iZGV2OwogCXN0cnVjdCBrc3RhdCBzdDsKIAogCS8qCi0JICogVXNlIHRoZSBtaW5pbWFsIGRpbyBhbGlnbm1lbnQgb2YgdGhlIGZpbGUgc3lzdGVtIGlmIHByb3ZpZGVkLgomIzQzOwkgKiBVc2UgdGhlIGRpbyBhbGlnbm1lbnQgb2YgdGhlIGZpbGUgc3lzdGVtIGlmIHByb3ZpZGVkLiAgVGhlIGluY29tb2luZwomIzQzOwkgKiByZXF1ZXN0JiMzOTtzIGJpb192ZWMgaXMgZm9yd2FyZGVkIHRvIHRoZSBiYWNraW5nIGZpbGUgdW5jaGFuZ2VkLCBzbyBpdHMKJiM0MzsJICogcmVxdWlyZWQgbWVtb3J5IGFsaWdubWVudCBiZWNvbWVzIHRoZSBkZXZpY2UmIzM5O3MgZG1hX2FsaWdubWVudCB3aGVuCiYjNDM7CSAqIHVzZWQgZm9yIGRpcmVjdC1pby4KIAkgKi8KIAlpZiAoIXZmc19nZXRhdHRyKCZhbXA7ZmlsZS0mZ3Q7Zl9wYXRoLCAmYW1wO3N0LCBTVEFUWF9ESU9BTElHTiwgMCkgJmFtcDsmYW1wOwotCSAgICAoc3QucmVzdWx0X21hc2sgJmFtcDsgU1RBVFhfRElPQUxJR04pKQotCQlyZXR1cm4gc3QuZGlvX29mZnNldF9hbGlnbjsKJiM0MzsJICAgIChzdC5yZXN1bHRfbWFzayAmYW1wOyBTVEFUWF9ESU9BTElHTikpIHsKJiM0MzsJCWxvLSZndDtsb19taW5fZGlvX3NpemUgPSBzdC5kaW9fb2Zmc2V0X2FsaWduOwomIzQzOwkJbG8tJmd0O2xvX2Rpb19tZW1fYWxpZ24gPSBzdC5kaW9fbWVtX2FsaWduIC0gMTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQogCiAJLyoKIAkgKiBJbiBhIHBlcmZlY3Qgd29ybGQgdGhpcyB3b3VsZG4mIzM5O3QgYmUgbmVlZGVkLCBidXQgYXMgb2YgTGludXggNi4xMyBvbmx5CiAJICogYSBoYW5kZnVsIG9mIGZpbGUgc3lzdGVtcyBzdXBwb3J0IHRoZSBTVEFUWF9ESU9BTElHTiBmbGFnLgogCSAqLwotCWlmIChzYl9iZGV2KQotCQlyZXR1cm4gYmRldl9sb2dpY2FsX2Jsb2NrX3NpemUoc2JfYmRldik7Ci0JcmV0dXJuIFNFQ1RPUl9TSVpFOwomIzQzOwlpZiAoc2JfYmRldikgewomIzQzOwkJbG8tJmd0O2xvX21pbl9kaW9fc2l6ZSA9IGJkZXZfbG9naWNhbF9ibG9ja19zaXplKHNiX2JkZXYpOwomIzQzOwkJbG8tJmd0O2xvX2Rpb19tZW1fYWxpZ24gPSBiZGV2X2RtYV9hbGlnbm1lbnQoc2JfYmRldik7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJbG8tJmd0O2xvX21pbl9kaW9fc2l6ZSA9IFNFQ1RPUl9TSVpFOwomIzQzOwlsby0mZ3Q7bG9fZGlvX21lbV9hbGlnbiA9IFNFQ1RPUl9TSVpFIC0gMTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgaXNfbG9vcF9kZXZpY2Uoc3RydWN0IGZpbGUgKmZpbGUpCkBAIC01MDksNyAmIzQzOzUyMSw3IEBAIHN0YXRpYyB2b2lkIGxvb3BfYXNzaWduX2JhY2tpbmdfZmlsZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIAkJCWxvLSZndDtvbGRfZ2ZwX21hc2sgJmFtcDsgfihfX0dGUF9JTyB8IF9fR0ZQX0ZTKSk7CiAJaWYgKGxvLSZndDtsb19iYWNraW5nX2ZpbGUtJmd0O2ZfZmxhZ3MgJmFtcDsgT19ESVJFQ1QpCiAJCWxvLSZndDtsb19mbGFncyB8PSBMT19GTEFHU19ESVJFQ1RfSU87Ci0JbG8tJmd0O2xvX21pbl9kaW9fc2l6ZSA9IGxvb3BfcXVlcnlfbWluX2Rpb19zaXplKGxvKTsKJiM0MzsJbG9vcF91cGRhdGVfZGlvX2FsaWdubWVudChsbyk7CiB9CiAKIHN0YXRpYyBpbnQgbG9vcF9jaGVja19iYWNraW5nX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUpCkBAIC05NDAsNiAmIzQzOzk1MiwxOSBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGxvb3BfZGVmYXVsdF9ibG9ja3NpemUoc3RydWN0IGxvb3BfZGV2aWNlICpsbykKIAlyZXR1cm4gU0VDVE9SX1NJWkU7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBsb29wX3NldF9kbWFfbGltaXQoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogRGlyZWN0IEkvTyBmb3J3YXJkcyB0aGUgdXNlciBwYWdlcyB0byB0aGUgYmFja2luZyBmaWxlIHVuY2hhbmdlZCwgc28KJiM0MzsJICogdHJhY2sgdGhlIGJhY2tpbmcmIzM5O3MgRE1BIGFsaWdubWVudCByZXF1aXJlbWVudCBhcyB0aGUgbW9kZSBpcyB0b2dnbGVkLgomIzQzOwkgKi8KJiM0MzsJaWYgKGxvLSZndDtsb19mbGFncyAmYW1wOyBMT19GTEFHU19ESVJFQ1RfSU8pCiYjNDM7CQlsaW0tJmd0O2RtYV9hbGlnbm1lbnQgPSBtYXhfdCh1bnNpZ25lZCBpbnQsIGxvLSZndDtsb19kaW9fbWVtX2FsaWduLAomIzQzOwkJCQkJICAgU0VDVE9SX1NJWkUgLSAxKTsKJiM0MzsJZWxzZQomIzQzOwkJbGltLSZndDtkbWFfYWxpZ25tZW50ID0gU0VDVE9SX1NJWkUgLSAxOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIGxvb3BfdXBkYXRlX2xpbWl0cyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sCiAJCXVuc2lnbmVkIGludCBic2l6ZSkKIHsKQEAgLTk2MSw2ICYjNDM7OTg2LDcgQEAgc3RhdGljIHZvaWQgbG9vcF91cGRhdGVfbGltaXRzKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSwKIAlsaW0tJmd0O2xvZ2ljYWxfYmxvY2tfc2l6ZSA9IGJzaXplOwogCWxpbS0mZ3Q7cGh5c2ljYWxfYmxvY2tfc2l6ZSA9IGJzaXplOwogCWxpbS0mZ3Q7aW9fbWluID0gYnNpemU7CiYjNDM7CWxvb3Bfc2V0X2RtYV9saW1pdChsbywgbGltKTsKIAlsaW0tJmd0O2ZlYXR1cmVzICZhbXA7PSB+KEJMS19GRUFUX1dSSVRFX0NBQ0hFIHwgQkxLX0ZFQVRfUk9UQVRJT05BTCk7CiAJaWYgKGZpbGUtJmd0O2Zfb3AtJmd0O2ZzeW5jICZhbXA7JmFtcDsgIShsby0mZ3Q7bG9fZmxhZ3MgJmFtcDsgTE9fRkxBR1NfUkVBRF9PTkxZKSkKIAkJbGltLSZndDtmZWF0dXJlcyB8PSBCTEtfRkVBVF9XUklURV9DQUNIRTsKQEAgLTE0MTYsNiAmIzQzOzE0NDIsNyBAQCBzdGF0aWMgaW50IGxvb3Bfc2V0X2RpbyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlib29sIHVzZV9kaW8gPSAhIWFyZzsKIAl1bnNpZ25lZCBpbnQgbWVtZmxhZ3M7CiYjNDM7CXN0cnVjdCBxdWV1ZV9saW1pdHMgbGltOwogCiAJaWYgKGxvLSZndDtsb19zdGF0ZSAhPSBMb19ib3VuZCkKIAkJcmV0dXJuIC1FTlhJTzsKQEAgLTE0MzQsNiAmIzQzOzE0NjEsOSBAQCBzdGF0aWMgaW50IGxvb3Bfc2V0X2RpbyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCB1bnNpZ25lZCBsb25nIGFyZykKIAkJbG8tJmd0O2xvX2ZsYWdzIHw9IExPX0ZMQUdTX0RJUkVDVF9JTzsKIAllbHNlCiAJCWxvLSZndDtsb19mbGFncyAmYW1wOz0gfkxPX0ZMQUdTX0RJUkVDVF9JTzsKJiM0MzsJbGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby0mZ3Q7bG9fcXVldWUpOwomIzQzOwlsb29wX3NldF9kbWFfbGltaXQobG8sICZhbXA7bGltKTsKJiM0MzsJcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUobG8tJmd0O2xvX3F1ZXVlLCAmYW1wO2xpbSk7CiAJYmxrX21xX3VuZnJlZXplX3F1ZXVlKGxvLSZndDtsb19xdWV1ZSwgbWVtZmxhZ3MpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96bG9vcC5jIGIvZHJpdmVycy9ibG9jay96bG9vcC5jCmluZGV4IDU1ZWViNmFhYzBlYTNiLi5mOTdhMjBjZmRiN2NlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay96bG9vcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svemxvb3AuYwpAQCAtMTQ0LDYgJiM0MzsxNDQsNyBAQCBzdHJ1Y3Qgemxvb3BfZGV2aWNlIHsKIAl1bnNpZ25lZCBpbnQJCW5yX2NvbnZfem9uZXM7CiAJdW5zaWduZWQgaW50CQltYXhfb3Blbl96b25lczsKIAl1bnNpZ25lZCBpbnQJCWJsb2NrX3NpemU7CiYjNDM7CXVuc2lnbmVkIGludAkJZGlvX21lbV9hbGlnbjsKIAogCXNwaW5sb2NrX3QJCW9wZW5fem9uZXNfbG9jazsKIAlzdHJ1Y3QgbGlzdF9oZWFkCW9wZW5fem9uZXNfbHJ1X2xpc3Q7CkBAIC0xMDM3LDIwICYjNDM7MTAzOCwzMCBAQCBzdGF0aWMgaW50IHpsb29wX2dldF9ibG9ja19zaXplKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbywKIAlzdHJ1Y3Qga3N0YXQgc3Q7CiAKIAkvKgotCSAqIElmIHRoZSBGUyBibG9jayBzaXplIGlzIGxvd2VyIHRoYW4gb3IgZXF1YWwgdG8gNEssIHVzZSB0aGF0IGFzIHRoZQotCSAqIGRldmljZSBibG9jayBzaXplLiBPdGhlcndpc2UsIGZhbGxiYWNrIHRvIHRoZSBGUyBkaXJlY3QgSU8gYWxpZ25tZW50Ci0JICogY29uc3RyYWludCBpZiB0aGF0IGlzIHByb3ZpZGVkLCBhbmQgdG8gdGhlIEZTIHVuZGVybHlpbmcgZGV2aWNlCi0JICogcGh5c2ljYWwgYmxvY2sgc2l6ZSBpZiB0aGUgZGlyZWN0IElPIGFsaWdubWVudCBpcyB1bmtub3duLgomIzQzOwkgKiBVc2UgdGhlIGRpbyBhbGlnbm1lbnQgb2YgdGhlIGZpbGUgc3lzdGVtIGlmIHByb3ZpZGVkLiAgVGhlIGluY29taW5nCiYjNDM7CSAqIHJlcXVlc3QmIzM5O3MgYmlvX3ZlYyBpcyBmb3J3YXJkZWQgdG8gdGhlIGJhY2tpbmcgZmlsZSB1bmNoYW5nZWQsIHNvIGl0cwomIzQzOwkgKiByZXF1aXJlZCBtZW1vcnkgYWxpZ25tZW50IGJlY29tZXMgdGhlIGRldmljZSYjMzk7cyBkbWFfYWxpZ25tZW50IHdoZW4KJiM0MzsJICogdXNlZCBmb3IgZGlyZWN0LWlvLgogCSAqLwotCWlmIChmaWxlX2lub2RlKHpvbmUtJmd0O2ZpbGUpLSZndDtpX3NiLSZndDtzX2Jsb2Nrc2l6ZSAmbHQ7PSBTWl80SykKLQkJemxvLSZndDtibG9ja19zaXplID0gZmlsZV9pbm9kZSh6b25lLSZndDtmaWxlKS0mZ3Q7aV9zYi0mZ3Q7c19ibG9ja3NpemU7Ci0JZWxzZSBpZiAoIXZmc19nZXRhdHRyKCZhbXA7em9uZS0mZ3Q7ZmlsZS0mZ3Q7Zl9wYXRoLCAmYW1wO3N0LCBTVEFUWF9ESU9BTElHTiwgMCkgJmFtcDsmYW1wOwotCQkgKHN0LnJlc3VsdF9tYXNrICZhbXA7IFNUQVRYX0RJT0FMSUdOKSkKJiM0MzsJaWYgKCF2ZnNfZ2V0YXR0cigmYW1wO3pvbmUtJmd0O2ZpbGUtJmd0O2ZfcGF0aCwgJmFtcDtzdCwgU1RBVFhfRElPQUxJR04sIDApICZhbXA7JmFtcDsKJiM0MzsJICAgIChzdC5yZXN1bHRfbWFzayAmYW1wOyBTVEFUWF9ESU9BTElHTikpIHsKIAkJemxvLSZndDtibG9ja19zaXplID0gc3QuZGlvX29mZnNldF9hbGlnbjsKLQllbHNlIGlmIChzYl9iZGV2KQomIzQzOwkJemxvLSZndDtkaW9fbWVtX2FsaWduID0gc3QuZGlvX21lbV9hbGlnbiAtIDE7CiYjNDM7CX0gZWxzZSBpZiAoc2JfYmRldikgewogCQl6bG8tJmd0O2Jsb2NrX3NpemUgPSBiZGV2X3BoeXNpY2FsX2Jsb2NrX3NpemUoc2JfYmRldik7Ci0JZWxzZQomIzQzOwkJemxvLSZndDtkaW9fbWVtX2FsaWduID0gYmRldl9kbWFfYWxpZ25tZW50KHNiX2JkZXYpOwomIzQzOwl9IGVsc2UgewogCQl6bG8tJmd0O2Jsb2NrX3NpemUgPSBTRUNUT1JfU0laRTsKJiM0MzsJCXpsby0mZ3Q7ZGlvX21lbV9hbGlnbiA9IFNFQ1RPUl9TSVpFIC0gMTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBQcmVmZXIgdGhlIEZTIGJsb2NrIHNpemUgZm9yIHRoZSBkZXZpY2UgYmxvY2sgc2l6ZSB3aGVuIGl0IGlzIG5vCiYjNDM7CSAqIGxhcmdlciB0aGFuIDRLOyBvdGhlcndpc2Uga2VlcCB0aGUgZGlyZWN0IEkvTyAvIHBoeXNpY2FsIGJsb2NrIHNpemUKJiM0MzsJICogc2VsZWN0ZWQgYWJvdmUuCiYjNDM7CSAqLwomIzQzOwlpZiAoZmlsZV9pbm9kZSh6b25lLSZndDtmaWxlKS0mZ3Q7aV9zYi0mZ3Q7c19ibG9ja3NpemUgJmx0Oz0gU1pfNEspCiYjNDM7CQl6bG8tJmd0O2Jsb2NrX3NpemUgPSBmaWxlX2lub2RlKHpvbmUtJmd0O2ZpbGUpLSZndDtpX3NiLSZndDtzX2Jsb2Nrc2l6ZTsKIAogCWlmICh6bG8tJmd0O3pvbmVfY2FwYWNpdHkgJmFtcDsgKCh6bG8tJmd0O2Jsb2NrX3NpemUgJmd0OyZndDsgU0VDVE9SX1NISUZUKSAtIDEpKSB7CiAJCXByX2VycigmIzM0O1pvbmUgY2FwYWNpdHkgaXMgbm90IGFsaWduZWQgdG8gYmxvY2sgc2l6ZSAldVxuJiMzNDssCkBAIC0xMjc5LDYgJiM0MzsxMjkwLDEwIEBAIHN0YXRpYyBpbnQgemxvb3BfY3RsX2FkZChzdHJ1Y3Qgemxvb3Bfb3B0aW9ucyAqb3B0cykKIAogCWxpbS5waHlzaWNhbF9ibG9ja19zaXplID0gemxvLSZndDtibG9ja19zaXplOwogCWxpbS5sb2dpY2FsX2Jsb2NrX3NpemUgPSB6bG8tJmd0O2Jsb2NrX3NpemU7CiYjNDM7CS8qIERpcmVjdCBJL08gZm9yd2FyZHMgdGhlIHJlcXVlc3QgcGFnZXMgdG8gdGhlIGJhY2tpbmcgZmlsZXMgYXMtaXMuICovCiYjNDM7CWlmICghb3B0cy0mZ3Q7YnVmZmVyZWRfaW8pCiYjNDM7CQlsaW0uZG1hX2FsaWdubWVudCA9IG1heF90KHVuc2lnbmVkIGludCwgemxvLSZndDtkaW9fbWVtX2FsaWduLAomIzQzOwkJCQkJICBTRUNUT1JfU0laRSAtIDEpOwogCWlmICh6bG8tJmd0O3pvbmVfYXBwZW5kKQogCQlsaW0ubWF4X2h3X3pvbmVfYXBwZW5kX3NlY3RvcnMgPSBsaW0ubWF4X2h3X3NlY3RvcnM7CiAJbGltLm1heF9vcGVuX3pvbmVzID0gemxvLSZndDttYXhfb3Blbl96b25lczsKZGlmZiAtLWdpdCBhL2ZzL2lvbWFwL2RpcmVjdC1pby5jIGIvZnMvaW9tYXAvZGlyZWN0LWlvLmMKaW5kZXggYjQ4NWUzYjE5MWRhZmEuLmZmNDU4YWExMmFlMjk4IDEwMDY0NAotLS0gYS9mcy9pb21hcC9kaXJlY3QtaW8uYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9pb21hcC9kaXJlY3QtaW8uYwpAQCAtMzU4LDYgJiM0MzszNTgsNyBAQCBzdGF0aWMgc3NpemVfdCBpb21hcF9kaW9fYmlvX2l0ZXJfb25lKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLAogCQkJCWlvbWFwX21heF9iaW9fc2l6ZSgmYW1wO2l0ZXItJmd0O2lvbWFwKSwgYWxpZ25tZW50KTsKIAllbHNlCiAJCXJldCA9IGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoYmlvLCBkaW8tJmd0O3N1Ym1pdC5pdGVyLAomIzQzOwkJCQkJICAgICBiZGV2X2RtYV9hbGlnbm1lbnQoYmlvLSZndDtiaV9iZGV2KSwKIAkJCQkJICAgICBhbGlnbm1lbnQgLSAxKTsKIAlpZiAodW5saWtlbHkocmV0KSkKIAkJZ290byBvdXRfcHV0X2JpbzsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmlvLmggYi9pbmNsdWRlL2xpbnV4L2Jpby5oCmluZGV4IDhmMzNmNzE3YjE0ZjViLi5jZTM0ZWE0OWVmMzU4MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9iaW8uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2Jpby5oCkBAIC00NzcsNyAmIzQzOzQ3Nyw3IEBAIGludCBiZGV2X3J3X3ZpcnQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3Qgc2VjdG9yLCB2b2lkICpkYXRhLAogCQlzaXplX3QgbGVuLCBlbnVtIHJlcV9vcCBvcCk7CiAKIGludCBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLAotCQl1bnNpZ25lZCBsZW5fYWxpZ25fbWFzayk7CiYjNDM7CQl1bnNpZ25lZCBtZW1fYWxpZ25fbWFzaywgdW5zaWduZWQgbGVuX2FsaWduX21hc2spOwogCiB2b2lkIGJpb19pb3ZfYnZlY19zZXQoc3RydWN0IGJpbyAqYmlvLCBjb25zdCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpOwogdm9pZCBfX2Jpb19yZWxlYXNlX3BhZ2VzKHN0cnVjdCBiaW8gKmJpbywgYm9vbCBtYXJrX2RpcnR5KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdWlvLmggYi9pbmNsdWRlL2xpbnV4L3Vpby5oCmluZGV4IGE5YmM1YjMwNjdlMzIwLi5mZTJlOTg1ZDc0ZDI0YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91aW8uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3Vpby5oCkBAIC0zODksOSAmIzQzOzM4OSwxNyBAQCBzc2l6ZV90IGlvdl9pdGVyX2V4dHJhY3RfcGFnZXMoc3RydWN0IGlvdl9pdGVyICppLCBzdHJ1Y3QgcGFnZSAqKipwYWdlcywKIAkJCSAgICAgICBzaXplX3QgbWF4c2l6ZSwgdW5zaWduZWQgaW50IG1heHBhZ2VzLAogCQkJICAgICAgIGlvdl9pdGVyX2V4dHJhY3Rpb25fdCBleHRyYWN0aW9uX2ZsYWdzLAogCQkJICAgICAgIHNpemVfdCAqb2Zmc2V0MCk7CiYjNDM7LyoKJiM0MzsgKiBCbG9jay1sYXllciBjb25zdW1lcnMgKGUuZy4gYmlvX2lvdl9pdGVyX2dldF9wYWdlcygpKSByZXF1aXJlIHRoYXQgdGhlCiYjNDM7ICogc2VnbWVudHMgb2YgYW4gSVRFUl9CVkVDIGl0ZXJhdG9yIGFyZSBhbHJlYWR5IGFsaWduZWQgdG8gdGhlIHRhcmdldCBkZXZpY2UmIzM5O3MKJiM0MzsgKiBETUEgYWxpZ25tZW50LCBhbmQgZm9yd2FyZCB0aGVtIGFzLWlzLiAgSW4ta2VybmVsIHVzZXJzIHRoYXQgYnVpbGQgdGhlaXIgb3duCiYjNDM7ICogYnZlY3MgbXVzdCBub3QgY3JlYXRlIHN1Yi1hbGlnbmVkIHNlZ21lbnRzOyBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzKCkgZW5mb3JjZXMKJiM0MzsgKiB0aGUgc2FtZSBmb3IgdGhlIHNlZ21lbnRzIGl0IGV4dHJhY3RzIHZpYSBAbWVtX2FsaWduX21hc2suCiYjNDM7ICovCiBzc2l6ZV90IGlvdl9pdGVyX2V4dHJhY3RfYnZlY3Moc3RydWN0IGlvdl9pdGVyICppdGVyLCBzdHJ1Y3QgYmlvX3ZlYyAqYnYsCiAJCXNpemVfdCBtYXhfc2l6ZSwgdW5zaWduZWQgc2hvcnQgKm5yX3ZlY3MsCi0JCXVuc2lnbmVkIHNob3J0IG1heF92ZWNzLCBpb3ZfaXRlcl9leHRyYWN0aW9uX3QgZXh0cmFjdGlvbl9mbGFncyk7CiYjNDM7CQl1bnNpZ25lZCBzaG9ydCBtYXhfdmVjcywgdW5zaWduZWQgbWVtX2FsaWduX21hc2ssCiYjNDM7CQlpb3ZfaXRlcl9leHRyYWN0aW9uX3QgZXh0cmFjdGlvbl9mbGFncyk7CiAKIC8qKgogICogaW92X2l0ZXJfZXh0cmFjdF93aWxsX3BpbiAtIEluZGljYXRlIGhvdyBwYWdlcyBmcm9tIHRoZSBpdGVyYXRvciB3aWxsIGJlIHJldGFpbmVkCmRpZmYgLS1naXQgYS9saWIvaW92X2l0ZXIuYyBiL2xpYi9pb3ZfaXRlci5jCmluZGV4IDI3MzkxOWIxNjE2MTc2Li5jMzQzMDc1OTUxZGVkMCAxMDA2NDQKLS0tIGEvbGliL2lvdl9pdGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbGliL2lvdl9pdGVyLmMKQEAgLTE4ODYsNiAmIzQzOzE4ODYsOCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGdldF9jb250aWdfZm9saW9fbGVuKHN0cnVjdCBwYWdlICoqcGFnZXMsCiAgKiBAbWF4X3NpemU6CW1heGltdW0gc2l6ZSB0byBleHRyYWN0IGZyb20gQGl0ZXIKICAqIEBucl92ZWNzOgludW1iZXIgb2YgdmVjdG9ycyBpbiBAYnYgKG9uIGluIGFuZCBvdXRwdXQpCiAgKiBAbWF4X3ZlY3M6CW1heGltdW0gdmVjdG9ycyBpbiBAYnYsIGluY2x1ZGluZyB0aG9zZSBmaWxsZWQgYmVmb3JlIGNhbGxpbmcKJiM0MzsgKiBAbWVtX2FsaWduX21hc2s6CXJlamVjdCB3aXRoIC1FSU5WQUwgaWYgdGhlIHNvdXJjZSBhZGRyZXNzIG9yCiYjNDM7ICoJCWxlbmd0aCBpcyBub3QgYWxpZ25lZCB0byB0aGlzIG1hc2sKICAqIEBleHRyYWN0aW9uX2ZsYWdzOiBmbGFncyB0byBxdWFsaWZ5IHJlcXVlc3QKICAqCiAgKiBMaWtlIGlvdl9pdGVyX2V4dHJhY3RfcGFnZXMoKSwgYnV0IHJldHVybnMgcGh5c2ljYWxseSBjb250aWd1b3VzIHJhbmdlcwpAQCAtMTg5NywxNCAmIzQzOzE4OTksMTkgQEAgc3RhdGljIHVuc2lnbmVkIGludCBnZXRfY29udGlnX2ZvbGlvX2xlbihzdHJ1Y3QgcGFnZSAqKnBhZ2VzLAogICovCiBzc2l6ZV90IGlvdl9pdGVyX2V4dHJhY3RfYnZlY3Moc3RydWN0IGlvdl9pdGVyICppdGVyLCBzdHJ1Y3QgYmlvX3ZlYyAqYnYsCiAJCXNpemVfdCBtYXhfc2l6ZSwgdW5zaWduZWQgc2hvcnQgKm5yX3ZlY3MsCi0JCXVuc2lnbmVkIHNob3J0IG1heF92ZWNzLCBpb3ZfaXRlcl9leHRyYWN0aW9uX3QgZXh0cmFjdGlvbl9mbGFncykKJiM0MzsJCXVuc2lnbmVkIHNob3J0IG1heF92ZWNzLCB1bnNpZ25lZCBtZW1fYWxpZ25fbWFzaywKJiM0MzsJCWlvdl9pdGVyX2V4dHJhY3Rpb25fdCBleHRyYWN0aW9uX2ZsYWdzKQogewomIzQzOwl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpaXRlcl9pb3ZfYWRkcihpdGVyKTsKIAl1bnNpZ25lZCBzaG9ydCBlbnRyaWVzX2xlZnQgPSBtYXhfdmVjcyAtICpucl92ZWNzOwogCXVuc2lnbmVkIHNob3J0IG5yX3BhZ2VzLCBpID0gMDsKIAlzaXplX3QgbGVmdCwgb2Zmc2V0LCBsZW47CiAJc3RydWN0IHBhZ2UgKipwYWdlczsKIAlzc2l6ZV90IHNpemU7CiAKJiM0MzsJaWYgKChzdGFydCB8IGl0ZXJfaW92X2xlbihpdGVyKSkgJmFtcDsgbWVtX2FsaWduX21hc2spCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKIAkvKgogCSAqIE1vdmUgcGFnZSBhcnJheSB1cCBpbiB0aGUgYWxsb2NhdGVkIG1lbW9yeSBmb3IgdGhlIGJpbyB2ZWNzIGFzIGZhciBhcwogCSAqIHBvc3NpYmxlIHNvIHRoYXQgd2UgY2FuIHN0YXJ0IGZpbGxpbmcgYmlvdmVjcyBmcm9tIHRoZSBiZWdpbm5pbmcKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTc6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc2OAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDM3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJsb2NrIExheWVyIERJTyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgbWFraW5nIHNvbWUgbW9kaWZpY2F0aW9ucyB0byB0aGUgYmxvY2sgbGF5ZXIsIHNwZWNpZmljYWxseSBhcm91bmQgZGlyZWN0IEkvTyAoRElPKSBhbmQgaG93IGl0IGhhbmRsZXMgYGlvdl9pdGVyYCBsb2dpYy4gSXQgbG9va3MgbGlrZSB0aGUgbWFpbiB0aHJ1c3Qgb2YgdGhpcyBjaGFuZ2UgaXMgdG8gaW50cm9kdWNlIG1lbW9yeSBhbGlnbm1lbnQgY2hlY2tzLiBTcGVjaWZpY2FsbHksIHRoZXkmIzM5O3JlIHRpZ2h0ZW5pbmcgdXAgaG93IHdlIGhhbmRsZSBtZW1vcnkgYWxpZ25tZW50IHJlcXVpcmVtZW50cyBmb3IgRElPIHVzaW5nIGBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzYCBhbmQgYGlvdl9pdGVyX2V4dHJhY3RfYnZlY3NgLiBUaGlzIGlzIGNydWNpYWwgZm9yIGF2b2lkaW5nIHRob3NlIHBlc2t5IGFsaWdubWVudC1yZWxhdGVkIHBlcmZvcm1hbmNlIHByb2JsZW1zIGFuZCBlbnN1cmluZyB0aGUgRE1BIHRyYW5zZmVycyB3b3JrIGFzIGV4cGVjdGVkLgoKSSBzZWUgdGhhdCBgYmlvX2lvdl9pdGVyX2dldF9wYWdlc2AgYW5kIGBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzYCBub3cgYm90aCBhY2NlcHQgYSBgbWVtX2FsaWduX21hc2tgIGFyZ3VtZW50LCB3aGljaCBjb25maXJtcyBteSBpbml0aWFsIGFzc2Vzc21lbnQuIEZ1cnRoZXJtb3JlLCB0aGUgYGxvb3BgIGFuZCBgemxvb3BgIGRyaXZlcnMgaGF2ZSBiZWVuIG1vZGlmaWVkIHRvIGhhbmRsZSBETUEgbGltaXRzIGNvcnJlY3RseSBiYXNlZCBvbiB0aGUgRElPIGFsaWdubWVudCBvZiB0aGUgYmFja2luZyBmaWxlLiBgbG9vcF91cGRhdGVfZGlvX2FsaWdubWVudGAgYW5kIGBsb29wX3NldF9kbWFfbGltaXRgIGFyZSB0aGUgbmV3IGFkZGl0aW9ucyB0byBgbG9vcC5jYCBhbmQgc2ltaWxhciBjaGFuZ2VzIGhhdmUgYmVlbiBtYWRlIGluIHRoZSBgemxvb3BgIGRyaXZlci4KCkkgc2VlIGhvdyB0aGlzIGFmZmVjdHMgdGhlIGFjdHVhbCBjYWxsczogYGlvbWFwX2Rpb19iaW9faXRlcl9vbmVgIGFuZCBgX19ibGtkZXZfZGlyZWN0X0lPYCBub3cgYXJlIHBhc3NpbmcgdGhlIERNQSBhbGlnbm1lbnQgb2YgdGhlIGJsb2NrIGRldmljZSB0byBgYmlvX2lvdl9pdGVyX2dldF9wYWdlc2AuIEdvb2QsIHRoYXQmIzM5O3Mgd2hhdCBJJiMzOTtkIGV4cGVjdC4gQmFzZWQgb24gdGhpcyBxdWljayBza2ltLCB0aGlzIHBhdGNoIHNlZW1zIGZ1bmN0aW9uYWwgYW5kLCBtb3JlIGltcG9ydGFudGx5LCAqcmVhY2hhYmxlKiDigJMgbWVhbmluZyB3ZSYjMzk7cmUgYWN0dWFsbHkgKnVzaW5nKiB0aGVzZSBtb2RpZmllZCBmdW5jdGlvbnMuIFRoYXQmIzM5O3MgYSBrZXkgcG9pbnQuCgpNeSBuZXh0IHN0ZXAgaXMgY2xlYXI6IHdlIG5lZWQgdG8gZnV6eiB0aGlzISBJIG5lZWQgdG8gaGFtbWVyIGF0IHRob3NlIGFsaWdubWVudCBjaGVja3MgdG8gbG9vayBmb3IgZWRnZSBjYXNlcy4gSSYjMzk7bGwgbmVlZCB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMgb24gdGhlc2Uga2V5IHN5bWJvbHM6IGBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzYCwgYGlvdl9pdGVyX2V4dHJhY3RfYnZlY3NgLCBgbG9vcF91cGRhdGVfZGlvX2FsaWdubWVudGAsIGBsb29wX3NldF9kbWFfbGltaXRgLCBgemxvb3BfZ2V0X2Jsb2NrX3NpemVgLCBhbmQgYHpsb29wX2N0bF9hZGRgLiBUaGVzZSBhcmUgdGhlIGNvcmUgZnVuY3Rpb25zIHRoYXQgYXJlIGhhbmRsaW5nIHRoZSBESU8gYWxpZ25tZW50IGNoZWNrcyBhbmQgRE1BIGxpbWl0IGxvZ2ljLgoKRmluYWxseSwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgemxvb3BgIGlzIGFjdHVhbGx5IGEgZHJpdmVyIHdlIG5lZWQgdG8gd29ycnkgYWJvdXQuIEkgd2lsbCBxdWlja2x5IHJ1biBhIHNlYXJjaCB0byBjb25maXJtLCBsaWtlbHkgdXNpbmcgYGNvZGVzZWFyY2gtZGlyLWluZGV4YCBvciBgZ3JlcHBlcmAg4oCTIGhvcGVmdWxseSwgSSBmaW5kIGl0LCBhcyB0aGF0IHdpbGwgYWRkIGFub3RoZXIgY29tcG9uZW50IHRvIHRoZSBwdXp6bGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTc6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7emxvb3AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNjg0IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc9MzU2PWNvbmZpZyBCTEtfREVWX1pPTkVEX0xPT1Bcbi0tXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzY3LVx0ICBlY2hvIFwmIzM0O2FkZCBpZD0wLHpvbmVfc2l6ZV9tYj0yNTYsY2FwYWNpdHlfbWI9MTYzODQsY29udl96b25lcz0xMVwmIzM0OyBcdTAwM2UgXFxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzozNjg6XHRcdC9kZXYvemxvb3AtY29udHJvbFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTM2OS1cbi0tXG5kcml2ZXJzL2Jsb2NrL01ha2VmaWxlPTQwPW9iai0kKENPTkZJR19CTEtfREVWX1VCTEspXHRcdFx0JiM0Mzs9IHVibGtfZHJ2Lm9cbmRyaXZlcnMvYmxvY2svTWFrZWZpbGU6NDE6b2JqLSQoQ09ORklHX0JMS19ERVZfWk9ORURfTE9PUCkgJiM0Mzs9IHpsb29wLm9cbmRyaXZlcnMvYmxvY2svTWFrZWZpbGUtNDItXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jPTI1PWVudW0ge1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy00MS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzo0MjpzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB6bG9vcF9vcHRfdG9rZW5zID0ge1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTQzLVx0eyBaTE9PUF9PUFRfSUQsXHRcdFx0XCYjMzQ7aWQ9JWRcJiMzNDtcdH0sXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTY0LSNkZWZpbmUgWkxPT1BfREVGX01BWF9PUEVOX1pPTkVTXHQwXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NjU6I2RlZmluZSBaTE9PUF9ERUZfQkFTRV9ESVJcdFx0XCYjMzQ7L3Zhci9sb2NhbC96bG9vcFwmIzM0O1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTY2LSNkZWZpbmUgWkxPT1BfREVGX05SX1FVRVVFU1x0XHQxXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc0LVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjc1OnN0cnVjdCB6bG9vcF9vcHRpb25zIHtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03Ni1cdHVuc2lnbmVkIGludFx0XHRtYXNrO1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYz05NT1lbnVtIHtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTAwLVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEwMTplbnVtIHpsb29wX3pvbmVfZmxhZ3Mge1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwMi1cdFpMT09QX1pPTkVfQ09OViA9IDAsXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwOS0gKi9cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMTA6c3RydWN0IHpsb29wX3pvbmUge1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTExMS1cdHN0cnVjdCBsaXN0X2hlYWRcdG9wZW5fem9uZV9lbnRyeTtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTIzLVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEyNDpzdHJ1Y3Qgemxvb3BfZGV2aWNlIHtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMjUtXHR1bnNpZ25lZCBpbnRcdFx0aWQ7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTE1Mi1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxNTM6XHRzdHJ1Y3Qgemxvb3Bfem9uZVx0em9uZXNbXSBfX2NvdW50ZWRfYnkobnJfem9uZXMpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTE1NC19O1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTE1NS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxNTY6c3RydWN0IHpsb29wX2NtZCB7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTU3LVx0c3RydWN0IHdvcmtfc3RydWN0XHR3b3JrO1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xNjUtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTY2OnN0YXRpYyBERUZJTkVfSURSKHpsb29wX2luZGV4X2lkcik7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTY3OnN0YXRpYyBERUZJTkVfTVVURVgoemxvb3BfY3RsX211dGV4KTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xNjgtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM9MTY5PXN0YXRpYyB1bnNpZ25lZCBpbnQgcnFfem9uZV9ubyhzdHJ1Y3QgcmVxdWVzdCAqcnEpXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTcwLXtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxNzE6XHRzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8gPSBycS1cdTAwM2VxLVx1MDAzZXF1ZXVlZGF0YTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xNzItXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTE4MS0gKi9cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxODI6c3RhdGljIGlubGluZSB2b2lkIHpsb29wX2xydV9yb3RhdGVfb3Blbl96b25lKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxODM6XHRcdFx0XHRcdCAgICAgIHN0cnVjdCB6bG9vcF96b25lICp6b25lKVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTE4NC17XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTE5Mi1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxOTM6c3RhdGljIGlubGluZSB2b2lkIHpsb29wX2xydV9yZW1vdmVfb3Blbl96b25lKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxOTQ6XHRcdFx0XHRcdCAgICAgIHN0cnVjdCB6bG9vcF96b25lICp6b25lKVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTE5NS17XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTIwNC1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoyMDU6c3RhdGljIGlubGluZSBib29sIHpsb29wX2Nhbl9vcGVuX3pvbmUoc3RydWN0IHpsb29wX2RldmljZSAqemxvKVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTIwNi17XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTIxNC0gKi9cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoyMTU6c3RhdGljIGJvb2wgemxvb3BfY2xvc2VfaW1wX29wZW5fem9uZShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8pXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjE2LXtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoyMTc6XHRzdHJ1Y3Qgemxvb3Bfem9uZSAqem9uZTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0yMTgtXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTIyMC1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoyMjE6XHRpZiAoemxvb3BfY2FuX29wZW5fem9uZSh6bG8pKVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTIyMi1cdFx0cmV0dXJuIHRydWU7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTIzNS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoyMzY6c3RhdGljIGJvb2wgemxvb3Bfb3Blbl9jbG9zZWRfb3JfZW1wdHlfem9uZShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8sXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MjM3Olx0XHRcdFx0XHQgICAgc3RydWN0IHpsb29wX3pvbmUgKnpvbmUsXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjM4LVx0XHRcdFx0XHQgICAgYm9vbCBleHBsaWNpdClcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjQ2LVx0XHQgKi9cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoyNDc6XHRcdGlmICghemxvb3BfY2FuX29wZW5fem9uZSh6bG8pKVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTI0OC1cdFx0XHRnb3RvIGZhaWw7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTI1NC1cdFx0ICovXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MjU1Olx0XHRpZiAoIXpsb29wX2Nsb3NlX2ltcF9vcGVuX3pvbmUoemxvKSlcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0yNTYtXHRcdFx0Z290byBmYWlsO1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0yNzMtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6Mjc0OnN0YXRpYyBib29sIHpsb29wX2RvX29wZW5fem9uZShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8sXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6Mjc1Olx0XHRcdCAgICAgICBzdHJ1Y3Qgemxvb3Bfem9uZSAqem9uZSwgYm9vbCBleHBsaWNpdClcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0yNzYte1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0yODEtXHRcdFx0em9uZS1cdTAwM2Vjb25kID0gQkxLX1pPTkVfQ09ORF9FWFBfT1BFTjtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoyODI6XHRcdHpsb29wX2xydV9yb3RhdGVfb3Blbl96b25lKHpsbywgem9uZSk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjgzLVx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjg1LVx0Y2FzZSBCTEtfWk9ORV9DT05EX0NMT1NFRDpcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoyODY6XHRcdHJldHVybiB6bG9vcF9vcGVuX2Nsb3NlZF9vcl9lbXB0eV96b25lKHpsbywgem9uZSwgZXhwbGljaXQpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTI4Ny1cdGRlZmF1bHQ6XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTI5MS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoyOTI6c3RhdGljIHZvaWQgemxvb3BfbWFya19mdWxsKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbywgc3RydWN0IHpsb29wX3pvbmUgKnpvbmUpXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjkzLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjk1LVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjI5NjpcdHpsb29wX2xydV9yZW1vdmVfb3Blbl96b25lKHpsbywgem9uZSk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjk3LVx0em9uZS1cdTAwM2Vjb25kID0gQkxLX1pPTkVfQ09ORF9GVUxMO1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zMDAtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MzAxOnN0YXRpYyB2b2lkIHpsb29wX21hcmtfZW1wdHkoc3RydWN0IHpsb29wX2RldmljZSAqemxvLCBzdHJ1Y3Qgemxvb3Bfem9uZSAqem9uZSlcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zMDIte1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zMDQtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MzA1Olx0emxvb3BfbHJ1X3JlbW92ZV9vcGVuX3pvbmUoemxvLCB6b25lKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zMDYtXHR6b25lLVx1MDAzZWNvbmQgPSBCTEtfWk9ORV9DT05EX0VNUFRZO1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zMDktXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MzEwOnN0YXRpYyBpbnQgemxvb3BfdXBkYXRlX3NlcV96b25lKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbywgdW5zaWduZWQgaW50IHpvbmVfbm8pXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMzExLXtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzozMTI6XHRzdHJ1Y3Qgemxvb3Bfem9uZSAqem9uZSA9IFx1MDAyNnpsby1cdTAwM2V6b25lc1t6b25lX25vXTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zMTMtXHRzdHJ1Y3Qga3N0YXQgc3RhdDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMzQxLVx0aWYgKCFmaWxlX3NlY3RvcnMpIHtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzozNDI6XHRcdHpsb29wX21hcmtfZW1wdHkoemxvLCB6b25lKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zNDMtXHR9IGVsc2UgaWYgKGZpbGVfc2VjdG9ycyA9PSB6bG8tXHUwMDNlem9uZV9jYXBhY2l0eSkge1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjM0NDpcdFx0emxvb3BfbWFya19mdWxsKHpsbywgem9uZSk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMzQ1LVx0fSBlbHNlIHtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMzU1LVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjM1NjpzdGF0aWMgaW50IHpsb29wX29wZW5fem9uZShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8sIHVuc2lnbmVkIGludCB6b25lX25vKVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTM1Ny17XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MzU4Olx0c3RydWN0IHpsb29wX3pvbmUgKnpvbmUgPSBcdTAwMjZ6bG8tXHUwMDNlem9uZXNbem9uZV9ub107XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMzU5LVx0aW50IHJldCA9IDA7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTM2Ni1cdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoWkxPT1BfWk9ORV9TRVFfRVJST1IsIFx1MDAyNnpvbmUtXHUwMDNlZmxhZ3MpKSB7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MzY3Olx0XHRyZXQgPSB6bG9vcF91cGRhdGVfc2VxX3pvbmUoemxvLCB6b25lX25vKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zNjgtXHRcdGlmIChyZXQpXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTM3MS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzozNzI6XHRpZiAoIXpsb29wX2RvX29wZW5fem9uZSh6bG8sIHpvbmUsIHRydWUpKVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTM3My1cdFx0cmV0ID0gLUVJTztcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMzgwLVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjM4MTpzdGF0aWMgaW50IHpsb29wX2Nsb3NlX3pvbmUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLCB1bnNpZ25lZCBpbnQgem9uZV9ubylcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zODIte1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjM4MzpcdHN0cnVjdCB6bG9vcF96b25lICp6b25lID0gXHUwMDI2emxvLVx1MDAzZXpvbmVzW3pvbmVfbm9dO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTM4NC1cdGludCByZXQgPSAwO1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zOTEtXHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KFpMT09QX1pPTkVfU0VRX0VSUk9SLCBcdTAwMjZ6b25lLVx1MDAzZWZsYWdzKSkge1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjM5MjpcdFx0cmV0ID0gemxvb3BfdXBkYXRlX3NlcV96b25lKHpsbywgem9uZV9ubyk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMzkzLVx0XHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy00MDItXHRcdHNwaW5fbG9jayhcdTAwMjZ6b25lLVx1MDAzZXdwX2xvY2spO1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjQwMzpcdFx0emxvb3BfbHJ1X3JlbW92ZV9vcGVuX3pvbmUoemxvLCB6b25lKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy00MDQtXHRcdGlmICh6b25lLVx1MDAzZXdwID09IHpvbmUtXHUwMDNlc3RhcnQpXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTQyMi1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzo0MjM6c3RhdGljIGludCB6bG9vcF9yZXNldF96b25lKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbywgdW5zaWduZWQgaW50IHpvbmVfbm8pXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNDI0LXtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo0MjU6XHRzdHJ1Y3Qgemxvb3Bfem9uZSAqem9uZSA9IFx1MDAyNnpsby1cdTAwM2V6b25lc1t6b25lX25vXTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy00MjYtXHRpbnQgcmV0ID0gMDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNDQzLVx0c3Bpbl9sb2NrKFx1MDAyNnpvbmUtXHUwMDNld3BfbG9jayk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NDQ0Olx0emxvb3BfbWFya19lbXB0eSh6bG8sIHpvbmUpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTQ0NS1cdGNsZWFyX2JpdChaTE9PUF9aT05FX1NFUV9FUlJPUiwgXHUwMDI2em9uZS1cdTAwM2VmbGFncyk7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTQ1My1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzo0NTQ6c3RhdGljIGludCB6bG9vcF9yZXNldF9hbGxfem9uZXMoc3RydWN0IHpsb29wX2RldmljZSAqemxvKVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTQ1NS17XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTQ1OS1cdGZvciAoaSA9IHpsby1cdTAwM2Vucl9jb252X3pvbmVzOyBpIFx1MDAzYyB6bG8tXHUwMDNlbnJfem9uZXM7IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NDYwOlx0XHRyZXQgPSB6bG9vcF9yZXNldF96b25lKHpsbywgaSk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNDYxLVx0XHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy00NjctXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NDY4OnN0YXRpYyBpbnQgemxvb3BfZmluaXNoX3pvbmUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLCB1bnNpZ25lZCBpbnQgem9uZV9ubylcbmRyaXZlcnMvYmxvY2svemxvb3AuYy00Njkte1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjQ3MDpcdHN0cnVjdCB6bG9vcF96b25lICp6b25lID0gXHUwMDI2emxvLVx1MDAzZXpvbmVzW3pvbmVfbm9dO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTQ3MS1cdGludCByZXQgPSAwO1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy00ODgtXHRzcGluX2xvY2soXHUwMDI2em9uZS1cdTAwM2V3cF9sb2NrKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo0ODk6XHR6bG9vcF9tYXJrX2Z1bGwoemxvLCB6b25lKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy00OTAtXHRjbGVhcl9iaXQoWkxPT1BfWk9ORV9TRVFfRVJST1IsIFx1MDAyNnpvbmUtXHUwMDNlZmxhZ3MpO1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy00OTgtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NDk5OnN0YXRpYyB2b2lkIHpsb29wX3B1dF9jbWQoc3RydWN0IHpsb29wX2NtZCAqY21kKVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTUwMC17XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTUxMC1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzo1MTE6c3RhdGljIHZvaWQgemxvb3BfcndfY29tcGxldGUoc3RydWN0IGtpb2NiICppb2NiLCBsb25nIHJldClcbmRyaXZlcnMvYmxvY2svemxvb3AuYy01MTIte1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjUxMzpcdHN0cnVjdCB6bG9vcF9jbWQgKmNtZCA9IGNvbnRhaW5lcl9vZihpb2NiLCBzdHJ1Y3Qgemxvb3BfY21kLCBpb2NiKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy01MTQtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTE1LVx0Y21kLVx1MDAzZXJldCA9IHJldDtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo1MTY6XHR6bG9vcF9wdXRfY21kKGNtZCk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTE3LX1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy01MTgtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NTE5OnN0YXRpYyBpbnQgemxvb3BfZG9fcncoc3RydWN0IHpsb29wX2NtZCAqY21kKVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTUyMC17XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTUyMy1cdHVuc2lnbmVkIGludCBucl9idmVjID0gYmxrX3JxX25yX2J2ZWMocnEpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjUyNDpcdHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyA9IHJxLVx1MDAzZXEtXHUwMDNlcXVldWVkYXRhO1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjUyNTpcdHN0cnVjdCB6bG9vcF96b25lICp6b25lID0gXHUwMDI2emxvLVx1MDAzZXpvbmVzW3JxX3pvbmVfbm8ocnEpXTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy01MjYtXHRzdHJ1Y3QgcmVxX2l0ZXJhdG9yIHJxX2l0ZXI7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTU2MS1cdGNtZC1cdTAwM2Vpb2NiLmtpX2ZpbHAgPSB6b25lLVx1MDAzZWZpbGU7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NTYyOlx0Y21kLVx1MDAzZWlvY2Iua2lfY29tcGxldGUgPSB6bG9vcF9yd19jb21wbGV0ZTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy01NjMtXHRpZiAoIXpsby1cdTAwM2VidWZmZXJlZF9pbylcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTcxLVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjU3MjpzdGF0aWMgaW50IHpsb29wX3NlcV93cml0ZV9wcmVwKHN0cnVjdCB6bG9vcF9jbWQgKmNtZClcbmRyaXZlcnMvYmxvY2svemxvb3AuYy01NzMte1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTU3NC1cdHN0cnVjdCByZXF1ZXN0ICpycSA9IGJsa19tcV9ycV9mcm9tX3BkdShjbWQpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjU3NTpcdHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyA9IHJxLVx1MDAzZXEtXHUwMDNlcXVldWVkYXRhO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTU3Ni1cdHVuc2lnbmVkIGludCB6b25lX25vID0gcnFfem9uZV9ubyhycSk7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTU3OC1cdGJvb2wgaXNfYXBwZW5kID0gcmVxX29wKHJxKSA9PSBSRVFfT1BfWk9ORV9BUFBFTkQ7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NTc5Olx0c3RydWN0IHpsb29wX3pvbmUgKnpvbmUgPSBcdTAwMjZ6bG8tXHUwMDNlem9uZXNbem9uZV9ub107XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTgwLVx0c2VjdG9yX3Qgem9uZV9lbmQgPSB6b25lLVx1MDAzZXN0YXJ0ICYjNDM7IHpsby1cdTAwM2V6b25lX2NhcGFjaXR5O1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy01OTItXHRcdCAqIElmIG9yZGVyZWQgem9uZSBhcHBlbmQgaXMgaW4gdXNlLCB3ZSBhbHJlYWR5IGNoZWNrZWQgYW5kIHNldFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjU5MzpcdFx0ICogdGhlIHRhcmdldCBzZWN0b3IgaW4gemxvb3BfcXVldWVfcnEoKS5cbmRyaXZlcnMvYmxvY2svemxvb3AuYy01OTQtXHRcdCAqL1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy02MTItXHQvKiBJbXBsaWNpdGx5IG9wZW4gdGhlIHRhcmdldCB6b25lLiAqL1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjYxMzpcdGlmICghemxvb3BfZG9fb3Blbl96b25lKHpsbywgem9uZSwgZmFsc2UpKSB7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNjE0LVx0XHRyZXQgPSAtRUlPO1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy02MjUtXHRcdGlmICh6b25lLVx1MDAzZXdwID09IHpvbmVfZW5kKVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjYyNjpcdFx0XHR6bG9vcF9tYXJrX2Z1bGwoemxvLCB6b25lKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy02MjctXHR9XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTYzMi1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzo2MzM6c3RhdGljIHZvaWQgemxvb3Bfcncoc3RydWN0IHpsb29wX2NtZCAqY21kKVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTYzNC17XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNjM1LVx0c3RydWN0IHJlcXVlc3QgKnJxID0gYmxrX21xX3JxX2Zyb21fcGR1KGNtZCk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NjM2Olx0c3RydWN0IHpsb29wX2RldmljZSAqemxvID0gcnEtXHUwMDNlcS1cdTAwM2VxdWV1ZWRhdGE7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNjM3LVx0dW5zaWduZWQgaW50IHpvbmVfbm8gPSBycV96b25lX25vKHJxKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNjQwLVx0Ym9vbCBpc193cml0ZSA9IHJlcV9vcChycSkgPT0gUkVRX09QX1dSSVRFIHx8IGlzX2FwcGVuZDtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo2NDE6XHRzdHJ1Y3Qgemxvb3Bfem9uZSAqem9uZTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy02NDItXHRpbnQgcmV0ID0gLUVJTztcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNjY3LVx0XHRtdXRleF9sb2NrKFx1MDAyNnpvbmUtXHUwMDNlbG9jayk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NjY4Olx0XHRyZXQgPSB6bG9vcF91cGRhdGVfc2VxX3pvbmUoemxvLCB6b25lX25vKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy02NjktXHRcdG11dGV4X3VubG9jayhcdTAwMjZ6b25lLVx1MDAzZWxvY2spO1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy02NzUtXHRcdG11dGV4X2xvY2soXHUwMDI2em9uZS1cdTAwM2Vsb2NrKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo2NzY6XHRcdHJldCA9IHpsb29wX3NlcV93cml0ZV9wcmVwKGNtZCk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNjc3LVx0XHRpZiAoIXJldClcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo2Nzg6XHRcdFx0cmV0ID0gemxvb3BfZG9fcncoY21kKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy02NzktXHRcdG11dGV4X3VubG9jayhcdTAwMjZ6b25lLVx1MDAzZWxvY2spO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTY4MC1cdH0gZWxzZSB7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NjgxOlx0XHRyZXQgPSB6bG9vcF9kb19ydyhjbWQpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTY4Mi1cdH1cbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNjg0LVx0aWYgKHJldCAhPSAtRUlPQ0JRVUVVRUQpXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6Njg1Olx0XHR6bG9vcF9yd19jb21wbGV0ZShcdTAwMjZjbWQtXHUwMDNlaW9jYiwgcmV0KTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo2ODY6XHR6bG9vcF9wdXRfY21kKGNtZCk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNjg3LX1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy02ODgtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6Njg5OnN0YXRpYyBpbmxpbmUgYm9vbCB6bG9vcF96b25lX2lzX2FjdGl2ZShzdHJ1Y3Qgemxvb3Bfem9uZSAqem9uZSlcbmRyaXZlcnMvYmxvY2svemxvb3AuYy02OTAte1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy03MDAtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NzAxOnN0YXRpYyBpbnQgemxvb3BfcmVjb3JkX3NhZmVfd3BzKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbylcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03MDIte1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy03MDYtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB6bG8tXHUwMDNlbnJfem9uZXM7IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NzA3Olx0XHRzdHJ1Y3Qgemxvb3Bfem9uZSAqem9uZSA9IFx1MDAyNnpsby1cdTAwM2V6b25lc1tpXTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03MDgtXHRcdHN0cnVjdCBmaWxlICpmaWxlID0gem9uZS1cdTAwM2VmaWxlO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTcwOS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzo3MTA6XHRcdGlmICghemxvb3Bfem9uZV9pc19hY3RpdmUoem9uZSkpXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzExLVx0XHRcdGNvbnRpbnVlO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTcxMi1cdFx0cmV0ID0gdmZzX3NldHhhdHRyKGZpbGVfbW50X2lkbWFwKGZpbGUpLCBmaWxlX2RlbnRyeShmaWxlKSxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo3MTM6XHRcdFx0XHRcJiMzNDt1c2VyLnpsb29wLndwXCYjMzQ7LCBcdTAwMjZ6b25lLVx1MDAzZXdwLCBzaXplb2Yoem9uZS1cdTAwM2V3cCksIDApO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTcxNC1cdFx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy03MjYtICovXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NzI3OnN0YXRpYyBpbnQgemxvb3BfZmx1c2goc3RydWN0IHpsb29wX2RldmljZSAqemxvKVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTcyOC17XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTczMi1cdGlmICh6bG8tXHUwMDNlZGlzY2FyZF93cml0ZV9jYWNoZSkge1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjczMzpcdFx0cmV0ID0gemxvb3BfcmVjb3JkX3NhZmVfd3BzKHpsbyk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzM0LVx0XHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy03NDQtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NzQ1OnN0YXRpYyB2b2lkIHpsb29wX2hhbmRsZV9jbWQoc3RydWN0IHpsb29wX2NtZCAqY21kKVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc0Ni17XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzQ3LVx0c3RydWN0IHJlcXVlc3QgKnJxID0gYmxrX21xX3JxX2Zyb21fcGR1KGNtZCk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NzQ4Olx0c3RydWN0IHpsb29wX2RldmljZSAqemxvID0gcnEtXHUwMDNlcS1cdTAwM2VxdWV1ZWRhdGE7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzQ5LVxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy03NTgtXHRcdC8qXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NzU5Olx0XHQgKiB6bG9vcF9ydygpIGFsd2F5cyBleGVjdXRlcyBhc3luY2hyb25vdXNseSBvciBjb21wbGV0ZXNcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03NjAtXHRcdCAqIGRpcmVjdGx5LlxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc2MS1cdFx0ICovXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NzYyOlx0XHR6bG9vcF9ydyhjbWQpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTc2My1cdFx0cmV0dXJuO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTc2NC1cdGNhc2UgUkVRX09QX0ZMVVNIOlxuZHJpdmVycy9ibG9jay96bG9vcC5jOjc2NTpcdFx0Y21kLVx1MDAzZXJldCA9IHpsb29wX2ZsdXNoKHpsbyk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzY2LVx0XHRicmVhaztcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03NjctXHRjYXNlIFJFUV9PUF9aT05FX1JFU0VUOlxuZHJpdmVycy9ibG9jay96bG9vcC5jOjc2ODpcdFx0Y21kLVx1MDAzZXJldCA9IHpsb29wX3Jlc2V0X3pvbmUoemxvLCBycV96b25lX25vKHJxKSk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzY5LVx0XHRicmVhaztcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03NzAtXHRjYXNlIFJFUV9PUF9aT05FX1JFU0VUX0FMTDpcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo3NzE6XHRcdGNtZC1cdTAwM2VyZXQgPSB6bG9vcF9yZXNldF9hbGxfem9uZXMoemxvKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03NzItXHRcdGJyZWFrO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTc3My1cdGNhc2UgUkVRX09QX1pPTkVfRklOSVNIOlxuZHJpdmVycy9ibG9jay96bG9vcC5jOjc3NDpcdFx0Y21kLVx1MDAzZXJldCA9IHpsb29wX2ZpbmlzaF96b25lKHpsbywgcnFfem9uZV9ubyhycSkpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTc3NS1cdFx0YnJlYWs7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzc2LVx0Y2FzZSBSRVFfT1BfWk9ORV9PUEVOOlxuZHJpdmVycy9ibG9jay96bG9vcC5jOjc3NzpcdFx0Y21kLVx1MDAzZXJldCA9IHpsb29wX29wZW5fem9uZSh6bG8sIHJxX3pvbmVfbm8ocnEpKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03NzgtXHRcdGJyZWFrO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTc3OS1cdGNhc2UgUkVRX09QX1pPTkVfQ0xPU0U6XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NzgwOlx0XHRjbWQtXHUwMDNlcmV0ID0gemxvb3BfY2xvc2Vfem9uZSh6bG8sIHJxX3pvbmVfbm8ocnEpKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03ODEtXHRcdGJyZWFrO1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy03OTEtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NzkyOnN0YXRpYyB2b2lkIHpsb29wX2NtZF93b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc5My17XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6Nzk0Olx0c3RydWN0IHpsb29wX2NtZCAqY21kID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB6bG9vcF9jbWQsIHdvcmspO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTc5NS1cdGludCBvcmlnX2ZsYWdzID0gY3VycmVudC1cdTAwM2VmbGFncztcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzk3LVx0Y3VycmVudC1cdTAwM2VmbGFncyB8PSBQRl9MT0NBTF9USFJPVFRMRSB8IFBGX01FTUFMTE9DX05PSU87XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6Nzk4Olx0emxvb3BfaGFuZGxlX2NtZChjbWQpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTc5OS1cdGN1cnJlbnQtXHUwMDNlZmxhZ3MgPSBvcmlnX2ZsYWdzO1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy04MDEtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6ODAyOnN0YXRpYyB2b2lkIHpsb29wX2NvbXBsZXRlX3JxKHN0cnVjdCByZXF1ZXN0ICpycSlcbmRyaXZlcnMvYmxvY2svemxvb3AuYy04MDMte1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjgwNDpcdHN0cnVjdCB6bG9vcF9jbWQgKmNtZCA9IGJsa19tcV9ycV90b19wZHUocnEpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjgwNTpcdHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyA9IHJxLVx1MDAzZXEtXHUwMDNlcXVldWVkYXRhO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTgwNi1cdHVuc2lnbmVkIGludCB6b25lX25vID0gY21kLVx1MDAzZXNlY3RvciBcdTAwM2VcdTAwM2UgemxvLVx1MDAzZXpvbmVfc2hpZnQ7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6ODA3Olx0c3RydWN0IHpsb29wX3pvbmUgKnpvbmUgPSBcdTAwMjZ6bG8tXHUwMDNlem9uZXNbem9uZV9ub107XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtODA4LVx0YmxrX3N0YXR1c190IHN0cyA9IEJMS19TVFNfT0s7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTg1OS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzo4NjA6c3RhdGljIGJvb2wgemxvb3Bfc2V0X3pvbmVfYXBwZW5kX3NlY3RvcihzdHJ1Y3QgcmVxdWVzdCAqcnEpXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtODYxLXtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo4NjI6XHRzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8gPSBycS1cdTAwM2VxLVx1MDAzZXF1ZXVlZGF0YTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy04NjMtXHR1bnNpZ25lZCBpbnQgem9uZV9ubyA9IHJxX3pvbmVfbm8ocnEpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjg2NDpcdHN0cnVjdCB6bG9vcF96b25lICp6b25lID0gXHUwMDI2emxvLVx1MDAzZXpvbmVzW3pvbmVfbm9dO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTg2NS1cdHNlY3Rvcl90IHpvbmVfZW5kID0gem9uZS1cdTAwM2VzdGFydCAmIzQzOyB6bG8tXHUwMDNlem9uZV9jYXBhY2l0eTtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtODc4LVx0aWYgKHpvbmUtXHUwMDNld3AgXHUwMDNlPSB6b25lX2VuZClcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo4Nzk6XHRcdHpsb29wX21hcmtfZnVsbCh6bG8sIHpvbmUpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTg4MC1cbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtODg1LVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjg4NjpzdGF0aWMgYmxrX3N0YXR1c190IHpsb29wX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTg4Ny1cdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBibGtfbXFfcXVldWVfZGF0YSAqYmQpXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTg4OS1cdHN0cnVjdCByZXF1ZXN0ICpycSA9IGJkLVx1MDAzZXJxO1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjg5MDpcdHN0cnVjdCB6bG9vcF9jbWQgKmNtZCA9IGJsa19tcV9ycV90b19wZHUocnEpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjg5MTpcdHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyA9IHJxLVx1MDAzZXEtXHUwMDNlcXVldWVkYXRhO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTg5Mi1cbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTAzLVx0aWYgKHpsby1cdTAwM2VvcmRlcmVkX3pvbmVfYXBwZW5kIFx1MDAyNlx1MDAyNiByZXFfb3AocnEpID09IFJFUV9PUF9aT05FX0FQUEVORCkge1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjkwNDpcdFx0aWYgKCF6bG9vcF9zZXRfem9uZV9hcHBlbmRfc2VjdG9yKHJxKSlcbmRyaXZlcnMvYmxvY2svemxvb3AuYy05MDUtXHRcdFx0cmV0dXJuIEJMS19TVFNfSU9FUlI7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTkwOS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzo5MTA6XHRJTklUX1dPUksoXHUwMDI2Y21kLVx1MDAzZXdvcmssIHpsb29wX2NtZF93b3JrZm4pO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTkxMS1cdHF1ZXVlX3dvcmsoemxvLVx1MDAzZXdvcmtxdWV1ZSwgXHUwMDI2Y21kLVx1MDAzZXdvcmspO1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy05MTUtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6OTE2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxrX21xX29wcyB6bG9vcF9tcV9vcHMgPSB7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6OTE3Olx0LnF1ZXVlX3JxICAgICAgID0gemxvb3BfcXVldWVfcnEsXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6OTE4Olx0LmNvbXBsZXRlXHQ9IHpsb29wX2NvbXBsZXRlX3JxLFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTkxOS19O1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTkyMC1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzo5MjE6c3RhdGljIGludCB6bG9vcF9vcGVuKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBibGtfbW9kZV90IG1vZGUpXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTIyLXtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo5MjM6XHRzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8gPSBkaXNrLVx1MDAzZXByaXZhdGVfZGF0YTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy05MjQtXHRpbnQgcmV0O1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTkyNS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzo5MjY6XHRyZXQgPSBtdXRleF9sb2NrX2tpbGxhYmxlKFx1MDAyNnpsb29wX2N0bF9tdXRleCk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTI3LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTMxLVx0XHRyZXQgPSAtRU5YSU87XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6OTMyOlx0bXV0ZXhfdW5sb2NrKFx1MDAyNnpsb29wX2N0bF9tdXRleCk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTMzLVx0cmV0dXJuIHJldDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTM1LVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjkzNjpzdGF0aWMgaW50IHpsb29wX3JlcG9ydF96b25lcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgc2VjdG9yX3Qgc2VjdG9yLFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTkzNy1cdFx0dW5zaWduZWQgaW50IG5yX3pvbmVzLCBzdHJ1Y3QgYmxrX3JlcG9ydF96b25lc19hcmdzICphcmdzKVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTkzOC17XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6OTM5Olx0c3RydWN0IHpsb29wX2RldmljZSAqemxvID0gZGlzay1cdTAwM2Vwcml2YXRlX2RhdGE7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTQwLVx0c3RydWN0IGJsa196b25lIGJsa3ogPSB7fTtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTUwLVx0XHR1bnNpZ25lZCBpbnQgem9uZV9ubyA9IGZpcnN0ICYjNDM7IGk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6OTUxOlx0XHRzdHJ1Y3Qgemxvb3Bfem9uZSAqem9uZSA9IFx1MDAyNnpsby1cdTAwM2V6b25lc1t6b25lX25vXTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy05NTItXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTk1NS1cdFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChaTE9PUF9aT05FX1NFUV9FUlJPUiwgXHUwMDI2em9uZS1cdTAwM2VmbGFncykpIHtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo5NTY6XHRcdFx0cmV0ID0gemxvb3BfdXBkYXRlX3NlcV96b25lKHpsbywgem9uZV9ubyk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTU3LVx0XHRcdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTg2LVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjk4NzpzdGF0aWMgdm9pZCB6bG9vcF9mcmVlX2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTg4LXtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo5ODk6XHRzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8gPSBkaXNrLVx1MDAzZXByaXZhdGVfZGF0YTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy05OTAtXHR1bnNpZ25lZCBpbnQgaTtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTk0LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgemxvLVx1MDAzZW5yX3pvbmVzOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjk5NTpcdFx0c3RydWN0IHpsb29wX3pvbmUgKnpvbmUgPSBcdTAwMjZ6bG8tXHUwMDNlem9uZXNbaV07XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTk2LVxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDA3LVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEwMDg6c3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyB6bG9vcF9mb3BzID0ge1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwMDktXHQub3duZXJcdFx0XHQ9IFRISVNfTU9EVUxFLFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEwMTA6XHQub3Blblx0XHRcdD0gemxvb3Bfb3BlbixcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMDExOlx0LnJlcG9ydF96b25lc1x0XHQ9IHpsb29wX3JlcG9ydF96b25lcyxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMDEyOlx0LmZyZWVfZGlza1x0XHQ9IHpsb29wX2ZyZWVfZGlzayxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDEzLX07XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jPTEwMTU9X19wcmludGYoMywgNClcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMDE2OnN0YXRpYyBzdHJ1Y3QgZmlsZSAqemxvb3BfZmlscF9vcGVuX2ZtdChpbnQgb2ZsYWdzLCB1bW9kZV90IG1vZGUsXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTAxNy1cdFx0Y29uc3QgY2hhciAqZm10LCAuLi4pXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwMzMtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTAzNDpzdGF0aWMgaW50IHpsb29wX2dldF9ibG9ja19zaXplKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMDM1Olx0XHRcdFx0c3RydWN0IHpsb29wX3pvbmUgKnpvbmUpXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTAzNi17XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwNzQtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTA3NTpzdGF0aWMgaW50IHpsb29wX2luaXRfem9uZShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8sIHN0cnVjdCB6bG9vcF9vcHRpb25zICpvcHRzLFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwNzYtXHRcdFx0ICAgdW5zaWduZWQgaW50IHpvbmVfbm8sIGJvb2wgcmVzdG9yZSlcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDc3LXtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMDc4Olx0c3RydWN0IHpsb29wX3pvbmUgKnpvbmUgPSBcdTAwMjZ6bG8tXHUwMDNlem9uZXNbem9uZV9ub107XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTA3OS1cdGludCBvZmxhZ3MgPSBPX1JEV1I7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExMDAtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTEwMTpcdFx0em9uZS1cdTAwM2VmaWxlID0gemxvb3BfZmlscF9vcGVuX2ZtdChvZmxhZ3MsIDA2MDAsIFwmIzM0OyVzLyV1L2Nudi0lMDZ1XCYjMzQ7LFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExMDItXHRcdFx0XHRcdHpsby1cdTAwM2ViYXNlX2RpciwgemxvLVx1MDAzZWlkLCB6b25lX25vKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTExMC1cdFx0aWYgKCF6bG8tXHUwMDNlYmxvY2tfc2l6ZSkge1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjExMTE6XHRcdFx0cmV0ID0gemxvb3BfZ2V0X2Jsb2NrX3NpemUoemxvLCB6b25lKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTEyLVx0XHRcdGlmIChyZXQpXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExNDAtXHQvKiBTZXF1ZW50aWFsIHpvbmUgZmlsZS4gKi9cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMTQxOlx0em9uZS1cdTAwM2VmaWxlID0gemxvb3BfZmlscF9vcGVuX2ZtdChvZmxhZ3MsIDA2MDAsIFwmIzM0OyVzLyV1L3NlcS0lMDZ1XCYjMzQ7LFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExNDItXHRcdFx0XHRcdCB6bG8tXHUwMDNlYmFzZV9kaXIsIHpsby1cdTAwM2VpZCwgem9uZV9ubyk7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExNTAtXHRpZiAoIXpsby1cdTAwM2VibG9ja19zaXplKSB7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTE1MTpcdFx0cmV0ID0gemxvb3BfZ2V0X2Jsb2NrX3NpemUoemxvLCB6b25lKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTUyLVx0XHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTU1LVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjExNTY6XHR6bG9vcF9nZXRfYmxvY2tfc2l6ZSh6bG8sIHpvbmUpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTExNTctXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE1OC1cdG11dGV4X2xvY2soXHUwMDI2em9uZS1cdTAwM2Vsb2NrKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMTU5Olx0cmV0ID0gemxvb3BfdXBkYXRlX3NlcV96b25lKHpsbywgem9uZV9ubyk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE2MC1cdG11dGV4X3VubG9jayhcdTAwMjZ6b25lLVx1MDAzZWxvY2spO1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTY0LVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjExNjU6c3RhdGljIGJvb2wgemxvb3BfZGV2X2V4aXN0cyhzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8pXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE2Ni17XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExNjktXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTE3MDpcdGNudiA9IHpsb29wX2ZpbHBfb3Blbl9mbXQoT19SRE9OTFksIDA2MDAsIFwmIzM0OyVzLyV1L2Nudi0lMDZ1XCYjMzQ7LFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExNzEtXHRcdFx0XHQgIHpsby1cdTAwM2ViYXNlX2RpciwgemxvLVx1MDAzZWlkLCAwKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMTcyOlx0c2VxID0gemxvb3BfZmlscF9vcGVuX2ZtdChPX1JET05MWSwgMDYwMCwgXCYjMzQ7JXMvJXUvc2VxLSUwNnVcJiMzNDssXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE3My1cdFx0XHRcdCAgemxvLVx1MDAzZWJhc2VfZGlyLCB6bG8tXHUwMDNlaWQsIDApO1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTgzLVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjExODQ6c3RhdGljIGludCB6bG9vcF9jdGxfYWRkKHN0cnVjdCB6bG9vcF9vcHRpb25zICpvcHRzKVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExODUte1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTkyLVx0dW5zaWduZWQgaW50IG5yX3pvbmVzLCBpLCBqO1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjExOTM6XHRzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG87XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE5NC1cdGludCByZXQgPSAtRUlOVkFMO1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMjIwLVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEyMjE6XHRyZXQgPSBtdXRleF9sb2NrX2tpbGxhYmxlKFx1MDAyNnpsb29wX2N0bF9tdXRleCk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTIyMi1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEyMjYtXHRpZiAob3B0cy1cdTAwM2VpZCBcdTAwM2U9IDApIHtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMjI3Olx0XHRyZXQgPSBpZHJfYWxsb2MoXHUwMDI2emxvb3BfaW5kZXhfaWRyLCB6bG8sXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTIyOC1cdFx0XHRcdCAgb3B0cy1cdTAwM2VpZCwgb3B0cy1cdTAwM2VpZCAmIzQzOyAxLCBHRlBfS0VSTkVMKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTIzMS1cdH0gZWxzZSB7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTIzMjpcdFx0cmV0ID0gaWRyX2FsbG9jKFx1MDAyNnpsb29wX2luZGV4X2lkciwgemxvLCAwLCAwLCBHRlBfS0VSTkVMKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMjMzLVx0fVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEyMzQ6XHRtdXRleF91bmxvY2soXHUwMDI2emxvb3BfY3RsX211dGV4KTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMjM1LVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTI1My1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMjU0Olx0emxvLVx1MDAzZXdvcmtxdWV1ZSA9IGFsbG9jX3dvcmtxdWV1ZShcJiMzNDt6bG9vcCVkXCYjMzQ7LCBXUV9VTkJPVU5EIHwgV1FfRlJFRVpBQkxFLFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEyNTUtXHRcdFx0XHRvcHRzLVx1MDAzZW5yX3F1ZXVlcyAqIG9wdHMtXHUwMDNlcXVldWVfZGVwdGgsIHpsby1cdTAwM2VpZCk7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEyNjktXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTI3MDpcdHpsby1cdTAwM2VkYXRhX2RpciA9IHpsb29wX2ZpbHBfb3Blbl9mbXQoT19SRE9OTFkgfCBPX0RJUkVDVE9SWSwgMCwgXCYjMzQ7JXMvJXVcJiMzNDssXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTI3MS1cdFx0XHRcdFx0ICAgIHpsby1cdTAwM2ViYXNlX2RpciwgemxvLVx1MDAzZWlkKTtcbi0tXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAxNzo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODg2MgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFpvbmVkIExvb3AgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIHRoZSBwYXRjaCBpcyBkZWZpbml0ZWx5IHdvcmtpbmcgd2l0aCBgemxvb3BgIOKAkyBnb29kLCBpdCYjMzk7cyBhIHJlYWwgZHJpdmVyIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaGVyZS4gQW5kIGl0JiMzOTtzIG5vdCBqdXN0IHRoYXQsIGl0JiMzOTtzIGFsc28gdG91Y2hpbmcgdGhlIHN0YW5kYXJkIGBsb29wYCBkcml2ZXIsIHdoaWNoIG1ha2VzIHNlbnNlIGZvciBjb21wYXRpYmlsaXR5LCBJIHN1cHBvc2UuIFRoZSBtb2RpZmljYXRpb25zIGV4dGVuZCBmdXJ0aGVyLCB0aG91Z2g7IHRoaXMgZ2V0cyBpbnRlcmVzdGluZy4gSSBzZWUgaXQmIzM5O3MgYWxzbyBtYWtpbmcgY2hhbmdlcyB0byBgYmlvX2lvdl9pdGVyX2dldF9wYWdlc2AgYW5kIGBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzYC4gVGhpcyBzdWdnZXN0cyB0aGUgcGF0Y2ggaXMgbGlrZWx5IGRlYWxpbmcgd2l0aCBkYXRhIHRyYW5zZmVyIG1lY2hhbmlzbXMgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggYm90aCB0aGUgbG9vcCBhbmQgem9uZWQgbG9vcCBibG9jayBkZXZpY2VzIGF0IGEgbG93ZXIgbGV2ZWwuCgpOb3csIEkgbmVlZCB0byBsb29rIGF0IHRoZSBjb25maWd1cmF0aW9ucyByZXF1aXJlZC4gVGhlIG5lY2Vzc2FyeSBrZXJuZWwgY29uZmlncyBhcmUgYENPTkZJR19CTEtfREVWX0xPT1BgIGFuZCBgQ09ORklHX0JMS19ERVZfWk9ORURfTE9PUGAsIGFzIGV4cGVjdGVkLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBgQ09ORklHX0JMS19ERVZfWk9ORURfTE9PUGAgd2l0aGluIHRoZSBgZHJpdmVycy9ibG9jay9LY29uZmlnYCBmaWxlLiBUaGF0IHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBicm9hZGVyIGNvbnRleHQgYW5kIGRlcGVuZGVuY2llcyBvZiB0aGlzIG5ldyBmdW5jdGlvbmFsaXR5LCBhbmQgZW5zdXJlIGV2ZXJ5dGhpbmcgaXMgc2V0IHVwIGNvcnJlY3RseSBpbiB0aGUgYnVpbGQgZW52aXJvbm1lbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgem9uaW5nIGltcGxlbWVudGF0aW9uIHRvIHZlcmlmeSB0aGF0IGl0JiMzOTtzIGRlc2lnbmVkIGluIGEgcGVyZm9ybWFudCBhbmQgY29tcGF0aWJsZSB3YXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTc6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19ERVZfWk9ORURfTE9PUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svS2NvbmZpZz0zNTQ9c291cmNlIFwmIzM0O2RyaXZlcnMvYmxvY2svcm5iZC9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzU1LVxuZHJpdmVycy9ibG9jay9LY29uZmlnOjM1Njpjb25maWcgQkxLX0RFVl9aT05FRF9MT09QXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzU3LVx0dHJpc3RhdGUgXCYjMzQ7Wm9uZWQgbG9vcGJhY2sgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAxNzo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTM3MAoJCQkJCQkJb3V0cHV0OiAyMDMKCQkJCQkJCXRob3VnaHRzOiAxMDkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRm9jdXMgZm9yIEJsb2NrIExheWVyIERpcmVjdCBJL08gYW5kIExvb3AgRHJpdmVycyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBhcmVhcyBhbmQgY29uZmlndXJhdGlvbnMgZm9yIGZ1enppbmcgdGhpcyBkaXJlY3QgSS9PIGxvZ2ljLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBibG9jayBsYXllciBhbmQgbG9vcCBkcml2ZXJzLiAgSSYjMzk7dmUgYWxyZWFkeSBpZGVudGlmaWVkIHR3byBjb25maWd1cmF0aW9ucyB0aGF0IHNlZW0gcmVsZXZhbnQ6IGBCTEtfREVWX0xPT1BgIGFuZCBgQkxLX0RFVl9aT05FRF9MT09QYC4gSSYjMzk7bSBvbWl0dGluZyBgREVCVUdfS0VSTkVMYCBhcyB0aGUgcHJvbXB0IGluZGljYXRlcyBpdCBpcyBhIG1vcmUgZ2VuZXJhbCBjb25maWcgdGhhdCB3ZSBsaWtlbHkgYWxyZWFkeSBoYXZlIGVuYWJsZWQuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucy4gSW5pdGlhbGx5LCBJIGhhZCBhIGxpc3QsIGJ1dCBpdCYjMzk7cyBpbXBvcnRhbnQgdG8gcmVmaW5lIHRoaXMuICBJ4oCZdmUgaWRlbnRpZmllZCBgYmlvX2lvdl9pdGVyX2dldF9wYWdlc2AsIGBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzYCwgYGxvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnRgLCBgbG9vcF9zZXRfZG1hX2xpbWl0YCwgYHpsb29wX2dldF9ibG9ja19zaXplYCwgYW5kIGB6bG9vcF9jdGxfYWRkYCBhcyBwb3RlbnRpYWwgZm9jdXMgc3ltYm9scy4gSSBhbHNvIHNwb3R0ZWQgYGJpb19pb3ZfYnZlY19hbGlnbmVkYCwgYnV0IHNpbmNlIGl0JiMzOTtzIGFuIGlubGluZSBmdW5jdGlvbiwgaXQmIzM5O3MgcHJvYmFibHkgbm90IGFzIGltcGFjdGZ1bCBmb3IgZnV6emluZyBhcyBhbiBleHBvcnRlZCBvbmUuIFRoZXJlZm9yZSwgSeKAmW0gZHJvcHBpbmcgaXQuCgpJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCB0aGUgcmVzdCBhcmUgc3RhdGljIHdpdGhpbiB0aGUgbG9vcCBhbmQgemxvb3AgZHJpdmVycyBidXQgZXhwb3J0ZWQgZnJvbSB0aGVpciByZXNwZWN0aXZlIGZpbGVzLCB3aGljaCBtYWtlcyB0aGVtIGdvb2QgY2FuZGlkYXRlcy4gYGJpb19pb3ZfaXRlcl9nZXRfcGFnZXNgIGlzIGV4cG9ydGVkIGFuZCB1c2VkIHRocm91Z2hvdXQgdGhlIGJsb2NrIGxheWVyLCBhbmQgYGlvdl9pdGVyX2V4dHJhY3RfYnZlY3NgIGlzIGFsc28gZXhwb3J0ZWQuICBUaGlzIG1ha2VzIHRoZW0gcHJpbWUgdGFyZ2V0cy4gVGhlIGxvb3AgYW5kIHpsb29wIGZ1bmN0aW9ucyBhcmUgYWxzbyBjcml0aWNhbCwgYmVjYXVzZSB0aGV5IGhhbmRsZSB0aGUgZGF0YSBwYXRoIG1vZGlmaWNhdGlvbnMuCgpTbywgaGVyZSYjMzk7cyB0aGUgZmluYWwgbGlzdDoKCioqQ29uZmlndXJhdGlvbnM6KioKKiAgIGBCTEtfREVWX0xPT1BgCiogICBgQkxLX0RFVl9aT05FRF9MT09QYAoKKipGb2N1cyBTeW1ib2xzOioqCiogICBgYmlvX2lvdl9pdGVyX2dldF9wYWdlc2AKKiAgIGBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzYAoqICAgYGxvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnRgCiogICBgbG9vcF9zZXRfZG1hX2xpbWl0YAoqICAgYHpsb29wX2dldF9ibG9ja19zaXplYAoqICAgYHpsb29wX2N0bF9hZGRgCgpUaGUgcGF0Y2ggaXMgdG91Y2hpbmcgY29yZSBibG9jayBsYXllciBmdW5jdGlvbmFsaXR5LCBhbmQgSS9PIGFuZCBhbGlnbm1lbnQsIHNvIHRoZXNlIGFyZSB0aGUgYXJlYXMgdG8gaG9uZSBpbiBvbi4gSXQgYWxzbyB1cGRhdGVzIHRoZSBsb29wIGRyaXZlcnMsIHNvIHRob3NlIGZ1bmN0aW9ucyB3aWxsIG5lZWQgdG8gYmUgd2VsbC1jb3ZlcmVkIGluIHRlc3RpbmcuIFRoaXMgc2VlbXMgbGlrZSBhIHNvbGlkIHNldCBvZiB0YXJnZXRzIGZvciBmdXp6aW5nIHRvIHVuY292ZXIgcG90ZW50aWFsIGlzc3VlcyByZWxhdGVkIHRvIGFsaWdubWVudCBjaGVja3MgYW5kIERNQSBsaW1pdHMsIHBhcnRpY3VsYXJseSBpbiB0aGUgY29udGV4dCBvZiBkaXJlY3QgSS9PIHdpdGhpbiB0aGUgYmxvY2sgbGF5ZXIgYW5kIGxvb3AgZHJpdmVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAxNzo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9MT09QJiMzNDssCiAgICAmIzM0O0JMS19ERVZfWk9ORURfTE9PUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Jpb19pb3ZfaXRlcl9nZXRfcGFnZXMmIzM0OywKICAgICYjMzQ7aW92X2l0ZXJfZXh0cmFjdF9idmVjcyYjMzQ7LAogICAgJiMzNDtsb29wX3VwZGF0ZV9kaW9fYWxpZ25tZW50JiMzNDssCiAgICAmIzM0O2xvb3Bfc2V0X2RtYV9saW1pdCYjMzQ7LAogICAgJiMzNDt6bG9vcF9nZXRfYmxvY2tfc2l6ZSYjMzQ7LAogICAgJiMzNDt6bG9vcF9jdGxfYWRkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGJsb2NrIGxheWVyIGRpcmVjdCBJL08gbG9naWMgdG8gZW5mb3JjZSBtZW1vcnkgYWxpZ25tZW50IGNoZWNrcyB2aWEgYGJpb19pb3ZfaXRlcl9nZXRfcGFnZXNgIGFuZCBgaW92X2l0ZXJfZXh0cmFjdF9idmVjc2AuIEl0IGFsc28gdXBkYXRlcyB0aGUgYGxvb3BgIGFuZCBgemxvb3BgIGRyaXZlcnMgdG8gY29ycmVjdGx5IHNldCBETUEgbGltaXRzIGJhc2VkIG9uIHRoZSBiYWNraW5nIGZpbGUmIzM5O3MgZGlyZWN0IEkvTyBhbGlnbm1lbnQuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgYmxvY2sgbGF5ZXIgZnVuY3Rpb25hbGl0eSBhbmQgZHJpdmVyIGJlaGF2aW9yLCBtYWtpbmcgdGhlbSBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTE9PUCYjMzQ7LAogICAgJiMzNDtCTEtfREVWX1pPTkVEX0xPT1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzJiMzNDssCiAgICAmIzM0O2lvdl9pdGVyX2V4dHJhY3RfYnZlY3MmIzM0OywKICAgICYjMzQ7bG9vcF91cGRhdGVfZGlvX2FsaWdubWVudCYjMzQ7LAogICAgJiMzNDtsb29wX3NldF9kbWFfbGltaXQmIzM0OywKICAgICYjMzQ7emxvb3BfZ2V0X2Jsb2NrX3NpemUmIzM0OywKICAgICYjMzQ7emxvb3BfY3RsX2FkZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBibG9jayBsYXllciBkaXJlY3QgSS9PIGxvZ2ljIHRvIGVuZm9yY2UgbWVtb3J5IGFsaWdubWVudCBjaGVja3MgdmlhIGBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzYCBhbmQgYGlvdl9pdGVyX2V4dHJhY3RfYnZlY3NgLiBJdCBhbHNvIHVwZGF0ZXMgdGhlIGBsb29wYCBhbmQgYHpsb29wYCBkcml2ZXJzIHRvIGNvcnJlY3RseSBzZXQgRE1BIGxpbWl0cyBiYXNlZCBvbiB0aGUgYmFja2luZyBmaWxlJiMzOTtzIGRpcmVjdCBJL08gYWxpZ25tZW50LiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIGJsb2NrIGxheWVyIGZ1bmN0aW9uYWxpdHkgYW5kIGRyaXZlciBiZWhhdmlvciwgbWFraW5nIHRoZW0gaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTc6NDI6MjIuNjkwMDE1MzAzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc1OTU5MDkwNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9MT09QXCIsXG4gICAgXCJCTEtfREVWX1pPTkVEX0xPT1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzXCIsXG4gICAgXCJpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzXCIsXG4gICAgXCJsb29wX3VwZGF0ZV9kaW9fYWxpZ25tZW50XCIsXG4gICAgXCJsb29wX3NldF9kbWFfbGltaXRcIixcbiAgICBcInpsb29wX2dldF9ibG9ja19zaXplXCIsXG4gICAgXCJ6bG9vcF9jdGxfYWRkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYmxvY2sgbGF5ZXIgZGlyZWN0IEkvTyBsb2dpYyB0byBlbmZvcmNlIG1lbW9yeSBhbGlnbm1lbnQgY2hlY2tzIHZpYSBgYmlvX2lvdl9pdGVyX2dldF9wYWdlc2AgYW5kIGBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzYC4gSXQgYWxzbyB1cGRhdGVzIHRoZSBgbG9vcGAgYW5kIGB6bG9vcGAgZHJpdmVycyB0byBjb3JyZWN0bHkgc2V0IERNQSBsaW1pdHMgYmFzZWQgb24gdGhlIGJhY2tpbmcgZmlsZSdzIGRpcmVjdCBJL08gYWxpZ25tZW50LiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIGJsb2NrIGxheWVyIGZ1bmN0aW9uYWxpdHkgYW5kIGRyaXZlciBiZWhhdmlvciwgbWFraW5nIHRoZW0gaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxNzo0MjoyMi42OTAwMjQ4NzNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODA2NDIxMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkYzVlMTZkZDU0YzhkMTA2ODdjOTRmNTA1NjkxYTA5ZDU3ZTE0ZjA4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVuIDI0IDE3OjQyOjIxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jpby5jIGIvYmxvY2svYmlvLmNcXG5pbmRleCBmMmE1ZjRkMGE5NjcyYi4uZmFhZDQxYTcyYWM3N2YgMTAwNjQ0XFxuLS0tIGEvYmxvY2svYmlvLmNcXG4rKysgYi9ibG9jay9iaW8uY1xcbkBAIC0xMjIwLDEwICsxMjIwLDQ1IEBAIHN0YXRpYyBpbnQgYmlvX2lvdl9pdGVyX2FsaWduX2Rvd24oc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbisjaWZkZWYgQ09ORklHX0RFQlVHX0tFUk5FTFxcbitzdGF0aWMgaW5saW5lIGJvb2wgYmlvX2lvdl9idmVjX2FsaWduZWQoY29uc3Qgc3RydWN0IGJpbyAqYmlvLFxcbitcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBtZW1fYWxpZ25fbWFzaylcXG4re1xcbitcXHRzdHJ1Y3QgYnZlY19pdGVyIGl0ZXI7XFxuK1xcdHN0cnVjdCBiaW9fdmVjIGJ2O1xcbitcXG4rXFx0LypcXG4rXFx0ICogQ29ycmVjdCBjYWxsZXJzIG5ldmVyIGJyZWFrIHRoZSBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzLCBzbyB0aGlzXFxuK1xcdCAqIGV4aGF1c3RpdmUgY2hlY2sgaXMgb25seSBwYWlkIGZvciBpbiBkZWJ1ZyBidWlsZHMuXFxuK1xcdCAqL1xcbitcXHRmb3JfZWFjaF9tcF9idmVjKGJ2LCBiaW8tXFx1MDAzZWJpX2lvX3ZlYywgaXRlciwgYmlvLVxcdTAwM2ViaV9pdGVyKVxcbitcXHRcXHRpZiAoKGJ2LmJ2X29mZnNldCB8IGJ2LmJ2X2xlbikgXFx1MDAyNiBtZW1fYWxpZ25fbWFzaylcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbisjZWxzZVxcbitzdGF0aWMgaW5saW5lIGJvb2wgYmlvX2lvdl9idmVjX2FsaWduZWQoY29uc3Qgc3RydWN0IGJpbyAqYmlvLFxcbitcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBtZW1fYWxpZ25fbWFzaylcXG4re1xcbitcXHQvKlxcbitcXHQgKiBXZSBmb3J3YXJkIHRoZSBiaW9fdmVjIGFzLWlzLCBzbyBJVEVSX0JWRUMgY2FsbGVycyBtdXN0IHByb3ZpZGVcXG4rXFx0ICogc2VnbWVudHMgYWxyZWFkeSBhbGlnbmVkIHRvIHRoZSBkZXZpY2UncyBETUEgYWxpZ25tZW50LiBUaGUgb25seVxcbitcXHQgKiB1bmNoZWNrZWQgdXNlci1jb250cm9sbGFibGUgb2Zmc2V0IHRoYXQgcmVhY2hlcyBoZXJlIGlzIGFuIGlvX3VyaW5nXFxuK1xcdCAqIHJlZ2lzdGVyZWQgYnVmZmVyIHdoZXJlIGp1c3QgdGhlIGZpcnN0IHNlZ21lbnQgY2FuIGJlIHVuYWxpZ25lZFxcbitcXHQgKiAodGhlIHJlc3QgaXMgdmlydHVhbGx5IGNvbnRpZ3VvdXMpLCBzbyBjaGVja2luZyBvbmx5IHRoYXQgb25lIGlzXFxuK1xcdCAqIHN1ZmZpY2llbnQgdG8ga25vdyBpZiB0aGUgZW50aXJlIHZlY3RvciBpcyB2YWxpZC5cXG4rXFx0ICovXFxuK1xcdHJldHVybiAhKG1wX2J2ZWNfaXRlcl9vZmZzZXQoYmlvLVxcdTAwM2ViaV9pb192ZWMsIGJpby1cXHUwMDNlYmlfaXRlcikgXFx1MDAyNlxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRtZW1fYWxpZ25fbWFzayk7XFxuK31cXG4rI2VuZGlmXFxuK1xcbiAvKipcXG4gICogYmlvX2lvdl9pdGVyX2dldF9wYWdlcyAtIGFkZCB1c2VyIG9yIGtlcm5lbCBwYWdlcyB0byBhIGJpb1xcbiAgKiBAYmlvOiBiaW8gdG8gYWRkIHBhZ2VzIHRvXFxuICAqIEBpdGVyOiBpb3YgaXRlcmF0b3IgZGVzY3JpYmluZyB0aGUgcmVnaW9uIHRvIGJlIGFkZGVkXFxuKyAqIEBtZW1fYWxpZ25fbWFzazogdGhlIG1hc2sgdGhlIHNvdXJjZSBhZGRyZXNzIGFuZCBsZW5ndGggbXVzdCBiZSBhbGlnbmVkIHRvLFxcbisgKlxcdDAgZm9yIG5vIHJlcXVpcmVtZW50XFxuICAqIEBsZW5fYWxpZ25fbWFzazogdGhlIG1hc2sgdG8gYWxpZ24gdGhlIHRvdGFsIHNpemUgdG8sIDAgZm9yIGFueSBsZW5ndGhcXG4gICpcXG4gICogVGhpcyB0YWtlcyBlaXRoZXIgYW4gaXRlcmF0b3IgcG9pbnRpbmcgdG8gdXNlciBtZW1vcnksIG9yIG9uZSBwb2ludGluZyB0b1xcbkBAIC0xMjQyLDcgKzEyNzcsNyBAQCBzdGF0aWMgaW50IGJpb19pb3ZfaXRlcl9hbGlnbl9kb3duKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbiAgKiBpcyByZXR1cm5lZCBvbmx5IGlmIDAgcGFnZXMgY291bGQgYmUgcGlubmVkLlxcbiAgKi9cXG4gaW50IGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuLVxcdFxcdFxcdCAgIHVuc2lnbmVkIGxlbl9hbGlnbl9tYXNrKVxcbitcXHRcXHRcXHQgICB1bnNpZ25lZCBtZW1fYWxpZ25fbWFzaywgdW5zaWduZWQgbGVuX2FsaWduX21hc2spXFxuIHtcXG4gXFx0aW92X2l0ZXJfZXh0cmFjdGlvbl90IGZsYWdzID0gMDtcXG4gXFxuQEAgLTEyNTEsNiArMTI4NiwxMCBAQCBpbnQgYmlvX2lvdl9pdGVyX2dldF9wYWdlcyhzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4gXFxuIFxcdGlmIChpb3ZfaXRlcl9pc19idmVjKGl0ZXIpKSB7XFxuIFxcdFxcdGJpb19pb3ZfYnZlY19zZXQoYmlvLCBpdGVyKTtcXG4rXFxuK1xcdFxcdGlmICghYmlvX2lvdl9idmVjX2FsaWduZWQoYmlvLCBtZW1fYWxpZ25fbWFzaykpXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4gXFx0XFx0aW92X2l0ZXJfYWR2YW5jZShpdGVyLCBiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSk7XFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuQEAgLTEyNjUsOCArMTMwNCwxOSBAQCBpbnQgYmlvX2lvdl9pdGVyX2dldF9wYWdlcyhzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4gXFxuIFxcdFxcdHJldCA9IGlvdl9pdGVyX2V4dHJhY3RfYnZlY3MoaXRlciwgYmlvLVxcdTAwM2ViaV9pb192ZWMsXFxuIFxcdFxcdFxcdFxcdEJJT19NQVhfU0laRSAtIGJpby1cXHUwMDNlYmlfaXRlci5iaV9zaXplLFxcbi1cXHRcXHRcXHRcXHRcXHUwMDI2YmlvLVxcdTAwM2ViaV92Y250LCBiaW8tXFx1MDAzZWJpX21heF92ZWNzLCBmbGFncyk7XFxuK1xcdFxcdFxcdFxcdFxcdTAwMjZiaW8tXFx1MDAzZWJpX3ZjbnQsIGJpby1cXHUwMDNlYmlfbWF4X3ZlY3MsXFxuK1xcdFxcdFxcdFxcdG1lbV9hbGlnbl9tYXNrLCBmbGFncyk7XFxuIFxcdFxcdGlmIChyZXQgXFx1MDAzYz0gMCkge1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBBIG1pc2FsaWduZWQgdmVjdG9yIGZhaWxzIHRoZSB3aG9sZSBJL08uICBSZWxlYXNlIGFueVxcbitcXHRcXHRcXHQgKiBwYWdlcyBwaW5uZWQgYnkgZWFybGllciBpdGVyYXRpb25zIGJlZm9yZSByZXR1cm5pbmdcXG4rXFx0XFx0XFx0ICogc2luY2UgdGhpcyBiaW8gd29uJ3QgYmUgc3VibWl0dGVkIHRvIHJlbGVhc2UgdGhlbS5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGlmIChyZXQgPT0gLUVJTlZBTCkge1xcbitcXHRcXHRcXHRcXHRiaW9fcmVsZWFzZV9wYWdlcyhiaW8sIGZhbHNlKTtcXG4rXFx0XFx0XFx0XFx0YmlvX2NsZWFyX2ZsYWcoYmlvLCBCSU9fUEFHRV9QSU5ORUQpO1xcbitcXHRcXHRcXHRcXHRiaW8tXFx1MDAzZWJpX3ZjbnQgPSAwO1xcbitcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdGlmICghYmlvLVxcdTAwM2ViaV92Y250KVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHRcXHRcXHRicmVhaztcXG5AQCAtMTM3Nyw3ICsxNDI3LDcgQEAgc3RhdGljIGludCBiaW9faW92X2l0ZXJfYm91bmNlX3JlYWQoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuIFxcdFxcdHNzaXplX3QgcmV0O1xcbiBcXG4gXFx0XFx0cmV0ID0gaW92X2l0ZXJfZXh0cmFjdF9idmVjcyhpdGVyLCBiaW8tXFx1MDAzZWJpX2lvX3ZlYyArIDEsIGxlbixcXG4tXFx0XFx0XFx0XFx0XFx1MDAyNmJpby1cXHUwMDNlYmlfdmNudCwgYmlvLVxcdTAwM2ViaV9tYXhfdmVjcyAtIDEsIDApO1xcbitcXHRcXHRcXHRcXHRcXHUwMDI2YmlvLVxcdTAwM2ViaV92Y250LCBiaW8tXFx1MDAzZWJpX21heF92ZWNzIC0gMSwgMCwgMCk7XFxuIFxcdFxcdGlmIChyZXQgXFx1MDAzYz0gMCkge1xcbiBcXHRcXHRcXHRpZiAoIWJpby1cXHUwMDNlYmlfdmNudCkge1xcbiBcXHRcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbmRpZmYgLS1naXQgYS9ibG9jay9ibGstbWFwLmMgYi9ibG9jay9ibGstbWFwLmNcXG5pbmRleCA3Njg1NDlmMTlmOTdlYy4uYzk1MzVlZmUxYTkxM2MgMTAwNjQ0XFxuLS0tIGEvYmxvY2svYmxrLW1hcC5jXFxuKysrIGIvYmxvY2svYmxrLW1hcC5jXFxuQEAgLTI3NCw3ICsyNzQsNyBAQCBzdGF0aWMgaW50IGJpb19tYXBfdXNlcl9pb3Yoc3RydWN0IHJlcXVlc3QgKnJxLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuIFxcdCAqIE5vIGFsaWdubWVudCByZXF1aXJlbWVudHMgb24gb3VyIHBhcnQgdG8gc3VwcG9ydCBhcmJpdHJhcnlcXG4gXFx0ICogcGFzc3Rocm91Z2ggY29tbWFuZHMuXFxuIFxcdCAqL1xcbi1cXHRyZXQgPSBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKGJpbywgaXRlciwgMCk7XFxuK1xcdHJldCA9IGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoYmlvLCBpdGVyLCAwLCAwKTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0Z290byBvdXRfcHV0O1xcbiBcXHRyZXQgPSBibGtfcnFfYXBwZW5kX2JpbyhycSwgYmlvKTtcXG5kaWZmIC0tZ2l0IGEvYmxvY2svZm9wcy5jIGIvYmxvY2svZm9wcy5jXFxuaW5kZXggMTU3ODNhNjE4MGRlYzEuLmU1MTlkN2Y0M2IzMTA2IDEwMDY0NFxcbi0tLSBhL2Jsb2NrL2ZvcHMuY1xcbisrKyBiL2Jsb2NrL2ZvcHMuY1xcbkBAIC00Niw3ICs0Niw3IEBAIHN0YXRpYyBib29sIGJsa2Rldl9kaW9faW52YWxpZChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXFxuIHN0YXRpYyBpbmxpbmUgaW50IGJsa2Rldl9pb3ZfaXRlcl9nZXRfcGFnZXMoc3RydWN0IGJpbyAqYmlvLFxcbiBcXHRcXHRzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpXFxuIHtcXG4tXFx0cmV0dXJuIGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoYmlvLCBpdGVyLFxcbitcXHRyZXR1cm4gYmlvX2lvdl9pdGVyX2dldF9wYWdlcyhiaW8sIGl0ZXIsIGJkZXZfZG1hX2FsaWdubWVudChiZGV2KSxcXG4gXFx0XFx0XFx0YmRldl9sb2dpY2FsX2Jsb2NrX3NpemUoYmRldikgLSAxKTtcXG4gfVxcbiBcXG5AQCAtMjE4LDcgKzIxOCw3IEBAIHN0YXRpYyBzc2l6ZV90IF9fYmxrZGV2X2RpcmVjdF9JTyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4gXFxuIFxcdFxcdHJldCA9IGJsa2Rldl9pb3ZfaXRlcl9nZXRfcGFnZXMoYmlvLCBpdGVyLCBiZGV2KTtcXG4gXFx0XFx0aWYgKHVubGlrZWx5KHJldCkpIHtcXG4tXFx0XFx0XFx0YmlvX2VuZGlvX3N0YXR1cyhiaW8sIEJMS19TVFNfSU9FUlIpO1xcbitcXHRcXHRcXHRiaW9fZW5kaW9fc3RhdHVzKGJpbywgZXJybm9fdG9fYmxrX3N0YXR1cyhyZXQpKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG4gXFx0XFx0aWYgKGlvY2ItXFx1MDAzZWtpX2ZsYWdzIFxcdTAwMjYgSU9DQl9OT1dBSVQpIHtcXG5AQCAtMjM4LDggKzIzOCwxMCBAQCBzdGF0aWMgc3NpemVfdCBfX2Jsa2Rldl9kaXJlY3RfSU8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuIFxcdFxcdH1cXG4gXFx0XFx0aWYgKGlvY2ItXFx1MDAzZWtpX2ZsYWdzIFxcdTAwMjYgSU9DQl9IQVNfTUVUQURBVEEpIHtcXG4gXFx0XFx0XFx0cmV0ID0gYmlvX2ludGVncml0eV9tYXBfaXRlcihiaW8sIGlvY2ItXFx1MDAzZXByaXZhdGUpO1xcbi1cXHRcXHRcXHRpZiAodW5saWtlbHkocmV0KSlcXG4tXFx0XFx0XFx0XFx0Z290byBmYWlsO1xcbitcXHRcXHRcXHRpZiAodW5saWtlbHkocmV0KSkge1xcbitcXHRcXHRcXHRcXHRiaW9fZW5kaW9fc3RhdHVzKGJpbywgZXJybm9fdG9fYmxrX3N0YXR1cyhyZXQpKTtcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdH1cXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0aWYgKGlzX3JlYWQpIHtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9sb29wLmMgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xcbmluZGV4IDMxMGRlMDQ2M2JlYjE0Li41ZmU2MWQ1NDJmOGI3NSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xcbisrKyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jXFxuQEAgLTU0LDYgKzU0LDcgQEAgc3RydWN0IGxvb3BfZGV2aWNlIHtcXG4gXFxuIFxcdHN0cnVjdCBmaWxlXFx0KmxvX2JhY2tpbmdfZmlsZTtcXG4gXFx0dW5zaWduZWQgaW50XFx0bG9fbWluX2Rpb19zaXplO1xcbitcXHR1bnNpZ25lZCBpbnRcXHRsb19kaW9fbWVtX2FsaWduO1xcbiBcXHRzdHJ1Y3QgYmxvY2tfZGV2aWNlICpsb19kZXZpY2U7XFxuIFxcbiBcXHRnZnBfdFxcdFxcdG9sZF9nZnBfbWFzaztcXG5AQCAtNDQ3LDI2ICs0NDgsMzcgQEAgc3RhdGljIHZvaWQgbG9vcF9yZXJlYWRfcGFydGl0aW9ucyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxcbiBcXHRcXHRcXHRfX2Z1bmNfXywgbG8tXFx1MDAzZWxvX251bWJlciwgbG8tXFx1MDAzZWxvX2ZpbGVfbmFtZSwgcmMpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdW5zaWduZWQgaW50IGxvb3BfcXVlcnlfbWluX2Rpb19zaXplKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXFxuK3N0YXRpYyB2b2lkIGxvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcXG4ge1xcbiBcXHRzdHJ1Y3QgZmlsZSAqZmlsZSA9IGxvLVxcdTAwM2Vsb19iYWNraW5nX2ZpbGU7XFxuIFxcdHN0cnVjdCBibG9ja19kZXZpY2UgKnNiX2JkZXYgPSBmaWxlLVxcdTAwM2VmX21hcHBpbmctXFx1MDAzZWhvc3QtXFx1MDAzZWlfc2ItXFx1MDAzZXNfYmRldjtcXG4gXFx0c3RydWN0IGtzdGF0IHN0O1xcbiBcXG4gXFx0LypcXG4tXFx0ICogVXNlIHRoZSBtaW5pbWFsIGRpbyBhbGlnbm1lbnQgb2YgdGhlIGZpbGUgc3lzdGVtIGlmIHByb3ZpZGVkLlxcbitcXHQgKiBVc2UgdGhlIGRpbyBhbGlnbm1lbnQgb2YgdGhlIGZpbGUgc3lzdGVtIGlmIHByb3ZpZGVkLiAgVGhlIGluY29tb2luZ1xcbitcXHQgKiByZXF1ZXN0J3MgYmlvX3ZlYyBpcyBmb3J3YXJkZWQgdG8gdGhlIGJhY2tpbmcgZmlsZSB1bmNoYW5nZWQsIHNvIGl0c1xcbitcXHQgKiByZXF1aXJlZCBtZW1vcnkgYWxpZ25tZW50IGJlY29tZXMgdGhlIGRldmljZSdzIGRtYV9hbGlnbm1lbnQgd2hlblxcbitcXHQgKiB1c2VkIGZvciBkaXJlY3QtaW8uXFxuIFxcdCAqL1xcbiBcXHRpZiAoIXZmc19nZXRhdHRyKFxcdTAwMjZmaWxlLVxcdTAwM2VmX3BhdGgsIFxcdTAwMjZzdCwgU1RBVFhfRElPQUxJR04sIDApIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAoc3QucmVzdWx0X21hc2sgXFx1MDAyNiBTVEFUWF9ESU9BTElHTikpXFxuLVxcdFxcdHJldHVybiBzdC5kaW9fb2Zmc2V0X2FsaWduO1xcbitcXHQgICAgKHN0LnJlc3VsdF9tYXNrIFxcdTAwMjYgU1RBVFhfRElPQUxJR04pKSB7XFxuK1xcdFxcdGxvLVxcdTAwM2Vsb19taW5fZGlvX3NpemUgPSBzdC5kaW9fb2Zmc2V0X2FsaWduO1xcbitcXHRcXHRsby1cXHUwMDNlbG9fZGlvX21lbV9hbGlnbiA9IHN0LmRpb19tZW1fYWxpZ24gLSAxO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4gXFxuIFxcdC8qXFxuIFxcdCAqIEluIGEgcGVyZmVjdCB3b3JsZCB0aGlzIHdvdWxkbid0IGJlIG5lZWRlZCwgYnV0IGFzIG9mIExpbnV4IDYuMTMgb25seVxcbiBcXHQgKiBhIGhhbmRmdWwgb2YgZmlsZSBzeXN0ZW1zIHN1cHBvcnQgdGhlIFNUQVRYX0RJT0FMSUdOIGZsYWcuXFxuIFxcdCAqL1xcbi1cXHRpZiAoc2JfYmRldilcXG4tXFx0XFx0cmV0dXJuIGJkZXZfbG9naWNhbF9ibG9ja19zaXplKHNiX2JkZXYpO1xcbi1cXHRyZXR1cm4gU0VDVE9SX1NJWkU7XFxuK1xcdGlmIChzYl9iZGV2KSB7XFxuK1xcdFxcdGxvLVxcdTAwM2Vsb19taW5fZGlvX3NpemUgPSBiZGV2X2xvZ2ljYWxfYmxvY2tfc2l6ZShzYl9iZGV2KTtcXG4rXFx0XFx0bG8tXFx1MDAzZWxvX2Rpb19tZW1fYWxpZ24gPSBiZGV2X2RtYV9hbGlnbm1lbnQoc2JfYmRldik7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0bG8tXFx1MDAzZWxvX21pbl9kaW9fc2l6ZSA9IFNFQ1RPUl9TSVpFO1xcbitcXHRsby1cXHUwMDNlbG9fZGlvX21lbV9hbGlnbiA9IFNFQ1RPUl9TSVpFIC0gMTtcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSBpbnQgaXNfbG9vcF9kZXZpY2Uoc3RydWN0IGZpbGUgKmZpbGUpXFxuQEAgLTUwOSw3ICs1MjEsNyBAQCBzdGF0aWMgdm9pZCBsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IGZpbGUgKmZpbGUpXFxuIFxcdFxcdFxcdGxvLVxcdTAwM2VvbGRfZ2ZwX21hc2sgXFx1MDAyNiB+KF9fR0ZQX0lPIHwgX19HRlBfRlMpKTtcXG4gXFx0aWYgKGxvLVxcdTAwM2Vsb19iYWNraW5nX2ZpbGUtXFx1MDAzZWZfZmxhZ3MgXFx1MDAyNiBPX0RJUkVDVClcXG4gXFx0XFx0bG8tXFx1MDAzZWxvX2ZsYWdzIHw9IExPX0ZMQUdTX0RJUkVDVF9JTztcXG4tXFx0bG8tXFx1MDAzZWxvX21pbl9kaW9fc2l6ZSA9IGxvb3BfcXVlcnlfbWluX2Rpb19zaXplKGxvKTtcXG4rXFx0bG9vcF91cGRhdGVfZGlvX2FsaWdubWVudChsbyk7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgbG9vcF9jaGVja19iYWNraW5nX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUpXFxuQEAgLTk0MCw2ICs5NTIsMTkgQEAgc3RhdGljIHVuc2lnbmVkIGludCBsb29wX2RlZmF1bHRfYmxvY2tzaXplKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXFxuIFxcdHJldHVybiBTRUNUT1JfU0laRTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgbG9vcF9zZXRfZG1hX2xpbWl0KHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSlcXG4re1xcbitcXHQvKlxcbitcXHQgKiBEaXJlY3QgSS9PIGZvcndhcmRzIHRoZSB1c2VyIHBhZ2VzIHRvIHRoZSBiYWNraW5nIGZpbGUgdW5jaGFuZ2VkLCBzb1xcbitcXHQgKiB0cmFjayB0aGUgYmFja2luZydzIERNQSBhbGlnbm1lbnQgcmVxdWlyZW1lbnQgYXMgdGhlIG1vZGUgaXMgdG9nZ2xlZC5cXG4rXFx0ICovXFxuK1xcdGlmIChsby1cXHUwMDNlbG9fZmxhZ3MgXFx1MDAyNiBMT19GTEFHU19ESVJFQ1RfSU8pXFxuK1xcdFxcdGxpbS1cXHUwMDNlZG1hX2FsaWdubWVudCA9IG1heF90KHVuc2lnbmVkIGludCwgbG8tXFx1MDAzZWxvX2Rpb19tZW1fYWxpZ24sXFxuK1xcdFxcdFxcdFxcdFxcdCAgIFNFQ1RPUl9TSVpFIC0gMSk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0bGltLVxcdTAwM2VkbWFfYWxpZ25tZW50ID0gU0VDVE9SX1NJWkUgLSAxO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBsb29wX3VwZGF0ZV9saW1pdHMoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLFxcbiBcXHRcXHR1bnNpZ25lZCBpbnQgYnNpemUpXFxuIHtcXG5AQCAtOTYxLDYgKzk4Niw3IEBAIHN0YXRpYyB2b2lkIGxvb3BfdXBkYXRlX2xpbWl0cyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sXFxuIFxcdGxpbS1cXHUwMDNlbG9naWNhbF9ibG9ja19zaXplID0gYnNpemU7XFxuIFxcdGxpbS1cXHUwMDNlcGh5c2ljYWxfYmxvY2tfc2l6ZSA9IGJzaXplO1xcbiBcXHRsaW0tXFx1MDAzZWlvX21pbiA9IGJzaXplO1xcbitcXHRsb29wX3NldF9kbWFfbGltaXQobG8sIGxpbSk7XFxuIFxcdGxpbS1cXHUwMDNlZmVhdHVyZXMgXFx1MDAyNj0gfihCTEtfRkVBVF9XUklURV9DQUNIRSB8IEJMS19GRUFUX1JPVEFUSU9OQUwpO1xcbiBcXHRpZiAoZmlsZS1cXHUwMDNlZl9vcC1cXHUwMDNlZnN5bmMgXFx1MDAyNlxcdTAwMjYgIShsby1cXHUwMDNlbG9fZmxhZ3MgXFx1MDAyNiBMT19GTEFHU19SRUFEX09OTFkpKVxcbiBcXHRcXHRsaW0tXFx1MDAzZWZlYXR1cmVzIHw9IEJMS19GRUFUX1dSSVRFX0NBQ0hFO1xcbkBAIC0xNDE2LDYgKzE0NDIsNyBAQCBzdGF0aWMgaW50IGxvb3Bfc2V0X2RpbyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCB1bnNpZ25lZCBsb25nIGFyZylcXG4ge1xcbiBcXHRib29sIHVzZV9kaW8gPSAhIWFyZztcXG4gXFx0dW5zaWduZWQgaW50IG1lbWZsYWdzO1xcbitcXHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTtcXG4gXFxuIFxcdGlmIChsby1cXHUwMDNlbG9fc3RhdGUgIT0gTG9fYm91bmQpXFxuIFxcdFxcdHJldHVybiAtRU5YSU87XFxuQEAgLTE0MzQsNiArMTQ2MSw5IEBAIHN0YXRpYyBpbnQgbG9vcF9zZXRfZGlvKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHVuc2lnbmVkIGxvbmcgYXJnKVxcbiBcXHRcXHRsby1cXHUwMDNlbG9fZmxhZ3MgfD0gTE9fRkxBR1NfRElSRUNUX0lPO1xcbiBcXHRlbHNlXFxuIFxcdFxcdGxvLVxcdTAwM2Vsb19mbGFncyBcXHUwMDI2PSB+TE9fRkxBR1NfRElSRUNUX0lPO1xcbitcXHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKGxvLVxcdTAwM2Vsb19xdWV1ZSk7XFxuK1xcdGxvb3Bfc2V0X2RtYV9saW1pdChsbywgXFx1MDAyNmxpbSk7XFxuK1xcdHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKGxvLVxcdTAwM2Vsb19xdWV1ZSwgXFx1MDAyNmxpbSk7XFxuIFxcdGJsa19tcV91bmZyZWV6ZV9xdWV1ZShsby1cXHUwMDNlbG9fcXVldWUsIG1lbWZsYWdzKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96bG9vcC5jIGIvZHJpdmVycy9ibG9jay96bG9vcC5jXFxuaW5kZXggNTVlZWI2YWFjMGVhM2IuLmY5N2EyMGNmZGI3Y2U2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYmxvY2svemxvb3AuY1xcbisrKyBiL2RyaXZlcnMvYmxvY2svemxvb3AuY1xcbkBAIC0xNDQsNiArMTQ0LDcgQEAgc3RydWN0IHpsb29wX2RldmljZSB7XFxuIFxcdHVuc2lnbmVkIGludFxcdFxcdG5yX2NvbnZfem9uZXM7XFxuIFxcdHVuc2lnbmVkIGludFxcdFxcdG1heF9vcGVuX3pvbmVzO1xcbiBcXHR1bnNpZ25lZCBpbnRcXHRcXHRibG9ja19zaXplO1xcbitcXHR1bnNpZ25lZCBpbnRcXHRcXHRkaW9fbWVtX2FsaWduO1xcbiBcXG4gXFx0c3BpbmxvY2tfdFxcdFxcdG9wZW5fem9uZXNfbG9jaztcXG4gXFx0c3RydWN0IGxpc3RfaGVhZFxcdG9wZW5fem9uZXNfbHJ1X2xpc3Q7XFxuQEAgLTEwMzcsMjAgKzEwMzgsMzAgQEAgc3RhdGljIGludCB6bG9vcF9nZXRfYmxvY2tfc2l6ZShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8sXFxuIFxcdHN0cnVjdCBrc3RhdCBzdDtcXG4gXFxuIFxcdC8qXFxuLVxcdCAqIElmIHRoZSBGUyBibG9jayBzaXplIGlzIGxvd2VyIHRoYW4gb3IgZXF1YWwgdG8gNEssIHVzZSB0aGF0IGFzIHRoZVxcbi1cXHQgKiBkZXZpY2UgYmxvY2sgc2l6ZS4gT3RoZXJ3aXNlLCBmYWxsYmFjayB0byB0aGUgRlMgZGlyZWN0IElPIGFsaWdubWVudFxcbi1cXHQgKiBjb25zdHJhaW50IGlmIHRoYXQgaXMgcHJvdmlkZWQsIGFuZCB0byB0aGUgRlMgdW5kZXJseWluZyBkZXZpY2VcXG4tXFx0ICogcGh5c2ljYWwgYmxvY2sgc2l6ZSBpZiB0aGUgZGlyZWN0IElPIGFsaWdubWVudCBpcyB1bmtub3duLlxcbitcXHQgKiBVc2UgdGhlIGRpbyBhbGlnbm1lbnQgb2YgdGhlIGZpbGUgc3lzdGVtIGlmIHByb3ZpZGVkLiAgVGhlIGluY29taW5nXFxuK1xcdCAqIHJlcXVlc3QncyBiaW9fdmVjIGlzIGZvcndhcmRlZCB0byB0aGUgYmFja2luZyBmaWxlIHVuY2hhbmdlZCwgc28gaXRzXFxuK1xcdCAqIHJlcXVpcmVkIG1lbW9yeSBhbGlnbm1lbnQgYmVjb21lcyB0aGUgZGV2aWNlJ3MgZG1hX2FsaWdubWVudCB3aGVuXFxuK1xcdCAqIHVzZWQgZm9yIGRpcmVjdC1pby5cXG4gXFx0ICovXFxuLVxcdGlmIChmaWxlX2lub2RlKHpvbmUtXFx1MDAzZWZpbGUpLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2Jsb2Nrc2l6ZSBcXHUwMDNjPSBTWl80SylcXG4tXFx0XFx0emxvLVxcdTAwM2VibG9ja19zaXplID0gZmlsZV9pbm9kZSh6b25lLVxcdTAwM2VmaWxlKS1cXHUwMDNlaV9zYi1cXHUwMDNlc19ibG9ja3NpemU7XFxuLVxcdGVsc2UgaWYgKCF2ZnNfZ2V0YXR0cihcXHUwMDI2em9uZS1cXHUwMDNlZmlsZS1cXHUwMDNlZl9wYXRoLCBcXHUwMDI2c3QsIFNUQVRYX0RJT0FMSUdOLCAwKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgKHN0LnJlc3VsdF9tYXNrIFxcdTAwMjYgU1RBVFhfRElPQUxJR04pKVxcbitcXHRpZiAoIXZmc19nZXRhdHRyKFxcdTAwMjZ6b25lLVxcdTAwM2VmaWxlLVxcdTAwM2VmX3BhdGgsIFxcdTAwMjZzdCwgU1RBVFhfRElPQUxJR04sIDApIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAoc3QucmVzdWx0X21hc2sgXFx1MDAyNiBTVEFUWF9ESU9BTElHTikpIHtcXG4gXFx0XFx0emxvLVxcdTAwM2VibG9ja19zaXplID0gc3QuZGlvX29mZnNldF9hbGlnbjtcXG4tXFx0ZWxzZSBpZiAoc2JfYmRldilcXG4rXFx0XFx0emxvLVxcdTAwM2VkaW9fbWVtX2FsaWduID0gc3QuZGlvX21lbV9hbGlnbiAtIDE7XFxuK1xcdH0gZWxzZSBpZiAoc2JfYmRldikge1xcbiBcXHRcXHR6bG8tXFx1MDAzZWJsb2NrX3NpemUgPSBiZGV2X3BoeXNpY2FsX2Jsb2NrX3NpemUoc2JfYmRldik7XFxuLVxcdGVsc2VcXG4rXFx0XFx0emxvLVxcdTAwM2VkaW9fbWVtX2FsaWduID0gYmRldl9kbWFfYWxpZ25tZW50KHNiX2JkZXYpO1xcbitcXHR9IGVsc2Uge1xcbiBcXHRcXHR6bG8tXFx1MDAzZWJsb2NrX3NpemUgPSBTRUNUT1JfU0laRTtcXG4rXFx0XFx0emxvLVxcdTAwM2VkaW9fbWVtX2FsaWduID0gU0VDVE9SX1NJWkUgLSAxO1xcbitcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBQcmVmZXIgdGhlIEZTIGJsb2NrIHNpemUgZm9yIHRoZSBkZXZpY2UgYmxvY2sgc2l6ZSB3aGVuIGl0IGlzIG5vXFxuK1xcdCAqIGxhcmdlciB0aGFuIDRLOyBvdGhlcndpc2Uga2VlcCB0aGUgZGlyZWN0IEkvTyAvIHBoeXNpY2FsIGJsb2NrIHNpemVcXG4rXFx0ICogc2VsZWN0ZWQgYWJvdmUuXFxuK1xcdCAqL1xcbitcXHRpZiAoZmlsZV9pbm9kZSh6b25lLVxcdTAwM2VmaWxlKS1cXHUwMDNlaV9zYi1cXHUwMDNlc19ibG9ja3NpemUgXFx1MDAzYz0gU1pfNEspXFxuK1xcdFxcdHpsby1cXHUwMDNlYmxvY2tfc2l6ZSA9IGZpbGVfaW5vZGUoem9uZS1cXHUwMDNlZmlsZSktXFx1MDAzZWlfc2ItXFx1MDAzZXNfYmxvY2tzaXplO1xcbiBcXG4gXFx0aWYgKHpsby1cXHUwMDNlem9uZV9jYXBhY2l0eSBcXHUwMDI2ICgoemxvLVxcdTAwM2VibG9ja19zaXplIFxcdTAwM2VcXHUwMDNlIFNFQ1RPUl9TSElGVCkgLSAxKSkge1xcbiBcXHRcXHRwcl9lcnIoXFxcIlpvbmUgY2FwYWNpdHkgaXMgbm90IGFsaWduZWQgdG8gYmxvY2sgc2l6ZSAldVxcXFxuXFxcIixcXG5AQCAtMTI3OSw2ICsxMjkwLDEwIEBAIHN0YXRpYyBpbnQgemxvb3BfY3RsX2FkZChzdHJ1Y3Qgemxvb3Bfb3B0aW9ucyAqb3B0cylcXG4gXFxuIFxcdGxpbS5waHlzaWNhbF9ibG9ja19zaXplID0gemxvLVxcdTAwM2VibG9ja19zaXplO1xcbiBcXHRsaW0ubG9naWNhbF9ibG9ja19zaXplID0gemxvLVxcdTAwM2VibG9ja19zaXplO1xcbitcXHQvKiBEaXJlY3QgSS9PIGZvcndhcmRzIHRoZSByZXF1ZXN0IHBhZ2VzIHRvIHRoZSBiYWNraW5nIGZpbGVzIGFzLWlzLiAqL1xcbitcXHRpZiAoIW9wdHMtXFx1MDAzZWJ1ZmZlcmVkX2lvKVxcbitcXHRcXHRsaW0uZG1hX2FsaWdubWVudCA9IG1heF90KHVuc2lnbmVkIGludCwgemxvLVxcdTAwM2VkaW9fbWVtX2FsaWduLFxcbitcXHRcXHRcXHRcXHRcXHQgIFNFQ1RPUl9TSVpFIC0gMSk7XFxuIFxcdGlmICh6bG8tXFx1MDAzZXpvbmVfYXBwZW5kKVxcbiBcXHRcXHRsaW0ubWF4X2h3X3pvbmVfYXBwZW5kX3NlY3RvcnMgPSBsaW0ubWF4X2h3X3NlY3RvcnM7XFxuIFxcdGxpbS5tYXhfb3Blbl96b25lcyA9IHpsby1cXHUwMDNlbWF4X29wZW5fem9uZXM7XFxuZGlmZiAtLWdpdCBhL2ZzL2lvbWFwL2RpcmVjdC1pby5jIGIvZnMvaW9tYXAvZGlyZWN0LWlvLmNcXG5pbmRleCBiNDg1ZTNiMTkxZGFmYS4uZmY0NThhYTEyYWUyOTggMTAwNjQ0XFxuLS0tIGEvZnMvaW9tYXAvZGlyZWN0LWlvLmNcXG4rKysgYi9mcy9pb21hcC9kaXJlY3QtaW8uY1xcbkBAIC0zNTgsNiArMzU4LDcgQEAgc3RhdGljIHNzaXplX3QgaW9tYXBfZGlvX2Jpb19pdGVyX29uZShzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlcixcXG4gXFx0XFx0XFx0XFx0aW9tYXBfbWF4X2Jpb19zaXplKFxcdTAwMjZpdGVyLVxcdTAwM2Vpb21hcCksIGFsaWdubWVudCk7XFxuIFxcdGVsc2VcXG4gXFx0XFx0cmV0ID0gYmlvX2lvdl9pdGVyX2dldF9wYWdlcyhiaW8sIGRpby1cXHUwMDNlc3VibWl0Lml0ZXIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgYmRldl9kbWFfYWxpZ25tZW50KGJpby1cXHUwMDNlYmlfYmRldiksXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgYWxpZ25tZW50IC0gMSk7XFxuIFxcdGlmICh1bmxpa2VseShyZXQpKVxcbiBcXHRcXHRnb3RvIG91dF9wdXRfYmlvO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jpby5oIGIvaW5jbHVkZS9saW51eC9iaW8uaFxcbmluZGV4IDhmMzNmNzE3YjE0ZjViLi5jZTM0ZWE0OWVmMzU4MiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2Jpby5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9iaW8uaFxcbkBAIC00NzcsNyArNDc3LDcgQEAgaW50IGJkZXZfcndfdmlydChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBzZWN0b3IsIHZvaWQgKmRhdGEsXFxuIFxcdFxcdHNpemVfdCBsZW4sIGVudW0gcmVxX29wIG9wKTtcXG4gXFxuIGludCBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbi1cXHRcXHR1bnNpZ25lZCBsZW5fYWxpZ25fbWFzayk7XFxuK1xcdFxcdHVuc2lnbmVkIG1lbV9hbGlnbl9tYXNrLCB1bnNpZ25lZCBsZW5fYWxpZ25fbWFzayk7XFxuIFxcbiB2b2lkIGJpb19pb3ZfYnZlY19zZXQoc3RydWN0IGJpbyAqYmlvLCBjb25zdCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpO1xcbiB2b2lkIF9fYmlvX3JlbGVhc2VfcGFnZXMoc3RydWN0IGJpbyAqYmlvLCBib29sIG1hcmtfZGlydHkpO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Vpby5oIGIvaW5jbHVkZS9saW51eC91aW8uaFxcbmluZGV4IGE5YmM1YjMwNjdlMzIwLi5mZTJlOTg1ZDc0ZDI0YiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3Vpby5oXFxuKysrIGIvaW5jbHVkZS9saW51eC91aW8uaFxcbkBAIC0zODksOSArMzg5LDE3IEBAIHNzaXplX3QgaW92X2l0ZXJfZXh0cmFjdF9wYWdlcyhzdHJ1Y3QgaW92X2l0ZXIgKmksIHN0cnVjdCBwYWdlICoqKnBhZ2VzLFxcbiBcXHRcXHRcXHQgICAgICAgc2l6ZV90IG1heHNpemUsIHVuc2lnbmVkIGludCBtYXhwYWdlcyxcXG4gXFx0XFx0XFx0ICAgICAgIGlvdl9pdGVyX2V4dHJhY3Rpb25fdCBleHRyYWN0aW9uX2ZsYWdzLFxcbiBcXHRcXHRcXHQgICAgICAgc2l6ZV90ICpvZmZzZXQwKTtcXG4rLypcXG4rICogQmxvY2stbGF5ZXIgY29uc3VtZXJzIChlLmcuIGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoKSkgcmVxdWlyZSB0aGF0IHRoZVxcbisgKiBzZWdtZW50cyBvZiBhbiBJVEVSX0JWRUMgaXRlcmF0b3IgYXJlIGFscmVhZHkgYWxpZ25lZCB0byB0aGUgdGFyZ2V0IGRldmljZSdzXFxuKyAqIERNQSBhbGlnbm1lbnQsIGFuZCBmb3J3YXJkIHRoZW0gYXMtaXMuICBJbi1rZXJuZWwgdXNlcnMgdGhhdCBidWlsZCB0aGVpciBvd25cXG4rICogYnZlY3MgbXVzdCBub3QgY3JlYXRlIHN1Yi1hbGlnbmVkIHNlZ21lbnRzOyBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzKCkgZW5mb3JjZXNcXG4rICogdGhlIHNhbWUgZm9yIHRoZSBzZWdtZW50cyBpdCBleHRyYWN0cyB2aWEgQG1lbV9hbGlnbl9tYXNrLlxcbisgKi9cXG4gc3NpemVfdCBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzKHN0cnVjdCBpb3ZfaXRlciAqaXRlciwgc3RydWN0IGJpb192ZWMgKmJ2LFxcbiBcXHRcXHRzaXplX3QgbWF4X3NpemUsIHVuc2lnbmVkIHNob3J0ICpucl92ZWNzLFxcbi1cXHRcXHR1bnNpZ25lZCBzaG9ydCBtYXhfdmVjcywgaW92X2l0ZXJfZXh0cmFjdGlvbl90IGV4dHJhY3Rpb25fZmxhZ3MpO1xcbitcXHRcXHR1bnNpZ25lZCBzaG9ydCBtYXhfdmVjcywgdW5zaWduZWQgbWVtX2FsaWduX21hc2ssXFxuK1xcdFxcdGlvdl9pdGVyX2V4dHJhY3Rpb25fdCBleHRyYWN0aW9uX2ZsYWdzKTtcXG4gXFxuIC8qKlxcbiAgKiBpb3ZfaXRlcl9leHRyYWN0X3dpbGxfcGluIC0gSW5kaWNhdGUgaG93IHBhZ2VzIGZyb20gdGhlIGl0ZXJhdG9yIHdpbGwgYmUgcmV0YWluZWRcXG5kaWZmIC0tZ2l0IGEvbGliL2lvdl9pdGVyLmMgYi9saWIvaW92X2l0ZXIuY1xcbmluZGV4IDI3MzkxOWIxNjE2MTc2Li5jMzQzMDc1OTUxZGVkMCAxMDA2NDRcXG4tLS0gYS9saWIvaW92X2l0ZXIuY1xcbisrKyBiL2xpYi9pb3ZfaXRlci5jXFxuQEAgLTE4ODYsNiArMTg4Niw4IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2NvbnRpZ19mb2xpb19sZW4oc3RydWN0IHBhZ2UgKipwYWdlcyxcXG4gICogQG1heF9zaXplOlxcdG1heGltdW0gc2l6ZSB0byBleHRyYWN0IGZyb20gQGl0ZXJcXG4gICogQG5yX3ZlY3M6XFx0bnVtYmVyIG9mIHZlY3RvcnMgaW4gQGJ2IChvbiBpbiBhbmQgb3V0cHV0KVxcbiAgKiBAbWF4X3ZlY3M6XFx0bWF4aW11bSB2ZWN0b3JzIGluIEBidiwgaW5jbHVkaW5nIHRob3NlIGZpbGxlZCBiZWZvcmUgY2FsbGluZ1xcbisgKiBAbWVtX2FsaWduX21hc2s6XFx0cmVqZWN0IHdpdGggLUVJTlZBTCBpZiB0aGUgc291cmNlIGFkZHJlc3Mgb3JcXG4rICpcXHRcXHRsZW5ndGggaXMgbm90IGFsaWduZWQgdG8gdGhpcyBtYXNrXFxuICAqIEBleHRyYWN0aW9uX2ZsYWdzOiBmbGFncyB0byBxdWFsaWZ5IHJlcXVlc3RcXG4gICpcXG4gICogTGlrZSBpb3ZfaXRlcl9leHRyYWN0X3BhZ2VzKCksIGJ1dCByZXR1cm5zIHBoeXNpY2FsbHkgY29udGlndW91cyByYW5nZXNcXG5AQCAtMTg5NywxNCArMTg5OSwxOSBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGdldF9jb250aWdfZm9saW9fbGVuKHN0cnVjdCBwYWdlICoqcGFnZXMsXFxuICAqL1xcbiBzc2l6ZV90IGlvdl9pdGVyX2V4dHJhY3RfYnZlY3Moc3RydWN0IGlvdl9pdGVyICppdGVyLCBzdHJ1Y3QgYmlvX3ZlYyAqYnYsXFxuIFxcdFxcdHNpemVfdCBtYXhfc2l6ZSwgdW5zaWduZWQgc2hvcnQgKm5yX3ZlY3MsXFxuLVxcdFxcdHVuc2lnbmVkIHNob3J0IG1heF92ZWNzLCBpb3ZfaXRlcl9leHRyYWN0aW9uX3QgZXh0cmFjdGlvbl9mbGFncylcXG4rXFx0XFx0dW5zaWduZWQgc2hvcnQgbWF4X3ZlY3MsIHVuc2lnbmVkIG1lbV9hbGlnbl9tYXNrLFxcbitcXHRcXHRpb3ZfaXRlcl9leHRyYWN0aW9uX3QgZXh0cmFjdGlvbl9mbGFncylcXG4ge1xcbitcXHR1bnNpZ25lZCBsb25nIHN0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpaXRlcl9pb3ZfYWRkcihpdGVyKTtcXG4gXFx0dW5zaWduZWQgc2hvcnQgZW50cmllc19sZWZ0ID0gbWF4X3ZlY3MgLSAqbnJfdmVjcztcXG4gXFx0dW5zaWduZWQgc2hvcnQgbnJfcGFnZXMsIGkgPSAwO1xcbiBcXHRzaXplX3QgbGVmdCwgb2Zmc2V0LCBsZW47XFxuIFxcdHN0cnVjdCBwYWdlICoqcGFnZXM7XFxuIFxcdHNzaXplX3Qgc2l6ZTtcXG4gXFxuK1xcdGlmICgoc3RhcnQgfCBpdGVyX2lvdl9sZW4oaXRlcikpIFxcdTAwMjYgbWVtX2FsaWduX21hc2spXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4gXFx0LypcXG4gXFx0ICogTW92ZSBwYWdlIGFycmF5IHVwIGluIHRoZSBhbGxvY2F0ZWQgbWVtb3J5IGZvciB0aGUgYmlvIHZlY3MgYXMgZmFyIGFzXFxuIFxcdCAqIHBvc3NpYmxlIHNvIHRoYXQgd2UgY2FuIHN0YXJ0IGZpbGxpbmcgYmlvdmVjcyBmcm9tIHRoZSBiZWdpbm5pbmdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTc6NDI6MjQuMzcxNDEzNDgxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNTkxNDUwMjU5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX0xPT1BcIixcbiAgICBcIkJMS19ERVZfWk9ORURfTE9PUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJpb19pb3ZfaXRlcl9nZXRfcGFnZXNcIixcbiAgICBcImlvdl9pdGVyX2V4dHJhY3RfYnZlY3NcIixcbiAgICBcImxvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnRcIixcbiAgICBcImxvb3Bfc2V0X2RtYV9saW1pdFwiLFxuICAgIFwiemxvb3BfZ2V0X2Jsb2NrX3NpemVcIixcbiAgICBcInpsb29wX2N0bF9hZGRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBibG9jayBsYXllciBkaXJlY3QgSS9PIGxvZ2ljIHRvIGVuZm9yY2UgbWVtb3J5IGFsaWdubWVudCBjaGVja3MgdmlhIGBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzYCBhbmQgYGlvdl9pdGVyX2V4dHJhY3RfYnZlY3NgLiBJdCBhbHNvIHVwZGF0ZXMgdGhlIGBsb29wYCBhbmQgYHpsb29wYCBkcml2ZXJzIHRvIGNvcnJlY3RseSBzZXQgRE1BIGxpbWl0cyBiYXNlZCBvbiB0aGUgYmFja2luZyBmaWxlJ3MgZGlyZWN0IEkvTyBhbGlnbm1lbnQuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgYmxvY2sgbGF5ZXIgZnVuY3Rpb25hbGl0eSBhbmQgZHJpdmVyIGJlaGF2aW9yLCBtYWtpbmcgdGhlbSBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZGM1ZTE2ZGQ1NGM4ZDEwNjg3Yzk0ZjUwNTY5MWEwOWQ1N2UxNGYwOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVuIDI0IDE3OjQyOjIxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmlvLmMgYi9ibG9jay9iaW8uY1xuaW5kZXggZjJhNWY0ZDBhOTY3MmIuLmZhYWQ0MWE3MmFjNzdmIDEwMDY0NFxuLS0tIGEvYmxvY2svYmlvLmNcbisrKyBiL2Jsb2NrL2Jpby5jXG5AQCAtMTIyMCwxMCArMTIyMCw0NSBAQCBzdGF0aWMgaW50IGJpb19pb3ZfaXRlcl9hbGlnbl9kb3duKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuKyNpZmRlZiBDT05GSUdfREVCVUdfS0VSTkVMXG4rc3RhdGljIGlubGluZSBib29sIGJpb19pb3ZfYnZlY19hbGlnbmVkKGNvbnN0IHN0cnVjdCBiaW8gKmJpbyxcbitcdFx0XHRcdFx0dW5zaWduZWQgbWVtX2FsaWduX21hc2spXG4re1xuK1x0c3RydWN0IGJ2ZWNfaXRlciBpdGVyO1xuK1x0c3RydWN0IGJpb192ZWMgYnY7XG4rXG4rXHQvKlxuK1x0ICogQ29ycmVjdCBjYWxsZXJzIG5ldmVyIGJyZWFrIHRoZSBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzLCBzbyB0aGlzXG4rXHQgKiBleGhhdXN0aXZlIGNoZWNrIGlzIG9ubHkgcGFpZCBmb3IgaW4gZGVidWcgYnVpbGRzLlxuK1x0ICovXG4rXHRmb3JfZWFjaF9tcF9idmVjKGJ2LCBiaW8tXHUwMDNlYmlfaW9fdmVjLCBpdGVyLCBiaW8tXHUwMDNlYmlfaXRlcilcbitcdFx0aWYgKChidi5idl9vZmZzZXQgfCBidi5idl9sZW4pIFx1MDAyNiBtZW1fYWxpZ25fbWFzaylcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rI2Vsc2VcbitzdGF0aWMgaW5saW5lIGJvb2wgYmlvX2lvdl9idmVjX2FsaWduZWQoY29uc3Qgc3RydWN0IGJpbyAqYmlvLFxuK1x0XHRcdFx0XHR1bnNpZ25lZCBtZW1fYWxpZ25fbWFzaylcbit7XG4rXHQvKlxuK1x0ICogV2UgZm9yd2FyZCB0aGUgYmlvX3ZlYyBhcy1pcywgc28gSVRFUl9CVkVDIGNhbGxlcnMgbXVzdCBwcm92aWRlXG4rXHQgKiBzZWdtZW50cyBhbHJlYWR5IGFsaWduZWQgdG8gdGhlIGRldmljZSdzIERNQSBhbGlnbm1lbnQuIFRoZSBvbmx5XG4rXHQgKiB1bmNoZWNrZWQgdXNlci1jb250cm9sbGFibGUgb2Zmc2V0IHRoYXQgcmVhY2hlcyBoZXJlIGlzIGFuIGlvX3VyaW5nXG4rXHQgKiByZWdpc3RlcmVkIGJ1ZmZlciB3aGVyZSBqdXN0IHRoZSBmaXJzdCBzZWdtZW50IGNhbiBiZSB1bmFsaWduZWRcbitcdCAqICh0aGUgcmVzdCBpcyB2aXJ0dWFsbHkgY29udGlndW91cyksIHNvIGNoZWNraW5nIG9ubHkgdGhhdCBvbmUgaXNcbitcdCAqIHN1ZmZpY2llbnQgdG8ga25vdyBpZiB0aGUgZW50aXJlIHZlY3RvciBpcyB2YWxpZC5cbitcdCAqL1xuK1x0cmV0dXJuICEobXBfYnZlY19pdGVyX29mZnNldChiaW8tXHUwMDNlYmlfaW9fdmVjLCBiaW8tXHUwMDNlYmlfaXRlcikgXHUwMDI2XG4rXHRcdFx0XHRcdFx0XHRtZW1fYWxpZ25fbWFzayk7XG4rfVxuKyNlbmRpZlxuK1xuIC8qKlxuICAqIGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMgLSBhZGQgdXNlciBvciBrZXJuZWwgcGFnZXMgdG8gYSBiaW9cbiAgKiBAYmlvOiBiaW8gdG8gYWRkIHBhZ2VzIHRvXG4gICogQGl0ZXI6IGlvdiBpdGVyYXRvciBkZXNjcmliaW5nIHRoZSByZWdpb24gdG8gYmUgYWRkZWRcbisgKiBAbWVtX2FsaWduX21hc2s6IHRoZSBtYXNrIHRoZSBzb3VyY2UgYWRkcmVzcyBhbmQgbGVuZ3RoIG11c3QgYmUgYWxpZ25lZCB0byxcbisgKlx0MCBmb3Igbm8gcmVxdWlyZW1lbnRcbiAgKiBAbGVuX2FsaWduX21hc2s6IHRoZSBtYXNrIHRvIGFsaWduIHRoZSB0b3RhbCBzaXplIHRvLCAwIGZvciBhbnkgbGVuZ3RoXG4gICpcbiAgKiBUaGlzIHRha2VzIGVpdGhlciBhbiBpdGVyYXRvciBwb2ludGluZyB0byB1c2VyIG1lbW9yeSwgb3Igb25lIHBvaW50aW5nIHRvXG5AQCAtMTI0Miw3ICsxMjc3LDcgQEAgc3RhdGljIGludCBiaW9faW92X2l0ZXJfYWxpZ25fZG93bihzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiAgKiBpcyByZXR1cm5lZCBvbmx5IGlmIDAgcGFnZXMgY291bGQgYmUgcGlubmVkLlxuICAqL1xuIGludCBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuLVx0XHRcdCAgIHVuc2lnbmVkIGxlbl9hbGlnbl9tYXNrKVxuK1x0XHRcdCAgIHVuc2lnbmVkIG1lbV9hbGlnbl9tYXNrLCB1bnNpZ25lZCBsZW5fYWxpZ25fbWFzaylcbiB7XG4gXHRpb3ZfaXRlcl9leHRyYWN0aW9uX3QgZmxhZ3MgPSAwO1xuIFxuQEAgLTEyNTEsNiArMTI4NiwxMCBAQCBpbnQgYmlvX2lvdl9pdGVyX2dldF9wYWdlcyhzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiBcbiBcdGlmIChpb3ZfaXRlcl9pc19idmVjKGl0ZXIpKSB7XG4gXHRcdGJpb19pb3ZfYnZlY19zZXQoYmlvLCBpdGVyKTtcbitcbitcdFx0aWYgKCFiaW9faW92X2J2ZWNfYWxpZ25lZChiaW8sIG1lbV9hbGlnbl9tYXNrKSlcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcbiBcdFx0aW92X2l0ZXJfYWR2YW5jZShpdGVyLCBiaW8tXHUwMDNlYmlfaXRlci5iaV9zaXplKTtcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG5AQCAtMTI2NSw4ICsxMzA0LDE5IEBAIGludCBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuIFxuIFx0XHRyZXQgPSBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzKGl0ZXIsIGJpby1cdTAwM2ViaV9pb192ZWMsXG4gXHRcdFx0XHRCSU9fTUFYX1NJWkUgLSBiaW8tXHUwMDNlYmlfaXRlci5iaV9zaXplLFxuLVx0XHRcdFx0XHUwMDI2YmlvLVx1MDAzZWJpX3ZjbnQsIGJpby1cdTAwM2ViaV9tYXhfdmVjcywgZmxhZ3MpO1xuK1x0XHRcdFx0XHUwMDI2YmlvLVx1MDAzZWJpX3ZjbnQsIGJpby1cdTAwM2ViaV9tYXhfdmVjcyxcbitcdFx0XHRcdG1lbV9hbGlnbl9tYXNrLCBmbGFncyk7XG4gXHRcdGlmIChyZXQgXHUwMDNjPSAwKSB7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBBIG1pc2FsaWduZWQgdmVjdG9yIGZhaWxzIHRoZSB3aG9sZSBJL08uICBSZWxlYXNlIGFueVxuK1x0XHRcdCAqIHBhZ2VzIHBpbm5lZCBieSBlYXJsaWVyIGl0ZXJhdGlvbnMgYmVmb3JlIHJldHVybmluZ1xuK1x0XHRcdCAqIHNpbmNlIHRoaXMgYmlvIHdvbid0IGJlIHN1Ym1pdHRlZCB0byByZWxlYXNlIHRoZW0uXG4rXHRcdFx0ICovXG4rXHRcdFx0aWYgKHJldCA9PSAtRUlOVkFMKSB7XG4rXHRcdFx0XHRiaW9fcmVsZWFzZV9wYWdlcyhiaW8sIGZhbHNlKTtcbitcdFx0XHRcdGJpb19jbGVhcl9mbGFnKGJpbywgQklPX1BBR0VfUElOTkVEKTtcbitcdFx0XHRcdGJpby1cdTAwM2ViaV92Y250ID0gMDtcbitcdFx0XHR9XG4gXHRcdFx0aWYgKCFiaW8tXHUwMDNlYmlfdmNudClcbiBcdFx0XHRcdHJldHVybiByZXQ7XG4gXHRcdFx0YnJlYWs7XG5AQCAtMTM3Nyw3ICsxNDI3LDcgQEAgc3RhdGljIGludCBiaW9faW92X2l0ZXJfYm91bmNlX3JlYWQoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXHRcdHNzaXplX3QgcmV0O1xuIFxuIFx0XHRyZXQgPSBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzKGl0ZXIsIGJpby1cdTAwM2ViaV9pb192ZWMgKyAxLCBsZW4sXG4tXHRcdFx0XHRcdTAwMjZiaW8tXHUwMDNlYmlfdmNudCwgYmlvLVx1MDAzZWJpX21heF92ZWNzIC0gMSwgMCk7XG4rXHRcdFx0XHRcdTAwMjZiaW8tXHUwMDNlYmlfdmNudCwgYmlvLVx1MDAzZWJpX21heF92ZWNzIC0gMSwgMCwgMCk7XG4gXHRcdGlmIChyZXQgXHUwMDNjPSAwKSB7XG4gXHRcdFx0aWYgKCFiaW8tXHUwMDNlYmlfdmNudCkge1xuIFx0XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbmRpZmYgLS1naXQgYS9ibG9jay9ibGstbWFwLmMgYi9ibG9jay9ibGstbWFwLmNcbmluZGV4IDc2ODU0OWYxOWY5N2VjLi5jOTUzNWVmZTFhOTEzYyAxMDA2NDRcbi0tLSBhL2Jsb2NrL2Jsay1tYXAuY1xuKysrIGIvYmxvY2svYmxrLW1hcC5jXG5AQCAtMjc0LDcgKzI3NCw3IEBAIHN0YXRpYyBpbnQgYmlvX21hcF91c2VyX2lvdihzdHJ1Y3QgcmVxdWVzdCAqcnEsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiBcdCAqIE5vIGFsaWdubWVudCByZXF1aXJlbWVudHMgb24gb3VyIHBhcnQgdG8gc3VwcG9ydCBhcmJpdHJhcnlcbiBcdCAqIHBhc3N0aHJvdWdoIGNvbW1hbmRzLlxuIFx0ICovXG4tXHRyZXQgPSBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKGJpbywgaXRlciwgMCk7XG4rXHRyZXQgPSBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKGJpbywgaXRlciwgMCwgMCk7XG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIG91dF9wdXQ7XG4gXHRyZXQgPSBibGtfcnFfYXBwZW5kX2JpbyhycSwgYmlvKTtcbmRpZmYgLS1naXQgYS9ibG9jay9mb3BzLmMgYi9ibG9jay9mb3BzLmNcbmluZGV4IDE1NzgzYTYxODBkZWMxLi5lNTE5ZDdmNDNiMzEwNiAxMDA2NDRcbi0tLSBhL2Jsb2NrL2ZvcHMuY1xuKysrIGIvYmxvY2svZm9wcy5jXG5AQCAtNDYsNyArNDYsNyBAQCBzdGF0aWMgYm9vbCBibGtkZXZfZGlvX2ludmFsaWQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IGtpb2NiICppb2NiLFxuIHN0YXRpYyBpbmxpbmUgaW50IGJsa2Rldl9pb3ZfaXRlcl9nZXRfcGFnZXMoc3RydWN0IGJpbyAqYmlvLFxuIFx0XHRzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpXG4ge1xuLVx0cmV0dXJuIGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoYmlvLCBpdGVyLFxuK1x0cmV0dXJuIGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoYmlvLCBpdGVyLCBiZGV2X2RtYV9hbGlnbm1lbnQoYmRldiksXG4gXHRcdFx0YmRldl9sb2dpY2FsX2Jsb2NrX3NpemUoYmRldikgLSAxKTtcbiB9XG4gXG5AQCAtMjE4LDcgKzIxOCw3IEBAIHN0YXRpYyBzc2l6ZV90IF9fYmxrZGV2X2RpcmVjdF9JTyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiBcbiBcdFx0cmV0ID0gYmxrZGV2X2lvdl9pdGVyX2dldF9wYWdlcyhiaW8sIGl0ZXIsIGJkZXYpO1xuIFx0XHRpZiAodW5saWtlbHkocmV0KSkge1xuLVx0XHRcdGJpb19lbmRpb19zdGF0dXMoYmlvLCBCTEtfU1RTX0lPRVJSKTtcbitcdFx0XHRiaW9fZW5kaW9fc3RhdHVzKGJpbywgZXJybm9fdG9fYmxrX3N0YXR1cyhyZXQpKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFx0XHRpZiAoaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9OT1dBSVQpIHtcbkBAIC0yMzgsOCArMjM4LDEwIEBAIHN0YXRpYyBzc2l6ZV90IF9fYmxrZGV2X2RpcmVjdF9JTyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiBcdFx0fVxuIFx0XHRpZiAoaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9IQVNfTUVUQURBVEEpIHtcbiBcdFx0XHRyZXQgPSBiaW9faW50ZWdyaXR5X21hcF9pdGVyKGJpbywgaW9jYi1cdTAwM2Vwcml2YXRlKTtcbi1cdFx0XHRpZiAodW5saWtlbHkocmV0KSlcbi1cdFx0XHRcdGdvdG8gZmFpbDtcbitcdFx0XHRpZiAodW5saWtlbHkocmV0KSkge1xuK1x0XHRcdFx0YmlvX2VuZGlvX3N0YXR1cyhiaW8sIGVycm5vX3RvX2Jsa19zdGF0dXMocmV0KSk7XG4rXHRcdFx0XHRicmVhaztcbitcdFx0XHR9XG4gXHRcdH1cbiBcbiBcdFx0aWYgKGlzX3JlYWQpIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jXG5pbmRleCAzMTBkZTA0NjNiZWIxNC4uNWZlNjFkNTQyZjhiNzUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xuKysrIGIvZHJpdmVycy9ibG9jay9sb29wLmNcbkBAIC01NCw2ICs1NCw3IEBAIHN0cnVjdCBsb29wX2RldmljZSB7XG4gXG4gXHRzdHJ1Y3QgZmlsZVx0KmxvX2JhY2tpbmdfZmlsZTtcbiBcdHVuc2lnbmVkIGludFx0bG9fbWluX2Rpb19zaXplO1xuK1x0dW5zaWduZWQgaW50XHRsb19kaW9fbWVtX2FsaWduO1xuIFx0c3RydWN0IGJsb2NrX2RldmljZSAqbG9fZGV2aWNlO1xuIFxuIFx0Z2ZwX3RcdFx0b2xkX2dmcF9tYXNrO1xuQEAgLTQ0NywyNiArNDQ4LDM3IEBAIHN0YXRpYyB2b2lkIGxvb3BfcmVyZWFkX3BhcnRpdGlvbnMoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbiBcdFx0XHRfX2Z1bmNfXywgbG8tXHUwMDNlbG9fbnVtYmVyLCBsby1cdTAwM2Vsb19maWxlX25hbWUsIHJjKTtcbiB9XG4gXG4tc3RhdGljIHVuc2lnbmVkIGludCBsb29wX3F1ZXJ5X21pbl9kaW9fc2l6ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuK3N0YXRpYyB2b2lkIGxvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbiB7XG4gXHRzdHJ1Y3QgZmlsZSAqZmlsZSA9IGxvLVx1MDAzZWxvX2JhY2tpbmdfZmlsZTtcbiBcdHN0cnVjdCBibG9ja19kZXZpY2UgKnNiX2JkZXYgPSBmaWxlLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0LVx1MDAzZWlfc2ItXHUwMDNlc19iZGV2O1xuIFx0c3RydWN0IGtzdGF0IHN0O1xuIFxuIFx0Lypcbi1cdCAqIFVzZSB0aGUgbWluaW1hbCBkaW8gYWxpZ25tZW50IG9mIHRoZSBmaWxlIHN5c3RlbSBpZiBwcm92aWRlZC5cbitcdCAqIFVzZSB0aGUgZGlvIGFsaWdubWVudCBvZiB0aGUgZmlsZSBzeXN0ZW0gaWYgcHJvdmlkZWQuICBUaGUgaW5jb21vaW5nXG4rXHQgKiByZXF1ZXN0J3MgYmlvX3ZlYyBpcyBmb3J3YXJkZWQgdG8gdGhlIGJhY2tpbmcgZmlsZSB1bmNoYW5nZWQsIHNvIGl0c1xuK1x0ICogcmVxdWlyZWQgbWVtb3J5IGFsaWdubWVudCBiZWNvbWVzIHRoZSBkZXZpY2UncyBkbWFfYWxpZ25tZW50IHdoZW5cbitcdCAqIHVzZWQgZm9yIGRpcmVjdC1pby5cbiBcdCAqL1xuIFx0aWYgKCF2ZnNfZ2V0YXR0cihcdTAwMjZmaWxlLVx1MDAzZWZfcGF0aCwgXHUwMDI2c3QsIFNUQVRYX0RJT0FMSUdOLCAwKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAoc3QucmVzdWx0X21hc2sgXHUwMDI2IFNUQVRYX0RJT0FMSUdOKSlcbi1cdFx0cmV0dXJuIHN0LmRpb19vZmZzZXRfYWxpZ247XG4rXHQgICAgKHN0LnJlc3VsdF9tYXNrIFx1MDAyNiBTVEFUWF9ESU9BTElHTikpIHtcbitcdFx0bG8tXHUwMDNlbG9fbWluX2Rpb19zaXplID0gc3QuZGlvX29mZnNldF9hbGlnbjtcbitcdFx0bG8tXHUwMDNlbG9fZGlvX21lbV9hbGlnbiA9IHN0LmRpb19tZW1fYWxpZ24gLSAxO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4gXG4gXHQvKlxuIFx0ICogSW4gYSBwZXJmZWN0IHdvcmxkIHRoaXMgd291bGRuJ3QgYmUgbmVlZGVkLCBidXQgYXMgb2YgTGludXggNi4xMyBvbmx5XG4gXHQgKiBhIGhhbmRmdWwgb2YgZmlsZSBzeXN0ZW1zIHN1cHBvcnQgdGhlIFNUQVRYX0RJT0FMSUdOIGZsYWcuXG4gXHQgKi9cbi1cdGlmIChzYl9iZGV2KVxuLVx0XHRyZXR1cm4gYmRldl9sb2dpY2FsX2Jsb2NrX3NpemUoc2JfYmRldik7XG4tXHRyZXR1cm4gU0VDVE9SX1NJWkU7XG4rXHRpZiAoc2JfYmRldikge1xuK1x0XHRsby1cdTAwM2Vsb19taW5fZGlvX3NpemUgPSBiZGV2X2xvZ2ljYWxfYmxvY2tfc2l6ZShzYl9iZGV2KTtcbitcdFx0bG8tXHUwMDNlbG9fZGlvX21lbV9hbGlnbiA9IGJkZXZfZG1hX2FsaWdubWVudChzYl9iZGV2KTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0bG8tXHUwMDNlbG9fbWluX2Rpb19zaXplID0gU0VDVE9SX1NJWkU7XG4rXHRsby1cdTAwM2Vsb19kaW9fbWVtX2FsaWduID0gU0VDVE9SX1NJWkUgLSAxO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGludCBpc19sb29wX2RldmljZShzdHJ1Y3QgZmlsZSAqZmlsZSlcbkBAIC01MDksNyArNTIxLDcgQEAgc3RhdGljIHZvaWQgbG9vcF9hc3NpZ25fYmFja2luZ19maWxlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBmaWxlICpmaWxlKVxuIFx0XHRcdGxvLVx1MDAzZW9sZF9nZnBfbWFzayBcdTAwMjYgfihfX0dGUF9JTyB8IF9fR0ZQX0ZTKSk7XG4gXHRpZiAobG8tXHUwMDNlbG9fYmFja2luZ19maWxlLVx1MDAzZWZfZmxhZ3MgXHUwMDI2IE9fRElSRUNUKVxuIFx0XHRsby1cdTAwM2Vsb19mbGFncyB8PSBMT19GTEFHU19ESVJFQ1RfSU87XG4tXHRsby1cdTAwM2Vsb19taW5fZGlvX3NpemUgPSBsb29wX3F1ZXJ5X21pbl9kaW9fc2l6ZShsbyk7XG4rXHRsb29wX3VwZGF0ZV9kaW9fYWxpZ25tZW50KGxvKTtcbiB9XG4gXG4gc3RhdGljIGludCBsb29wX2NoZWNrX2JhY2tpbmdfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSlcbkBAIC05NDAsNiArOTUyLDE5IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgbG9vcF9kZWZhdWx0X2Jsb2Nrc2l6ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuIFx0cmV0dXJuIFNFQ1RPUl9TSVpFO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBsb29wX3NldF9kbWFfbGltaXQoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuK3tcbitcdC8qXG4rXHQgKiBEaXJlY3QgSS9PIGZvcndhcmRzIHRoZSB1c2VyIHBhZ2VzIHRvIHRoZSBiYWNraW5nIGZpbGUgdW5jaGFuZ2VkLCBzb1xuK1x0ICogdHJhY2sgdGhlIGJhY2tpbmcncyBETUEgYWxpZ25tZW50IHJlcXVpcmVtZW50IGFzIHRoZSBtb2RlIGlzIHRvZ2dsZWQuXG4rXHQgKi9cbitcdGlmIChsby1cdTAwM2Vsb19mbGFncyBcdTAwMjYgTE9fRkxBR1NfRElSRUNUX0lPKVxuK1x0XHRsaW0tXHUwMDNlZG1hX2FsaWdubWVudCA9IG1heF90KHVuc2lnbmVkIGludCwgbG8tXHUwMDNlbG9fZGlvX21lbV9hbGlnbixcbitcdFx0XHRcdFx0ICAgU0VDVE9SX1NJWkUgLSAxKTtcbitcdGVsc2VcbitcdFx0bGltLVx1MDAzZWRtYV9hbGlnbm1lbnQgPSBTRUNUT1JfU0laRSAtIDE7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIGxvb3BfdXBkYXRlX2xpbWl0cyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sXG4gXHRcdHVuc2lnbmVkIGludCBic2l6ZSlcbiB7XG5AQCAtOTYxLDYgKzk4Niw3IEBAIHN0YXRpYyB2b2lkIGxvb3BfdXBkYXRlX2xpbWl0cyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sXG4gXHRsaW0tXHUwMDNlbG9naWNhbF9ibG9ja19zaXplID0gYnNpemU7XG4gXHRsaW0tXHUwMDNlcGh5c2ljYWxfYmxvY2tfc2l6ZSA9IGJzaXplO1xuIFx0bGltLVx1MDAzZWlvX21pbiA9IGJzaXplO1xuK1x0bG9vcF9zZXRfZG1hX2xpbWl0KGxvLCBsaW0pO1xuIFx0bGltLVx1MDAzZWZlYXR1cmVzIFx1MDAyNj0gfihCTEtfRkVBVF9XUklURV9DQUNIRSB8IEJMS19GRUFUX1JPVEFUSU9OQUwpO1xuIFx0aWYgKGZpbGUtXHUwMDNlZl9vcC1cdTAwM2Vmc3luYyBcdTAwMjZcdTAwMjYgIShsby1cdTAwM2Vsb19mbGFncyBcdTAwMjYgTE9fRkxBR1NfUkVBRF9PTkxZKSlcbiBcdFx0bGltLVx1MDAzZWZlYXR1cmVzIHw9IEJMS19GRUFUX1dSSVRFX0NBQ0hFO1xuQEAgLTE0MTYsNiArMTQ0Miw3IEBAIHN0YXRpYyBpbnQgbG9vcF9zZXRfZGlvKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHVuc2lnbmVkIGxvbmcgYXJnKVxuIHtcbiBcdGJvb2wgdXNlX2RpbyA9ICEhYXJnO1xuIFx0dW5zaWduZWQgaW50IG1lbWZsYWdzO1xuK1x0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW07XG4gXG4gXHRpZiAobG8tXHUwMDNlbG9fc3RhdGUgIT0gTG9fYm91bmQpXG4gXHRcdHJldHVybiAtRU5YSU87XG5AQCAtMTQzNCw2ICsxNDYxLDkgQEAgc3RhdGljIGludCBsb29wX3NldF9kaW8oc3RydWN0IGxvb3BfZGV2aWNlICpsbywgdW5zaWduZWQgbG9uZyBhcmcpXG4gXHRcdGxvLVx1MDAzZWxvX2ZsYWdzIHw9IExPX0ZMQUdTX0RJUkVDVF9JTztcbiBcdGVsc2VcbiBcdFx0bG8tXHUwMDNlbG9fZmxhZ3MgXHUwMDI2PSB+TE9fRkxBR1NfRElSRUNUX0lPO1xuK1x0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby1cdTAwM2Vsb19xdWV1ZSk7XG4rXHRsb29wX3NldF9kbWFfbGltaXQobG8sIFx1MDAyNmxpbSk7XG4rXHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShsby1cdTAwM2Vsb19xdWV1ZSwgXHUwMDI2bGltKTtcbiBcdGJsa19tcV91bmZyZWV6ZV9xdWV1ZShsby1cdTAwM2Vsb19xdWV1ZSwgbWVtZmxhZ3MpO1xuIFx0cmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svemxvb3AuYyBiL2RyaXZlcnMvYmxvY2svemxvb3AuY1xuaW5kZXggNTVlZWI2YWFjMGVhM2IuLmY5N2EyMGNmZGI3Y2U2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay96bG9vcC5jXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3psb29wLmNcbkBAIC0xNDQsNiArMTQ0LDcgQEAgc3RydWN0IHpsb29wX2RldmljZSB7XG4gXHR1bnNpZ25lZCBpbnRcdFx0bnJfY29udl96b25lcztcbiBcdHVuc2lnbmVkIGludFx0XHRtYXhfb3Blbl96b25lcztcbiBcdHVuc2lnbmVkIGludFx0XHRibG9ja19zaXplO1xuK1x0dW5zaWduZWQgaW50XHRcdGRpb19tZW1fYWxpZ247XG4gXG4gXHRzcGlubG9ja190XHRcdG9wZW5fem9uZXNfbG9jaztcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdG9wZW5fem9uZXNfbHJ1X2xpc3Q7XG5AQCAtMTAzNywyMCArMTAzOCwzMCBAQCBzdGF0aWMgaW50IHpsb29wX2dldF9ibG9ja19zaXplKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyxcbiBcdHN0cnVjdCBrc3RhdCBzdDtcbiBcbiBcdC8qXG4tXHQgKiBJZiB0aGUgRlMgYmxvY2sgc2l6ZSBpcyBsb3dlciB0aGFuIG9yIGVxdWFsIHRvIDRLLCB1c2UgdGhhdCBhcyB0aGVcbi1cdCAqIGRldmljZSBibG9jayBzaXplLiBPdGhlcndpc2UsIGZhbGxiYWNrIHRvIHRoZSBGUyBkaXJlY3QgSU8gYWxpZ25tZW50XG4tXHQgKiBjb25zdHJhaW50IGlmIHRoYXQgaXMgcHJvdmlkZWQsIGFuZCB0byB0aGUgRlMgdW5kZXJseWluZyBkZXZpY2Vcbi1cdCAqIHBoeXNpY2FsIGJsb2NrIHNpemUgaWYgdGhlIGRpcmVjdCBJTyBhbGlnbm1lbnQgaXMgdW5rbm93bi5cbitcdCAqIFVzZSB0aGUgZGlvIGFsaWdubWVudCBvZiB0aGUgZmlsZSBzeXN0ZW0gaWYgcHJvdmlkZWQuICBUaGUgaW5jb21pbmdcbitcdCAqIHJlcXVlc3QncyBiaW9fdmVjIGlzIGZvcndhcmRlZCB0byB0aGUgYmFja2luZyBmaWxlIHVuY2hhbmdlZCwgc28gaXRzXG4rXHQgKiByZXF1aXJlZCBtZW1vcnkgYWxpZ25tZW50IGJlY29tZXMgdGhlIGRldmljZSdzIGRtYV9hbGlnbm1lbnQgd2hlblxuK1x0ICogdXNlZCBmb3IgZGlyZWN0LWlvLlxuIFx0ICovXG4tXHRpZiAoZmlsZV9pbm9kZSh6b25lLVx1MDAzZWZpbGUpLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemUgXHUwMDNjPSBTWl80Sylcbi1cdFx0emxvLVx1MDAzZWJsb2NrX3NpemUgPSBmaWxlX2lub2RlKHpvbmUtXHUwMDNlZmlsZSktXHUwMDNlaV9zYi1cdTAwM2VzX2Jsb2Nrc2l6ZTtcbi1cdGVsc2UgaWYgKCF2ZnNfZ2V0YXR0cihcdTAwMjZ6b25lLVx1MDAzZWZpbGUtXHUwMDNlZl9wYXRoLCBcdTAwMjZzdCwgU1RBVFhfRElPQUxJR04sIDApIFx1MDAyNlx1MDAyNlxuLVx0XHQgKHN0LnJlc3VsdF9tYXNrIFx1MDAyNiBTVEFUWF9ESU9BTElHTikpXG4rXHRpZiAoIXZmc19nZXRhdHRyKFx1MDAyNnpvbmUtXHUwMDNlZmlsZS1cdTAwM2VmX3BhdGgsIFx1MDAyNnN0LCBTVEFUWF9ESU9BTElHTiwgMCkgXHUwMDI2XHUwMDI2XG4rXHQgICAgKHN0LnJlc3VsdF9tYXNrIFx1MDAyNiBTVEFUWF9ESU9BTElHTikpIHtcbiBcdFx0emxvLVx1MDAzZWJsb2NrX3NpemUgPSBzdC5kaW9fb2Zmc2V0X2FsaWduO1xuLVx0ZWxzZSBpZiAoc2JfYmRldilcbitcdFx0emxvLVx1MDAzZWRpb19tZW1fYWxpZ24gPSBzdC5kaW9fbWVtX2FsaWduIC0gMTtcbitcdH0gZWxzZSBpZiAoc2JfYmRldikge1xuIFx0XHR6bG8tXHUwMDNlYmxvY2tfc2l6ZSA9IGJkZXZfcGh5c2ljYWxfYmxvY2tfc2l6ZShzYl9iZGV2KTtcbi1cdGVsc2VcbitcdFx0emxvLVx1MDAzZWRpb19tZW1fYWxpZ24gPSBiZGV2X2RtYV9hbGlnbm1lbnQoc2JfYmRldik7XG4rXHR9IGVsc2Uge1xuIFx0XHR6bG8tXHUwMDNlYmxvY2tfc2l6ZSA9IFNFQ1RPUl9TSVpFO1xuK1x0XHR6bG8tXHUwMDNlZGlvX21lbV9hbGlnbiA9IFNFQ1RPUl9TSVpFIC0gMTtcbitcdH1cbitcbitcdC8qXG4rXHQgKiBQcmVmZXIgdGhlIEZTIGJsb2NrIHNpemUgZm9yIHRoZSBkZXZpY2UgYmxvY2sgc2l6ZSB3aGVuIGl0IGlzIG5vXG4rXHQgKiBsYXJnZXIgdGhhbiA0Szsgb3RoZXJ3aXNlIGtlZXAgdGhlIGRpcmVjdCBJL08gLyBwaHlzaWNhbCBibG9jayBzaXplXG4rXHQgKiBzZWxlY3RlZCBhYm92ZS5cbitcdCAqL1xuK1x0aWYgKGZpbGVfaW5vZGUoem9uZS1cdTAwM2VmaWxlKS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplIFx1MDAzYz0gU1pfNEspXG4rXHRcdHpsby1cdTAwM2VibG9ja19zaXplID0gZmlsZV9pbm9kZSh6b25lLVx1MDAzZWZpbGUpLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemU7XG4gXG4gXHRpZiAoemxvLVx1MDAzZXpvbmVfY2FwYWNpdHkgXHUwMDI2ICgoemxvLVx1MDAzZWJsb2NrX3NpemUgXHUwMDNlXHUwMDNlIFNFQ1RPUl9TSElGVCkgLSAxKSkge1xuIFx0XHRwcl9lcnIoXCJab25lIGNhcGFjaXR5IGlzIG5vdCBhbGlnbmVkIHRvIGJsb2NrIHNpemUgJXVcXG5cIixcbkBAIC0xMjc5LDYgKzEyOTAsMTAgQEAgc3RhdGljIGludCB6bG9vcF9jdGxfYWRkKHN0cnVjdCB6bG9vcF9vcHRpb25zICpvcHRzKVxuIFxuIFx0bGltLnBoeXNpY2FsX2Jsb2NrX3NpemUgPSB6bG8tXHUwMDNlYmxvY2tfc2l6ZTtcbiBcdGxpbS5sb2dpY2FsX2Jsb2NrX3NpemUgPSB6bG8tXHUwMDNlYmxvY2tfc2l6ZTtcbitcdC8qIERpcmVjdCBJL08gZm9yd2FyZHMgdGhlIHJlcXVlc3QgcGFnZXMgdG8gdGhlIGJhY2tpbmcgZmlsZXMgYXMtaXMuICovXG4rXHRpZiAoIW9wdHMtXHUwMDNlYnVmZmVyZWRfaW8pXG4rXHRcdGxpbS5kbWFfYWxpZ25tZW50ID0gbWF4X3QodW5zaWduZWQgaW50LCB6bG8tXHUwMDNlZGlvX21lbV9hbGlnbixcbitcdFx0XHRcdFx0ICBTRUNUT1JfU0laRSAtIDEpO1xuIFx0aWYgKHpsby1cdTAwM2V6b25lX2FwcGVuZClcbiBcdFx0bGltLm1heF9od196b25lX2FwcGVuZF9zZWN0b3JzID0gbGltLm1heF9od19zZWN0b3JzO1xuIFx0bGltLm1heF9vcGVuX3pvbmVzID0gemxvLVx1MDAzZW1heF9vcGVuX3pvbmVzO1xuZGlmZiAtLWdpdCBhL2ZzL2lvbWFwL2RpcmVjdC1pby5jIGIvZnMvaW9tYXAvZGlyZWN0LWlvLmNcbmluZGV4IGI0ODVlM2IxOTFkYWZhLi5mZjQ1OGFhMTJhZTI5OCAxMDA2NDRcbi0tLSBhL2ZzL2lvbWFwL2RpcmVjdC1pby5jXG4rKysgYi9mcy9pb21hcC9kaXJlY3QtaW8uY1xuQEAgLTM1OCw2ICszNTgsNyBAQCBzdGF0aWMgc3NpemVfdCBpb21hcF9kaW9fYmlvX2l0ZXJfb25lKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLFxuIFx0XHRcdFx0aW9tYXBfbWF4X2Jpb19zaXplKFx1MDAyNml0ZXItXHUwMDNlaW9tYXApLCBhbGlnbm1lbnQpO1xuIFx0ZWxzZVxuIFx0XHRyZXQgPSBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKGJpbywgZGlvLVx1MDAzZXN1Ym1pdC5pdGVyLFxuK1x0XHRcdFx0XHQgICAgIGJkZXZfZG1hX2FsaWdubWVudChiaW8tXHUwMDNlYmlfYmRldiksXG4gXHRcdFx0XHRcdCAgICAgYWxpZ25tZW50IC0gMSk7XG4gXHRpZiAodW5saWtlbHkocmV0KSlcbiBcdFx0Z290byBvdXRfcHV0X2JpbztcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jpby5oIGIvaW5jbHVkZS9saW51eC9iaW8uaFxuaW5kZXggOGYzM2Y3MTdiMTRmNWIuLmNlMzRlYTQ5ZWYzNTgyIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9iaW8uaFxuKysrIGIvaW5jbHVkZS9saW51eC9iaW8uaFxuQEAgLTQ3Nyw3ICs0NzcsNyBAQCBpbnQgYmRldl9yd192aXJ0KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IHNlY3Rvciwgdm9pZCAqZGF0YSxcbiBcdFx0c2l6ZV90IGxlbiwgZW51bSByZXFfb3Agb3ApO1xuIFxuIGludCBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuLVx0XHR1bnNpZ25lZCBsZW5fYWxpZ25fbWFzayk7XG4rXHRcdHVuc2lnbmVkIG1lbV9hbGlnbl9tYXNrLCB1bnNpZ25lZCBsZW5fYWxpZ25fbWFzayk7XG4gXG4gdm9pZCBiaW9faW92X2J2ZWNfc2V0KHN0cnVjdCBiaW8gKmJpbywgY29uc3Qgc3RydWN0IGlvdl9pdGVyICppdGVyKTtcbiB2b2lkIF9fYmlvX3JlbGVhc2VfcGFnZXMoc3RydWN0IGJpbyAqYmlvLCBib29sIG1hcmtfZGlydHkpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdWlvLmggYi9pbmNsdWRlL2xpbnV4L3Vpby5oXG5pbmRleCBhOWJjNWIzMDY3ZTMyMC4uZmUyZTk4NWQ3NGQyNGIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3Vpby5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3Vpby5oXG5AQCAtMzg5LDkgKzM4OSwxNyBAQCBzc2l6ZV90IGlvdl9pdGVyX2V4dHJhY3RfcGFnZXMoc3RydWN0IGlvdl9pdGVyICppLCBzdHJ1Y3QgcGFnZSAqKipwYWdlcyxcbiBcdFx0XHQgICAgICAgc2l6ZV90IG1heHNpemUsIHVuc2lnbmVkIGludCBtYXhwYWdlcyxcbiBcdFx0XHQgICAgICAgaW92X2l0ZXJfZXh0cmFjdGlvbl90IGV4dHJhY3Rpb25fZmxhZ3MsXG4gXHRcdFx0ICAgICAgIHNpemVfdCAqb2Zmc2V0MCk7XG4rLypcbisgKiBCbG9jay1sYXllciBjb25zdW1lcnMgKGUuZy4gYmlvX2lvdl9pdGVyX2dldF9wYWdlcygpKSByZXF1aXJlIHRoYXQgdGhlXG4rICogc2VnbWVudHMgb2YgYW4gSVRFUl9CVkVDIGl0ZXJhdG9yIGFyZSBhbHJlYWR5IGFsaWduZWQgdG8gdGhlIHRhcmdldCBkZXZpY2Unc1xuKyAqIERNQSBhbGlnbm1lbnQsIGFuZCBmb3J3YXJkIHRoZW0gYXMtaXMuICBJbi1rZXJuZWwgdXNlcnMgdGhhdCBidWlsZCB0aGVpciBvd25cbisgKiBidmVjcyBtdXN0IG5vdCBjcmVhdGUgc3ViLWFsaWduZWQgc2VnbWVudHM7IGlvdl9pdGVyX2V4dHJhY3RfYnZlY3MoKSBlbmZvcmNlc1xuKyAqIHRoZSBzYW1lIGZvciB0aGUgc2VnbWVudHMgaXQgZXh0cmFjdHMgdmlhIEBtZW1fYWxpZ25fbWFzay5cbisgKi9cbiBzc2l6ZV90IGlvdl9pdGVyX2V4dHJhY3RfYnZlY3Moc3RydWN0IGlvdl9pdGVyICppdGVyLCBzdHJ1Y3QgYmlvX3ZlYyAqYnYsXG4gXHRcdHNpemVfdCBtYXhfc2l6ZSwgdW5zaWduZWQgc2hvcnQgKm5yX3ZlY3MsXG4tXHRcdHVuc2lnbmVkIHNob3J0IG1heF92ZWNzLCBpb3ZfaXRlcl9leHRyYWN0aW9uX3QgZXh0cmFjdGlvbl9mbGFncyk7XG4rXHRcdHVuc2lnbmVkIHNob3J0IG1heF92ZWNzLCB1bnNpZ25lZCBtZW1fYWxpZ25fbWFzayxcbitcdFx0aW92X2l0ZXJfZXh0cmFjdGlvbl90IGV4dHJhY3Rpb25fZmxhZ3MpO1xuIFxuIC8qKlxuICAqIGlvdl9pdGVyX2V4dHJhY3Rfd2lsbF9waW4gLSBJbmRpY2F0ZSBob3cgcGFnZXMgZnJvbSB0aGUgaXRlcmF0b3Igd2lsbCBiZSByZXRhaW5lZFxuZGlmZiAtLWdpdCBhL2xpYi9pb3ZfaXRlci5jIGIvbGliL2lvdl9pdGVyLmNcbmluZGV4IDI3MzkxOWIxNjE2MTc2Li5jMzQzMDc1OTUxZGVkMCAxMDA2NDRcbi0tLSBhL2xpYi9pb3ZfaXRlci5jXG4rKysgYi9saWIvaW92X2l0ZXIuY1xuQEAgLTE4ODYsNiArMTg4Niw4IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2NvbnRpZ19mb2xpb19sZW4oc3RydWN0IHBhZ2UgKipwYWdlcyxcbiAgKiBAbWF4X3NpemU6XHRtYXhpbXVtIHNpemUgdG8gZXh0cmFjdCBmcm9tIEBpdGVyXG4gICogQG5yX3ZlY3M6XHRudW1iZXIgb2YgdmVjdG9ycyBpbiBAYnYgKG9uIGluIGFuZCBvdXRwdXQpXG4gICogQG1heF92ZWNzOlx0bWF4aW11bSB2ZWN0b3JzIGluIEBidiwgaW5jbHVkaW5nIHRob3NlIGZpbGxlZCBiZWZvcmUgY2FsbGluZ1xuKyAqIEBtZW1fYWxpZ25fbWFzazpcdHJlamVjdCB3aXRoIC1FSU5WQUwgaWYgdGhlIHNvdXJjZSBhZGRyZXNzIG9yXG4rICpcdFx0bGVuZ3RoIGlzIG5vdCBhbGlnbmVkIHRvIHRoaXMgbWFza1xuICAqIEBleHRyYWN0aW9uX2ZsYWdzOiBmbGFncyB0byBxdWFsaWZ5IHJlcXVlc3RcbiAgKlxuICAqIExpa2UgaW92X2l0ZXJfZXh0cmFjdF9wYWdlcygpLCBidXQgcmV0dXJucyBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgcmFuZ2VzXG5AQCAtMTg5NywxNCArMTg5OSwxOSBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGdldF9jb250aWdfZm9saW9fbGVuKHN0cnVjdCBwYWdlICoqcGFnZXMsXG4gICovXG4gc3NpemVfdCBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzKHN0cnVjdCBpb3ZfaXRlciAqaXRlciwgc3RydWN0IGJpb192ZWMgKmJ2LFxuIFx0XHRzaXplX3QgbWF4X3NpemUsIHVuc2lnbmVkIHNob3J0ICpucl92ZWNzLFxuLVx0XHR1bnNpZ25lZCBzaG9ydCBtYXhfdmVjcywgaW92X2l0ZXJfZXh0cmFjdGlvbl90IGV4dHJhY3Rpb25fZmxhZ3MpXG4rXHRcdHVuc2lnbmVkIHNob3J0IG1heF92ZWNzLCB1bnNpZ25lZCBtZW1fYWxpZ25fbWFzayxcbitcdFx0aW92X2l0ZXJfZXh0cmFjdGlvbl90IGV4dHJhY3Rpb25fZmxhZ3MpXG4ge1xuK1x0dW5zaWduZWQgbG9uZyBzdGFydCA9ICh1bnNpZ25lZCBsb25nKWl0ZXJfaW92X2FkZHIoaXRlcik7XG4gXHR1bnNpZ25lZCBzaG9ydCBlbnRyaWVzX2xlZnQgPSBtYXhfdmVjcyAtICpucl92ZWNzO1xuIFx0dW5zaWduZWQgc2hvcnQgbnJfcGFnZXMsIGkgPSAwO1xuIFx0c2l6ZV90IGxlZnQsIG9mZnNldCwgbGVuO1xuIFx0c3RydWN0IHBhZ2UgKipwYWdlcztcbiBcdHNzaXplX3Qgc2l6ZTtcbiBcbitcdGlmICgoc3RhcnQgfCBpdGVyX2lvdl9sZW4oaXRlcikpIFx1MDAyNiBtZW1fYWxpZ25fbWFzaylcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4gXHQvKlxuIFx0ICogTW92ZSBwYWdlIGFycmF5IHVwIGluIHRoZSBhbGxvY2F0ZWQgbWVtb3J5IGZvciB0aGUgYmlvIHZlY3MgYXMgZmFyIGFzXG4gXHQgKiBwb3NzaWJsZSBzbyB0aGF0IHdlIGNhbiBzdGFydCBmaWxsaW5nIGJpb3ZlY3MgZnJvbSB0aGUgYmVnaW5uaW5nXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxNzo0MjoyNC4zNzE0MTUwMzFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NDY0NTczOTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQmxvY2sgTGF5ZXIgRElPIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQncyBtYWtpbmcgc29tZSBtb2RpZmljYXRpb25zIHRvIHRoZSBibG9jayBsYXllciwgc3BlY2lmaWNhbGx5IGFyb3VuZCBkaXJlY3QgSS9PIChESU8pIGFuZCBob3cgaXQgaGFuZGxlcyBgaW92X2l0ZXJgIGxvZ2ljLiBJdCBsb29rcyBsaWtlIHRoZSBtYWluIHRocnVzdCBvZiB0aGlzIGNoYW5nZSBpcyB0byBpbnRyb2R1Y2UgbWVtb3J5IGFsaWdubWVudCBjaGVja3MuIFNwZWNpZmljYWxseSwgdGhleSdyZSB0aWdodGVuaW5nIHVwIGhvdyB3ZSBoYW5kbGUgbWVtb3J5IGFsaWdubWVudCByZXF1aXJlbWVudHMgZm9yIERJTyB1c2luZyBgYmlvX2lvdl9pdGVyX2dldF9wYWdlc2AgYW5kIGBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzYC4gVGhpcyBpcyBjcnVjaWFsIGZvciBhdm9pZGluZyB0aG9zZSBwZXNreSBhbGlnbm1lbnQtcmVsYXRlZCBwZXJmb3JtYW5jZSBwcm9ibGVtcyBhbmQgZW5zdXJpbmcgdGhlIERNQSB0cmFuc2ZlcnMgd29yayBhcyBleHBlY3RlZC5cblxuSSBzZWUgdGhhdCBgYmlvX2lvdl9pdGVyX2dldF9wYWdlc2AgYW5kIGBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzYCBub3cgYm90aCBhY2NlcHQgYSBgbWVtX2FsaWduX21hc2tgIGFyZ3VtZW50LCB3aGljaCBjb25maXJtcyBteSBpbml0aWFsIGFzc2Vzc21lbnQuIEZ1cnRoZXJtb3JlLCB0aGUgYGxvb3BgIGFuZCBgemxvb3BgIGRyaXZlcnMgaGF2ZSBiZWVuIG1vZGlmaWVkIHRvIGhhbmRsZSBETUEgbGltaXRzIGNvcnJlY3RseSBiYXNlZCBvbiB0aGUgRElPIGFsaWdubWVudCBvZiB0aGUgYmFja2luZyBmaWxlLiBgbG9vcF91cGRhdGVfZGlvX2FsaWdubWVudGAgYW5kIGBsb29wX3NldF9kbWFfbGltaXRgIGFyZSB0aGUgbmV3IGFkZGl0aW9ucyB0byBgbG9vcC5jYCBhbmQgc2ltaWxhciBjaGFuZ2VzIGhhdmUgYmVlbiBtYWRlIGluIHRoZSBgemxvb3BgIGRyaXZlci5cblxuSSBzZWUgaG93IHRoaXMgYWZmZWN0cyB0aGUgYWN0dWFsIGNhbGxzOiBgaW9tYXBfZGlvX2Jpb19pdGVyX29uZWAgYW5kIGBfX2Jsa2Rldl9kaXJlY3RfSU9gIG5vdyBhcmUgcGFzc2luZyB0aGUgRE1BIGFsaWdubWVudCBvZiB0aGUgYmxvY2sgZGV2aWNlIHRvIGBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzYC4gR29vZCwgdGhhdCdzIHdoYXQgSSdkIGV4cGVjdC4gQmFzZWQgb24gdGhpcyBxdWljayBza2ltLCB0aGlzIHBhdGNoIHNlZW1zIGZ1bmN0aW9uYWwgYW5kLCBtb3JlIGltcG9ydGFudGx5LCAqcmVhY2hhYmxlKiDigJMgbWVhbmluZyB3ZSdyZSBhY3R1YWxseSAqdXNpbmcqIHRoZXNlIG1vZGlmaWVkIGZ1bmN0aW9ucy4gVGhhdCdzIGEga2V5IHBvaW50LlxuXG5NeSBuZXh0IHN0ZXAgaXMgY2xlYXI6IHdlIG5lZWQgdG8gZnV6eiB0aGlzISBJIG5lZWQgdG8gaGFtbWVyIGF0IHRob3NlIGFsaWdubWVudCBjaGVja3MgdG8gbG9vayBmb3IgZWRnZSBjYXNlcy4gSSdsbCBuZWVkIHRvIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cyBvbiB0aGVzZSBrZXkgc3ltYm9sczogYGJpb19pb3ZfaXRlcl9nZXRfcGFnZXNgLCBgaW92X2l0ZXJfZXh0cmFjdF9idmVjc2AsIGBsb29wX3VwZGF0ZV9kaW9fYWxpZ25tZW50YCwgYGxvb3Bfc2V0X2RtYV9saW1pdGAsIGB6bG9vcF9nZXRfYmxvY2tfc2l6ZWAsIGFuZCBgemxvb3BfY3RsX2FkZGAuIFRoZXNlIGFyZSB0aGUgY29yZSBmdW5jdGlvbnMgdGhhdCBhcmUgaGFuZGxpbmcgdGhlIERJTyBhbGlnbm1lbnQgY2hlY2tzIGFuZCBETUEgbGltaXQgbG9naWMuXG5cbkZpbmFsbHksIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYHpsb29wYCBpcyBhY3R1YWxseSBhIGRyaXZlciB3ZSBuZWVkIHRvIHdvcnJ5IGFib3V0LiBJIHdpbGwgcXVpY2tseSBydW4gYSBzZWFyY2ggdG8gY29uZmlybSwgbGlrZWx5IHVzaW5nIGBjb2Rlc2VhcmNoLWRpci1pbmRleGAgb3IgYGdyZXBwZXJgIOKAkyBob3BlZnVsbHksIEkgZmluZCBpdCwgYXMgdGhhdCB3aWxsIGFkZCBhbm90aGVyIGNvbXBvbmVudCB0byB0aGUgcHV6emxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NzY4LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzc2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTc6NDI6MzEuODM1OTkxODY2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MDc1MDE3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6bG9vcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDY4NCBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuZHJpdmVycy9ibG9jay9LY29uZmlnPTM1Nj1jb25maWcgQkxLX0RFVl9aT05FRF9MT09QXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzY3LVxcdCAgZWNobyBcXFwiYWRkIGlkPTAsem9uZV9zaXplX21iPTI1NixjYXBhY2l0eV9tYj0xNjM4NCxjb252X3pvbmVzPTExXFxcIiBcXHUwMDNlIFxcXFxcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MzY4OlxcdFxcdC9kZXYvemxvb3AtY29udHJvbFxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zNjktXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL01ha2VmaWxlPTQwPW9iai0kKENPTkZJR19CTEtfREVWX1VCTEspXFx0XFx0XFx0Kz0gdWJsa19kcnYub1xcbmRyaXZlcnMvYmxvY2svTWFrZWZpbGU6NDE6b2JqLSQoQ09ORklHX0JMS19ERVZfWk9ORURfTE9PUCkgKz0gemxvb3Aub1xcbmRyaXZlcnMvYmxvY2svTWFrZWZpbGUtNDItXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM9MjU9ZW51bSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNDEtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjQyOnN0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHpsb29wX29wdF90b2tlbnMgPSB7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTQzLVxcdHsgWkxPT1BfT1BUX0lELFxcdFxcdFxcdFxcXCJpZD0lZFxcXCJcXHR9LFxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTY0LSNkZWZpbmUgWkxPT1BfREVGX01BWF9PUEVOX1pPTkVTXFx0MFxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo2NTojZGVmaW5lIFpMT09QX0RFRl9CQVNFX0RJUlxcdFxcdFxcXCIvdmFyL2xvY2FsL3psb29wXFxcIlxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy02Ni0jZGVmaW5lIFpMT09QX0RFRl9OUl9RVUVVRVNcXHRcXHQxXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzQtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjc1OnN0cnVjdCB6bG9vcF9vcHRpb25zIHtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzYtXFx0dW5zaWduZWQgaW50XFx0XFx0bWFzaztcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYz05NT1lbnVtIHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDAtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEwMTplbnVtIHpsb29wX3pvbmVfZmxhZ3Mge1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDItXFx0WkxPT1BfWk9ORV9DT05WID0gMCxcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDktICovXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjExMDpzdHJ1Y3Qgemxvb3Bfem9uZSB7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExMS1cXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0b3Blbl96b25lX2VudHJ5O1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEyMy1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTI0OnN0cnVjdCB6bG9vcF9kZXZpY2Uge1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMjUtXFx0dW5zaWduZWQgaW50XFx0XFx0aWQ7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTUyLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxNTM6XFx0c3RydWN0IHpsb29wX3pvbmVcXHR6b25lc1tdIF9fY291bnRlZF9ieShucl96b25lcyk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTE1NC19O1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xNTUtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjE1NjpzdHJ1Y3Qgemxvb3BfY21kIHtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTU3LVxcdHN0cnVjdCB3b3JrX3N0cnVjdFxcdHdvcms7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTY1LVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxNjY6c3RhdGljIERFRklORV9JRFIoemxvb3BfaW5kZXhfaWRyKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTY3OnN0YXRpYyBERUZJTkVfTVVURVgoemxvb3BfY3RsX211dGV4KTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTY4LVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYz0xNjk9c3RhdGljIHVuc2lnbmVkIGludCBycV96b25lX25vKHN0cnVjdCByZXF1ZXN0ICpycSlcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTcwLXtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTcxOlxcdHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyA9IHJxLVxcdTAwM2VxLVxcdTAwM2VxdWV1ZWRhdGE7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTE3Mi1cXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xODEtICovXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjE4MjpzdGF0aWMgaW5saW5lIHZvaWQgemxvb3BfbHJ1X3JvdGF0ZV9vcGVuX3pvbmUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLFxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxODM6XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHpsb29wX3pvbmUgKnpvbmUpXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTE4NC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTkyLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxOTM6c3RhdGljIGlubGluZSB2b2lkIHpsb29wX2xydV9yZW1vdmVfb3Blbl96b25lKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyxcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTk0OlxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCB6bG9vcF96b25lICp6b25lKVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xOTUte1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTIwNC1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MjA1OnN0YXRpYyBpbmxpbmUgYm9vbCB6bG9vcF9jYW5fb3Blbl96b25lKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbylcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjA2LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0yMTQtICovXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjIxNTpzdGF0aWMgYm9vbCB6bG9vcF9jbG9zZV9pbXBfb3Blbl96b25lKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbylcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjE2LXtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MjE3OlxcdHN0cnVjdCB6bG9vcF96b25lICp6b25lO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0yMTgtXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjIwLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoyMjE6XFx0aWYgKHpsb29wX2Nhbl9vcGVuX3pvbmUoemxvKSlcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjIyLVxcdFxcdHJldHVybiB0cnVlO1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTIzNS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MjM2OnN0YXRpYyBib29sIHpsb29wX29wZW5fY2xvc2VkX29yX2VtcHR5X3pvbmUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLFxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoyMzc6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCB6bG9vcF96b25lICp6b25lLFxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0yMzgtXFx0XFx0XFx0XFx0XFx0ICAgIGJvb2wgZXhwbGljaXQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjQ2LVxcdFxcdCAqL1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoyNDc6XFx0XFx0aWYgKCF6bG9vcF9jYW5fb3Blbl96b25lKHpsbykpXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTI0OC1cXHRcXHRcXHRnb3RvIGZhaWw7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjU0LVxcdFxcdCAqL1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoyNTU6XFx0XFx0aWYgKCF6bG9vcF9jbG9zZV9pbXBfb3Blbl96b25lKHpsbykpXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTI1Ni1cXHRcXHRcXHRnb3RvIGZhaWw7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjczLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoyNzQ6c3RhdGljIGJvb2wgemxvb3BfZG9fb3Blbl96b25lKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyxcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6Mjc1OlxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgemxvb3Bfem9uZSAqem9uZSwgYm9vbCBleHBsaWNpdClcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjc2LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0yODEtXFx0XFx0XFx0em9uZS1cXHUwMDNlY29uZCA9IEJMS19aT05FX0NPTkRfRVhQX09QRU47XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjI4MjpcXHRcXHR6bG9vcF9scnVfcm90YXRlX29wZW5fem9uZSh6bG8sIHpvbmUpO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0yODMtXFx0XFx0cmV0dXJuIHRydWU7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjg1LVxcdGNhc2UgQkxLX1pPTkVfQ09ORF9DTE9TRUQ6XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjI4NjpcXHRcXHRyZXR1cm4gemxvb3Bfb3Blbl9jbG9zZWRfb3JfZW1wdHlfem9uZSh6bG8sIHpvbmUsIGV4cGxpY2l0KTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjg3LVxcdGRlZmF1bHQ6XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjkxLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoyOTI6c3RhdGljIHZvaWQgemxvb3BfbWFya19mdWxsKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbywgc3RydWN0IHpsb29wX3pvbmUgKnpvbmUpXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTI5My17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjk1LVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoyOTY6XFx0emxvb3BfbHJ1X3JlbW92ZV9vcGVuX3pvbmUoemxvLCB6b25lKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjk3LVxcdHpvbmUtXFx1MDAzZWNvbmQgPSBCTEtfWk9ORV9DT05EX0ZVTEw7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMzAwLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzozMDE6c3RhdGljIHZvaWQgemxvb3BfbWFya19lbXB0eShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8sIHN0cnVjdCB6bG9vcF96b25lICp6b25lKVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zMDIte1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTMwNC1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MzA1OlxcdHpsb29wX2xydV9yZW1vdmVfb3Blbl96b25lKHpsbywgem9uZSk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTMwNi1cXHR6b25lLVxcdTAwM2Vjb25kID0gQkxLX1pPTkVfQ09ORF9FTVBUWTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zMDktXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjMxMDpzdGF0aWMgaW50IHpsb29wX3VwZGF0ZV9zZXFfem9uZShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8sIHVuc2lnbmVkIGludCB6b25lX25vKVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zMTEte1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzozMTI6XFx0c3RydWN0IHpsb29wX3pvbmUgKnpvbmUgPSBcXHUwMDI2emxvLVxcdTAwM2V6b25lc1t6b25lX25vXTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMzEzLVxcdHN0cnVjdCBrc3RhdCBzdGF0O1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTM0MS1cXHRpZiAoIWZpbGVfc2VjdG9ycykge1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzozNDI6XFx0XFx0emxvb3BfbWFya19lbXB0eSh6bG8sIHpvbmUpO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zNDMtXFx0fSBlbHNlIGlmIChmaWxlX3NlY3RvcnMgPT0gemxvLVxcdTAwM2V6b25lX2NhcGFjaXR5KSB7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjM0NDpcXHRcXHR6bG9vcF9tYXJrX2Z1bGwoemxvLCB6b25lKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMzQ1LVxcdH0gZWxzZSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMzU1LVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzozNTY6c3RhdGljIGludCB6bG9vcF9vcGVuX3pvbmUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLCB1bnNpZ25lZCBpbnQgem9uZV9ubylcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMzU3LXtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MzU4OlxcdHN0cnVjdCB6bG9vcF96b25lICp6b25lID0gXFx1MDAyNnpsby1cXHUwMDNlem9uZXNbem9uZV9ub107XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTM1OS1cXHRpbnQgcmV0ID0gMDtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zNjYtXFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChaTE9PUF9aT05FX1NFUV9FUlJPUiwgXFx1MDAyNnpvbmUtXFx1MDAzZWZsYWdzKSkge1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzozNjc6XFx0XFx0cmV0ID0gemxvb3BfdXBkYXRlX3NlcV96b25lKHpsbywgem9uZV9ubyk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTM2OC1cXHRcXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTM3MS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MzcyOlxcdGlmICghemxvb3BfZG9fb3Blbl96b25lKHpsbywgem9uZSwgdHJ1ZSkpXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTM3My1cXHRcXHRyZXQgPSAtRUlPO1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTM4MC1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MzgxOnN0YXRpYyBpbnQgemxvb3BfY2xvc2Vfem9uZShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8sIHVuc2lnbmVkIGludCB6b25lX25vKVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zODIte1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzozODM6XFx0c3RydWN0IHpsb29wX3pvbmUgKnpvbmUgPSBcXHUwMDI2emxvLVxcdTAwM2V6b25lc1t6b25lX25vXTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMzg0LVxcdGludCByZXQgPSAwO1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTM5MS1cXHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KFpMT09QX1pPTkVfU0VRX0VSUk9SLCBcXHUwMDI2em9uZS1cXHUwMDNlZmxhZ3MpKSB7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjM5MjpcXHRcXHRyZXQgPSB6bG9vcF91cGRhdGVfc2VxX3pvbmUoemxvLCB6b25lX25vKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMzkzLVxcdFxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNDAyLVxcdFxcdHNwaW5fbG9jayhcXHUwMDI2em9uZS1cXHUwMDNld3BfbG9jayk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjQwMzpcXHRcXHR6bG9vcF9scnVfcmVtb3ZlX29wZW5fem9uZSh6bG8sIHpvbmUpO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy00MDQtXFx0XFx0aWYgKHpvbmUtXFx1MDAzZXdwID09IHpvbmUtXFx1MDAzZXN0YXJ0KVxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTQyMi1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NDIzOnN0YXRpYyBpbnQgemxvb3BfcmVzZXRfem9uZShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8sIHVuc2lnbmVkIGludCB6b25lX25vKVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy00MjQte1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo0MjU6XFx0c3RydWN0IHpsb29wX3pvbmUgKnpvbmUgPSBcXHUwMDI2emxvLVxcdTAwM2V6b25lc1t6b25lX25vXTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNDI2LVxcdGludCByZXQgPSAwO1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTQ0My1cXHRzcGluX2xvY2soXFx1MDAyNnpvbmUtXFx1MDAzZXdwX2xvY2spO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo0NDQ6XFx0emxvb3BfbWFya19lbXB0eSh6bG8sIHpvbmUpO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy00NDUtXFx0Y2xlYXJfYml0KFpMT09QX1pPTkVfU0VRX0VSUk9SLCBcXHUwMDI2em9uZS1cXHUwMDNlZmxhZ3MpO1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTQ1My1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NDU0OnN0YXRpYyBpbnQgemxvb3BfcmVzZXRfYWxsX3pvbmVzKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbylcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNDU1LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy00NTktXFx0Zm9yIChpID0gemxvLVxcdTAwM2Vucl9jb252X3pvbmVzOyBpIFxcdTAwM2MgemxvLVxcdTAwM2Vucl96b25lczsgaSsrKSB7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjQ2MDpcXHRcXHRyZXQgPSB6bG9vcF9yZXNldF96b25lKHpsbywgaSk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTQ2MS1cXHRcXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTQ2Ny1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NDY4OnN0YXRpYyBpbnQgemxvb3BfZmluaXNoX3pvbmUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLCB1bnNpZ25lZCBpbnQgem9uZV9ubylcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNDY5LXtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NDcwOlxcdHN0cnVjdCB6bG9vcF96b25lICp6b25lID0gXFx1MDAyNnpsby1cXHUwMDNlem9uZXNbem9uZV9ub107XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTQ3MS1cXHRpbnQgcmV0ID0gMDtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy00ODgtXFx0c3Bpbl9sb2NrKFxcdTAwMjZ6b25lLVxcdTAwM2V3cF9sb2NrKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NDg5OlxcdHpsb29wX21hcmtfZnVsbCh6bG8sIHpvbmUpO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy00OTAtXFx0Y2xlYXJfYml0KFpMT09QX1pPTkVfU0VRX0VSUk9SLCBcXHUwMDI2em9uZS1cXHUwMDNlZmxhZ3MpO1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTQ5OC1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NDk5OnN0YXRpYyB2b2lkIHpsb29wX3B1dF9jbWQoc3RydWN0IHpsb29wX2NtZCAqY21kKVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy01MDAte1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTUxMC1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NTExOnN0YXRpYyB2b2lkIHpsb29wX3J3X2NvbXBsZXRlKHN0cnVjdCBraW9jYiAqaW9jYiwgbG9uZyByZXQpXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTUxMi17XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjUxMzpcXHRzdHJ1Y3Qgemxvb3BfY21kICpjbWQgPSBjb250YWluZXJfb2YoaW9jYiwgc3RydWN0IHpsb29wX2NtZCwgaW9jYik7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTUxNC1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTE1LVxcdGNtZC1cXHUwMDNlcmV0ID0gcmV0O1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo1MTY6XFx0emxvb3BfcHV0X2NtZChjbWQpO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy01MTctfVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy01MTgtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjUxOTpzdGF0aWMgaW50IHpsb29wX2RvX3J3KHN0cnVjdCB6bG9vcF9jbWQgKmNtZClcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTIwLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy01MjMtXFx0dW5zaWduZWQgaW50IG5yX2J2ZWMgPSBibGtfcnFfbnJfYnZlYyhycSk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjUyNDpcXHRzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8gPSBycS1cXHUwMDNlcS1cXHUwMDNlcXVldWVkYXRhO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo1MjU6XFx0c3RydWN0IHpsb29wX3pvbmUgKnpvbmUgPSBcXHUwMDI2emxvLVxcdTAwM2V6b25lc1tycV96b25lX25vKHJxKV07XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTUyNi1cXHRzdHJ1Y3QgcmVxX2l0ZXJhdG9yIHJxX2l0ZXI7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTYxLVxcdGNtZC1cXHUwMDNlaW9jYi5raV9maWxwID0gem9uZS1cXHUwMDNlZmlsZTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NTYyOlxcdGNtZC1cXHUwMDNlaW9jYi5raV9jb21wbGV0ZSA9IHpsb29wX3J3X2NvbXBsZXRlO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy01NjMtXFx0aWYgKCF6bG8tXFx1MDAzZWJ1ZmZlcmVkX2lvKVxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTU3MS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NTcyOnN0YXRpYyBpbnQgemxvb3Bfc2VxX3dyaXRlX3ByZXAoc3RydWN0IHpsb29wX2NtZCAqY21kKVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy01NzMte1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy01NzQtXFx0c3RydWN0IHJlcXVlc3QgKnJxID0gYmxrX21xX3JxX2Zyb21fcGR1KGNtZCk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjU3NTpcXHRzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8gPSBycS1cXHUwMDNlcS1cXHUwMDNlcXVldWVkYXRhO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy01NzYtXFx0dW5zaWduZWQgaW50IHpvbmVfbm8gPSBycV96b25lX25vKHJxKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy01NzgtXFx0Ym9vbCBpc19hcHBlbmQgPSByZXFfb3AocnEpID09IFJFUV9PUF9aT05FX0FQUEVORDtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NTc5OlxcdHN0cnVjdCB6bG9vcF96b25lICp6b25lID0gXFx1MDAyNnpsby1cXHUwMDNlem9uZXNbem9uZV9ub107XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTU4MC1cXHRzZWN0b3JfdCB6b25lX2VuZCA9IHpvbmUtXFx1MDAzZXN0YXJ0ICsgemxvLVxcdTAwM2V6b25lX2NhcGFjaXR5O1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTU5Mi1cXHRcXHQgKiBJZiBvcmRlcmVkIHpvbmUgYXBwZW5kIGlzIGluIHVzZSwgd2UgYWxyZWFkeSBjaGVja2VkIGFuZCBzZXRcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NTkzOlxcdFxcdCAqIHRoZSB0YXJnZXQgc2VjdG9yIGluIHpsb29wX3F1ZXVlX3JxKCkuXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTU5NC1cXHRcXHQgKi9cXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy02MTItXFx0LyogSW1wbGljaXRseSBvcGVuIHRoZSB0YXJnZXQgem9uZS4gKi9cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NjEzOlxcdGlmICghemxvb3BfZG9fb3Blbl96b25lKHpsbywgem9uZSwgZmFsc2UpKSB7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTYxNC1cXHRcXHRyZXQgPSAtRUlPO1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTYyNS1cXHRcXHRpZiAoem9uZS1cXHUwMDNld3AgPT0gem9uZV9lbmQpXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjYyNjpcXHRcXHRcXHR6bG9vcF9tYXJrX2Z1bGwoemxvLCB6b25lKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNjI3LVxcdH1cXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy02MzItXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjYzMzpzdGF0aWMgdm9pZCB6bG9vcF9ydyhzdHJ1Y3Qgemxvb3BfY21kICpjbWQpXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTYzNC17XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTYzNS1cXHRzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBibGtfbXFfcnFfZnJvbV9wZHUoY21kKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NjM2OlxcdHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyA9IHJxLVxcdTAwM2VxLVxcdTAwM2VxdWV1ZWRhdGE7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTYzNy1cXHR1bnNpZ25lZCBpbnQgem9uZV9ubyA9IHJxX3pvbmVfbm8ocnEpO1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTY0MC1cXHRib29sIGlzX3dyaXRlID0gcmVxX29wKHJxKSA9PSBSRVFfT1BfV1JJVEUgfHwgaXNfYXBwZW5kO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo2NDE6XFx0c3RydWN0IHpsb29wX3pvbmUgKnpvbmU7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTY0Mi1cXHRpbnQgcmV0ID0gLUVJTztcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy02NjctXFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2em9uZS1cXHUwMDNlbG9jayk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjY2ODpcXHRcXHRyZXQgPSB6bG9vcF91cGRhdGVfc2VxX3pvbmUoemxvLCB6b25lX25vKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNjY5LVxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2em9uZS1cXHUwMDNlbG9jayk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNjc1LVxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnpvbmUtXFx1MDAzZWxvY2spO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo2NzY6XFx0XFx0cmV0ID0gemxvb3Bfc2VxX3dyaXRlX3ByZXAoY21kKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNjc3LVxcdFxcdGlmICghcmV0KVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo2Nzg6XFx0XFx0XFx0cmV0ID0gemxvb3BfZG9fcncoY21kKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNjc5LVxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2em9uZS1cXHUwMDNlbG9jayk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTY4MC1cXHR9IGVsc2Uge1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo2ODE6XFx0XFx0cmV0ID0gemxvb3BfZG9fcncoY21kKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNjgyLVxcdH1cXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy02ODQtXFx0aWYgKHJldCAhPSAtRUlPQ0JRVUVVRUQpXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjY4NTpcXHRcXHR6bG9vcF9yd19jb21wbGV0ZShcXHUwMDI2Y21kLVxcdTAwM2Vpb2NiLCByZXQpO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo2ODY6XFx0emxvb3BfcHV0X2NtZChjbWQpO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy02ODctfVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy02ODgtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjY4OTpzdGF0aWMgaW5saW5lIGJvb2wgemxvb3Bfem9uZV9pc19hY3RpdmUoc3RydWN0IHpsb29wX3pvbmUgKnpvbmUpXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTY5MC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzAwLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo3MDE6c3RhdGljIGludCB6bG9vcF9yZWNvcmRfc2FmZV93cHMoc3RydWN0IHpsb29wX2RldmljZSAqemxvKVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03MDIte1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTcwNi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgemxvLVxcdTAwM2Vucl96b25lczsgaSsrKSB7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjcwNzpcXHRcXHRzdHJ1Y3Qgemxvb3Bfem9uZSAqem9uZSA9IFxcdTAwMjZ6bG8tXFx1MDAzZXpvbmVzW2ldO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03MDgtXFx0XFx0c3RydWN0IGZpbGUgKmZpbGUgPSB6b25lLVxcdTAwM2VmaWxlO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03MDktXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjcxMDpcXHRcXHRpZiAoIXpsb29wX3pvbmVfaXNfYWN0aXZlKHpvbmUpKVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03MTEtXFx0XFx0XFx0Y29udGludWU7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTcxMi1cXHRcXHRyZXQgPSB2ZnNfc2V0eGF0dHIoZmlsZV9tbnRfaWRtYXAoZmlsZSksIGZpbGVfZGVudHJ5KGZpbGUpLFxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo3MTM6XFx0XFx0XFx0XFx0XFxcInVzZXIuemxvb3Aud3BcXFwiLCBcXHUwMDI2em9uZS1cXHUwMDNld3AsIHNpemVvZih6b25lLVxcdTAwM2V3cCksIDApO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03MTQtXFx0XFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTcyNi0gKi9cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NzI3OnN0YXRpYyBpbnQgemxvb3BfZmx1c2goc3RydWN0IHpsb29wX2RldmljZSAqemxvKVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03Mjgte1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTczMi1cXHRpZiAoemxvLVxcdTAwM2VkaXNjYXJkX3dyaXRlX2NhY2hlKSB7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjczMzpcXHRcXHRyZXQgPSB6bG9vcF9yZWNvcmRfc2FmZV93cHMoemxvKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzM0LVxcdFxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzQ0LVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo3NDU6c3RhdGljIHZvaWQgemxvb3BfaGFuZGxlX2NtZChzdHJ1Y3Qgemxvb3BfY21kICpjbWQpXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc0Ni17XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc0Ny1cXHRzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBibGtfbXFfcnFfZnJvbV9wZHUoY21kKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NzQ4OlxcdHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyA9IHJxLVxcdTAwM2VxLVxcdTAwM2VxdWV1ZWRhdGE7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc0OS1cXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03NTgtXFx0XFx0LypcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NzU5OlxcdFxcdCAqIHpsb29wX3J3KCkgYWx3YXlzIGV4ZWN1dGVzIGFzeW5jaHJvbm91c2x5IG9yIGNvbXBsZXRlc1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03NjAtXFx0XFx0ICogZGlyZWN0bHkuXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc2MS1cXHRcXHQgKi9cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NzYyOlxcdFxcdHpsb29wX3J3KGNtZCk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc2My1cXHRcXHRyZXR1cm47XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc2NC1cXHRjYXNlIFJFUV9PUF9GTFVTSDpcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NzY1OlxcdFxcdGNtZC1cXHUwMDNlcmV0ID0gemxvb3BfZmx1c2goemxvKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzY2LVxcdFxcdGJyZWFrO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03NjctXFx0Y2FzZSBSRVFfT1BfWk9ORV9SRVNFVDpcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NzY4OlxcdFxcdGNtZC1cXHUwMDNlcmV0ID0gemxvb3BfcmVzZXRfem9uZSh6bG8sIHJxX3pvbmVfbm8ocnEpKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzY5LVxcdFxcdGJyZWFrO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03NzAtXFx0Y2FzZSBSRVFfT1BfWk9ORV9SRVNFVF9BTEw6XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjc3MTpcXHRcXHRjbWQtXFx1MDAzZXJldCA9IHpsb29wX3Jlc2V0X2FsbF96b25lcyh6bG8pO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03NzItXFx0XFx0YnJlYWs7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc3My1cXHRjYXNlIFJFUV9PUF9aT05FX0ZJTklTSDpcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6Nzc0OlxcdFxcdGNtZC1cXHUwMDNlcmV0ID0gemxvb3BfZmluaXNoX3pvbmUoemxvLCBycV96b25lX25vKHJxKSk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc3NS1cXHRcXHRicmVhaztcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzc2LVxcdGNhc2UgUkVRX09QX1pPTkVfT1BFTjpcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6Nzc3OlxcdFxcdGNtZC1cXHUwMDNlcmV0ID0gemxvb3Bfb3Blbl96b25lKHpsbywgcnFfem9uZV9ubyhycSkpO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03NzgtXFx0XFx0YnJlYWs7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc3OS1cXHRjYXNlIFJFUV9PUF9aT05FX0NMT1NFOlxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo3ODA6XFx0XFx0Y21kLVxcdTAwM2VyZXQgPSB6bG9vcF9jbG9zZV96b25lKHpsbywgcnFfem9uZV9ubyhycSkpO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03ODEtXFx0XFx0YnJlYWs7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzkxLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo3OTI6c3RhdGljIHZvaWQgemxvb3BfY21kX3dvcmtmbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc5My17XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjc5NDpcXHRzdHJ1Y3Qgemxvb3BfY21kICpjbWQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHpsb29wX2NtZCwgd29yayk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc5NS1cXHRpbnQgb3JpZ19mbGFncyA9IGN1cnJlbnQtXFx1MDAzZWZsYWdzO1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc5Ny1cXHRjdXJyZW50LVxcdTAwM2VmbGFncyB8PSBQRl9MT0NBTF9USFJPVFRMRSB8IFBGX01FTUFMTE9DX05PSU87XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjc5ODpcXHR6bG9vcF9oYW5kbGVfY21kKGNtZCk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc5OS1cXHRjdXJyZW50LVxcdTAwM2VmbGFncyA9IG9yaWdfZmxhZ3M7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtODAxLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo4MDI6c3RhdGljIHZvaWQgemxvb3BfY29tcGxldGVfcnEoc3RydWN0IHJlcXVlc3QgKnJxKVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy04MDMte1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo4MDQ6XFx0c3RydWN0IHpsb29wX2NtZCAqY21kID0gYmxrX21xX3JxX3RvX3BkdShycSk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjgwNTpcXHRzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8gPSBycS1cXHUwMDNlcS1cXHUwMDNlcXVldWVkYXRhO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy04MDYtXFx0dW5zaWduZWQgaW50IHpvbmVfbm8gPSBjbWQtXFx1MDAzZXNlY3RvciBcXHUwMDNlXFx1MDAzZSB6bG8tXFx1MDAzZXpvbmVfc2hpZnQ7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjgwNzpcXHRzdHJ1Y3Qgemxvb3Bfem9uZSAqem9uZSA9IFxcdTAwMjZ6bG8tXFx1MDAzZXpvbmVzW3pvbmVfbm9dO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy04MDgtXFx0YmxrX3N0YXR1c190IHN0cyA9IEJMS19TVFNfT0s7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtODU5LVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo4NjA6c3RhdGljIGJvb2wgemxvb3Bfc2V0X3pvbmVfYXBwZW5kX3NlY3RvcihzdHJ1Y3QgcmVxdWVzdCAqcnEpXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTg2MS17XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjg2MjpcXHRzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8gPSBycS1cXHUwMDNlcS1cXHUwMDNlcXVldWVkYXRhO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy04NjMtXFx0dW5zaWduZWQgaW50IHpvbmVfbm8gPSBycV96b25lX25vKHJxKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6ODY0OlxcdHN0cnVjdCB6bG9vcF96b25lICp6b25lID0gXFx1MDAyNnpsby1cXHUwMDNlem9uZXNbem9uZV9ub107XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTg2NS1cXHRzZWN0b3JfdCB6b25lX2VuZCA9IHpvbmUtXFx1MDAzZXN0YXJ0ICsgemxvLVxcdTAwM2V6b25lX2NhcGFjaXR5O1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTg3OC1cXHRpZiAoem9uZS1cXHUwMDNld3AgXFx1MDAzZT0gem9uZV9lbmQpXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjg3OTpcXHRcXHR6bG9vcF9tYXJrX2Z1bGwoemxvLCB6b25lKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtODgwLVxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTg4NS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6ODg2OnN0YXRpYyBibGtfc3RhdHVzX3Qgemxvb3BfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTg4Ny1cXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgYmxrX21xX3F1ZXVlX2RhdGEgKmJkKVxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTg4OS1cXHRzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBiZC1cXHUwMDNlcnE7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjg5MDpcXHRzdHJ1Y3Qgemxvb3BfY21kICpjbWQgPSBibGtfbXFfcnFfdG9fcGR1KHJxKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6ODkxOlxcdHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyA9IHJxLVxcdTAwM2VxLVxcdTAwM2VxdWV1ZWRhdGE7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTg5Mi1cXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy05MDMtXFx0aWYgKHpsby1cXHUwMDNlb3JkZXJlZF96b25lX2FwcGVuZCBcXHUwMDI2XFx1MDAyNiByZXFfb3AocnEpID09IFJFUV9PUF9aT05FX0FQUEVORCkge1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo5MDQ6XFx0XFx0aWYgKCF6bG9vcF9zZXRfem9uZV9hcHBlbmRfc2VjdG9yKHJxKSlcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTA1LVxcdFxcdFxcdHJldHVybiBCTEtfU1RTX0lPRVJSO1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTkwOS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6OTEwOlxcdElOSVRfV09SSyhcXHUwMDI2Y21kLVxcdTAwM2V3b3JrLCB6bG9vcF9jbWRfd29ya2ZuKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTExLVxcdHF1ZXVlX3dvcmsoemxvLVxcdTAwM2V3b3JrcXVldWUsIFxcdTAwMjZjbWQtXFx1MDAzZXdvcmspO1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTkxNS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6OTE2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxrX21xX29wcyB6bG9vcF9tcV9vcHMgPSB7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjkxNzpcXHQucXVldWVfcnEgICAgICAgPSB6bG9vcF9xdWV1ZV9ycSxcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6OTE4OlxcdC5jb21wbGV0ZVxcdD0gemxvb3BfY29tcGxldGVfcnEsXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTkxOS19O1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy05MjAtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjkyMTpzdGF0aWMgaW50IHpsb29wX29wZW4oc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJsa19tb2RlX3QgbW9kZSlcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTIyLXtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6OTIzOlxcdHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyA9IGRpc2stXFx1MDAzZXByaXZhdGVfZGF0YTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTI0LVxcdGludCByZXQ7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTkyNS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6OTI2OlxcdHJldCA9IG11dGV4X2xvY2tfa2lsbGFibGUoXFx1MDAyNnpsb29wX2N0bF9tdXRleCk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTkyNy1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTkzMS1cXHRcXHRyZXQgPSAtRU5YSU87XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjkzMjpcXHRtdXRleF91bmxvY2soXFx1MDAyNnpsb29wX2N0bF9tdXRleCk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTkzMy1cXHRyZXR1cm4gcmV0O1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTkzNS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6OTM2OnN0YXRpYyBpbnQgemxvb3BfcmVwb3J0X3pvbmVzKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBzZWN0b3JfdCBzZWN0b3IsXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTkzNy1cXHRcXHR1bnNpZ25lZCBpbnQgbnJfem9uZXMsIHN0cnVjdCBibGtfcmVwb3J0X3pvbmVzX2FyZ3MgKmFyZ3MpXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTkzOC17XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjkzOTpcXHRzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8gPSBkaXNrLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTk0MC1cXHRzdHJ1Y3QgYmxrX3pvbmUgYmxreiA9IHt9O1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTk1MC1cXHRcXHR1bnNpZ25lZCBpbnQgem9uZV9ubyA9IGZpcnN0ICsgaTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6OTUxOlxcdFxcdHN0cnVjdCB6bG9vcF96b25lICp6b25lID0gXFx1MDAyNnpsby1cXHUwMDNlem9uZXNbem9uZV9ub107XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTk1Mi1cXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy05NTUtXFx0XFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChaTE9PUF9aT05FX1NFUV9FUlJPUiwgXFx1MDAyNnpvbmUtXFx1MDAzZWZsYWdzKSkge1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo5NTY6XFx0XFx0XFx0cmV0ID0gemxvb3BfdXBkYXRlX3NlcV96b25lKHpsbywgem9uZV9ubyk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTk1Ny1cXHRcXHRcXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTg2LVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo5ODc6c3RhdGljIHZvaWQgemxvb3BfZnJlZV9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy05ODgte1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo5ODk6XFx0c3RydWN0IHpsb29wX2RldmljZSAqemxvID0gZGlzay1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy05OTAtXFx0dW5zaWduZWQgaW50IGk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTk0LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB6bG8tXFx1MDAzZW5yX3pvbmVzOyBpKyspIHtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6OTk1OlxcdFxcdHN0cnVjdCB6bG9vcF96b25lICp6b25lID0gXFx1MDAyNnpsby1cXHUwMDNlem9uZXNbaV07XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTk5Ni1cXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDA3LVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMDA4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgemxvb3BfZm9wcyA9IHtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTAwOS1cXHQub3duZXJcXHRcXHRcXHQ9IFRISVNfTU9EVUxFLFxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMDEwOlxcdC5vcGVuXFx0XFx0XFx0PSB6bG9vcF9vcGVuLFxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMDExOlxcdC5yZXBvcnRfem9uZXNcXHRcXHQ9IHpsb29wX3JlcG9ydF96b25lcyxcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTAxMjpcXHQuZnJlZV9kaXNrXFx0XFx0PSB6bG9vcF9mcmVlX2Rpc2ssXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwMTMtfTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYz0xMDE1PV9fcHJpbnRmKDMsIDQpXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEwMTY6c3RhdGljIHN0cnVjdCBmaWxlICp6bG9vcF9maWxwX29wZW5fZm10KGludCBvZmxhZ3MsIHVtb2RlX3QgbW9kZSxcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTAxNy1cXHRcXHRjb25zdCBjaGFyICpmbXQsIC4uLilcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDMzLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMDM0OnN0YXRpYyBpbnQgemxvb3BfZ2V0X2Jsb2NrX3NpemUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLFxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMDM1OlxcdFxcdFxcdFxcdHN0cnVjdCB6bG9vcF96b25lICp6b25lKVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDM2LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDc0LVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMDc1OnN0YXRpYyBpbnQgemxvb3BfaW5pdF96b25lKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbywgc3RydWN0IHpsb29wX29wdGlvbnMgKm9wdHMsXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwNzYtXFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IHpvbmVfbm8sIGJvb2wgcmVzdG9yZSlcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTA3Ny17XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEwNzg6XFx0c3RydWN0IHpsb29wX3pvbmUgKnpvbmUgPSBcXHUwMDI2emxvLVxcdTAwM2V6b25lc1t6b25lX25vXTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTA3OS1cXHRpbnQgb2ZsYWdzID0gT19SRFdSO1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExMDAtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjExMDE6XFx0XFx0em9uZS1cXHUwMDNlZmlsZSA9IHpsb29wX2ZpbHBfb3Blbl9mbXQob2ZsYWdzLCAwNjAwLCBcXFwiJXMvJXUvY252LSUwNnVcXFwiLFxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTAyLVxcdFxcdFxcdFxcdFxcdHpsby1cXHUwMDNlYmFzZV9kaXIsIHpsby1cXHUwMDNlaWQsIHpvbmVfbm8pO1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExMTAtXFx0XFx0aWYgKCF6bG8tXFx1MDAzZWJsb2NrX3NpemUpIHtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTExMTpcXHRcXHRcXHRyZXQgPSB6bG9vcF9nZXRfYmxvY2tfc2l6ZSh6bG8sIHpvbmUpO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTEyLVxcdFxcdFxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE0MC1cXHQvKiBTZXF1ZW50aWFsIHpvbmUgZmlsZS4gKi9cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTE0MTpcXHR6b25lLVxcdTAwM2VmaWxlID0gemxvb3BfZmlscF9vcGVuX2ZtdChvZmxhZ3MsIDA2MDAsIFxcXCIlcy8ldS9zZXEtJTA2dVxcXCIsXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExNDItXFx0XFx0XFx0XFx0XFx0IHpsby1cXHUwMDNlYmFzZV9kaXIsIHpsby1cXHUwMDNlaWQsIHpvbmVfbm8pO1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExNTAtXFx0aWYgKCF6bG8tXFx1MDAzZWJsb2NrX3NpemUpIHtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTE1MTpcXHRcXHRyZXQgPSB6bG9vcF9nZXRfYmxvY2tfc2l6ZSh6bG8sIHpvbmUpO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTUyLVxcdFxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE1NS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTE1NjpcXHR6bG9vcF9nZXRfYmxvY2tfc2l6ZSh6bG8sIHpvbmUpO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTU3LVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTU4LVxcdG11dGV4X2xvY2soXFx1MDAyNnpvbmUtXFx1MDAzZWxvY2spO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMTU5OlxcdHJldCA9IHpsb29wX3VwZGF0ZV9zZXFfem9uZSh6bG8sIHpvbmVfbm8pO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTYwLVxcdG11dGV4X3VubG9jayhcXHUwMDI2em9uZS1cXHUwMDNlbG9jayk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE2NC1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTE2NTpzdGF0aWMgYm9vbCB6bG9vcF9kZXZfZXhpc3RzKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbylcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE2Ni17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE2OS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTE3MDpcXHRjbnYgPSB6bG9vcF9maWxwX29wZW5fZm10KE9fUkRPTkxZLCAwNjAwLCBcXFwiJXMvJXUvY252LSUwNnVcXFwiLFxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTcxLVxcdFxcdFxcdFxcdCAgemxvLVxcdTAwM2ViYXNlX2RpciwgemxvLVxcdTAwM2VpZCwgMCk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjExNzI6XFx0c2VxID0gemxvb3BfZmlscF9vcGVuX2ZtdChPX1JET05MWSwgMDYwMCwgXFxcIiVzLyV1L3NlcS0lMDZ1XFxcIixcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE3My1cXHRcXHRcXHRcXHQgIHpsby1cXHUwMDNlYmFzZV9kaXIsIHpsby1cXHUwMDNlaWQsIDApO1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExODMtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjExODQ6c3RhdGljIGludCB6bG9vcF9jdGxfYWRkKHN0cnVjdCB6bG9vcF9vcHRpb25zICpvcHRzKVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTg1LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTkyLVxcdHVuc2lnbmVkIGludCBucl96b25lcywgaSwgajtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTE5MzpcXHRzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG87XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExOTQtXFx0aW50IHJldCA9IC1FSU5WQUw7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTIyMC1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTIyMTpcXHRyZXQgPSBtdXRleF9sb2NrX2tpbGxhYmxlKFxcdTAwMjZ6bG9vcF9jdGxfbXV0ZXgpO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMjIyLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTIyNi1cXHRpZiAob3B0cy1cXHUwMDNlaWQgXFx1MDAzZT0gMCkge1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMjI3OlxcdFxcdHJldCA9IGlkcl9hbGxvYyhcXHUwMDI2emxvb3BfaW5kZXhfaWRyLCB6bG8sXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEyMjgtXFx0XFx0XFx0XFx0ICBvcHRzLVxcdTAwM2VpZCwgb3B0cy1cXHUwMDNlaWQgKyAxLCBHRlBfS0VSTkVMKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMjMxLVxcdH0gZWxzZSB7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEyMzI6XFx0XFx0cmV0ID0gaWRyX2FsbG9jKFxcdTAwMjZ6bG9vcF9pbmRleF9pZHIsIHpsbywgMCwgMCwgR0ZQX0tFUk5FTCk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEyMzMtXFx0fVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMjM0OlxcdG11dGV4X3VubG9jayhcXHUwMDI2emxvb3BfY3RsX211dGV4KTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTIzNS1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMjUzLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMjU0OlxcdHpsby1cXHUwMDNld29ya3F1ZXVlID0gYWxsb2Nfd29ya3F1ZXVlKFxcXCJ6bG9vcCVkXFxcIiwgV1FfVU5CT1VORCB8IFdRX0ZSRUVaQUJMRSxcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTI1NS1cXHRcXHRcXHRcXHRvcHRzLVxcdTAwM2Vucl9xdWV1ZXMgKiBvcHRzLVxcdTAwM2VxdWV1ZV9kZXB0aCwgemxvLVxcdTAwM2VpZCk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTI2OS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTI3MDpcXHR6bG8tXFx1MDAzZWRhdGFfZGlyID0gemxvb3BfZmlscF9vcGVuX2ZtdChPX1JET05MWSB8IE9fRElSRUNUT1JZLCAwLCBcXFwiJXMvJXVcXFwiLFxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMjcxLVxcdFxcdFxcdFxcdFxcdCAgICB6bG8tXFx1MDAzZWJhc2VfZGlyLCB6bG8tXFx1MDAzZWlkKTtcXG4tLVxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxNzo0MjozMi4yNzY3ODE2NzVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjQ4MjI3NjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgWm9uZWQgTG9vcCBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGUgcGF0Y2ggaXMgZGVmaW5pdGVseSB3b3JraW5nIHdpdGggYHpsb29wYCDigJMgZ29vZCwgaXQncyBhIHJlYWwgZHJpdmVyIHdlJ3JlIGRlYWxpbmcgd2l0aCBoZXJlLiBBbmQgaXQncyBub3QganVzdCB0aGF0LCBpdCdzIGFsc28gdG91Y2hpbmcgdGhlIHN0YW5kYXJkIGBsb29wYCBkcml2ZXIsIHdoaWNoIG1ha2VzIHNlbnNlIGZvciBjb21wYXRpYmlsaXR5LCBJIHN1cHBvc2UuIFRoZSBtb2RpZmljYXRpb25zIGV4dGVuZCBmdXJ0aGVyLCB0aG91Z2g7IHRoaXMgZ2V0cyBpbnRlcmVzdGluZy4gSSBzZWUgaXQncyBhbHNvIG1ha2luZyBjaGFuZ2VzIHRvIGBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzYCBhbmQgYGlvdl9pdGVyX2V4dHJhY3RfYnZlY3NgLiBUaGlzIHN1Z2dlc3RzIHRoZSBwYXRjaCBpcyBsaWtlbHkgZGVhbGluZyB3aXRoIGRhdGEgdHJhbnNmZXIgbWVjaGFuaXNtcyBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCBib3RoIHRoZSBsb29wIGFuZCB6b25lZCBsb29wIGJsb2NrIGRldmljZXMgYXQgYSBsb3dlciBsZXZlbC5cblxuTm93LCBJIG5lZWQgdG8gbG9vayBhdCB0aGUgY29uZmlndXJhdGlvbnMgcmVxdWlyZWQuIFRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3MgYXJlIGBDT05GSUdfQkxLX0RFVl9MT09QYCBhbmQgYENPTkZJR19CTEtfREVWX1pPTkVEX0xPT1BgLCBhcyBleHBlY3RlZC4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBgQ09ORklHX0JMS19ERVZfWk9ORURfTE9PUGAgd2l0aGluIHRoZSBgZHJpdmVycy9ibG9jay9LY29uZmlnYCBmaWxlLiBUaGF0IHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBicm9hZGVyIGNvbnRleHQgYW5kIGRlcGVuZGVuY2llcyBvZiB0aGlzIG5ldyBmdW5jdGlvbmFsaXR5LCBhbmQgZW5zdXJlIGV2ZXJ5dGhpbmcgaXMgc2V0IHVwIGNvcnJlY3RseSBpbiB0aGUgYnVpbGQgZW52aXJvbm1lbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgem9uaW5nIGltcGxlbWVudGF0aW9uIHRvIHZlcmlmeSB0aGF0IGl0J3MgZGVzaWduZWQgaW4gYSBwZXJmb3JtYW50IGFuZCBjb21wYXRpYmxlIHdheS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg4NjIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTc6NDI6MzYuNTI1MDEyMzM5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4Mjk5NzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfREVWX1pPTkVEX0xPT1BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnPTM1ND1zb3VyY2UgXFxcImRyaXZlcnMvYmxvY2svcm5iZC9LY29uZmlnXFxcIlxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zNTUtXFxuZHJpdmVycy9ibG9jay9LY29uZmlnOjM1Njpjb25maWcgQkxLX0RFVl9aT05FRF9MT09QXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTM1Ny1cXHR0cmlzdGF0ZSBcXFwiWm9uZWQgbG9vcGJhY2sgZGV2aWNlIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDE3OjQyOjM2LjU5MzMxOTEwN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzNjA4MDE2NDUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRm9jdXMgZm9yIEJsb2NrIExheWVyIERpcmVjdCBJL08gYW5kIExvb3AgRHJpdmVycyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGFyZWFzIGFuZCBjb25maWd1cmF0aW9ucyBmb3IgZnV6emluZyB0aGlzIGRpcmVjdCBJL08gbG9naWMsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGJsb2NrIGxheWVyIGFuZCBsb29wIGRyaXZlcnMuICBJJ3ZlIGFscmVhZHkgaWRlbnRpZmllZCB0d28gY29uZmlndXJhdGlvbnMgdGhhdCBzZWVtIHJlbGV2YW50OiBgQkxLX0RFVl9MT09QYCBhbmQgYEJMS19ERVZfWk9ORURfTE9PUGAuIEknbSBvbWl0dGluZyBgREVCVUdfS0VSTkVMYCBhcyB0aGUgcHJvbXB0IGluZGljYXRlcyBpdCBpcyBhIG1vcmUgZ2VuZXJhbCBjb25maWcgdGhhdCB3ZSBsaWtlbHkgYWxyZWFkeSBoYXZlIGVuYWJsZWQuXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMuIEluaXRpYWxseSwgSSBoYWQgYSBsaXN0LCBidXQgaXQncyBpbXBvcnRhbnQgdG8gcmVmaW5lIHRoaXMuICBJ4oCZdmUgaWRlbnRpZmllZCBgYmlvX2lvdl9pdGVyX2dldF9wYWdlc2AsIGBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzYCwgYGxvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnRgLCBgbG9vcF9zZXRfZG1hX2xpbWl0YCwgYHpsb29wX2dldF9ibG9ja19zaXplYCwgYW5kIGB6bG9vcF9jdGxfYWRkYCBhcyBwb3RlbnRpYWwgZm9jdXMgc3ltYm9scy4gSSBhbHNvIHNwb3R0ZWQgYGJpb19pb3ZfYnZlY19hbGlnbmVkYCwgYnV0IHNpbmNlIGl0J3MgYW4gaW5saW5lIGZ1bmN0aW9uLCBpdCdzIHByb2JhYmx5IG5vdCBhcyBpbXBhY3RmdWwgZm9yIGZ1enppbmcgYXMgYW4gZXhwb3J0ZWQgb25lLiBUaGVyZWZvcmUsIEnigJltIGRyb3BwaW5nIGl0LlxuXG5JJ3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSByZXN0IGFyZSBzdGF0aWMgd2l0aGluIHRoZSBsb29wIGFuZCB6bG9vcCBkcml2ZXJzIGJ1dCBleHBvcnRlZCBmcm9tIHRoZWlyIHJlc3BlY3RpdmUgZmlsZXMsIHdoaWNoIG1ha2VzIHRoZW0gZ29vZCBjYW5kaWRhdGVzLiBgYmlvX2lvdl9pdGVyX2dldF9wYWdlc2AgaXMgZXhwb3J0ZWQgYW5kIHVzZWQgdGhyb3VnaG91dCB0aGUgYmxvY2sgbGF5ZXIsIGFuZCBgaW92X2l0ZXJfZXh0cmFjdF9idmVjc2AgaXMgYWxzbyBleHBvcnRlZC4gIFRoaXMgbWFrZXMgdGhlbSBwcmltZSB0YXJnZXRzLiBUaGUgbG9vcCBhbmQgemxvb3AgZnVuY3Rpb25zIGFyZSBhbHNvIGNyaXRpY2FsLCBiZWNhdXNlIHRoZXkgaGFuZGxlIHRoZSBkYXRhIHBhdGggbW9kaWZpY2F0aW9ucy5cblxuU28sIGhlcmUncyB0aGUgZmluYWwgbGlzdDpcblxuKipDb25maWd1cmF0aW9uczoqKlxuKiAgIGBCTEtfREVWX0xPT1BgXG4qICAgYEJMS19ERVZfWk9ORURfTE9PUGBcblxuKipGb2N1cyBTeW1ib2xzOioqXG4qICAgYGJpb19pb3ZfaXRlcl9nZXRfcGFnZXNgXG4qICAgYGlvdl9pdGVyX2V4dHJhY3RfYnZlY3NgXG4qICAgYGxvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnRgXG4qICAgYGxvb3Bfc2V0X2RtYV9saW1pdGBcbiogICBgemxvb3BfZ2V0X2Jsb2NrX3NpemVgXG4qICAgYHpsb29wX2N0bF9hZGRgXG5cblRoZSBwYXRjaCBpcyB0b3VjaGluZyBjb3JlIGJsb2NrIGxheWVyIGZ1bmN0aW9uYWxpdHksIGFuZCBJL08gYW5kIGFsaWdubWVudCwgc28gdGhlc2UgYXJlIHRoZSBhcmVhcyB0byBob25lIGluIG9uLiBJdCBhbHNvIHVwZGF0ZXMgdGhlIGxvb3AgZHJpdmVycywgc28gdGhvc2UgZnVuY3Rpb25zIHdpbGwgbmVlZCB0byBiZSB3ZWxsLWNvdmVyZWQgaW4gdGVzdGluZy4gVGhpcyBzZWVtcyBsaWtlIGEgc29saWQgc2V0IG9mIHRhcmdldHMgZm9yIGZ1enppbmcgdG8gdW5jb3ZlciBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gYWxpZ25tZW50IGNoZWNrcyBhbmQgRE1BIGxpbWl0cywgcGFydGljdWxhcmx5IGluIHRoZSBjb250ZXh0IG9mIGRpcmVjdCBJL08gd2l0aGluIHRoZSBibG9jayBsYXllciBhbmQgbG9vcCBkcml2ZXJzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTM3MCwiT3V0cHV0VG9rZW5zIjoyMDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDkzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDE3OjQyOjUwLjIwMTMzNzczOVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQ1NzQwNjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTE9PUFwiLFxuICAgIFwiQkxLX0RFVl9aT05FRF9MT09QXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmlvX2lvdl9pdGVyX2dldF9wYWdlc1wiLFxuICAgIFwiaW92X2l0ZXJfZXh0cmFjdF9idmVjc1wiLFxuICAgIFwibG9vcF91cGRhdGVfZGlvX2FsaWdubWVudFwiLFxuICAgIFwibG9vcF9zZXRfZG1hX2xpbWl0XCIsXG4gICAgXCJ6bG9vcF9nZXRfYmxvY2tfc2l6ZVwiLFxuICAgIFwiemxvb3BfY3RsX2FkZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGJsb2NrIGxheWVyIGRpcmVjdCBJL08gbG9naWMgdG8gZW5mb3JjZSBtZW1vcnkgYWxpZ25tZW50IGNoZWNrcyB2aWEgYGJpb19pb3ZfaXRlcl9nZXRfcGFnZXNgIGFuZCBgaW92X2l0ZXJfZXh0cmFjdF9idmVjc2AuIEl0IGFsc28gdXBkYXRlcyB0aGUgYGxvb3BgIGFuZCBgemxvb3BgIGRyaXZlcnMgdG8gY29ycmVjdGx5IHNldCBETUEgbGltaXRzIGJhc2VkIG9uIHRoZSBiYWNraW5nIGZpbGUncyBkaXJlY3QgSS9PIGFsaWdubWVudC4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSBibG9jayBsYXllciBmdW5jdGlvbmFsaXR5IGFuZCBkcml2ZXIgYmVoYXZpb3IsIG1ha2luZyB0aGVtIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX0xPT1BcIixcbiAgICBcIkJMS19ERVZfWk9ORURfTE9PUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJpb19pb3ZfaXRlcl9nZXRfcGFnZXNcIixcbiAgICBcImlvdl9pdGVyX2V4dHJhY3RfYnZlY3NcIixcbiAgICBcImxvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnRcIixcbiAgICBcImxvb3Bfc2V0X2RtYV9saW1pdFwiLFxuICAgIFwiemxvb3BfZ2V0X2Jsb2NrX3NpemVcIixcbiAgICBcInpsb29wX2N0bF9hZGRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBibG9jayBsYXllciBkaXJlY3QgSS9PIGxvZ2ljIHRvIGVuZm9yY2UgbWVtb3J5IGFsaWdubWVudCBjaGVja3MgdmlhIGBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzYCBhbmQgYGlvdl9pdGVyX2V4dHJhY3RfYnZlY3NgLiBJdCBhbHNvIHVwZGF0ZXMgdGhlIGBsb29wYCBhbmQgYHpsb29wYCBkcml2ZXJzIHRvIGNvcnJlY3RseSBzZXQgRE1BIGxpbWl0cyBiYXNlZCBvbiB0aGUgYmFja2luZyBmaWxlJ3MgZGlyZWN0IEkvTyBhbGlnbm1lbnQuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgYmxvY2sgbGF5ZXIgZnVuY3Rpb25hbGl0eSBhbmQgZHJpdmVyIGJlaGF2aW9yLCBtYWtpbmcgdGhlbSBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowlrbzn[1] Phase: Succeeded StartedAt: 2026-06-24 17:43:27 +0000 UTC FinishedAt: 2026-06-24 17:43:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlrbzn[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-24 17:43:27 +0000 UTC FinishedAt: 2026-06-24 17:43:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlrbzn[2] Phase: Succeeded StartedAt: 2026-06-24 17:43:27 +0000 UTC FinishedAt: 2026-06-24 21:41:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlrbzn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c7804e3279c9bdc36e5eac743b4000633b25f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_get_pages","iov_iter_extract_bvecs","loop_update_dio_alignment","loop_set_dma_limit","zloop_get_block_size","zloop_ctl_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c7804e3279c9bdc36e5eac743b4000633b25f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP"],"series_id":"34e23873-7e4a-4f53-b8d3-6caac0785b84","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-24 17:43:27 +0000 UTC FinishedAt: 2026-06-24 21:41:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"5c7804e3279c9bdc36e5eac743b4000633b25f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_get_pages","iov_iter_extract_bvecs","loop_update_dio_alignment","loop_set_dma_limit","zloop_get_block_size","zloop_ctl_add"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"5c7804e3279c9bdc36e5eac743b4000633b25f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP"],"series_id":"34e23873-7e4a-4f53-b8d3-6caac0785b84","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowlrbzn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c7804e3279c9bdc36e5eac743b4000633b25f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_get_pages","iov_iter_extract_bvecs","loop_update_dio_alignment","loop_set_dma_limit","zloop_get_block_size","zloop_ctl_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c7804e3279c9bdc36e5eac743b4000633b25f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP"],"series_id":"34e23873-7e4a-4f53-b8d3-6caac0785b84","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-24 17:43:27 +0000 UTC FinishedAt: 2026-06-24 17:43:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlrbzn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c7804e3279c9bdc36e5eac743b4000633b25f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_get_pages","iov_iter_extract_bvecs","loop_update_dio_alignment","loop_set_dma_limit","zloop_get_block_size","zloop_ctl_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c7804e3279c9bdc36e5eac743b4000633b25f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP"],"series_id":"34e23873-7e4a-4f53-b8d3-6caac0785b84","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-24 17:43:27 +0000 UTC FinishedAt: 2026-06-24 17:43:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5c7804e3279c9bdc36e5eac743b4000633b25f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowlrbzn/series-workflowlrbzn-convert-artifact-2278644560/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlrbzn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c7804e3279c9bdc36e5eac743b4000633b25f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_get_pages","iov_iter_extract_bvecs","loop_update_dio_alignment","loop_set_dma_limit","zloop_get_block_size","zloop_ctl_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c7804e3279c9bdc36e5eac743b4000633b25f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP"],"series_id":"34e23873-7e4a-4f53-b8d3-6caac0785b84","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-24 17:43:48 +0000 UTC FinishedAt: 2026-06-24 18:08:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlrbzn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c7804e3279c9bdc36e5eac743b4000633b25f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_get_pages","iov_iter_extract_bvecs","loop_update_dio_alignment","loop_set_dma_limit","zloop_get_block_size","zloop_ctl_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c7804e3279c9bdc36e5eac743b4000633b25f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP"],"series_id":"34e23873-7e4a-4f53-b8d3-6caac0785b84","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-24 17:43:48 +0000 UTC FinishedAt: 2026-06-24 18:08:34 +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:*9136e7bd-d411-4cbd-b32b-f920299fcfb2,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-workflowlrbzn/series-workflowlrbzn-convert-artifact-2278644560/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": "b40933ce-1989-49a9-8424-7685331c352a", "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-workflowlrbzn/series-workflowlrbzn-build-action-3393472982/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlrbzn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c7804e3279c9bdc36e5eac743b4000633b25f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_get_pages","iov_iter_extract_bvecs","loop_update_dio_alignment","loop_set_dma_limit","zloop_get_block_size","zloop_ctl_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c7804e3279c9bdc36e5eac743b4000633b25f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP"],"series_id":"34e23873-7e4a-4f53-b8d3-6caac0785b84","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-24 17:43:48 +0000 UTC FinishedAt: 2026-06-24 18:06:38 +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:*9136e7bd-d411-4cbd-b32b-f920299fcfb2,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-workflowlrbzn/series-workflowlrbzn-convert-artifact-2278644560/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": "b40933ce-1989-49a9-8424-7685331c352a", "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-workflowlrbzn/series-workflowlrbzn-build-action-3393472982/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlrbzn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c7804e3279c9bdc36e5eac743b4000633b25f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_get_pages","iov_iter_extract_bvecs","loop_update_dio_alignment","loop_set_dma_limit","zloop_get_block_size","zloop_ctl_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c7804e3279c9bdc36e5eac743b4000633b25f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP"],"series_id":"34e23873-7e4a-4f53-b8d3-6caac0785b84","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-24 18:08:34 +0000 UTC FinishedAt: 2026-06-24 18:08:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlrbzn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c7804e3279c9bdc36e5eac743b4000633b25f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_get_pages","iov_iter_extract_bvecs","loop_update_dio_alignment","loop_set_dma_limit","zloop_get_block_size","zloop_ctl_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c7804e3279c9bdc36e5eac743b4000633b25f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP"],"series_id":"34e23873-7e4a-4f53-b8d3-6caac0785b84","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-24 18:08:34 +0000 UTC FinishedAt: 2026-06-24 18:08:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlrbzn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c7804e3279c9bdc36e5eac743b4000633b25f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_get_pages","iov_iter_extract_bvecs","loop_update_dio_alignment","loop_set_dma_limit","zloop_get_block_size","zloop_ctl_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c7804e3279c9bdc36e5eac743b4000633b25f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP"],"series_id":"34e23873-7e4a-4f53-b8d3-6caac0785b84","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-24 18:08:34 +0000 UTC FinishedAt: 2026-06-24 18:08:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlrbzn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c7804e3279c9bdc36e5eac743b4000633b25f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_get_pages","iov_iter_extract_bvecs","loop_update_dio_alignment","loop_set_dma_limit","zloop_get_block_size","zloop_ctl_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c7804e3279c9bdc36e5eac743b4000633b25f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP"],"series_id":"34e23873-7e4a-4f53-b8d3-6caac0785b84","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-24 18:08:34 +0000 UTC FinishedAt: 2026-06-24 18:08:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5c7804e3279c9bdc36e5eac743b4000633b25f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP"],"series_id":"34e23873-7e4a-4f53-b8d3-6caac0785b84","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowlrbzn/series-workflowlrbzn-convert-artifact-1250132663/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlrbzn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c7804e3279c9bdc36e5eac743b4000633b25f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_get_pages","iov_iter_extract_bvecs","loop_update_dio_alignment","loop_set_dma_limit","zloop_get_block_size","zloop_ctl_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c7804e3279c9bdc36e5eac743b4000633b25f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP"],"series_id":"34e23873-7e4a-4f53-b8d3-6caac0785b84","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-24 18:08:56 +0000 UTC FinishedAt: 2026-06-24 18:10:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlrbzn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c7804e3279c9bdc36e5eac743b4000633b25f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_get_pages","iov_iter_extract_bvecs","loop_update_dio_alignment","loop_set_dma_limit","zloop_get_block_size","zloop_ctl_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c7804e3279c9bdc36e5eac743b4000633b25f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP"],"series_id":"34e23873-7e4a-4f53-b8d3-6caac0785b84","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-24 18:08:56 +0000 UTC FinishedAt: 2026-06-24 18:10:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b40933ce-1989-49a9-8424-7685331c352a,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-workflowlrbzn/series-workflowlrbzn-build-action-3393472982/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-workflowlrbzn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c7804e3279c9bdc36e5eac743b4000633b25f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_get_pages","iov_iter_extract_bvecs","loop_update_dio_alignment","loop_set_dma_limit","zloop_get_block_size","zloop_ctl_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c7804e3279c9bdc36e5eac743b4000633b25f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP"],"series_id":"34e23873-7e4a-4f53-b8d3-6caac0785b84","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-24 18:10:45 +0000 UTC FinishedAt: 2026-06-24 18:10:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlrbzn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c7804e3279c9bdc36e5eac743b4000633b25f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_get_pages","iov_iter_extract_bvecs","loop_update_dio_alignment","loop_set_dma_limit","zloop_get_block_size","zloop_ctl_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c7804e3279c9bdc36e5eac743b4000633b25f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP"],"series_id":"34e23873-7e4a-4f53-b8d3-6caac0785b84","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-24 18:10:45 +0000 UTC FinishedAt: 2026-06-24 18:10:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlrbzn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c7804e3279c9bdc36e5eac743b4000633b25f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_get_pages","iov_iter_extract_bvecs","loop_update_dio_alignment","loop_set_dma_limit","zloop_get_block_size","zloop_ctl_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c7804e3279c9bdc36e5eac743b4000633b25f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP"],"series_id":"34e23873-7e4a-4f53-b8d3-6caac0785b84","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-24 18:10:45 +0000 UTC FinishedAt: 2026-06-24 18:34:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlrbzn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c7804e3279c9bdc36e5eac743b4000633b25f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_get_pages","iov_iter_extract_bvecs","loop_update_dio_alignment","loop_set_dma_limit","zloop_get_block_size","zloop_ctl_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c7804e3279c9bdc36e5eac743b4000633b25f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP"],"series_id":"34e23873-7e4a-4f53-b8d3-6caac0785b84","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-24 18:10:45 +0000 UTC FinishedAt: 2026-06-24 18:34:36 +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:*9136e7bd-d411-4cbd-b32b-f920299fcfb2,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-workflowlrbzn/series-workflowlrbzn-convert-artifact-1250132663/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": "5f7ff489-0178-4077-ac9b-8b02a82f2d2b", "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-workflowlrbzn/series-workflowlrbzn-build-action-3019301499/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlrbzn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c7804e3279c9bdc36e5eac743b4000633b25f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_get_pages","iov_iter_extract_bvecs","loop_update_dio_alignment","loop_set_dma_limit","zloop_get_block_size","zloop_ctl_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c7804e3279c9bdc36e5eac743b4000633b25f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP"],"series_id":"34e23873-7e4a-4f53-b8d3-6caac0785b84","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-24 18:10:45 +0000 UTC FinishedAt: 2026-06-24 18:32: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:*9136e7bd-d411-4cbd-b32b-f920299fcfb2,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-workflowlrbzn/series-workflowlrbzn-convert-artifact-1250132663/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": "5f7ff489-0178-4077-ac9b-8b02a82f2d2b", "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-workflowlrbzn/series-workflowlrbzn-build-action-3019301499/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlrbzn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c7804e3279c9bdc36e5eac743b4000633b25f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_get_pages","iov_iter_extract_bvecs","loop_update_dio_alignment","loop_set_dma_limit","zloop_get_block_size","zloop_ctl_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c7804e3279c9bdc36e5eac743b4000633b25f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP"],"series_id":"34e23873-7e4a-4f53-b8d3-6caac0785b84","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-24 18:34:36 +0000 UTC FinishedAt: 2026-06-24 18:34:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlrbzn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c7804e3279c9bdc36e5eac743b4000633b25f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_get_pages","iov_iter_extract_bvecs","loop_update_dio_alignment","loop_set_dma_limit","zloop_get_block_size","zloop_ctl_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c7804e3279c9bdc36e5eac743b4000633b25f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP"],"series_id":"34e23873-7e4a-4f53-b8d3-6caac0785b84","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-24 18:34:36 +0000 UTC FinishedAt: 2026-06-24 18:34:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlrbzn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c7804e3279c9bdc36e5eac743b4000633b25f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_get_pages","iov_iter_extract_bvecs","loop_update_dio_alignment","loop_set_dma_limit","zloop_get_block_size","zloop_ctl_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c7804e3279c9bdc36e5eac743b4000633b25f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP"],"series_id":"34e23873-7e4a-4f53-b8d3-6caac0785b84","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-24 18:34:36 +0000 UTC FinishedAt: 2026-06-24 18:36:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlrbzn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c7804e3279c9bdc36e5eac743b4000633b25f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_get_pages","iov_iter_extract_bvecs","loop_update_dio_alignment","loop_set_dma_limit","zloop_get_block_size","zloop_ctl_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c7804e3279c9bdc36e5eac743b4000633b25f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP"],"series_id":"34e23873-7e4a-4f53-b8d3-6caac0785b84","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-24 18:34:36 +0000 UTC FinishedAt: 2026-06-24 18:36:15 +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:*5f7ff489-0178-4077-ac9b-8b02a82f2d2b,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-workflowlrbzn/series-workflowlrbzn-build-action-3019301499/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-workflowlrbzn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c7804e3279c9bdc36e5eac743b4000633b25f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_get_pages","iov_iter_extract_bvecs","loop_update_dio_alignment","loop_set_dma_limit","zloop_get_block_size","zloop_ctl_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c7804e3279c9bdc36e5eac743b4000633b25f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP"],"series_id":"34e23873-7e4a-4f53-b8d3-6caac0785b84","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-24 18:36:25 +0000 UTC FinishedAt: 2026-06-24 21:41:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlrbzn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c7804e3279c9bdc36e5eac743b4000633b25f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_get_pages","iov_iter_extract_bvecs","loop_update_dio_alignment","loop_set_dma_limit","zloop_get_block_size","zloop_ctl_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c7804e3279c9bdc36e5eac743b4000633b25f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP"],"series_id":"34e23873-7e4a-4f53-b8d3-6caac0785b84","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-24 18:36:25 +0000 UTC FinishedAt: 2026-06-24 21:41:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_get_pages","iov_iter_extract_bvecs","loop_update_dio_alignment","loop_set_dma_limit","zloop_get_block_size","zloop_ctl_add"],"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:*b40933ce-1989-49a9-8424-7685331c352a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5f7ff489-0178-4077-ac9b-8b02a82f2d2b,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-workflowlrbzn/series-workflowlrbzn-build-action-3393472982/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-workflowlrbzn/series-workflowlrbzn-build-action-3019301499/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowlrbzn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c7804e3279c9bdc36e5eac743b4000633b25f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_get_pages","iov_iter_extract_bvecs","loop_update_dio_alignment","loop_set_dma_limit","zloop_get_block_size","zloop_ctl_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c7804e3279c9bdc36e5eac743b4000633b25f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP"],"series_id":"34e23873-7e4a-4f53-b8d3-6caac0785b84","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-24 18:36:25 +0000 UTC FinishedAt: 2026-06-24 18:36:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlrbzn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c7804e3279c9bdc36e5eac743b4000633b25f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_get_pages","iov_iter_extract_bvecs","loop_update_dio_alignment","loop_set_dma_limit","zloop_get_block_size","zloop_ctl_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c7804e3279c9bdc36e5eac743b4000633b25f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP"],"series_id":"34e23873-7e4a-4f53-b8d3-6caac0785b84","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-24 18:36:25 +0000 UTC FinishedAt: 2026-06-24 18:36:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_get_pages","iov_iter_extract_bvecs","loop_update_dio_alignment","loop_set_dma_limit","zloop_get_block_size","zloop_ctl_add"],"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-workflowlrbzn/series-workflowlrbzn-convert-artifact-3574408944/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlrbzn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c7804e3279c9bdc36e5eac743b4000633b25f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_get_pages","iov_iter_extract_bvecs","loop_update_dio_alignment","loop_set_dma_limit","zloop_get_block_size","zloop_ctl_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c7804e3279c9bdc36e5eac743b4000633b25f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP"],"series_id":"34e23873-7e4a-4f53-b8d3-6caac0785b84","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-06-24 18:36:25 +0000 UTC FinishedAt: 2026-06-24 18:36:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlrbzn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c7804e3279c9bdc36e5eac743b4000633b25f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_get_pages","iov_iter_extract_bvecs","loop_update_dio_alignment","loop_set_dma_limit","zloop_get_block_size","zloop_ctl_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c7804e3279c9bdc36e5eac743b4000633b25f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP"],"series_id":"34e23873-7e4a-4f53-b8d3-6caac0785b84","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-24 18:36:25 +0000 UTC FinishedAt: 2026-06-24 18:36:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlrbzn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c7804e3279c9bdc36e5eac743b4000633b25f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_get_pages","iov_iter_extract_bvecs","loop_update_dio_alignment","loop_set_dma_limit","zloop_get_block_size","zloop_ctl_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c7804e3279c9bdc36e5eac743b4000633b25f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP"],"series_id":"34e23873-7e4a-4f53-b8d3-6caac0785b84","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-24 18:36:25 +0000 UTC FinishedAt: 2026-06-24 18:36:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlrbzn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c7804e3279c9bdc36e5eac743b4000633b25f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_get_pages","iov_iter_extract_bvecs","loop_update_dio_alignment","loop_set_dma_limit","zloop_get_block_size","zloop_ctl_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c7804e3279c9bdc36e5eac743b4000633b25f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP"],"series_id":"34e23873-7e4a-4f53-b8d3-6caac0785b84","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-24 18:36:35 +0000 UTC FinishedAt: 2026-06-24 21:41:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlrbzn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c7804e3279c9bdc36e5eac743b4000633b25f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_get_pages","iov_iter_extract_bvecs","loop_update_dio_alignment","loop_set_dma_limit","zloop_get_block_size","zloop_ctl_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c7804e3279c9bdc36e5eac743b4000633b25f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP"],"series_id":"34e23873-7e4a-4f53-b8d3-6caac0785b84","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-24 18:36:35 +0000 UTC FinishedAt: 2026-06-24 21:41:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b40933ce-1989-49a9-8424-7685331c352a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5f7ff489-0178-4077-ac9b-8b02a82f2d2b,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-workflowlrbzn/series-workflowlrbzn-build-action-3393472982/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-workflowlrbzn/series-workflowlrbzn-build-action-3019301499/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-workflowlrbzn/series-workflowlrbzn-convert-artifact-3574408944/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,}