Name: series-workflow2fb6q Phase: Failed StartedAt: 2026-07-25 19:46:47 +0000 UTC FinishedAt: 2026-07-25 20:03:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2fb6q[0] Phase: Succeeded StartedAt: 2026-07-25 19:46:47 +0000 UTC FinishedAt: 2026-07-25 20:03:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2fb6q[0].run-triage Phase: Succeeded StartedAt: 2026-07-25 19:46:47 +0000 UTC FinishedAt: 2026-07-25 20:03:20 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIwOjAyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBaXJvaGEgZXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvKSwgd2hpY2ggaXMgYSBwbGF0Zm9ybSBkcml2ZXIgc3BlY2lmaWMgdG8gQWlyb2hhIFNvQ3MgKGUuZy4sIEVONzU4MSkuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50cywgbWVhbmluZyB0aGUgZHJpdmVyIGNhbm5vdCBiZSBwcm9iZWQgYW5kIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjA6MDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1ZTRmMTBlNWY4ZTFjNTNmNTJjNGNjNjRkZDE3Njc4OTAwN2IwMzU1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgMjUgMjA6MDI6NDMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmNcbmluZGV4IDc5NDE4ZTY4MmY3MWYzLi4wMjkyMDU4N2UwY2M0NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmNcbkBAIC05MzQsNyAmIzQzOzkzNCw3IEBAIHN0YXRpYyB2b2lkIGFpcm9oYV9xZG1hX3dha2VfbmV0ZGV2X3R4cXMoc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSlcbiBcdFx0XHRpZiAoIWRldilcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRcdGlmIChkZXYtXHUwMDNlcWRtYSAhPSBxZG1hKVxuJiM0MztcdFx0XHRpZiAocmN1X2FjY2Vzc19wb2ludGVyKGRldi1cdTAwM2VxZG1hKSAhPSBxZG1hKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXG4gXHRcdFx0bmV0ZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihkZXYpO1xuQEAgLTEwMzgsMTAgJiM0MzsxMDM4LDIxIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfdHhfbmFwaV9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldClcbiBcdFx0cS1cdTAwM2VxdWV1ZWQtLTtcbiBcbiBcdFx0aWYgKHNrYikge1xuJiM0MztcdFx0XHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KHNrYi1cdTAwM2VkZXYpO1xuJiM0MztcdFx0XHR1MTYgcWlkeCA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpO1xuIFx0XHRcdHN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cTtcbiBcbiBcdFx0XHR0eHEgPSBza2JfZ2V0X3R4X3F1ZXVlKHNrYi1cdTAwM2VkZXYsIHNrYik7XG4tXHRcdFx0bmV0ZGV2X3R4X2NvbXBsZXRlZF9xdWV1ZSh0eHEsIDEsIHNrYi1cdTAwM2VsZW4pO1xuJiM0MztcdFx0XHRpZiAocmN1X2FjY2Vzc19wb2ludGVyKGRldi1cdTAwM2VxZG1hKSAhPSBxZG1hKSB7XG4mIzQzO1x0XHRcdFx0YXRvbWljX2FkZCgxLCBcdTAwMjZkZXYtXHUwMDNlYnFsW3FpZHhdLnBrdHMpO1xuJiM0MztcdFx0XHRcdGF0b21pY19hZGQoc2tiLVx1MDAzZWxlbiwgXHUwMDI2ZGV2LVx1MDAzZWJxbFtxaWR4XS5ieXRlcyk7XG4mIzQzO1x0XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdFx0dTMyIHBrdHMgPSAxLCBieXRlcyA9IHNrYi1cdTAwM2VsZW47XG4mIzQzO1xuJiM0MztcdFx0XHRcdGJ5dGVzICYjNDM7PSBhdG9taWNfeGNoZyhcdTAwMjZkZXYtXHUwMDNlYnFsW3FpZHhdLmJ5dGVzLCAwKTtcbiYjNDM7XHRcdFx0XHRwa3RzICYjNDM7PSBhdG9taWNfeGNoZyhcdTAwMjZkZXYtXHUwMDNlYnFsW3FpZHhdLnBrdHMsIDApO1xuJiM0MztcdFx0XHRcdG5ldGRldl90eF9jb21wbGV0ZWRfcXVldWUodHhxLCBwa3RzLCBieXRlcyk7XG4mIzQzO1x0XHRcdH1cbiBcdFx0XHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuIFx0XHR9XG4gXG5AQCAtMTkwNSw4ICYjNDM7MTkxNiw4IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4ge1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGRldi1cdTAwM2Vwb3J0O1xuLVx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LVx1MDAzZXFkbWE7XG4gXHR1MzIgcHNlX3BvcnQgPSBGRV9QU0VfUE9SVF9QUEUxO1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcbiBcdGludCBlcnI7XG4gXG4gXHRuZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKG5ldGRldik7XG5AQCAtMTkxNCw2ICYjNDM7MTkyNSw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuJiM0MztcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuIFx0aWYgKG5ldGRldl91c2VzX2RzYShuZXRkZXYpKVxuIFx0XHRhaXJvaGFfZmVfc2V0KHFkbWEtXHUwMDNlZXRoLCBSRUdfR0RNX0lOR1JFU1NfQ0ZHKHBvcnQtXHUwMDNlaWQpLFxuIFx0XHRcdCAgICAgIEdETV9TVEFHX0VOX01BU0spO1xuQEAgLTE5MzcsNyAmIzQzOzE5NDksNiBAQCBzdGF0aWMgaW50IGFpcm9oYV9kZXZfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIHtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBkZXYtXHUwMDNlcG9ydDtcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cdTAwM2VxZG1hO1xuIFxuIFx0bmV0aWZfdHhfZGlzYWJsZShuZXRkZXYpO1xuIFx0YWlyb2hhX3NldF92aXBfZm9yX2dkbV9wb3J0KGRldiwgZmFsc2UpO1xuQEAgLTE5NDUsNyAmIzQzOzE5NTYsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9kZXZfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0aWYgKC0tcG9ydC1cdTAwM2V1c2VycylcbiBcdFx0YWlyb2hhX3BwZV9zZXRfeG1pdF9mcmFtZV9zaXplKGRldik7XG4gXHRlbHNlXG4tXHRcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhxZG1hLVx1MDAzZWV0aCxcbiYjNDM7XHRcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhkZXYtXHUwMDNlZXRoLFxuIFx0XHRcdFx0XHQgICAgUkVHX0dETV9GV0RfQ0ZHKHBvcnQtXHUwMDNlaWQpLFxuIFx0XHRcdFx0XHQgICAgRkVfUFNFX1BPUlRfRFJPUCk7XG4gXHRyZXR1cm4gMDtcbkBAIC0yMDI4LDYgJiM0MzsyMDM5LDUzIEBAIHN0YXRpYyBpbnQgYWlyb2hhX2VuYWJsZV9nZG0yX2xvb3BiYWNrKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGFpcm9oYV9kaXNhYmxlX2dkbTJfbG9vcGJhY2soc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZGV2LVx1MDAzZXBvcnQ7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IGRldi1cdTAwM2VldGg7XG4mIzQzO1x0aW50IGksIHNyY19wb3J0O1xuJiM0MztcdHUzMiBwc2VfcG9ydDtcbiYjNDM7XG4mIzQzO1x0c3JjX3BvcnQgPSBldGgtXHUwMDNlc29jLVx1MDAzZW9wcy5nZXRfc3BvcnQoZGV2LVx1MDAzZXBvcnQsIGRldi1cdTAwM2VuYnEpO1xuJiM0MztcdGlmIChzcmNfcG9ydCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBzcmNfcG9ydDtcbiYjNDM7XG4mIzQzO1x0YWlyb2hhX2ZlX2NsZWFyKGV0aCxcbiYjNDM7XHRcdFx0UkVHX1NQX0RGVF9DUE9SVChzcmNfcG9ydCBcdTAwM2VcdTAwM2UgZmxzKFNQX0NQT1JUX0RGVF9NQVNLKSksXG4mIzQzO1x0XHRcdFNQX0NQT1JUX01BU0soc3JjX3BvcnQgXHUwMDI2IFNQX0NQT1JUX0RGVF9NQVNLKSk7XG4mIzQzO1xuJiM0MztcdGFpcm9oYV9mZV9zZXQoZXRoLCBSRUdfR0RNX0ZXRF9DRkcoQUlST0hBX0dETTJfSURYKSxcbiYjNDM7XHRcdCAgICAgIEdETV9TVFJJUF9DUkNfTUFTSyk7XG4mIzQzO1x0YWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKGV0aCwgUkVHX0dETV9GV0RfQ0ZHKEFJUk9IQV9HRE0yX0lEWCksXG4mIzQzO1x0XHRcdFx0ICAgIEZFX1BTRV9QT1JUX0RST1ApO1xuJiM0MztcdGFpcm9oYV9mZV9jbGVhcihldGgsIFJFR19HRE1fTFBCS19DRkcoQUlST0hBX0dETTJfSURYKSxcbiYjNDM7XHRcdFx0TFBCS19DSEFOX01BU0sgfCBMUEJLX01PREVfTUFTSyB8IExQQktfRU5fTUFTSyk7XG4mIzQzO1x0cHNlX3BvcnQgPSBhaXJvaGFfcHBlX2lzX2VuYWJsZWQoZXRoLCAxKSA/IEZFX1BTRV9QT1JUX1BQRTJcbiYjNDM7XHRcdFx0XHRcdFx0IDogRkVfUFNFX1BPUlRfUFBFMTtcbiYjNDM7XHRhaXJvaGFfc2V0X2dkbV9wb3J0X2Z3ZF9jZmcoZXRoLCBSRUdfR0RNX0ZXRF9DRkcoQUlST0hBX0dETTJfSURYKSxcbiYjNDM7XHRcdFx0XHQgICAgcHNlX3BvcnQpO1xuJiM0MztcbiYjNDM7XHRhaXJvaGFfZmVfcm13KGV0aCwgUkVHX0ZFX1dBTl9QT1JULCBXQU4wX01BU0ssXG4mIzQzO1x0XHQgICAgICBGSUVMRF9QUkVQKFdBTjBfTUFTSywgQUlST0hBX0dETTJfSURYKSk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGV0aC1cdTAwM2Vzb2MtXHUwMDNlbnVtX3BwZTsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRhaXJvaGFfZmVfY2xlYXIoZXRoLCBSRUdfUFBFX0RGVF9DUE9SVChpLCBBSVJPSEFfR0RNMl9JRFgpLFxuJiM0MztcdFx0XHRcdERGVF9DUE9SVF9NQVNLKEFJUk9IQV9HRE0yX0lEWCkpO1xuJiM0MztcbiYjNDM7XHQvKiBFbmFibGUgVklQIGFuZCBJRkMgZm9yIEdETTIgKi9cbiYjNDM7XHRhaXJvaGFfZmVfc2V0KGV0aCwgUkVHX0ZFX1ZJUF9QT1JUX0VOLCBCSVQoQUlST0hBX0dETTJfSURYKSk7XG4mIzQzO1x0YWlyb2hhX2ZlX3NldChldGgsIFJFR19GRV9JRkNfUE9SVF9FTiwgQklUKEFJUk9IQV9HRE0yX0lEWCkpO1xuJiM0MztcbiYjNDM7XHRpZiAocG9ydC1cdTAwM2VpZCA9PSBBSVJPSEFfR0RNNF9JRFggXHUwMDI2XHUwMDI2IGFpcm9oYV9pc183NTgxKGV0aCkpIHtcbiYjNDM7XHRcdHUzMiBtYXNrID0gRkNfSURfT0ZfU1JDX1BPUlRfTUFTSyhkZXYtXHUwMDNlbmJxKTtcbiYjNDM7XG4mIzQzO1x0XHRhaXJvaGFfZmVfcm13KGV0aCwgUkVHX1NSQ19QT1JUX0ZDX01BUDYsIG1hc2ssXG4mIzQzO1x0XHRcdCAgICAgIEZDX01BUDZfREVGX1ZBTFVFIFx1MDAyNiBtYXNrKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKlxuIGFpcm9oYV9nZXRfd2FuX2dkbV9kZXYoc3RydWN0IGFpcm9oYV9ldGggKmV0aClcbiB7XG5AQCAtMjA1NCwxNSAmIzQzOzIxMTIsNDMgQEAgYWlyb2hhX2dldF93YW5fZ2RtX2RldihzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoKVxuIHN0YXRpYyB2b2lkIGFpcm9oYV9kZXZfc2V0X3FkbWEoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpXG4ge1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IG5ldGRldl9mcm9tX3ByaXYoZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKmN1cl9xZG1hLCAqcWRtYTtcbiBcdHN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBkZXYtXHUwMDNlZXRoO1xuLVx0aW50IHBwZV9pZDtcbiYjNDM7XHRpbnQgaSwgcHBlX2lkO1xuIFxuIFx0LyogUURNQTAgaXMgdXNlZCBmb3IgbGFuIHBvcnRzIHdoaWxlIFFETUExIGlzIHVzZWQgZm9yIFdBTiBwb3J0cyAqL1xuLVx0ZGV2LVx1MDAzZXFkbWEgPSBcdTAwMjZldGgtXHUwMDNlcWRtYVshYWlyb2hhX2lzX2xhbl9nZG1fZGV2KGRldildO1xuLVx0bmV0ZGV2LVx1MDAzZWlycSA9IGRldi1cdTAwM2VxZG1hLVx1MDAzZWlycV9iYW5rc1swXS5pcnE7XG4mIzQzO1x0cWRtYSA9IFx1MDAyNmV0aC1cdTAwM2VxZG1hWyFhaXJvaGFfaXNfbGFuX2dkbV9kZXYoZGV2KV07XG4mIzQzO1x0Y3VyX3FkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAoY3VyX3FkbWEpIHtcbiYjNDM7XHRcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpO1xuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShjdXJfcWRtYS1cdTAwM2VxX3R4X2lycSk7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0XHRuYXBpX2Rpc2FibGUoXHUwMDI2Y3VyX3FkbWEtXHUwMDNlcV90eF9pcnFbaV0ubmFwaSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyY3VfYXNzaWduX3BvaW50ZXIoZGV2LVx1MDAzZXFkbWEsIHFkbWEpO1xuJiM0MztcdG5ldGRldi1cdTAwM2VpcnEgPSBxZG1hLVx1MDAzZWlycV9iYW5rc1swXS5pcnE7XG4mIzQzO1x0c3luY2hyb25pemVfcmN1KCk7XG4gXG4gXHRwcGVfaWQgPSAhYWlyb2hhX2lzX2xhbl9nZG1fZGV2KGRldikgXHUwMDI2XHUwMDI2IGFpcm9oYV9wcGVfaXNfZW5hYmxlZChldGgsIDEpO1xuIFx0YWlyb2hhX3BwZV9zZXRfY3B1X3BvcnQoZGV2LCBwcGVfaWQsIGFpcm9oYV9nZXRfZmVfcG9ydChkZXYpKTtcbiYjNDM7XG4mIzQzO1x0LyogU2VlZCBxb3Nfc3RhdHMgYmFzZWxpbmVzIHdpdGggdGhlIG5ldyBRRE1BIGJsb2NrJiMzOTtzIGN1cnJlbnRcbiYjNDM7XHQgKiBjb3VudGVyIHZhbHVlcyB0byBhdm9pZCBhIHNwdXJpb3VzIHNwaWtlIG9uIHRoZSBmaXJzdCBzdGF0c1xuJiM0MztcdCAqIHF1ZXJ5IGFmdGVyIGluaXQgb3IgbWlncmF0aW9uLlxuJiM0MztcdCAqL1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoZGV2LVx1MDAzZXFvc19zdGF0cyk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRkZXYtXHUwMDNlcW9zX3N0YXRzW2ldLmNwdV90eF9wYWNrZXRzID1cbiYjNDM7XHRcdFx0YWlyb2hhX3FkbWFfcnIocWRtYSwgUkVHX0NOVFJfVkFMKGkgXHUwMDNjXHUwMDNjIDEpKTtcbiYjNDM7XHRcdGRldi1cdTAwM2Vxb3Nfc3RhdHNbaV0uZndkX3R4X3BhY2tldHMgPVxuJiM0MztcdFx0XHRhaXJvaGFfcWRtYV9ycihxZG1hLCBSRUdfQ05UUl9WQUwoKGkgXHUwMDNjXHUwMDNjIDEpICYjNDM7IDEpKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChjdXJfcWRtYSkge1xuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShjdXJfcWRtYS1cdTAwM2VxX3R4X2lycSk7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0XHRuYXBpX2VuYWJsZShcdTAwMjZjdXJfcWRtYS1cdTAwM2VxX3R4X2lycVtpXS5uYXBpKTtcbiYjNDM7XHRcdG5ldGlmX3R4X3dha2VfYWxsX3F1ZXVlcyhuZXRkZXYpO1xuJiM0MztcdH1cbiB9XG4gXG4gc3RhdGljIGludCBhaXJvaGFfZGV2X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbkBAIC0yMDc4LDcgJiM0MzsyMTY0LDcgQEAgc3RhdGljIGludCBhaXJvaGFfZGV2X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdFx0ZmFsbHRocm91Z2g7XG4gXHRjYXNlIEFJUk9IQV9HRE0yX0lEWDpcbiBcdFx0LyogR0RNMiBpcyBhbHdheXMgdXNlZCBhcyB3YW4gKi9cbi1cdFx0ZGV2LVx1MDAzZWZsYWdzIHw9IEFJUk9IQV9QUklWX0ZfV0FOO1xuJiM0MztcdFx0c2V0X2JpdChBSVJPSEFfREVWX0ZfV0FOLCBcdTAwMjZkZXYtXHUwMDNlZmxhZ3MpO1xuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdGJyZWFrO1xuQEAgLTIyMTcsOSAmIzQzOzIzMDMsOSBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIHtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cdTAwM2VxZG1hO1xuIFx0dTMyIG5yX2ZyYWdzLCB0YWcsIG1zZzAsIG1zZzEsIGxlbjtcbiBcdHN0cnVjdCBhaXJvaGFfcXVldWVfZW50cnkgKmU7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xuIFx0c3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxO1xuIFx0c3RydWN0IGFpcm9oYV9xdWV1ZSAqcTtcbiBcdExJU1RfSEVBRCh0eF9saXN0KTtcbkBAIC0yMjI4LDYgJiM0MzsyMzE0LDggQEAgc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0dTE2IGluZGV4O1xuIFx0dTggZnBvcnQ7XG4gXG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdHFkbWEgPSByY3VfZGVyZWZlcmVuY2UoZGV2LVx1MDAzZXFkbWEpO1xuIFx0cWlkID0gYWlyb2hhX3FkbWFfZ2V0X3R4cShxZG1hLCBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKSk7XG4gXHR0YWcgPSBhaXJvaGFfZ2V0X2RzYV90YWcoc2tiLCBuZXRkZXYpO1xuIFxuQEAgLTIyNzcsNiAmIzQzOzIzNjUsOCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdG5ldGlmX3R4X3N0b3BfcXVldWUodHhxKTtcbiBcdFx0cS1cdTAwM2V0eHFfc3RvcHBlZCA9IHRydWU7XG4gXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnEtXHUwMDNlbG9jayk7XG4mIzQzO1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4gXHRcdHJldHVybiBORVRERVZfVFhfQlVTWTtcbiBcdH1cbiBcbkBAIC0yMzQyLDYgJiM0MzsyNDMyLDcgQEAgc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0RklFTERfUFJFUChUWF9SSU5HX0NQVV9JRFhfTUFTSywgaW5kZXgpKTtcbiBcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnEtXHUwMDNlbG9jayk7XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRyZXR1cm4gTkVUREVWX1RYX09LO1xuIFxuQEAgLTIzNTQsNiAmIzQzOzI0NDUsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gZXJyb3I6XG4gXHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuIFx0bmV0ZGV2LVx1MDAzZXN0YXRzLnR4X2Ryb3BwZWQmIzQzOyYjNDM7O1xuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0cmV0dXJuIE5FVERFVl9UWF9PSztcbiB9XG5AQCAtMjQzMywxNyAmIzQzOzI1MjUsMTkgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9zZXRfY2hhbl90eF9zY2hlZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRcdFx0XHQgY29uc3QgdTE2ICp3ZWlnaHRzLCB1OCBuX3dlaWdodHMpXG4ge1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcbiBcdGludCBpO1xuIFxuJiM0MztcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQUlST0hBX05VTV9RT1NfUVVFVUVTOyBpJiM0MzsmIzQzOylcbi1cdFx0YWlyb2hhX3FkbWFfY2xlYXIoZGV2LVx1MDAzZXFkbWEsIFJFR19RVUVVRV9DTE9TRV9DRkcoY2hhbm5lbCksXG4mIzQzO1x0XHRhaXJvaGFfcWRtYV9jbGVhcihxZG1hLCBSRUdfUVVFVUVfQ0xPU0VfQ0ZHKGNoYW5uZWwpLFxuIFx0XHRcdFx0ICBUWFFfRElTQUJMRV9DSEFOX1FVRVVFX01BU0soY2hhbm5lbCwgaSkpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgbl93ZWlnaHRzOyBpJiM0MzsmIzQzOykge1xuIFx0XHR1MzIgc3RhdHVzO1xuIFx0XHRpbnQgZXJyO1xuIFxuLVx0XHRhaXJvaGFfcWRtYV93cihkZXYtXHUwMDNlcWRtYSwgUkVHX1RYV1JSX1dFSUdIVF9DRkcsXG4mIzQzO1x0XHRhaXJvaGFfcWRtYV93cihxZG1hLCBSRUdfVFhXUlJfV0VJR0hUX0NGRyxcbiBcdFx0XHQgICAgICAgVFdSUl9SV19DTURfTUFTSyB8XG4gXHRcdFx0ICAgICAgIEZJRUxEX1BSRVAoVFdSUl9DSEFOX0lEWF9NQVNLLCBjaGFubmVsKSB8XG4gXHRcdFx0ICAgICAgIEZJRUxEX1BSRVAoVFdSUl9RVUVVRV9JRFhfTUFTSywgaSkgfFxuQEAgLTI0NTEsMTIgJiM0MzsyNTQ1LDEyIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfc2V0X2NoYW5fdHhfc2NoZWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0ZXJyID0gcmVhZF9wb2xsX3RpbWVvdXQoYWlyb2hhX3FkbWFfcnIsIHN0YXR1cyxcbiBcdFx0XHRcdFx0c3RhdHVzIFx1MDAyNiBUV1JSX1JXX0NNRF9ET05FLFxuIFx0XHRcdFx0XHRVU0VDX1BFUl9NU0VDLCAxMCAqIFVTRUNfUEVSX01TRUMsXG4tXHRcdFx0XHRcdHRydWUsIGRldi1cdTAwM2VxZG1hLCBSRUdfVFhXUlJfV0VJR0hUX0NGRyk7XG4mIzQzO1x0XHRcdFx0XHR0cnVlLCBxZG1hLCBSRUdfVFhXUlJfV0VJR0hUX0NGRyk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdH1cbiBcbi1cdGFpcm9oYV9xZG1hX3JtdyhkZXYtXHUwMDNlcWRtYSwgUkVHX0NIQU5fUU9TX01PREUoY2hhbm5lbCBcdTAwM2VcdTAwM2UgMyksXG4mIzQzO1x0YWlyb2hhX3FkbWFfcm13KHFkbWEsIFJFR19DSEFOX1FPU19NT0RFKGNoYW5uZWwgXHUwMDNlXHUwMDNlIDMpLFxuIFx0XHRcdENIQU5fUU9TX01PREVfTUFTSyhjaGFubmVsKSxcbiBcdFx0XHRfX2ZpZWxkX3ByZXAoQ0hBTl9RT1NfTU9ERV9NQVNLKGNoYW5uZWwpLCBtb2RlKSk7XG4gXG5AQCAtMjUyMCwxNyAmIzQzOzI2MTQsMjIgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9nZXRfdHhfZXRzX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBjaGFubmVsLFxuIFx0XHRcdFx0XHRzdHJ1Y3QgdGNfZXRzX3FvcHRfb2ZmbG9hZCAqb3B0KVxuIHtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cdTAwM2VxZG1hO1xuJiM0MztcdHUzMiBjcHVfdHhfcGFja2V0cywgZndkX3R4X3BhY2tldHM7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xuJiM0MztcdHU2NCB0eF9wYWNrZXRzO1xuIFxuLVx0dTY0IGNwdV90eF9wYWNrZXRzID0gYWlyb2hhX3FkbWFfcnIocWRtYSwgUkVHX0NOVFJfVkFMKGNoYW5uZWwgXHUwMDNjXHUwMDNjIDEpKTtcbi1cdHU2NCBmd2RfdHhfcGFja2V0cyA9IGFpcm9oYV9xZG1hX3JyKHFkbWEsXG4tXHRcdFx0XHRcdCAgICBSRUdfQ05UUl9WQUwoKGNoYW5uZWwgXHUwMDNjXHUwMDNjIDEpICYjNDM7IDEpKTtcbi1cdHU2NCB0eF9wYWNrZXRzID0gKGNwdV90eF9wYWNrZXRzIC0gZGV2LVx1MDAzZWNwdV90eF9wYWNrZXRzKSAmIzQzO1xuLVx0XHRcdCAoZndkX3R4X3BhY2tldHMgLSBkZXYtXHUwMDNlZndkX3R4X3BhY2tldHMpO1xuJiM0MztcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuJiM0MztcdGNwdV90eF9wYWNrZXRzID0gYWlyb2hhX3FkbWFfcnIocWRtYSwgUkVHX0NOVFJfVkFMKGNoYW5uZWwgXHUwMDNjXHUwMDNjIDEpKTtcbiYjNDM7XHRmd2RfdHhfcGFja2V0cyA9IGFpcm9oYV9xZG1hX3JyKHFkbWEsXG4mIzQzO1x0XHRcdFx0XHRSRUdfQ05UUl9WQUwoKGNoYW5uZWwgXHUwMDNjXHUwMDNjIDEpICYjNDM7IDEpKTtcbiYjNDM7XHR0eF9wYWNrZXRzID0gKHUzMikoY3B1X3R4X3BhY2tldHMgLVxuJiM0MztcdFx0XHQgICBkZXYtXHUwMDNlcW9zX3N0YXRzW2NoYW5uZWxdLmNwdV90eF9wYWNrZXRzKTtcbiYjNDM7XHR0eF9wYWNrZXRzICYjNDM7PSAodTMyKShmd2RfdHhfcGFja2V0cyAtXG4mIzQzO1x0XHRcdCAgICBkZXYtXHUwMDNlcW9zX3N0YXRzW2NoYW5uZWxdLmZ3ZF90eF9wYWNrZXRzKTtcbiBcbiBcdF9ic3RhdHNfdXBkYXRlKG9wdC1cdTAwM2VzdGF0cy5ic3RhdHMsIDAsIHR4X3BhY2tldHMpO1xuLVx0ZGV2LVx1MDAzZWNwdV90eF9wYWNrZXRzID0gY3B1X3R4X3BhY2tldHM7XG4tXHRkZXYtXHUwMDNlZndkX3R4X3BhY2tldHMgPSBmd2RfdHhfcGFja2V0cztcbiYjNDM7XHRkZXYtXHUwMDNlcW9zX3N0YXRzW2NoYW5uZWxdLmNwdV90eF9wYWNrZXRzID0gY3B1X3R4X3BhY2tldHM7XG4mIzQzO1x0ZGV2LVx1MDAzZXFvc19zdGF0c1tjaGFubmVsXS5md2RfdHhfcGFja2V0cyA9IGZ3ZF90eF9wYWNrZXRzO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTI3ODUsMTYgJiM0MzsyODg0LDE4IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfc2V0X3R4X3JhdGVfbGltaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0XHRcdFx0IHUzMiBidWNrZXRfc2l6ZSlcbiB7XG4gXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xuIFx0aW50IGksIGVycjtcbiBcbiYjNDM7XHRxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjPSBUUlRDTV9QRUFLX01PREU7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdGVyciA9IGFpcm9oYV9xZG1hX3NldF90cnRjbV9jb25maWcoZGV2LVx1MDAzZXFkbWEsIGNoYW5uZWwsXG4mIzQzO1x0XHRlcnIgPSBhaXJvaGFfcWRtYV9zZXRfdHJ0Y21fY29uZmlnKHFkbWEsIGNoYW5uZWwsXG4gXHRcdFx0XHRcdFx0ICAgUkVHX0VHUkVTU19UUlRDTV9DRkcsIGksXG4gXHRcdFx0XHRcdFx0ICAgISFyYXRlLCBUUlRDTV9NRVRFUl9NT0RFKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0XHRlcnIgPSBhaXJvaGFfcWRtYV9zZXRfdHJ0Y21fdG9rZW5fYnVja2V0KGRldi1cdTAwM2VxZG1hLCBjaGFubmVsLFxuJiM0MztcdFx0ZXJyID0gYWlyb2hhX3FkbWFfc2V0X3RydGNtX3Rva2VuX2J1Y2tldChxZG1hLCBjaGFubmVsLFxuIFx0XHRcdFx0XHRcdFx0IFJFR19FR1JFU1NfVFJUQ01fQ0ZHLFxuIFx0XHRcdFx0XHRcdFx0IGksIHJhdGUsIGJ1Y2tldF9zaXplKTtcbiBcdFx0aWYgKGVycilcbkBAIC0yODMwLDExICYjNDM7MjkzMSwxMiBAQCBzdGF0aWMgaW50IGFpcm9oYV90Y19odGJfYWxsb2NfbGVhZl9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0dTMyIGNoYW5uZWwgPSBUQ19IX01JTihvcHQtXHUwMDNlY2xhc3NpZCkgJSBBSVJPSEFfTlVNX1FPU19DSEFOTkVMUztcbiBcdGludCBlcnIsIG51bV90eF9xdWV1ZXMgPSBBSVJPSEFfTlVNX1RYX1JJTkcgJiM0MzsgY2hhbm5lbCAmIzQzOyAxO1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuLVx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LVx1MDAzZXFkbWE7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xuIFxuIFx0LyogSGVyZSB3ZSBuZWVkIHRvIGNoZWNrIHRoZSByZXF1ZXN0ZWQgUURNQSBjaGFubmVsIGlzIG5vdCBhbHJlYWR5XG4gXHQgKiBpbiB1c2UgYnkgYW5vdGhlciBuZXRfZGV2aWNlIHJ1bm5pbmcgb24gdGhlIHNhbWUgUURNQSBibG9jay5cbiBcdCAqL1xuJiM0MztcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuIFx0aWYgKHRlc3RfYW5kX3NldF9iaXQoY2hhbm5lbCwgcWRtYS1cdTAwM2Vxb3NfY2hhbm5lbF9tYXApKSB7XG4gXHRcdE5MX1NFVF9FUlJfTVNHX01PRChvcHQtXHUwMDNlZXh0YWNrLFxuIFx0XHRcdFx0ICAgXCYjMzQ7cWRtYSBxb3MgY2hhbm5lbCBhbHJlYWR5IGluIHVzZVwmIzM0Oyk7XG5AQCAtMjg3MCw3ICYjNDM7Mjk3Miw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfc2V0X3J4X21ldGVyKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2LFxuIFx0XHRcdFx0ICAgIHUzMiByYXRlLCB1MzIgYnVja2V0X3NpemUsXG4gXHRcdFx0XHQgICAgZW51bSB0cnRjbV91bml0X3R5cGUgdW5pdF90eXBlKVxuIHtcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cdTAwM2VxZG1hO1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XG4gXHRpbnQgaTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUocWRtYS1cdTAwM2VxX3J4KTsgaSYjNDM7JiM0MzspIHtcbkBAIC0zMDQ1LDEwICYjNDM7MzE0NywxMSBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfdGNfcmVtb3ZlX2h0Yl9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgcXVldWUpXG4ge1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIFx0aW50IG51bV90eF9xdWV1ZXMgPSBBSVJPSEFfTlVNX1RYX1JJTkc7XG4tXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtXHUwMDNlcWRtYTtcbiYjNDM7XHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7XG4gXG4gXHRhaXJvaGFfcWRtYV9zZXRfdHhfcmF0ZV9saW1pdChuZXRkZXYsIHF1ZXVlLCAwLCAwKTtcbiBcbiYjNDM7XHRxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcbiBcdGNsZWFyX2JpdChxdWV1ZSwgcWRtYS1cdTAwM2Vxb3NfY2hhbm5lbF9tYXApO1xuIFx0Y2xlYXJfYml0KHF1ZXVlLCBkZXYtXHUwMDNlcW9zX3NxX2JtYXApO1xuIFxuQEAgLTMwNzQsNiAmIzQzOzMxNzcsMTAwIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3RjX2h0Yl9kZWxldGVfbGVhZl9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBhaXJvaGFfZGlzYWJsZV9xb3NfZm9yX2dkbTM0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGRldi1cdTAwM2Vwb3J0O1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGlmIChwb3J0LVx1MDAzZWlkICE9IEFJUk9IQV9HRE0zX0lEWCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgcG9ydC1cdTAwM2VpZCAhPSBBSVJPSEFfR0RNNF9JRFgpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGVyciA9IGFpcm9oYV9kaXNhYmxlX2dkbTJfbG9vcGJhY2soZGV2KTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0bmV0ZGV2X3dhcm4obmV0ZGV2LFxuJiM0MztcdFx0XHQgICAgXCYjMzQ7ZmFpbGVkIGRpc2FibGluZyBHRE0yIGxvb3BiYWNrOiAlZFxcblwmIzM0OywgZXJyKTtcbiYjNDM7XG4mIzQzO1x0Y2xlYXJfYml0KEFJUk9IQV9ERVZfRl9XQU4sIFx1MDAyNmRldi1cdTAwM2VmbGFncyk7XG4mIzQzO1x0YWlyb2hhX2Rldl9zZXRfcWRtYShkZXYpO1xuJiM0MztcbiYjNDM7XHRhaXJvaGFfc2V0X21hY2FkZHIoZGV2LCBuZXRkZXYtXHUwMDNlZGV2X2FkZHIpO1xuJiM0MztcdGFpcm9oYV9wcGVfc2V0X3htaXRfZnJhbWVfc2l6ZShkZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKVxuJiM0MztcdFx0YWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKGRldi1cdTAwM2VldGgsXG4mIzQzO1x0XHRcdFx0XHQgICAgUkVHX0dETV9GV0RfQ0ZHKHBvcnQtXHUwMDNlaWQpLFxuJiM0MztcdFx0XHRcdFx0ICAgIEZFX1BTRV9QT1JUX1BQRTEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFpcm9oYV9lbmFibGVfcW9zX2Zvcl9nZG0zNChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKndhbl9kZXYsICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBkZXYtXHUwMDNlcG9ydDtcbiYjNDM7XHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gZGV2LVx1MDAzZWV0aDtcbiYjNDM7XHRpbnQgZXJyID0gLUVCVVNZO1xuJiM0MztcbiYjNDM7XHRpZiAocG9ydC1cdTAwM2VpZCAhPSBBSVJPSEFfR0RNM19JRFggXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHBvcnQtXHUwMDNlaWQgIT0gQUlST0hBX0dETTRfSURYKSB7XG4mIzQzO1x0XHQvKiBIVyBRb1MgaXMgYWx3YXlzIHN1cHBvcnRlZCBieSBHRE0xIGFuZCBHRE0yICovXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghYWlyb2hhX2lzX2xhbl9nZG1fZGV2KGRldikpIC8qIEFscmVhZHkgZW5hYmxlZCAqL1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2Zmxvd19vZmZsb2FkX211dGV4KTtcbiYjNDM7XG4mIzQzO1x0d2FuX2RldiA9IGFpcm9oYV9nZXRfd2FuX2dkbV9kZXYoZXRoKTtcbiYjNDM7XHRpZiAod2FuX2Rldikge1xuJiM0MztcdFx0aWYgKHRlc3RfYml0KEFJUk9IQV9ERVZfRl9UWF9RT1MsIFx1MDAyNndhbl9kZXYtXHUwMDNlZmxhZ3MpIHx8XG4mIzQzO1x0XHQgICAgd2FuX2Rldi1cdTAwM2Vwb3J0LVx1MDAzZWlkID09IEFJUk9IQV9HRE0yX0lEWCkge1xuJiM0MztcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHRcdFx0ICAgXCYjMzQ7UW9TIGNvbmZpZ3VyZWQgZm9yIFdBTiBkZXZpY2VcJiMzNDspO1xuJiM0MztcdFx0XHRnb3RvIGVycm9yX3VubG9jaztcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGFpcm9oYV9kaXNhYmxlX3Fvc19mb3JfZ2RtMzQobmV0ZGV2X2Zyb21fcHJpdih3YW5fZGV2KSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzZXRfYml0KEFJUk9IQV9ERVZfRl9XQU4sIFx1MDAyNmRldi1cdTAwM2VmbGFncyk7XG4mIzQzO1x0YWlyb2hhX2Rldl9zZXRfcWRtYShkZXYpO1xuJiM0MztcdGVyciA9IGFpcm9oYV9lbmFibGVfZ2RtMl9sb29wYmFjayhkZXYpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGVycm9yX2Rpc2FibGVfd2FuO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBhaXJvaGFfc2V0X21hY2FkZHIoZGV2LCBuZXRkZXYtXHUwMDNlZGV2X2FkZHIpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGVycm9yX2Rpc2FibGVfbG9vcGJhY2s7XG4mIzQzO1xuJiM0MztcdGFpcm9oYV9kZXZfc2V0X3htaXRfZnJhbWVfc2l6ZShuZXRkZXYpO1xuJiM0MztcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHtcbiYjNDM7XHRcdHUzMiBwc2VfcG9ydDtcbiYjNDM7XG4mIzQzO1x0XHRwc2VfcG9ydCA9IGFpcm9oYV9wcGVfaXNfZW5hYmxlZChldGgsIDEpID8gRkVfUFNFX1BPUlRfUFBFMlxuJiM0MztcdFx0XHRcdFx0XHRcdCA6IEZFX1BTRV9QT1JUX1BQRTE7XG4mIzQzO1x0XHRhaXJvaGFfc2V0X2dkbV9wb3J0X2Z3ZF9jZmcoZXRoLCBSRUdfR0RNX0ZXRF9DRkcocG9ydC1cdTAwM2VpZCksXG4mIzQzO1x0XHRcdFx0XHQgICAgcHNlX3BvcnQpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c2V0X2JpdChBSVJPSEFfREVWX0ZfVFhfUU9TLCBcdTAwMjZkZXYtXHUwMDNlZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2Zmxvd19vZmZsb2FkX211dGV4KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztlcnJvcl9kaXNhYmxlX2xvb3BiYWNrOlxuJiM0MztcdGFpcm9oYV9kaXNhYmxlX2dkbTJfbG9vcGJhY2soZGV2KTtcbiYjNDM7ZXJyb3JfZGlzYWJsZV93YW46XG4mIzQzO1x0Y2xlYXJfYml0KEFJUk9IQV9ERVZfRl9XQU4sIFx1MDAyNmRldi1cdTAwM2VmbGFncyk7XG4mIzQzO1x0YWlyb2hhX2Rldl9zZXRfcWRtYShkZXYpO1xuJiM0MztlcnJvcl91bmxvY2s6XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmZsb3dfb2ZmbG9hZF9tdXRleCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBhaXJvaGFfdGNfaHRiX2Rlc3Ryb3koc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB7XG4gXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG5AQCAtMzA4Miw2ICYjNDM7MzI3OSw4IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3RjX2h0Yl9kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRmb3JfZWFjaF9zZXRfYml0KHEsIGRldi1cdTAwM2Vxb3Nfc3FfYm1hcCwgQUlST0hBX05VTV9RT1NfQ0hBTk5FTFMpXG4gXHRcdGFpcm9oYV90Y19yZW1vdmVfaHRiX3F1ZXVlKG5ldGRldiwgcSk7XG4gXG4mIzQzO1x0Y2xlYXJfYml0KEFJUk9IQV9ERVZfRl9UWF9RT1MsIFx1MDAyNmRldi1cdTAwM2VmbGFncyk7XG4mIzQzO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTMxMDEsMjQgJiM0MzszMzAwLDI0IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3RjX2dldF9odGJfZ2V0X2xlYWZfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IGFpcm9oYV90Y19zZXR1cF9xZGlzY19odGIoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiYjNDM7c3RhdGljIGludCBhaXJvaGFfdGNfc2V0dXBfcWRpc2NfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCB0Y19odGJfcW9wdF9vZmZsb2FkICpvcHQpXG4ge1xuIFx0c3dpdGNoIChvcHQtXHUwMDNlY29tbWFuZCkge1xuIFx0Y2FzZSBUQ19IVEJfQ1JFQVRFOlxuLVx0XHRicmVhaztcbiYjNDM7XHRcdHJldHVybiBhaXJvaGFfZW5hYmxlX3Fvc19mb3JfZ2RtMzQobmV0ZGV2LCBvcHQtXHUwMDNlZXh0YWNrKTtcbiBcdGNhc2UgVENfSFRCX0RFU1RST1k6XG4tXHRcdHJldHVybiBhaXJvaGFfdGNfaHRiX2Rlc3Ryb3koZGV2KTtcbiYjNDM7XHRcdHJldHVybiBhaXJvaGFfdGNfaHRiX2Rlc3Ryb3kobmV0ZGV2KTtcbiBcdGNhc2UgVENfSFRCX05PREVfTU9ESUZZOlxuLVx0XHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9tb2RpZnlfcXVldWUoZGV2LCBvcHQpO1xuJiM0MztcdFx0cmV0dXJuIGFpcm9oYV90Y19odGJfbW9kaWZ5X3F1ZXVlKG5ldGRldiwgb3B0KTtcbiBcdGNhc2UgVENfSFRCX0xFQUZfQUxMT0NfUVVFVUU6XG4tXHRcdHJldHVybiBhaXJvaGFfdGNfaHRiX2FsbG9jX2xlYWZfcXVldWUoZGV2LCBvcHQpO1xuJiM0MztcdFx0cmV0dXJuIGFpcm9oYV90Y19odGJfYWxsb2NfbGVhZl9xdWV1ZShuZXRkZXYsIG9wdCk7XG4gXHRjYXNlIFRDX0hUQl9MRUFGX0RFTDpcbiBcdGNhc2UgVENfSFRCX0xFQUZfREVMX0xBU1Q6XG4gXHRjYXNlIFRDX0hUQl9MRUFGX0RFTF9MQVNUX0ZPUkNFOlxuLVx0XHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9kZWxldGVfbGVhZl9xdWV1ZShkZXYsIG9wdCk7XG4mIzQzO1x0XHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9kZWxldGVfbGVhZl9xdWV1ZShuZXRkZXYsIG9wdCk7XG4gXHRjYXNlIFRDX0hUQl9MRUFGX1FVRVJZX1FVRVVFOlxuLVx0XHRyZXR1cm4gYWlyb2hhX3RjX2dldF9odGJfZ2V0X2xlYWZfcXVldWUoZGV2LCBvcHQpO1xuJiM0MztcdFx0cmV0dXJuIGFpcm9oYV90Y19nZXRfaHRiX2dldF9sZWFmX3F1ZXVlKG5ldGRldiwgb3B0KTtcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaFxuaW5kZXggZmU5MzRmOWZmZThhMTEuLmU2ZmJkNDJjZjk2NDI5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaFxuQEAgLTU3MCwyNCAmIzQzOzU3MCwzMSBAQCBzdHJ1Y3QgYWlyb2hhX3FkbWEge1xuIFx0REVDTEFSRV9CSVRNQVAocW9zX2NoYW5uZWxfbWFwLCBBSVJPSEFfTlVNX1FPU19DSEFOTkVMUyk7XG4gfTtcbiBcbi1lbnVtIGFpcm9oYV9wcml2X2ZsYWdzIHtcbi1cdEFJUk9IQV9QUklWX0ZfV0FOID0gQklUKDApLFxuJiM0MztlbnVtIGFpcm9oYV9kZXZfZmxhZ3Mge1xuJiM0MztcdEFJUk9IQV9ERVZfRl9XQU4sXG4mIzQzO1x0QUlST0hBX0RFVl9GX1RYX1FPUyxcbiB9O1xuIFxuIHN0cnVjdCBhaXJvaGFfZ2RtX2RldiB7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9xZG1hIF9fcmN1ICpxZG1hO1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydDtcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcbiBcdHN0cnVjdCBhaXJvaGFfZXRoICpldGg7XG4gXG4gXHRERUNMQVJFX0JJVE1BUChxb3Nfc3FfYm1hcCwgQUlST0hBX05VTV9RT1NfQ0hBTk5FTFMpO1xuLVx0LyogcW9zIHN0YXRzIGNvdW50ZXJzICovXG4tXHR1NjQgY3B1X3R4X3BhY2tldHM7XG4tXHR1NjQgZndkX3R4X3BhY2tldHM7XG4mIzQzO1x0c3RydWN0IHtcbiYjNDM7XHRcdHUzMiBjcHVfdHhfcGFja2V0cztcbiYjNDM7XHRcdHUzMiBmd2RfdHhfcGFja2V0cztcbiYjNDM7XHR9IHFvc19zdGF0c1tBSVJPSEFfTlVNX1FPU19DSEFOTkVMU107XG4gXG4tXHR1MzIgZmxhZ3M7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdGludCBuYnE7XG4gXG4gXHRzdHJ1Y3QgYWlyb2hhX2h3X3N0YXRzIHN0YXRzO1xuJiM0MztcbiYjNDM7XHRzdHJ1Y3Qge1xuJiM0MztcdFx0YXRvbWljX3QgYnl0ZXM7XG4mIzQzO1x0XHRhdG9taWNfdCBwa3RzO1xuJiM0MztcdH0gYnFsW0FJUk9IQV9OVU1fTkVUREVWX1RYX1JJTkdTXTtcbiB9O1xuIFxuIHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQge1xuQEAgLTY5NCw3ICYjNDM7NzAxLDcgQEAgc3RhdGljIGlubGluZSB1MTYgYWlyb2hhX3FkbWFfZ2V0X3R4cShzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEsIHUxNiBxaWQpXG4gXG4gc3RhdGljIGlubGluZSBib29sIGFpcm9oYV9pc19sYW5fZ2RtX2RldihzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcbiB7XG4tXHRyZXR1cm4gIShkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IEFJUk9IQV9QUklWX0ZfV0FOKTtcbiYjNDM7XHRyZXR1cm4gIXRlc3RfYml0KEFJUk9IQV9ERVZfRl9XQU4sIFx1MDAyNmRldi1cdTAwM2VmbGFncyk7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBhaXJvaGFfaXNfNzU4MShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoKVxuQEAgLTcxMSw2ICYjNDM7NzE4LDE2IEBAIGludCBhaXJvaGFfZ2V0X2ZlX3BvcnQoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpO1xuIGJvb2wgYWlyb2hhX2lzX3ZhbGlkX2dkbV9kZXYoc3RydWN0IGFpcm9oYV9ldGggKmV0aCxcbiBcdFx0XHQgICAgIHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KTtcbiBcbiYjNDM7ZXh0ZXJuIHN0cnVjdCBtdXRleCBmbG93X29mZmxvYWRfbXV0ZXg7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBhaXJvaGFfcWRtYSAqXG4mIzQzO2Fpcm9oYV9xZG1hX2RlcmVmKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoZGV2LVx1MDAzZXFkbWEsXG4mIzQzO1x0XHRcdFx0XHQgbG9ja2RlcF9ydG5sX2lzX2hlbGQoKSB8fFxuJiM0MztcdFx0XHRcdFx0IGxvY2tkZXBfaXNfaGVsZChcdTAwMjZmbG93X29mZmxvYWRfbXV0ZXgpKTtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIGFpcm9oYV9wcGVfc2V0X3htaXRfZnJhbWVfc2l6ZShzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldik7XG4gdm9pZCBhaXJvaGFfcHBlX3NldF9jcHVfcG9ydChzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiwgdTggcHBlX2lkLCB1OCBmcG9ydCk7XG4gYm9vbCBhaXJvaGFfcHBlX2lzX2VuYWJsZWQoc3RydWN0IGFpcm9oYV9ldGggKmV0aCwgaW50IGluZGV4KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xuaW5kZXggZTRjMzY0NGRkNmVjN2EuLjMzZGRmMGQwNzg1NTM5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xuQEAgLTE1LDcgJiM0MzsxNSwxMCBAQFxuICNpbmNsdWRlIFwmIzM0O2Fpcm9oYV9yZWdzLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDthaXJvaGFfZXRoLmhcJiMzNDtcbiBcbi1zdGF0aWMgREVGSU5FX01VVEVYKGZsb3dfb2ZmbG9hZF9tdXRleCk7XG4mIzQzOy8qIFNlcmlhbGl6ZSBhaXJvaGFfZ2RtX2RldiBmbGFncywgUURNQSBwb2ludGVyIGFuZCBQUEUgQ1BVIHBvcnRcbiYjNDM7ICogY29uZmlndXJhdGlvbi5cbiYjNDM7ICovXG4mIzQzO0RFRklORV9NVVRFWChmbG93X29mZmxvYWRfbXV0ZXgpO1xuIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0socHBlX2xvY2spO1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgYWlyb2hhX2Zsb3dfdGFibGVfcGFyYW1zID0ge1xuQEAgLTg2LDggJiM0Mzs4OSw4IEBAIHN0YXRpYyB1MzIgYWlyb2hhX3BwZV9nZXRfdGltZXN0YW1wKHN0cnVjdCBhaXJvaGFfcHBlICpwcGUpXG4gXG4gdm9pZCBhaXJvaGFfcHBlX3NldF9jcHVfcG9ydChzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiwgdTggcHBlX2lkLCB1OCBmcG9ydClcbiB7XG4tXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtXHUwMDNlcWRtYTtcbi1cdHN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBxZG1hLVx1MDAzZWV0aDtcbiYjNDM7XHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBkZXYtXHUwMDNlZXRoO1xuIFx0dTggcWRtYV9pZCA9IHFkbWEgLSBcdTAwMjZldGgtXHUwMDNlcWRtYVswXTtcbiBcdHUzMiBmZV9jcHVfcG9ydDtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcmVncy5oXG5pbmRleCA2ZmVkNjNkMDEzYjQxMi4uNDQyYjQ4YzliOTkxZWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9yZWdzLmhcbkBAIC0zNzUsNiAmIzQzOzM3NSw3IEBAXG4gXG4gI2RlZmluZSBSRUdfU1JDX1BPUlRfRkNfTUFQNlx0XHQweDIyOThcbiAjZGVmaW5lIEZDX0lEX09GX1NSQ19QT1JUX01BU0soX24pXHRHRU5NQVNLKDQgJiM0MzsgKChfbikgXHUwMDNjXHUwMDNjIDMpLCAoKF9uKSBcdTAwM2NcdTAwM2MgMykpXG4mIzQzOyNkZWZpbmUgRkNfTUFQNl9ERUZfVkFMVUVcdFx0MHgxYjFhMTkxOFxuIFxuICNkZWZpbmUgUkVHX1dBTl9NVFUwXHRcdFx0MHgyMzAwXG4gI2RlZmluZSBXQU5fTVRVMV9NQVNLXHRcdFx0R0VOTUFTSygyOSwgMTYpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjA6MDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBaXJvaGEgZXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvKSwgd2hpY2ggaXMgYSBwbGF0Zm9ybSBkcml2ZXIgc3BlY2lmaWMgdG8gQWlyb2hhIFNvQ3MgKGUuZy4sIEVONzU4MSkuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50cywgbWVhbmluZyB0aGUgZHJpdmVyIGNhbm5vdCBiZSBwcm9iZWQgYW5kIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1ZTRmMTBlNWY4ZTFjNTNmNTJjNGNjNjRkZDE3Njc4OTAwN2IwMzU1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBKdWwgMjUgMjA6MDI6NDMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYwppbmRleCA3OTQxOGU2ODJmNzFmMy4uMDI5MjA1ODdlMGNjNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYwpAQCAtOTM0LDcgJiM0Mzs5MzQsNyBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfcWRtYV93YWtlX25ldGRldl90eHFzKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEpCiAJCQlpZiAoIWRldikKIAkJCQljb250aW51ZTsKIAotCQkJaWYgKGRldi0mZ3Q7cWRtYSAhPSBxZG1hKQomIzQzOwkJCWlmIChyY3VfYWNjZXNzX3BvaW50ZXIoZGV2LSZndDtxZG1hKSAhPSBxZG1hKQogCQkJCWNvbnRpbnVlOwogCiAJCQluZXRkZXYgPSBuZXRkZXZfZnJvbV9wcml2KGRldik7CkBAIC0xMDM4LDEwICYjNDM7MTAzOCwyMSBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3R4X25hcGlfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCiAJCXEtJmd0O3F1ZXVlZC0tOwogCiAJCWlmIChza2IpIHsKJiM0MzsJCQlzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KHNrYi0mZ3Q7ZGV2KTsKJiM0MzsJCQl1MTYgcWlkeCA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpOwogCQkJc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxOwogCiAJCQl0eHEgPSBza2JfZ2V0X3R4X3F1ZXVlKHNrYi0mZ3Q7ZGV2LCBza2IpOwotCQkJbmV0ZGV2X3R4X2NvbXBsZXRlZF9xdWV1ZSh0eHEsIDEsIHNrYi0mZ3Q7bGVuKTsKJiM0MzsJCQlpZiAocmN1X2FjY2Vzc19wb2ludGVyKGRldi0mZ3Q7cWRtYSkgIT0gcWRtYSkgewomIzQzOwkJCQlhdG9taWNfYWRkKDEsICZhbXA7ZGV2LSZndDticWxbcWlkeF0ucGt0cyk7CiYjNDM7CQkJCWF0b21pY19hZGQoc2tiLSZndDtsZW4sICZhbXA7ZGV2LSZndDticWxbcWlkeF0uYnl0ZXMpOwomIzQzOwkJCX0gZWxzZSB7CiYjNDM7CQkJCXUzMiBwa3RzID0gMSwgYnl0ZXMgPSBza2ItJmd0O2xlbjsKJiM0MzsKJiM0MzsJCQkJYnl0ZXMgJiM0Mzs9IGF0b21pY194Y2hnKCZhbXA7ZGV2LSZndDticWxbcWlkeF0uYnl0ZXMsIDApOwomIzQzOwkJCQlwa3RzICYjNDM7PSBhdG9taWNfeGNoZygmYW1wO2Rldi0mZ3Q7YnFsW3FpZHhdLnBrdHMsIDApOwomIzQzOwkJCQluZXRkZXZfdHhfY29tcGxldGVkX3F1ZXVlKHR4cSwgcGt0cywgYnl0ZXMpOwomIzQzOwkJCX0KIAkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCX0KIApAQCAtMTkwNSw4ICYjNDM7MTkxNiw4IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBkZXYtJmd0O3BvcnQ7Ci0Jc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LSZndDtxZG1hOwogCXUzMiBwc2VfcG9ydCA9IEZFX1BTRV9QT1JUX1BQRTE7CiYjNDM7CXN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTsKIAlpbnQgZXJyOwogCiAJbmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhuZXRkZXYpOwpAQCAtMTkxNCw2ICYjNDM7MTkyNSw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAomIzQzOwlxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTsKIAlpZiAobmV0ZGV2X3VzZXNfZHNhKG5ldGRldikpCiAJCWFpcm9oYV9mZV9zZXQocWRtYS0mZ3Q7ZXRoLCBSRUdfR0RNX0lOR1JFU1NfQ0ZHKHBvcnQtJmd0O2lkKSwKIAkJCSAgICAgIEdETV9TVEFHX0VOX01BU0spOwpAQCAtMTkzNyw3ICYjNDM7MTk0OSw2IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBkZXYtJmd0O3BvcnQ7Ci0Jc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LSZndDtxZG1hOwogCiAJbmV0aWZfdHhfZGlzYWJsZShuZXRkZXYpOwogCWFpcm9oYV9zZXRfdmlwX2Zvcl9nZG1fcG9ydChkZXYsIGZhbHNlKTsKQEAgLTE5NDUsNyAmIzQzOzE5NTYsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9kZXZfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCWlmICgtLXBvcnQtJmd0O3VzZXJzKQogCQlhaXJvaGFfcHBlX3NldF94bWl0X2ZyYW1lX3NpemUoZGV2KTsKIAllbHNlCi0JCWFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhxZG1hLSZndDtldGgsCiYjNDM7CQlhaXJvaGFfc2V0X2dkbV9wb3J0X2Z3ZF9jZmcoZGV2LSZndDtldGgsCiAJCQkJCSAgICBSRUdfR0RNX0ZXRF9DRkcocG9ydC0mZ3Q7aWQpLAogCQkJCQkgICAgRkVfUFNFX1BPUlRfRFJPUCk7CiAJcmV0dXJuIDA7CkBAIC0yMDI4LDYgJiM0MzsyMDM5LDUzIEBAIHN0YXRpYyBpbnQgYWlyb2hhX2VuYWJsZV9nZG0yX2xvb3BiYWNrKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KQogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIGludCBhaXJvaGFfZGlzYWJsZV9nZG0yX2xvb3BiYWNrKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGRldi0mZ3Q7cG9ydDsKJiM0MzsJc3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IGRldi0mZ3Q7ZXRoOwomIzQzOwlpbnQgaSwgc3JjX3BvcnQ7CiYjNDM7CXUzMiBwc2VfcG9ydDsKJiM0MzsKJiM0MzsJc3JjX3BvcnQgPSBldGgtJmd0O3NvYy0mZ3Q7b3BzLmdldF9zcG9ydChkZXYtJmd0O3BvcnQsIGRldi0mZ3Q7bmJxKTsKJiM0MzsJaWYgKHNyY19wb3J0ICZsdDsgMCkKJiM0MzsJCXJldHVybiBzcmNfcG9ydDsKJiM0MzsKJiM0MzsJYWlyb2hhX2ZlX2NsZWFyKGV0aCwKJiM0MzsJCQlSRUdfU1BfREZUX0NQT1JUKHNyY19wb3J0ICZndDsmZ3Q7IGZscyhTUF9DUE9SVF9ERlRfTUFTSykpLAomIzQzOwkJCVNQX0NQT1JUX01BU0soc3JjX3BvcnQgJmFtcDsgU1BfQ1BPUlRfREZUX01BU0spKTsKJiM0MzsKJiM0MzsJYWlyb2hhX2ZlX3NldChldGgsIFJFR19HRE1fRldEX0NGRyhBSVJPSEFfR0RNMl9JRFgpLAomIzQzOwkJICAgICAgR0RNX1NUUklQX0NSQ19NQVNLKTsKJiM0MzsJYWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKGV0aCwgUkVHX0dETV9GV0RfQ0ZHKEFJUk9IQV9HRE0yX0lEWCksCiYjNDM7CQkJCSAgICBGRV9QU0VfUE9SVF9EUk9QKTsKJiM0MzsJYWlyb2hhX2ZlX2NsZWFyKGV0aCwgUkVHX0dETV9MUEJLX0NGRyhBSVJPSEFfR0RNMl9JRFgpLAomIzQzOwkJCUxQQktfQ0hBTl9NQVNLIHwgTFBCS19NT0RFX01BU0sgfCBMUEJLX0VOX01BU0spOwomIzQzOwlwc2VfcG9ydCA9IGFpcm9oYV9wcGVfaXNfZW5hYmxlZChldGgsIDEpID8gRkVfUFNFX1BPUlRfUFBFMgomIzQzOwkJCQkJCSA6IEZFX1BTRV9QT1JUX1BQRTE7CiYjNDM7CWFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhldGgsIFJFR19HRE1fRldEX0NGRyhBSVJPSEFfR0RNMl9JRFgpLAomIzQzOwkJCQkgICAgcHNlX3BvcnQpOwomIzQzOwomIzQzOwlhaXJvaGFfZmVfcm13KGV0aCwgUkVHX0ZFX1dBTl9QT1JULCBXQU4wX01BU0ssCiYjNDM7CQkgICAgICBGSUVMRF9QUkVQKFdBTjBfTUFTSywgQUlST0hBX0dETTJfSURYKSk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBldGgtJmd0O3NvYy0mZ3Q7bnVtX3BwZTsgaSYjNDM7JiM0MzspCiYjNDM7CQlhaXJvaGFfZmVfY2xlYXIoZXRoLCBSRUdfUFBFX0RGVF9DUE9SVChpLCBBSVJPSEFfR0RNMl9JRFgpLAomIzQzOwkJCQlERlRfQ1BPUlRfTUFTSyhBSVJPSEFfR0RNMl9JRFgpKTsKJiM0MzsKJiM0MzsJLyogRW5hYmxlIFZJUCBhbmQgSUZDIGZvciBHRE0yICovCiYjNDM7CWFpcm9oYV9mZV9zZXQoZXRoLCBSRUdfRkVfVklQX1BPUlRfRU4sIEJJVChBSVJPSEFfR0RNMl9JRFgpKTsKJiM0MzsJYWlyb2hhX2ZlX3NldChldGgsIFJFR19GRV9JRkNfUE9SVF9FTiwgQklUKEFJUk9IQV9HRE0yX0lEWCkpOwomIzQzOwomIzQzOwlpZiAocG9ydC0mZ3Q7aWQgPT0gQUlST0hBX0dETTRfSURYICZhbXA7JmFtcDsgYWlyb2hhX2lzXzc1ODEoZXRoKSkgewomIzQzOwkJdTMyIG1hc2sgPSBGQ19JRF9PRl9TUkNfUE9SVF9NQVNLKGRldi0mZ3Q7bmJxKTsKJiM0MzsKJiM0MzsJCWFpcm9oYV9mZV9ybXcoZXRoLCBSRUdfU1JDX1BPUlRfRkNfTUFQNiwgbWFzaywKJiM0MzsJCQkgICAgICBGQ19NQVA2X0RFRl9WQUxVRSAmYW1wOyBtYXNrKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgc3RydWN0IGFpcm9oYV9nZG1fZGV2ICoKIGFpcm9oYV9nZXRfd2FuX2dkbV9kZXYoc3RydWN0IGFpcm9oYV9ldGggKmV0aCkKIHsKQEAgLTIwNTQsMTUgJiM0MzsyMTEyLDQzIEBAIGFpcm9oYV9nZXRfd2FuX2dkbV9kZXYoc3RydWN0IGFpcm9oYV9ldGggKmV0aCkKIHN0YXRpYyB2b2lkIGFpcm9oYV9kZXZfc2V0X3FkbWEoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IG5ldGRldl9mcm9tX3ByaXYoZGV2KTsKJiM0MzsJc3RydWN0IGFpcm9oYV9xZG1hICpjdXJfcWRtYSwgKnFkbWE7CiAJc3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IGRldi0mZ3Q7ZXRoOwotCWludCBwcGVfaWQ7CiYjNDM7CWludCBpLCBwcGVfaWQ7CiAKIAkvKiBRRE1BMCBpcyB1c2VkIGZvciBsYW4gcG9ydHMgd2hpbGUgUURNQTEgaXMgdXNlZCBmb3IgV0FOIHBvcnRzICovCi0JZGV2LSZndDtxZG1hID0gJmFtcDtldGgtJmd0O3FkbWFbIWFpcm9oYV9pc19sYW5fZ2RtX2RldihkZXYpXTsKLQluZXRkZXYtJmd0O2lycSA9IGRldi0mZ3Q7cWRtYS0mZ3Q7aXJxX2JhbmtzWzBdLmlycTsKJiM0MzsJcWRtYSA9ICZhbXA7ZXRoLSZndDtxZG1hWyFhaXJvaGFfaXNfbGFuX2dkbV9kZXYoZGV2KV07CiYjNDM7CWN1cl9xZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTsKJiM0MzsKJiM0MzsJaWYgKGN1cl9xZG1hKSB7CiYjNDM7CQluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTsKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKGN1cl9xZG1hLSZndDtxX3R4X2lycSk7IGkmIzQzOyYjNDM7KQomIzQzOwkJCW5hcGlfZGlzYWJsZSgmYW1wO2N1cl9xZG1hLSZndDtxX3R4X2lycVtpXS5uYXBpKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyY3VfYXNzaWduX3BvaW50ZXIoZGV2LSZndDtxZG1hLCBxZG1hKTsKJiM0MzsJbmV0ZGV2LSZndDtpcnEgPSBxZG1hLSZndDtpcnFfYmFua3NbMF0uaXJxOwomIzQzOwlzeW5jaHJvbml6ZV9yY3UoKTsKIAogCXBwZV9pZCA9ICFhaXJvaGFfaXNfbGFuX2dkbV9kZXYoZGV2KSAmYW1wOyZhbXA7IGFpcm9oYV9wcGVfaXNfZW5hYmxlZChldGgsIDEpOwogCWFpcm9oYV9wcGVfc2V0X2NwdV9wb3J0KGRldiwgcHBlX2lkLCBhaXJvaGFfZ2V0X2ZlX3BvcnQoZGV2KSk7CiYjNDM7CiYjNDM7CS8qIFNlZWQgcW9zX3N0YXRzIGJhc2VsaW5lcyB3aXRoIHRoZSBuZXcgUURNQSBibG9jayYjMzk7cyBjdXJyZW50CiYjNDM7CSAqIGNvdW50ZXIgdmFsdWVzIHRvIGF2b2lkIGEgc3B1cmlvdXMgc3Bpa2Ugb24gdGhlIGZpcnN0IHN0YXRzCiYjNDM7CSAqIHF1ZXJ5IGFmdGVyIGluaXQgb3IgbWlncmF0aW9uLgomIzQzOwkgKi8KJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUoZGV2LSZndDtxb3Nfc3RhdHMpOyBpJiM0MzsmIzQzOykgewomIzQzOwkJZGV2LSZndDtxb3Nfc3RhdHNbaV0uY3B1X3R4X3BhY2tldHMgPQomIzQzOwkJCWFpcm9oYV9xZG1hX3JyKHFkbWEsIFJFR19DTlRSX1ZBTChpICZsdDsmbHQ7IDEpKTsKJiM0MzsJCWRldi0mZ3Q7cW9zX3N0YXRzW2ldLmZ3ZF90eF9wYWNrZXRzID0KJiM0MzsJCQlhaXJvaGFfcWRtYV9ycihxZG1hLCBSRUdfQ05UUl9WQUwoKGkgJmx0OyZsdDsgMSkgJiM0MzsgMSkpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChjdXJfcWRtYSkgewomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUoY3VyX3FkbWEtJmd0O3FfdHhfaXJxKTsgaSYjNDM7JiM0MzspCiYjNDM7CQkJbmFwaV9lbmFibGUoJmFtcDtjdXJfcWRtYS0mZ3Q7cV90eF9pcnFbaV0ubmFwaSk7CiYjNDM7CQluZXRpZl90eF93YWtlX2FsbF9xdWV1ZXMobmV0ZGV2KTsKJiM0MzsJfQogfQogCiBzdGF0aWMgaW50IGFpcm9oYV9kZXZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQpAQCAtMjA3OCw3ICYjNDM7MjE2NCw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiAJCWZhbGx0aHJvdWdoOwogCWNhc2UgQUlST0hBX0dETTJfSURYOgogCQkvKiBHRE0yIGlzIGFsd2F5cyB1c2VkIGFzIHdhbiAqLwotCQlkZXYtJmd0O2ZsYWdzIHw9IEFJUk9IQV9QUklWX0ZfV0FOOwomIzQzOwkJc2V0X2JpdChBSVJPSEFfREVWX0ZfV0FOLCAmYW1wO2Rldi0mZ3Q7ZmxhZ3MpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKQEAgLTIyMTcsOSAmIzQzOzIzMDMsOSBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0Jc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LSZndDtxZG1hOwogCXUzMiBucl9mcmFncywgdGFnLCBtc2cwLCBtc2cxLCBsZW47CiAJc3RydWN0IGFpcm9oYV9xdWV1ZV9lbnRyeSAqZTsKJiM0MzsJc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hOwogCXN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cTsKIAlzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxOwogCUxJU1RfSEVBRCh0eF9saXN0KTsKQEAgLTIyMjgsNiAmIzQzOzIzMTQsOCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiAJdTE2IGluZGV4OwogCXU4IGZwb3J0OwogCiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJcWRtYSA9IHJjdV9kZXJlZmVyZW5jZShkZXYtJmd0O3FkbWEpOwogCXFpZCA9IGFpcm9oYV9xZG1hX2dldF90eHEocWRtYSwgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpOwogCXRhZyA9IGFpcm9oYV9nZXRfZHNhX3RhZyhza2IsIG5ldGRldik7CiAKQEAgLTIyNzcsNiAmIzQzOzIzNjUsOCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiAJCW5ldGlmX3R4X3N0b3BfcXVldWUodHhxKTsKIAkJcS0mZ3Q7dHhxX3N0b3BwZWQgPSB0cnVlOwogCQlzcGluX3VubG9ja19iaCgmYW1wO3EtJmd0O2xvY2spOwomIzQzOwkJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiAJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAl9CiAKQEAgLTIzNDIsNiAmIzQzOzI0MzIsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJRklFTERfUFJFUChUWF9SSU5HX0NQVV9JRFhfTUFTSywgaW5kZXgpKTsKIAogCXNwaW5fdW5sb2NrX2JoKCZhbXA7cS0mZ3Q7bG9jayk7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwogCiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIApAQCAtMjM1NCw2ICYjNDM7MjQ0NSw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBhaXJvaGFfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIGVycm9yOgogCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJbmV0ZGV2LSZndDtzdGF0cy50eF9kcm9wcGVkJiM0MzsmIzQzOzsKJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogfQpAQCAtMjQzMywxNyAmIzQzOzI1MjUsMTkgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9zZXRfY2hhbl90eF9zY2hlZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCQkJCQkgY29uc3QgdTE2ICp3ZWlnaHRzLCB1OCBuX3dlaWdodHMpCiB7CiAJc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwomIzQzOwlzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7CiAJaW50IGk7CiAKJiM0MzsJcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7CiAJZm9yIChpID0gMDsgaSAmbHQ7IEFJUk9IQV9OVU1fUU9TX1FVRVVFUzsgaSYjNDM7JiM0MzspCi0JCWFpcm9oYV9xZG1hX2NsZWFyKGRldi0mZ3Q7cWRtYSwgUkVHX1FVRVVFX0NMT1NFX0NGRyhjaGFubmVsKSwKJiM0MzsJCWFpcm9oYV9xZG1hX2NsZWFyKHFkbWEsIFJFR19RVUVVRV9DTE9TRV9DRkcoY2hhbm5lbCksCiAJCQkJICBUWFFfRElTQUJMRV9DSEFOX1FVRVVFX01BU0soY2hhbm5lbCwgaSkpOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IG5fd2VpZ2h0czsgaSYjNDM7JiM0MzspIHsKIAkJdTMyIHN0YXR1czsKIAkJaW50IGVycjsKIAotCQlhaXJvaGFfcWRtYV93cihkZXYtJmd0O3FkbWEsIFJFR19UWFdSUl9XRUlHSFRfQ0ZHLAomIzQzOwkJYWlyb2hhX3FkbWFfd3IocWRtYSwgUkVHX1RYV1JSX1dFSUdIVF9DRkcsCiAJCQkgICAgICAgVFdSUl9SV19DTURfTUFTSyB8CiAJCQkgICAgICAgRklFTERfUFJFUChUV1JSX0NIQU5fSURYX01BU0ssIGNoYW5uZWwpIHwKIAkJCSAgICAgICBGSUVMRF9QUkVQKFRXUlJfUVVFVUVfSURYX01BU0ssIGkpIHwKQEAgLTI0NTEsMTIgJiM0MzsyNTQ1LDEyIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfc2V0X2NoYW5fdHhfc2NoZWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkJZXJyID0gcmVhZF9wb2xsX3RpbWVvdXQoYWlyb2hhX3FkbWFfcnIsIHN0YXR1cywKIAkJCQkJc3RhdHVzICZhbXA7IFRXUlJfUldfQ01EX0RPTkUsCiAJCQkJCVVTRUNfUEVSX01TRUMsIDEwICogVVNFQ19QRVJfTVNFQywKLQkJCQkJdHJ1ZSwgZGV2LSZndDtxZG1hLCBSRUdfVFhXUlJfV0VJR0hUX0NGRyk7CiYjNDM7CQkJCQl0cnVlLCBxZG1hLCBSRUdfVFhXUlJfV0VJR0hUX0NGRyk7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwogCX0KIAotCWFpcm9oYV9xZG1hX3JtdyhkZXYtJmd0O3FkbWEsIFJFR19DSEFOX1FPU19NT0RFKGNoYW5uZWwgJmd0OyZndDsgMyksCiYjNDM7CWFpcm9oYV9xZG1hX3JtdyhxZG1hLCBSRUdfQ0hBTl9RT1NfTU9ERShjaGFubmVsICZndDsmZ3Q7IDMpLAogCQkJQ0hBTl9RT1NfTU9ERV9NQVNLKGNoYW5uZWwpLAogCQkJX19maWVsZF9wcmVwKENIQU5fUU9TX01PREVfTUFTSyhjaGFubmVsKSwgbW9kZSkpOwogCkBAIC0yNTIwLDE3ICYjNDM7MjYxNCwyMiBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX2dldF90eF9ldHNfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IGNoYW5uZWwsCiAJCQkJCXN0cnVjdCB0Y19ldHNfcW9wdF9vZmZsb2FkICpvcHQpCiB7CiAJc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCXN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi0mZ3Q7cWRtYTsKJiM0MzsJdTMyIGNwdV90eF9wYWNrZXRzLCBmd2RfdHhfcGFja2V0czsKJiM0MzsJc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hOwomIzQzOwl1NjQgdHhfcGFja2V0czsKIAotCXU2NCBjcHVfdHhfcGFja2V0cyA9IGFpcm9oYV9xZG1hX3JyKHFkbWEsIFJFR19DTlRSX1ZBTChjaGFubmVsICZsdDsmbHQ7IDEpKTsKLQl1NjQgZndkX3R4X3BhY2tldHMgPSBhaXJvaGFfcWRtYV9ycihxZG1hLAotCQkJCQkgICAgUkVHX0NOVFJfVkFMKChjaGFubmVsICZsdDsmbHQ7IDEpICYjNDM7IDEpKTsKLQl1NjQgdHhfcGFja2V0cyA9IChjcHVfdHhfcGFja2V0cyAtIGRldi0mZ3Q7Y3B1X3R4X3BhY2tldHMpICYjNDM7Ci0JCQkgKGZ3ZF90eF9wYWNrZXRzIC0gZGV2LSZndDtmd2RfdHhfcGFja2V0cyk7CiYjNDM7CXFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpOwomIzQzOwljcHVfdHhfcGFja2V0cyA9IGFpcm9oYV9xZG1hX3JyKHFkbWEsIFJFR19DTlRSX1ZBTChjaGFubmVsICZsdDsmbHQ7IDEpKTsKJiM0MzsJZndkX3R4X3BhY2tldHMgPSBhaXJvaGFfcWRtYV9ycihxZG1hLAomIzQzOwkJCQkJUkVHX0NOVFJfVkFMKChjaGFubmVsICZsdDsmbHQ7IDEpICYjNDM7IDEpKTsKJiM0MzsJdHhfcGFja2V0cyA9ICh1MzIpKGNwdV90eF9wYWNrZXRzIC0KJiM0MzsJCQkgICBkZXYtJmd0O3Fvc19zdGF0c1tjaGFubmVsXS5jcHVfdHhfcGFja2V0cyk7CiYjNDM7CXR4X3BhY2tldHMgJiM0Mzs9ICh1MzIpKGZ3ZF90eF9wYWNrZXRzIC0KJiM0MzsJCQkgICAgZGV2LSZndDtxb3Nfc3RhdHNbY2hhbm5lbF0uZndkX3R4X3BhY2tldHMpOwogCiAJX2JzdGF0c191cGRhdGUob3B0LSZndDtzdGF0cy5ic3RhdHMsIDAsIHR4X3BhY2tldHMpOwotCWRldi0mZ3Q7Y3B1X3R4X3BhY2tldHMgPSBjcHVfdHhfcGFja2V0czsKLQlkZXYtJmd0O2Z3ZF90eF9wYWNrZXRzID0gZndkX3R4X3BhY2tldHM7CiYjNDM7CWRldi0mZ3Q7cW9zX3N0YXRzW2NoYW5uZWxdLmNwdV90eF9wYWNrZXRzID0gY3B1X3R4X3BhY2tldHM7CiYjNDM7CWRldi0mZ3Q7cW9zX3N0YXRzW2NoYW5uZWxdLmZ3ZF90eF9wYWNrZXRzID0gZndkX3R4X3BhY2tldHM7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI3ODUsMTYgJiM0MzsyODg0LDE4IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfc2V0X3R4X3JhdGVfbGltaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkJCQkJIHUzMiBidWNrZXRfc2l6ZSkKIHsKIAlzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7CiYjNDM7CXN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTsKIAlpbnQgaSwgZXJyOwogCiYjNDM7CXFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpOwogCWZvciAoaSA9IDA7IGkgJmx0Oz0gVFJUQ01fUEVBS19NT0RFOyBpJiM0MzsmIzQzOykgewotCQllcnIgPSBhaXJvaGFfcWRtYV9zZXRfdHJ0Y21fY29uZmlnKGRldi0mZ3Q7cWRtYSwgY2hhbm5lbCwKJiM0MzsJCWVyciA9IGFpcm9oYV9xZG1hX3NldF90cnRjbV9jb25maWcocWRtYSwgY2hhbm5lbCwKIAkJCQkJCSAgIFJFR19FR1JFU1NfVFJUQ01fQ0ZHLCBpLAogCQkJCQkJICAgISFyYXRlLCBUUlRDTV9NRVRFUl9NT0RFKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CiAKLQkJZXJyID0gYWlyb2hhX3FkbWFfc2V0X3RydGNtX3Rva2VuX2J1Y2tldChkZXYtJmd0O3FkbWEsIGNoYW5uZWwsCiYjNDM7CQllcnIgPSBhaXJvaGFfcWRtYV9zZXRfdHJ0Y21fdG9rZW5fYnVja2V0KHFkbWEsIGNoYW5uZWwsCiAJCQkJCQkJIFJFR19FR1JFU1NfVFJUQ01fQ0ZHLAogCQkJCQkJCSBpLCByYXRlLCBidWNrZXRfc2l6ZSk7CiAJCWlmIChlcnIpCkBAIC0yODMwLDExICYjNDM7MjkzMSwxMiBAQCBzdGF0aWMgaW50IGFpcm9oYV90Y19odGJfYWxsb2NfbGVhZl9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCXUzMiBjaGFubmVsID0gVENfSF9NSU4ob3B0LSZndDtjbGFzc2lkKSAlIEFJUk9IQV9OVU1fUU9TX0NIQU5ORUxTOwogCWludCBlcnIsIG51bV90eF9xdWV1ZXMgPSBBSVJPSEFfTlVNX1RYX1JJTkcgJiM0MzsgY2hhbm5lbCAmIzQzOyAxOwogCXN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQlzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtJmd0O3FkbWE7CiYjNDM7CXN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTsKIAogCS8qIEhlcmUgd2UgbmVlZCB0byBjaGVjayB0aGUgcmVxdWVzdGVkIFFETUEgY2hhbm5lbCBpcyBub3QgYWxyZWFkeQogCSAqIGluIHVzZSBieSBhbm90aGVyIG5ldF9kZXZpY2UgcnVubmluZyBvbiB0aGUgc2FtZSBRRE1BIGJsb2NrLgogCSAqLwomIzQzOwlxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTsKIAlpZiAodGVzdF9hbmRfc2V0X2JpdChjaGFubmVsLCBxZG1hLSZndDtxb3NfY2hhbm5lbF9tYXApKSB7CiAJCU5MX1NFVF9FUlJfTVNHX01PRChvcHQtJmd0O2V4dGFjaywKIAkJCQkgICAmIzM0O3FkbWEgcW9zIGNoYW5uZWwgYWxyZWFkeSBpbiB1c2UmIzM0Oyk7CkBAIC0yODcwLDcgJiM0MzsyOTcyLDcgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9zZXRfcnhfbWV0ZXIoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYsCiAJCQkJICAgIHUzMiByYXRlLCB1MzIgYnVja2V0X3NpemUsCiAJCQkJICAgIGVudW0gdHJ0Y21fdW5pdF90eXBlIHVuaXRfdHlwZSkKIHsKLQlzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtJmd0O3FkbWE7CiYjNDM7CXN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShxZG1hLSZndDtxX3J4KTsgaSYjNDM7JiM0MzspIHsKQEAgLTMwNDUsMTAgJiM0MzszMTQ3LDExIEBAIHN0YXRpYyB2b2lkIGFpcm9oYV90Y19yZW1vdmVfaHRiX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBxdWV1ZSkKIHsKIAlzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJaW50IG51bV90eF9xdWV1ZXMgPSBBSVJPSEFfTlVNX1RYX1JJTkc7Ci0Jc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LSZndDtxZG1hOwomIzQzOwlzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7CiAKIAlhaXJvaGFfcWRtYV9zZXRfdHhfcmF0ZV9saW1pdChuZXRkZXYsIHF1ZXVlLCAwLCAwKTsKIAomIzQzOwlxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTsKIAljbGVhcl9iaXQocXVldWUsIHFkbWEtJmd0O3Fvc19jaGFubmVsX21hcCk7CiAJY2xlYXJfYml0KHF1ZXVlLCBkZXYtJmd0O3Fvc19zcV9ibWFwKTsKIApAQCAtMzA3NCw2ICYjNDM7MzE3NywxMDAgQEAgc3RhdGljIGludCBhaXJvaGFfdGNfaHRiX2RlbGV0ZV9sZWFmX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBhaXJvaGFfZGlzYWJsZV9xb3NfZm9yX2dkbTM0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7CiYjNDM7CXN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBkZXYtJmd0O3BvcnQ7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWlmIChwb3J0LSZndDtpZCAhPSBBSVJPSEFfR0RNM19JRFggJmFtcDsmYW1wOwomIzQzOwkgICAgcG9ydC0mZ3Q7aWQgIT0gQUlST0hBX0dETTRfSURYKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwllcnIgPSBhaXJvaGFfZGlzYWJsZV9nZG0yX2xvb3BiYWNrKGRldik7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQluZXRkZXZfd2FybihuZXRkZXYsCiYjNDM7CQkJICAgICYjMzQ7ZmFpbGVkIGRpc2FibGluZyBHRE0yIGxvb3BiYWNrOiAlZFxuJiMzNDssIGVycik7CiYjNDM7CiYjNDM7CWNsZWFyX2JpdChBSVJPSEFfREVWX0ZfV0FOLCAmYW1wO2Rldi0mZ3Q7ZmxhZ3MpOwomIzQzOwlhaXJvaGFfZGV2X3NldF9xZG1hKGRldik7CiYjNDM7CiYjNDM7CWFpcm9oYV9zZXRfbWFjYWRkcihkZXYsIG5ldGRldi0mZ3Q7ZGV2X2FkZHIpOwomIzQzOwlhaXJvaGFfcHBlX3NldF94bWl0X2ZyYW1lX3NpemUoZGV2KTsKJiM0MzsKJiM0MzsJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKJiM0MzsJCWFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhkZXYtJmd0O2V0aCwKJiM0MzsJCQkJCSAgICBSRUdfR0RNX0ZXRF9DRkcocG9ydC0mZ3Q7aWQpLAomIzQzOwkJCQkJICAgIEZFX1BTRV9QT1JUX1BQRTEpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFpcm9oYV9lbmFibGVfcW9zX2Zvcl9nZG0zNChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAomIzQzOwkJCQkgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQomIzQzO3sKJiM0MzsJc3RydWN0IGFpcm9oYV9nZG1fZGV2ICp3YW5fZGV2LCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJc3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGRldi0mZ3Q7cG9ydDsKJiM0MzsJc3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IGRldi0mZ3Q7ZXRoOwomIzQzOwlpbnQgZXJyID0gLUVCVVNZOwomIzQzOwomIzQzOwlpZiAocG9ydC0mZ3Q7aWQgIT0gQUlST0hBX0dETTNfSURYICZhbXA7JmFtcDsKJiM0MzsJICAgIHBvcnQtJmd0O2lkICE9IEFJUk9IQV9HRE00X0lEWCkgewomIzQzOwkJLyogSFcgUW9TIGlzIGFsd2F5cyBzdXBwb3J0ZWQgYnkgR0RNMSBhbmQgR0RNMiAqLwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFhaXJvaGFfaXNfbGFuX2dkbV9kZXYoZGV2KSkgLyogQWxyZWFkeSBlbmFibGVkICovCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO2Zsb3dfb2ZmbG9hZF9tdXRleCk7CiYjNDM7CiYjNDM7CXdhbl9kZXYgPSBhaXJvaGFfZ2V0X3dhbl9nZG1fZGV2KGV0aCk7CiYjNDM7CWlmICh3YW5fZGV2KSB7CiYjNDM7CQlpZiAodGVzdF9iaXQoQUlST0hBX0RFVl9GX1RYX1FPUywgJmFtcDt3YW5fZGV2LSZndDtmbGFncykgfHwKJiM0MzsJCSAgICB3YW5fZGV2LSZndDtwb3J0LSZndDtpZCA9PSBBSVJPSEFfR0RNMl9JRFgpIHsKJiM0MzsJCQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLAomIzQzOwkJCQkJICAgJiMzNDtRb1MgY29uZmlndXJlZCBmb3IgV0FOIGRldmljZSYjMzQ7KTsKJiM0MzsJCQlnb3RvIGVycm9yX3VubG9jazsKJiM0MzsJCX0KJiM0MzsJCWFpcm9oYV9kaXNhYmxlX3Fvc19mb3JfZ2RtMzQobmV0ZGV2X2Zyb21fcHJpdih3YW5fZGV2KSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2V0X2JpdChBSVJPSEFfREVWX0ZfV0FOLCAmYW1wO2Rldi0mZ3Q7ZmxhZ3MpOwomIzQzOwlhaXJvaGFfZGV2X3NldF9xZG1hKGRldik7CiYjNDM7CWVyciA9IGFpcm9oYV9lbmFibGVfZ2RtMl9sb29wYmFjayhkZXYpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBlcnJvcl9kaXNhYmxlX3dhbjsKJiM0MzsKJiM0MzsJZXJyID0gYWlyb2hhX3NldF9tYWNhZGRyKGRldiwgbmV0ZGV2LSZndDtkZXZfYWRkcik7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIGVycm9yX2Rpc2FibGVfbG9vcGJhY2s7CiYjNDM7CiYjNDM7CWFpcm9oYV9kZXZfc2V0X3htaXRfZnJhbWVfc2l6ZShuZXRkZXYpOwomIzQzOwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CiYjNDM7CQl1MzIgcHNlX3BvcnQ7CiYjNDM7CiYjNDM7CQlwc2VfcG9ydCA9IGFpcm9oYV9wcGVfaXNfZW5hYmxlZChldGgsIDEpID8gRkVfUFNFX1BPUlRfUFBFMgomIzQzOwkJCQkJCQkgOiBGRV9QU0VfUE9SVF9QUEUxOwomIzQzOwkJYWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKGV0aCwgUkVHX0dETV9GV0RfQ0ZHKHBvcnQtJmd0O2lkKSwKJiM0MzsJCQkJCSAgICBwc2VfcG9ydCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2V0X2JpdChBSVJPSEFfREVWX0ZfVFhfUU9TLCAmYW1wO2Rldi0mZ3Q7ZmxhZ3MpOwomIzQzOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtmbG93X29mZmxvYWRfbXV0ZXgpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztlcnJvcl9kaXNhYmxlX2xvb3BiYWNrOgomIzQzOwlhaXJvaGFfZGlzYWJsZV9nZG0yX2xvb3BiYWNrKGRldik7CiYjNDM7ZXJyb3JfZGlzYWJsZV93YW46CiYjNDM7CWNsZWFyX2JpdChBSVJPSEFfREVWX0ZfV0FOLCAmYW1wO2Rldi0mZ3Q7ZmxhZ3MpOwomIzQzOwlhaXJvaGFfZGV2X3NldF9xZG1hKGRldik7CiYjNDM7ZXJyb3JfdW5sb2NrOgomIzQzOwltdXRleF91bmxvY2soJmFtcDtmbG93X29mZmxvYWRfbXV0ZXgpOwomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgYWlyb2hhX3RjX2h0Yl9kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwpAQCAtMzA4Miw2ICYjNDM7MzI3OSw4IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3RjX2h0Yl9kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiAJZm9yX2VhY2hfc2V0X2JpdChxLCBkZXYtJmd0O3Fvc19zcV9ibWFwLCBBSVJPSEFfTlVNX1FPU19DSEFOTkVMUykKIAkJYWlyb2hhX3RjX3JlbW92ZV9odGJfcXVldWUobmV0ZGV2LCBxKTsKIAomIzQzOwljbGVhcl9iaXQoQUlST0hBX0RFVl9GX1RYX1FPUywgJmFtcDtkZXYtJmd0O2ZsYWdzKTsKJiM0MzsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzEwMSwyNCAmIzQzOzMzMDAsMjQgQEAgc3RhdGljIGludCBhaXJvaGFfdGNfZ2V0X2h0Yl9nZXRfbGVhZl9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGFpcm9oYV90Y19zZXR1cF9xZGlzY19odGIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKJiM0MztzdGF0aWMgaW50IGFpcm9oYV90Y19zZXR1cF9xZGlzY19odGIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkJCQkgICAgIHN0cnVjdCB0Y19odGJfcW9wdF9vZmZsb2FkICpvcHQpCiB7CiAJc3dpdGNoIChvcHQtJmd0O2NvbW1hbmQpIHsKIAljYXNlIFRDX0hUQl9DUkVBVEU6Ci0JCWJyZWFrOwomIzQzOwkJcmV0dXJuIGFpcm9oYV9lbmFibGVfcW9zX2Zvcl9nZG0zNChuZXRkZXYsIG9wdC0mZ3Q7ZXh0YWNrKTsKIAljYXNlIFRDX0hUQl9ERVNUUk9ZOgotCQlyZXR1cm4gYWlyb2hhX3RjX2h0Yl9kZXN0cm95KGRldik7CiYjNDM7CQlyZXR1cm4gYWlyb2hhX3RjX2h0Yl9kZXN0cm95KG5ldGRldik7CiAJY2FzZSBUQ19IVEJfTk9ERV9NT0RJRlk6Ci0JCXJldHVybiBhaXJvaGFfdGNfaHRiX21vZGlmeV9xdWV1ZShkZXYsIG9wdCk7CiYjNDM7CQlyZXR1cm4gYWlyb2hhX3RjX2h0Yl9tb2RpZnlfcXVldWUobmV0ZGV2LCBvcHQpOwogCWNhc2UgVENfSFRCX0xFQUZfQUxMT0NfUVVFVUU6Ci0JCXJldHVybiBhaXJvaGFfdGNfaHRiX2FsbG9jX2xlYWZfcXVldWUoZGV2LCBvcHQpOwomIzQzOwkJcmV0dXJuIGFpcm9oYV90Y19odGJfYWxsb2NfbGVhZl9xdWV1ZShuZXRkZXYsIG9wdCk7CiAJY2FzZSBUQ19IVEJfTEVBRl9ERUw6CiAJY2FzZSBUQ19IVEJfTEVBRl9ERUxfTEFTVDoKIAljYXNlIFRDX0hUQl9MRUFGX0RFTF9MQVNUX0ZPUkNFOgotCQlyZXR1cm4gYWlyb2hhX3RjX2h0Yl9kZWxldGVfbGVhZl9xdWV1ZShkZXYsIG9wdCk7CiYjNDM7CQlyZXR1cm4gYWlyb2hhX3RjX2h0Yl9kZWxldGVfbGVhZl9xdWV1ZShuZXRkZXYsIG9wdCk7CiAJY2FzZSBUQ19IVEJfTEVBRl9RVUVSWV9RVUVVRToKLQkJcmV0dXJuIGFpcm9oYV90Y19nZXRfaHRiX2dldF9sZWFmX3F1ZXVlKGRldiwgb3B0KTsKJiM0MzsJCXJldHVybiBhaXJvaGFfdGNfZ2V0X2h0Yl9nZXRfbGVhZl9xdWV1ZShuZXRkZXYsIG9wdCk7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oCmluZGV4IGZlOTM0ZjlmZmU4YTExLi5lNmZiZDQyY2Y5NjQyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oCkBAIC01NzAsMjQgJiM0Mzs1NzAsMzEgQEAgc3RydWN0IGFpcm9oYV9xZG1hIHsKIAlERUNMQVJFX0JJVE1BUChxb3NfY2hhbm5lbF9tYXAsIEFJUk9IQV9OVU1fUU9TX0NIQU5ORUxTKTsKIH07CiAKLWVudW0gYWlyb2hhX3ByaXZfZmxhZ3MgewotCUFJUk9IQV9QUklWX0ZfV0FOID0gQklUKDApLAomIzQzO2VudW0gYWlyb2hhX2Rldl9mbGFncyB7CiYjNDM7CUFJUk9IQV9ERVZfRl9XQU4sCiYjNDM7CUFJUk9IQV9ERVZfRl9UWF9RT1MsCiB9OwogCiBzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgewomIzQzOwlzdHJ1Y3QgYWlyb2hhX3FkbWEgX19yY3UgKnFkbWE7CiAJc3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydDsKLQlzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7CiAJc3RydWN0IGFpcm9oYV9ldGggKmV0aDsKIAogCURFQ0xBUkVfQklUTUFQKHFvc19zcV9ibWFwLCBBSVJPSEFfTlVNX1FPU19DSEFOTkVMUyk7Ci0JLyogcW9zIHN0YXRzIGNvdW50ZXJzICovCi0JdTY0IGNwdV90eF9wYWNrZXRzOwotCXU2NCBmd2RfdHhfcGFja2V0czsKJiM0MzsJc3RydWN0IHsKJiM0MzsJCXUzMiBjcHVfdHhfcGFja2V0czsKJiM0MzsJCXUzMiBmd2RfdHhfcGFja2V0czsKJiM0MzsJfSBxb3Nfc3RhdHNbQUlST0hBX05VTV9RT1NfQ0hBTk5FTFNdOwogCi0JdTMyIGZsYWdzOwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBuYnE7CiAKIAlzdHJ1Y3QgYWlyb2hhX2h3X3N0YXRzIHN0YXRzOwomIzQzOwomIzQzOwlzdHJ1Y3QgewomIzQzOwkJYXRvbWljX3QgYnl0ZXM7CiYjNDM7CQlhdG9taWNfdCBwa3RzOwomIzQzOwl9IGJxbFtBSVJPSEFfTlVNX05FVERFVl9UWF9SSU5HU107CiB9OwogCiBzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0IHsKQEAgLTY5NCw3ICYjNDM7NzAxLDcgQEAgc3RhdGljIGlubGluZSB1MTYgYWlyb2hhX3FkbWFfZ2V0X3R4cShzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEsIHUxNiBxaWQpCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBhaXJvaGFfaXNfbGFuX2dkbV9kZXYoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpCiB7Ci0JcmV0dXJuICEoZGV2LSZndDtmbGFncyAmYW1wOyBBSVJPSEFfUFJJVl9GX1dBTik7CiYjNDM7CXJldHVybiAhdGVzdF9iaXQoQUlST0hBX0RFVl9GX1dBTiwgJmFtcDtkZXYtJmd0O2ZsYWdzKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIGFpcm9oYV9pc183NTgxKHN0cnVjdCBhaXJvaGFfZXRoICpldGgpCkBAIC03MTEsNiAmIzQzOzcxOCwxNiBAQCBpbnQgYWlyb2hhX2dldF9mZV9wb3J0KHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KTsKIGJvb2wgYWlyb2hhX2lzX3ZhbGlkX2dkbV9kZXYoc3RydWN0IGFpcm9oYV9ldGggKmV0aCwKIAkJCSAgICAgc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpOwogCiYjNDM7ZXh0ZXJuIHN0cnVjdCBtdXRleCBmbG93X29mZmxvYWRfbXV0ZXg7CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgYWlyb2hhX3FkbWEgKgomIzQzO2Fpcm9oYV9xZG1hX2RlcmVmKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KQomIzQzO3sKJiM0MzsJcmV0dXJuIHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoZGV2LSZndDtxZG1hLAomIzQzOwkJCQkJIGxvY2tkZXBfcnRubF9pc19oZWxkKCkgfHwKJiM0MzsJCQkJCSBsb2NrZGVwX2lzX2hlbGQoJmFtcDtmbG93X29mZmxvYWRfbXV0ZXgpKTsKJiM0Mzt9CiYjNDM7CiB2b2lkIGFpcm9oYV9wcGVfc2V0X3htaXRfZnJhbWVfc2l6ZShzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldik7CiB2b2lkIGFpcm9oYV9wcGVfc2V0X2NwdV9wb3J0KHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2LCB1OCBwcGVfaWQsIHU4IGZwb3J0KTsKIGJvb2wgYWlyb2hhX3BwZV9pc19lbmFibGVkKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsIGludCBpbmRleCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYwppbmRleCBlNGMzNjQ0ZGQ2ZWM3YS4uMzNkZGYwZDA3ODU1MzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYwpAQCAtMTUsNyAmIzQzOzE1LDEwIEBACiAjaW5jbHVkZSAmIzM0O2Fpcm9oYV9yZWdzLmgmIzM0OwogI2luY2x1ZGUgJiMzNDthaXJvaGFfZXRoLmgmIzM0OwogCi1zdGF0aWMgREVGSU5FX01VVEVYKGZsb3dfb2ZmbG9hZF9tdXRleCk7CiYjNDM7LyogU2VyaWFsaXplIGFpcm9oYV9nZG1fZGV2IGZsYWdzLCBRRE1BIHBvaW50ZXIgYW5kIFBQRSBDUFUgcG9ydAomIzQzOyAqIGNvbmZpZ3VyYXRpb24uCiYjNDM7ICovCiYjNDM7REVGSU5FX01VVEVYKGZsb3dfb2ZmbG9hZF9tdXRleCk7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHBwZV9sb2NrKTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyBhaXJvaGFfZmxvd190YWJsZV9wYXJhbXMgPSB7CkBAIC04Niw4ICYjNDM7ODksOCBAQCBzdGF0aWMgdTMyIGFpcm9oYV9wcGVfZ2V0X3RpbWVzdGFtcChzdHJ1Y3QgYWlyb2hhX3BwZSAqcHBlKQogCiB2b2lkIGFpcm9oYV9wcGVfc2V0X2NwdV9wb3J0KHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2LCB1OCBwcGVfaWQsIHU4IGZwb3J0KQogewotCXN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi0mZ3Q7cWRtYTsKLQlzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gcWRtYS0mZ3Q7ZXRoOwomIzQzOwlzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpOwomIzQzOwlzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gZGV2LSZndDtldGg7CiAJdTggcWRtYV9pZCA9IHFkbWEgLSAmYW1wO2V0aC0mZ3Q7cWRtYVswXTsKIAl1MzIgZmVfY3B1X3BvcnQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcmVncy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9yZWdzLmgKaW5kZXggNmZlZDYzZDAxM2I0MTIuLjQ0MmI0OGM5Yjk5MWVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaApAQCAtMzc1LDYgJiM0MzszNzUsNyBAQAogCiAjZGVmaW5lIFJFR19TUkNfUE9SVF9GQ19NQVA2CQkweDIyOTgKICNkZWZpbmUgRkNfSURfT0ZfU1JDX1BPUlRfTUFTSyhfbikJR0VOTUFTSyg0ICYjNDM7ICgoX24pICZsdDsmbHQ7IDMpLCAoKF9uKSAmbHQ7Jmx0OyAzKSkKJiM0MzsjZGVmaW5lIEZDX01BUDZfREVGX1ZBTFVFCQkweDFiMWExOTE4CiAKICNkZWZpbmUgUkVHX1dBTl9NVFUwCQkJMHgyMzAwCiAjZGVmaW5lIFdBTl9NVFUxX01BU0sJCQlHRU5NQVNLKDI5LCAxNikKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjA6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExMDYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBBaXJvaGEgRXRoZXJuZXQgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGZvciB0aGUgYGFpcm9oYWAgZXRoZXJuZXQgZHJpdmVyLCBzcGVjaWZpY2FsbHkgZm9yIEFpcm9oYSBFTjc1ODEgU29Dcy4gSXQgdG91Y2hlcyBhIGZldyBjcml0aWNhbCBhcmVhcyDigJMgdGhlIFFETUEgaGFuZGxpbmcsIHdoaWNoIGxvb2tzIGxpa2UgaXQmIzM5O3MgZ2V0dGluZyBhbiBSQ1UgdXBkYXRlIGZvciBgZGV2LSZndDtxZG1hYCwgYW5kIHNvbWUgaW50ZXJlc3RpbmcgYWRkaXRpb25zIGxpa2UgUW9TIHN1cHBvcnQgZm9yIEdETTMgYW5kIEdETTQuICBJdCYjMzk7cyBhbHNvIHVwZGF0aW5nIEJRTCBoYW5kbGluZywgd2hpY2ggaXMgYWx3YXlzIGdvb2QgdG8gc2VlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLgoKQWlyb2hhIGlzIGEgbmV0d29ya2luZyBTb0MsIGxpa2VseSBBUk02NCwgYW5kIHRoZSBkcml2ZXIgaXMgKnNwZWNpZmljKiB0byB0aGF0IFNvQy4gIEdlbmVyYWxseSwgdGhlc2UgU29DLXNwZWNpZmljIGV0aGVybmV0IGRyaXZlcnMg4oCTIHNpbWlsYXIgdG8gd2hhdCB5b3Ugc2VlIHdpdGggTWVkaWFUZWsgYW5kIG90aGVycyDigJMgcmVseSBvbiB0aGUgcGh5c2ljYWwgaGFyZHdhcmUgb3Igc3BlY2lmaWMgcGxhdGZvcm0gZGV2aWNlcyBmb3IgdGhlIHByb2JlIHRvIHN1Y2NlZWQuIFNvLCBJIG5lZWQgdG8ga25vdyBpZiBJIGNhbiBldmVuIHRlc3QgdGhpcyBpbiBRRU1VLiBJcyB0aGlzIGEgcGxhdGZvcm0gZHJpdmVyPwoKVG8gZmlndXJlIHRoaXMgb3V0LCBJJiMzOTtsbCBsZXZlcmFnZSB0aGUgYGRlZmF1bHRfYXBpOmdyZXBwZXJgIGFuZCBzZWFyY2ggZm9yIHRoZSBkcml2ZXIgcmVnaXN0cmF0aW9uLiBUaGF0IHNob3VsZCBxdWlja2x5IHRlbGwgbWUgaWYgaXQgcmVsaWVzIG9uIGEgc3BlY2lmaWMgZGV2aWNlIHRyZWUsIG9yIGlmIGl0IGhhcyBzb21lIGtpbmQgb2YgYnJvYWRlciBhcHBsaWNhYmlsaXR5LiBUaGF0JiMzOTtzIHRoZSBmaXJzdCBzdGVwIGluIGRldGVybWluaW5nIGhvdyBlYXNpbHkgdGhpcyBwYXRjaCBjYW4gYmUgZXZhbHVhdGVkIGluIGEgdGVzdGluZyBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIwOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21vZHVsZV9wbGF0Zm9ybV9kcml2ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM9Mzk1Nj1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhaXJvaGFfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMzk2My19O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYzozOTY0Om1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoYWlyb2hhX2RyaXZlcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTM5NjUtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYz04MTM9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYWlyb2hhX25wdV9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy04MjAtfTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6ODIxOm1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoYWlyb2hhX25wdV9kcml2ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy04MjItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjA6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5MDgKCQkJCQkJCW91dHB1dDogMTA3CgkJCQkJCQl0aG91Z2h0czogNTI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFzc2Vzc21lbnQgb2YgdGhlIEFpcm9oYSBFdGhlcm5ldCBEcml2ZXImIzM5O3MgRnV6emFiaWxpdHkqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGxhdGZvcm0gZHJpdmVyLCBgYWlyb2hhX2V0aC5jYCwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0JiMzOTtzIGdvaW5nIHRvIGJlIGEgdG91Z2ggbnV0IHRvIGNyYWNrIGZvciBmdXp6aW5nLiBQbGF0Zm9ybSBkcml2ZXJzLCBlc3BlY2lhbGx5IHRob3NlIHRpZWQgdG8gc3BlY2lmaWMgU29DcyBsaWtlIHRoZSBBaXJvaGEgRU43NTgxLCB0eXBpY2FsbHkgbmVlZCBhIGRldmljZSB0cmVlIG5vZGUgdG8gcHJvYmUgcHJvcGVybHksIHJpZ2h0PyBBbmQgUUVNVSwgYXMgZmFyIGFzIEkga25vdywgZG9lc24mIzM5O3QgbmF0aXZlbHkgZW11bGF0ZSB0aGlzIHBhcnRpY3VsYXIgQWlyb2hhIGhhcmR3YXJlIG9yIGl0cyBhc3NvY2lhdGVkIGV0aGVybmV0IGNvbnRyb2xsZXJzLgoKTXkgZmlyc3QgcXVlc3Rpb24gaXMgYWx3YXlzLCAmIzM0O0lzIHRoZXJlIGFueSBzbmVha3kgd2F5IHRvIGdldCBhdCB0aGlzIHRocm91Z2ggYSB2aXJ0dWFsIGRldmljZSBvciBzb21lIGtpbmQgb2YgbW9ja2luZz8mIzM0OyBCdXQsIHJlYWxpc3RpY2FsbHksIHBsYXRmb3JtIGRyaXZlcnMgZm9yIHNwZWNpZmljIGhhcmR3YXJlIGFyZSByYXJlbHkgZnV6emFibGUgdW5sZXNzIHlvdSBoYXZlIGEgY3VzdG9tIGVtdWxhdG9yIG9yIHRoZXkmIzM5O3JlIHBhcnQgb2YgYSBtb3JlIGdlbmVyaWMsIG1vY2thYmxlIGZyYW1ld29yay4gU3l6a2FsbGVyJiMzOTtzIG5vdCBnb2luZyB0byBoZWxwIGhlcmUgZWl0aGVyLCBhcyBpdCBkb2VzbiYjMzk7dCBlbXVsYXRlIHRoZSBBaXJvaGEgU29Dcy4KCkxldCBtZSB0YWtlIGEgbG9vayBhdCB0aGUgZnVuY3Rpb25zIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcuIEFoYSwgdGhlIHBhdGNoIGlzIGNoYW5naW5nIHRoaW5ncyBpbiBgYWlyb2hhX3FkbWFfd2FrZV9uZXRkZXZfdHhxc2AsIGBhaXJvaGFfcWRtYV90eF9uYXBpX3BvbGxgLCBgYWlyb2hhX2Rldl9vcGVuYCwgYGFpcm9oYV9kZXZfc3RvcGAsIGBhaXJvaGFfZW5hYmxlX2dkbTJfbG9vcGJhY2tgLCBgYWlyb2hhX2Rpc2FibGVfZ2RtMl9sb29wYmFja2AsIGBhaXJvaGFfZGV2X3NldF9xZG1hYCwgYGFpcm9oYV9kZXZfaW5pdGAsIGBhaXJvaGFfZGV2X3htaXRgLCBgYWlyb2hhX3FkbWFfc2V0X2NoYW5fdHhfc2NoZWRgLCBgYWlyb2hhX3FkbWFfZ2V0X3R4X2V0c19zdGF0c2AsIGBhaXJvaGFfcWRtYV9zZXRfdHhfcmF0ZV9saW1pdGAsIGBhaXJvaGFfdGNfaHRiX2FsbG9jX2xlYWZfcXVldWVgLCBgYWlyb2hhX3FkbWFfc2V0X3J4X21ldGVyYCwgYGFpcm9oYV90Y19yZW1vdmVfaHRiX3F1ZXVlYCwgYGFpcm9oYV90Y19odGJfZGVsZXRlX2xlYWZfcXVldWVgLCBgYWlyb2hhX2Rpc2FibGVfcW9zX2Zvcl9nZG0zNGAsIGBhaXJvaGFfZW5hYmxlX3Fvc19mb3JfZ2RtMzRgLCBgYWlyb2hhX3RjX2h0Yl9kZXN0cm95YCwgYGFpcm9oYV90Y19nZXRfaHRiX2dldF9sZWFmX3F1ZXVlYCwgYGFpcm9oYV90Y19zZXR1cF9xZGlzY19odGJgLiBZZWFoLCB0aG9zZSBhcmUgYWxsIHNjcmVhbWluZyAmIzM0O0Fpcm9oYSBldGhlcm5ldCBkcml2ZXImIzM0OyB0byBtZS4KCkJhc2VkIG9uIHRoaXMsIGl0JiMzOTtzIGNsZWFyIHRoaXMgaXMgYSBwbGF0Zm9ybSBkcml2ZXIgZGVlcGx5IHRpZWQgdG8gdGhlIEFpcm9oYSBTb0MuIFRoaXMgbWVhbnMgaXQgbmVlZHMgcmVhbCBoYXJkd2FyZSBvciBhIHZlcnkgc3BlY2lmaWMgZW11bGF0b3IgdG8gYmUgcHJvYmVkIGFuZCBleGVjdXRlZC4gU2luY2UgUUVNVSwgYW5kIHRoZXJlZm9yZSBlbnZpcm9ubWVudHMgbGlrZSBHQ0UsIGFyZW4mIzM5O3QgZ29pbmcgdG8gY3V0IGl0LCBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gY29uY2x1ZGUgdGhhdCByZWFjaGluZyB0aGlzIGNvZGUgaXMgaW1wb3NzaWJsZSBpbiBhIHZpcnR1YWxpemVkIHNldHRpbmcuCgpUaGVyZWZvcmUsIEkmIzM5O20gZ29pbmcgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgcmF0aW9uYWxlIGlzIHN0cmFpZ2h0Zm9yd2FyZDogaXQmIzM5O3MgYSBoYXJkd2FyZS1zcGVjaWZpYyBwbGF0Zm9ybSBkcml2ZXIgZm9yIGFuIEFpcm9oYSBTb0MsIGFuZCBpdCBjYW5ub3QgYmUgcHJvYmVkIG9yIGV4ZWN1dGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50cy4gVGhlcmUmIzM5O3Mgbm8gZWZmZWN0aXZlIHBhdGggdG8gZnV6eiBpdCBpbiBhIHByYWN0aWNhbCB3YXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjA6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQWlyb2hhIGV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhLyksIHdoaWNoIGlzIGEgcGxhdGZvcm0gZHJpdmVyIHNwZWNpZmljIHRvIEFpcm9oYSBTb0NzIChlLmcuLCBFTjc1ODEpLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudHMsIG1lYW5pbmcgdGhlIGRyaXZlciBjYW5ub3QgYmUgcHJvYmVkIGFuZCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQWlyb2hhIGV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhLyksIHdoaWNoIGlzIGEgcGxhdGZvcm0gZHJpdmVyIHNwZWNpZmljIHRvIEFpcm9oYSBTb0NzIChlLmcuLCBFTjc1ODEpLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudHMsIG1lYW5pbmcgdGhlIGRyaXZlciBjYW5ub3QgYmUgcHJvYmVkIGFuZCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjVUMjA6MDI6NDQuMzkyNTEwMDU0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzMTIzOTgwMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBaXJvaGEgZXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvKSwgd2hpY2ggaXMgYSBwbGF0Zm9ybSBkcml2ZXIgc3BlY2lmaWMgdG8gQWlyb2hhIFNvQ3MgKGUuZy4sIEVONzU4MSkuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50cywgbWVhbmluZyB0aGUgZHJpdmVyIGNhbm5vdCBiZSBwcm9iZWQgYW5kIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIwOjAyOjQ0LjM5MjUxNTI1NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUyMzk0NjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNWU0ZjEwZTVmOGUxYzUzZjUyYzRjYzY0ZGQxNzY3ODkwMDdiMDM1NVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEp1bCAyNSAyMDowMjo0MyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguY1xcbmluZGV4IDc5NDE4ZTY4MmY3MWYzLi4wMjkyMDU4N2UwY2M0NyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguY1xcbkBAIC05MzQsNyArOTM0LDcgQEAgc3RhdGljIHZvaWQgYWlyb2hhX3FkbWFfd2FrZV9uZXRkZXZfdHhxcyhzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxKVxcbiBcXHRcXHRcXHRpZiAoIWRldilcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRcXHRcXHRpZiAoZGV2LVxcdTAwM2VxZG1hICE9IHFkbWEpXFxuK1xcdFxcdFxcdGlmIChyY3VfYWNjZXNzX3BvaW50ZXIoZGV2LVxcdTAwM2VxZG1hKSAhPSBxZG1hKVxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdFxcdG5ldGRldiA9IG5ldGRldl9mcm9tX3ByaXYoZGV2KTtcXG5AQCAtMTAzOCwxMCArMTAzOCwyMSBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3R4X25hcGlfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpXFxuIFxcdFxcdHEtXFx1MDAzZXF1ZXVlZC0tO1xcbiBcXG4gXFx0XFx0aWYgKHNrYikge1xcbitcXHRcXHRcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KHNrYi1cXHUwMDNlZGV2KTtcXG4rXFx0XFx0XFx0dTE2IHFpZHggPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTtcXG4gXFx0XFx0XFx0c3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxO1xcbiBcXG4gXFx0XFx0XFx0dHhxID0gc2tiX2dldF90eF9xdWV1ZShza2ItXFx1MDAzZWRldiwgc2tiKTtcXG4tXFx0XFx0XFx0bmV0ZGV2X3R4X2NvbXBsZXRlZF9xdWV1ZSh0eHEsIDEsIHNrYi1cXHUwMDNlbGVuKTtcXG4rXFx0XFx0XFx0aWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihkZXYtXFx1MDAzZXFkbWEpICE9IHFkbWEpIHtcXG4rXFx0XFx0XFx0XFx0YXRvbWljX2FkZCgxLCBcXHUwMDI2ZGV2LVxcdTAwM2VicWxbcWlkeF0ucGt0cyk7XFxuK1xcdFxcdFxcdFxcdGF0b21pY19hZGQoc2tiLVxcdTAwM2VsZW4sIFxcdTAwMjZkZXYtXFx1MDAzZWJxbFtxaWR4XS5ieXRlcyk7XFxuK1xcdFxcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdFxcdHUzMiBwa3RzID0gMSwgYnl0ZXMgPSBza2ItXFx1MDAzZWxlbjtcXG4rXFxuK1xcdFxcdFxcdFxcdGJ5dGVzICs9IGF0b21pY194Y2hnKFxcdTAwMjZkZXYtXFx1MDAzZWJxbFtxaWR4XS5ieXRlcywgMCk7XFxuK1xcdFxcdFxcdFxcdHBrdHMgKz0gYXRvbWljX3hjaGcoXFx1MDAyNmRldi1cXHUwMDNlYnFsW3FpZHhdLnBrdHMsIDApO1xcbitcXHRcXHRcXHRcXHRuZXRkZXZfdHhfY29tcGxldGVkX3F1ZXVlKHR4cSwgcGt0cywgYnl0ZXMpO1xcbitcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XFxuIFxcdFxcdH1cXG4gXFxuQEAgLTE5MDUsOCArMTkxNiw4IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIHtcXG4gXFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbiBcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZGV2LVxcdTAwM2Vwb3J0O1xcbi1cXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtXFx1MDAzZXFkbWE7XFxuIFxcdHUzMiBwc2VfcG9ydCA9IEZFX1BTRV9QT1JUX1BQRTE7XFxuK1xcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcXG4gXFx0aW50IGVycjtcXG4gXFxuIFxcdG5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMobmV0ZGV2KTtcXG5AQCAtMTkxNCw2ICsxOTI1LDcgQEAgc3RhdGljIGludCBhaXJvaGFfZGV2X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuK1xcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xcbiBcXHRpZiAobmV0ZGV2X3VzZXNfZHNhKG5ldGRldikpXFxuIFxcdFxcdGFpcm9oYV9mZV9zZXQocWRtYS1cXHUwMDNlZXRoLCBSRUdfR0RNX0lOR1JFU1NfQ0ZHKHBvcnQtXFx1MDAzZWlkKSxcXG4gXFx0XFx0XFx0ICAgICAgR0RNX1NUQUdfRU5fTUFTSyk7XFxuQEAgLTE5MzcsNyArMTk0OSw2IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIHtcXG4gXFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbiBcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZGV2LVxcdTAwM2Vwb3J0O1xcbi1cXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtXFx1MDAzZXFkbWE7XFxuIFxcbiBcXHRuZXRpZl90eF9kaXNhYmxlKG5ldGRldik7XFxuIFxcdGFpcm9oYV9zZXRfdmlwX2Zvcl9nZG1fcG9ydChkZXYsIGZhbHNlKTtcXG5AQCAtMTk0NSw3ICsxOTU2LDcgQEAgc3RhdGljIGludCBhaXJvaGFfZGV2X3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4gXFx0aWYgKC0tcG9ydC1cXHUwMDNldXNlcnMpXFxuIFxcdFxcdGFpcm9oYV9wcGVfc2V0X3htaXRfZnJhbWVfc2l6ZShkZXYpO1xcbiBcXHRlbHNlXFxuLVxcdFxcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhxZG1hLVxcdTAwM2VldGgsXFxuK1xcdFxcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhkZXYtXFx1MDAzZWV0aCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIFJFR19HRE1fRldEX0NGRyhwb3J0LVxcdTAwM2VpZCksXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBGRV9QU0VfUE9SVF9EUk9QKTtcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTIwMjgsNiArMjAzOSw1MyBAQCBzdGF0aWMgaW50IGFpcm9oYV9lbmFibGVfZ2RtMl9sb29wYmFjayhzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgYWlyb2hhX2Rpc2FibGVfZ2RtMl9sb29wYmFjayhzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcXG4re1xcbitcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZGV2LVxcdTAwM2Vwb3J0O1xcbitcXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gZGV2LVxcdTAwM2VldGg7XFxuK1xcdGludCBpLCBzcmNfcG9ydDtcXG4rXFx0dTMyIHBzZV9wb3J0O1xcbitcXG4rXFx0c3JjX3BvcnQgPSBldGgtXFx1MDAzZXNvYy1cXHUwMDNlb3BzLmdldF9zcG9ydChkZXYtXFx1MDAzZXBvcnQsIGRldi1cXHUwMDNlbmJxKTtcXG4rXFx0aWYgKHNyY19wb3J0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHNyY19wb3J0O1xcbitcXG4rXFx0YWlyb2hhX2ZlX2NsZWFyKGV0aCxcXG4rXFx0XFx0XFx0UkVHX1NQX0RGVF9DUE9SVChzcmNfcG9ydCBcXHUwMDNlXFx1MDAzZSBmbHMoU1BfQ1BPUlRfREZUX01BU0spKSxcXG4rXFx0XFx0XFx0U1BfQ1BPUlRfTUFTSyhzcmNfcG9ydCBcXHUwMDI2IFNQX0NQT1JUX0RGVF9NQVNLKSk7XFxuK1xcbitcXHRhaXJvaGFfZmVfc2V0KGV0aCwgUkVHX0dETV9GV0RfQ0ZHKEFJUk9IQV9HRE0yX0lEWCksXFxuK1xcdFxcdCAgICAgIEdETV9TVFJJUF9DUkNfTUFTSyk7XFxuK1xcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhldGgsIFJFR19HRE1fRldEX0NGRyhBSVJPSEFfR0RNMl9JRFgpLFxcbitcXHRcXHRcXHRcXHQgICAgRkVfUFNFX1BPUlRfRFJPUCk7XFxuK1xcdGFpcm9oYV9mZV9jbGVhcihldGgsIFJFR19HRE1fTFBCS19DRkcoQUlST0hBX0dETTJfSURYKSxcXG4rXFx0XFx0XFx0TFBCS19DSEFOX01BU0sgfCBMUEJLX01PREVfTUFTSyB8IExQQktfRU5fTUFTSyk7XFxuK1xcdHBzZV9wb3J0ID0gYWlyb2hhX3BwZV9pc19lbmFibGVkKGV0aCwgMSkgPyBGRV9QU0VfUE9SVF9QUEUyXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCA6IEZFX1BTRV9QT1JUX1BQRTE7XFxuK1xcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhldGgsIFJFR19HRE1fRldEX0NGRyhBSVJPSEFfR0RNMl9JRFgpLFxcbitcXHRcXHRcXHRcXHQgICAgcHNlX3BvcnQpO1xcbitcXG4rXFx0YWlyb2hhX2ZlX3JtdyhldGgsIFJFR19GRV9XQU5fUE9SVCwgV0FOMF9NQVNLLFxcbitcXHRcXHQgICAgICBGSUVMRF9QUkVQKFdBTjBfTUFTSywgQUlST0hBX0dETTJfSURYKSk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZXRoLVxcdTAwM2Vzb2MtXFx1MDAzZW51bV9wcGU7IGkrKylcXG4rXFx0XFx0YWlyb2hhX2ZlX2NsZWFyKGV0aCwgUkVHX1BQRV9ERlRfQ1BPUlQoaSwgQUlST0hBX0dETTJfSURYKSxcXG4rXFx0XFx0XFx0XFx0REZUX0NQT1JUX01BU0soQUlST0hBX0dETTJfSURYKSk7XFxuK1xcbitcXHQvKiBFbmFibGUgVklQIGFuZCBJRkMgZm9yIEdETTIgKi9cXG4rXFx0YWlyb2hhX2ZlX3NldChldGgsIFJFR19GRV9WSVBfUE9SVF9FTiwgQklUKEFJUk9IQV9HRE0yX0lEWCkpO1xcbitcXHRhaXJvaGFfZmVfc2V0KGV0aCwgUkVHX0ZFX0lGQ19QT1JUX0VOLCBCSVQoQUlST0hBX0dETTJfSURYKSk7XFxuK1xcbitcXHRpZiAocG9ydC1cXHUwMDNlaWQgPT0gQUlST0hBX0dETTRfSURYIFxcdTAwMjZcXHUwMDI2IGFpcm9oYV9pc183NTgxKGV0aCkpIHtcXG4rXFx0XFx0dTMyIG1hc2sgPSBGQ19JRF9PRl9TUkNfUE9SVF9NQVNLKGRldi1cXHUwMDNlbmJxKTtcXG4rXFxuK1xcdFxcdGFpcm9oYV9mZV9ybXcoZXRoLCBSRUdfU1JDX1BPUlRfRkNfTUFQNiwgbWFzayxcXG4rXFx0XFx0XFx0ICAgICAgRkNfTUFQNl9ERUZfVkFMVUUgXFx1MDAyNiBtYXNrKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKlxcbiBhaXJvaGFfZ2V0X3dhbl9nZG1fZGV2KHN0cnVjdCBhaXJvaGFfZXRoICpldGgpXFxuIHtcXG5AQCAtMjA1NCwxNSArMjExMiw0MyBAQCBhaXJvaGFfZ2V0X3dhbl9nZG1fZGV2KHN0cnVjdCBhaXJvaGFfZXRoICpldGgpXFxuIHN0YXRpYyB2b2lkIGFpcm9oYV9kZXZfc2V0X3FkbWEoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpXFxuIHtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IG5ldGRldl9mcm9tX3ByaXYoZGV2KTtcXG4rXFx0c3RydWN0IGFpcm9oYV9xZG1hICpjdXJfcWRtYSwgKnFkbWE7XFxuIFxcdHN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBkZXYtXFx1MDAzZWV0aDtcXG4tXFx0aW50IHBwZV9pZDtcXG4rXFx0aW50IGksIHBwZV9pZDtcXG4gXFxuIFxcdC8qIFFETUEwIGlzIHVzZWQgZm9yIGxhbiBwb3J0cyB3aGlsZSBRRE1BMSBpcyB1c2VkIGZvciBXQU4gcG9ydHMgKi9cXG4tXFx0ZGV2LVxcdTAwM2VxZG1hID0gXFx1MDAyNmV0aC1cXHUwMDNlcWRtYVshYWlyb2hhX2lzX2xhbl9nZG1fZGV2KGRldildO1xcbi1cXHRuZXRkZXYtXFx1MDAzZWlycSA9IGRldi1cXHUwMDNlcWRtYS1cXHUwMDNlaXJxX2JhbmtzWzBdLmlycTtcXG4rXFx0cWRtYSA9IFxcdTAwMjZldGgtXFx1MDAzZXFkbWFbIWFpcm9oYV9pc19sYW5fZ2RtX2RldihkZXYpXTtcXG4rXFx0Y3VyX3FkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xcbitcXG4rXFx0aWYgKGN1cl9xZG1hKSB7XFxuK1xcdFxcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpO1xcbitcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShjdXJfcWRtYS1cXHUwMDNlcV90eF9pcnEpOyBpKyspXFxuK1xcdFxcdFxcdG5hcGlfZGlzYWJsZShcXHUwMDI2Y3VyX3FkbWEtXFx1MDAzZXFfdHhfaXJxW2ldLm5hcGkpO1xcbitcXHR9XFxuK1xcbitcXHRyY3VfYXNzaWduX3BvaW50ZXIoZGV2LVxcdTAwM2VxZG1hLCBxZG1hKTtcXG4rXFx0bmV0ZGV2LVxcdTAwM2VpcnEgPSBxZG1hLVxcdTAwM2VpcnFfYmFua3NbMF0uaXJxO1xcbitcXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG4gXFxuIFxcdHBwZV9pZCA9ICFhaXJvaGFfaXNfbGFuX2dkbV9kZXYoZGV2KSBcXHUwMDI2XFx1MDAyNiBhaXJvaGFfcHBlX2lzX2VuYWJsZWQoZXRoLCAxKTtcXG4gXFx0YWlyb2hhX3BwZV9zZXRfY3B1X3BvcnQoZGV2LCBwcGVfaWQsIGFpcm9oYV9nZXRfZmVfcG9ydChkZXYpKTtcXG4rXFxuK1xcdC8qIFNlZWQgcW9zX3N0YXRzIGJhc2VsaW5lcyB3aXRoIHRoZSBuZXcgUURNQSBibG9jaydzIGN1cnJlbnRcXG4rXFx0ICogY291bnRlciB2YWx1ZXMgdG8gYXZvaWQgYSBzcHVyaW91cyBzcGlrZSBvbiB0aGUgZmlyc3Qgc3RhdHNcXG4rXFx0ICogcXVlcnkgYWZ0ZXIgaW5pdCBvciBtaWdyYXRpb24uXFxuK1xcdCAqL1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShkZXYtXFx1MDAzZXFvc19zdGF0cyk7IGkrKykge1xcbitcXHRcXHRkZXYtXFx1MDAzZXFvc19zdGF0c1tpXS5jcHVfdHhfcGFja2V0cyA9XFxuK1xcdFxcdFxcdGFpcm9oYV9xZG1hX3JyKHFkbWEsIFJFR19DTlRSX1ZBTChpIFxcdTAwM2NcXHUwMDNjIDEpKTtcXG4rXFx0XFx0ZGV2LVxcdTAwM2Vxb3Nfc3RhdHNbaV0uZndkX3R4X3BhY2tldHMgPVxcbitcXHRcXHRcXHRhaXJvaGFfcWRtYV9ycihxZG1hLCBSRUdfQ05UUl9WQUwoKGkgXFx1MDAzY1xcdTAwM2MgMSkgKyAxKSk7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChjdXJfcWRtYSkge1xcbitcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShjdXJfcWRtYS1cXHUwMDNlcV90eF9pcnEpOyBpKyspXFxuK1xcdFxcdFxcdG5hcGlfZW5hYmxlKFxcdTAwMjZjdXJfcWRtYS1cXHUwMDNlcV90eF9pcnFbaV0ubmFwaSk7XFxuK1xcdFxcdG5ldGlmX3R4X3dha2VfYWxsX3F1ZXVlcyhuZXRkZXYpO1xcbitcXHR9XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuQEAgLTIwNzgsNyArMjE2NCw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIFxcdFxcdGZhbGx0aHJvdWdoO1xcbiBcXHRjYXNlIEFJUk9IQV9HRE0yX0lEWDpcXG4gXFx0XFx0LyogR0RNMiBpcyBhbHdheXMgdXNlZCBhcyB3YW4gKi9cXG4tXFx0XFx0ZGV2LVxcdTAwM2VmbGFncyB8PSBBSVJPSEFfUFJJVl9GX1dBTjtcXG4rXFx0XFx0c2V0X2JpdChBSVJPSEFfREVWX0ZfV0FOLCBcXHUwMDI2ZGV2LVxcdTAwM2VmbGFncyk7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRicmVhaztcXG5AQCAtMjIxNyw5ICsyMzAzLDkgQEAgc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4tXFx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LVxcdTAwM2VxZG1hO1xcbiBcXHR1MzIgbnJfZnJhZ3MsIHRhZywgbXNnMCwgbXNnMSwgbGVuO1xcbiBcXHRzdHJ1Y3QgYWlyb2hhX3F1ZXVlX2VudHJ5ICplO1xcbitcXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7XFxuIFxcdHN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cTtcXG4gXFx0c3RydWN0IGFpcm9oYV9xdWV1ZSAqcTtcXG4gXFx0TElTVF9IRUFEKHR4X2xpc3QpO1xcbkBAIC0yMjI4LDYgKzIzMTQsOCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdHUxNiBpbmRleDtcXG4gXFx0dTggZnBvcnQ7XFxuIFxcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdHFkbWEgPSByY3VfZGVyZWZlcmVuY2UoZGV2LVxcdTAwM2VxZG1hKTtcXG4gXFx0cWlkID0gYWlyb2hhX3FkbWFfZ2V0X3R4cShxZG1hLCBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKSk7XFxuIFxcdHRhZyA9IGFpcm9oYV9nZXRfZHNhX3RhZyhza2IsIG5ldGRldik7XFxuIFxcbkBAIC0yMjc3LDYgKzIzNjUsOCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdG5ldGlmX3R4X3N0b3BfcXVldWUodHhxKTtcXG4gXFx0XFx0cS1cXHUwMDNldHhxX3N0b3BwZWQgPSB0cnVlO1xcbiBcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2cS1cXHUwMDNlbG9jayk7XFxuK1xcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXG4gXFx0XFx0cmV0dXJuIE5FVERFVl9UWF9CVVNZO1xcbiBcXHR9XFxuIFxcbkBAIC0yMzQyLDYgKzI0MzIsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdFxcdEZJRUxEX1BSRVAoVFhfUklOR19DUFVfSURYX01BU0ssIGluZGV4KSk7XFxuIFxcbiBcXHRzcGluX3VubG9ja19iaChcXHUwMDI2cS1cXHUwMDNlbG9jayk7XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXG4gXFx0cmV0dXJuIE5FVERFVl9UWF9PSztcXG4gXFxuQEAgLTIzNTQsNiArMjQ0NSw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBhaXJvaGFfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gZXJyb3I6XFxuIFxcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XFxuIFxcdG5ldGRldi1cXHUwMDNlc3RhdHMudHhfZHJvcHBlZCsrO1xcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFxuIFxcdHJldHVybiBORVRERVZfVFhfT0s7XFxuIH1cXG5AQCAtMjQzMywxNyArMjUyNSwxOSBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3NldF9jaGFuX3R4X3NjaGVkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdFxcdFxcdFxcdFxcdCBjb25zdCB1MTYgKndlaWdodHMsIHU4IG5fd2VpZ2h0cylcXG4ge1xcbiBcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuK1xcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcXG4gXFx0aW50IGk7XFxuIFxcbitcXHRxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFJUk9IQV9OVU1fUU9TX1FVRVVFUzsgaSsrKVxcbi1cXHRcXHRhaXJvaGFfcWRtYV9jbGVhcihkZXYtXFx1MDAzZXFkbWEsIFJFR19RVUVVRV9DTE9TRV9DRkcoY2hhbm5lbCksXFxuK1xcdFxcdGFpcm9oYV9xZG1hX2NsZWFyKHFkbWEsIFJFR19RVUVVRV9DTE9TRV9DRkcoY2hhbm5lbCksXFxuIFxcdFxcdFxcdFxcdCAgVFhRX0RJU0FCTEVfQ0hBTl9RVUVVRV9NQVNLKGNoYW5uZWwsIGkpKTtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBuX3dlaWdodHM7IGkrKykge1xcbiBcXHRcXHR1MzIgc3RhdHVzO1xcbiBcXHRcXHRpbnQgZXJyO1xcbiBcXG4tXFx0XFx0YWlyb2hhX3FkbWFfd3IoZGV2LVxcdTAwM2VxZG1hLCBSRUdfVFhXUlJfV0VJR0hUX0NGRyxcXG4rXFx0XFx0YWlyb2hhX3FkbWFfd3IocWRtYSwgUkVHX1RYV1JSX1dFSUdIVF9DRkcsXFxuIFxcdFxcdFxcdCAgICAgICBUV1JSX1JXX0NNRF9NQVNLIHxcXG4gXFx0XFx0XFx0ICAgICAgIEZJRUxEX1BSRVAoVFdSUl9DSEFOX0lEWF9NQVNLLCBjaGFubmVsKSB8XFxuIFxcdFxcdFxcdCAgICAgICBGSUVMRF9QUkVQKFRXUlJfUVVFVUVfSURYX01BU0ssIGkpIHxcXG5AQCAtMjQ1MSwxMiArMjU0NSwxMiBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3NldF9jaGFuX3R4X3NjaGVkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdFxcdGVyciA9IHJlYWRfcG9sbF90aW1lb3V0KGFpcm9oYV9xZG1hX3JyLCBzdGF0dXMsXFxuIFxcdFxcdFxcdFxcdFxcdHN0YXR1cyBcXHUwMDI2IFRXUlJfUldfQ01EX0RPTkUsXFxuIFxcdFxcdFxcdFxcdFxcdFVTRUNfUEVSX01TRUMsIDEwICogVVNFQ19QRVJfTVNFQyxcXG4tXFx0XFx0XFx0XFx0XFx0dHJ1ZSwgZGV2LVxcdTAwM2VxZG1hLCBSRUdfVFhXUlJfV0VJR0hUX0NGRyk7XFxuK1xcdFxcdFxcdFxcdFxcdHRydWUsIHFkbWEsIFJFR19UWFdSUl9XRUlHSFRfQ0ZHKTtcXG4gXFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0fVxcbiBcXG4tXFx0YWlyb2hhX3FkbWFfcm13KGRldi1cXHUwMDNlcWRtYSwgUkVHX0NIQU5fUU9TX01PREUoY2hhbm5lbCBcXHUwMDNlXFx1MDAzZSAzKSxcXG4rXFx0YWlyb2hhX3FkbWFfcm13KHFkbWEsIFJFR19DSEFOX1FPU19NT0RFKGNoYW5uZWwgXFx1MDAzZVxcdTAwM2UgMyksXFxuIFxcdFxcdFxcdENIQU5fUU9TX01PREVfTUFTSyhjaGFubmVsKSxcXG4gXFx0XFx0XFx0X19maWVsZF9wcmVwKENIQU5fUU9TX01PREVfTUFTSyhjaGFubmVsKSwgbW9kZSkpO1xcbiBcXG5AQCAtMjUyMCwxNyArMjYxNCwyMiBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX2dldF90eF9ldHNfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IGNoYW5uZWwsXFxuIFxcdFxcdFxcdFxcdFxcdHN0cnVjdCB0Y19ldHNfcW9wdF9vZmZsb2FkICpvcHQpXFxuIHtcXG4gXFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbi1cXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtXFx1MDAzZXFkbWE7XFxuK1xcdHUzMiBjcHVfdHhfcGFja2V0cywgZndkX3R4X3BhY2tldHM7XFxuK1xcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcXG4rXFx0dTY0IHR4X3BhY2tldHM7XFxuIFxcbi1cXHR1NjQgY3B1X3R4X3BhY2tldHMgPSBhaXJvaGFfcWRtYV9ycihxZG1hLCBSRUdfQ05UUl9WQUwoY2hhbm5lbCBcXHUwMDNjXFx1MDAzYyAxKSk7XFxuLVxcdHU2NCBmd2RfdHhfcGFja2V0cyA9IGFpcm9oYV9xZG1hX3JyKHFkbWEsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBSRUdfQ05UUl9WQUwoKGNoYW5uZWwgXFx1MDAzY1xcdTAwM2MgMSkgKyAxKSk7XFxuLVxcdHU2NCB0eF9wYWNrZXRzID0gKGNwdV90eF9wYWNrZXRzIC0gZGV2LVxcdTAwM2VjcHVfdHhfcGFja2V0cykgK1xcbi1cXHRcXHRcXHQgKGZ3ZF90eF9wYWNrZXRzIC0gZGV2LVxcdTAwM2Vmd2RfdHhfcGFja2V0cyk7XFxuK1xcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xcbitcXHRjcHVfdHhfcGFja2V0cyA9IGFpcm9oYV9xZG1hX3JyKHFkbWEsIFJFR19DTlRSX1ZBTChjaGFubmVsIFxcdTAwM2NcXHUwMDNjIDEpKTtcXG4rXFx0ZndkX3R4X3BhY2tldHMgPSBhaXJvaGFfcWRtYV9ycihxZG1hLFxcbitcXHRcXHRcXHRcXHRcXHRSRUdfQ05UUl9WQUwoKGNoYW5uZWwgXFx1MDAzY1xcdTAwM2MgMSkgKyAxKSk7XFxuK1xcdHR4X3BhY2tldHMgPSAodTMyKShjcHVfdHhfcGFja2V0cyAtXFxuK1xcdFxcdFxcdCAgIGRldi1cXHUwMDNlcW9zX3N0YXRzW2NoYW5uZWxdLmNwdV90eF9wYWNrZXRzKTtcXG4rXFx0dHhfcGFja2V0cyArPSAodTMyKShmd2RfdHhfcGFja2V0cyAtXFxuK1xcdFxcdFxcdCAgICBkZXYtXFx1MDAzZXFvc19zdGF0c1tjaGFubmVsXS5md2RfdHhfcGFja2V0cyk7XFxuIFxcbiBcXHRfYnN0YXRzX3VwZGF0ZShvcHQtXFx1MDAzZXN0YXRzLmJzdGF0cywgMCwgdHhfcGFja2V0cyk7XFxuLVxcdGRldi1cXHUwMDNlY3B1X3R4X3BhY2tldHMgPSBjcHVfdHhfcGFja2V0cztcXG4tXFx0ZGV2LVxcdTAwM2Vmd2RfdHhfcGFja2V0cyA9IGZ3ZF90eF9wYWNrZXRzO1xcbitcXHRkZXYtXFx1MDAzZXFvc19zdGF0c1tjaGFubmVsXS5jcHVfdHhfcGFja2V0cyA9IGNwdV90eF9wYWNrZXRzO1xcbitcXHRkZXYtXFx1MDAzZXFvc19zdGF0c1tjaGFubmVsXS5md2RfdHhfcGFja2V0cyA9IGZ3ZF90eF9wYWNrZXRzO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtMjc4NSwxNiArMjg4NCwxOCBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3NldF90eF9yYXRlX2xpbWl0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdFxcdFxcdFxcdFxcdCB1MzIgYnVja2V0X3NpemUpXFxuIHtcXG4gXFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbitcXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7XFxuIFxcdGludCBpLCBlcnI7XFxuIFxcbitcXHRxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjPSBUUlRDTV9QRUFLX01PREU7IGkrKykge1xcbi1cXHRcXHRlcnIgPSBhaXJvaGFfcWRtYV9zZXRfdHJ0Y21fY29uZmlnKGRldi1cXHUwMDNlcWRtYSwgY2hhbm5lbCxcXG4rXFx0XFx0ZXJyID0gYWlyb2hhX3FkbWFfc2V0X3RydGNtX2NvbmZpZyhxZG1hLCBjaGFubmVsLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICBSRUdfRUdSRVNTX1RSVENNX0NGRywgaSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgISFyYXRlLCBUUlRDTV9NRVRFUl9NT0RFKTtcXG4gXFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuLVxcdFxcdGVyciA9IGFpcm9oYV9xZG1hX3NldF90cnRjbV90b2tlbl9idWNrZXQoZGV2LVxcdTAwM2VxZG1hLCBjaGFubmVsLFxcbitcXHRcXHRlcnIgPSBhaXJvaGFfcWRtYV9zZXRfdHJ0Y21fdG9rZW5fYnVja2V0KHFkbWEsIGNoYW5uZWwsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdCBSRUdfRUdSRVNTX1RSVENNX0NGRyxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0IGksIHJhdGUsIGJ1Y2tldF9zaXplKTtcXG4gXFx0XFx0aWYgKGVycilcXG5AQCAtMjgzMCwxMSArMjkzMSwxMiBAQCBzdGF0aWMgaW50IGFpcm9oYV90Y19odGJfYWxsb2NfbGVhZl9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHR1MzIgY2hhbm5lbCA9IFRDX0hfTUlOKG9wdC1cXHUwMDNlY2xhc3NpZCkgJSBBSVJPSEFfTlVNX1FPU19DSEFOTkVMUztcXG4gXFx0aW50IGVyciwgbnVtX3R4X3F1ZXVlcyA9IEFJUk9IQV9OVU1fVFhfUklORyArIGNoYW5uZWwgKyAxO1xcbiBcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuLVxcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cXHUwMDNlcWRtYTtcXG4rXFx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xcbiBcXG4gXFx0LyogSGVyZSB3ZSBuZWVkIHRvIGNoZWNrIHRoZSByZXF1ZXN0ZWQgUURNQSBjaGFubmVsIGlzIG5vdCBhbHJlYWR5XFxuIFxcdCAqIGluIHVzZSBieSBhbm90aGVyIG5ldF9kZXZpY2UgcnVubmluZyBvbiB0aGUgc2FtZSBRRE1BIGJsb2NrLlxcbiBcXHQgKi9cXG4rXFx0cWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XFxuIFxcdGlmICh0ZXN0X2FuZF9zZXRfYml0KGNoYW5uZWwsIHFkbWEtXFx1MDAzZXFvc19jaGFubmVsX21hcCkpIHtcXG4gXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKG9wdC1cXHUwMDNlZXh0YWNrLFxcbiBcXHRcXHRcXHRcXHQgICBcXFwicWRtYSBxb3MgY2hhbm5lbCBhbHJlYWR5IGluIHVzZVxcXCIpO1xcbkBAIC0yODcwLDcgKzI5NzIsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3NldF9yeF9tZXRlcihzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldixcXG4gXFx0XFx0XFx0XFx0ICAgIHUzMiByYXRlLCB1MzIgYnVja2V0X3NpemUsXFxuIFxcdFxcdFxcdFxcdCAgICBlbnVtIHRydGNtX3VuaXRfdHlwZSB1bml0X3R5cGUpXFxuIHtcXG4tXFx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LVxcdTAwM2VxZG1hO1xcbitcXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xcbiBcXHRpbnQgaTtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHFkbWEtXFx1MDAzZXFfcngpOyBpKyspIHtcXG5AQCAtMzA0NSwxMCArMzE0NywxMSBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfdGNfcmVtb3ZlX2h0Yl9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgcXVldWUpXFxuIHtcXG4gXFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbiBcXHRpbnQgbnVtX3R4X3F1ZXVlcyA9IEFJUk9IQV9OVU1fVFhfUklORztcXG4tXFx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LVxcdTAwM2VxZG1hO1xcbitcXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7XFxuIFxcbiBcXHRhaXJvaGFfcWRtYV9zZXRfdHhfcmF0ZV9saW1pdChuZXRkZXYsIHF1ZXVlLCAwLCAwKTtcXG4gXFxuK1xcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xcbiBcXHRjbGVhcl9iaXQocXVldWUsIHFkbWEtXFx1MDAzZXFvc19jaGFubmVsX21hcCk7XFxuIFxcdGNsZWFyX2JpdChxdWV1ZSwgZGV2LVxcdTAwM2Vxb3Nfc3FfYm1hcCk7XFxuIFxcbkBAIC0zMDc0LDYgKzMxNzcsMTAwIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3RjX2h0Yl9kZWxldGVfbGVhZl9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgYWlyb2hhX2Rpc2FibGVfcW9zX2Zvcl9nZG0zNChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFx0c3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGRldi1cXHUwMDNlcG9ydDtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGlmIChwb3J0LVxcdTAwM2VpZCAhPSBBSVJPSEFfR0RNM19JRFggXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIHBvcnQtXFx1MDAzZWlkICE9IEFJUk9IQV9HRE00X0lEWClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0ZXJyID0gYWlyb2hhX2Rpc2FibGVfZ2RtMl9sb29wYmFjayhkZXYpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRuZXRkZXZfd2FybihuZXRkZXYsXFxuK1xcdFxcdFxcdCAgICBcXFwiZmFpbGVkIGRpc2FibGluZyBHRE0yIGxvb3BiYWNrOiAlZFxcXFxuXFxcIiwgZXJyKTtcXG4rXFxuK1xcdGNsZWFyX2JpdChBSVJPSEFfREVWX0ZfV0FOLCBcXHUwMDI2ZGV2LVxcdTAwM2VmbGFncyk7XFxuK1xcdGFpcm9oYV9kZXZfc2V0X3FkbWEoZGV2KTtcXG4rXFxuK1xcdGFpcm9oYV9zZXRfbWFjYWRkcihkZXYsIG5ldGRldi1cXHUwMDNlZGV2X2FkZHIpO1xcbitcXHRhaXJvaGFfcHBlX3NldF94bWl0X2ZyYW1lX3NpemUoZGV2KTtcXG4rXFxuK1xcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXFxuK1xcdFxcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhkZXYtXFx1MDAzZWV0aCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIFJFR19HRE1fRldEX0NGRyhwb3J0LVxcdTAwM2VpZCksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBGRV9QU0VfUE9SVF9QUEUxKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhaXJvaGFfZW5hYmxlX3Fvc19mb3JfZ2RtMzQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4re1xcbitcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKndhbl9kZXYsICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbitcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZGV2LVxcdTAwM2Vwb3J0O1xcbitcXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gZGV2LVxcdTAwM2VldGg7XFxuK1xcdGludCBlcnIgPSAtRUJVU1k7XFxuK1xcbitcXHRpZiAocG9ydC1cXHUwMDNlaWQgIT0gQUlST0hBX0dETTNfSURYIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBwb3J0LVxcdTAwM2VpZCAhPSBBSVJPSEFfR0RNNF9JRFgpIHtcXG4rXFx0XFx0LyogSFcgUW9TIGlzIGFsd2F5cyBzdXBwb3J0ZWQgYnkgR0RNMSBhbmQgR0RNMiAqL1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCFhaXJvaGFfaXNfbGFuX2dkbV9kZXYoZGV2KSkgLyogQWxyZWFkeSBlbmFibGVkICovXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2Zmxvd19vZmZsb2FkX211dGV4KTtcXG4rXFxuK1xcdHdhbl9kZXYgPSBhaXJvaGFfZ2V0X3dhbl9nZG1fZGV2KGV0aCk7XFxuK1xcdGlmICh3YW5fZGV2KSB7XFxuK1xcdFxcdGlmICh0ZXN0X2JpdChBSVJPSEFfREVWX0ZfVFhfUU9TLCBcXHUwMDI2d2FuX2Rldi1cXHUwMDNlZmxhZ3MpIHx8XFxuK1xcdFxcdCAgICB3YW5fZGV2LVxcdTAwM2Vwb3J0LVxcdTAwM2VpZCA9PSBBSVJPSEFfR0RNMl9JRFgpIHtcXG4rXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgXFxcIlFvUyBjb25maWd1cmVkIGZvciBXQU4gZGV2aWNlXFxcIik7XFxuK1xcdFxcdFxcdGdvdG8gZXJyb3JfdW5sb2NrO1xcbitcXHRcXHR9XFxuK1xcdFxcdGFpcm9oYV9kaXNhYmxlX3Fvc19mb3JfZ2RtMzQobmV0ZGV2X2Zyb21fcHJpdih3YW5fZGV2KSk7XFxuK1xcdH1cXG4rXFxuK1xcdHNldF9iaXQoQUlST0hBX0RFVl9GX1dBTiwgXFx1MDAyNmRldi1cXHUwMDNlZmxhZ3MpO1xcbitcXHRhaXJvaGFfZGV2X3NldF9xZG1hKGRldik7XFxuK1xcdGVyciA9IGFpcm9oYV9lbmFibGVfZ2RtMl9sb29wYmFjayhkZXYpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGVycm9yX2Rpc2FibGVfd2FuO1xcbitcXG4rXFx0ZXJyID0gYWlyb2hhX3NldF9tYWNhZGRyKGRldiwgbmV0ZGV2LVxcdTAwM2VkZXZfYWRkcik7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gZXJyb3JfZGlzYWJsZV9sb29wYmFjaztcXG4rXFxuK1xcdGFpcm9oYV9kZXZfc2V0X3htaXRfZnJhbWVfc2l6ZShuZXRkZXYpO1xcbitcXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7XFxuK1xcdFxcdHUzMiBwc2VfcG9ydDtcXG4rXFxuK1xcdFxcdHBzZV9wb3J0ID0gYWlyb2hhX3BwZV9pc19lbmFibGVkKGV0aCwgMSkgPyBGRV9QU0VfUE9SVF9QUEUyXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCA6IEZFX1BTRV9QT1JUX1BQRTE7XFxuK1xcdFxcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhldGgsIFJFR19HRE1fRldEX0NGRyhwb3J0LVxcdTAwM2VpZCksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBwc2VfcG9ydCk7XFxuK1xcdH1cXG4rXFxuK1xcdHNldF9iaXQoQUlST0hBX0RFVl9GX1RYX1FPUywgXFx1MDAyNmRldi1cXHUwMDNlZmxhZ3MpO1xcbitcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZmbG93X29mZmxvYWRfbXV0ZXgpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitlcnJvcl9kaXNhYmxlX2xvb3BiYWNrOlxcbitcXHRhaXJvaGFfZGlzYWJsZV9nZG0yX2xvb3BiYWNrKGRldik7XFxuK2Vycm9yX2Rpc2FibGVfd2FuOlxcbitcXHRjbGVhcl9iaXQoQUlST0hBX0RFVl9GX1dBTiwgXFx1MDAyNmRldi1cXHUwMDNlZmxhZ3MpO1xcbitcXHRhaXJvaGFfZGV2X3NldF9xZG1hKGRldik7XFxuK2Vycm9yX3VubG9jazpcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZmbG93X29mZmxvYWRfbXV0ZXgpO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4gc3RhdGljIGludCBhaXJvaGFfdGNfaHRiX2Rlc3Ryb3koc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4ge1xcbiBcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuQEAgLTMwODIsNiArMzI3OSw4IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3RjX2h0Yl9kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIFxcdGZvcl9lYWNoX3NldF9iaXQocSwgZGV2LVxcdTAwM2Vxb3Nfc3FfYm1hcCwgQUlST0hBX05VTV9RT1NfQ0hBTk5FTFMpXFxuIFxcdFxcdGFpcm9oYV90Y19yZW1vdmVfaHRiX3F1ZXVlKG5ldGRldiwgcSk7XFxuIFxcbitcXHRjbGVhcl9iaXQoQUlST0hBX0RFVl9GX1RYX1FPUywgXFx1MDAyNmRldi1cXHUwMDNlZmxhZ3MpO1xcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTMxMDEsMjQgKzMzMDAsMjQgQEAgc3RhdGljIGludCBhaXJvaGFfdGNfZ2V0X2h0Yl9nZXRfbGVhZl9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBhaXJvaGFfdGNfc2V0dXBfcWRpc2NfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuK3N0YXRpYyBpbnQgYWlyb2hhX3RjX3NldHVwX3FkaXNjX2h0YihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCB0Y19odGJfcW9wdF9vZmZsb2FkICpvcHQpXFxuIHtcXG4gXFx0c3dpdGNoIChvcHQtXFx1MDAzZWNvbW1hbmQpIHtcXG4gXFx0Y2FzZSBUQ19IVEJfQ1JFQVRFOlxcbi1cXHRcXHRicmVhaztcXG4rXFx0XFx0cmV0dXJuIGFpcm9oYV9lbmFibGVfcW9zX2Zvcl9nZG0zNChuZXRkZXYsIG9wdC1cXHUwMDNlZXh0YWNrKTtcXG4gXFx0Y2FzZSBUQ19IVEJfREVTVFJPWTpcXG4tXFx0XFx0cmV0dXJuIGFpcm9oYV90Y19odGJfZGVzdHJveShkZXYpO1xcbitcXHRcXHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9kZXN0cm95KG5ldGRldik7XFxuIFxcdGNhc2UgVENfSFRCX05PREVfTU9ESUZZOlxcbi1cXHRcXHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9tb2RpZnlfcXVldWUoZGV2LCBvcHQpO1xcbitcXHRcXHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9tb2RpZnlfcXVldWUobmV0ZGV2LCBvcHQpO1xcbiBcXHRjYXNlIFRDX0hUQl9MRUFGX0FMTE9DX1FVRVVFOlxcbi1cXHRcXHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9hbGxvY19sZWFmX3F1ZXVlKGRldiwgb3B0KTtcXG4rXFx0XFx0cmV0dXJuIGFpcm9oYV90Y19odGJfYWxsb2NfbGVhZl9xdWV1ZShuZXRkZXYsIG9wdCk7XFxuIFxcdGNhc2UgVENfSFRCX0xFQUZfREVMOlxcbiBcXHRjYXNlIFRDX0hUQl9MRUFGX0RFTF9MQVNUOlxcbiBcXHRjYXNlIFRDX0hUQl9MRUFGX0RFTF9MQVNUX0ZPUkNFOlxcbi1cXHRcXHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9kZWxldGVfbGVhZl9xdWV1ZShkZXYsIG9wdCk7XFxuK1xcdFxcdHJldHVybiBhaXJvaGFfdGNfaHRiX2RlbGV0ZV9sZWFmX3F1ZXVlKG5ldGRldiwgb3B0KTtcXG4gXFx0Y2FzZSBUQ19IVEJfTEVBRl9RVUVSWV9RVUVVRTpcXG4tXFx0XFx0cmV0dXJuIGFpcm9oYV90Y19nZXRfaHRiX2dldF9sZWFmX3F1ZXVlKGRldiwgb3B0KTtcXG4rXFx0XFx0cmV0dXJuIGFpcm9oYV90Y19nZXRfaHRiX2dldF9sZWFmX3F1ZXVlKG5ldGRldiwgb3B0KTtcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oXFxuaW5kZXggZmU5MzRmOWZmZThhMTEuLmU2ZmJkNDJjZjk2NDI5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oXFxuQEAgLTU3MCwyNCArNTcwLDMxIEBAIHN0cnVjdCBhaXJvaGFfcWRtYSB7XFxuIFxcdERFQ0xBUkVfQklUTUFQKHFvc19jaGFubmVsX21hcCwgQUlST0hBX05VTV9RT1NfQ0hBTk5FTFMpO1xcbiB9O1xcbiBcXG4tZW51bSBhaXJvaGFfcHJpdl9mbGFncyB7XFxuLVxcdEFJUk9IQV9QUklWX0ZfV0FOID0gQklUKDApLFxcbitlbnVtIGFpcm9oYV9kZXZfZmxhZ3Mge1xcbitcXHRBSVJPSEFfREVWX0ZfV0FOLFxcbitcXHRBSVJPSEFfREVWX0ZfVFhfUU9TLFxcbiB9O1xcbiBcXG4gc3RydWN0IGFpcm9oYV9nZG1fZGV2IHtcXG4rXFx0c3RydWN0IGFpcm9oYV9xZG1hIF9fcmN1ICpxZG1hO1xcbiBcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0O1xcbi1cXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7XFxuIFxcdHN0cnVjdCBhaXJvaGFfZXRoICpldGg7XFxuIFxcbiBcXHRERUNMQVJFX0JJVE1BUChxb3Nfc3FfYm1hcCwgQUlST0hBX05VTV9RT1NfQ0hBTk5FTFMpO1xcbi1cXHQvKiBxb3Mgc3RhdHMgY291bnRlcnMgKi9cXG4tXFx0dTY0IGNwdV90eF9wYWNrZXRzO1xcbi1cXHR1NjQgZndkX3R4X3BhY2tldHM7XFxuK1xcdHN0cnVjdCB7XFxuK1xcdFxcdHUzMiBjcHVfdHhfcGFja2V0cztcXG4rXFx0XFx0dTMyIGZ3ZF90eF9wYWNrZXRzO1xcbitcXHR9IHFvc19zdGF0c1tBSVJPSEFfTlVNX1FPU19DSEFOTkVMU107XFxuIFxcbi1cXHR1MzIgZmxhZ3M7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcdGludCBuYnE7XFxuIFxcbiBcXHRzdHJ1Y3QgYWlyb2hhX2h3X3N0YXRzIHN0YXRzO1xcbitcXG4rXFx0c3RydWN0IHtcXG4rXFx0XFx0YXRvbWljX3QgYnl0ZXM7XFxuK1xcdFxcdGF0b21pY190IHBrdHM7XFxuK1xcdH0gYnFsW0FJUk9IQV9OVU1fTkVUREVWX1RYX1JJTkdTXTtcXG4gfTtcXG4gXFxuIHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQge1xcbkBAIC02OTQsNyArNzAxLDcgQEAgc3RhdGljIGlubGluZSB1MTYgYWlyb2hhX3FkbWFfZ2V0X3R4cShzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEsIHUxNiBxaWQpXFxuIFxcbiBzdGF0aWMgaW5saW5lIGJvb2wgYWlyb2hhX2lzX2xhbl9nZG1fZGV2KHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxcbiB7XFxuLVxcdHJldHVybiAhKGRldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBBSVJPSEFfUFJJVl9GX1dBTik7XFxuK1xcdHJldHVybiAhdGVzdF9iaXQoQUlST0hBX0RFVl9GX1dBTiwgXFx1MDAyNmRldi1cXHUwMDNlZmxhZ3MpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIGJvb2wgYWlyb2hhX2lzXzc1ODEoc3RydWN0IGFpcm9oYV9ldGggKmV0aClcXG5AQCAtNzExLDYgKzcxOCwxNiBAQCBpbnQgYWlyb2hhX2dldF9mZV9wb3J0KHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KTtcXG4gYm9vbCBhaXJvaGFfaXNfdmFsaWRfZ2RtX2RldihzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLFxcbiBcXHRcXHRcXHQgICAgIHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KTtcXG4gXFxuK2V4dGVybiBzdHJ1Y3QgbXV0ZXggZmxvd19vZmZsb2FkX211dGV4O1xcbitcXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgYWlyb2hhX3FkbWEgKlxcbithaXJvaGFfcWRtYV9kZXJlZihzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcXG4re1xcbitcXHRyZXR1cm4gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChkZXYtXFx1MDAzZXFkbWEsXFxuK1xcdFxcdFxcdFxcdFxcdCBsb2NrZGVwX3J0bmxfaXNfaGVsZCgpIHx8XFxuK1xcdFxcdFxcdFxcdFxcdCBsb2NrZGVwX2lzX2hlbGQoXFx1MDAyNmZsb3dfb2ZmbG9hZF9tdXRleCkpO1xcbit9XFxuK1xcbiB2b2lkIGFpcm9oYV9wcGVfc2V0X3htaXRfZnJhbWVfc2l6ZShzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldik7XFxuIHZvaWQgYWlyb2hhX3BwZV9zZXRfY3B1X3BvcnQoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYsIHU4IHBwZV9pZCwgdTggZnBvcnQpO1xcbiBib29sIGFpcm9oYV9wcGVfaXNfZW5hYmxlZChzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLCBpbnQgaW5kZXgpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xcbmluZGV4IGU0YzM2NDRkZDZlYzdhLi4zM2RkZjBkMDc4NTUzOSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xcbkBAIC0xNSw3ICsxNSwxMCBAQFxcbiAjaW5jbHVkZSBcXFwiYWlyb2hhX3JlZ3MuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImFpcm9oYV9ldGguaFxcXCJcXG4gXFxuLXN0YXRpYyBERUZJTkVfTVVURVgoZmxvd19vZmZsb2FkX211dGV4KTtcXG4rLyogU2VyaWFsaXplIGFpcm9oYV9nZG1fZGV2IGZsYWdzLCBRRE1BIHBvaW50ZXIgYW5kIFBQRSBDUFUgcG9ydFxcbisgKiBjb25maWd1cmF0aW9uLlxcbisgKi9cXG4rREVGSU5FX01VVEVYKGZsb3dfb2ZmbG9hZF9tdXRleCk7XFxuIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0socHBlX2xvY2spO1xcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyBhaXJvaGFfZmxvd190YWJsZV9wYXJhbXMgPSB7XFxuQEAgLTg2LDggKzg5LDggQEAgc3RhdGljIHUzMiBhaXJvaGFfcHBlX2dldF90aW1lc3RhbXAoc3RydWN0IGFpcm9oYV9wcGUgKnBwZSlcXG4gXFxuIHZvaWQgYWlyb2hhX3BwZV9zZXRfY3B1X3BvcnQoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYsIHU4IHBwZV9pZCwgdTggZnBvcnQpXFxuIHtcXG4tXFx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LVxcdTAwM2VxZG1hO1xcbi1cXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gcWRtYS1cXHUwMDNlZXRoO1xcbitcXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xcbitcXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gZGV2LVxcdTAwM2VldGg7XFxuIFxcdHU4IHFkbWFfaWQgPSBxZG1hIC0gXFx1MDAyNmV0aC1cXHUwMDNlcWRtYVswXTtcXG4gXFx0dTMyIGZlX2NwdV9wb3J0O1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9yZWdzLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaFxcbmluZGV4IDZmZWQ2M2QwMTNiNDEyLi40NDJiNDhjOWI5OTFlZiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcmVncy5oXFxuQEAgLTM3NSw2ICszNzUsNyBAQFxcbiBcXG4gI2RlZmluZSBSRUdfU1JDX1BPUlRfRkNfTUFQNlxcdFxcdDB4MjI5OFxcbiAjZGVmaW5lIEZDX0lEX09GX1NSQ19QT1JUX01BU0soX24pXFx0R0VOTUFTSyg0ICsgKChfbikgXFx1MDAzY1xcdTAwM2MgMyksICgoX24pIFxcdTAwM2NcXHUwMDNjIDMpKVxcbisjZGVmaW5lIEZDX01BUDZfREVGX1ZBTFVFXFx0XFx0MHgxYjFhMTkxOFxcbiBcXG4gI2RlZmluZSBSRUdfV0FOX01UVTBcXHRcXHRcXHQweDIzMDBcXG4gI2RlZmluZSBXQU5fTVRVMV9NQVNLXFx0XFx0XFx0R0VOTUFTSygyOSwgMTYpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIwOjAyOjQ0Ljg0NTYxNTM5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTM4NTkyODU4NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBaXJvaGEgZXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvKSwgd2hpY2ggaXMgYSBwbGF0Zm9ybSBkcml2ZXIgc3BlY2lmaWMgdG8gQWlyb2hhIFNvQ3MgKGUuZy4sIEVONzU4MSkuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50cywgbWVhbmluZyB0aGUgZHJpdmVyIGNhbm5vdCBiZSBwcm9iZWQgYW5kIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDVlNGYxMGU1ZjhlMWM1M2Y1MmM0Y2M2NGRkMTc2Nzg5MDA3YjAzNTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAyNSAyMDowMjo0MyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jXG5pbmRleCA3OTQxOGU2ODJmNzFmMy4uMDI5MjA1ODdlMGNjNDcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jXG5AQCAtOTM0LDcgKzkzNCw3IEBAIHN0YXRpYyB2b2lkIGFpcm9oYV9xZG1hX3dha2VfbmV0ZGV2X3R4cXMoc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSlcbiBcdFx0XHRpZiAoIWRldilcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRcdGlmIChkZXYtXHUwMDNlcWRtYSAhPSBxZG1hKVxuK1x0XHRcdGlmIChyY3VfYWNjZXNzX3BvaW50ZXIoZGV2LVx1MDAzZXFkbWEpICE9IHFkbWEpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0XHRuZXRkZXYgPSBuZXRkZXZfZnJvbV9wcml2KGRldik7XG5AQCAtMTAzOCwxMCArMTAzOCwyMSBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3R4X25hcGlfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpXG4gXHRcdHEtXHUwMDNlcXVldWVkLS07XG4gXG4gXHRcdGlmIChza2IpIHtcbitcdFx0XHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KHNrYi1cdTAwM2VkZXYpO1xuK1x0XHRcdHUxNiBxaWR4ID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7XG4gXHRcdFx0c3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxO1xuIFxuIFx0XHRcdHR4cSA9IHNrYl9nZXRfdHhfcXVldWUoc2tiLVx1MDAzZWRldiwgc2tiKTtcbi1cdFx0XHRuZXRkZXZfdHhfY29tcGxldGVkX3F1ZXVlKHR4cSwgMSwgc2tiLVx1MDAzZWxlbik7XG4rXHRcdFx0aWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihkZXYtXHUwMDNlcWRtYSkgIT0gcWRtYSkge1xuK1x0XHRcdFx0YXRvbWljX2FkZCgxLCBcdTAwMjZkZXYtXHUwMDNlYnFsW3FpZHhdLnBrdHMpO1xuK1x0XHRcdFx0YXRvbWljX2FkZChza2ItXHUwMDNlbGVuLCBcdTAwMjZkZXYtXHUwMDNlYnFsW3FpZHhdLmJ5dGVzKTtcbitcdFx0XHR9IGVsc2Uge1xuK1x0XHRcdFx0dTMyIHBrdHMgPSAxLCBieXRlcyA9IHNrYi1cdTAwM2VsZW47XG4rXG4rXHRcdFx0XHRieXRlcyArPSBhdG9taWNfeGNoZyhcdTAwMjZkZXYtXHUwMDNlYnFsW3FpZHhdLmJ5dGVzLCAwKTtcbitcdFx0XHRcdHBrdHMgKz0gYXRvbWljX3hjaGcoXHUwMDI2ZGV2LVx1MDAzZWJxbFtxaWR4XS5wa3RzLCAwKTtcbitcdFx0XHRcdG5ldGRldl90eF9jb21wbGV0ZWRfcXVldWUodHhxLCBwa3RzLCBieXRlcyk7XG4rXHRcdFx0fVxuIFx0XHRcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XG4gXHRcdH1cbiBcbkBAIC0xOTA1LDggKzE5MTYsOCBAQCBzdGF0aWMgaW50IGFpcm9oYV9kZXZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIHtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBkZXYtXHUwMDNlcG9ydDtcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cdTAwM2VxZG1hO1xuIFx0dTMyIHBzZV9wb3J0ID0gRkVfUFNFX1BPUlRfUFBFMTtcbitcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcbiBcdGludCBlcnI7XG4gXG4gXHRuZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKG5ldGRldik7XG5AQCAtMTkxNCw2ICsxOTI1LDcgQEAgc3RhdGljIGludCBhaXJvaGFfZGV2X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4rXHRxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcbiBcdGlmIChuZXRkZXZfdXNlc19kc2EobmV0ZGV2KSlcbiBcdFx0YWlyb2hhX2ZlX3NldChxZG1hLVx1MDAzZWV0aCwgUkVHX0dETV9JTkdSRVNTX0NGRyhwb3J0LVx1MDAzZWlkKSxcbiBcdFx0XHQgICAgICBHRE1fU1RBR19FTl9NQVNLKTtcbkBAIC0xOTM3LDcgKzE5NDksNiBAQCBzdGF0aWMgaW50IGFpcm9oYV9kZXZfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIHtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBkZXYtXHUwMDNlcG9ydDtcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cdTAwM2VxZG1hO1xuIFxuIFx0bmV0aWZfdHhfZGlzYWJsZShuZXRkZXYpO1xuIFx0YWlyb2hhX3NldF92aXBfZm9yX2dkbV9wb3J0KGRldiwgZmFsc2UpO1xuQEAgLTE5NDUsNyArMTk1Niw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRpZiAoLS1wb3J0LVx1MDAzZXVzZXJzKVxuIFx0XHRhaXJvaGFfcHBlX3NldF94bWl0X2ZyYW1lX3NpemUoZGV2KTtcbiBcdGVsc2Vcbi1cdFx0YWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKHFkbWEtXHUwMDNlZXRoLFxuK1x0XHRhaXJvaGFfc2V0X2dkbV9wb3J0X2Z3ZF9jZmcoZGV2LVx1MDAzZWV0aCxcbiBcdFx0XHRcdFx0ICAgIFJFR19HRE1fRldEX0NGRyhwb3J0LVx1MDAzZWlkKSxcbiBcdFx0XHRcdFx0ICAgIEZFX1BTRV9QT1JUX0RST1ApO1xuIFx0cmV0dXJuIDA7XG5AQCAtMjAyOCw2ICsyMDM5LDUzIEBAIHN0YXRpYyBpbnQgYWlyb2hhX2VuYWJsZV9nZG0yX2xvb3BiYWNrKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBpbnQgYWlyb2hhX2Rpc2FibGVfZ2RtMl9sb29wYmFjayhzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcbit7XG4rXHRzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZGV2LVx1MDAzZXBvcnQ7XG4rXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gZGV2LVx1MDAzZWV0aDtcbitcdGludCBpLCBzcmNfcG9ydDtcbitcdHUzMiBwc2VfcG9ydDtcbitcbitcdHNyY19wb3J0ID0gZXRoLVx1MDAzZXNvYy1cdTAwM2VvcHMuZ2V0X3Nwb3J0KGRldi1cdTAwM2Vwb3J0LCBkZXYtXHUwMDNlbmJxKTtcbitcdGlmIChzcmNfcG9ydCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHNyY19wb3J0O1xuK1xuK1x0YWlyb2hhX2ZlX2NsZWFyKGV0aCxcbitcdFx0XHRSRUdfU1BfREZUX0NQT1JUKHNyY19wb3J0IFx1MDAzZVx1MDAzZSBmbHMoU1BfQ1BPUlRfREZUX01BU0spKSxcbitcdFx0XHRTUF9DUE9SVF9NQVNLKHNyY19wb3J0IFx1MDAyNiBTUF9DUE9SVF9ERlRfTUFTSykpO1xuK1xuK1x0YWlyb2hhX2ZlX3NldChldGgsIFJFR19HRE1fRldEX0NGRyhBSVJPSEFfR0RNMl9JRFgpLFxuK1x0XHQgICAgICBHRE1fU1RSSVBfQ1JDX01BU0spO1xuK1x0YWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKGV0aCwgUkVHX0dETV9GV0RfQ0ZHKEFJUk9IQV9HRE0yX0lEWCksXG4rXHRcdFx0XHQgICAgRkVfUFNFX1BPUlRfRFJPUCk7XG4rXHRhaXJvaGFfZmVfY2xlYXIoZXRoLCBSRUdfR0RNX0xQQktfQ0ZHKEFJUk9IQV9HRE0yX0lEWCksXG4rXHRcdFx0TFBCS19DSEFOX01BU0sgfCBMUEJLX01PREVfTUFTSyB8IExQQktfRU5fTUFTSyk7XG4rXHRwc2VfcG9ydCA9IGFpcm9oYV9wcGVfaXNfZW5hYmxlZChldGgsIDEpID8gRkVfUFNFX1BPUlRfUFBFMlxuK1x0XHRcdFx0XHRcdCA6IEZFX1BTRV9QT1JUX1BQRTE7XG4rXHRhaXJvaGFfc2V0X2dkbV9wb3J0X2Z3ZF9jZmcoZXRoLCBSRUdfR0RNX0ZXRF9DRkcoQUlST0hBX0dETTJfSURYKSxcbitcdFx0XHRcdCAgICBwc2VfcG9ydCk7XG4rXG4rXHRhaXJvaGFfZmVfcm13KGV0aCwgUkVHX0ZFX1dBTl9QT1JULCBXQU4wX01BU0ssXG4rXHRcdCAgICAgIEZJRUxEX1BSRVAoV0FOMF9NQVNLLCBBSVJPSEFfR0RNMl9JRFgpKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGV0aC1cdTAwM2Vzb2MtXHUwMDNlbnVtX3BwZTsgaSsrKVxuK1x0XHRhaXJvaGFfZmVfY2xlYXIoZXRoLCBSRUdfUFBFX0RGVF9DUE9SVChpLCBBSVJPSEFfR0RNMl9JRFgpLFxuK1x0XHRcdFx0REZUX0NQT1JUX01BU0soQUlST0hBX0dETTJfSURYKSk7XG4rXG4rXHQvKiBFbmFibGUgVklQIGFuZCBJRkMgZm9yIEdETTIgKi9cbitcdGFpcm9oYV9mZV9zZXQoZXRoLCBSRUdfRkVfVklQX1BPUlRfRU4sIEJJVChBSVJPSEFfR0RNMl9JRFgpKTtcbitcdGFpcm9oYV9mZV9zZXQoZXRoLCBSRUdfRkVfSUZDX1BPUlRfRU4sIEJJVChBSVJPSEFfR0RNMl9JRFgpKTtcbitcbitcdGlmIChwb3J0LVx1MDAzZWlkID09IEFJUk9IQV9HRE00X0lEWCBcdTAwMjZcdTAwMjYgYWlyb2hhX2lzXzc1ODEoZXRoKSkge1xuK1x0XHR1MzIgbWFzayA9IEZDX0lEX09GX1NSQ19QT1JUX01BU0soZGV2LVx1MDAzZW5icSk7XG4rXG4rXHRcdGFpcm9oYV9mZV9ybXcoZXRoLCBSRUdfU1JDX1BPUlRfRkNfTUFQNiwgbWFzayxcbitcdFx0XHQgICAgICBGQ19NQVA2X0RFRl9WQUxVRSBcdTAwMjYgbWFzayk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqXG4gYWlyb2hhX2dldF93YW5fZ2RtX2RldihzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoKVxuIHtcbkBAIC0yMDU0LDE1ICsyMTEyLDQzIEBAIGFpcm9oYV9nZXRfd2FuX2dkbV9kZXYoc3RydWN0IGFpcm9oYV9ldGggKmV0aClcbiBzdGF0aWMgdm9pZCBhaXJvaGFfZGV2X3NldF9xZG1hKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxuIHtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBuZXRkZXZfZnJvbV9wcml2KGRldik7XG4rXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKmN1cl9xZG1hLCAqcWRtYTtcbiBcdHN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBkZXYtXHUwMDNlZXRoO1xuLVx0aW50IHBwZV9pZDtcbitcdGludCBpLCBwcGVfaWQ7XG4gXG4gXHQvKiBRRE1BMCBpcyB1c2VkIGZvciBsYW4gcG9ydHMgd2hpbGUgUURNQTEgaXMgdXNlZCBmb3IgV0FOIHBvcnRzICovXG4tXHRkZXYtXHUwMDNlcWRtYSA9IFx1MDAyNmV0aC1cdTAwM2VxZG1hWyFhaXJvaGFfaXNfbGFuX2dkbV9kZXYoZGV2KV07XG4tXHRuZXRkZXYtXHUwMDNlaXJxID0gZGV2LVx1MDAzZXFkbWEtXHUwMDNlaXJxX2JhbmtzWzBdLmlycTtcbitcdHFkbWEgPSBcdTAwMjZldGgtXHUwMDNlcWRtYVshYWlyb2hhX2lzX2xhbl9nZG1fZGV2KGRldildO1xuK1x0Y3VyX3FkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuK1xuK1x0aWYgKGN1cl9xZG1hKSB7XG4rXHRcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpO1xuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGN1cl9xZG1hLVx1MDAzZXFfdHhfaXJxKTsgaSsrKVxuK1x0XHRcdG5hcGlfZGlzYWJsZShcdTAwMjZjdXJfcWRtYS1cdTAwM2VxX3R4X2lycVtpXS5uYXBpKTtcbitcdH1cbitcbitcdHJjdV9hc3NpZ25fcG9pbnRlcihkZXYtXHUwMDNlcWRtYSwgcWRtYSk7XG4rXHRuZXRkZXYtXHUwMDNlaXJxID0gcWRtYS1cdTAwM2VpcnFfYmFua3NbMF0uaXJxO1xuK1x0c3luY2hyb25pemVfcmN1KCk7XG4gXG4gXHRwcGVfaWQgPSAhYWlyb2hhX2lzX2xhbl9nZG1fZGV2KGRldikgXHUwMDI2XHUwMDI2IGFpcm9oYV9wcGVfaXNfZW5hYmxlZChldGgsIDEpO1xuIFx0YWlyb2hhX3BwZV9zZXRfY3B1X3BvcnQoZGV2LCBwcGVfaWQsIGFpcm9oYV9nZXRfZmVfcG9ydChkZXYpKTtcbitcbitcdC8qIFNlZWQgcW9zX3N0YXRzIGJhc2VsaW5lcyB3aXRoIHRoZSBuZXcgUURNQSBibG9jaydzIGN1cnJlbnRcbitcdCAqIGNvdW50ZXIgdmFsdWVzIHRvIGF2b2lkIGEgc3B1cmlvdXMgc3Bpa2Ugb24gdGhlIGZpcnN0IHN0YXRzXG4rXHQgKiBxdWVyeSBhZnRlciBpbml0IG9yIG1pZ3JhdGlvbi5cbitcdCAqL1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShkZXYtXHUwMDNlcW9zX3N0YXRzKTsgaSsrKSB7XG4rXHRcdGRldi1cdTAwM2Vxb3Nfc3RhdHNbaV0uY3B1X3R4X3BhY2tldHMgPVxuK1x0XHRcdGFpcm9oYV9xZG1hX3JyKHFkbWEsIFJFR19DTlRSX1ZBTChpIFx1MDAzY1x1MDAzYyAxKSk7XG4rXHRcdGRldi1cdTAwM2Vxb3Nfc3RhdHNbaV0uZndkX3R4X3BhY2tldHMgPVxuK1x0XHRcdGFpcm9oYV9xZG1hX3JyKHFkbWEsIFJFR19DTlRSX1ZBTCgoaSBcdTAwM2NcdTAwM2MgMSkgKyAxKSk7XG4rXHR9XG4rXG4rXHRpZiAoY3VyX3FkbWEpIHtcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShjdXJfcWRtYS1cdTAwM2VxX3R4X2lycSk7IGkrKylcbitcdFx0XHRuYXBpX2VuYWJsZShcdTAwMjZjdXJfcWRtYS1cdTAwM2VxX3R4X2lycVtpXS5uYXBpKTtcbitcdFx0bmV0aWZfdHhfd2FrZV9hbGxfcXVldWVzKG5ldGRldik7XG4rXHR9XG4gfVxuIFxuIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG5AQCAtMjA3OCw3ICsyMTY0LDcgQEAgc3RhdGljIGludCBhaXJvaGFfZGV2X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdFx0ZmFsbHRocm91Z2g7XG4gXHRjYXNlIEFJUk9IQV9HRE0yX0lEWDpcbiBcdFx0LyogR0RNMiBpcyBhbHdheXMgdXNlZCBhcyB3YW4gKi9cbi1cdFx0ZGV2LVx1MDAzZWZsYWdzIHw9IEFJUk9IQV9QUklWX0ZfV0FOO1xuK1x0XHRzZXRfYml0KEFJUk9IQV9ERVZfRl9XQU4sIFx1MDAyNmRldi1cdTAwM2VmbGFncyk7XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0YnJlYWs7XG5AQCAtMjIxNyw5ICsyMzAzLDkgQEAgc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB7XG4gXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4tXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtXHUwMDNlcWRtYTtcbiBcdHUzMiBucl9mcmFncywgdGFnLCBtc2cwLCBtc2cxLCBsZW47XG4gXHRzdHJ1Y3QgYWlyb2hhX3F1ZXVlX2VudHJ5ICplO1xuK1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xuIFx0c3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxO1xuIFx0c3RydWN0IGFpcm9oYV9xdWV1ZSAqcTtcbiBcdExJU1RfSEVBRCh0eF9saXN0KTtcbkBAIC0yMjI4LDYgKzIzMTQsOCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHR1MTYgaW5kZXg7XG4gXHR1OCBmcG9ydDtcbiBcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdHFkbWEgPSByY3VfZGVyZWZlcmVuY2UoZGV2LVx1MDAzZXFkbWEpO1xuIFx0cWlkID0gYWlyb2hhX3FkbWFfZ2V0X3R4cShxZG1hLCBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKSk7XG4gXHR0YWcgPSBhaXJvaGFfZ2V0X2RzYV90YWcoc2tiLCBuZXRkZXYpO1xuIFxuQEAgLTIyNzcsNiArMjM2NSw4IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBhaXJvaGFfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0bmV0aWZfdHhfc3RvcF9xdWV1ZSh0eHEpO1xuIFx0XHRxLVx1MDAzZXR4cV9zdG9wcGVkID0gdHJ1ZTtcbiBcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cS1cdTAwM2Vsb2NrKTtcbitcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4gXHRcdHJldHVybiBORVRERVZfVFhfQlVTWTtcbiBcdH1cbiBcbkBAIC0yMzQyLDYgKzI0MzIsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHRGSUVMRF9QUkVQKFRYX1JJTkdfQ1BVX0lEWF9NQVNLLCBpbmRleCkpO1xuIFxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cS1cdTAwM2Vsb2NrKTtcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0cmV0dXJuIE5FVERFVl9UWF9PSztcbiBcbkBAIC0yMzU0LDYgKzI0NDUsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gZXJyb3I6XG4gXHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuIFx0bmV0ZGV2LVx1MDAzZXN0YXRzLnR4X2Ryb3BwZWQrKztcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0cmV0dXJuIE5FVERFVl9UWF9PSztcbiB9XG5AQCAtMjQzMywxNyArMjUyNSwxOSBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3NldF9jaGFuX3R4X3NjaGVkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdFx0XHRcdCBjb25zdCB1MTYgKndlaWdodHMsIHU4IG5fd2VpZ2h0cylcbiB7XG4gXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7XG4gXHRpbnQgaTtcbiBcbitcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQUlST0hBX05VTV9RT1NfUVVFVUVTOyBpKyspXG4tXHRcdGFpcm9oYV9xZG1hX2NsZWFyKGRldi1cdTAwM2VxZG1hLCBSRUdfUVVFVUVfQ0xPU0VfQ0ZHKGNoYW5uZWwpLFxuK1x0XHRhaXJvaGFfcWRtYV9jbGVhcihxZG1hLCBSRUdfUVVFVUVfQ0xPU0VfQ0ZHKGNoYW5uZWwpLFxuIFx0XHRcdFx0ICBUWFFfRElTQUJMRV9DSEFOX1FVRVVFX01BU0soY2hhbm5lbCwgaSkpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgbl93ZWlnaHRzOyBpKyspIHtcbiBcdFx0dTMyIHN0YXR1cztcbiBcdFx0aW50IGVycjtcbiBcbi1cdFx0YWlyb2hhX3FkbWFfd3IoZGV2LVx1MDAzZXFkbWEsIFJFR19UWFdSUl9XRUlHSFRfQ0ZHLFxuK1x0XHRhaXJvaGFfcWRtYV93cihxZG1hLCBSRUdfVFhXUlJfV0VJR0hUX0NGRyxcbiBcdFx0XHQgICAgICAgVFdSUl9SV19DTURfTUFTSyB8XG4gXHRcdFx0ICAgICAgIEZJRUxEX1BSRVAoVFdSUl9DSEFOX0lEWF9NQVNLLCBjaGFubmVsKSB8XG4gXHRcdFx0ICAgICAgIEZJRUxEX1BSRVAoVFdSUl9RVUVVRV9JRFhfTUFTSywgaSkgfFxuQEAgLTI0NTEsMTIgKzI1NDUsMTIgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9zZXRfY2hhbl90eF9zY2hlZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRlcnIgPSByZWFkX3BvbGxfdGltZW91dChhaXJvaGFfcWRtYV9yciwgc3RhdHVzLFxuIFx0XHRcdFx0XHRzdGF0dXMgXHUwMDI2IFRXUlJfUldfQ01EX0RPTkUsXG4gXHRcdFx0XHRcdFVTRUNfUEVSX01TRUMsIDEwICogVVNFQ19QRVJfTVNFQyxcbi1cdFx0XHRcdFx0dHJ1ZSwgZGV2LVx1MDAzZXFkbWEsIFJFR19UWFdSUl9XRUlHSFRfQ0ZHKTtcbitcdFx0XHRcdFx0dHJ1ZSwgcWRtYSwgUkVHX1RYV1JSX1dFSUdIVF9DRkcpO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdHJldHVybiBlcnI7XG4gXHR9XG4gXG4tXHRhaXJvaGFfcWRtYV9ybXcoZGV2LVx1MDAzZXFkbWEsIFJFR19DSEFOX1FPU19NT0RFKGNoYW5uZWwgXHUwMDNlXHUwMDNlIDMpLFxuK1x0YWlyb2hhX3FkbWFfcm13KHFkbWEsIFJFR19DSEFOX1FPU19NT0RFKGNoYW5uZWwgXHUwMDNlXHUwMDNlIDMpLFxuIFx0XHRcdENIQU5fUU9TX01PREVfTUFTSyhjaGFubmVsKSxcbiBcdFx0XHRfX2ZpZWxkX3ByZXAoQ0hBTl9RT1NfTU9ERV9NQVNLKGNoYW5uZWwpLCBtb2RlKSk7XG4gXG5AQCAtMjUyMCwxNyArMjYxNCwyMiBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX2dldF90eF9ldHNfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IGNoYW5uZWwsXG4gXHRcdFx0XHRcdHN0cnVjdCB0Y19ldHNfcW9wdF9vZmZsb2FkICpvcHQpXG4ge1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuLVx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LVx1MDAzZXFkbWE7XG4rXHR1MzIgY3B1X3R4X3BhY2tldHMsIGZ3ZF90eF9wYWNrZXRzO1xuK1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xuK1x0dTY0IHR4X3BhY2tldHM7XG4gXG4tXHR1NjQgY3B1X3R4X3BhY2tldHMgPSBhaXJvaGFfcWRtYV9ycihxZG1hLCBSRUdfQ05UUl9WQUwoY2hhbm5lbCBcdTAwM2NcdTAwM2MgMSkpO1xuLVx0dTY0IGZ3ZF90eF9wYWNrZXRzID0gYWlyb2hhX3FkbWFfcnIocWRtYSxcbi1cdFx0XHRcdFx0ICAgIFJFR19DTlRSX1ZBTCgoY2hhbm5lbCBcdTAwM2NcdTAwM2MgMSkgKyAxKSk7XG4tXHR1NjQgdHhfcGFja2V0cyA9IChjcHVfdHhfcGFja2V0cyAtIGRldi1cdTAwM2VjcHVfdHhfcGFja2V0cykgK1xuLVx0XHRcdCAoZndkX3R4X3BhY2tldHMgLSBkZXYtXHUwMDNlZndkX3R4X3BhY2tldHMpO1xuK1x0cWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XG4rXHRjcHVfdHhfcGFja2V0cyA9IGFpcm9oYV9xZG1hX3JyKHFkbWEsIFJFR19DTlRSX1ZBTChjaGFubmVsIFx1MDAzY1x1MDAzYyAxKSk7XG4rXHRmd2RfdHhfcGFja2V0cyA9IGFpcm9oYV9xZG1hX3JyKHFkbWEsXG4rXHRcdFx0XHRcdFJFR19DTlRSX1ZBTCgoY2hhbm5lbCBcdTAwM2NcdTAwM2MgMSkgKyAxKSk7XG4rXHR0eF9wYWNrZXRzID0gKHUzMikoY3B1X3R4X3BhY2tldHMgLVxuK1x0XHRcdCAgIGRldi1cdTAwM2Vxb3Nfc3RhdHNbY2hhbm5lbF0uY3B1X3R4X3BhY2tldHMpO1xuK1x0dHhfcGFja2V0cyArPSAodTMyKShmd2RfdHhfcGFja2V0cyAtXG4rXHRcdFx0ICAgIGRldi1cdTAwM2Vxb3Nfc3RhdHNbY2hhbm5lbF0uZndkX3R4X3BhY2tldHMpO1xuIFxuIFx0X2JzdGF0c191cGRhdGUob3B0LVx1MDAzZXN0YXRzLmJzdGF0cywgMCwgdHhfcGFja2V0cyk7XG4tXHRkZXYtXHUwMDNlY3B1X3R4X3BhY2tldHMgPSBjcHVfdHhfcGFja2V0cztcbi1cdGRldi1cdTAwM2Vmd2RfdHhfcGFja2V0cyA9IGZ3ZF90eF9wYWNrZXRzO1xuK1x0ZGV2LVx1MDAzZXFvc19zdGF0c1tjaGFubmVsXS5jcHVfdHhfcGFja2V0cyA9IGNwdV90eF9wYWNrZXRzO1xuK1x0ZGV2LVx1MDAzZXFvc19zdGF0c1tjaGFubmVsXS5md2RfdHhfcGFja2V0cyA9IGZ3ZF90eF9wYWNrZXRzO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTI3ODUsMTYgKzI4ODQsMTggQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9zZXRfdHhfcmF0ZV9saW1pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRcdFx0XHQgdTMyIGJ1Y2tldF9zaXplKVxuIHtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcbiBcdGludCBpLCBlcnI7XG4gXG4rXHRxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjPSBUUlRDTV9QRUFLX01PREU7IGkrKykge1xuLVx0XHRlcnIgPSBhaXJvaGFfcWRtYV9zZXRfdHJ0Y21fY29uZmlnKGRldi1cdTAwM2VxZG1hLCBjaGFubmVsLFxuK1x0XHRlcnIgPSBhaXJvaGFfcWRtYV9zZXRfdHJ0Y21fY29uZmlnKHFkbWEsIGNoYW5uZWwsXG4gXHRcdFx0XHRcdFx0ICAgUkVHX0VHUkVTU19UUlRDTV9DRkcsIGksXG4gXHRcdFx0XHRcdFx0ICAgISFyYXRlLCBUUlRDTV9NRVRFUl9NT0RFKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0XHRlcnIgPSBhaXJvaGFfcWRtYV9zZXRfdHJ0Y21fdG9rZW5fYnVja2V0KGRldi1cdTAwM2VxZG1hLCBjaGFubmVsLFxuK1x0XHRlcnIgPSBhaXJvaGFfcWRtYV9zZXRfdHJ0Y21fdG9rZW5fYnVja2V0KHFkbWEsIGNoYW5uZWwsXG4gXHRcdFx0XHRcdFx0XHQgUkVHX0VHUkVTU19UUlRDTV9DRkcsXG4gXHRcdFx0XHRcdFx0XHQgaSwgcmF0ZSwgYnVja2V0X3NpemUpO1xuIFx0XHRpZiAoZXJyKVxuQEAgLTI4MzAsMTEgKzI5MzEsMTIgQEAgc3RhdGljIGludCBhaXJvaGFfdGNfaHRiX2FsbG9jX2xlYWZfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdHUzMiBjaGFubmVsID0gVENfSF9NSU4ob3B0LVx1MDAzZWNsYXNzaWQpICUgQUlST0hBX05VTV9RT1NfQ0hBTk5FTFM7XG4gXHRpbnQgZXJyLCBudW1fdHhfcXVldWVzID0gQUlST0hBX05VTV9UWF9SSU5HICsgY2hhbm5lbCArIDE7XG4gXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4tXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtXHUwMDNlcWRtYTtcbitcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcbiBcbiBcdC8qIEhlcmUgd2UgbmVlZCB0byBjaGVjayB0aGUgcmVxdWVzdGVkIFFETUEgY2hhbm5lbCBpcyBub3QgYWxyZWFkeVxuIFx0ICogaW4gdXNlIGJ5IGFub3RoZXIgbmV0X2RldmljZSBydW5uaW5nIG9uIHRoZSBzYW1lIFFETUEgYmxvY2suXG4gXHQgKi9cbitcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuIFx0aWYgKHRlc3RfYW5kX3NldF9iaXQoY2hhbm5lbCwgcWRtYS1cdTAwM2Vxb3NfY2hhbm5lbF9tYXApKSB7XG4gXHRcdE5MX1NFVF9FUlJfTVNHX01PRChvcHQtXHUwMDNlZXh0YWNrLFxuIFx0XHRcdFx0ICAgXCJxZG1hIHFvcyBjaGFubmVsIGFscmVhZHkgaW4gdXNlXCIpO1xuQEAgLTI4NzAsNyArMjk3Miw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfc2V0X3J4X21ldGVyKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2LFxuIFx0XHRcdFx0ICAgIHUzMiByYXRlLCB1MzIgYnVja2V0X3NpemUsXG4gXHRcdFx0XHQgICAgZW51bSB0cnRjbV91bml0X3R5cGUgdW5pdF90eXBlKVxuIHtcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cdTAwM2VxZG1hO1xuK1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcbiBcdGludCBpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShxZG1hLVx1MDAzZXFfcngpOyBpKyspIHtcbkBAIC0zMDQ1LDEwICszMTQ3LDExIEBAIHN0YXRpYyB2b2lkIGFpcm9oYV90Y19yZW1vdmVfaHRiX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBxdWV1ZSlcbiB7XG4gXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4gXHRpbnQgbnVtX3R4X3F1ZXVlcyA9IEFJUk9IQV9OVU1fVFhfUklORztcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cdTAwM2VxZG1hO1xuK1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xuIFxuIFx0YWlyb2hhX3FkbWFfc2V0X3R4X3JhdGVfbGltaXQobmV0ZGV2LCBxdWV1ZSwgMCwgMCk7XG4gXG4rXHRxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcbiBcdGNsZWFyX2JpdChxdWV1ZSwgcWRtYS1cdTAwM2Vxb3NfY2hhbm5lbF9tYXApO1xuIFx0Y2xlYXJfYml0KHF1ZXVlLCBkZXYtXHUwMDNlcW9zX3NxX2JtYXApO1xuIFxuQEAgLTMwNzQsNiArMzE3NywxMDAgQEAgc3RhdGljIGludCBhaXJvaGFfdGNfaHRiX2RlbGV0ZV9sZWFmX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIHZvaWQgYWlyb2hhX2Rpc2FibGVfcW9zX2Zvcl9nZG0zNChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuK3tcbitcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcdHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBkZXYtXHUwMDNlcG9ydDtcbitcdGludCBlcnI7XG4rXG4rXHRpZiAocG9ydC1cdTAwM2VpZCAhPSBBSVJPSEFfR0RNM19JRFggXHUwMDI2XHUwMDI2XG4rXHQgICAgcG9ydC1cdTAwM2VpZCAhPSBBSVJPSEFfR0RNNF9JRFgpXG4rXHRcdHJldHVybjtcbitcbitcdGVyciA9IGFpcm9oYV9kaXNhYmxlX2dkbTJfbG9vcGJhY2soZGV2KTtcbitcdGlmIChlcnIpXG4rXHRcdG5ldGRldl93YXJuKG5ldGRldixcbitcdFx0XHQgICAgXCJmYWlsZWQgZGlzYWJsaW5nIEdETTIgbG9vcGJhY2s6ICVkXFxuXCIsIGVycik7XG4rXG4rXHRjbGVhcl9iaXQoQUlST0hBX0RFVl9GX1dBTiwgXHUwMDI2ZGV2LVx1MDAzZWZsYWdzKTtcbitcdGFpcm9oYV9kZXZfc2V0X3FkbWEoZGV2KTtcbitcbitcdGFpcm9oYV9zZXRfbWFjYWRkcihkZXYsIG5ldGRldi1cdTAwM2VkZXZfYWRkcik7XG4rXHRhaXJvaGFfcHBlX3NldF94bWl0X2ZyYW1lX3NpemUoZGV2KTtcbitcbitcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXG4rXHRcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhkZXYtXHUwMDNlZXRoLFxuK1x0XHRcdFx0XHQgICAgUkVHX0dETV9GV0RfQ0ZHKHBvcnQtXHUwMDNlaWQpLFxuK1x0XHRcdFx0XHQgICAgRkVfUFNFX1BPUlRfUFBFMSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWlyb2hhX2VuYWJsZV9xb3NfZm9yX2dkbTM0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuK3tcbitcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqd2FuX2RldiwgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXHRzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZGV2LVx1MDAzZXBvcnQ7XG4rXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gZGV2LVx1MDAzZWV0aDtcbitcdGludCBlcnIgPSAtRUJVU1k7XG4rXG4rXHRpZiAocG9ydC1cdTAwM2VpZCAhPSBBSVJPSEFfR0RNM19JRFggXHUwMDI2XHUwMDI2XG4rXHQgICAgcG9ydC1cdTAwM2VpZCAhPSBBSVJPSEFfR0RNNF9JRFgpIHtcbitcdFx0LyogSFcgUW9TIGlzIGFsd2F5cyBzdXBwb3J0ZWQgYnkgR0RNMSBhbmQgR0RNMiAqL1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdGlmICghYWlyb2hhX2lzX2xhbl9nZG1fZGV2KGRldikpIC8qIEFscmVhZHkgZW5hYmxlZCAqL1xuK1x0XHRyZXR1cm4gMDtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2Zmxvd19vZmZsb2FkX211dGV4KTtcbitcbitcdHdhbl9kZXYgPSBhaXJvaGFfZ2V0X3dhbl9nZG1fZGV2KGV0aCk7XG4rXHRpZiAod2FuX2Rldikge1xuK1x0XHRpZiAodGVzdF9iaXQoQUlST0hBX0RFVl9GX1RYX1FPUywgXHUwMDI2d2FuX2Rldi1cdTAwM2VmbGFncykgfHxcbitcdFx0ICAgIHdhbl9kZXYtXHUwMDNlcG9ydC1cdTAwM2VpZCA9PSBBSVJPSEFfR0RNMl9JRFgpIHtcbitcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuK1x0XHRcdFx0XHQgICBcIlFvUyBjb25maWd1cmVkIGZvciBXQU4gZGV2aWNlXCIpO1xuK1x0XHRcdGdvdG8gZXJyb3JfdW5sb2NrO1xuK1x0XHR9XG4rXHRcdGFpcm9oYV9kaXNhYmxlX3Fvc19mb3JfZ2RtMzQobmV0ZGV2X2Zyb21fcHJpdih3YW5fZGV2KSk7XG4rXHR9XG4rXG4rXHRzZXRfYml0KEFJUk9IQV9ERVZfRl9XQU4sIFx1MDAyNmRldi1cdTAwM2VmbGFncyk7XG4rXHRhaXJvaGFfZGV2X3NldF9xZG1hKGRldik7XG4rXHRlcnIgPSBhaXJvaGFfZW5hYmxlX2dkbTJfbG9vcGJhY2soZGV2KTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gZXJyb3JfZGlzYWJsZV93YW47XG4rXG4rXHRlcnIgPSBhaXJvaGFfc2V0X21hY2FkZHIoZGV2LCBuZXRkZXYtXHUwMDNlZGV2X2FkZHIpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBlcnJvcl9kaXNhYmxlX2xvb3BiYWNrO1xuK1xuK1x0YWlyb2hhX2Rldl9zZXRfeG1pdF9mcmFtZV9zaXplKG5ldGRldik7XG4rXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7XG4rXHRcdHUzMiBwc2VfcG9ydDtcbitcbitcdFx0cHNlX3BvcnQgPSBhaXJvaGFfcHBlX2lzX2VuYWJsZWQoZXRoLCAxKSA/IEZFX1BTRV9QT1JUX1BQRTJcbitcdFx0XHRcdFx0XHRcdCA6IEZFX1BTRV9QT1JUX1BQRTE7XG4rXHRcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhldGgsIFJFR19HRE1fRldEX0NGRyhwb3J0LVx1MDAzZWlkKSxcbitcdFx0XHRcdFx0ICAgIHBzZV9wb3J0KTtcbitcdH1cbitcbitcdHNldF9iaXQoQUlST0hBX0RFVl9GX1RYX1FPUywgXHUwMDI2ZGV2LVx1MDAzZWZsYWdzKTtcbitcbitcdG11dGV4X3VubG9jayhcdTAwMjZmbG93X29mZmxvYWRfbXV0ZXgpO1xuK1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyb3JfZGlzYWJsZV9sb29wYmFjazpcbitcdGFpcm9oYV9kaXNhYmxlX2dkbTJfbG9vcGJhY2soZGV2KTtcbitlcnJvcl9kaXNhYmxlX3dhbjpcbitcdGNsZWFyX2JpdChBSVJPSEFfREVWX0ZfV0FOLCBcdTAwMjZkZXYtXHUwMDNlZmxhZ3MpO1xuK1x0YWlyb2hhX2Rldl9zZXRfcWRtYShkZXYpO1xuK2Vycm9yX3VubG9jazpcbitcdG11dGV4X3VubG9jayhcdTAwMjZmbG93X29mZmxvYWRfbXV0ZXgpO1xuK1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4gc3RhdGljIGludCBhaXJvaGFfdGNfaHRiX2Rlc3Ryb3koc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB7XG4gXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG5AQCAtMzA4Miw2ICszMjc5LDggQEAgc3RhdGljIGludCBhaXJvaGFfdGNfaHRiX2Rlc3Ryb3koc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdGZvcl9lYWNoX3NldF9iaXQocSwgZGV2LVx1MDAzZXFvc19zcV9ibWFwLCBBSVJPSEFfTlVNX1FPU19DSEFOTkVMUylcbiBcdFx0YWlyb2hhX3RjX3JlbW92ZV9odGJfcXVldWUobmV0ZGV2LCBxKTtcbiBcbitcdGNsZWFyX2JpdChBSVJPSEFfREVWX0ZfVFhfUU9TLCBcdTAwMjZkZXYtXHUwMDNlZmxhZ3MpO1xuK1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTMxMDEsMjQgKzMzMDAsMjQgQEAgc3RhdGljIGludCBhaXJvaGFfdGNfZ2V0X2h0Yl9nZXRfbGVhZl9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgYWlyb2hhX3RjX3NldHVwX3FkaXNjX2h0YihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuK3N0YXRpYyBpbnQgYWlyb2hhX3RjX3NldHVwX3FkaXNjX2h0YihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3QgdGNfaHRiX3FvcHRfb2ZmbG9hZCAqb3B0KVxuIHtcbiBcdHN3aXRjaCAob3B0LVx1MDAzZWNvbW1hbmQpIHtcbiBcdGNhc2UgVENfSFRCX0NSRUFURTpcbi1cdFx0YnJlYWs7XG4rXHRcdHJldHVybiBhaXJvaGFfZW5hYmxlX3Fvc19mb3JfZ2RtMzQobmV0ZGV2LCBvcHQtXHUwMDNlZXh0YWNrKTtcbiBcdGNhc2UgVENfSFRCX0RFU1RST1k6XG4tXHRcdHJldHVybiBhaXJvaGFfdGNfaHRiX2Rlc3Ryb3koZGV2KTtcbitcdFx0cmV0dXJuIGFpcm9oYV90Y19odGJfZGVzdHJveShuZXRkZXYpO1xuIFx0Y2FzZSBUQ19IVEJfTk9ERV9NT0RJRlk6XG4tXHRcdHJldHVybiBhaXJvaGFfdGNfaHRiX21vZGlmeV9xdWV1ZShkZXYsIG9wdCk7XG4rXHRcdHJldHVybiBhaXJvaGFfdGNfaHRiX21vZGlmeV9xdWV1ZShuZXRkZXYsIG9wdCk7XG4gXHRjYXNlIFRDX0hUQl9MRUFGX0FMTE9DX1FVRVVFOlxuLVx0XHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9hbGxvY19sZWFmX3F1ZXVlKGRldiwgb3B0KTtcbitcdFx0cmV0dXJuIGFpcm9oYV90Y19odGJfYWxsb2NfbGVhZl9xdWV1ZShuZXRkZXYsIG9wdCk7XG4gXHRjYXNlIFRDX0hUQl9MRUFGX0RFTDpcbiBcdGNhc2UgVENfSFRCX0xFQUZfREVMX0xBU1Q6XG4gXHRjYXNlIFRDX0hUQl9MRUFGX0RFTF9MQVNUX0ZPUkNFOlxuLVx0XHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9kZWxldGVfbGVhZl9xdWV1ZShkZXYsIG9wdCk7XG4rXHRcdHJldHVybiBhaXJvaGFfdGNfaHRiX2RlbGV0ZV9sZWFmX3F1ZXVlKG5ldGRldiwgb3B0KTtcbiBcdGNhc2UgVENfSFRCX0xFQUZfUVVFUllfUVVFVUU6XG4tXHRcdHJldHVybiBhaXJvaGFfdGNfZ2V0X2h0Yl9nZXRfbGVhZl9xdWV1ZShkZXYsIG9wdCk7XG4rXHRcdHJldHVybiBhaXJvaGFfdGNfZ2V0X2h0Yl9nZXRfbGVhZl9xdWV1ZShuZXRkZXYsIG9wdCk7XG4gXHRkZWZhdWx0OlxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmhcbmluZGV4IGZlOTM0ZjlmZmU4YTExLi5lNmZiZDQyY2Y5NjQyOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmhcbkBAIC01NzAsMjQgKzU3MCwzMSBAQCBzdHJ1Y3QgYWlyb2hhX3FkbWEge1xuIFx0REVDTEFSRV9CSVRNQVAocW9zX2NoYW5uZWxfbWFwLCBBSVJPSEFfTlVNX1FPU19DSEFOTkVMUyk7XG4gfTtcbiBcbi1lbnVtIGFpcm9oYV9wcml2X2ZsYWdzIHtcbi1cdEFJUk9IQV9QUklWX0ZfV0FOID0gQklUKDApLFxuK2VudW0gYWlyb2hhX2Rldl9mbGFncyB7XG4rXHRBSVJPSEFfREVWX0ZfV0FOLFxuK1x0QUlST0hBX0RFVl9GX1RYX1FPUyxcbiB9O1xuIFxuIHN0cnVjdCBhaXJvaGFfZ2RtX2RldiB7XG4rXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgX19yY3UgKnFkbWE7XG4gXHRzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0O1xuLVx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xuIFx0c3RydWN0IGFpcm9oYV9ldGggKmV0aDtcbiBcbiBcdERFQ0xBUkVfQklUTUFQKHFvc19zcV9ibWFwLCBBSVJPSEFfTlVNX1FPU19DSEFOTkVMUyk7XG4tXHQvKiBxb3Mgc3RhdHMgY291bnRlcnMgKi9cbi1cdHU2NCBjcHVfdHhfcGFja2V0cztcbi1cdHU2NCBmd2RfdHhfcGFja2V0cztcbitcdHN0cnVjdCB7XG4rXHRcdHUzMiBjcHVfdHhfcGFja2V0cztcbitcdFx0dTMyIGZ3ZF90eF9wYWNrZXRzO1xuK1x0fSBxb3Nfc3RhdHNbQUlST0hBX05VTV9RT1NfQ0hBTk5FTFNdO1xuIFxuLVx0dTMyIGZsYWdzO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdGludCBuYnE7XG4gXG4gXHRzdHJ1Y3QgYWlyb2hhX2h3X3N0YXRzIHN0YXRzO1xuK1xuK1x0c3RydWN0IHtcbitcdFx0YXRvbWljX3QgYnl0ZXM7XG4rXHRcdGF0b21pY190IHBrdHM7XG4rXHR9IGJxbFtBSVJPSEFfTlVNX05FVERFVl9UWF9SSU5HU107XG4gfTtcbiBcbiBzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0IHtcbkBAIC02OTQsNyArNzAxLDcgQEAgc3RhdGljIGlubGluZSB1MTYgYWlyb2hhX3FkbWFfZ2V0X3R4cShzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEsIHUxNiBxaWQpXG4gXG4gc3RhdGljIGlubGluZSBib29sIGFpcm9oYV9pc19sYW5fZ2RtX2RldihzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcbiB7XG4tXHRyZXR1cm4gIShkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IEFJUk9IQV9QUklWX0ZfV0FOKTtcbitcdHJldHVybiAhdGVzdF9iaXQoQUlST0hBX0RFVl9GX1dBTiwgXHUwMDI2ZGV2LVx1MDAzZWZsYWdzKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBib29sIGFpcm9oYV9pc183NTgxKHN0cnVjdCBhaXJvaGFfZXRoICpldGgpXG5AQCAtNzExLDYgKzcxOCwxNiBAQCBpbnQgYWlyb2hhX2dldF9mZV9wb3J0KHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KTtcbiBib29sIGFpcm9oYV9pc192YWxpZF9nZG1fZGV2KHN0cnVjdCBhaXJvaGFfZXRoICpldGgsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldik7XG4gXG4rZXh0ZXJuIHN0cnVjdCBtdXRleCBmbG93X29mZmxvYWRfbXV0ZXg7XG4rXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgYWlyb2hhX3FkbWEgKlxuK2Fpcm9oYV9xZG1hX2RlcmVmKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxuK3tcbitcdHJldHVybiByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGRldi1cdTAwM2VxZG1hLFxuK1x0XHRcdFx0XHQgbG9ja2RlcF9ydG5sX2lzX2hlbGQoKSB8fFxuK1x0XHRcdFx0XHQgbG9ja2RlcF9pc19oZWxkKFx1MDAyNmZsb3dfb2ZmbG9hZF9tdXRleCkpO1xuK31cbitcbiB2b2lkIGFpcm9oYV9wcGVfc2V0X3htaXRfZnJhbWVfc2l6ZShzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldik7XG4gdm9pZCBhaXJvaGFfcHBlX3NldF9jcHVfcG9ydChzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiwgdTggcHBlX2lkLCB1OCBmcG9ydCk7XG4gYm9vbCBhaXJvaGFfcHBlX2lzX2VuYWJsZWQoc3RydWN0IGFpcm9oYV9ldGggKmV0aCwgaW50IGluZGV4KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xuaW5kZXggZTRjMzY0NGRkNmVjN2EuLjMzZGRmMGQwNzg1NTM5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xuQEAgLTE1LDcgKzE1LDEwIEBAXG4gI2luY2x1ZGUgXCJhaXJvaGFfcmVncy5oXCJcbiAjaW5jbHVkZSBcImFpcm9oYV9ldGguaFwiXG4gXG4tc3RhdGljIERFRklORV9NVVRFWChmbG93X29mZmxvYWRfbXV0ZXgpO1xuKy8qIFNlcmlhbGl6ZSBhaXJvaGFfZ2RtX2RldiBmbGFncywgUURNQSBwb2ludGVyIGFuZCBQUEUgQ1BVIHBvcnRcbisgKiBjb25maWd1cmF0aW9uLlxuKyAqL1xuK0RFRklORV9NVVRFWChmbG93X29mZmxvYWRfbXV0ZXgpO1xuIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0socHBlX2xvY2spO1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgYWlyb2hhX2Zsb3dfdGFibGVfcGFyYW1zID0ge1xuQEAgLTg2LDggKzg5LDggQEAgc3RhdGljIHUzMiBhaXJvaGFfcHBlX2dldF90aW1lc3RhbXAoc3RydWN0IGFpcm9oYV9wcGUgKnBwZSlcbiBcbiB2b2lkIGFpcm9oYV9wcGVfc2V0X2NwdV9wb3J0KHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2LCB1OCBwcGVfaWQsIHU4IGZwb3J0KVxuIHtcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cdTAwM2VxZG1hO1xuLVx0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IHFkbWEtXHUwMDNlZXRoO1xuK1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcbitcdHN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBkZXYtXHUwMDNlZXRoO1xuIFx0dTggcWRtYV9pZCA9IHFkbWEgLSBcdTAwMjZldGgtXHUwMDNlcWRtYVswXTtcbiBcdHUzMiBmZV9jcHVfcG9ydDtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcmVncy5oXG5pbmRleCA2ZmVkNjNkMDEzYjQxMi4uNDQyYjQ4YzliOTkxZWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9yZWdzLmhcbkBAIC0zNzUsNiArMzc1LDcgQEBcbiBcbiAjZGVmaW5lIFJFR19TUkNfUE9SVF9GQ19NQVA2XHRcdDB4MjI5OFxuICNkZWZpbmUgRkNfSURfT0ZfU1JDX1BPUlRfTUFTSyhfbilcdEdFTk1BU0soNCArICgoX24pIFx1MDAzY1x1MDAzYyAzKSwgKChfbikgXHUwMDNjXHUwMDNjIDMpKVxuKyNkZWZpbmUgRkNfTUFQNl9ERUZfVkFMVUVcdFx0MHgxYjFhMTkxOFxuIFxuICNkZWZpbmUgUkVHX1dBTl9NVFUwXHRcdFx0MHgyMzAwXG4gI2RlZmluZSBXQU5fTVRVMV9NQVNLXHRcdFx0R0VOTUFTSygyOSwgMTYpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMDowMjo0NC44NDU2MTY3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI5ODI5MDI1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEFpcm9oYSBFdGhlcm5ldCBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGZvciB0aGUgYGFpcm9oYWAgZXRoZXJuZXQgZHJpdmVyLCBzcGVjaWZpY2FsbHkgZm9yIEFpcm9oYSBFTjc1ODEgU29Dcy4gSXQgdG91Y2hlcyBhIGZldyBjcml0aWNhbCBhcmVhcyDigJMgdGhlIFFETUEgaGFuZGxpbmcsIHdoaWNoIGxvb2tzIGxpa2UgaXQncyBnZXR0aW5nIGFuIFJDVSB1cGRhdGUgZm9yIGBkZXYtXHUwMDNlcWRtYWAsIGFuZCBzb21lIGludGVyZXN0aW5nIGFkZGl0aW9ucyBsaWtlIFFvUyBzdXBwb3J0IGZvciBHRE0zIGFuZCBHRE00LiAgSXQncyBhbHNvIHVwZGF0aW5nIEJRTCBoYW5kbGluZywgd2hpY2ggaXMgYWx3YXlzIGdvb2QgdG8gc2VlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlxuXG5BaXJvaGEgaXMgYSBuZXR3b3JraW5nIFNvQywgbGlrZWx5IEFSTTY0LCBhbmQgdGhlIGRyaXZlciBpcyAqc3BlY2lmaWMqIHRvIHRoYXQgU29DLiAgR2VuZXJhbGx5LCB0aGVzZSBTb0Mtc3BlY2lmaWMgZXRoZXJuZXQgZHJpdmVycyDigJMgc2ltaWxhciB0byB3aGF0IHlvdSBzZWUgd2l0aCBNZWRpYVRlayBhbmQgb3RoZXJzIOKAkyByZWx5IG9uIHRoZSBwaHlzaWNhbCBoYXJkd2FyZSBvciBzcGVjaWZpYyBwbGF0Zm9ybSBkZXZpY2VzIGZvciB0aGUgcHJvYmUgdG8gc3VjY2VlZC4gU28sIEkgbmVlZCB0byBrbm93IGlmIEkgY2FuIGV2ZW4gdGVzdCB0aGlzIGluIFFFTVUuIElzIHRoaXMgYSBwbGF0Zm9ybSBkcml2ZXI/XG5cblRvIGZpZ3VyZSB0aGlzIG91dCwgSSdsbCBsZXZlcmFnZSB0aGUgYGRlZmF1bHRfYXBpOmdyZXBwZXJgIGFuZCBzZWFyY2ggZm9yIHRoZSBkcml2ZXIgcmVnaXN0cmF0aW9uLiBUaGF0IHNob3VsZCBxdWlja2x5IHRlbGwgbWUgaWYgaXQgcmVsaWVzIG9uIGEgc3BlY2lmaWMgZGV2aWNlIHRyZWUsIG9yIGlmIGl0IGhhcyBzb21lIGtpbmQgb2YgYnJvYWRlciBhcHBsaWNhYmlsaXR5LiBUaGF0J3MgdGhlIGZpcnN0IHN0ZXAgaW4gZGV0ZXJtaW5pbmcgaG93IGVhc2lseSB0aGlzIHBhdGNoIGNhbiBiZSBldmFsdWF0ZWQgaW4gYSB0ZXN0aW5nIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTA2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjA6MDI6NTAuMTQzOTA5MzI3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5MzQ2MjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1vZHVsZV9wbGF0Zm9ybV9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jPTM5NTY9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYWlyb2hhX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMzk2My19O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM6Mzk2NDptb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGFpcm9oYV9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMzk2NS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM9ODEzPXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGFpcm9oYV9ucHVfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy04MjAtfTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjgyMTptb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGFpcm9oYV9ucHVfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTgyMi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjA6MDI6NTAuMjAzMjY2Nzk0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODUwMTYxMDA2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBc3Nlc3NtZW50IG9mIHRoZSBBaXJvaGEgRXRoZXJuZXQgRHJpdmVyJ3MgRnV6emFiaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBsYXRmb3JtIGRyaXZlciwgYGFpcm9oYV9ldGguY2AsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCdzIGdvaW5nIHRvIGJlIGEgdG91Z2ggbnV0IHRvIGNyYWNrIGZvciBmdXp6aW5nLiBQbGF0Zm9ybSBkcml2ZXJzLCBlc3BlY2lhbGx5IHRob3NlIHRpZWQgdG8gc3BlY2lmaWMgU29DcyBsaWtlIHRoZSBBaXJvaGEgRU43NTgxLCB0eXBpY2FsbHkgbmVlZCBhIGRldmljZSB0cmVlIG5vZGUgdG8gcHJvYmUgcHJvcGVybHksIHJpZ2h0PyBBbmQgUUVNVSwgYXMgZmFyIGFzIEkga25vdywgZG9lc24ndCBuYXRpdmVseSBlbXVsYXRlIHRoaXMgcGFydGljdWxhciBBaXJvaGEgaGFyZHdhcmUgb3IgaXRzIGFzc29jaWF0ZWQgZXRoZXJuZXQgY29udHJvbGxlcnMuXG5cbk15IGZpcnN0IHF1ZXN0aW9uIGlzIGFsd2F5cywgXCJJcyB0aGVyZSBhbnkgc25lYWt5IHdheSB0byBnZXQgYXQgdGhpcyB0aHJvdWdoIGEgdmlydHVhbCBkZXZpY2Ugb3Igc29tZSBraW5kIG9mIG1vY2tpbmc/XCIgQnV0LCByZWFsaXN0aWNhbGx5LCBwbGF0Zm9ybSBkcml2ZXJzIGZvciBzcGVjaWZpYyBoYXJkd2FyZSBhcmUgcmFyZWx5IGZ1enphYmxlIHVubGVzcyB5b3UgaGF2ZSBhIGN1c3RvbSBlbXVsYXRvciBvciB0aGV5J3JlIHBhcnQgb2YgYSBtb3JlIGdlbmVyaWMsIG1vY2thYmxlIGZyYW1ld29yay4gU3l6a2FsbGVyJ3Mgbm90IGdvaW5nIHRvIGhlbHAgaGVyZSBlaXRoZXIsIGFzIGl0IGRvZXNuJ3QgZW11bGF0ZSB0aGUgQWlyb2hhIFNvQ3MuXG5cbkxldCBtZSB0YWtlIGEgbG9vayBhdCB0aGUgZnVuY3Rpb25zIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcuIEFoYSwgdGhlIHBhdGNoIGlzIGNoYW5naW5nIHRoaW5ncyBpbiBgYWlyb2hhX3FkbWFfd2FrZV9uZXRkZXZfdHhxc2AsIGBhaXJvaGFfcWRtYV90eF9uYXBpX3BvbGxgLCBgYWlyb2hhX2Rldl9vcGVuYCwgYGFpcm9oYV9kZXZfc3RvcGAsIGBhaXJvaGFfZW5hYmxlX2dkbTJfbG9vcGJhY2tgLCBgYWlyb2hhX2Rpc2FibGVfZ2RtMl9sb29wYmFja2AsIGBhaXJvaGFfZGV2X3NldF9xZG1hYCwgYGFpcm9oYV9kZXZfaW5pdGAsIGBhaXJvaGFfZGV2X3htaXRgLCBgYWlyb2hhX3FkbWFfc2V0X2NoYW5fdHhfc2NoZWRgLCBgYWlyb2hhX3FkbWFfZ2V0X3R4X2V0c19zdGF0c2AsIGBhaXJvaGFfcWRtYV9zZXRfdHhfcmF0ZV9saW1pdGAsIGBhaXJvaGFfdGNfaHRiX2FsbG9jX2xlYWZfcXVldWVgLCBgYWlyb2hhX3FkbWFfc2V0X3J4X21ldGVyYCwgYGFpcm9oYV90Y19yZW1vdmVfaHRiX3F1ZXVlYCwgYGFpcm9oYV90Y19odGJfZGVsZXRlX2xlYWZfcXVldWVgLCBgYWlyb2hhX2Rpc2FibGVfcW9zX2Zvcl9nZG0zNGAsIGBhaXJvaGFfZW5hYmxlX3Fvc19mb3JfZ2RtMzRgLCBgYWlyb2hhX3RjX2h0Yl9kZXN0cm95YCwgYGFpcm9oYV90Y19nZXRfaHRiX2dldF9sZWFmX3F1ZXVlYCwgYGFpcm9oYV90Y19zZXR1cF9xZGlzY19odGJgLiBZZWFoLCB0aG9zZSBhcmUgYWxsIHNjcmVhbWluZyBcIkFpcm9oYSBldGhlcm5ldCBkcml2ZXJcIiB0byBtZS5cblxuQmFzZWQgb24gdGhpcywgaXQncyBjbGVhciB0aGlzIGlzIGEgcGxhdGZvcm0gZHJpdmVyIGRlZXBseSB0aWVkIHRvIHRoZSBBaXJvaGEgU29DLiBUaGlzIG1lYW5zIGl0IG5lZWRzIHJlYWwgaGFyZHdhcmUgb3IgYSB2ZXJ5IHNwZWNpZmljIGVtdWxhdG9yIHRvIGJlIHByb2JlZCBhbmQgZXhlY3V0ZWQuIFNpbmNlIFFFTVUsIGFuZCB0aGVyZWZvcmUgZW52aXJvbm1lbnRzIGxpa2UgR0NFLCBhcmVuJ3QgZ29pbmcgdG8gY3V0IGl0LCBJJ20gZ29pbmcgdG8gaGF2ZSB0byBjb25jbHVkZSB0aGF0IHJlYWNoaW5nIHRoaXMgY29kZSBpcyBpbXBvc3NpYmxlIGluIGEgdmlydHVhbGl6ZWQgc2V0dGluZy5cblxuVGhlcmVmb3JlLCBJJ20gZ29pbmcgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgcmF0aW9uYWxlIGlzIHN0cmFpZ2h0Zm9yd2FyZDogaXQncyBhIGhhcmR3YXJlLXNwZWNpZmljIHBsYXRmb3JtIGRyaXZlciBmb3IgYW4gQWlyb2hhIFNvQywgYW5kIGl0IGNhbm5vdCBiZSBwcm9iZWQgb3IgZXhlY3V0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgZW52aXJvbm1lbnRzLiBUaGVyZSdzIG5vIGVmZmVjdGl2ZSBwYXRoIHRvIGZ1enogaXQgaW4gYSBwcmFjdGljYWwgd2F5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTkwOCwiT3V0cHV0VG9rZW5zIjoxMDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjA6MDI6NTguNzA0ODc5NzY5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTM1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQWlyb2hhIGV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhLyksIHdoaWNoIGlzIGEgcGxhdGZvcm0gZHJpdmVyIHNwZWNpZmljIHRvIEFpcm9oYSBTb0NzIChlLmcuLCBFTjc1ODEpLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudHMsIG1lYW5pbmcgdGhlIGRyaXZlciBjYW5ub3QgYmUgcHJvYmVkIGFuZCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQWlyb2hhIGV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhLyksIHdoaWNoIGlzIGEgcGxhdGZvcm0gZHJpdmVyIHNwZWNpZmljIHRvIEFpcm9oYSBTb0NzIChlLmcuLCBFTjc1ODEpLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudHMsIG1lYW5pbmcgdGhlIGRyaXZlciBjYW5ub3QgYmUgcHJvYmVkIGFuZCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2fb6q[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-25 19:46:47 +0000 UTC FinishedAt: 2026-07-25 20:03:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIwOjAyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBaXJvaGEgZXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvKSwgd2hpY2ggaXMgYSBwbGF0Zm9ybSBkcml2ZXIgc3BlY2lmaWMgdG8gQWlyb2hhIFNvQ3MgKGUuZy4sIEVONzU4MSkuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50cywgbWVhbmluZyB0aGUgZHJpdmVyIGNhbm5vdCBiZSBwcm9iZWQgYW5kIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjA6MDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1ZTRmMTBlNWY4ZTFjNTNmNTJjNGNjNjRkZDE3Njc4OTAwN2IwMzU1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgMjUgMjA6MDI6NDMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmNcbmluZGV4IDc5NDE4ZTY4MmY3MWYzLi4wMjkyMDU4N2UwY2M0NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmNcbkBAIC05MzQsNyAmIzQzOzkzNCw3IEBAIHN0YXRpYyB2b2lkIGFpcm9oYV9xZG1hX3dha2VfbmV0ZGV2X3R4cXMoc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSlcbiBcdFx0XHRpZiAoIWRldilcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRcdGlmIChkZXYtXHUwMDNlcWRtYSAhPSBxZG1hKVxuJiM0MztcdFx0XHRpZiAocmN1X2FjY2Vzc19wb2ludGVyKGRldi1cdTAwM2VxZG1hKSAhPSBxZG1hKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXG4gXHRcdFx0bmV0ZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihkZXYpO1xuQEAgLTEwMzgsMTAgJiM0MzsxMDM4LDIxIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfdHhfbmFwaV9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldClcbiBcdFx0cS1cdTAwM2VxdWV1ZWQtLTtcbiBcbiBcdFx0aWYgKHNrYikge1xuJiM0MztcdFx0XHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KHNrYi1cdTAwM2VkZXYpO1xuJiM0MztcdFx0XHR1MTYgcWlkeCA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpO1xuIFx0XHRcdHN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cTtcbiBcbiBcdFx0XHR0eHEgPSBza2JfZ2V0X3R4X3F1ZXVlKHNrYi1cdTAwM2VkZXYsIHNrYik7XG4tXHRcdFx0bmV0ZGV2X3R4X2NvbXBsZXRlZF9xdWV1ZSh0eHEsIDEsIHNrYi1cdTAwM2VsZW4pO1xuJiM0MztcdFx0XHRpZiAocmN1X2FjY2Vzc19wb2ludGVyKGRldi1cdTAwM2VxZG1hKSAhPSBxZG1hKSB7XG4mIzQzO1x0XHRcdFx0YXRvbWljX2FkZCgxLCBcdTAwMjZkZXYtXHUwMDNlYnFsW3FpZHhdLnBrdHMpO1xuJiM0MztcdFx0XHRcdGF0b21pY19hZGQoc2tiLVx1MDAzZWxlbiwgXHUwMDI2ZGV2LVx1MDAzZWJxbFtxaWR4XS5ieXRlcyk7XG4mIzQzO1x0XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdFx0dTMyIHBrdHMgPSAxLCBieXRlcyA9IHNrYi1cdTAwM2VsZW47XG4mIzQzO1xuJiM0MztcdFx0XHRcdGJ5dGVzICYjNDM7PSBhdG9taWNfeGNoZyhcdTAwMjZkZXYtXHUwMDNlYnFsW3FpZHhdLmJ5dGVzLCAwKTtcbiYjNDM7XHRcdFx0XHRwa3RzICYjNDM7PSBhdG9taWNfeGNoZyhcdTAwMjZkZXYtXHUwMDNlYnFsW3FpZHhdLnBrdHMsIDApO1xuJiM0MztcdFx0XHRcdG5ldGRldl90eF9jb21wbGV0ZWRfcXVldWUodHhxLCBwa3RzLCBieXRlcyk7XG4mIzQzO1x0XHRcdH1cbiBcdFx0XHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuIFx0XHR9XG4gXG5AQCAtMTkwNSw4ICYjNDM7MTkxNiw4IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4ge1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGRldi1cdTAwM2Vwb3J0O1xuLVx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LVx1MDAzZXFkbWE7XG4gXHR1MzIgcHNlX3BvcnQgPSBGRV9QU0VfUE9SVF9QUEUxO1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcbiBcdGludCBlcnI7XG4gXG4gXHRuZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKG5ldGRldik7XG5AQCAtMTkxNCw2ICYjNDM7MTkyNSw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuJiM0MztcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuIFx0aWYgKG5ldGRldl91c2VzX2RzYShuZXRkZXYpKVxuIFx0XHRhaXJvaGFfZmVfc2V0KHFkbWEtXHUwMDNlZXRoLCBSRUdfR0RNX0lOR1JFU1NfQ0ZHKHBvcnQtXHUwMDNlaWQpLFxuIFx0XHRcdCAgICAgIEdETV9TVEFHX0VOX01BU0spO1xuQEAgLTE5MzcsNyAmIzQzOzE5NDksNiBAQCBzdGF0aWMgaW50IGFpcm9oYV9kZXZfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIHtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBkZXYtXHUwMDNlcG9ydDtcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cdTAwM2VxZG1hO1xuIFxuIFx0bmV0aWZfdHhfZGlzYWJsZShuZXRkZXYpO1xuIFx0YWlyb2hhX3NldF92aXBfZm9yX2dkbV9wb3J0KGRldiwgZmFsc2UpO1xuQEAgLTE5NDUsNyAmIzQzOzE5NTYsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9kZXZfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0aWYgKC0tcG9ydC1cdTAwM2V1c2VycylcbiBcdFx0YWlyb2hhX3BwZV9zZXRfeG1pdF9mcmFtZV9zaXplKGRldik7XG4gXHRlbHNlXG4tXHRcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhxZG1hLVx1MDAzZWV0aCxcbiYjNDM7XHRcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhkZXYtXHUwMDNlZXRoLFxuIFx0XHRcdFx0XHQgICAgUkVHX0dETV9GV0RfQ0ZHKHBvcnQtXHUwMDNlaWQpLFxuIFx0XHRcdFx0XHQgICAgRkVfUFNFX1BPUlRfRFJPUCk7XG4gXHRyZXR1cm4gMDtcbkBAIC0yMDI4LDYgJiM0MzsyMDM5LDUzIEBAIHN0YXRpYyBpbnQgYWlyb2hhX2VuYWJsZV9nZG0yX2xvb3BiYWNrKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGFpcm9oYV9kaXNhYmxlX2dkbTJfbG9vcGJhY2soc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZGV2LVx1MDAzZXBvcnQ7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IGRldi1cdTAwM2VldGg7XG4mIzQzO1x0aW50IGksIHNyY19wb3J0O1xuJiM0MztcdHUzMiBwc2VfcG9ydDtcbiYjNDM7XG4mIzQzO1x0c3JjX3BvcnQgPSBldGgtXHUwMDNlc29jLVx1MDAzZW9wcy5nZXRfc3BvcnQoZGV2LVx1MDAzZXBvcnQsIGRldi1cdTAwM2VuYnEpO1xuJiM0MztcdGlmIChzcmNfcG9ydCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBzcmNfcG9ydDtcbiYjNDM7XG4mIzQzO1x0YWlyb2hhX2ZlX2NsZWFyKGV0aCxcbiYjNDM7XHRcdFx0UkVHX1NQX0RGVF9DUE9SVChzcmNfcG9ydCBcdTAwM2VcdTAwM2UgZmxzKFNQX0NQT1JUX0RGVF9NQVNLKSksXG4mIzQzO1x0XHRcdFNQX0NQT1JUX01BU0soc3JjX3BvcnQgXHUwMDI2IFNQX0NQT1JUX0RGVF9NQVNLKSk7XG4mIzQzO1xuJiM0MztcdGFpcm9oYV9mZV9zZXQoZXRoLCBSRUdfR0RNX0ZXRF9DRkcoQUlST0hBX0dETTJfSURYKSxcbiYjNDM7XHRcdCAgICAgIEdETV9TVFJJUF9DUkNfTUFTSyk7XG4mIzQzO1x0YWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKGV0aCwgUkVHX0dETV9GV0RfQ0ZHKEFJUk9IQV9HRE0yX0lEWCksXG4mIzQzO1x0XHRcdFx0ICAgIEZFX1BTRV9QT1JUX0RST1ApO1xuJiM0MztcdGFpcm9oYV9mZV9jbGVhcihldGgsIFJFR19HRE1fTFBCS19DRkcoQUlST0hBX0dETTJfSURYKSxcbiYjNDM7XHRcdFx0TFBCS19DSEFOX01BU0sgfCBMUEJLX01PREVfTUFTSyB8IExQQktfRU5fTUFTSyk7XG4mIzQzO1x0cHNlX3BvcnQgPSBhaXJvaGFfcHBlX2lzX2VuYWJsZWQoZXRoLCAxKSA/IEZFX1BTRV9QT1JUX1BQRTJcbiYjNDM7XHRcdFx0XHRcdFx0IDogRkVfUFNFX1BPUlRfUFBFMTtcbiYjNDM7XHRhaXJvaGFfc2V0X2dkbV9wb3J0X2Z3ZF9jZmcoZXRoLCBSRUdfR0RNX0ZXRF9DRkcoQUlST0hBX0dETTJfSURYKSxcbiYjNDM7XHRcdFx0XHQgICAgcHNlX3BvcnQpO1xuJiM0MztcbiYjNDM7XHRhaXJvaGFfZmVfcm13KGV0aCwgUkVHX0ZFX1dBTl9QT1JULCBXQU4wX01BU0ssXG4mIzQzO1x0XHQgICAgICBGSUVMRF9QUkVQKFdBTjBfTUFTSywgQUlST0hBX0dETTJfSURYKSk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGV0aC1cdTAwM2Vzb2MtXHUwMDNlbnVtX3BwZTsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRhaXJvaGFfZmVfY2xlYXIoZXRoLCBSRUdfUFBFX0RGVF9DUE9SVChpLCBBSVJPSEFfR0RNMl9JRFgpLFxuJiM0MztcdFx0XHRcdERGVF9DUE9SVF9NQVNLKEFJUk9IQV9HRE0yX0lEWCkpO1xuJiM0MztcbiYjNDM7XHQvKiBFbmFibGUgVklQIGFuZCBJRkMgZm9yIEdETTIgKi9cbiYjNDM7XHRhaXJvaGFfZmVfc2V0KGV0aCwgUkVHX0ZFX1ZJUF9QT1JUX0VOLCBCSVQoQUlST0hBX0dETTJfSURYKSk7XG4mIzQzO1x0YWlyb2hhX2ZlX3NldChldGgsIFJFR19GRV9JRkNfUE9SVF9FTiwgQklUKEFJUk9IQV9HRE0yX0lEWCkpO1xuJiM0MztcbiYjNDM7XHRpZiAocG9ydC1cdTAwM2VpZCA9PSBBSVJPSEFfR0RNNF9JRFggXHUwMDI2XHUwMDI2IGFpcm9oYV9pc183NTgxKGV0aCkpIHtcbiYjNDM7XHRcdHUzMiBtYXNrID0gRkNfSURfT0ZfU1JDX1BPUlRfTUFTSyhkZXYtXHUwMDNlbmJxKTtcbiYjNDM7XG4mIzQzO1x0XHRhaXJvaGFfZmVfcm13KGV0aCwgUkVHX1NSQ19QT1JUX0ZDX01BUDYsIG1hc2ssXG4mIzQzO1x0XHRcdCAgICAgIEZDX01BUDZfREVGX1ZBTFVFIFx1MDAyNiBtYXNrKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKlxuIGFpcm9oYV9nZXRfd2FuX2dkbV9kZXYoc3RydWN0IGFpcm9oYV9ldGggKmV0aClcbiB7XG5AQCAtMjA1NCwxNSAmIzQzOzIxMTIsNDMgQEAgYWlyb2hhX2dldF93YW5fZ2RtX2RldihzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoKVxuIHN0YXRpYyB2b2lkIGFpcm9oYV9kZXZfc2V0X3FkbWEoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpXG4ge1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IG5ldGRldl9mcm9tX3ByaXYoZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKmN1cl9xZG1hLCAqcWRtYTtcbiBcdHN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBkZXYtXHUwMDNlZXRoO1xuLVx0aW50IHBwZV9pZDtcbiYjNDM7XHRpbnQgaSwgcHBlX2lkO1xuIFxuIFx0LyogUURNQTAgaXMgdXNlZCBmb3IgbGFuIHBvcnRzIHdoaWxlIFFETUExIGlzIHVzZWQgZm9yIFdBTiBwb3J0cyAqL1xuLVx0ZGV2LVx1MDAzZXFkbWEgPSBcdTAwMjZldGgtXHUwMDNlcWRtYVshYWlyb2hhX2lzX2xhbl9nZG1fZGV2KGRldildO1xuLVx0bmV0ZGV2LVx1MDAzZWlycSA9IGRldi1cdTAwM2VxZG1hLVx1MDAzZWlycV9iYW5rc1swXS5pcnE7XG4mIzQzO1x0cWRtYSA9IFx1MDAyNmV0aC1cdTAwM2VxZG1hWyFhaXJvaGFfaXNfbGFuX2dkbV9kZXYoZGV2KV07XG4mIzQzO1x0Y3VyX3FkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAoY3VyX3FkbWEpIHtcbiYjNDM7XHRcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpO1xuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShjdXJfcWRtYS1cdTAwM2VxX3R4X2lycSk7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0XHRuYXBpX2Rpc2FibGUoXHUwMDI2Y3VyX3FkbWEtXHUwMDNlcV90eF9pcnFbaV0ubmFwaSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyY3VfYXNzaWduX3BvaW50ZXIoZGV2LVx1MDAzZXFkbWEsIHFkbWEpO1xuJiM0MztcdG5ldGRldi1cdTAwM2VpcnEgPSBxZG1hLVx1MDAzZWlycV9iYW5rc1swXS5pcnE7XG4mIzQzO1x0c3luY2hyb25pemVfcmN1KCk7XG4gXG4gXHRwcGVfaWQgPSAhYWlyb2hhX2lzX2xhbl9nZG1fZGV2KGRldikgXHUwMDI2XHUwMDI2IGFpcm9oYV9wcGVfaXNfZW5hYmxlZChldGgsIDEpO1xuIFx0YWlyb2hhX3BwZV9zZXRfY3B1X3BvcnQoZGV2LCBwcGVfaWQsIGFpcm9oYV9nZXRfZmVfcG9ydChkZXYpKTtcbiYjNDM7XG4mIzQzO1x0LyogU2VlZCBxb3Nfc3RhdHMgYmFzZWxpbmVzIHdpdGggdGhlIG5ldyBRRE1BIGJsb2NrJiMzOTtzIGN1cnJlbnRcbiYjNDM7XHQgKiBjb3VudGVyIHZhbHVlcyB0byBhdm9pZCBhIHNwdXJpb3VzIHNwaWtlIG9uIHRoZSBmaXJzdCBzdGF0c1xuJiM0MztcdCAqIHF1ZXJ5IGFmdGVyIGluaXQgb3IgbWlncmF0aW9uLlxuJiM0MztcdCAqL1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoZGV2LVx1MDAzZXFvc19zdGF0cyk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRkZXYtXHUwMDNlcW9zX3N0YXRzW2ldLmNwdV90eF9wYWNrZXRzID1cbiYjNDM7XHRcdFx0YWlyb2hhX3FkbWFfcnIocWRtYSwgUkVHX0NOVFJfVkFMKGkgXHUwMDNjXHUwMDNjIDEpKTtcbiYjNDM7XHRcdGRldi1cdTAwM2Vxb3Nfc3RhdHNbaV0uZndkX3R4X3BhY2tldHMgPVxuJiM0MztcdFx0XHRhaXJvaGFfcWRtYV9ycihxZG1hLCBSRUdfQ05UUl9WQUwoKGkgXHUwMDNjXHUwMDNjIDEpICYjNDM7IDEpKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChjdXJfcWRtYSkge1xuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShjdXJfcWRtYS1cdTAwM2VxX3R4X2lycSk7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0XHRuYXBpX2VuYWJsZShcdTAwMjZjdXJfcWRtYS1cdTAwM2VxX3R4X2lycVtpXS5uYXBpKTtcbiYjNDM7XHRcdG5ldGlmX3R4X3dha2VfYWxsX3F1ZXVlcyhuZXRkZXYpO1xuJiM0MztcdH1cbiB9XG4gXG4gc3RhdGljIGludCBhaXJvaGFfZGV2X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbkBAIC0yMDc4LDcgJiM0MzsyMTY0LDcgQEAgc3RhdGljIGludCBhaXJvaGFfZGV2X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdFx0ZmFsbHRocm91Z2g7XG4gXHRjYXNlIEFJUk9IQV9HRE0yX0lEWDpcbiBcdFx0LyogR0RNMiBpcyBhbHdheXMgdXNlZCBhcyB3YW4gKi9cbi1cdFx0ZGV2LVx1MDAzZWZsYWdzIHw9IEFJUk9IQV9QUklWX0ZfV0FOO1xuJiM0MztcdFx0c2V0X2JpdChBSVJPSEFfREVWX0ZfV0FOLCBcdTAwMjZkZXYtXHUwMDNlZmxhZ3MpO1xuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdGJyZWFrO1xuQEAgLTIyMTcsOSAmIzQzOzIzMDMsOSBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIHtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cdTAwM2VxZG1hO1xuIFx0dTMyIG5yX2ZyYWdzLCB0YWcsIG1zZzAsIG1zZzEsIGxlbjtcbiBcdHN0cnVjdCBhaXJvaGFfcXVldWVfZW50cnkgKmU7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xuIFx0c3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxO1xuIFx0c3RydWN0IGFpcm9oYV9xdWV1ZSAqcTtcbiBcdExJU1RfSEVBRCh0eF9saXN0KTtcbkBAIC0yMjI4LDYgJiM0MzsyMzE0LDggQEAgc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0dTE2IGluZGV4O1xuIFx0dTggZnBvcnQ7XG4gXG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdHFkbWEgPSByY3VfZGVyZWZlcmVuY2UoZGV2LVx1MDAzZXFkbWEpO1xuIFx0cWlkID0gYWlyb2hhX3FkbWFfZ2V0X3R4cShxZG1hLCBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKSk7XG4gXHR0YWcgPSBhaXJvaGFfZ2V0X2RzYV90YWcoc2tiLCBuZXRkZXYpO1xuIFxuQEAgLTIyNzcsNiAmIzQzOzIzNjUsOCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdG5ldGlmX3R4X3N0b3BfcXVldWUodHhxKTtcbiBcdFx0cS1cdTAwM2V0eHFfc3RvcHBlZCA9IHRydWU7XG4gXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnEtXHUwMDNlbG9jayk7XG4mIzQzO1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4gXHRcdHJldHVybiBORVRERVZfVFhfQlVTWTtcbiBcdH1cbiBcbkBAIC0yMzQyLDYgJiM0MzsyNDMyLDcgQEAgc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0RklFTERfUFJFUChUWF9SSU5HX0NQVV9JRFhfTUFTSywgaW5kZXgpKTtcbiBcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnEtXHUwMDNlbG9jayk7XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRyZXR1cm4gTkVUREVWX1RYX09LO1xuIFxuQEAgLTIzNTQsNiAmIzQzOzI0NDUsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gZXJyb3I6XG4gXHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuIFx0bmV0ZGV2LVx1MDAzZXN0YXRzLnR4X2Ryb3BwZWQmIzQzOyYjNDM7O1xuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0cmV0dXJuIE5FVERFVl9UWF9PSztcbiB9XG5AQCAtMjQzMywxNyAmIzQzOzI1MjUsMTkgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9zZXRfY2hhbl90eF9zY2hlZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRcdFx0XHQgY29uc3QgdTE2ICp3ZWlnaHRzLCB1OCBuX3dlaWdodHMpXG4ge1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcbiBcdGludCBpO1xuIFxuJiM0MztcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQUlST0hBX05VTV9RT1NfUVVFVUVTOyBpJiM0MzsmIzQzOylcbi1cdFx0YWlyb2hhX3FkbWFfY2xlYXIoZGV2LVx1MDAzZXFkbWEsIFJFR19RVUVVRV9DTE9TRV9DRkcoY2hhbm5lbCksXG4mIzQzO1x0XHRhaXJvaGFfcWRtYV9jbGVhcihxZG1hLCBSRUdfUVVFVUVfQ0xPU0VfQ0ZHKGNoYW5uZWwpLFxuIFx0XHRcdFx0ICBUWFFfRElTQUJMRV9DSEFOX1FVRVVFX01BU0soY2hhbm5lbCwgaSkpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgbl93ZWlnaHRzOyBpJiM0MzsmIzQzOykge1xuIFx0XHR1MzIgc3RhdHVzO1xuIFx0XHRpbnQgZXJyO1xuIFxuLVx0XHRhaXJvaGFfcWRtYV93cihkZXYtXHUwMDNlcWRtYSwgUkVHX1RYV1JSX1dFSUdIVF9DRkcsXG4mIzQzO1x0XHRhaXJvaGFfcWRtYV93cihxZG1hLCBSRUdfVFhXUlJfV0VJR0hUX0NGRyxcbiBcdFx0XHQgICAgICAgVFdSUl9SV19DTURfTUFTSyB8XG4gXHRcdFx0ICAgICAgIEZJRUxEX1BSRVAoVFdSUl9DSEFOX0lEWF9NQVNLLCBjaGFubmVsKSB8XG4gXHRcdFx0ICAgICAgIEZJRUxEX1BSRVAoVFdSUl9RVUVVRV9JRFhfTUFTSywgaSkgfFxuQEAgLTI0NTEsMTIgJiM0MzsyNTQ1LDEyIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfc2V0X2NoYW5fdHhfc2NoZWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0ZXJyID0gcmVhZF9wb2xsX3RpbWVvdXQoYWlyb2hhX3FkbWFfcnIsIHN0YXR1cyxcbiBcdFx0XHRcdFx0c3RhdHVzIFx1MDAyNiBUV1JSX1JXX0NNRF9ET05FLFxuIFx0XHRcdFx0XHRVU0VDX1BFUl9NU0VDLCAxMCAqIFVTRUNfUEVSX01TRUMsXG4tXHRcdFx0XHRcdHRydWUsIGRldi1cdTAwM2VxZG1hLCBSRUdfVFhXUlJfV0VJR0hUX0NGRyk7XG4mIzQzO1x0XHRcdFx0XHR0cnVlLCBxZG1hLCBSRUdfVFhXUlJfV0VJR0hUX0NGRyk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdH1cbiBcbi1cdGFpcm9oYV9xZG1hX3JtdyhkZXYtXHUwMDNlcWRtYSwgUkVHX0NIQU5fUU9TX01PREUoY2hhbm5lbCBcdTAwM2VcdTAwM2UgMyksXG4mIzQzO1x0YWlyb2hhX3FkbWFfcm13KHFkbWEsIFJFR19DSEFOX1FPU19NT0RFKGNoYW5uZWwgXHUwMDNlXHUwMDNlIDMpLFxuIFx0XHRcdENIQU5fUU9TX01PREVfTUFTSyhjaGFubmVsKSxcbiBcdFx0XHRfX2ZpZWxkX3ByZXAoQ0hBTl9RT1NfTU9ERV9NQVNLKGNoYW5uZWwpLCBtb2RlKSk7XG4gXG5AQCAtMjUyMCwxNyAmIzQzOzI2MTQsMjIgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9nZXRfdHhfZXRzX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBjaGFubmVsLFxuIFx0XHRcdFx0XHRzdHJ1Y3QgdGNfZXRzX3FvcHRfb2ZmbG9hZCAqb3B0KVxuIHtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cdTAwM2VxZG1hO1xuJiM0MztcdHUzMiBjcHVfdHhfcGFja2V0cywgZndkX3R4X3BhY2tldHM7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xuJiM0MztcdHU2NCB0eF9wYWNrZXRzO1xuIFxuLVx0dTY0IGNwdV90eF9wYWNrZXRzID0gYWlyb2hhX3FkbWFfcnIocWRtYSwgUkVHX0NOVFJfVkFMKGNoYW5uZWwgXHUwMDNjXHUwMDNjIDEpKTtcbi1cdHU2NCBmd2RfdHhfcGFja2V0cyA9IGFpcm9oYV9xZG1hX3JyKHFkbWEsXG4tXHRcdFx0XHRcdCAgICBSRUdfQ05UUl9WQUwoKGNoYW5uZWwgXHUwMDNjXHUwMDNjIDEpICYjNDM7IDEpKTtcbi1cdHU2NCB0eF9wYWNrZXRzID0gKGNwdV90eF9wYWNrZXRzIC0gZGV2LVx1MDAzZWNwdV90eF9wYWNrZXRzKSAmIzQzO1xuLVx0XHRcdCAoZndkX3R4X3BhY2tldHMgLSBkZXYtXHUwMDNlZndkX3R4X3BhY2tldHMpO1xuJiM0MztcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuJiM0MztcdGNwdV90eF9wYWNrZXRzID0gYWlyb2hhX3FkbWFfcnIocWRtYSwgUkVHX0NOVFJfVkFMKGNoYW5uZWwgXHUwMDNjXHUwMDNjIDEpKTtcbiYjNDM7XHRmd2RfdHhfcGFja2V0cyA9IGFpcm9oYV9xZG1hX3JyKHFkbWEsXG4mIzQzO1x0XHRcdFx0XHRSRUdfQ05UUl9WQUwoKGNoYW5uZWwgXHUwMDNjXHUwMDNjIDEpICYjNDM7IDEpKTtcbiYjNDM7XHR0eF9wYWNrZXRzID0gKHUzMikoY3B1X3R4X3BhY2tldHMgLVxuJiM0MztcdFx0XHQgICBkZXYtXHUwMDNlcW9zX3N0YXRzW2NoYW5uZWxdLmNwdV90eF9wYWNrZXRzKTtcbiYjNDM7XHR0eF9wYWNrZXRzICYjNDM7PSAodTMyKShmd2RfdHhfcGFja2V0cyAtXG4mIzQzO1x0XHRcdCAgICBkZXYtXHUwMDNlcW9zX3N0YXRzW2NoYW5uZWxdLmZ3ZF90eF9wYWNrZXRzKTtcbiBcbiBcdF9ic3RhdHNfdXBkYXRlKG9wdC1cdTAwM2VzdGF0cy5ic3RhdHMsIDAsIHR4X3BhY2tldHMpO1xuLVx0ZGV2LVx1MDAzZWNwdV90eF9wYWNrZXRzID0gY3B1X3R4X3BhY2tldHM7XG4tXHRkZXYtXHUwMDNlZndkX3R4X3BhY2tldHMgPSBmd2RfdHhfcGFja2V0cztcbiYjNDM7XHRkZXYtXHUwMDNlcW9zX3N0YXRzW2NoYW5uZWxdLmNwdV90eF9wYWNrZXRzID0gY3B1X3R4X3BhY2tldHM7XG4mIzQzO1x0ZGV2LVx1MDAzZXFvc19zdGF0c1tjaGFubmVsXS5md2RfdHhfcGFja2V0cyA9IGZ3ZF90eF9wYWNrZXRzO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTI3ODUsMTYgJiM0MzsyODg0LDE4IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfc2V0X3R4X3JhdGVfbGltaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0XHRcdFx0IHUzMiBidWNrZXRfc2l6ZSlcbiB7XG4gXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xuIFx0aW50IGksIGVycjtcbiBcbiYjNDM7XHRxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjPSBUUlRDTV9QRUFLX01PREU7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdGVyciA9IGFpcm9oYV9xZG1hX3NldF90cnRjbV9jb25maWcoZGV2LVx1MDAzZXFkbWEsIGNoYW5uZWwsXG4mIzQzO1x0XHRlcnIgPSBhaXJvaGFfcWRtYV9zZXRfdHJ0Y21fY29uZmlnKHFkbWEsIGNoYW5uZWwsXG4gXHRcdFx0XHRcdFx0ICAgUkVHX0VHUkVTU19UUlRDTV9DRkcsIGksXG4gXHRcdFx0XHRcdFx0ICAgISFyYXRlLCBUUlRDTV9NRVRFUl9NT0RFKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0XHRlcnIgPSBhaXJvaGFfcWRtYV9zZXRfdHJ0Y21fdG9rZW5fYnVja2V0KGRldi1cdTAwM2VxZG1hLCBjaGFubmVsLFxuJiM0MztcdFx0ZXJyID0gYWlyb2hhX3FkbWFfc2V0X3RydGNtX3Rva2VuX2J1Y2tldChxZG1hLCBjaGFubmVsLFxuIFx0XHRcdFx0XHRcdFx0IFJFR19FR1JFU1NfVFJUQ01fQ0ZHLFxuIFx0XHRcdFx0XHRcdFx0IGksIHJhdGUsIGJ1Y2tldF9zaXplKTtcbiBcdFx0aWYgKGVycilcbkBAIC0yODMwLDExICYjNDM7MjkzMSwxMiBAQCBzdGF0aWMgaW50IGFpcm9oYV90Y19odGJfYWxsb2NfbGVhZl9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0dTMyIGNoYW5uZWwgPSBUQ19IX01JTihvcHQtXHUwMDNlY2xhc3NpZCkgJSBBSVJPSEFfTlVNX1FPU19DSEFOTkVMUztcbiBcdGludCBlcnIsIG51bV90eF9xdWV1ZXMgPSBBSVJPSEFfTlVNX1RYX1JJTkcgJiM0MzsgY2hhbm5lbCAmIzQzOyAxO1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuLVx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LVx1MDAzZXFkbWE7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xuIFxuIFx0LyogSGVyZSB3ZSBuZWVkIHRvIGNoZWNrIHRoZSByZXF1ZXN0ZWQgUURNQSBjaGFubmVsIGlzIG5vdCBhbHJlYWR5XG4gXHQgKiBpbiB1c2UgYnkgYW5vdGhlciBuZXRfZGV2aWNlIHJ1bm5pbmcgb24gdGhlIHNhbWUgUURNQSBibG9jay5cbiBcdCAqL1xuJiM0MztcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuIFx0aWYgKHRlc3RfYW5kX3NldF9iaXQoY2hhbm5lbCwgcWRtYS1cdTAwM2Vxb3NfY2hhbm5lbF9tYXApKSB7XG4gXHRcdE5MX1NFVF9FUlJfTVNHX01PRChvcHQtXHUwMDNlZXh0YWNrLFxuIFx0XHRcdFx0ICAgXCYjMzQ7cWRtYSBxb3MgY2hhbm5lbCBhbHJlYWR5IGluIHVzZVwmIzM0Oyk7XG5AQCAtMjg3MCw3ICYjNDM7Mjk3Miw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfc2V0X3J4X21ldGVyKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2LFxuIFx0XHRcdFx0ICAgIHUzMiByYXRlLCB1MzIgYnVja2V0X3NpemUsXG4gXHRcdFx0XHQgICAgZW51bSB0cnRjbV91bml0X3R5cGUgdW5pdF90eXBlKVxuIHtcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cdTAwM2VxZG1hO1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XG4gXHRpbnQgaTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUocWRtYS1cdTAwM2VxX3J4KTsgaSYjNDM7JiM0MzspIHtcbkBAIC0zMDQ1LDEwICYjNDM7MzE0NywxMSBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfdGNfcmVtb3ZlX2h0Yl9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgcXVldWUpXG4ge1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIFx0aW50IG51bV90eF9xdWV1ZXMgPSBBSVJPSEFfTlVNX1RYX1JJTkc7XG4tXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtXHUwMDNlcWRtYTtcbiYjNDM7XHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7XG4gXG4gXHRhaXJvaGFfcWRtYV9zZXRfdHhfcmF0ZV9saW1pdChuZXRkZXYsIHF1ZXVlLCAwLCAwKTtcbiBcbiYjNDM7XHRxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcbiBcdGNsZWFyX2JpdChxdWV1ZSwgcWRtYS1cdTAwM2Vxb3NfY2hhbm5lbF9tYXApO1xuIFx0Y2xlYXJfYml0KHF1ZXVlLCBkZXYtXHUwMDNlcW9zX3NxX2JtYXApO1xuIFxuQEAgLTMwNzQsNiAmIzQzOzMxNzcsMTAwIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3RjX2h0Yl9kZWxldGVfbGVhZl9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBhaXJvaGFfZGlzYWJsZV9xb3NfZm9yX2dkbTM0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGRldi1cdTAwM2Vwb3J0O1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGlmIChwb3J0LVx1MDAzZWlkICE9IEFJUk9IQV9HRE0zX0lEWCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgcG9ydC1cdTAwM2VpZCAhPSBBSVJPSEFfR0RNNF9JRFgpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGVyciA9IGFpcm9oYV9kaXNhYmxlX2dkbTJfbG9vcGJhY2soZGV2KTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0bmV0ZGV2X3dhcm4obmV0ZGV2LFxuJiM0MztcdFx0XHQgICAgXCYjMzQ7ZmFpbGVkIGRpc2FibGluZyBHRE0yIGxvb3BiYWNrOiAlZFxcblwmIzM0OywgZXJyKTtcbiYjNDM7XG4mIzQzO1x0Y2xlYXJfYml0KEFJUk9IQV9ERVZfRl9XQU4sIFx1MDAyNmRldi1cdTAwM2VmbGFncyk7XG4mIzQzO1x0YWlyb2hhX2Rldl9zZXRfcWRtYShkZXYpO1xuJiM0MztcbiYjNDM7XHRhaXJvaGFfc2V0X21hY2FkZHIoZGV2LCBuZXRkZXYtXHUwMDNlZGV2X2FkZHIpO1xuJiM0MztcdGFpcm9oYV9wcGVfc2V0X3htaXRfZnJhbWVfc2l6ZShkZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKVxuJiM0MztcdFx0YWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKGRldi1cdTAwM2VldGgsXG4mIzQzO1x0XHRcdFx0XHQgICAgUkVHX0dETV9GV0RfQ0ZHKHBvcnQtXHUwMDNlaWQpLFxuJiM0MztcdFx0XHRcdFx0ICAgIEZFX1BTRV9QT1JUX1BQRTEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFpcm9oYV9lbmFibGVfcW9zX2Zvcl9nZG0zNChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKndhbl9kZXYsICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBkZXYtXHUwMDNlcG9ydDtcbiYjNDM7XHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gZGV2LVx1MDAzZWV0aDtcbiYjNDM7XHRpbnQgZXJyID0gLUVCVVNZO1xuJiM0MztcbiYjNDM7XHRpZiAocG9ydC1cdTAwM2VpZCAhPSBBSVJPSEFfR0RNM19JRFggXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHBvcnQtXHUwMDNlaWQgIT0gQUlST0hBX0dETTRfSURYKSB7XG4mIzQzO1x0XHQvKiBIVyBRb1MgaXMgYWx3YXlzIHN1cHBvcnRlZCBieSBHRE0xIGFuZCBHRE0yICovXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghYWlyb2hhX2lzX2xhbl9nZG1fZGV2KGRldikpIC8qIEFscmVhZHkgZW5hYmxlZCAqL1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2Zmxvd19vZmZsb2FkX211dGV4KTtcbiYjNDM7XG4mIzQzO1x0d2FuX2RldiA9IGFpcm9oYV9nZXRfd2FuX2dkbV9kZXYoZXRoKTtcbiYjNDM7XHRpZiAod2FuX2Rldikge1xuJiM0MztcdFx0aWYgKHRlc3RfYml0KEFJUk9IQV9ERVZfRl9UWF9RT1MsIFx1MDAyNndhbl9kZXYtXHUwMDNlZmxhZ3MpIHx8XG4mIzQzO1x0XHQgICAgd2FuX2Rldi1cdTAwM2Vwb3J0LVx1MDAzZWlkID09IEFJUk9IQV9HRE0yX0lEWCkge1xuJiM0MztcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHRcdFx0ICAgXCYjMzQ7UW9TIGNvbmZpZ3VyZWQgZm9yIFdBTiBkZXZpY2VcJiMzNDspO1xuJiM0MztcdFx0XHRnb3RvIGVycm9yX3VubG9jaztcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGFpcm9oYV9kaXNhYmxlX3Fvc19mb3JfZ2RtMzQobmV0ZGV2X2Zyb21fcHJpdih3YW5fZGV2KSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzZXRfYml0KEFJUk9IQV9ERVZfRl9XQU4sIFx1MDAyNmRldi1cdTAwM2VmbGFncyk7XG4mIzQzO1x0YWlyb2hhX2Rldl9zZXRfcWRtYShkZXYpO1xuJiM0MztcdGVyciA9IGFpcm9oYV9lbmFibGVfZ2RtMl9sb29wYmFjayhkZXYpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGVycm9yX2Rpc2FibGVfd2FuO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBhaXJvaGFfc2V0X21hY2FkZHIoZGV2LCBuZXRkZXYtXHUwMDNlZGV2X2FkZHIpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGVycm9yX2Rpc2FibGVfbG9vcGJhY2s7XG4mIzQzO1xuJiM0MztcdGFpcm9oYV9kZXZfc2V0X3htaXRfZnJhbWVfc2l6ZShuZXRkZXYpO1xuJiM0MztcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHtcbiYjNDM7XHRcdHUzMiBwc2VfcG9ydDtcbiYjNDM7XG4mIzQzO1x0XHRwc2VfcG9ydCA9IGFpcm9oYV9wcGVfaXNfZW5hYmxlZChldGgsIDEpID8gRkVfUFNFX1BPUlRfUFBFMlxuJiM0MztcdFx0XHRcdFx0XHRcdCA6IEZFX1BTRV9QT1JUX1BQRTE7XG4mIzQzO1x0XHRhaXJvaGFfc2V0X2dkbV9wb3J0X2Z3ZF9jZmcoZXRoLCBSRUdfR0RNX0ZXRF9DRkcocG9ydC1cdTAwM2VpZCksXG4mIzQzO1x0XHRcdFx0XHQgICAgcHNlX3BvcnQpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c2V0X2JpdChBSVJPSEFfREVWX0ZfVFhfUU9TLCBcdTAwMjZkZXYtXHUwMDNlZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2Zmxvd19vZmZsb2FkX211dGV4KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztlcnJvcl9kaXNhYmxlX2xvb3BiYWNrOlxuJiM0MztcdGFpcm9oYV9kaXNhYmxlX2dkbTJfbG9vcGJhY2soZGV2KTtcbiYjNDM7ZXJyb3JfZGlzYWJsZV93YW46XG4mIzQzO1x0Y2xlYXJfYml0KEFJUk9IQV9ERVZfRl9XQU4sIFx1MDAyNmRldi1cdTAwM2VmbGFncyk7XG4mIzQzO1x0YWlyb2hhX2Rldl9zZXRfcWRtYShkZXYpO1xuJiM0MztlcnJvcl91bmxvY2s6XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmZsb3dfb2ZmbG9hZF9tdXRleCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBhaXJvaGFfdGNfaHRiX2Rlc3Ryb3koc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB7XG4gXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG5AQCAtMzA4Miw2ICYjNDM7MzI3OSw4IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3RjX2h0Yl9kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRmb3JfZWFjaF9zZXRfYml0KHEsIGRldi1cdTAwM2Vxb3Nfc3FfYm1hcCwgQUlST0hBX05VTV9RT1NfQ0hBTk5FTFMpXG4gXHRcdGFpcm9oYV90Y19yZW1vdmVfaHRiX3F1ZXVlKG5ldGRldiwgcSk7XG4gXG4mIzQzO1x0Y2xlYXJfYml0KEFJUk9IQV9ERVZfRl9UWF9RT1MsIFx1MDAyNmRldi1cdTAwM2VmbGFncyk7XG4mIzQzO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTMxMDEsMjQgJiM0MzszMzAwLDI0IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3RjX2dldF9odGJfZ2V0X2xlYWZfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IGFpcm9oYV90Y19zZXR1cF9xZGlzY19odGIoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiYjNDM7c3RhdGljIGludCBhaXJvaGFfdGNfc2V0dXBfcWRpc2NfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCB0Y19odGJfcW9wdF9vZmZsb2FkICpvcHQpXG4ge1xuIFx0c3dpdGNoIChvcHQtXHUwMDNlY29tbWFuZCkge1xuIFx0Y2FzZSBUQ19IVEJfQ1JFQVRFOlxuLVx0XHRicmVhaztcbiYjNDM7XHRcdHJldHVybiBhaXJvaGFfZW5hYmxlX3Fvc19mb3JfZ2RtMzQobmV0ZGV2LCBvcHQtXHUwMDNlZXh0YWNrKTtcbiBcdGNhc2UgVENfSFRCX0RFU1RST1k6XG4tXHRcdHJldHVybiBhaXJvaGFfdGNfaHRiX2Rlc3Ryb3koZGV2KTtcbiYjNDM7XHRcdHJldHVybiBhaXJvaGFfdGNfaHRiX2Rlc3Ryb3kobmV0ZGV2KTtcbiBcdGNhc2UgVENfSFRCX05PREVfTU9ESUZZOlxuLVx0XHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9tb2RpZnlfcXVldWUoZGV2LCBvcHQpO1xuJiM0MztcdFx0cmV0dXJuIGFpcm9oYV90Y19odGJfbW9kaWZ5X3F1ZXVlKG5ldGRldiwgb3B0KTtcbiBcdGNhc2UgVENfSFRCX0xFQUZfQUxMT0NfUVVFVUU6XG4tXHRcdHJldHVybiBhaXJvaGFfdGNfaHRiX2FsbG9jX2xlYWZfcXVldWUoZGV2LCBvcHQpO1xuJiM0MztcdFx0cmV0dXJuIGFpcm9oYV90Y19odGJfYWxsb2NfbGVhZl9xdWV1ZShuZXRkZXYsIG9wdCk7XG4gXHRjYXNlIFRDX0hUQl9MRUFGX0RFTDpcbiBcdGNhc2UgVENfSFRCX0xFQUZfREVMX0xBU1Q6XG4gXHRjYXNlIFRDX0hUQl9MRUFGX0RFTF9MQVNUX0ZPUkNFOlxuLVx0XHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9kZWxldGVfbGVhZl9xdWV1ZShkZXYsIG9wdCk7XG4mIzQzO1x0XHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9kZWxldGVfbGVhZl9xdWV1ZShuZXRkZXYsIG9wdCk7XG4gXHRjYXNlIFRDX0hUQl9MRUFGX1FVRVJZX1FVRVVFOlxuLVx0XHRyZXR1cm4gYWlyb2hhX3RjX2dldF9odGJfZ2V0X2xlYWZfcXVldWUoZGV2LCBvcHQpO1xuJiM0MztcdFx0cmV0dXJuIGFpcm9oYV90Y19nZXRfaHRiX2dldF9sZWFmX3F1ZXVlKG5ldGRldiwgb3B0KTtcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaFxuaW5kZXggZmU5MzRmOWZmZThhMTEuLmU2ZmJkNDJjZjk2NDI5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaFxuQEAgLTU3MCwyNCAmIzQzOzU3MCwzMSBAQCBzdHJ1Y3QgYWlyb2hhX3FkbWEge1xuIFx0REVDTEFSRV9CSVRNQVAocW9zX2NoYW5uZWxfbWFwLCBBSVJPSEFfTlVNX1FPU19DSEFOTkVMUyk7XG4gfTtcbiBcbi1lbnVtIGFpcm9oYV9wcml2X2ZsYWdzIHtcbi1cdEFJUk9IQV9QUklWX0ZfV0FOID0gQklUKDApLFxuJiM0MztlbnVtIGFpcm9oYV9kZXZfZmxhZ3Mge1xuJiM0MztcdEFJUk9IQV9ERVZfRl9XQU4sXG4mIzQzO1x0QUlST0hBX0RFVl9GX1RYX1FPUyxcbiB9O1xuIFxuIHN0cnVjdCBhaXJvaGFfZ2RtX2RldiB7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9xZG1hIF9fcmN1ICpxZG1hO1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydDtcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcbiBcdHN0cnVjdCBhaXJvaGFfZXRoICpldGg7XG4gXG4gXHRERUNMQVJFX0JJVE1BUChxb3Nfc3FfYm1hcCwgQUlST0hBX05VTV9RT1NfQ0hBTk5FTFMpO1xuLVx0LyogcW9zIHN0YXRzIGNvdW50ZXJzICovXG4tXHR1NjQgY3B1X3R4X3BhY2tldHM7XG4tXHR1NjQgZndkX3R4X3BhY2tldHM7XG4mIzQzO1x0c3RydWN0IHtcbiYjNDM7XHRcdHUzMiBjcHVfdHhfcGFja2V0cztcbiYjNDM7XHRcdHUzMiBmd2RfdHhfcGFja2V0cztcbiYjNDM7XHR9IHFvc19zdGF0c1tBSVJPSEFfTlVNX1FPU19DSEFOTkVMU107XG4gXG4tXHR1MzIgZmxhZ3M7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdGludCBuYnE7XG4gXG4gXHRzdHJ1Y3QgYWlyb2hhX2h3X3N0YXRzIHN0YXRzO1xuJiM0MztcbiYjNDM7XHRzdHJ1Y3Qge1xuJiM0MztcdFx0YXRvbWljX3QgYnl0ZXM7XG4mIzQzO1x0XHRhdG9taWNfdCBwa3RzO1xuJiM0MztcdH0gYnFsW0FJUk9IQV9OVU1fTkVUREVWX1RYX1JJTkdTXTtcbiB9O1xuIFxuIHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQge1xuQEAgLTY5NCw3ICYjNDM7NzAxLDcgQEAgc3RhdGljIGlubGluZSB1MTYgYWlyb2hhX3FkbWFfZ2V0X3R4cShzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEsIHUxNiBxaWQpXG4gXG4gc3RhdGljIGlubGluZSBib29sIGFpcm9oYV9pc19sYW5fZ2RtX2RldihzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcbiB7XG4tXHRyZXR1cm4gIShkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IEFJUk9IQV9QUklWX0ZfV0FOKTtcbiYjNDM7XHRyZXR1cm4gIXRlc3RfYml0KEFJUk9IQV9ERVZfRl9XQU4sIFx1MDAyNmRldi1cdTAwM2VmbGFncyk7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBhaXJvaGFfaXNfNzU4MShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoKVxuQEAgLTcxMSw2ICYjNDM7NzE4LDE2IEBAIGludCBhaXJvaGFfZ2V0X2ZlX3BvcnQoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpO1xuIGJvb2wgYWlyb2hhX2lzX3ZhbGlkX2dkbV9kZXYoc3RydWN0IGFpcm9oYV9ldGggKmV0aCxcbiBcdFx0XHQgICAgIHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KTtcbiBcbiYjNDM7ZXh0ZXJuIHN0cnVjdCBtdXRleCBmbG93X29mZmxvYWRfbXV0ZXg7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBhaXJvaGFfcWRtYSAqXG4mIzQzO2Fpcm9oYV9xZG1hX2RlcmVmKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoZGV2LVx1MDAzZXFkbWEsXG4mIzQzO1x0XHRcdFx0XHQgbG9ja2RlcF9ydG5sX2lzX2hlbGQoKSB8fFxuJiM0MztcdFx0XHRcdFx0IGxvY2tkZXBfaXNfaGVsZChcdTAwMjZmbG93X29mZmxvYWRfbXV0ZXgpKTtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIGFpcm9oYV9wcGVfc2V0X3htaXRfZnJhbWVfc2l6ZShzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldik7XG4gdm9pZCBhaXJvaGFfcHBlX3NldF9jcHVfcG9ydChzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiwgdTggcHBlX2lkLCB1OCBmcG9ydCk7XG4gYm9vbCBhaXJvaGFfcHBlX2lzX2VuYWJsZWQoc3RydWN0IGFpcm9oYV9ldGggKmV0aCwgaW50IGluZGV4KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xuaW5kZXggZTRjMzY0NGRkNmVjN2EuLjMzZGRmMGQwNzg1NTM5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xuQEAgLTE1LDcgJiM0MzsxNSwxMCBAQFxuICNpbmNsdWRlIFwmIzM0O2Fpcm9oYV9yZWdzLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDthaXJvaGFfZXRoLmhcJiMzNDtcbiBcbi1zdGF0aWMgREVGSU5FX01VVEVYKGZsb3dfb2ZmbG9hZF9tdXRleCk7XG4mIzQzOy8qIFNlcmlhbGl6ZSBhaXJvaGFfZ2RtX2RldiBmbGFncywgUURNQSBwb2ludGVyIGFuZCBQUEUgQ1BVIHBvcnRcbiYjNDM7ICogY29uZmlndXJhdGlvbi5cbiYjNDM7ICovXG4mIzQzO0RFRklORV9NVVRFWChmbG93X29mZmxvYWRfbXV0ZXgpO1xuIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0socHBlX2xvY2spO1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgYWlyb2hhX2Zsb3dfdGFibGVfcGFyYW1zID0ge1xuQEAgLTg2LDggJiM0Mzs4OSw4IEBAIHN0YXRpYyB1MzIgYWlyb2hhX3BwZV9nZXRfdGltZXN0YW1wKHN0cnVjdCBhaXJvaGFfcHBlICpwcGUpXG4gXG4gdm9pZCBhaXJvaGFfcHBlX3NldF9jcHVfcG9ydChzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiwgdTggcHBlX2lkLCB1OCBmcG9ydClcbiB7XG4tXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtXHUwMDNlcWRtYTtcbi1cdHN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBxZG1hLVx1MDAzZWV0aDtcbiYjNDM7XHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBkZXYtXHUwMDNlZXRoO1xuIFx0dTggcWRtYV9pZCA9IHFkbWEgLSBcdTAwMjZldGgtXHUwMDNlcWRtYVswXTtcbiBcdHUzMiBmZV9jcHVfcG9ydDtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcmVncy5oXG5pbmRleCA2ZmVkNjNkMDEzYjQxMi4uNDQyYjQ4YzliOTkxZWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9yZWdzLmhcbkBAIC0zNzUsNiAmIzQzOzM3NSw3IEBAXG4gXG4gI2RlZmluZSBSRUdfU1JDX1BPUlRfRkNfTUFQNlx0XHQweDIyOThcbiAjZGVmaW5lIEZDX0lEX09GX1NSQ19QT1JUX01BU0soX24pXHRHRU5NQVNLKDQgJiM0MzsgKChfbikgXHUwMDNjXHUwMDNjIDMpLCAoKF9uKSBcdTAwM2NcdTAwM2MgMykpXG4mIzQzOyNkZWZpbmUgRkNfTUFQNl9ERUZfVkFMVUVcdFx0MHgxYjFhMTkxOFxuIFxuICNkZWZpbmUgUkVHX1dBTl9NVFUwXHRcdFx0MHgyMzAwXG4gI2RlZmluZSBXQU5fTVRVMV9NQVNLXHRcdFx0R0VOTUFTSygyOSwgMTYpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjA6MDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBaXJvaGEgZXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvKSwgd2hpY2ggaXMgYSBwbGF0Zm9ybSBkcml2ZXIgc3BlY2lmaWMgdG8gQWlyb2hhIFNvQ3MgKGUuZy4sIEVONzU4MSkuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50cywgbWVhbmluZyB0aGUgZHJpdmVyIGNhbm5vdCBiZSBwcm9iZWQgYW5kIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1ZTRmMTBlNWY4ZTFjNTNmNTJjNGNjNjRkZDE3Njc4OTAwN2IwMzU1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBKdWwgMjUgMjA6MDI6NDMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYwppbmRleCA3OTQxOGU2ODJmNzFmMy4uMDI5MjA1ODdlMGNjNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYwpAQCAtOTM0LDcgJiM0Mzs5MzQsNyBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfcWRtYV93YWtlX25ldGRldl90eHFzKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEpCiAJCQlpZiAoIWRldikKIAkJCQljb250aW51ZTsKIAotCQkJaWYgKGRldi0mZ3Q7cWRtYSAhPSBxZG1hKQomIzQzOwkJCWlmIChyY3VfYWNjZXNzX3BvaW50ZXIoZGV2LSZndDtxZG1hKSAhPSBxZG1hKQogCQkJCWNvbnRpbnVlOwogCiAJCQluZXRkZXYgPSBuZXRkZXZfZnJvbV9wcml2KGRldik7CkBAIC0xMDM4LDEwICYjNDM7MTAzOCwyMSBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3R4X25hcGlfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCiAJCXEtJmd0O3F1ZXVlZC0tOwogCiAJCWlmIChza2IpIHsKJiM0MzsJCQlzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KHNrYi0mZ3Q7ZGV2KTsKJiM0MzsJCQl1MTYgcWlkeCA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpOwogCQkJc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxOwogCiAJCQl0eHEgPSBza2JfZ2V0X3R4X3F1ZXVlKHNrYi0mZ3Q7ZGV2LCBza2IpOwotCQkJbmV0ZGV2X3R4X2NvbXBsZXRlZF9xdWV1ZSh0eHEsIDEsIHNrYi0mZ3Q7bGVuKTsKJiM0MzsJCQlpZiAocmN1X2FjY2Vzc19wb2ludGVyKGRldi0mZ3Q7cWRtYSkgIT0gcWRtYSkgewomIzQzOwkJCQlhdG9taWNfYWRkKDEsICZhbXA7ZGV2LSZndDticWxbcWlkeF0ucGt0cyk7CiYjNDM7CQkJCWF0b21pY19hZGQoc2tiLSZndDtsZW4sICZhbXA7ZGV2LSZndDticWxbcWlkeF0uYnl0ZXMpOwomIzQzOwkJCX0gZWxzZSB7CiYjNDM7CQkJCXUzMiBwa3RzID0gMSwgYnl0ZXMgPSBza2ItJmd0O2xlbjsKJiM0MzsKJiM0MzsJCQkJYnl0ZXMgJiM0Mzs9IGF0b21pY194Y2hnKCZhbXA7ZGV2LSZndDticWxbcWlkeF0uYnl0ZXMsIDApOwomIzQzOwkJCQlwa3RzICYjNDM7PSBhdG9taWNfeGNoZygmYW1wO2Rldi0mZ3Q7YnFsW3FpZHhdLnBrdHMsIDApOwomIzQzOwkJCQluZXRkZXZfdHhfY29tcGxldGVkX3F1ZXVlKHR4cSwgcGt0cywgYnl0ZXMpOwomIzQzOwkJCX0KIAkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCX0KIApAQCAtMTkwNSw4ICYjNDM7MTkxNiw4IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBkZXYtJmd0O3BvcnQ7Ci0Jc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LSZndDtxZG1hOwogCXUzMiBwc2VfcG9ydCA9IEZFX1BTRV9QT1JUX1BQRTE7CiYjNDM7CXN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTsKIAlpbnQgZXJyOwogCiAJbmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhuZXRkZXYpOwpAQCAtMTkxNCw2ICYjNDM7MTkyNSw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAomIzQzOwlxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTsKIAlpZiAobmV0ZGV2X3VzZXNfZHNhKG5ldGRldikpCiAJCWFpcm9oYV9mZV9zZXQocWRtYS0mZ3Q7ZXRoLCBSRUdfR0RNX0lOR1JFU1NfQ0ZHKHBvcnQtJmd0O2lkKSwKIAkJCSAgICAgIEdETV9TVEFHX0VOX01BU0spOwpAQCAtMTkzNyw3ICYjNDM7MTk0OSw2IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBkZXYtJmd0O3BvcnQ7Ci0Jc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LSZndDtxZG1hOwogCiAJbmV0aWZfdHhfZGlzYWJsZShuZXRkZXYpOwogCWFpcm9oYV9zZXRfdmlwX2Zvcl9nZG1fcG9ydChkZXYsIGZhbHNlKTsKQEAgLTE5NDUsNyAmIzQzOzE5NTYsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9kZXZfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCWlmICgtLXBvcnQtJmd0O3VzZXJzKQogCQlhaXJvaGFfcHBlX3NldF94bWl0X2ZyYW1lX3NpemUoZGV2KTsKIAllbHNlCi0JCWFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhxZG1hLSZndDtldGgsCiYjNDM7CQlhaXJvaGFfc2V0X2dkbV9wb3J0X2Z3ZF9jZmcoZGV2LSZndDtldGgsCiAJCQkJCSAgICBSRUdfR0RNX0ZXRF9DRkcocG9ydC0mZ3Q7aWQpLAogCQkJCQkgICAgRkVfUFNFX1BPUlRfRFJPUCk7CiAJcmV0dXJuIDA7CkBAIC0yMDI4LDYgJiM0MzsyMDM5LDUzIEBAIHN0YXRpYyBpbnQgYWlyb2hhX2VuYWJsZV9nZG0yX2xvb3BiYWNrKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KQogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIGludCBhaXJvaGFfZGlzYWJsZV9nZG0yX2xvb3BiYWNrKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGRldi0mZ3Q7cG9ydDsKJiM0MzsJc3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IGRldi0mZ3Q7ZXRoOwomIzQzOwlpbnQgaSwgc3JjX3BvcnQ7CiYjNDM7CXUzMiBwc2VfcG9ydDsKJiM0MzsKJiM0MzsJc3JjX3BvcnQgPSBldGgtJmd0O3NvYy0mZ3Q7b3BzLmdldF9zcG9ydChkZXYtJmd0O3BvcnQsIGRldi0mZ3Q7bmJxKTsKJiM0MzsJaWYgKHNyY19wb3J0ICZsdDsgMCkKJiM0MzsJCXJldHVybiBzcmNfcG9ydDsKJiM0MzsKJiM0MzsJYWlyb2hhX2ZlX2NsZWFyKGV0aCwKJiM0MzsJCQlSRUdfU1BfREZUX0NQT1JUKHNyY19wb3J0ICZndDsmZ3Q7IGZscyhTUF9DUE9SVF9ERlRfTUFTSykpLAomIzQzOwkJCVNQX0NQT1JUX01BU0soc3JjX3BvcnQgJmFtcDsgU1BfQ1BPUlRfREZUX01BU0spKTsKJiM0MzsKJiM0MzsJYWlyb2hhX2ZlX3NldChldGgsIFJFR19HRE1fRldEX0NGRyhBSVJPSEFfR0RNMl9JRFgpLAomIzQzOwkJICAgICAgR0RNX1NUUklQX0NSQ19NQVNLKTsKJiM0MzsJYWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKGV0aCwgUkVHX0dETV9GV0RfQ0ZHKEFJUk9IQV9HRE0yX0lEWCksCiYjNDM7CQkJCSAgICBGRV9QU0VfUE9SVF9EUk9QKTsKJiM0MzsJYWlyb2hhX2ZlX2NsZWFyKGV0aCwgUkVHX0dETV9MUEJLX0NGRyhBSVJPSEFfR0RNMl9JRFgpLAomIzQzOwkJCUxQQktfQ0hBTl9NQVNLIHwgTFBCS19NT0RFX01BU0sgfCBMUEJLX0VOX01BU0spOwomIzQzOwlwc2VfcG9ydCA9IGFpcm9oYV9wcGVfaXNfZW5hYmxlZChldGgsIDEpID8gRkVfUFNFX1BPUlRfUFBFMgomIzQzOwkJCQkJCSA6IEZFX1BTRV9QT1JUX1BQRTE7CiYjNDM7CWFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhldGgsIFJFR19HRE1fRldEX0NGRyhBSVJPSEFfR0RNMl9JRFgpLAomIzQzOwkJCQkgICAgcHNlX3BvcnQpOwomIzQzOwomIzQzOwlhaXJvaGFfZmVfcm13KGV0aCwgUkVHX0ZFX1dBTl9QT1JULCBXQU4wX01BU0ssCiYjNDM7CQkgICAgICBGSUVMRF9QUkVQKFdBTjBfTUFTSywgQUlST0hBX0dETTJfSURYKSk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBldGgtJmd0O3NvYy0mZ3Q7bnVtX3BwZTsgaSYjNDM7JiM0MzspCiYjNDM7CQlhaXJvaGFfZmVfY2xlYXIoZXRoLCBSRUdfUFBFX0RGVF9DUE9SVChpLCBBSVJPSEFfR0RNMl9JRFgpLAomIzQzOwkJCQlERlRfQ1BPUlRfTUFTSyhBSVJPSEFfR0RNMl9JRFgpKTsKJiM0MzsKJiM0MzsJLyogRW5hYmxlIFZJUCBhbmQgSUZDIGZvciBHRE0yICovCiYjNDM7CWFpcm9oYV9mZV9zZXQoZXRoLCBSRUdfRkVfVklQX1BPUlRfRU4sIEJJVChBSVJPSEFfR0RNMl9JRFgpKTsKJiM0MzsJYWlyb2hhX2ZlX3NldChldGgsIFJFR19GRV9JRkNfUE9SVF9FTiwgQklUKEFJUk9IQV9HRE0yX0lEWCkpOwomIzQzOwomIzQzOwlpZiAocG9ydC0mZ3Q7aWQgPT0gQUlST0hBX0dETTRfSURYICZhbXA7JmFtcDsgYWlyb2hhX2lzXzc1ODEoZXRoKSkgewomIzQzOwkJdTMyIG1hc2sgPSBGQ19JRF9PRl9TUkNfUE9SVF9NQVNLKGRldi0mZ3Q7bmJxKTsKJiM0MzsKJiM0MzsJCWFpcm9oYV9mZV9ybXcoZXRoLCBSRUdfU1JDX1BPUlRfRkNfTUFQNiwgbWFzaywKJiM0MzsJCQkgICAgICBGQ19NQVA2X0RFRl9WQUxVRSAmYW1wOyBtYXNrKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgc3RydWN0IGFpcm9oYV9nZG1fZGV2ICoKIGFpcm9oYV9nZXRfd2FuX2dkbV9kZXYoc3RydWN0IGFpcm9oYV9ldGggKmV0aCkKIHsKQEAgLTIwNTQsMTUgJiM0MzsyMTEyLDQzIEBAIGFpcm9oYV9nZXRfd2FuX2dkbV9kZXYoc3RydWN0IGFpcm9oYV9ldGggKmV0aCkKIHN0YXRpYyB2b2lkIGFpcm9oYV9kZXZfc2V0X3FkbWEoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IG5ldGRldl9mcm9tX3ByaXYoZGV2KTsKJiM0MzsJc3RydWN0IGFpcm9oYV9xZG1hICpjdXJfcWRtYSwgKnFkbWE7CiAJc3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IGRldi0mZ3Q7ZXRoOwotCWludCBwcGVfaWQ7CiYjNDM7CWludCBpLCBwcGVfaWQ7CiAKIAkvKiBRRE1BMCBpcyB1c2VkIGZvciBsYW4gcG9ydHMgd2hpbGUgUURNQTEgaXMgdXNlZCBmb3IgV0FOIHBvcnRzICovCi0JZGV2LSZndDtxZG1hID0gJmFtcDtldGgtJmd0O3FkbWFbIWFpcm9oYV9pc19sYW5fZ2RtX2RldihkZXYpXTsKLQluZXRkZXYtJmd0O2lycSA9IGRldi0mZ3Q7cWRtYS0mZ3Q7aXJxX2JhbmtzWzBdLmlycTsKJiM0MzsJcWRtYSA9ICZhbXA7ZXRoLSZndDtxZG1hWyFhaXJvaGFfaXNfbGFuX2dkbV9kZXYoZGV2KV07CiYjNDM7CWN1cl9xZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTsKJiM0MzsKJiM0MzsJaWYgKGN1cl9xZG1hKSB7CiYjNDM7CQluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTsKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKGN1cl9xZG1hLSZndDtxX3R4X2lycSk7IGkmIzQzOyYjNDM7KQomIzQzOwkJCW5hcGlfZGlzYWJsZSgmYW1wO2N1cl9xZG1hLSZndDtxX3R4X2lycVtpXS5uYXBpKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyY3VfYXNzaWduX3BvaW50ZXIoZGV2LSZndDtxZG1hLCBxZG1hKTsKJiM0MzsJbmV0ZGV2LSZndDtpcnEgPSBxZG1hLSZndDtpcnFfYmFua3NbMF0uaXJxOwomIzQzOwlzeW5jaHJvbml6ZV9yY3UoKTsKIAogCXBwZV9pZCA9ICFhaXJvaGFfaXNfbGFuX2dkbV9kZXYoZGV2KSAmYW1wOyZhbXA7IGFpcm9oYV9wcGVfaXNfZW5hYmxlZChldGgsIDEpOwogCWFpcm9oYV9wcGVfc2V0X2NwdV9wb3J0KGRldiwgcHBlX2lkLCBhaXJvaGFfZ2V0X2ZlX3BvcnQoZGV2KSk7CiYjNDM7CiYjNDM7CS8qIFNlZWQgcW9zX3N0YXRzIGJhc2VsaW5lcyB3aXRoIHRoZSBuZXcgUURNQSBibG9jayYjMzk7cyBjdXJyZW50CiYjNDM7CSAqIGNvdW50ZXIgdmFsdWVzIHRvIGF2b2lkIGEgc3B1cmlvdXMgc3Bpa2Ugb24gdGhlIGZpcnN0IHN0YXRzCiYjNDM7CSAqIHF1ZXJ5IGFmdGVyIGluaXQgb3IgbWlncmF0aW9uLgomIzQzOwkgKi8KJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUoZGV2LSZndDtxb3Nfc3RhdHMpOyBpJiM0MzsmIzQzOykgewomIzQzOwkJZGV2LSZndDtxb3Nfc3RhdHNbaV0uY3B1X3R4X3BhY2tldHMgPQomIzQzOwkJCWFpcm9oYV9xZG1hX3JyKHFkbWEsIFJFR19DTlRSX1ZBTChpICZsdDsmbHQ7IDEpKTsKJiM0MzsJCWRldi0mZ3Q7cW9zX3N0YXRzW2ldLmZ3ZF90eF9wYWNrZXRzID0KJiM0MzsJCQlhaXJvaGFfcWRtYV9ycihxZG1hLCBSRUdfQ05UUl9WQUwoKGkgJmx0OyZsdDsgMSkgJiM0MzsgMSkpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChjdXJfcWRtYSkgewomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUoY3VyX3FkbWEtJmd0O3FfdHhfaXJxKTsgaSYjNDM7JiM0MzspCiYjNDM7CQkJbmFwaV9lbmFibGUoJmFtcDtjdXJfcWRtYS0mZ3Q7cV90eF9pcnFbaV0ubmFwaSk7CiYjNDM7CQluZXRpZl90eF93YWtlX2FsbF9xdWV1ZXMobmV0ZGV2KTsKJiM0MzsJfQogfQogCiBzdGF0aWMgaW50IGFpcm9oYV9kZXZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQpAQCAtMjA3OCw3ICYjNDM7MjE2NCw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiAJCWZhbGx0aHJvdWdoOwogCWNhc2UgQUlST0hBX0dETTJfSURYOgogCQkvKiBHRE0yIGlzIGFsd2F5cyB1c2VkIGFzIHdhbiAqLwotCQlkZXYtJmd0O2ZsYWdzIHw9IEFJUk9IQV9QUklWX0ZfV0FOOwomIzQzOwkJc2V0X2JpdChBSVJPSEFfREVWX0ZfV0FOLCAmYW1wO2Rldi0mZ3Q7ZmxhZ3MpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKQEAgLTIyMTcsOSAmIzQzOzIzMDMsOSBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0Jc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LSZndDtxZG1hOwogCXUzMiBucl9mcmFncywgdGFnLCBtc2cwLCBtc2cxLCBsZW47CiAJc3RydWN0IGFpcm9oYV9xdWV1ZV9lbnRyeSAqZTsKJiM0MzsJc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hOwogCXN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cTsKIAlzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxOwogCUxJU1RfSEVBRCh0eF9saXN0KTsKQEAgLTIyMjgsNiAmIzQzOzIzMTQsOCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiAJdTE2IGluZGV4OwogCXU4IGZwb3J0OwogCiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJcWRtYSA9IHJjdV9kZXJlZmVyZW5jZShkZXYtJmd0O3FkbWEpOwogCXFpZCA9IGFpcm9oYV9xZG1hX2dldF90eHEocWRtYSwgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpOwogCXRhZyA9IGFpcm9oYV9nZXRfZHNhX3RhZyhza2IsIG5ldGRldik7CiAKQEAgLTIyNzcsNiAmIzQzOzIzNjUsOCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiAJCW5ldGlmX3R4X3N0b3BfcXVldWUodHhxKTsKIAkJcS0mZ3Q7dHhxX3N0b3BwZWQgPSB0cnVlOwogCQlzcGluX3VubG9ja19iaCgmYW1wO3EtJmd0O2xvY2spOwomIzQzOwkJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiAJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAl9CiAKQEAgLTIzNDIsNiAmIzQzOzI0MzIsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJRklFTERfUFJFUChUWF9SSU5HX0NQVV9JRFhfTUFTSywgaW5kZXgpKTsKIAogCXNwaW5fdW5sb2NrX2JoKCZhbXA7cS0mZ3Q7bG9jayk7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwogCiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIApAQCAtMjM1NCw2ICYjNDM7MjQ0NSw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBhaXJvaGFfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIGVycm9yOgogCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJbmV0ZGV2LSZndDtzdGF0cy50eF9kcm9wcGVkJiM0MzsmIzQzOzsKJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogfQpAQCAtMjQzMywxNyAmIzQzOzI1MjUsMTkgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9zZXRfY2hhbl90eF9zY2hlZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCQkJCQkgY29uc3QgdTE2ICp3ZWlnaHRzLCB1OCBuX3dlaWdodHMpCiB7CiAJc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwomIzQzOwlzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7CiAJaW50IGk7CiAKJiM0MzsJcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7CiAJZm9yIChpID0gMDsgaSAmbHQ7IEFJUk9IQV9OVU1fUU9TX1FVRVVFUzsgaSYjNDM7JiM0MzspCi0JCWFpcm9oYV9xZG1hX2NsZWFyKGRldi0mZ3Q7cWRtYSwgUkVHX1FVRVVFX0NMT1NFX0NGRyhjaGFubmVsKSwKJiM0MzsJCWFpcm9oYV9xZG1hX2NsZWFyKHFkbWEsIFJFR19RVUVVRV9DTE9TRV9DRkcoY2hhbm5lbCksCiAJCQkJICBUWFFfRElTQUJMRV9DSEFOX1FVRVVFX01BU0soY2hhbm5lbCwgaSkpOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IG5fd2VpZ2h0czsgaSYjNDM7JiM0MzspIHsKIAkJdTMyIHN0YXR1czsKIAkJaW50IGVycjsKIAotCQlhaXJvaGFfcWRtYV93cihkZXYtJmd0O3FkbWEsIFJFR19UWFdSUl9XRUlHSFRfQ0ZHLAomIzQzOwkJYWlyb2hhX3FkbWFfd3IocWRtYSwgUkVHX1RYV1JSX1dFSUdIVF9DRkcsCiAJCQkgICAgICAgVFdSUl9SV19DTURfTUFTSyB8CiAJCQkgICAgICAgRklFTERfUFJFUChUV1JSX0NIQU5fSURYX01BU0ssIGNoYW5uZWwpIHwKIAkJCSAgICAgICBGSUVMRF9QUkVQKFRXUlJfUVVFVUVfSURYX01BU0ssIGkpIHwKQEAgLTI0NTEsMTIgJiM0MzsyNTQ1LDEyIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfc2V0X2NoYW5fdHhfc2NoZWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkJZXJyID0gcmVhZF9wb2xsX3RpbWVvdXQoYWlyb2hhX3FkbWFfcnIsIHN0YXR1cywKIAkJCQkJc3RhdHVzICZhbXA7IFRXUlJfUldfQ01EX0RPTkUsCiAJCQkJCVVTRUNfUEVSX01TRUMsIDEwICogVVNFQ19QRVJfTVNFQywKLQkJCQkJdHJ1ZSwgZGV2LSZndDtxZG1hLCBSRUdfVFhXUlJfV0VJR0hUX0NGRyk7CiYjNDM7CQkJCQl0cnVlLCBxZG1hLCBSRUdfVFhXUlJfV0VJR0hUX0NGRyk7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwogCX0KIAotCWFpcm9oYV9xZG1hX3JtdyhkZXYtJmd0O3FkbWEsIFJFR19DSEFOX1FPU19NT0RFKGNoYW5uZWwgJmd0OyZndDsgMyksCiYjNDM7CWFpcm9oYV9xZG1hX3JtdyhxZG1hLCBSRUdfQ0hBTl9RT1NfTU9ERShjaGFubmVsICZndDsmZ3Q7IDMpLAogCQkJQ0hBTl9RT1NfTU9ERV9NQVNLKGNoYW5uZWwpLAogCQkJX19maWVsZF9wcmVwKENIQU5fUU9TX01PREVfTUFTSyhjaGFubmVsKSwgbW9kZSkpOwogCkBAIC0yNTIwLDE3ICYjNDM7MjYxNCwyMiBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX2dldF90eF9ldHNfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IGNoYW5uZWwsCiAJCQkJCXN0cnVjdCB0Y19ldHNfcW9wdF9vZmZsb2FkICpvcHQpCiB7CiAJc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCXN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi0mZ3Q7cWRtYTsKJiM0MzsJdTMyIGNwdV90eF9wYWNrZXRzLCBmd2RfdHhfcGFja2V0czsKJiM0MzsJc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hOwomIzQzOwl1NjQgdHhfcGFja2V0czsKIAotCXU2NCBjcHVfdHhfcGFja2V0cyA9IGFpcm9oYV9xZG1hX3JyKHFkbWEsIFJFR19DTlRSX1ZBTChjaGFubmVsICZsdDsmbHQ7IDEpKTsKLQl1NjQgZndkX3R4X3BhY2tldHMgPSBhaXJvaGFfcWRtYV9ycihxZG1hLAotCQkJCQkgICAgUkVHX0NOVFJfVkFMKChjaGFubmVsICZsdDsmbHQ7IDEpICYjNDM7IDEpKTsKLQl1NjQgdHhfcGFja2V0cyA9IChjcHVfdHhfcGFja2V0cyAtIGRldi0mZ3Q7Y3B1X3R4X3BhY2tldHMpICYjNDM7Ci0JCQkgKGZ3ZF90eF9wYWNrZXRzIC0gZGV2LSZndDtmd2RfdHhfcGFja2V0cyk7CiYjNDM7CXFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpOwomIzQzOwljcHVfdHhfcGFja2V0cyA9IGFpcm9oYV9xZG1hX3JyKHFkbWEsIFJFR19DTlRSX1ZBTChjaGFubmVsICZsdDsmbHQ7IDEpKTsKJiM0MzsJZndkX3R4X3BhY2tldHMgPSBhaXJvaGFfcWRtYV9ycihxZG1hLAomIzQzOwkJCQkJUkVHX0NOVFJfVkFMKChjaGFubmVsICZsdDsmbHQ7IDEpICYjNDM7IDEpKTsKJiM0MzsJdHhfcGFja2V0cyA9ICh1MzIpKGNwdV90eF9wYWNrZXRzIC0KJiM0MzsJCQkgICBkZXYtJmd0O3Fvc19zdGF0c1tjaGFubmVsXS5jcHVfdHhfcGFja2V0cyk7CiYjNDM7CXR4X3BhY2tldHMgJiM0Mzs9ICh1MzIpKGZ3ZF90eF9wYWNrZXRzIC0KJiM0MzsJCQkgICAgZGV2LSZndDtxb3Nfc3RhdHNbY2hhbm5lbF0uZndkX3R4X3BhY2tldHMpOwogCiAJX2JzdGF0c191cGRhdGUob3B0LSZndDtzdGF0cy5ic3RhdHMsIDAsIHR4X3BhY2tldHMpOwotCWRldi0mZ3Q7Y3B1X3R4X3BhY2tldHMgPSBjcHVfdHhfcGFja2V0czsKLQlkZXYtJmd0O2Z3ZF90eF9wYWNrZXRzID0gZndkX3R4X3BhY2tldHM7CiYjNDM7CWRldi0mZ3Q7cW9zX3N0YXRzW2NoYW5uZWxdLmNwdV90eF9wYWNrZXRzID0gY3B1X3R4X3BhY2tldHM7CiYjNDM7CWRldi0mZ3Q7cW9zX3N0YXRzW2NoYW5uZWxdLmZ3ZF90eF9wYWNrZXRzID0gZndkX3R4X3BhY2tldHM7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI3ODUsMTYgJiM0MzsyODg0LDE4IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfc2V0X3R4X3JhdGVfbGltaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkJCQkJIHUzMiBidWNrZXRfc2l6ZSkKIHsKIAlzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7CiYjNDM7CXN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTsKIAlpbnQgaSwgZXJyOwogCiYjNDM7CXFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpOwogCWZvciAoaSA9IDA7IGkgJmx0Oz0gVFJUQ01fUEVBS19NT0RFOyBpJiM0MzsmIzQzOykgewotCQllcnIgPSBhaXJvaGFfcWRtYV9zZXRfdHJ0Y21fY29uZmlnKGRldi0mZ3Q7cWRtYSwgY2hhbm5lbCwKJiM0MzsJCWVyciA9IGFpcm9oYV9xZG1hX3NldF90cnRjbV9jb25maWcocWRtYSwgY2hhbm5lbCwKIAkJCQkJCSAgIFJFR19FR1JFU1NfVFJUQ01fQ0ZHLCBpLAogCQkJCQkJICAgISFyYXRlLCBUUlRDTV9NRVRFUl9NT0RFKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CiAKLQkJZXJyID0gYWlyb2hhX3FkbWFfc2V0X3RydGNtX3Rva2VuX2J1Y2tldChkZXYtJmd0O3FkbWEsIGNoYW5uZWwsCiYjNDM7CQllcnIgPSBhaXJvaGFfcWRtYV9zZXRfdHJ0Y21fdG9rZW5fYnVja2V0KHFkbWEsIGNoYW5uZWwsCiAJCQkJCQkJIFJFR19FR1JFU1NfVFJUQ01fQ0ZHLAogCQkJCQkJCSBpLCByYXRlLCBidWNrZXRfc2l6ZSk7CiAJCWlmIChlcnIpCkBAIC0yODMwLDExICYjNDM7MjkzMSwxMiBAQCBzdGF0aWMgaW50IGFpcm9oYV90Y19odGJfYWxsb2NfbGVhZl9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCXUzMiBjaGFubmVsID0gVENfSF9NSU4ob3B0LSZndDtjbGFzc2lkKSAlIEFJUk9IQV9OVU1fUU9TX0NIQU5ORUxTOwogCWludCBlcnIsIG51bV90eF9xdWV1ZXMgPSBBSVJPSEFfTlVNX1RYX1JJTkcgJiM0MzsgY2hhbm5lbCAmIzQzOyAxOwogCXN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQlzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtJmd0O3FkbWE7CiYjNDM7CXN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTsKIAogCS8qIEhlcmUgd2UgbmVlZCB0byBjaGVjayB0aGUgcmVxdWVzdGVkIFFETUEgY2hhbm5lbCBpcyBub3QgYWxyZWFkeQogCSAqIGluIHVzZSBieSBhbm90aGVyIG5ldF9kZXZpY2UgcnVubmluZyBvbiB0aGUgc2FtZSBRRE1BIGJsb2NrLgogCSAqLwomIzQzOwlxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTsKIAlpZiAodGVzdF9hbmRfc2V0X2JpdChjaGFubmVsLCBxZG1hLSZndDtxb3NfY2hhbm5lbF9tYXApKSB7CiAJCU5MX1NFVF9FUlJfTVNHX01PRChvcHQtJmd0O2V4dGFjaywKIAkJCQkgICAmIzM0O3FkbWEgcW9zIGNoYW5uZWwgYWxyZWFkeSBpbiB1c2UmIzM0Oyk7CkBAIC0yODcwLDcgJiM0MzsyOTcyLDcgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9zZXRfcnhfbWV0ZXIoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYsCiAJCQkJICAgIHUzMiByYXRlLCB1MzIgYnVja2V0X3NpemUsCiAJCQkJICAgIGVudW0gdHJ0Y21fdW5pdF90eXBlIHVuaXRfdHlwZSkKIHsKLQlzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtJmd0O3FkbWE7CiYjNDM7CXN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShxZG1hLSZndDtxX3J4KTsgaSYjNDM7JiM0MzspIHsKQEAgLTMwNDUsMTAgJiM0MzszMTQ3LDExIEBAIHN0YXRpYyB2b2lkIGFpcm9oYV90Y19yZW1vdmVfaHRiX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBxdWV1ZSkKIHsKIAlzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJaW50IG51bV90eF9xdWV1ZXMgPSBBSVJPSEFfTlVNX1RYX1JJTkc7Ci0Jc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LSZndDtxZG1hOwomIzQzOwlzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7CiAKIAlhaXJvaGFfcWRtYV9zZXRfdHhfcmF0ZV9saW1pdChuZXRkZXYsIHF1ZXVlLCAwLCAwKTsKIAomIzQzOwlxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTsKIAljbGVhcl9iaXQocXVldWUsIHFkbWEtJmd0O3Fvc19jaGFubmVsX21hcCk7CiAJY2xlYXJfYml0KHF1ZXVlLCBkZXYtJmd0O3Fvc19zcV9ibWFwKTsKIApAQCAtMzA3NCw2ICYjNDM7MzE3NywxMDAgQEAgc3RhdGljIGludCBhaXJvaGFfdGNfaHRiX2RlbGV0ZV9sZWFmX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBhaXJvaGFfZGlzYWJsZV9xb3NfZm9yX2dkbTM0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7CiYjNDM7CXN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBkZXYtJmd0O3BvcnQ7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWlmIChwb3J0LSZndDtpZCAhPSBBSVJPSEFfR0RNM19JRFggJmFtcDsmYW1wOwomIzQzOwkgICAgcG9ydC0mZ3Q7aWQgIT0gQUlST0hBX0dETTRfSURYKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwllcnIgPSBhaXJvaGFfZGlzYWJsZV9nZG0yX2xvb3BiYWNrKGRldik7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQluZXRkZXZfd2FybihuZXRkZXYsCiYjNDM7CQkJICAgICYjMzQ7ZmFpbGVkIGRpc2FibGluZyBHRE0yIGxvb3BiYWNrOiAlZFxuJiMzNDssIGVycik7CiYjNDM7CiYjNDM7CWNsZWFyX2JpdChBSVJPSEFfREVWX0ZfV0FOLCAmYW1wO2Rldi0mZ3Q7ZmxhZ3MpOwomIzQzOwlhaXJvaGFfZGV2X3NldF9xZG1hKGRldik7CiYjNDM7CiYjNDM7CWFpcm9oYV9zZXRfbWFjYWRkcihkZXYsIG5ldGRldi0mZ3Q7ZGV2X2FkZHIpOwomIzQzOwlhaXJvaGFfcHBlX3NldF94bWl0X2ZyYW1lX3NpemUoZGV2KTsKJiM0MzsKJiM0MzsJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKJiM0MzsJCWFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhkZXYtJmd0O2V0aCwKJiM0MzsJCQkJCSAgICBSRUdfR0RNX0ZXRF9DRkcocG9ydC0mZ3Q7aWQpLAomIzQzOwkJCQkJICAgIEZFX1BTRV9QT1JUX1BQRTEpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFpcm9oYV9lbmFibGVfcW9zX2Zvcl9nZG0zNChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAomIzQzOwkJCQkgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQomIzQzO3sKJiM0MzsJc3RydWN0IGFpcm9oYV9nZG1fZGV2ICp3YW5fZGV2LCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJc3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGRldi0mZ3Q7cG9ydDsKJiM0MzsJc3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IGRldi0mZ3Q7ZXRoOwomIzQzOwlpbnQgZXJyID0gLUVCVVNZOwomIzQzOwomIzQzOwlpZiAocG9ydC0mZ3Q7aWQgIT0gQUlST0hBX0dETTNfSURYICZhbXA7JmFtcDsKJiM0MzsJICAgIHBvcnQtJmd0O2lkICE9IEFJUk9IQV9HRE00X0lEWCkgewomIzQzOwkJLyogSFcgUW9TIGlzIGFsd2F5cyBzdXBwb3J0ZWQgYnkgR0RNMSBhbmQgR0RNMiAqLwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFhaXJvaGFfaXNfbGFuX2dkbV9kZXYoZGV2KSkgLyogQWxyZWFkeSBlbmFibGVkICovCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO2Zsb3dfb2ZmbG9hZF9tdXRleCk7CiYjNDM7CiYjNDM7CXdhbl9kZXYgPSBhaXJvaGFfZ2V0X3dhbl9nZG1fZGV2KGV0aCk7CiYjNDM7CWlmICh3YW5fZGV2KSB7CiYjNDM7CQlpZiAodGVzdF9iaXQoQUlST0hBX0RFVl9GX1RYX1FPUywgJmFtcDt3YW5fZGV2LSZndDtmbGFncykgfHwKJiM0MzsJCSAgICB3YW5fZGV2LSZndDtwb3J0LSZndDtpZCA9PSBBSVJPSEFfR0RNMl9JRFgpIHsKJiM0MzsJCQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLAomIzQzOwkJCQkJICAgJiMzNDtRb1MgY29uZmlndXJlZCBmb3IgV0FOIGRldmljZSYjMzQ7KTsKJiM0MzsJCQlnb3RvIGVycm9yX3VubG9jazsKJiM0MzsJCX0KJiM0MzsJCWFpcm9oYV9kaXNhYmxlX3Fvc19mb3JfZ2RtMzQobmV0ZGV2X2Zyb21fcHJpdih3YW5fZGV2KSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2V0X2JpdChBSVJPSEFfREVWX0ZfV0FOLCAmYW1wO2Rldi0mZ3Q7ZmxhZ3MpOwomIzQzOwlhaXJvaGFfZGV2X3NldF9xZG1hKGRldik7CiYjNDM7CWVyciA9IGFpcm9oYV9lbmFibGVfZ2RtMl9sb29wYmFjayhkZXYpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBlcnJvcl9kaXNhYmxlX3dhbjsKJiM0MzsKJiM0MzsJZXJyID0gYWlyb2hhX3NldF9tYWNhZGRyKGRldiwgbmV0ZGV2LSZndDtkZXZfYWRkcik7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIGVycm9yX2Rpc2FibGVfbG9vcGJhY2s7CiYjNDM7CiYjNDM7CWFpcm9oYV9kZXZfc2V0X3htaXRfZnJhbWVfc2l6ZShuZXRkZXYpOwomIzQzOwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CiYjNDM7CQl1MzIgcHNlX3BvcnQ7CiYjNDM7CiYjNDM7CQlwc2VfcG9ydCA9IGFpcm9oYV9wcGVfaXNfZW5hYmxlZChldGgsIDEpID8gRkVfUFNFX1BPUlRfUFBFMgomIzQzOwkJCQkJCQkgOiBGRV9QU0VfUE9SVF9QUEUxOwomIzQzOwkJYWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKGV0aCwgUkVHX0dETV9GV0RfQ0ZHKHBvcnQtJmd0O2lkKSwKJiM0MzsJCQkJCSAgICBwc2VfcG9ydCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2V0X2JpdChBSVJPSEFfREVWX0ZfVFhfUU9TLCAmYW1wO2Rldi0mZ3Q7ZmxhZ3MpOwomIzQzOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtmbG93X29mZmxvYWRfbXV0ZXgpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztlcnJvcl9kaXNhYmxlX2xvb3BiYWNrOgomIzQzOwlhaXJvaGFfZGlzYWJsZV9nZG0yX2xvb3BiYWNrKGRldik7CiYjNDM7ZXJyb3JfZGlzYWJsZV93YW46CiYjNDM7CWNsZWFyX2JpdChBSVJPSEFfREVWX0ZfV0FOLCAmYW1wO2Rldi0mZ3Q7ZmxhZ3MpOwomIzQzOwlhaXJvaGFfZGV2X3NldF9xZG1hKGRldik7CiYjNDM7ZXJyb3JfdW5sb2NrOgomIzQzOwltdXRleF91bmxvY2soJmFtcDtmbG93X29mZmxvYWRfbXV0ZXgpOwomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgYWlyb2hhX3RjX2h0Yl9kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwpAQCAtMzA4Miw2ICYjNDM7MzI3OSw4IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3RjX2h0Yl9kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiAJZm9yX2VhY2hfc2V0X2JpdChxLCBkZXYtJmd0O3Fvc19zcV9ibWFwLCBBSVJPSEFfTlVNX1FPU19DSEFOTkVMUykKIAkJYWlyb2hhX3RjX3JlbW92ZV9odGJfcXVldWUobmV0ZGV2LCBxKTsKIAomIzQzOwljbGVhcl9iaXQoQUlST0hBX0RFVl9GX1RYX1FPUywgJmFtcDtkZXYtJmd0O2ZsYWdzKTsKJiM0MzsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzEwMSwyNCAmIzQzOzMzMDAsMjQgQEAgc3RhdGljIGludCBhaXJvaGFfdGNfZ2V0X2h0Yl9nZXRfbGVhZl9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGFpcm9oYV90Y19zZXR1cF9xZGlzY19odGIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKJiM0MztzdGF0aWMgaW50IGFpcm9oYV90Y19zZXR1cF9xZGlzY19odGIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkJCQkgICAgIHN0cnVjdCB0Y19odGJfcW9wdF9vZmZsb2FkICpvcHQpCiB7CiAJc3dpdGNoIChvcHQtJmd0O2NvbW1hbmQpIHsKIAljYXNlIFRDX0hUQl9DUkVBVEU6Ci0JCWJyZWFrOwomIzQzOwkJcmV0dXJuIGFpcm9oYV9lbmFibGVfcW9zX2Zvcl9nZG0zNChuZXRkZXYsIG9wdC0mZ3Q7ZXh0YWNrKTsKIAljYXNlIFRDX0hUQl9ERVNUUk9ZOgotCQlyZXR1cm4gYWlyb2hhX3RjX2h0Yl9kZXN0cm95KGRldik7CiYjNDM7CQlyZXR1cm4gYWlyb2hhX3RjX2h0Yl9kZXN0cm95KG5ldGRldik7CiAJY2FzZSBUQ19IVEJfTk9ERV9NT0RJRlk6Ci0JCXJldHVybiBhaXJvaGFfdGNfaHRiX21vZGlmeV9xdWV1ZShkZXYsIG9wdCk7CiYjNDM7CQlyZXR1cm4gYWlyb2hhX3RjX2h0Yl9tb2RpZnlfcXVldWUobmV0ZGV2LCBvcHQpOwogCWNhc2UgVENfSFRCX0xFQUZfQUxMT0NfUVVFVUU6Ci0JCXJldHVybiBhaXJvaGFfdGNfaHRiX2FsbG9jX2xlYWZfcXVldWUoZGV2LCBvcHQpOwomIzQzOwkJcmV0dXJuIGFpcm9oYV90Y19odGJfYWxsb2NfbGVhZl9xdWV1ZShuZXRkZXYsIG9wdCk7CiAJY2FzZSBUQ19IVEJfTEVBRl9ERUw6CiAJY2FzZSBUQ19IVEJfTEVBRl9ERUxfTEFTVDoKIAljYXNlIFRDX0hUQl9MRUFGX0RFTF9MQVNUX0ZPUkNFOgotCQlyZXR1cm4gYWlyb2hhX3RjX2h0Yl9kZWxldGVfbGVhZl9xdWV1ZShkZXYsIG9wdCk7CiYjNDM7CQlyZXR1cm4gYWlyb2hhX3RjX2h0Yl9kZWxldGVfbGVhZl9xdWV1ZShuZXRkZXYsIG9wdCk7CiAJY2FzZSBUQ19IVEJfTEVBRl9RVUVSWV9RVUVVRToKLQkJcmV0dXJuIGFpcm9oYV90Y19nZXRfaHRiX2dldF9sZWFmX3F1ZXVlKGRldiwgb3B0KTsKJiM0MzsJCXJldHVybiBhaXJvaGFfdGNfZ2V0X2h0Yl9nZXRfbGVhZl9xdWV1ZShuZXRkZXYsIG9wdCk7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oCmluZGV4IGZlOTM0ZjlmZmU4YTExLi5lNmZiZDQyY2Y5NjQyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oCkBAIC01NzAsMjQgJiM0Mzs1NzAsMzEgQEAgc3RydWN0IGFpcm9oYV9xZG1hIHsKIAlERUNMQVJFX0JJVE1BUChxb3NfY2hhbm5lbF9tYXAsIEFJUk9IQV9OVU1fUU9TX0NIQU5ORUxTKTsKIH07CiAKLWVudW0gYWlyb2hhX3ByaXZfZmxhZ3MgewotCUFJUk9IQV9QUklWX0ZfV0FOID0gQklUKDApLAomIzQzO2VudW0gYWlyb2hhX2Rldl9mbGFncyB7CiYjNDM7CUFJUk9IQV9ERVZfRl9XQU4sCiYjNDM7CUFJUk9IQV9ERVZfRl9UWF9RT1MsCiB9OwogCiBzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgewomIzQzOwlzdHJ1Y3QgYWlyb2hhX3FkbWEgX19yY3UgKnFkbWE7CiAJc3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydDsKLQlzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7CiAJc3RydWN0IGFpcm9oYV9ldGggKmV0aDsKIAogCURFQ0xBUkVfQklUTUFQKHFvc19zcV9ibWFwLCBBSVJPSEFfTlVNX1FPU19DSEFOTkVMUyk7Ci0JLyogcW9zIHN0YXRzIGNvdW50ZXJzICovCi0JdTY0IGNwdV90eF9wYWNrZXRzOwotCXU2NCBmd2RfdHhfcGFja2V0czsKJiM0MzsJc3RydWN0IHsKJiM0MzsJCXUzMiBjcHVfdHhfcGFja2V0czsKJiM0MzsJCXUzMiBmd2RfdHhfcGFja2V0czsKJiM0MzsJfSBxb3Nfc3RhdHNbQUlST0hBX05VTV9RT1NfQ0hBTk5FTFNdOwogCi0JdTMyIGZsYWdzOwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBuYnE7CiAKIAlzdHJ1Y3QgYWlyb2hhX2h3X3N0YXRzIHN0YXRzOwomIzQzOwomIzQzOwlzdHJ1Y3QgewomIzQzOwkJYXRvbWljX3QgYnl0ZXM7CiYjNDM7CQlhdG9taWNfdCBwa3RzOwomIzQzOwl9IGJxbFtBSVJPSEFfTlVNX05FVERFVl9UWF9SSU5HU107CiB9OwogCiBzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0IHsKQEAgLTY5NCw3ICYjNDM7NzAxLDcgQEAgc3RhdGljIGlubGluZSB1MTYgYWlyb2hhX3FkbWFfZ2V0X3R4cShzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEsIHUxNiBxaWQpCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBhaXJvaGFfaXNfbGFuX2dkbV9kZXYoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpCiB7Ci0JcmV0dXJuICEoZGV2LSZndDtmbGFncyAmYW1wOyBBSVJPSEFfUFJJVl9GX1dBTik7CiYjNDM7CXJldHVybiAhdGVzdF9iaXQoQUlST0hBX0RFVl9GX1dBTiwgJmFtcDtkZXYtJmd0O2ZsYWdzKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIGFpcm9oYV9pc183NTgxKHN0cnVjdCBhaXJvaGFfZXRoICpldGgpCkBAIC03MTEsNiAmIzQzOzcxOCwxNiBAQCBpbnQgYWlyb2hhX2dldF9mZV9wb3J0KHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KTsKIGJvb2wgYWlyb2hhX2lzX3ZhbGlkX2dkbV9kZXYoc3RydWN0IGFpcm9oYV9ldGggKmV0aCwKIAkJCSAgICAgc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpOwogCiYjNDM7ZXh0ZXJuIHN0cnVjdCBtdXRleCBmbG93X29mZmxvYWRfbXV0ZXg7CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgYWlyb2hhX3FkbWEgKgomIzQzO2Fpcm9oYV9xZG1hX2RlcmVmKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KQomIzQzO3sKJiM0MzsJcmV0dXJuIHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoZGV2LSZndDtxZG1hLAomIzQzOwkJCQkJIGxvY2tkZXBfcnRubF9pc19oZWxkKCkgfHwKJiM0MzsJCQkJCSBsb2NrZGVwX2lzX2hlbGQoJmFtcDtmbG93X29mZmxvYWRfbXV0ZXgpKTsKJiM0Mzt9CiYjNDM7CiB2b2lkIGFpcm9oYV9wcGVfc2V0X3htaXRfZnJhbWVfc2l6ZShzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldik7CiB2b2lkIGFpcm9oYV9wcGVfc2V0X2NwdV9wb3J0KHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2LCB1OCBwcGVfaWQsIHU4IGZwb3J0KTsKIGJvb2wgYWlyb2hhX3BwZV9pc19lbmFibGVkKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsIGludCBpbmRleCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYwppbmRleCBlNGMzNjQ0ZGQ2ZWM3YS4uMzNkZGYwZDA3ODU1MzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYwpAQCAtMTUsNyAmIzQzOzE1LDEwIEBACiAjaW5jbHVkZSAmIzM0O2Fpcm9oYV9yZWdzLmgmIzM0OwogI2luY2x1ZGUgJiMzNDthaXJvaGFfZXRoLmgmIzM0OwogCi1zdGF0aWMgREVGSU5FX01VVEVYKGZsb3dfb2ZmbG9hZF9tdXRleCk7CiYjNDM7LyogU2VyaWFsaXplIGFpcm9oYV9nZG1fZGV2IGZsYWdzLCBRRE1BIHBvaW50ZXIgYW5kIFBQRSBDUFUgcG9ydAomIzQzOyAqIGNvbmZpZ3VyYXRpb24uCiYjNDM7ICovCiYjNDM7REVGSU5FX01VVEVYKGZsb3dfb2ZmbG9hZF9tdXRleCk7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHBwZV9sb2NrKTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyBhaXJvaGFfZmxvd190YWJsZV9wYXJhbXMgPSB7CkBAIC04Niw4ICYjNDM7ODksOCBAQCBzdGF0aWMgdTMyIGFpcm9oYV9wcGVfZ2V0X3RpbWVzdGFtcChzdHJ1Y3QgYWlyb2hhX3BwZSAqcHBlKQogCiB2b2lkIGFpcm9oYV9wcGVfc2V0X2NwdV9wb3J0KHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2LCB1OCBwcGVfaWQsIHU4IGZwb3J0KQogewotCXN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi0mZ3Q7cWRtYTsKLQlzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gcWRtYS0mZ3Q7ZXRoOwomIzQzOwlzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpOwomIzQzOwlzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gZGV2LSZndDtldGg7CiAJdTggcWRtYV9pZCA9IHFkbWEgLSAmYW1wO2V0aC0mZ3Q7cWRtYVswXTsKIAl1MzIgZmVfY3B1X3BvcnQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcmVncy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9yZWdzLmgKaW5kZXggNmZlZDYzZDAxM2I0MTIuLjQ0MmI0OGM5Yjk5MWVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaApAQCAtMzc1LDYgJiM0MzszNzUsNyBAQAogCiAjZGVmaW5lIFJFR19TUkNfUE9SVF9GQ19NQVA2CQkweDIyOTgKICNkZWZpbmUgRkNfSURfT0ZfU1JDX1BPUlRfTUFTSyhfbikJR0VOTUFTSyg0ICYjNDM7ICgoX24pICZsdDsmbHQ7IDMpLCAoKF9uKSAmbHQ7Jmx0OyAzKSkKJiM0MzsjZGVmaW5lIEZDX01BUDZfREVGX1ZBTFVFCQkweDFiMWExOTE4CiAKICNkZWZpbmUgUkVHX1dBTl9NVFUwCQkJMHgyMzAwCiAjZGVmaW5lIFdBTl9NVFUxX01BU0sJCQlHRU5NQVNLKDI5LCAxNikKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjA6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExMDYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBBaXJvaGEgRXRoZXJuZXQgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGZvciB0aGUgYGFpcm9oYWAgZXRoZXJuZXQgZHJpdmVyLCBzcGVjaWZpY2FsbHkgZm9yIEFpcm9oYSBFTjc1ODEgU29Dcy4gSXQgdG91Y2hlcyBhIGZldyBjcml0aWNhbCBhcmVhcyDigJMgdGhlIFFETUEgaGFuZGxpbmcsIHdoaWNoIGxvb2tzIGxpa2UgaXQmIzM5O3MgZ2V0dGluZyBhbiBSQ1UgdXBkYXRlIGZvciBgZGV2LSZndDtxZG1hYCwgYW5kIHNvbWUgaW50ZXJlc3RpbmcgYWRkaXRpb25zIGxpa2UgUW9TIHN1cHBvcnQgZm9yIEdETTMgYW5kIEdETTQuICBJdCYjMzk7cyBhbHNvIHVwZGF0aW5nIEJRTCBoYW5kbGluZywgd2hpY2ggaXMgYWx3YXlzIGdvb2QgdG8gc2VlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLgoKQWlyb2hhIGlzIGEgbmV0d29ya2luZyBTb0MsIGxpa2VseSBBUk02NCwgYW5kIHRoZSBkcml2ZXIgaXMgKnNwZWNpZmljKiB0byB0aGF0IFNvQy4gIEdlbmVyYWxseSwgdGhlc2UgU29DLXNwZWNpZmljIGV0aGVybmV0IGRyaXZlcnMg4oCTIHNpbWlsYXIgdG8gd2hhdCB5b3Ugc2VlIHdpdGggTWVkaWFUZWsgYW5kIG90aGVycyDigJMgcmVseSBvbiB0aGUgcGh5c2ljYWwgaGFyZHdhcmUgb3Igc3BlY2lmaWMgcGxhdGZvcm0gZGV2aWNlcyBmb3IgdGhlIHByb2JlIHRvIHN1Y2NlZWQuIFNvLCBJIG5lZWQgdG8ga25vdyBpZiBJIGNhbiBldmVuIHRlc3QgdGhpcyBpbiBRRU1VLiBJcyB0aGlzIGEgcGxhdGZvcm0gZHJpdmVyPwoKVG8gZmlndXJlIHRoaXMgb3V0LCBJJiMzOTtsbCBsZXZlcmFnZSB0aGUgYGRlZmF1bHRfYXBpOmdyZXBwZXJgIGFuZCBzZWFyY2ggZm9yIHRoZSBkcml2ZXIgcmVnaXN0cmF0aW9uLiBUaGF0IHNob3VsZCBxdWlja2x5IHRlbGwgbWUgaWYgaXQgcmVsaWVzIG9uIGEgc3BlY2lmaWMgZGV2aWNlIHRyZWUsIG9yIGlmIGl0IGhhcyBzb21lIGtpbmQgb2YgYnJvYWRlciBhcHBsaWNhYmlsaXR5LiBUaGF0JiMzOTtzIHRoZSBmaXJzdCBzdGVwIGluIGRldGVybWluaW5nIGhvdyBlYXNpbHkgdGhpcyBwYXRjaCBjYW4gYmUgZXZhbHVhdGVkIGluIGEgdGVzdGluZyBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDIwOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21vZHVsZV9wbGF0Zm9ybV9kcml2ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM9Mzk1Nj1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhaXJvaGFfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMzk2My19O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYzozOTY0Om1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoYWlyb2hhX2RyaXZlcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTM5NjUtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYz04MTM9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYWlyb2hhX25wdV9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy04MjAtfTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6ODIxOm1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoYWlyb2hhX25wdV9kcml2ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy04MjItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjA6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5MDgKCQkJCQkJCW91dHB1dDogMTA3CgkJCQkJCQl0aG91Z2h0czogNTI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFzc2Vzc21lbnQgb2YgdGhlIEFpcm9oYSBFdGhlcm5ldCBEcml2ZXImIzM5O3MgRnV6emFiaWxpdHkqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGxhdGZvcm0gZHJpdmVyLCBgYWlyb2hhX2V0aC5jYCwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0JiMzOTtzIGdvaW5nIHRvIGJlIGEgdG91Z2ggbnV0IHRvIGNyYWNrIGZvciBmdXp6aW5nLiBQbGF0Zm9ybSBkcml2ZXJzLCBlc3BlY2lhbGx5IHRob3NlIHRpZWQgdG8gc3BlY2lmaWMgU29DcyBsaWtlIHRoZSBBaXJvaGEgRU43NTgxLCB0eXBpY2FsbHkgbmVlZCBhIGRldmljZSB0cmVlIG5vZGUgdG8gcHJvYmUgcHJvcGVybHksIHJpZ2h0PyBBbmQgUUVNVSwgYXMgZmFyIGFzIEkga25vdywgZG9lc24mIzM5O3QgbmF0aXZlbHkgZW11bGF0ZSB0aGlzIHBhcnRpY3VsYXIgQWlyb2hhIGhhcmR3YXJlIG9yIGl0cyBhc3NvY2lhdGVkIGV0aGVybmV0IGNvbnRyb2xsZXJzLgoKTXkgZmlyc3QgcXVlc3Rpb24gaXMgYWx3YXlzLCAmIzM0O0lzIHRoZXJlIGFueSBzbmVha3kgd2F5IHRvIGdldCBhdCB0aGlzIHRocm91Z2ggYSB2aXJ0dWFsIGRldmljZSBvciBzb21lIGtpbmQgb2YgbW9ja2luZz8mIzM0OyBCdXQsIHJlYWxpc3RpY2FsbHksIHBsYXRmb3JtIGRyaXZlcnMgZm9yIHNwZWNpZmljIGhhcmR3YXJlIGFyZSByYXJlbHkgZnV6emFibGUgdW5sZXNzIHlvdSBoYXZlIGEgY3VzdG9tIGVtdWxhdG9yIG9yIHRoZXkmIzM5O3JlIHBhcnQgb2YgYSBtb3JlIGdlbmVyaWMsIG1vY2thYmxlIGZyYW1ld29yay4gU3l6a2FsbGVyJiMzOTtzIG5vdCBnb2luZyB0byBoZWxwIGhlcmUgZWl0aGVyLCBhcyBpdCBkb2VzbiYjMzk7dCBlbXVsYXRlIHRoZSBBaXJvaGEgU29Dcy4KCkxldCBtZSB0YWtlIGEgbG9vayBhdCB0aGUgZnVuY3Rpb25zIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcuIEFoYSwgdGhlIHBhdGNoIGlzIGNoYW5naW5nIHRoaW5ncyBpbiBgYWlyb2hhX3FkbWFfd2FrZV9uZXRkZXZfdHhxc2AsIGBhaXJvaGFfcWRtYV90eF9uYXBpX3BvbGxgLCBgYWlyb2hhX2Rldl9vcGVuYCwgYGFpcm9oYV9kZXZfc3RvcGAsIGBhaXJvaGFfZW5hYmxlX2dkbTJfbG9vcGJhY2tgLCBgYWlyb2hhX2Rpc2FibGVfZ2RtMl9sb29wYmFja2AsIGBhaXJvaGFfZGV2X3NldF9xZG1hYCwgYGFpcm9oYV9kZXZfaW5pdGAsIGBhaXJvaGFfZGV2X3htaXRgLCBgYWlyb2hhX3FkbWFfc2V0X2NoYW5fdHhfc2NoZWRgLCBgYWlyb2hhX3FkbWFfZ2V0X3R4X2V0c19zdGF0c2AsIGBhaXJvaGFfcWRtYV9zZXRfdHhfcmF0ZV9saW1pdGAsIGBhaXJvaGFfdGNfaHRiX2FsbG9jX2xlYWZfcXVldWVgLCBgYWlyb2hhX3FkbWFfc2V0X3J4X21ldGVyYCwgYGFpcm9oYV90Y19yZW1vdmVfaHRiX3F1ZXVlYCwgYGFpcm9oYV90Y19odGJfZGVsZXRlX2xlYWZfcXVldWVgLCBgYWlyb2hhX2Rpc2FibGVfcW9zX2Zvcl9nZG0zNGAsIGBhaXJvaGFfZW5hYmxlX3Fvc19mb3JfZ2RtMzRgLCBgYWlyb2hhX3RjX2h0Yl9kZXN0cm95YCwgYGFpcm9oYV90Y19nZXRfaHRiX2dldF9sZWFmX3F1ZXVlYCwgYGFpcm9oYV90Y19zZXR1cF9xZGlzY19odGJgLiBZZWFoLCB0aG9zZSBhcmUgYWxsIHNjcmVhbWluZyAmIzM0O0Fpcm9oYSBldGhlcm5ldCBkcml2ZXImIzM0OyB0byBtZS4KCkJhc2VkIG9uIHRoaXMsIGl0JiMzOTtzIGNsZWFyIHRoaXMgaXMgYSBwbGF0Zm9ybSBkcml2ZXIgZGVlcGx5IHRpZWQgdG8gdGhlIEFpcm9oYSBTb0MuIFRoaXMgbWVhbnMgaXQgbmVlZHMgcmVhbCBoYXJkd2FyZSBvciBhIHZlcnkgc3BlY2lmaWMgZW11bGF0b3IgdG8gYmUgcHJvYmVkIGFuZCBleGVjdXRlZC4gU2luY2UgUUVNVSwgYW5kIHRoZXJlZm9yZSBlbnZpcm9ubWVudHMgbGlrZSBHQ0UsIGFyZW4mIzM5O3QgZ29pbmcgdG8gY3V0IGl0LCBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gY29uY2x1ZGUgdGhhdCByZWFjaGluZyB0aGlzIGNvZGUgaXMgaW1wb3NzaWJsZSBpbiBhIHZpcnR1YWxpemVkIHNldHRpbmcuCgpUaGVyZWZvcmUsIEkmIzM5O20gZ29pbmcgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgcmF0aW9uYWxlIGlzIHN0cmFpZ2h0Zm9yd2FyZDogaXQmIzM5O3MgYSBoYXJkd2FyZS1zcGVjaWZpYyBwbGF0Zm9ybSBkcml2ZXIgZm9yIGFuIEFpcm9oYSBTb0MsIGFuZCBpdCBjYW5ub3QgYmUgcHJvYmVkIG9yIGV4ZWN1dGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50cy4gVGhlcmUmIzM5O3Mgbm8gZWZmZWN0aXZlIHBhdGggdG8gZnV6eiBpdCBpbiBhIHByYWN0aWNhbCB3YXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMjA6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQWlyb2hhIGV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhLyksIHdoaWNoIGlzIGEgcGxhdGZvcm0gZHJpdmVyIHNwZWNpZmljIHRvIEFpcm9oYSBTb0NzIChlLmcuLCBFTjc1ODEpLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudHMsIG1lYW5pbmcgdGhlIGRyaXZlciBjYW5ub3QgYmUgcHJvYmVkIGFuZCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQWlyb2hhIGV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhLyksIHdoaWNoIGlzIGEgcGxhdGZvcm0gZHJpdmVyIHNwZWNpZmljIHRvIEFpcm9oYSBTb0NzIChlLmcuLCBFTjc1ODEpLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudHMsIG1lYW5pbmcgdGhlIGRyaXZlciBjYW5ub3QgYmUgcHJvYmVkIGFuZCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjVUMjA6MDI6NDQuMzkyNTEwMDU0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzMTIzOTgwMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBaXJvaGEgZXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvKSwgd2hpY2ggaXMgYSBwbGF0Zm9ybSBkcml2ZXIgc3BlY2lmaWMgdG8gQWlyb2hhIFNvQ3MgKGUuZy4sIEVONzU4MSkuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50cywgbWVhbmluZyB0aGUgZHJpdmVyIGNhbm5vdCBiZSBwcm9iZWQgYW5kIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIwOjAyOjQ0LjM5MjUxNTI1NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUyMzk0NjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNWU0ZjEwZTVmOGUxYzUzZjUyYzRjYzY0ZGQxNzY3ODkwMDdiMDM1NVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEp1bCAyNSAyMDowMjo0MyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguY1xcbmluZGV4IDc5NDE4ZTY4MmY3MWYzLi4wMjkyMDU4N2UwY2M0NyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguY1xcbkBAIC05MzQsNyArOTM0LDcgQEAgc3RhdGljIHZvaWQgYWlyb2hhX3FkbWFfd2FrZV9uZXRkZXZfdHhxcyhzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxKVxcbiBcXHRcXHRcXHRpZiAoIWRldilcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRcXHRcXHRpZiAoZGV2LVxcdTAwM2VxZG1hICE9IHFkbWEpXFxuK1xcdFxcdFxcdGlmIChyY3VfYWNjZXNzX3BvaW50ZXIoZGV2LVxcdTAwM2VxZG1hKSAhPSBxZG1hKVxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdFxcdG5ldGRldiA9IG5ldGRldl9mcm9tX3ByaXYoZGV2KTtcXG5AQCAtMTAzOCwxMCArMTAzOCwyMSBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3R4X25hcGlfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpXFxuIFxcdFxcdHEtXFx1MDAzZXF1ZXVlZC0tO1xcbiBcXG4gXFx0XFx0aWYgKHNrYikge1xcbitcXHRcXHRcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KHNrYi1cXHUwMDNlZGV2KTtcXG4rXFx0XFx0XFx0dTE2IHFpZHggPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTtcXG4gXFx0XFx0XFx0c3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxO1xcbiBcXG4gXFx0XFx0XFx0dHhxID0gc2tiX2dldF90eF9xdWV1ZShza2ItXFx1MDAzZWRldiwgc2tiKTtcXG4tXFx0XFx0XFx0bmV0ZGV2X3R4X2NvbXBsZXRlZF9xdWV1ZSh0eHEsIDEsIHNrYi1cXHUwMDNlbGVuKTtcXG4rXFx0XFx0XFx0aWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihkZXYtXFx1MDAzZXFkbWEpICE9IHFkbWEpIHtcXG4rXFx0XFx0XFx0XFx0YXRvbWljX2FkZCgxLCBcXHUwMDI2ZGV2LVxcdTAwM2VicWxbcWlkeF0ucGt0cyk7XFxuK1xcdFxcdFxcdFxcdGF0b21pY19hZGQoc2tiLVxcdTAwM2VsZW4sIFxcdTAwMjZkZXYtXFx1MDAzZWJxbFtxaWR4XS5ieXRlcyk7XFxuK1xcdFxcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdFxcdHUzMiBwa3RzID0gMSwgYnl0ZXMgPSBza2ItXFx1MDAzZWxlbjtcXG4rXFxuK1xcdFxcdFxcdFxcdGJ5dGVzICs9IGF0b21pY194Y2hnKFxcdTAwMjZkZXYtXFx1MDAzZWJxbFtxaWR4XS5ieXRlcywgMCk7XFxuK1xcdFxcdFxcdFxcdHBrdHMgKz0gYXRvbWljX3hjaGcoXFx1MDAyNmRldi1cXHUwMDNlYnFsW3FpZHhdLnBrdHMsIDApO1xcbitcXHRcXHRcXHRcXHRuZXRkZXZfdHhfY29tcGxldGVkX3F1ZXVlKHR4cSwgcGt0cywgYnl0ZXMpO1xcbitcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XFxuIFxcdFxcdH1cXG4gXFxuQEAgLTE5MDUsOCArMTkxNiw4IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIHtcXG4gXFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbiBcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZGV2LVxcdTAwM2Vwb3J0O1xcbi1cXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtXFx1MDAzZXFkbWE7XFxuIFxcdHUzMiBwc2VfcG9ydCA9IEZFX1BTRV9QT1JUX1BQRTE7XFxuK1xcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcXG4gXFx0aW50IGVycjtcXG4gXFxuIFxcdG5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMobmV0ZGV2KTtcXG5AQCAtMTkxNCw2ICsxOTI1LDcgQEAgc3RhdGljIGludCBhaXJvaGFfZGV2X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuK1xcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xcbiBcXHRpZiAobmV0ZGV2X3VzZXNfZHNhKG5ldGRldikpXFxuIFxcdFxcdGFpcm9oYV9mZV9zZXQocWRtYS1cXHUwMDNlZXRoLCBSRUdfR0RNX0lOR1JFU1NfQ0ZHKHBvcnQtXFx1MDAzZWlkKSxcXG4gXFx0XFx0XFx0ICAgICAgR0RNX1NUQUdfRU5fTUFTSyk7XFxuQEAgLTE5MzcsNyArMTk0OSw2IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIHtcXG4gXFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbiBcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZGV2LVxcdTAwM2Vwb3J0O1xcbi1cXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtXFx1MDAzZXFkbWE7XFxuIFxcbiBcXHRuZXRpZl90eF9kaXNhYmxlKG5ldGRldik7XFxuIFxcdGFpcm9oYV9zZXRfdmlwX2Zvcl9nZG1fcG9ydChkZXYsIGZhbHNlKTtcXG5AQCAtMTk0NSw3ICsxOTU2LDcgQEAgc3RhdGljIGludCBhaXJvaGFfZGV2X3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4gXFx0aWYgKC0tcG9ydC1cXHUwMDNldXNlcnMpXFxuIFxcdFxcdGFpcm9oYV9wcGVfc2V0X3htaXRfZnJhbWVfc2l6ZShkZXYpO1xcbiBcXHRlbHNlXFxuLVxcdFxcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhxZG1hLVxcdTAwM2VldGgsXFxuK1xcdFxcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhkZXYtXFx1MDAzZWV0aCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIFJFR19HRE1fRldEX0NGRyhwb3J0LVxcdTAwM2VpZCksXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBGRV9QU0VfUE9SVF9EUk9QKTtcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTIwMjgsNiArMjAzOSw1MyBAQCBzdGF0aWMgaW50IGFpcm9oYV9lbmFibGVfZ2RtMl9sb29wYmFjayhzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgYWlyb2hhX2Rpc2FibGVfZ2RtMl9sb29wYmFjayhzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcXG4re1xcbitcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZGV2LVxcdTAwM2Vwb3J0O1xcbitcXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gZGV2LVxcdTAwM2VldGg7XFxuK1xcdGludCBpLCBzcmNfcG9ydDtcXG4rXFx0dTMyIHBzZV9wb3J0O1xcbitcXG4rXFx0c3JjX3BvcnQgPSBldGgtXFx1MDAzZXNvYy1cXHUwMDNlb3BzLmdldF9zcG9ydChkZXYtXFx1MDAzZXBvcnQsIGRldi1cXHUwMDNlbmJxKTtcXG4rXFx0aWYgKHNyY19wb3J0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHNyY19wb3J0O1xcbitcXG4rXFx0YWlyb2hhX2ZlX2NsZWFyKGV0aCxcXG4rXFx0XFx0XFx0UkVHX1NQX0RGVF9DUE9SVChzcmNfcG9ydCBcXHUwMDNlXFx1MDAzZSBmbHMoU1BfQ1BPUlRfREZUX01BU0spKSxcXG4rXFx0XFx0XFx0U1BfQ1BPUlRfTUFTSyhzcmNfcG9ydCBcXHUwMDI2IFNQX0NQT1JUX0RGVF9NQVNLKSk7XFxuK1xcbitcXHRhaXJvaGFfZmVfc2V0KGV0aCwgUkVHX0dETV9GV0RfQ0ZHKEFJUk9IQV9HRE0yX0lEWCksXFxuK1xcdFxcdCAgICAgIEdETV9TVFJJUF9DUkNfTUFTSyk7XFxuK1xcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhldGgsIFJFR19HRE1fRldEX0NGRyhBSVJPSEFfR0RNMl9JRFgpLFxcbitcXHRcXHRcXHRcXHQgICAgRkVfUFNFX1BPUlRfRFJPUCk7XFxuK1xcdGFpcm9oYV9mZV9jbGVhcihldGgsIFJFR19HRE1fTFBCS19DRkcoQUlST0hBX0dETTJfSURYKSxcXG4rXFx0XFx0XFx0TFBCS19DSEFOX01BU0sgfCBMUEJLX01PREVfTUFTSyB8IExQQktfRU5fTUFTSyk7XFxuK1xcdHBzZV9wb3J0ID0gYWlyb2hhX3BwZV9pc19lbmFibGVkKGV0aCwgMSkgPyBGRV9QU0VfUE9SVF9QUEUyXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCA6IEZFX1BTRV9QT1JUX1BQRTE7XFxuK1xcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhldGgsIFJFR19HRE1fRldEX0NGRyhBSVJPSEFfR0RNMl9JRFgpLFxcbitcXHRcXHRcXHRcXHQgICAgcHNlX3BvcnQpO1xcbitcXG4rXFx0YWlyb2hhX2ZlX3JtdyhldGgsIFJFR19GRV9XQU5fUE9SVCwgV0FOMF9NQVNLLFxcbitcXHRcXHQgICAgICBGSUVMRF9QUkVQKFdBTjBfTUFTSywgQUlST0hBX0dETTJfSURYKSk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZXRoLVxcdTAwM2Vzb2MtXFx1MDAzZW51bV9wcGU7IGkrKylcXG4rXFx0XFx0YWlyb2hhX2ZlX2NsZWFyKGV0aCwgUkVHX1BQRV9ERlRfQ1BPUlQoaSwgQUlST0hBX0dETTJfSURYKSxcXG4rXFx0XFx0XFx0XFx0REZUX0NQT1JUX01BU0soQUlST0hBX0dETTJfSURYKSk7XFxuK1xcbitcXHQvKiBFbmFibGUgVklQIGFuZCBJRkMgZm9yIEdETTIgKi9cXG4rXFx0YWlyb2hhX2ZlX3NldChldGgsIFJFR19GRV9WSVBfUE9SVF9FTiwgQklUKEFJUk9IQV9HRE0yX0lEWCkpO1xcbitcXHRhaXJvaGFfZmVfc2V0KGV0aCwgUkVHX0ZFX0lGQ19QT1JUX0VOLCBCSVQoQUlST0hBX0dETTJfSURYKSk7XFxuK1xcbitcXHRpZiAocG9ydC1cXHUwMDNlaWQgPT0gQUlST0hBX0dETTRfSURYIFxcdTAwMjZcXHUwMDI2IGFpcm9oYV9pc183NTgxKGV0aCkpIHtcXG4rXFx0XFx0dTMyIG1hc2sgPSBGQ19JRF9PRl9TUkNfUE9SVF9NQVNLKGRldi1cXHUwMDNlbmJxKTtcXG4rXFxuK1xcdFxcdGFpcm9oYV9mZV9ybXcoZXRoLCBSRUdfU1JDX1BPUlRfRkNfTUFQNiwgbWFzayxcXG4rXFx0XFx0XFx0ICAgICAgRkNfTUFQNl9ERUZfVkFMVUUgXFx1MDAyNiBtYXNrKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKlxcbiBhaXJvaGFfZ2V0X3dhbl9nZG1fZGV2KHN0cnVjdCBhaXJvaGFfZXRoICpldGgpXFxuIHtcXG5AQCAtMjA1NCwxNSArMjExMiw0MyBAQCBhaXJvaGFfZ2V0X3dhbl9nZG1fZGV2KHN0cnVjdCBhaXJvaGFfZXRoICpldGgpXFxuIHN0YXRpYyB2b2lkIGFpcm9oYV9kZXZfc2V0X3FkbWEoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpXFxuIHtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IG5ldGRldl9mcm9tX3ByaXYoZGV2KTtcXG4rXFx0c3RydWN0IGFpcm9oYV9xZG1hICpjdXJfcWRtYSwgKnFkbWE7XFxuIFxcdHN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBkZXYtXFx1MDAzZWV0aDtcXG4tXFx0aW50IHBwZV9pZDtcXG4rXFx0aW50IGksIHBwZV9pZDtcXG4gXFxuIFxcdC8qIFFETUEwIGlzIHVzZWQgZm9yIGxhbiBwb3J0cyB3aGlsZSBRRE1BMSBpcyB1c2VkIGZvciBXQU4gcG9ydHMgKi9cXG4tXFx0ZGV2LVxcdTAwM2VxZG1hID0gXFx1MDAyNmV0aC1cXHUwMDNlcWRtYVshYWlyb2hhX2lzX2xhbl9nZG1fZGV2KGRldildO1xcbi1cXHRuZXRkZXYtXFx1MDAzZWlycSA9IGRldi1cXHUwMDNlcWRtYS1cXHUwMDNlaXJxX2JhbmtzWzBdLmlycTtcXG4rXFx0cWRtYSA9IFxcdTAwMjZldGgtXFx1MDAzZXFkbWFbIWFpcm9oYV9pc19sYW5fZ2RtX2RldihkZXYpXTtcXG4rXFx0Y3VyX3FkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xcbitcXG4rXFx0aWYgKGN1cl9xZG1hKSB7XFxuK1xcdFxcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpO1xcbitcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShjdXJfcWRtYS1cXHUwMDNlcV90eF9pcnEpOyBpKyspXFxuK1xcdFxcdFxcdG5hcGlfZGlzYWJsZShcXHUwMDI2Y3VyX3FkbWEtXFx1MDAzZXFfdHhfaXJxW2ldLm5hcGkpO1xcbitcXHR9XFxuK1xcbitcXHRyY3VfYXNzaWduX3BvaW50ZXIoZGV2LVxcdTAwM2VxZG1hLCBxZG1hKTtcXG4rXFx0bmV0ZGV2LVxcdTAwM2VpcnEgPSBxZG1hLVxcdTAwM2VpcnFfYmFua3NbMF0uaXJxO1xcbitcXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG4gXFxuIFxcdHBwZV9pZCA9ICFhaXJvaGFfaXNfbGFuX2dkbV9kZXYoZGV2KSBcXHUwMDI2XFx1MDAyNiBhaXJvaGFfcHBlX2lzX2VuYWJsZWQoZXRoLCAxKTtcXG4gXFx0YWlyb2hhX3BwZV9zZXRfY3B1X3BvcnQoZGV2LCBwcGVfaWQsIGFpcm9oYV9nZXRfZmVfcG9ydChkZXYpKTtcXG4rXFxuK1xcdC8qIFNlZWQgcW9zX3N0YXRzIGJhc2VsaW5lcyB3aXRoIHRoZSBuZXcgUURNQSBibG9jaydzIGN1cnJlbnRcXG4rXFx0ICogY291bnRlciB2YWx1ZXMgdG8gYXZvaWQgYSBzcHVyaW91cyBzcGlrZSBvbiB0aGUgZmlyc3Qgc3RhdHNcXG4rXFx0ICogcXVlcnkgYWZ0ZXIgaW5pdCBvciBtaWdyYXRpb24uXFxuK1xcdCAqL1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShkZXYtXFx1MDAzZXFvc19zdGF0cyk7IGkrKykge1xcbitcXHRcXHRkZXYtXFx1MDAzZXFvc19zdGF0c1tpXS5jcHVfdHhfcGFja2V0cyA9XFxuK1xcdFxcdFxcdGFpcm9oYV9xZG1hX3JyKHFkbWEsIFJFR19DTlRSX1ZBTChpIFxcdTAwM2NcXHUwMDNjIDEpKTtcXG4rXFx0XFx0ZGV2LVxcdTAwM2Vxb3Nfc3RhdHNbaV0uZndkX3R4X3BhY2tldHMgPVxcbitcXHRcXHRcXHRhaXJvaGFfcWRtYV9ycihxZG1hLCBSRUdfQ05UUl9WQUwoKGkgXFx1MDAzY1xcdTAwM2MgMSkgKyAxKSk7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChjdXJfcWRtYSkge1xcbitcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShjdXJfcWRtYS1cXHUwMDNlcV90eF9pcnEpOyBpKyspXFxuK1xcdFxcdFxcdG5hcGlfZW5hYmxlKFxcdTAwMjZjdXJfcWRtYS1cXHUwMDNlcV90eF9pcnFbaV0ubmFwaSk7XFxuK1xcdFxcdG5ldGlmX3R4X3dha2VfYWxsX3F1ZXVlcyhuZXRkZXYpO1xcbitcXHR9XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuQEAgLTIwNzgsNyArMjE2NCw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIFxcdFxcdGZhbGx0aHJvdWdoO1xcbiBcXHRjYXNlIEFJUk9IQV9HRE0yX0lEWDpcXG4gXFx0XFx0LyogR0RNMiBpcyBhbHdheXMgdXNlZCBhcyB3YW4gKi9cXG4tXFx0XFx0ZGV2LVxcdTAwM2VmbGFncyB8PSBBSVJPSEFfUFJJVl9GX1dBTjtcXG4rXFx0XFx0c2V0X2JpdChBSVJPSEFfREVWX0ZfV0FOLCBcXHUwMDI2ZGV2LVxcdTAwM2VmbGFncyk7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRicmVhaztcXG5AQCAtMjIxNyw5ICsyMzAzLDkgQEAgc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4tXFx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LVxcdTAwM2VxZG1hO1xcbiBcXHR1MzIgbnJfZnJhZ3MsIHRhZywgbXNnMCwgbXNnMSwgbGVuO1xcbiBcXHRzdHJ1Y3QgYWlyb2hhX3F1ZXVlX2VudHJ5ICplO1xcbitcXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7XFxuIFxcdHN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cTtcXG4gXFx0c3RydWN0IGFpcm9oYV9xdWV1ZSAqcTtcXG4gXFx0TElTVF9IRUFEKHR4X2xpc3QpO1xcbkBAIC0yMjI4LDYgKzIzMTQsOCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdHUxNiBpbmRleDtcXG4gXFx0dTggZnBvcnQ7XFxuIFxcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdHFkbWEgPSByY3VfZGVyZWZlcmVuY2UoZGV2LVxcdTAwM2VxZG1hKTtcXG4gXFx0cWlkID0gYWlyb2hhX3FkbWFfZ2V0X3R4cShxZG1hLCBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKSk7XFxuIFxcdHRhZyA9IGFpcm9oYV9nZXRfZHNhX3RhZyhza2IsIG5ldGRldik7XFxuIFxcbkBAIC0yMjc3LDYgKzIzNjUsOCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdG5ldGlmX3R4X3N0b3BfcXVldWUodHhxKTtcXG4gXFx0XFx0cS1cXHUwMDNldHhxX3N0b3BwZWQgPSB0cnVlO1xcbiBcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2cS1cXHUwMDNlbG9jayk7XFxuK1xcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXG4gXFx0XFx0cmV0dXJuIE5FVERFVl9UWF9CVVNZO1xcbiBcXHR9XFxuIFxcbkBAIC0yMzQyLDYgKzI0MzIsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdFxcdEZJRUxEX1BSRVAoVFhfUklOR19DUFVfSURYX01BU0ssIGluZGV4KSk7XFxuIFxcbiBcXHRzcGluX3VubG9ja19iaChcXHUwMDI2cS1cXHUwMDNlbG9jayk7XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXG4gXFx0cmV0dXJuIE5FVERFVl9UWF9PSztcXG4gXFxuQEAgLTIzNTQsNiArMjQ0NSw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBhaXJvaGFfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gZXJyb3I6XFxuIFxcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XFxuIFxcdG5ldGRldi1cXHUwMDNlc3RhdHMudHhfZHJvcHBlZCsrO1xcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFxuIFxcdHJldHVybiBORVRERVZfVFhfT0s7XFxuIH1cXG5AQCAtMjQzMywxNyArMjUyNSwxOSBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3NldF9jaGFuX3R4X3NjaGVkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdFxcdFxcdFxcdFxcdCBjb25zdCB1MTYgKndlaWdodHMsIHU4IG5fd2VpZ2h0cylcXG4ge1xcbiBcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuK1xcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcXG4gXFx0aW50IGk7XFxuIFxcbitcXHRxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFJUk9IQV9OVU1fUU9TX1FVRVVFUzsgaSsrKVxcbi1cXHRcXHRhaXJvaGFfcWRtYV9jbGVhcihkZXYtXFx1MDAzZXFkbWEsIFJFR19RVUVVRV9DTE9TRV9DRkcoY2hhbm5lbCksXFxuK1xcdFxcdGFpcm9oYV9xZG1hX2NsZWFyKHFkbWEsIFJFR19RVUVVRV9DTE9TRV9DRkcoY2hhbm5lbCksXFxuIFxcdFxcdFxcdFxcdCAgVFhRX0RJU0FCTEVfQ0hBTl9RVUVVRV9NQVNLKGNoYW5uZWwsIGkpKTtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBuX3dlaWdodHM7IGkrKykge1xcbiBcXHRcXHR1MzIgc3RhdHVzO1xcbiBcXHRcXHRpbnQgZXJyO1xcbiBcXG4tXFx0XFx0YWlyb2hhX3FkbWFfd3IoZGV2LVxcdTAwM2VxZG1hLCBSRUdfVFhXUlJfV0VJR0hUX0NGRyxcXG4rXFx0XFx0YWlyb2hhX3FkbWFfd3IocWRtYSwgUkVHX1RYV1JSX1dFSUdIVF9DRkcsXFxuIFxcdFxcdFxcdCAgICAgICBUV1JSX1JXX0NNRF9NQVNLIHxcXG4gXFx0XFx0XFx0ICAgICAgIEZJRUxEX1BSRVAoVFdSUl9DSEFOX0lEWF9NQVNLLCBjaGFubmVsKSB8XFxuIFxcdFxcdFxcdCAgICAgICBGSUVMRF9QUkVQKFRXUlJfUVVFVUVfSURYX01BU0ssIGkpIHxcXG5AQCAtMjQ1MSwxMiArMjU0NSwxMiBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3NldF9jaGFuX3R4X3NjaGVkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdFxcdGVyciA9IHJlYWRfcG9sbF90aW1lb3V0KGFpcm9oYV9xZG1hX3JyLCBzdGF0dXMsXFxuIFxcdFxcdFxcdFxcdFxcdHN0YXR1cyBcXHUwMDI2IFRXUlJfUldfQ01EX0RPTkUsXFxuIFxcdFxcdFxcdFxcdFxcdFVTRUNfUEVSX01TRUMsIDEwICogVVNFQ19QRVJfTVNFQyxcXG4tXFx0XFx0XFx0XFx0XFx0dHJ1ZSwgZGV2LVxcdTAwM2VxZG1hLCBSRUdfVFhXUlJfV0VJR0hUX0NGRyk7XFxuK1xcdFxcdFxcdFxcdFxcdHRydWUsIHFkbWEsIFJFR19UWFdSUl9XRUlHSFRfQ0ZHKTtcXG4gXFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0fVxcbiBcXG4tXFx0YWlyb2hhX3FkbWFfcm13KGRldi1cXHUwMDNlcWRtYSwgUkVHX0NIQU5fUU9TX01PREUoY2hhbm5lbCBcXHUwMDNlXFx1MDAzZSAzKSxcXG4rXFx0YWlyb2hhX3FkbWFfcm13KHFkbWEsIFJFR19DSEFOX1FPU19NT0RFKGNoYW5uZWwgXFx1MDAzZVxcdTAwM2UgMyksXFxuIFxcdFxcdFxcdENIQU5fUU9TX01PREVfTUFTSyhjaGFubmVsKSxcXG4gXFx0XFx0XFx0X19maWVsZF9wcmVwKENIQU5fUU9TX01PREVfTUFTSyhjaGFubmVsKSwgbW9kZSkpO1xcbiBcXG5AQCAtMjUyMCwxNyArMjYxNCwyMiBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX2dldF90eF9ldHNfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IGNoYW5uZWwsXFxuIFxcdFxcdFxcdFxcdFxcdHN0cnVjdCB0Y19ldHNfcW9wdF9vZmZsb2FkICpvcHQpXFxuIHtcXG4gXFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbi1cXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtXFx1MDAzZXFkbWE7XFxuK1xcdHUzMiBjcHVfdHhfcGFja2V0cywgZndkX3R4X3BhY2tldHM7XFxuK1xcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcXG4rXFx0dTY0IHR4X3BhY2tldHM7XFxuIFxcbi1cXHR1NjQgY3B1X3R4X3BhY2tldHMgPSBhaXJvaGFfcWRtYV9ycihxZG1hLCBSRUdfQ05UUl9WQUwoY2hhbm5lbCBcXHUwMDNjXFx1MDAzYyAxKSk7XFxuLVxcdHU2NCBmd2RfdHhfcGFja2V0cyA9IGFpcm9oYV9xZG1hX3JyKHFkbWEsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBSRUdfQ05UUl9WQUwoKGNoYW5uZWwgXFx1MDAzY1xcdTAwM2MgMSkgKyAxKSk7XFxuLVxcdHU2NCB0eF9wYWNrZXRzID0gKGNwdV90eF9wYWNrZXRzIC0gZGV2LVxcdTAwM2VjcHVfdHhfcGFja2V0cykgK1xcbi1cXHRcXHRcXHQgKGZ3ZF90eF9wYWNrZXRzIC0gZGV2LVxcdTAwM2Vmd2RfdHhfcGFja2V0cyk7XFxuK1xcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xcbitcXHRjcHVfdHhfcGFja2V0cyA9IGFpcm9oYV9xZG1hX3JyKHFkbWEsIFJFR19DTlRSX1ZBTChjaGFubmVsIFxcdTAwM2NcXHUwMDNjIDEpKTtcXG4rXFx0ZndkX3R4X3BhY2tldHMgPSBhaXJvaGFfcWRtYV9ycihxZG1hLFxcbitcXHRcXHRcXHRcXHRcXHRSRUdfQ05UUl9WQUwoKGNoYW5uZWwgXFx1MDAzY1xcdTAwM2MgMSkgKyAxKSk7XFxuK1xcdHR4X3BhY2tldHMgPSAodTMyKShjcHVfdHhfcGFja2V0cyAtXFxuK1xcdFxcdFxcdCAgIGRldi1cXHUwMDNlcW9zX3N0YXRzW2NoYW5uZWxdLmNwdV90eF9wYWNrZXRzKTtcXG4rXFx0dHhfcGFja2V0cyArPSAodTMyKShmd2RfdHhfcGFja2V0cyAtXFxuK1xcdFxcdFxcdCAgICBkZXYtXFx1MDAzZXFvc19zdGF0c1tjaGFubmVsXS5md2RfdHhfcGFja2V0cyk7XFxuIFxcbiBcXHRfYnN0YXRzX3VwZGF0ZShvcHQtXFx1MDAzZXN0YXRzLmJzdGF0cywgMCwgdHhfcGFja2V0cyk7XFxuLVxcdGRldi1cXHUwMDNlY3B1X3R4X3BhY2tldHMgPSBjcHVfdHhfcGFja2V0cztcXG4tXFx0ZGV2LVxcdTAwM2Vmd2RfdHhfcGFja2V0cyA9IGZ3ZF90eF9wYWNrZXRzO1xcbitcXHRkZXYtXFx1MDAzZXFvc19zdGF0c1tjaGFubmVsXS5jcHVfdHhfcGFja2V0cyA9IGNwdV90eF9wYWNrZXRzO1xcbitcXHRkZXYtXFx1MDAzZXFvc19zdGF0c1tjaGFubmVsXS5md2RfdHhfcGFja2V0cyA9IGZ3ZF90eF9wYWNrZXRzO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtMjc4NSwxNiArMjg4NCwxOCBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3NldF90eF9yYXRlX2xpbWl0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdFxcdFxcdFxcdFxcdCB1MzIgYnVja2V0X3NpemUpXFxuIHtcXG4gXFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbitcXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7XFxuIFxcdGludCBpLCBlcnI7XFxuIFxcbitcXHRxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjPSBUUlRDTV9QRUFLX01PREU7IGkrKykge1xcbi1cXHRcXHRlcnIgPSBhaXJvaGFfcWRtYV9zZXRfdHJ0Y21fY29uZmlnKGRldi1cXHUwMDNlcWRtYSwgY2hhbm5lbCxcXG4rXFx0XFx0ZXJyID0gYWlyb2hhX3FkbWFfc2V0X3RydGNtX2NvbmZpZyhxZG1hLCBjaGFubmVsLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICBSRUdfRUdSRVNTX1RSVENNX0NGRywgaSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgISFyYXRlLCBUUlRDTV9NRVRFUl9NT0RFKTtcXG4gXFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuLVxcdFxcdGVyciA9IGFpcm9oYV9xZG1hX3NldF90cnRjbV90b2tlbl9idWNrZXQoZGV2LVxcdTAwM2VxZG1hLCBjaGFubmVsLFxcbitcXHRcXHRlcnIgPSBhaXJvaGFfcWRtYV9zZXRfdHJ0Y21fdG9rZW5fYnVja2V0KHFkbWEsIGNoYW5uZWwsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdCBSRUdfRUdSRVNTX1RSVENNX0NGRyxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0IGksIHJhdGUsIGJ1Y2tldF9zaXplKTtcXG4gXFx0XFx0aWYgKGVycilcXG5AQCAtMjgzMCwxMSArMjkzMSwxMiBAQCBzdGF0aWMgaW50IGFpcm9oYV90Y19odGJfYWxsb2NfbGVhZl9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHR1MzIgY2hhbm5lbCA9IFRDX0hfTUlOKG9wdC1cXHUwMDNlY2xhc3NpZCkgJSBBSVJPSEFfTlVNX1FPU19DSEFOTkVMUztcXG4gXFx0aW50IGVyciwgbnVtX3R4X3F1ZXVlcyA9IEFJUk9IQV9OVU1fVFhfUklORyArIGNoYW5uZWwgKyAxO1xcbiBcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuLVxcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cXHUwMDNlcWRtYTtcXG4rXFx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xcbiBcXG4gXFx0LyogSGVyZSB3ZSBuZWVkIHRvIGNoZWNrIHRoZSByZXF1ZXN0ZWQgUURNQSBjaGFubmVsIGlzIG5vdCBhbHJlYWR5XFxuIFxcdCAqIGluIHVzZSBieSBhbm90aGVyIG5ldF9kZXZpY2UgcnVubmluZyBvbiB0aGUgc2FtZSBRRE1BIGJsb2NrLlxcbiBcXHQgKi9cXG4rXFx0cWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XFxuIFxcdGlmICh0ZXN0X2FuZF9zZXRfYml0KGNoYW5uZWwsIHFkbWEtXFx1MDAzZXFvc19jaGFubmVsX21hcCkpIHtcXG4gXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKG9wdC1cXHUwMDNlZXh0YWNrLFxcbiBcXHRcXHRcXHRcXHQgICBcXFwicWRtYSBxb3MgY2hhbm5lbCBhbHJlYWR5IGluIHVzZVxcXCIpO1xcbkBAIC0yODcwLDcgKzI5NzIsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3NldF9yeF9tZXRlcihzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldixcXG4gXFx0XFx0XFx0XFx0ICAgIHUzMiByYXRlLCB1MzIgYnVja2V0X3NpemUsXFxuIFxcdFxcdFxcdFxcdCAgICBlbnVtIHRydGNtX3VuaXRfdHlwZSB1bml0X3R5cGUpXFxuIHtcXG4tXFx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LVxcdTAwM2VxZG1hO1xcbitcXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xcbiBcXHRpbnQgaTtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHFkbWEtXFx1MDAzZXFfcngpOyBpKyspIHtcXG5AQCAtMzA0NSwxMCArMzE0NywxMSBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfdGNfcmVtb3ZlX2h0Yl9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgcXVldWUpXFxuIHtcXG4gXFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbiBcXHRpbnQgbnVtX3R4X3F1ZXVlcyA9IEFJUk9IQV9OVU1fVFhfUklORztcXG4tXFx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LVxcdTAwM2VxZG1hO1xcbitcXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7XFxuIFxcbiBcXHRhaXJvaGFfcWRtYV9zZXRfdHhfcmF0ZV9saW1pdChuZXRkZXYsIHF1ZXVlLCAwLCAwKTtcXG4gXFxuK1xcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xcbiBcXHRjbGVhcl9iaXQocXVldWUsIHFkbWEtXFx1MDAzZXFvc19jaGFubmVsX21hcCk7XFxuIFxcdGNsZWFyX2JpdChxdWV1ZSwgZGV2LVxcdTAwM2Vxb3Nfc3FfYm1hcCk7XFxuIFxcbkBAIC0zMDc0LDYgKzMxNzcsMTAwIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3RjX2h0Yl9kZWxldGVfbGVhZl9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgYWlyb2hhX2Rpc2FibGVfcW9zX2Zvcl9nZG0zNChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFx0c3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGRldi1cXHUwMDNlcG9ydDtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGlmIChwb3J0LVxcdTAwM2VpZCAhPSBBSVJPSEFfR0RNM19JRFggXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIHBvcnQtXFx1MDAzZWlkICE9IEFJUk9IQV9HRE00X0lEWClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0ZXJyID0gYWlyb2hhX2Rpc2FibGVfZ2RtMl9sb29wYmFjayhkZXYpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRuZXRkZXZfd2FybihuZXRkZXYsXFxuK1xcdFxcdFxcdCAgICBcXFwiZmFpbGVkIGRpc2FibGluZyBHRE0yIGxvb3BiYWNrOiAlZFxcXFxuXFxcIiwgZXJyKTtcXG4rXFxuK1xcdGNsZWFyX2JpdChBSVJPSEFfREVWX0ZfV0FOLCBcXHUwMDI2ZGV2LVxcdTAwM2VmbGFncyk7XFxuK1xcdGFpcm9oYV9kZXZfc2V0X3FkbWEoZGV2KTtcXG4rXFxuK1xcdGFpcm9oYV9zZXRfbWFjYWRkcihkZXYsIG5ldGRldi1cXHUwMDNlZGV2X2FkZHIpO1xcbitcXHRhaXJvaGFfcHBlX3NldF94bWl0X2ZyYW1lX3NpemUoZGV2KTtcXG4rXFxuK1xcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXFxuK1xcdFxcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhkZXYtXFx1MDAzZWV0aCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIFJFR19HRE1fRldEX0NGRyhwb3J0LVxcdTAwM2VpZCksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBGRV9QU0VfUE9SVF9QUEUxKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhaXJvaGFfZW5hYmxlX3Fvc19mb3JfZ2RtMzQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4re1xcbitcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKndhbl9kZXYsICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbitcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZGV2LVxcdTAwM2Vwb3J0O1xcbitcXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gZGV2LVxcdTAwM2VldGg7XFxuK1xcdGludCBlcnIgPSAtRUJVU1k7XFxuK1xcbitcXHRpZiAocG9ydC1cXHUwMDNlaWQgIT0gQUlST0hBX0dETTNfSURYIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBwb3J0LVxcdTAwM2VpZCAhPSBBSVJPSEFfR0RNNF9JRFgpIHtcXG4rXFx0XFx0LyogSFcgUW9TIGlzIGFsd2F5cyBzdXBwb3J0ZWQgYnkgR0RNMSBhbmQgR0RNMiAqL1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCFhaXJvaGFfaXNfbGFuX2dkbV9kZXYoZGV2KSkgLyogQWxyZWFkeSBlbmFibGVkICovXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2Zmxvd19vZmZsb2FkX211dGV4KTtcXG4rXFxuK1xcdHdhbl9kZXYgPSBhaXJvaGFfZ2V0X3dhbl9nZG1fZGV2KGV0aCk7XFxuK1xcdGlmICh3YW5fZGV2KSB7XFxuK1xcdFxcdGlmICh0ZXN0X2JpdChBSVJPSEFfREVWX0ZfVFhfUU9TLCBcXHUwMDI2d2FuX2Rldi1cXHUwMDNlZmxhZ3MpIHx8XFxuK1xcdFxcdCAgICB3YW5fZGV2LVxcdTAwM2Vwb3J0LVxcdTAwM2VpZCA9PSBBSVJPSEFfR0RNMl9JRFgpIHtcXG4rXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgXFxcIlFvUyBjb25maWd1cmVkIGZvciBXQU4gZGV2aWNlXFxcIik7XFxuK1xcdFxcdFxcdGdvdG8gZXJyb3JfdW5sb2NrO1xcbitcXHRcXHR9XFxuK1xcdFxcdGFpcm9oYV9kaXNhYmxlX3Fvc19mb3JfZ2RtMzQobmV0ZGV2X2Zyb21fcHJpdih3YW5fZGV2KSk7XFxuK1xcdH1cXG4rXFxuK1xcdHNldF9iaXQoQUlST0hBX0RFVl9GX1dBTiwgXFx1MDAyNmRldi1cXHUwMDNlZmxhZ3MpO1xcbitcXHRhaXJvaGFfZGV2X3NldF9xZG1hKGRldik7XFxuK1xcdGVyciA9IGFpcm9oYV9lbmFibGVfZ2RtMl9sb29wYmFjayhkZXYpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGVycm9yX2Rpc2FibGVfd2FuO1xcbitcXG4rXFx0ZXJyID0gYWlyb2hhX3NldF9tYWNhZGRyKGRldiwgbmV0ZGV2LVxcdTAwM2VkZXZfYWRkcik7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gZXJyb3JfZGlzYWJsZV9sb29wYmFjaztcXG4rXFxuK1xcdGFpcm9oYV9kZXZfc2V0X3htaXRfZnJhbWVfc2l6ZShuZXRkZXYpO1xcbitcXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7XFxuK1xcdFxcdHUzMiBwc2VfcG9ydDtcXG4rXFxuK1xcdFxcdHBzZV9wb3J0ID0gYWlyb2hhX3BwZV9pc19lbmFibGVkKGV0aCwgMSkgPyBGRV9QU0VfUE9SVF9QUEUyXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCA6IEZFX1BTRV9QT1JUX1BQRTE7XFxuK1xcdFxcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhldGgsIFJFR19HRE1fRldEX0NGRyhwb3J0LVxcdTAwM2VpZCksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBwc2VfcG9ydCk7XFxuK1xcdH1cXG4rXFxuK1xcdHNldF9iaXQoQUlST0hBX0RFVl9GX1RYX1FPUywgXFx1MDAyNmRldi1cXHUwMDNlZmxhZ3MpO1xcbitcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZmbG93X29mZmxvYWRfbXV0ZXgpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitlcnJvcl9kaXNhYmxlX2xvb3BiYWNrOlxcbitcXHRhaXJvaGFfZGlzYWJsZV9nZG0yX2xvb3BiYWNrKGRldik7XFxuK2Vycm9yX2Rpc2FibGVfd2FuOlxcbitcXHRjbGVhcl9iaXQoQUlST0hBX0RFVl9GX1dBTiwgXFx1MDAyNmRldi1cXHUwMDNlZmxhZ3MpO1xcbitcXHRhaXJvaGFfZGV2X3NldF9xZG1hKGRldik7XFxuK2Vycm9yX3VubG9jazpcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZmbG93X29mZmxvYWRfbXV0ZXgpO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4gc3RhdGljIGludCBhaXJvaGFfdGNfaHRiX2Rlc3Ryb3koc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4ge1xcbiBcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuQEAgLTMwODIsNiArMzI3OSw4IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3RjX2h0Yl9kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIFxcdGZvcl9lYWNoX3NldF9iaXQocSwgZGV2LVxcdTAwM2Vxb3Nfc3FfYm1hcCwgQUlST0hBX05VTV9RT1NfQ0hBTk5FTFMpXFxuIFxcdFxcdGFpcm9oYV90Y19yZW1vdmVfaHRiX3F1ZXVlKG5ldGRldiwgcSk7XFxuIFxcbitcXHRjbGVhcl9iaXQoQUlST0hBX0RFVl9GX1RYX1FPUywgXFx1MDAyNmRldi1cXHUwMDNlZmxhZ3MpO1xcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTMxMDEsMjQgKzMzMDAsMjQgQEAgc3RhdGljIGludCBhaXJvaGFfdGNfZ2V0X2h0Yl9nZXRfbGVhZl9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBhaXJvaGFfdGNfc2V0dXBfcWRpc2NfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuK3N0YXRpYyBpbnQgYWlyb2hhX3RjX3NldHVwX3FkaXNjX2h0YihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCB0Y19odGJfcW9wdF9vZmZsb2FkICpvcHQpXFxuIHtcXG4gXFx0c3dpdGNoIChvcHQtXFx1MDAzZWNvbW1hbmQpIHtcXG4gXFx0Y2FzZSBUQ19IVEJfQ1JFQVRFOlxcbi1cXHRcXHRicmVhaztcXG4rXFx0XFx0cmV0dXJuIGFpcm9oYV9lbmFibGVfcW9zX2Zvcl9nZG0zNChuZXRkZXYsIG9wdC1cXHUwMDNlZXh0YWNrKTtcXG4gXFx0Y2FzZSBUQ19IVEJfREVTVFJPWTpcXG4tXFx0XFx0cmV0dXJuIGFpcm9oYV90Y19odGJfZGVzdHJveShkZXYpO1xcbitcXHRcXHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9kZXN0cm95KG5ldGRldik7XFxuIFxcdGNhc2UgVENfSFRCX05PREVfTU9ESUZZOlxcbi1cXHRcXHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9tb2RpZnlfcXVldWUoZGV2LCBvcHQpO1xcbitcXHRcXHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9tb2RpZnlfcXVldWUobmV0ZGV2LCBvcHQpO1xcbiBcXHRjYXNlIFRDX0hUQl9MRUFGX0FMTE9DX1FVRVVFOlxcbi1cXHRcXHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9hbGxvY19sZWFmX3F1ZXVlKGRldiwgb3B0KTtcXG4rXFx0XFx0cmV0dXJuIGFpcm9oYV90Y19odGJfYWxsb2NfbGVhZl9xdWV1ZShuZXRkZXYsIG9wdCk7XFxuIFxcdGNhc2UgVENfSFRCX0xFQUZfREVMOlxcbiBcXHRjYXNlIFRDX0hUQl9MRUFGX0RFTF9MQVNUOlxcbiBcXHRjYXNlIFRDX0hUQl9MRUFGX0RFTF9MQVNUX0ZPUkNFOlxcbi1cXHRcXHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9kZWxldGVfbGVhZl9xdWV1ZShkZXYsIG9wdCk7XFxuK1xcdFxcdHJldHVybiBhaXJvaGFfdGNfaHRiX2RlbGV0ZV9sZWFmX3F1ZXVlKG5ldGRldiwgb3B0KTtcXG4gXFx0Y2FzZSBUQ19IVEJfTEVBRl9RVUVSWV9RVUVVRTpcXG4tXFx0XFx0cmV0dXJuIGFpcm9oYV90Y19nZXRfaHRiX2dldF9sZWFmX3F1ZXVlKGRldiwgb3B0KTtcXG4rXFx0XFx0cmV0dXJuIGFpcm9oYV90Y19nZXRfaHRiX2dldF9sZWFmX3F1ZXVlKG5ldGRldiwgb3B0KTtcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oXFxuaW5kZXggZmU5MzRmOWZmZThhMTEuLmU2ZmJkNDJjZjk2NDI5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oXFxuQEAgLTU3MCwyNCArNTcwLDMxIEBAIHN0cnVjdCBhaXJvaGFfcWRtYSB7XFxuIFxcdERFQ0xBUkVfQklUTUFQKHFvc19jaGFubmVsX21hcCwgQUlST0hBX05VTV9RT1NfQ0hBTk5FTFMpO1xcbiB9O1xcbiBcXG4tZW51bSBhaXJvaGFfcHJpdl9mbGFncyB7XFxuLVxcdEFJUk9IQV9QUklWX0ZfV0FOID0gQklUKDApLFxcbitlbnVtIGFpcm9oYV9kZXZfZmxhZ3Mge1xcbitcXHRBSVJPSEFfREVWX0ZfV0FOLFxcbitcXHRBSVJPSEFfREVWX0ZfVFhfUU9TLFxcbiB9O1xcbiBcXG4gc3RydWN0IGFpcm9oYV9nZG1fZGV2IHtcXG4rXFx0c3RydWN0IGFpcm9oYV9xZG1hIF9fcmN1ICpxZG1hO1xcbiBcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0O1xcbi1cXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7XFxuIFxcdHN0cnVjdCBhaXJvaGFfZXRoICpldGg7XFxuIFxcbiBcXHRERUNMQVJFX0JJVE1BUChxb3Nfc3FfYm1hcCwgQUlST0hBX05VTV9RT1NfQ0hBTk5FTFMpO1xcbi1cXHQvKiBxb3Mgc3RhdHMgY291bnRlcnMgKi9cXG4tXFx0dTY0IGNwdV90eF9wYWNrZXRzO1xcbi1cXHR1NjQgZndkX3R4X3BhY2tldHM7XFxuK1xcdHN0cnVjdCB7XFxuK1xcdFxcdHUzMiBjcHVfdHhfcGFja2V0cztcXG4rXFx0XFx0dTMyIGZ3ZF90eF9wYWNrZXRzO1xcbitcXHR9IHFvc19zdGF0c1tBSVJPSEFfTlVNX1FPU19DSEFOTkVMU107XFxuIFxcbi1cXHR1MzIgZmxhZ3M7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcdGludCBuYnE7XFxuIFxcbiBcXHRzdHJ1Y3QgYWlyb2hhX2h3X3N0YXRzIHN0YXRzO1xcbitcXG4rXFx0c3RydWN0IHtcXG4rXFx0XFx0YXRvbWljX3QgYnl0ZXM7XFxuK1xcdFxcdGF0b21pY190IHBrdHM7XFxuK1xcdH0gYnFsW0FJUk9IQV9OVU1fTkVUREVWX1RYX1JJTkdTXTtcXG4gfTtcXG4gXFxuIHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQge1xcbkBAIC02OTQsNyArNzAxLDcgQEAgc3RhdGljIGlubGluZSB1MTYgYWlyb2hhX3FkbWFfZ2V0X3R4cShzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEsIHUxNiBxaWQpXFxuIFxcbiBzdGF0aWMgaW5saW5lIGJvb2wgYWlyb2hhX2lzX2xhbl9nZG1fZGV2KHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxcbiB7XFxuLVxcdHJldHVybiAhKGRldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBBSVJPSEFfUFJJVl9GX1dBTik7XFxuK1xcdHJldHVybiAhdGVzdF9iaXQoQUlST0hBX0RFVl9GX1dBTiwgXFx1MDAyNmRldi1cXHUwMDNlZmxhZ3MpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIGJvb2wgYWlyb2hhX2lzXzc1ODEoc3RydWN0IGFpcm9oYV9ldGggKmV0aClcXG5AQCAtNzExLDYgKzcxOCwxNiBAQCBpbnQgYWlyb2hhX2dldF9mZV9wb3J0KHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KTtcXG4gYm9vbCBhaXJvaGFfaXNfdmFsaWRfZ2RtX2RldihzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLFxcbiBcXHRcXHRcXHQgICAgIHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KTtcXG4gXFxuK2V4dGVybiBzdHJ1Y3QgbXV0ZXggZmxvd19vZmZsb2FkX211dGV4O1xcbitcXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgYWlyb2hhX3FkbWEgKlxcbithaXJvaGFfcWRtYV9kZXJlZihzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcXG4re1xcbitcXHRyZXR1cm4gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChkZXYtXFx1MDAzZXFkbWEsXFxuK1xcdFxcdFxcdFxcdFxcdCBsb2NrZGVwX3J0bmxfaXNfaGVsZCgpIHx8XFxuK1xcdFxcdFxcdFxcdFxcdCBsb2NrZGVwX2lzX2hlbGQoXFx1MDAyNmZsb3dfb2ZmbG9hZF9tdXRleCkpO1xcbit9XFxuK1xcbiB2b2lkIGFpcm9oYV9wcGVfc2V0X3htaXRfZnJhbWVfc2l6ZShzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldik7XFxuIHZvaWQgYWlyb2hhX3BwZV9zZXRfY3B1X3BvcnQoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYsIHU4IHBwZV9pZCwgdTggZnBvcnQpO1xcbiBib29sIGFpcm9oYV9wcGVfaXNfZW5hYmxlZChzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLCBpbnQgaW5kZXgpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xcbmluZGV4IGU0YzM2NDRkZDZlYzdhLi4zM2RkZjBkMDc4NTUzOSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xcbkBAIC0xNSw3ICsxNSwxMCBAQFxcbiAjaW5jbHVkZSBcXFwiYWlyb2hhX3JlZ3MuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImFpcm9oYV9ldGguaFxcXCJcXG4gXFxuLXN0YXRpYyBERUZJTkVfTVVURVgoZmxvd19vZmZsb2FkX211dGV4KTtcXG4rLyogU2VyaWFsaXplIGFpcm9oYV9nZG1fZGV2IGZsYWdzLCBRRE1BIHBvaW50ZXIgYW5kIFBQRSBDUFUgcG9ydFxcbisgKiBjb25maWd1cmF0aW9uLlxcbisgKi9cXG4rREVGSU5FX01VVEVYKGZsb3dfb2ZmbG9hZF9tdXRleCk7XFxuIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0socHBlX2xvY2spO1xcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyBhaXJvaGFfZmxvd190YWJsZV9wYXJhbXMgPSB7XFxuQEAgLTg2LDggKzg5LDggQEAgc3RhdGljIHUzMiBhaXJvaGFfcHBlX2dldF90aW1lc3RhbXAoc3RydWN0IGFpcm9oYV9wcGUgKnBwZSlcXG4gXFxuIHZvaWQgYWlyb2hhX3BwZV9zZXRfY3B1X3BvcnQoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYsIHU4IHBwZV9pZCwgdTggZnBvcnQpXFxuIHtcXG4tXFx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LVxcdTAwM2VxZG1hO1xcbi1cXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gcWRtYS1cXHUwMDNlZXRoO1xcbitcXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xcbitcXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gZGV2LVxcdTAwM2VldGg7XFxuIFxcdHU4IHFkbWFfaWQgPSBxZG1hIC0gXFx1MDAyNmV0aC1cXHUwMDNlcWRtYVswXTtcXG4gXFx0dTMyIGZlX2NwdV9wb3J0O1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9yZWdzLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaFxcbmluZGV4IDZmZWQ2M2QwMTNiNDEyLi40NDJiNDhjOWI5OTFlZiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcmVncy5oXFxuQEAgLTM3NSw2ICszNzUsNyBAQFxcbiBcXG4gI2RlZmluZSBSRUdfU1JDX1BPUlRfRkNfTUFQNlxcdFxcdDB4MjI5OFxcbiAjZGVmaW5lIEZDX0lEX09GX1NSQ19QT1JUX01BU0soX24pXFx0R0VOTUFTSyg0ICsgKChfbikgXFx1MDAzY1xcdTAwM2MgMyksICgoX24pIFxcdTAwM2NcXHUwMDNjIDMpKVxcbisjZGVmaW5lIEZDX01BUDZfREVGX1ZBTFVFXFx0XFx0MHgxYjFhMTkxOFxcbiBcXG4gI2RlZmluZSBSRUdfV0FOX01UVTBcXHRcXHRcXHQweDIzMDBcXG4gI2RlZmluZSBXQU5fTVRVMV9NQVNLXFx0XFx0XFx0R0VOTUFTSygyOSwgMTYpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDIwOjAyOjQ0Ljg0NTYxNTM5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTM4NTkyODU4NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBaXJvaGEgZXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvKSwgd2hpY2ggaXMgYSBwbGF0Zm9ybSBkcml2ZXIgc3BlY2lmaWMgdG8gQWlyb2hhIFNvQ3MgKGUuZy4sIEVONzU4MSkuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50cywgbWVhbmluZyB0aGUgZHJpdmVyIGNhbm5vdCBiZSBwcm9iZWQgYW5kIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDVlNGYxMGU1ZjhlMWM1M2Y1MmM0Y2M2NGRkMTc2Nzg5MDA3YjAzNTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAyNSAyMDowMjo0MyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jXG5pbmRleCA3OTQxOGU2ODJmNzFmMy4uMDI5MjA1ODdlMGNjNDcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jXG5AQCAtOTM0LDcgKzkzNCw3IEBAIHN0YXRpYyB2b2lkIGFpcm9oYV9xZG1hX3dha2VfbmV0ZGV2X3R4cXMoc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSlcbiBcdFx0XHRpZiAoIWRldilcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRcdGlmIChkZXYtXHUwMDNlcWRtYSAhPSBxZG1hKVxuK1x0XHRcdGlmIChyY3VfYWNjZXNzX3BvaW50ZXIoZGV2LVx1MDAzZXFkbWEpICE9IHFkbWEpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0XHRuZXRkZXYgPSBuZXRkZXZfZnJvbV9wcml2KGRldik7XG5AQCAtMTAzOCwxMCArMTAzOCwyMSBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3R4X25hcGlfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpXG4gXHRcdHEtXHUwMDNlcXVldWVkLS07XG4gXG4gXHRcdGlmIChza2IpIHtcbitcdFx0XHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KHNrYi1cdTAwM2VkZXYpO1xuK1x0XHRcdHUxNiBxaWR4ID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7XG4gXHRcdFx0c3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxO1xuIFxuIFx0XHRcdHR4cSA9IHNrYl9nZXRfdHhfcXVldWUoc2tiLVx1MDAzZWRldiwgc2tiKTtcbi1cdFx0XHRuZXRkZXZfdHhfY29tcGxldGVkX3F1ZXVlKHR4cSwgMSwgc2tiLVx1MDAzZWxlbik7XG4rXHRcdFx0aWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihkZXYtXHUwMDNlcWRtYSkgIT0gcWRtYSkge1xuK1x0XHRcdFx0YXRvbWljX2FkZCgxLCBcdTAwMjZkZXYtXHUwMDNlYnFsW3FpZHhdLnBrdHMpO1xuK1x0XHRcdFx0YXRvbWljX2FkZChza2ItXHUwMDNlbGVuLCBcdTAwMjZkZXYtXHUwMDNlYnFsW3FpZHhdLmJ5dGVzKTtcbitcdFx0XHR9IGVsc2Uge1xuK1x0XHRcdFx0dTMyIHBrdHMgPSAxLCBieXRlcyA9IHNrYi1cdTAwM2VsZW47XG4rXG4rXHRcdFx0XHRieXRlcyArPSBhdG9taWNfeGNoZyhcdTAwMjZkZXYtXHUwMDNlYnFsW3FpZHhdLmJ5dGVzLCAwKTtcbitcdFx0XHRcdHBrdHMgKz0gYXRvbWljX3hjaGcoXHUwMDI2ZGV2LVx1MDAzZWJxbFtxaWR4XS5wa3RzLCAwKTtcbitcdFx0XHRcdG5ldGRldl90eF9jb21wbGV0ZWRfcXVldWUodHhxLCBwa3RzLCBieXRlcyk7XG4rXHRcdFx0fVxuIFx0XHRcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XG4gXHRcdH1cbiBcbkBAIC0xOTA1LDggKzE5MTYsOCBAQCBzdGF0aWMgaW50IGFpcm9oYV9kZXZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIHtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBkZXYtXHUwMDNlcG9ydDtcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cdTAwM2VxZG1hO1xuIFx0dTMyIHBzZV9wb3J0ID0gRkVfUFNFX1BPUlRfUFBFMTtcbitcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcbiBcdGludCBlcnI7XG4gXG4gXHRuZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKG5ldGRldik7XG5AQCAtMTkxNCw2ICsxOTI1LDcgQEAgc3RhdGljIGludCBhaXJvaGFfZGV2X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4rXHRxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcbiBcdGlmIChuZXRkZXZfdXNlc19kc2EobmV0ZGV2KSlcbiBcdFx0YWlyb2hhX2ZlX3NldChxZG1hLVx1MDAzZWV0aCwgUkVHX0dETV9JTkdSRVNTX0NGRyhwb3J0LVx1MDAzZWlkKSxcbiBcdFx0XHQgICAgICBHRE1fU1RBR19FTl9NQVNLKTtcbkBAIC0xOTM3LDcgKzE5NDksNiBAQCBzdGF0aWMgaW50IGFpcm9oYV9kZXZfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIHtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBkZXYtXHUwMDNlcG9ydDtcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cdTAwM2VxZG1hO1xuIFxuIFx0bmV0aWZfdHhfZGlzYWJsZShuZXRkZXYpO1xuIFx0YWlyb2hhX3NldF92aXBfZm9yX2dkbV9wb3J0KGRldiwgZmFsc2UpO1xuQEAgLTE5NDUsNyArMTk1Niw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRpZiAoLS1wb3J0LVx1MDAzZXVzZXJzKVxuIFx0XHRhaXJvaGFfcHBlX3NldF94bWl0X2ZyYW1lX3NpemUoZGV2KTtcbiBcdGVsc2Vcbi1cdFx0YWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKHFkbWEtXHUwMDNlZXRoLFxuK1x0XHRhaXJvaGFfc2V0X2dkbV9wb3J0X2Z3ZF9jZmcoZGV2LVx1MDAzZWV0aCxcbiBcdFx0XHRcdFx0ICAgIFJFR19HRE1fRldEX0NGRyhwb3J0LVx1MDAzZWlkKSxcbiBcdFx0XHRcdFx0ICAgIEZFX1BTRV9QT1JUX0RST1ApO1xuIFx0cmV0dXJuIDA7XG5AQCAtMjAyOCw2ICsyMDM5LDUzIEBAIHN0YXRpYyBpbnQgYWlyb2hhX2VuYWJsZV9nZG0yX2xvb3BiYWNrKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBpbnQgYWlyb2hhX2Rpc2FibGVfZ2RtMl9sb29wYmFjayhzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcbit7XG4rXHRzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZGV2LVx1MDAzZXBvcnQ7XG4rXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gZGV2LVx1MDAzZWV0aDtcbitcdGludCBpLCBzcmNfcG9ydDtcbitcdHUzMiBwc2VfcG9ydDtcbitcbitcdHNyY19wb3J0ID0gZXRoLVx1MDAzZXNvYy1cdTAwM2VvcHMuZ2V0X3Nwb3J0KGRldi1cdTAwM2Vwb3J0LCBkZXYtXHUwMDNlbmJxKTtcbitcdGlmIChzcmNfcG9ydCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHNyY19wb3J0O1xuK1xuK1x0YWlyb2hhX2ZlX2NsZWFyKGV0aCxcbitcdFx0XHRSRUdfU1BfREZUX0NQT1JUKHNyY19wb3J0IFx1MDAzZVx1MDAzZSBmbHMoU1BfQ1BPUlRfREZUX01BU0spKSxcbitcdFx0XHRTUF9DUE9SVF9NQVNLKHNyY19wb3J0IFx1MDAyNiBTUF9DUE9SVF9ERlRfTUFTSykpO1xuK1xuK1x0YWlyb2hhX2ZlX3NldChldGgsIFJFR19HRE1fRldEX0NGRyhBSVJPSEFfR0RNMl9JRFgpLFxuK1x0XHQgICAgICBHRE1fU1RSSVBfQ1JDX01BU0spO1xuK1x0YWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKGV0aCwgUkVHX0dETV9GV0RfQ0ZHKEFJUk9IQV9HRE0yX0lEWCksXG4rXHRcdFx0XHQgICAgRkVfUFNFX1BPUlRfRFJPUCk7XG4rXHRhaXJvaGFfZmVfY2xlYXIoZXRoLCBSRUdfR0RNX0xQQktfQ0ZHKEFJUk9IQV9HRE0yX0lEWCksXG4rXHRcdFx0TFBCS19DSEFOX01BU0sgfCBMUEJLX01PREVfTUFTSyB8IExQQktfRU5fTUFTSyk7XG4rXHRwc2VfcG9ydCA9IGFpcm9oYV9wcGVfaXNfZW5hYmxlZChldGgsIDEpID8gRkVfUFNFX1BPUlRfUFBFMlxuK1x0XHRcdFx0XHRcdCA6IEZFX1BTRV9QT1JUX1BQRTE7XG4rXHRhaXJvaGFfc2V0X2dkbV9wb3J0X2Z3ZF9jZmcoZXRoLCBSRUdfR0RNX0ZXRF9DRkcoQUlST0hBX0dETTJfSURYKSxcbitcdFx0XHRcdCAgICBwc2VfcG9ydCk7XG4rXG4rXHRhaXJvaGFfZmVfcm13KGV0aCwgUkVHX0ZFX1dBTl9QT1JULCBXQU4wX01BU0ssXG4rXHRcdCAgICAgIEZJRUxEX1BSRVAoV0FOMF9NQVNLLCBBSVJPSEFfR0RNMl9JRFgpKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGV0aC1cdTAwM2Vzb2MtXHUwMDNlbnVtX3BwZTsgaSsrKVxuK1x0XHRhaXJvaGFfZmVfY2xlYXIoZXRoLCBSRUdfUFBFX0RGVF9DUE9SVChpLCBBSVJPSEFfR0RNMl9JRFgpLFxuK1x0XHRcdFx0REZUX0NQT1JUX01BU0soQUlST0hBX0dETTJfSURYKSk7XG4rXG4rXHQvKiBFbmFibGUgVklQIGFuZCBJRkMgZm9yIEdETTIgKi9cbitcdGFpcm9oYV9mZV9zZXQoZXRoLCBSRUdfRkVfVklQX1BPUlRfRU4sIEJJVChBSVJPSEFfR0RNMl9JRFgpKTtcbitcdGFpcm9oYV9mZV9zZXQoZXRoLCBSRUdfRkVfSUZDX1BPUlRfRU4sIEJJVChBSVJPSEFfR0RNMl9JRFgpKTtcbitcbitcdGlmIChwb3J0LVx1MDAzZWlkID09IEFJUk9IQV9HRE00X0lEWCBcdTAwMjZcdTAwMjYgYWlyb2hhX2lzXzc1ODEoZXRoKSkge1xuK1x0XHR1MzIgbWFzayA9IEZDX0lEX09GX1NSQ19QT1JUX01BU0soZGV2LVx1MDAzZW5icSk7XG4rXG4rXHRcdGFpcm9oYV9mZV9ybXcoZXRoLCBSRUdfU1JDX1BPUlRfRkNfTUFQNiwgbWFzayxcbitcdFx0XHQgICAgICBGQ19NQVA2X0RFRl9WQUxVRSBcdTAwMjYgbWFzayk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqXG4gYWlyb2hhX2dldF93YW5fZ2RtX2RldihzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoKVxuIHtcbkBAIC0yMDU0LDE1ICsyMTEyLDQzIEBAIGFpcm9oYV9nZXRfd2FuX2dkbV9kZXYoc3RydWN0IGFpcm9oYV9ldGggKmV0aClcbiBzdGF0aWMgdm9pZCBhaXJvaGFfZGV2X3NldF9xZG1hKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxuIHtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBuZXRkZXZfZnJvbV9wcml2KGRldik7XG4rXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKmN1cl9xZG1hLCAqcWRtYTtcbiBcdHN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBkZXYtXHUwMDNlZXRoO1xuLVx0aW50IHBwZV9pZDtcbitcdGludCBpLCBwcGVfaWQ7XG4gXG4gXHQvKiBRRE1BMCBpcyB1c2VkIGZvciBsYW4gcG9ydHMgd2hpbGUgUURNQTEgaXMgdXNlZCBmb3IgV0FOIHBvcnRzICovXG4tXHRkZXYtXHUwMDNlcWRtYSA9IFx1MDAyNmV0aC1cdTAwM2VxZG1hWyFhaXJvaGFfaXNfbGFuX2dkbV9kZXYoZGV2KV07XG4tXHRuZXRkZXYtXHUwMDNlaXJxID0gZGV2LVx1MDAzZXFkbWEtXHUwMDNlaXJxX2JhbmtzWzBdLmlycTtcbitcdHFkbWEgPSBcdTAwMjZldGgtXHUwMDNlcWRtYVshYWlyb2hhX2lzX2xhbl9nZG1fZGV2KGRldildO1xuK1x0Y3VyX3FkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuK1xuK1x0aWYgKGN1cl9xZG1hKSB7XG4rXHRcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpO1xuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGN1cl9xZG1hLVx1MDAzZXFfdHhfaXJxKTsgaSsrKVxuK1x0XHRcdG5hcGlfZGlzYWJsZShcdTAwMjZjdXJfcWRtYS1cdTAwM2VxX3R4X2lycVtpXS5uYXBpKTtcbitcdH1cbitcbitcdHJjdV9hc3NpZ25fcG9pbnRlcihkZXYtXHUwMDNlcWRtYSwgcWRtYSk7XG4rXHRuZXRkZXYtXHUwMDNlaXJxID0gcWRtYS1cdTAwM2VpcnFfYmFua3NbMF0uaXJxO1xuK1x0c3luY2hyb25pemVfcmN1KCk7XG4gXG4gXHRwcGVfaWQgPSAhYWlyb2hhX2lzX2xhbl9nZG1fZGV2KGRldikgXHUwMDI2XHUwMDI2IGFpcm9oYV9wcGVfaXNfZW5hYmxlZChldGgsIDEpO1xuIFx0YWlyb2hhX3BwZV9zZXRfY3B1X3BvcnQoZGV2LCBwcGVfaWQsIGFpcm9oYV9nZXRfZmVfcG9ydChkZXYpKTtcbitcbitcdC8qIFNlZWQgcW9zX3N0YXRzIGJhc2VsaW5lcyB3aXRoIHRoZSBuZXcgUURNQSBibG9jaydzIGN1cnJlbnRcbitcdCAqIGNvdW50ZXIgdmFsdWVzIHRvIGF2b2lkIGEgc3B1cmlvdXMgc3Bpa2Ugb24gdGhlIGZpcnN0IHN0YXRzXG4rXHQgKiBxdWVyeSBhZnRlciBpbml0IG9yIG1pZ3JhdGlvbi5cbitcdCAqL1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShkZXYtXHUwMDNlcW9zX3N0YXRzKTsgaSsrKSB7XG4rXHRcdGRldi1cdTAwM2Vxb3Nfc3RhdHNbaV0uY3B1X3R4X3BhY2tldHMgPVxuK1x0XHRcdGFpcm9oYV9xZG1hX3JyKHFkbWEsIFJFR19DTlRSX1ZBTChpIFx1MDAzY1x1MDAzYyAxKSk7XG4rXHRcdGRldi1cdTAwM2Vxb3Nfc3RhdHNbaV0uZndkX3R4X3BhY2tldHMgPVxuK1x0XHRcdGFpcm9oYV9xZG1hX3JyKHFkbWEsIFJFR19DTlRSX1ZBTCgoaSBcdTAwM2NcdTAwM2MgMSkgKyAxKSk7XG4rXHR9XG4rXG4rXHRpZiAoY3VyX3FkbWEpIHtcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShjdXJfcWRtYS1cdTAwM2VxX3R4X2lycSk7IGkrKylcbitcdFx0XHRuYXBpX2VuYWJsZShcdTAwMjZjdXJfcWRtYS1cdTAwM2VxX3R4X2lycVtpXS5uYXBpKTtcbitcdFx0bmV0aWZfdHhfd2FrZV9hbGxfcXVldWVzKG5ldGRldik7XG4rXHR9XG4gfVxuIFxuIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG5AQCAtMjA3OCw3ICsyMTY0LDcgQEAgc3RhdGljIGludCBhaXJvaGFfZGV2X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdFx0ZmFsbHRocm91Z2g7XG4gXHRjYXNlIEFJUk9IQV9HRE0yX0lEWDpcbiBcdFx0LyogR0RNMiBpcyBhbHdheXMgdXNlZCBhcyB3YW4gKi9cbi1cdFx0ZGV2LVx1MDAzZWZsYWdzIHw9IEFJUk9IQV9QUklWX0ZfV0FOO1xuK1x0XHRzZXRfYml0KEFJUk9IQV9ERVZfRl9XQU4sIFx1MDAyNmRldi1cdTAwM2VmbGFncyk7XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0YnJlYWs7XG5AQCAtMjIxNyw5ICsyMzAzLDkgQEAgc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB7XG4gXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4tXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtXHUwMDNlcWRtYTtcbiBcdHUzMiBucl9mcmFncywgdGFnLCBtc2cwLCBtc2cxLCBsZW47XG4gXHRzdHJ1Y3QgYWlyb2hhX3F1ZXVlX2VudHJ5ICplO1xuK1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xuIFx0c3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxO1xuIFx0c3RydWN0IGFpcm9oYV9xdWV1ZSAqcTtcbiBcdExJU1RfSEVBRCh0eF9saXN0KTtcbkBAIC0yMjI4LDYgKzIzMTQsOCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHR1MTYgaW5kZXg7XG4gXHR1OCBmcG9ydDtcbiBcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdHFkbWEgPSByY3VfZGVyZWZlcmVuY2UoZGV2LVx1MDAzZXFkbWEpO1xuIFx0cWlkID0gYWlyb2hhX3FkbWFfZ2V0X3R4cShxZG1hLCBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKSk7XG4gXHR0YWcgPSBhaXJvaGFfZ2V0X2RzYV90YWcoc2tiLCBuZXRkZXYpO1xuIFxuQEAgLTIyNzcsNiArMjM2NSw4IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBhaXJvaGFfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0bmV0aWZfdHhfc3RvcF9xdWV1ZSh0eHEpO1xuIFx0XHRxLVx1MDAzZXR4cV9zdG9wcGVkID0gdHJ1ZTtcbiBcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cS1cdTAwM2Vsb2NrKTtcbitcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4gXHRcdHJldHVybiBORVRERVZfVFhfQlVTWTtcbiBcdH1cbiBcbkBAIC0yMzQyLDYgKzI0MzIsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHRGSUVMRF9QUkVQKFRYX1JJTkdfQ1BVX0lEWF9NQVNLLCBpbmRleCkpO1xuIFxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cS1cdTAwM2Vsb2NrKTtcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0cmV0dXJuIE5FVERFVl9UWF9PSztcbiBcbkBAIC0yMzU0LDYgKzI0NDUsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gZXJyb3I6XG4gXHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuIFx0bmV0ZGV2LVx1MDAzZXN0YXRzLnR4X2Ryb3BwZWQrKztcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0cmV0dXJuIE5FVERFVl9UWF9PSztcbiB9XG5AQCAtMjQzMywxNyArMjUyNSwxOSBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3NldF9jaGFuX3R4X3NjaGVkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdFx0XHRcdCBjb25zdCB1MTYgKndlaWdodHMsIHU4IG5fd2VpZ2h0cylcbiB7XG4gXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7XG4gXHRpbnQgaTtcbiBcbitcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQUlST0hBX05VTV9RT1NfUVVFVUVTOyBpKyspXG4tXHRcdGFpcm9oYV9xZG1hX2NsZWFyKGRldi1cdTAwM2VxZG1hLCBSRUdfUVVFVUVfQ0xPU0VfQ0ZHKGNoYW5uZWwpLFxuK1x0XHRhaXJvaGFfcWRtYV9jbGVhcihxZG1hLCBSRUdfUVVFVUVfQ0xPU0VfQ0ZHKGNoYW5uZWwpLFxuIFx0XHRcdFx0ICBUWFFfRElTQUJMRV9DSEFOX1FVRVVFX01BU0soY2hhbm5lbCwgaSkpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgbl93ZWlnaHRzOyBpKyspIHtcbiBcdFx0dTMyIHN0YXR1cztcbiBcdFx0aW50IGVycjtcbiBcbi1cdFx0YWlyb2hhX3FkbWFfd3IoZGV2LVx1MDAzZXFkbWEsIFJFR19UWFdSUl9XRUlHSFRfQ0ZHLFxuK1x0XHRhaXJvaGFfcWRtYV93cihxZG1hLCBSRUdfVFhXUlJfV0VJR0hUX0NGRyxcbiBcdFx0XHQgICAgICAgVFdSUl9SV19DTURfTUFTSyB8XG4gXHRcdFx0ICAgICAgIEZJRUxEX1BSRVAoVFdSUl9DSEFOX0lEWF9NQVNLLCBjaGFubmVsKSB8XG4gXHRcdFx0ICAgICAgIEZJRUxEX1BSRVAoVFdSUl9RVUVVRV9JRFhfTUFTSywgaSkgfFxuQEAgLTI0NTEsMTIgKzI1NDUsMTIgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9zZXRfY2hhbl90eF9zY2hlZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRlcnIgPSByZWFkX3BvbGxfdGltZW91dChhaXJvaGFfcWRtYV9yciwgc3RhdHVzLFxuIFx0XHRcdFx0XHRzdGF0dXMgXHUwMDI2IFRXUlJfUldfQ01EX0RPTkUsXG4gXHRcdFx0XHRcdFVTRUNfUEVSX01TRUMsIDEwICogVVNFQ19QRVJfTVNFQyxcbi1cdFx0XHRcdFx0dHJ1ZSwgZGV2LVx1MDAzZXFkbWEsIFJFR19UWFdSUl9XRUlHSFRfQ0ZHKTtcbitcdFx0XHRcdFx0dHJ1ZSwgcWRtYSwgUkVHX1RYV1JSX1dFSUdIVF9DRkcpO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdHJldHVybiBlcnI7XG4gXHR9XG4gXG4tXHRhaXJvaGFfcWRtYV9ybXcoZGV2LVx1MDAzZXFkbWEsIFJFR19DSEFOX1FPU19NT0RFKGNoYW5uZWwgXHUwMDNlXHUwMDNlIDMpLFxuK1x0YWlyb2hhX3FkbWFfcm13KHFkbWEsIFJFR19DSEFOX1FPU19NT0RFKGNoYW5uZWwgXHUwMDNlXHUwMDNlIDMpLFxuIFx0XHRcdENIQU5fUU9TX01PREVfTUFTSyhjaGFubmVsKSxcbiBcdFx0XHRfX2ZpZWxkX3ByZXAoQ0hBTl9RT1NfTU9ERV9NQVNLKGNoYW5uZWwpLCBtb2RlKSk7XG4gXG5AQCAtMjUyMCwxNyArMjYxNCwyMiBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX2dldF90eF9ldHNfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IGNoYW5uZWwsXG4gXHRcdFx0XHRcdHN0cnVjdCB0Y19ldHNfcW9wdF9vZmZsb2FkICpvcHQpXG4ge1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuLVx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LVx1MDAzZXFkbWE7XG4rXHR1MzIgY3B1X3R4X3BhY2tldHMsIGZ3ZF90eF9wYWNrZXRzO1xuK1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xuK1x0dTY0IHR4X3BhY2tldHM7XG4gXG4tXHR1NjQgY3B1X3R4X3BhY2tldHMgPSBhaXJvaGFfcWRtYV9ycihxZG1hLCBSRUdfQ05UUl9WQUwoY2hhbm5lbCBcdTAwM2NcdTAwM2MgMSkpO1xuLVx0dTY0IGZ3ZF90eF9wYWNrZXRzID0gYWlyb2hhX3FkbWFfcnIocWRtYSxcbi1cdFx0XHRcdFx0ICAgIFJFR19DTlRSX1ZBTCgoY2hhbm5lbCBcdTAwM2NcdTAwM2MgMSkgKyAxKSk7XG4tXHR1NjQgdHhfcGFja2V0cyA9IChjcHVfdHhfcGFja2V0cyAtIGRldi1cdTAwM2VjcHVfdHhfcGFja2V0cykgK1xuLVx0XHRcdCAoZndkX3R4X3BhY2tldHMgLSBkZXYtXHUwMDNlZndkX3R4X3BhY2tldHMpO1xuK1x0cWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XG4rXHRjcHVfdHhfcGFja2V0cyA9IGFpcm9oYV9xZG1hX3JyKHFkbWEsIFJFR19DTlRSX1ZBTChjaGFubmVsIFx1MDAzY1x1MDAzYyAxKSk7XG4rXHRmd2RfdHhfcGFja2V0cyA9IGFpcm9oYV9xZG1hX3JyKHFkbWEsXG4rXHRcdFx0XHRcdFJFR19DTlRSX1ZBTCgoY2hhbm5lbCBcdTAwM2NcdTAwM2MgMSkgKyAxKSk7XG4rXHR0eF9wYWNrZXRzID0gKHUzMikoY3B1X3R4X3BhY2tldHMgLVxuK1x0XHRcdCAgIGRldi1cdTAwM2Vxb3Nfc3RhdHNbY2hhbm5lbF0uY3B1X3R4X3BhY2tldHMpO1xuK1x0dHhfcGFja2V0cyArPSAodTMyKShmd2RfdHhfcGFja2V0cyAtXG4rXHRcdFx0ICAgIGRldi1cdTAwM2Vxb3Nfc3RhdHNbY2hhbm5lbF0uZndkX3R4X3BhY2tldHMpO1xuIFxuIFx0X2JzdGF0c191cGRhdGUob3B0LVx1MDAzZXN0YXRzLmJzdGF0cywgMCwgdHhfcGFja2V0cyk7XG4tXHRkZXYtXHUwMDNlY3B1X3R4X3BhY2tldHMgPSBjcHVfdHhfcGFja2V0cztcbi1cdGRldi1cdTAwM2Vmd2RfdHhfcGFja2V0cyA9IGZ3ZF90eF9wYWNrZXRzO1xuK1x0ZGV2LVx1MDAzZXFvc19zdGF0c1tjaGFubmVsXS5jcHVfdHhfcGFja2V0cyA9IGNwdV90eF9wYWNrZXRzO1xuK1x0ZGV2LVx1MDAzZXFvc19zdGF0c1tjaGFubmVsXS5md2RfdHhfcGFja2V0cyA9IGZ3ZF90eF9wYWNrZXRzO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTI3ODUsMTYgKzI4ODQsMTggQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9zZXRfdHhfcmF0ZV9saW1pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRcdFx0XHQgdTMyIGJ1Y2tldF9zaXplKVxuIHtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcbiBcdGludCBpLCBlcnI7XG4gXG4rXHRxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjPSBUUlRDTV9QRUFLX01PREU7IGkrKykge1xuLVx0XHRlcnIgPSBhaXJvaGFfcWRtYV9zZXRfdHJ0Y21fY29uZmlnKGRldi1cdTAwM2VxZG1hLCBjaGFubmVsLFxuK1x0XHRlcnIgPSBhaXJvaGFfcWRtYV9zZXRfdHJ0Y21fY29uZmlnKHFkbWEsIGNoYW5uZWwsXG4gXHRcdFx0XHRcdFx0ICAgUkVHX0VHUkVTU19UUlRDTV9DRkcsIGksXG4gXHRcdFx0XHRcdFx0ICAgISFyYXRlLCBUUlRDTV9NRVRFUl9NT0RFKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0XHRlcnIgPSBhaXJvaGFfcWRtYV9zZXRfdHJ0Y21fdG9rZW5fYnVja2V0KGRldi1cdTAwM2VxZG1hLCBjaGFubmVsLFxuK1x0XHRlcnIgPSBhaXJvaGFfcWRtYV9zZXRfdHJ0Y21fdG9rZW5fYnVja2V0KHFkbWEsIGNoYW5uZWwsXG4gXHRcdFx0XHRcdFx0XHQgUkVHX0VHUkVTU19UUlRDTV9DRkcsXG4gXHRcdFx0XHRcdFx0XHQgaSwgcmF0ZSwgYnVja2V0X3NpemUpO1xuIFx0XHRpZiAoZXJyKVxuQEAgLTI4MzAsMTEgKzI5MzEsMTIgQEAgc3RhdGljIGludCBhaXJvaGFfdGNfaHRiX2FsbG9jX2xlYWZfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdHUzMiBjaGFubmVsID0gVENfSF9NSU4ob3B0LVx1MDAzZWNsYXNzaWQpICUgQUlST0hBX05VTV9RT1NfQ0hBTk5FTFM7XG4gXHRpbnQgZXJyLCBudW1fdHhfcXVldWVzID0gQUlST0hBX05VTV9UWF9SSU5HICsgY2hhbm5lbCArIDE7XG4gXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4tXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtXHUwMDNlcWRtYTtcbitcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcbiBcbiBcdC8qIEhlcmUgd2UgbmVlZCB0byBjaGVjayB0aGUgcmVxdWVzdGVkIFFETUEgY2hhbm5lbCBpcyBub3QgYWxyZWFkeVxuIFx0ICogaW4gdXNlIGJ5IGFub3RoZXIgbmV0X2RldmljZSBydW5uaW5nIG9uIHRoZSBzYW1lIFFETUEgYmxvY2suXG4gXHQgKi9cbitcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuIFx0aWYgKHRlc3RfYW5kX3NldF9iaXQoY2hhbm5lbCwgcWRtYS1cdTAwM2Vxb3NfY2hhbm5lbF9tYXApKSB7XG4gXHRcdE5MX1NFVF9FUlJfTVNHX01PRChvcHQtXHUwMDNlZXh0YWNrLFxuIFx0XHRcdFx0ICAgXCJxZG1hIHFvcyBjaGFubmVsIGFscmVhZHkgaW4gdXNlXCIpO1xuQEAgLTI4NzAsNyArMjk3Miw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfc2V0X3J4X21ldGVyKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2LFxuIFx0XHRcdFx0ICAgIHUzMiByYXRlLCB1MzIgYnVja2V0X3NpemUsXG4gXHRcdFx0XHQgICAgZW51bSB0cnRjbV91bml0X3R5cGUgdW5pdF90eXBlKVxuIHtcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cdTAwM2VxZG1hO1xuK1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcbiBcdGludCBpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShxZG1hLVx1MDAzZXFfcngpOyBpKyspIHtcbkBAIC0zMDQ1LDEwICszMTQ3LDExIEBAIHN0YXRpYyB2b2lkIGFpcm9oYV90Y19yZW1vdmVfaHRiX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBxdWV1ZSlcbiB7XG4gXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4gXHRpbnQgbnVtX3R4X3F1ZXVlcyA9IEFJUk9IQV9OVU1fVFhfUklORztcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cdTAwM2VxZG1hO1xuK1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xuIFxuIFx0YWlyb2hhX3FkbWFfc2V0X3R4X3JhdGVfbGltaXQobmV0ZGV2LCBxdWV1ZSwgMCwgMCk7XG4gXG4rXHRxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcbiBcdGNsZWFyX2JpdChxdWV1ZSwgcWRtYS1cdTAwM2Vxb3NfY2hhbm5lbF9tYXApO1xuIFx0Y2xlYXJfYml0KHF1ZXVlLCBkZXYtXHUwMDNlcW9zX3NxX2JtYXApO1xuIFxuQEAgLTMwNzQsNiArMzE3NywxMDAgQEAgc3RhdGljIGludCBhaXJvaGFfdGNfaHRiX2RlbGV0ZV9sZWFmX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIHZvaWQgYWlyb2hhX2Rpc2FibGVfcW9zX2Zvcl9nZG0zNChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuK3tcbitcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcdHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBkZXYtXHUwMDNlcG9ydDtcbitcdGludCBlcnI7XG4rXG4rXHRpZiAocG9ydC1cdTAwM2VpZCAhPSBBSVJPSEFfR0RNM19JRFggXHUwMDI2XHUwMDI2XG4rXHQgICAgcG9ydC1cdTAwM2VpZCAhPSBBSVJPSEFfR0RNNF9JRFgpXG4rXHRcdHJldHVybjtcbitcbitcdGVyciA9IGFpcm9oYV9kaXNhYmxlX2dkbTJfbG9vcGJhY2soZGV2KTtcbitcdGlmIChlcnIpXG4rXHRcdG5ldGRldl93YXJuKG5ldGRldixcbitcdFx0XHQgICAgXCJmYWlsZWQgZGlzYWJsaW5nIEdETTIgbG9vcGJhY2s6ICVkXFxuXCIsIGVycik7XG4rXG4rXHRjbGVhcl9iaXQoQUlST0hBX0RFVl9GX1dBTiwgXHUwMDI2ZGV2LVx1MDAzZWZsYWdzKTtcbitcdGFpcm9oYV9kZXZfc2V0X3FkbWEoZGV2KTtcbitcbitcdGFpcm9oYV9zZXRfbWFjYWRkcihkZXYsIG5ldGRldi1cdTAwM2VkZXZfYWRkcik7XG4rXHRhaXJvaGFfcHBlX3NldF94bWl0X2ZyYW1lX3NpemUoZGV2KTtcbitcbitcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXG4rXHRcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhkZXYtXHUwMDNlZXRoLFxuK1x0XHRcdFx0XHQgICAgUkVHX0dETV9GV0RfQ0ZHKHBvcnQtXHUwMDNlaWQpLFxuK1x0XHRcdFx0XHQgICAgRkVfUFNFX1BPUlRfUFBFMSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWlyb2hhX2VuYWJsZV9xb3NfZm9yX2dkbTM0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuK3tcbitcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqd2FuX2RldiwgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXHRzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZGV2LVx1MDAzZXBvcnQ7XG4rXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gZGV2LVx1MDAzZWV0aDtcbitcdGludCBlcnIgPSAtRUJVU1k7XG4rXG4rXHRpZiAocG9ydC1cdTAwM2VpZCAhPSBBSVJPSEFfR0RNM19JRFggXHUwMDI2XHUwMDI2XG4rXHQgICAgcG9ydC1cdTAwM2VpZCAhPSBBSVJPSEFfR0RNNF9JRFgpIHtcbitcdFx0LyogSFcgUW9TIGlzIGFsd2F5cyBzdXBwb3J0ZWQgYnkgR0RNMSBhbmQgR0RNMiAqL1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdGlmICghYWlyb2hhX2lzX2xhbl9nZG1fZGV2KGRldikpIC8qIEFscmVhZHkgZW5hYmxlZCAqL1xuK1x0XHRyZXR1cm4gMDtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2Zmxvd19vZmZsb2FkX211dGV4KTtcbitcbitcdHdhbl9kZXYgPSBhaXJvaGFfZ2V0X3dhbl9nZG1fZGV2KGV0aCk7XG4rXHRpZiAod2FuX2Rldikge1xuK1x0XHRpZiAodGVzdF9iaXQoQUlST0hBX0RFVl9GX1RYX1FPUywgXHUwMDI2d2FuX2Rldi1cdTAwM2VmbGFncykgfHxcbitcdFx0ICAgIHdhbl9kZXYtXHUwMDNlcG9ydC1cdTAwM2VpZCA9PSBBSVJPSEFfR0RNMl9JRFgpIHtcbitcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuK1x0XHRcdFx0XHQgICBcIlFvUyBjb25maWd1cmVkIGZvciBXQU4gZGV2aWNlXCIpO1xuK1x0XHRcdGdvdG8gZXJyb3JfdW5sb2NrO1xuK1x0XHR9XG4rXHRcdGFpcm9oYV9kaXNhYmxlX3Fvc19mb3JfZ2RtMzQobmV0ZGV2X2Zyb21fcHJpdih3YW5fZGV2KSk7XG4rXHR9XG4rXG4rXHRzZXRfYml0KEFJUk9IQV9ERVZfRl9XQU4sIFx1MDAyNmRldi1cdTAwM2VmbGFncyk7XG4rXHRhaXJvaGFfZGV2X3NldF9xZG1hKGRldik7XG4rXHRlcnIgPSBhaXJvaGFfZW5hYmxlX2dkbTJfbG9vcGJhY2soZGV2KTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gZXJyb3JfZGlzYWJsZV93YW47XG4rXG4rXHRlcnIgPSBhaXJvaGFfc2V0X21hY2FkZHIoZGV2LCBuZXRkZXYtXHUwMDNlZGV2X2FkZHIpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBlcnJvcl9kaXNhYmxlX2xvb3BiYWNrO1xuK1xuK1x0YWlyb2hhX2Rldl9zZXRfeG1pdF9mcmFtZV9zaXplKG5ldGRldik7XG4rXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7XG4rXHRcdHUzMiBwc2VfcG9ydDtcbitcbitcdFx0cHNlX3BvcnQgPSBhaXJvaGFfcHBlX2lzX2VuYWJsZWQoZXRoLCAxKSA/IEZFX1BTRV9QT1JUX1BQRTJcbitcdFx0XHRcdFx0XHRcdCA6IEZFX1BTRV9QT1JUX1BQRTE7XG4rXHRcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhldGgsIFJFR19HRE1fRldEX0NGRyhwb3J0LVx1MDAzZWlkKSxcbitcdFx0XHRcdFx0ICAgIHBzZV9wb3J0KTtcbitcdH1cbitcbitcdHNldF9iaXQoQUlST0hBX0RFVl9GX1RYX1FPUywgXHUwMDI2ZGV2LVx1MDAzZWZsYWdzKTtcbitcbitcdG11dGV4X3VubG9jayhcdTAwMjZmbG93X29mZmxvYWRfbXV0ZXgpO1xuK1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyb3JfZGlzYWJsZV9sb29wYmFjazpcbitcdGFpcm9oYV9kaXNhYmxlX2dkbTJfbG9vcGJhY2soZGV2KTtcbitlcnJvcl9kaXNhYmxlX3dhbjpcbitcdGNsZWFyX2JpdChBSVJPSEFfREVWX0ZfV0FOLCBcdTAwMjZkZXYtXHUwMDNlZmxhZ3MpO1xuK1x0YWlyb2hhX2Rldl9zZXRfcWRtYShkZXYpO1xuK2Vycm9yX3VubG9jazpcbitcdG11dGV4X3VubG9jayhcdTAwMjZmbG93X29mZmxvYWRfbXV0ZXgpO1xuK1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4gc3RhdGljIGludCBhaXJvaGFfdGNfaHRiX2Rlc3Ryb3koc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB7XG4gXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG5AQCAtMzA4Miw2ICszMjc5LDggQEAgc3RhdGljIGludCBhaXJvaGFfdGNfaHRiX2Rlc3Ryb3koc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdGZvcl9lYWNoX3NldF9iaXQocSwgZGV2LVx1MDAzZXFvc19zcV9ibWFwLCBBSVJPSEFfTlVNX1FPU19DSEFOTkVMUylcbiBcdFx0YWlyb2hhX3RjX3JlbW92ZV9odGJfcXVldWUobmV0ZGV2LCBxKTtcbiBcbitcdGNsZWFyX2JpdChBSVJPSEFfREVWX0ZfVFhfUU9TLCBcdTAwMjZkZXYtXHUwMDNlZmxhZ3MpO1xuK1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTMxMDEsMjQgKzMzMDAsMjQgQEAgc3RhdGljIGludCBhaXJvaGFfdGNfZ2V0X2h0Yl9nZXRfbGVhZl9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgYWlyb2hhX3RjX3NldHVwX3FkaXNjX2h0YihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuK3N0YXRpYyBpbnQgYWlyb2hhX3RjX3NldHVwX3FkaXNjX2h0YihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3QgdGNfaHRiX3FvcHRfb2ZmbG9hZCAqb3B0KVxuIHtcbiBcdHN3aXRjaCAob3B0LVx1MDAzZWNvbW1hbmQpIHtcbiBcdGNhc2UgVENfSFRCX0NSRUFURTpcbi1cdFx0YnJlYWs7XG4rXHRcdHJldHVybiBhaXJvaGFfZW5hYmxlX3Fvc19mb3JfZ2RtMzQobmV0ZGV2LCBvcHQtXHUwMDNlZXh0YWNrKTtcbiBcdGNhc2UgVENfSFRCX0RFU1RST1k6XG4tXHRcdHJldHVybiBhaXJvaGFfdGNfaHRiX2Rlc3Ryb3koZGV2KTtcbitcdFx0cmV0dXJuIGFpcm9oYV90Y19odGJfZGVzdHJveShuZXRkZXYpO1xuIFx0Y2FzZSBUQ19IVEJfTk9ERV9NT0RJRlk6XG4tXHRcdHJldHVybiBhaXJvaGFfdGNfaHRiX21vZGlmeV9xdWV1ZShkZXYsIG9wdCk7XG4rXHRcdHJldHVybiBhaXJvaGFfdGNfaHRiX21vZGlmeV9xdWV1ZShuZXRkZXYsIG9wdCk7XG4gXHRjYXNlIFRDX0hUQl9MRUFGX0FMTE9DX1FVRVVFOlxuLVx0XHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9hbGxvY19sZWFmX3F1ZXVlKGRldiwgb3B0KTtcbitcdFx0cmV0dXJuIGFpcm9oYV90Y19odGJfYWxsb2NfbGVhZl9xdWV1ZShuZXRkZXYsIG9wdCk7XG4gXHRjYXNlIFRDX0hUQl9MRUFGX0RFTDpcbiBcdGNhc2UgVENfSFRCX0xFQUZfREVMX0xBU1Q6XG4gXHRjYXNlIFRDX0hUQl9MRUFGX0RFTF9MQVNUX0ZPUkNFOlxuLVx0XHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9kZWxldGVfbGVhZl9xdWV1ZShkZXYsIG9wdCk7XG4rXHRcdHJldHVybiBhaXJvaGFfdGNfaHRiX2RlbGV0ZV9sZWFmX3F1ZXVlKG5ldGRldiwgb3B0KTtcbiBcdGNhc2UgVENfSFRCX0xFQUZfUVVFUllfUVVFVUU6XG4tXHRcdHJldHVybiBhaXJvaGFfdGNfZ2V0X2h0Yl9nZXRfbGVhZl9xdWV1ZShkZXYsIG9wdCk7XG4rXHRcdHJldHVybiBhaXJvaGFfdGNfZ2V0X2h0Yl9nZXRfbGVhZl9xdWV1ZShuZXRkZXYsIG9wdCk7XG4gXHRkZWZhdWx0OlxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmhcbmluZGV4IGZlOTM0ZjlmZmU4YTExLi5lNmZiZDQyY2Y5NjQyOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmhcbkBAIC01NzAsMjQgKzU3MCwzMSBAQCBzdHJ1Y3QgYWlyb2hhX3FkbWEge1xuIFx0REVDTEFSRV9CSVRNQVAocW9zX2NoYW5uZWxfbWFwLCBBSVJPSEFfTlVNX1FPU19DSEFOTkVMUyk7XG4gfTtcbiBcbi1lbnVtIGFpcm9oYV9wcml2X2ZsYWdzIHtcbi1cdEFJUk9IQV9QUklWX0ZfV0FOID0gQklUKDApLFxuK2VudW0gYWlyb2hhX2Rldl9mbGFncyB7XG4rXHRBSVJPSEFfREVWX0ZfV0FOLFxuK1x0QUlST0hBX0RFVl9GX1RYX1FPUyxcbiB9O1xuIFxuIHN0cnVjdCBhaXJvaGFfZ2RtX2RldiB7XG4rXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgX19yY3UgKnFkbWE7XG4gXHRzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0O1xuLVx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xuIFx0c3RydWN0IGFpcm9oYV9ldGggKmV0aDtcbiBcbiBcdERFQ0xBUkVfQklUTUFQKHFvc19zcV9ibWFwLCBBSVJPSEFfTlVNX1FPU19DSEFOTkVMUyk7XG4tXHQvKiBxb3Mgc3RhdHMgY291bnRlcnMgKi9cbi1cdHU2NCBjcHVfdHhfcGFja2V0cztcbi1cdHU2NCBmd2RfdHhfcGFja2V0cztcbitcdHN0cnVjdCB7XG4rXHRcdHUzMiBjcHVfdHhfcGFja2V0cztcbitcdFx0dTMyIGZ3ZF90eF9wYWNrZXRzO1xuK1x0fSBxb3Nfc3RhdHNbQUlST0hBX05VTV9RT1NfQ0hBTk5FTFNdO1xuIFxuLVx0dTMyIGZsYWdzO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdGludCBuYnE7XG4gXG4gXHRzdHJ1Y3QgYWlyb2hhX2h3X3N0YXRzIHN0YXRzO1xuK1xuK1x0c3RydWN0IHtcbitcdFx0YXRvbWljX3QgYnl0ZXM7XG4rXHRcdGF0b21pY190IHBrdHM7XG4rXHR9IGJxbFtBSVJPSEFfTlVNX05FVERFVl9UWF9SSU5HU107XG4gfTtcbiBcbiBzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0IHtcbkBAIC02OTQsNyArNzAxLDcgQEAgc3RhdGljIGlubGluZSB1MTYgYWlyb2hhX3FkbWFfZ2V0X3R4cShzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEsIHUxNiBxaWQpXG4gXG4gc3RhdGljIGlubGluZSBib29sIGFpcm9oYV9pc19sYW5fZ2RtX2RldihzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcbiB7XG4tXHRyZXR1cm4gIShkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IEFJUk9IQV9QUklWX0ZfV0FOKTtcbitcdHJldHVybiAhdGVzdF9iaXQoQUlST0hBX0RFVl9GX1dBTiwgXHUwMDI2ZGV2LVx1MDAzZWZsYWdzKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBib29sIGFpcm9oYV9pc183NTgxKHN0cnVjdCBhaXJvaGFfZXRoICpldGgpXG5AQCAtNzExLDYgKzcxOCwxNiBAQCBpbnQgYWlyb2hhX2dldF9mZV9wb3J0KHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KTtcbiBib29sIGFpcm9oYV9pc192YWxpZF9nZG1fZGV2KHN0cnVjdCBhaXJvaGFfZXRoICpldGgsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldik7XG4gXG4rZXh0ZXJuIHN0cnVjdCBtdXRleCBmbG93X29mZmxvYWRfbXV0ZXg7XG4rXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgYWlyb2hhX3FkbWEgKlxuK2Fpcm9oYV9xZG1hX2RlcmVmKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxuK3tcbitcdHJldHVybiByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGRldi1cdTAwM2VxZG1hLFxuK1x0XHRcdFx0XHQgbG9ja2RlcF9ydG5sX2lzX2hlbGQoKSB8fFxuK1x0XHRcdFx0XHQgbG9ja2RlcF9pc19oZWxkKFx1MDAyNmZsb3dfb2ZmbG9hZF9tdXRleCkpO1xuK31cbitcbiB2b2lkIGFpcm9oYV9wcGVfc2V0X3htaXRfZnJhbWVfc2l6ZShzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldik7XG4gdm9pZCBhaXJvaGFfcHBlX3NldF9jcHVfcG9ydChzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiwgdTggcHBlX2lkLCB1OCBmcG9ydCk7XG4gYm9vbCBhaXJvaGFfcHBlX2lzX2VuYWJsZWQoc3RydWN0IGFpcm9oYV9ldGggKmV0aCwgaW50IGluZGV4KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xuaW5kZXggZTRjMzY0NGRkNmVjN2EuLjMzZGRmMGQwNzg1NTM5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xuQEAgLTE1LDcgKzE1LDEwIEBAXG4gI2luY2x1ZGUgXCJhaXJvaGFfcmVncy5oXCJcbiAjaW5jbHVkZSBcImFpcm9oYV9ldGguaFwiXG4gXG4tc3RhdGljIERFRklORV9NVVRFWChmbG93X29mZmxvYWRfbXV0ZXgpO1xuKy8qIFNlcmlhbGl6ZSBhaXJvaGFfZ2RtX2RldiBmbGFncywgUURNQSBwb2ludGVyIGFuZCBQUEUgQ1BVIHBvcnRcbisgKiBjb25maWd1cmF0aW9uLlxuKyAqL1xuK0RFRklORV9NVVRFWChmbG93X29mZmxvYWRfbXV0ZXgpO1xuIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0socHBlX2xvY2spO1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgYWlyb2hhX2Zsb3dfdGFibGVfcGFyYW1zID0ge1xuQEAgLTg2LDggKzg5LDggQEAgc3RhdGljIHUzMiBhaXJvaGFfcHBlX2dldF90aW1lc3RhbXAoc3RydWN0IGFpcm9oYV9wcGUgKnBwZSlcbiBcbiB2b2lkIGFpcm9oYV9wcGVfc2V0X2NwdV9wb3J0KHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2LCB1OCBwcGVfaWQsIHU4IGZwb3J0KVxuIHtcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cdTAwM2VxZG1hO1xuLVx0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IHFkbWEtXHUwMDNlZXRoO1xuK1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcbitcdHN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBkZXYtXHUwMDNlZXRoO1xuIFx0dTggcWRtYV9pZCA9IHFkbWEgLSBcdTAwMjZldGgtXHUwMDNlcWRtYVswXTtcbiBcdHUzMiBmZV9jcHVfcG9ydDtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcmVncy5oXG5pbmRleCA2ZmVkNjNkMDEzYjQxMi4uNDQyYjQ4YzliOTkxZWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9yZWdzLmhcbkBAIC0zNzUsNiArMzc1LDcgQEBcbiBcbiAjZGVmaW5lIFJFR19TUkNfUE9SVF9GQ19NQVA2XHRcdDB4MjI5OFxuICNkZWZpbmUgRkNfSURfT0ZfU1JDX1BPUlRfTUFTSyhfbilcdEdFTk1BU0soNCArICgoX24pIFx1MDAzY1x1MDAzYyAzKSwgKChfbikgXHUwMDNjXHUwMDNjIDMpKVxuKyNkZWZpbmUgRkNfTUFQNl9ERUZfVkFMVUVcdFx0MHgxYjFhMTkxOFxuIFxuICNkZWZpbmUgUkVHX1dBTl9NVFUwXHRcdFx0MHgyMzAwXG4gI2RlZmluZSBXQU5fTVRVMV9NQVNLXHRcdFx0R0VOTUFTSygyOSwgMTYpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQyMDowMjo0NC44NDU2MTY3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI5ODI5MDI1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEFpcm9oYSBFdGhlcm5ldCBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGZvciB0aGUgYGFpcm9oYWAgZXRoZXJuZXQgZHJpdmVyLCBzcGVjaWZpY2FsbHkgZm9yIEFpcm9oYSBFTjc1ODEgU29Dcy4gSXQgdG91Y2hlcyBhIGZldyBjcml0aWNhbCBhcmVhcyDigJMgdGhlIFFETUEgaGFuZGxpbmcsIHdoaWNoIGxvb2tzIGxpa2UgaXQncyBnZXR0aW5nIGFuIFJDVSB1cGRhdGUgZm9yIGBkZXYtXHUwMDNlcWRtYWAsIGFuZCBzb21lIGludGVyZXN0aW5nIGFkZGl0aW9ucyBsaWtlIFFvUyBzdXBwb3J0IGZvciBHRE0zIGFuZCBHRE00LiAgSXQncyBhbHNvIHVwZGF0aW5nIEJRTCBoYW5kbGluZywgd2hpY2ggaXMgYWx3YXlzIGdvb2QgdG8gc2VlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlxuXG5BaXJvaGEgaXMgYSBuZXR3b3JraW5nIFNvQywgbGlrZWx5IEFSTTY0LCBhbmQgdGhlIGRyaXZlciBpcyAqc3BlY2lmaWMqIHRvIHRoYXQgU29DLiAgR2VuZXJhbGx5LCB0aGVzZSBTb0Mtc3BlY2lmaWMgZXRoZXJuZXQgZHJpdmVycyDigJMgc2ltaWxhciB0byB3aGF0IHlvdSBzZWUgd2l0aCBNZWRpYVRlayBhbmQgb3RoZXJzIOKAkyByZWx5IG9uIHRoZSBwaHlzaWNhbCBoYXJkd2FyZSBvciBzcGVjaWZpYyBwbGF0Zm9ybSBkZXZpY2VzIGZvciB0aGUgcHJvYmUgdG8gc3VjY2VlZC4gU28sIEkgbmVlZCB0byBrbm93IGlmIEkgY2FuIGV2ZW4gdGVzdCB0aGlzIGluIFFFTVUuIElzIHRoaXMgYSBwbGF0Zm9ybSBkcml2ZXI/XG5cblRvIGZpZ3VyZSB0aGlzIG91dCwgSSdsbCBsZXZlcmFnZSB0aGUgYGRlZmF1bHRfYXBpOmdyZXBwZXJgIGFuZCBzZWFyY2ggZm9yIHRoZSBkcml2ZXIgcmVnaXN0cmF0aW9uLiBUaGF0IHNob3VsZCBxdWlja2x5IHRlbGwgbWUgaWYgaXQgcmVsaWVzIG9uIGEgc3BlY2lmaWMgZGV2aWNlIHRyZWUsIG9yIGlmIGl0IGhhcyBzb21lIGtpbmQgb2YgYnJvYWRlciBhcHBsaWNhYmlsaXR5LiBUaGF0J3MgdGhlIGZpcnN0IHN0ZXAgaW4gZGV0ZXJtaW5pbmcgaG93IGVhc2lseSB0aGlzIHBhdGNoIGNhbiBiZSBldmFsdWF0ZWQgaW4gYSB0ZXN0aW5nIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTA2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjA6MDI6NTAuMTQzOTA5MzI3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5MzQ2MjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1vZHVsZV9wbGF0Zm9ybV9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jPTM5NTY9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYWlyb2hhX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMzk2My19O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM6Mzk2NDptb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGFpcm9oYV9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMzk2NS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM9ODEzPXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGFpcm9oYV9ucHVfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy04MjAtfTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjgyMTptb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGFpcm9oYV9ucHVfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTgyMi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjA6MDI6NTAuMjAzMjY2Nzk0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODUwMTYxMDA2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBc3Nlc3NtZW50IG9mIHRoZSBBaXJvaGEgRXRoZXJuZXQgRHJpdmVyJ3MgRnV6emFiaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBsYXRmb3JtIGRyaXZlciwgYGFpcm9oYV9ldGguY2AsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCdzIGdvaW5nIHRvIGJlIGEgdG91Z2ggbnV0IHRvIGNyYWNrIGZvciBmdXp6aW5nLiBQbGF0Zm9ybSBkcml2ZXJzLCBlc3BlY2lhbGx5IHRob3NlIHRpZWQgdG8gc3BlY2lmaWMgU29DcyBsaWtlIHRoZSBBaXJvaGEgRU43NTgxLCB0eXBpY2FsbHkgbmVlZCBhIGRldmljZSB0cmVlIG5vZGUgdG8gcHJvYmUgcHJvcGVybHksIHJpZ2h0PyBBbmQgUUVNVSwgYXMgZmFyIGFzIEkga25vdywgZG9lc24ndCBuYXRpdmVseSBlbXVsYXRlIHRoaXMgcGFydGljdWxhciBBaXJvaGEgaGFyZHdhcmUgb3IgaXRzIGFzc29jaWF0ZWQgZXRoZXJuZXQgY29udHJvbGxlcnMuXG5cbk15IGZpcnN0IHF1ZXN0aW9uIGlzIGFsd2F5cywgXCJJcyB0aGVyZSBhbnkgc25lYWt5IHdheSB0byBnZXQgYXQgdGhpcyB0aHJvdWdoIGEgdmlydHVhbCBkZXZpY2Ugb3Igc29tZSBraW5kIG9mIG1vY2tpbmc/XCIgQnV0LCByZWFsaXN0aWNhbGx5LCBwbGF0Zm9ybSBkcml2ZXJzIGZvciBzcGVjaWZpYyBoYXJkd2FyZSBhcmUgcmFyZWx5IGZ1enphYmxlIHVubGVzcyB5b3UgaGF2ZSBhIGN1c3RvbSBlbXVsYXRvciBvciB0aGV5J3JlIHBhcnQgb2YgYSBtb3JlIGdlbmVyaWMsIG1vY2thYmxlIGZyYW1ld29yay4gU3l6a2FsbGVyJ3Mgbm90IGdvaW5nIHRvIGhlbHAgaGVyZSBlaXRoZXIsIGFzIGl0IGRvZXNuJ3QgZW11bGF0ZSB0aGUgQWlyb2hhIFNvQ3MuXG5cbkxldCBtZSB0YWtlIGEgbG9vayBhdCB0aGUgZnVuY3Rpb25zIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcuIEFoYSwgdGhlIHBhdGNoIGlzIGNoYW5naW5nIHRoaW5ncyBpbiBgYWlyb2hhX3FkbWFfd2FrZV9uZXRkZXZfdHhxc2AsIGBhaXJvaGFfcWRtYV90eF9uYXBpX3BvbGxgLCBgYWlyb2hhX2Rldl9vcGVuYCwgYGFpcm9oYV9kZXZfc3RvcGAsIGBhaXJvaGFfZW5hYmxlX2dkbTJfbG9vcGJhY2tgLCBgYWlyb2hhX2Rpc2FibGVfZ2RtMl9sb29wYmFja2AsIGBhaXJvaGFfZGV2X3NldF9xZG1hYCwgYGFpcm9oYV9kZXZfaW5pdGAsIGBhaXJvaGFfZGV2X3htaXRgLCBgYWlyb2hhX3FkbWFfc2V0X2NoYW5fdHhfc2NoZWRgLCBgYWlyb2hhX3FkbWFfZ2V0X3R4X2V0c19zdGF0c2AsIGBhaXJvaGFfcWRtYV9zZXRfdHhfcmF0ZV9saW1pdGAsIGBhaXJvaGFfdGNfaHRiX2FsbG9jX2xlYWZfcXVldWVgLCBgYWlyb2hhX3FkbWFfc2V0X3J4X21ldGVyYCwgYGFpcm9oYV90Y19yZW1vdmVfaHRiX3F1ZXVlYCwgYGFpcm9oYV90Y19odGJfZGVsZXRlX2xlYWZfcXVldWVgLCBgYWlyb2hhX2Rpc2FibGVfcW9zX2Zvcl9nZG0zNGAsIGBhaXJvaGFfZW5hYmxlX3Fvc19mb3JfZ2RtMzRgLCBgYWlyb2hhX3RjX2h0Yl9kZXN0cm95YCwgYGFpcm9oYV90Y19nZXRfaHRiX2dldF9sZWFmX3F1ZXVlYCwgYGFpcm9oYV90Y19zZXR1cF9xZGlzY19odGJgLiBZZWFoLCB0aG9zZSBhcmUgYWxsIHNjcmVhbWluZyBcIkFpcm9oYSBldGhlcm5ldCBkcml2ZXJcIiB0byBtZS5cblxuQmFzZWQgb24gdGhpcywgaXQncyBjbGVhciB0aGlzIGlzIGEgcGxhdGZvcm0gZHJpdmVyIGRlZXBseSB0aWVkIHRvIHRoZSBBaXJvaGEgU29DLiBUaGlzIG1lYW5zIGl0IG5lZWRzIHJlYWwgaGFyZHdhcmUgb3IgYSB2ZXJ5IHNwZWNpZmljIGVtdWxhdG9yIHRvIGJlIHByb2JlZCBhbmQgZXhlY3V0ZWQuIFNpbmNlIFFFTVUsIGFuZCB0aGVyZWZvcmUgZW52aXJvbm1lbnRzIGxpa2UgR0NFLCBhcmVuJ3QgZ29pbmcgdG8gY3V0IGl0LCBJJ20gZ29pbmcgdG8gaGF2ZSB0byBjb25jbHVkZSB0aGF0IHJlYWNoaW5nIHRoaXMgY29kZSBpcyBpbXBvc3NpYmxlIGluIGEgdmlydHVhbGl6ZWQgc2V0dGluZy5cblxuVGhlcmVmb3JlLCBJJ20gZ29pbmcgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgcmF0aW9uYWxlIGlzIHN0cmFpZ2h0Zm9yd2FyZDogaXQncyBhIGhhcmR3YXJlLXNwZWNpZmljIHBsYXRmb3JtIGRyaXZlciBmb3IgYW4gQWlyb2hhIFNvQywgYW5kIGl0IGNhbm5vdCBiZSBwcm9iZWQgb3IgZXhlY3V0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgZW52aXJvbm1lbnRzLiBUaGVyZSdzIG5vIGVmZmVjdGl2ZSBwYXRoIHRvIGZ1enogaXQgaW4gYSBwcmFjdGljYWwgd2F5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTkwOCwiT3V0cHV0VG9rZW5zIjoxMDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMjA6MDI6NTguNzA0ODc5NzY5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTM1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQWlyb2hhIGV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhLyksIHdoaWNoIGlzIGEgcGxhdGZvcm0gZHJpdmVyIHNwZWNpZmljIHRvIEFpcm9oYSBTb0NzIChlLmcuLCBFTjc1ODEpLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudHMsIG1lYW5pbmcgdGhlIGRyaXZlciBjYW5ub3QgYmUgcHJvYmVkIGFuZCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQWlyb2hhIGV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhLyksIHdoaWNoIGlzIGEgcGxhdGZvcm0gZHJpdmVyIHNwZWNpZmljIHRvIEFpcm9oYSBTb0NzIChlLmcuLCBFTjc1ODEpLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudHMsIG1lYW5pbmcgdGhlIGRyaXZlciBjYW5ub3QgYmUgcHJvYmVkIGFuZCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2fb6q[1] Phase: Running StartedAt: 2026-07-25 20:03:20 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2fb6q[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-25 20:03:20 +0000 UTC FinishedAt: 2026-07-25 20:03:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}