Name: series-workflowt7h58 Phase: Failed StartedAt: 2026-07-26 18:32:29 +0000 UTC FinishedAt: 2026-07-26 18:54:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt7h58[0] Phase: Succeeded StartedAt: 2026-07-26 18:32:29 +0000 UTC FinishedAt: 2026-07-26 18:54:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt7h58[0].run-triage Phase: Succeeded StartedAt: 2026-07-26 18:32:29 +0000 UTC FinishedAt: 2026-07-26 18:54:27 +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+CgkJCTx0ZD4yMDI2LzA3LzI2IDE4OjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBaXJvaGEgU29DIEdpZ2FiaXQgRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEpLiBUaGlzIGlzIGEgcGxhdGZvcm0gZHJpdmVyIGZvciBzcGVjaWZpYyBBaXJvaGEgU29DcyAoZS5nLiwgZW43NTgxLCBhbjc1ODMpIHdoaWNoIGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgZW52aXJvbm1lbnRzLiBCZWNhdXNlIHRoZSBoYXJkd2FyZSBpcyBub3QgcHJlc2VudCBvciBlbXVsYXRlZCwgdGhlIGRyaXZlciB3aWxsIG5vdCBwcm9iZSBhbmQgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE4OjUzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNGNhYmNiYTM0ZDAwMzBhNzdlN2E5NTNlZmVhMGNhNTM1Y2ZlM2QwOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gSnVsIDI2IDE4OjUzOjM4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jXG5pbmRleCA3OTQxOGU2ODJmNzFmMy4uZGJhN2M1MmMwODk2OTAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jXG5AQCAtOTM0LDcgJiM0Mzs5MzQsNyBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfcWRtYV93YWtlX25ldGRldl90eHFzKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEpXG4gXHRcdFx0aWYgKCFkZXYpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0XHRpZiAoZGV2LVx1MDAzZXFkbWEgIT0gcWRtYSlcbiYjNDM7XHRcdFx0aWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihkZXYtXHUwMDNlcWRtYSkgIT0gcWRtYSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRcdG5ldGRldiA9IG5ldGRldl9mcm9tX3ByaXYoZGV2KTtcbkBAIC0xMDM4LDEwICYjNDM7MTAzOCwxNiBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3R4X25hcGlfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpXG4gXHRcdHEtXHUwMDNlcXVldWVkLS07XG4gXG4gXHRcdGlmIChza2IpIHtcbiYjNDM7XHRcdFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihza2ItXHUwMDNlZGV2KTtcbiYjNDM7XHRcdFx0dTE2IHFpZHggPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTtcbiBcdFx0XHRzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHE7XG4gXG4gXHRcdFx0dHhxID0gc2tiX2dldF90eF9xdWV1ZShza2ItXHUwMDNlZGV2LCBza2IpO1xuJiM0MztcbiYjNDM7XHRcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmRldi1cdTAwM2V0eHFfbG9ja1txaWR4XSk7XG4gXHRcdFx0bmV0ZGV2X3R4X2NvbXBsZXRlZF9xdWV1ZSh0eHEsIDEsIHNrYi1cdTAwM2VsZW4pO1xuJiM0MztcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZkZXYtXHUwMDNldHhxX2xvY2tbcWlkeF0pO1xuJiM0MztcbiBcdFx0XHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuIFx0XHR9XG4gXG5AQCAtMTkwNSw4ICYjNDM7MTkxMSw4IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4ge1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGRldi1cdTAwM2Vwb3J0O1xuLVx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LVx1MDAzZXFkbWE7XG4gXHR1MzIgcHNlX3BvcnQgPSBGRV9QU0VfUE9SVF9QUEUxO1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcbiBcdGludCBlcnI7XG4gXG4gXHRuZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKG5ldGRldik7XG5AQCAtMTkxNCw2ICYjNDM7MTkyMCw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuJiM0MztcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuIFx0aWYgKG5ldGRldl91c2VzX2RzYShuZXRkZXYpKVxuIFx0XHRhaXJvaGFfZmVfc2V0KHFkbWEtXHUwMDNlZXRoLCBSRUdfR0RNX0lOR1JFU1NfQ0ZHKHBvcnQtXHUwMDNlaWQpLFxuIFx0XHRcdCAgICAgIEdETV9TVEFHX0VOX01BU0spO1xuQEAgLTE5MzcsNyAmIzQzOzE5NDQsNiBAQCBzdGF0aWMgaW50IGFpcm9oYV9kZXZfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIHtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBkZXYtXHUwMDNlcG9ydDtcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cdTAwM2VxZG1hO1xuIFxuIFx0bmV0aWZfdHhfZGlzYWJsZShuZXRkZXYpO1xuIFx0YWlyb2hhX3NldF92aXBfZm9yX2dkbV9wb3J0KGRldiwgZmFsc2UpO1xuQEAgLTE5NDUsNyAmIzQzOzE5NTEsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9kZXZfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0aWYgKC0tcG9ydC1cdTAwM2V1c2VycylcbiBcdFx0YWlyb2hhX3BwZV9zZXRfeG1pdF9mcmFtZV9zaXplKGRldik7XG4gXHRlbHNlXG4tXHRcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhxZG1hLVx1MDAzZWV0aCxcbiYjNDM7XHRcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhkZXYtXHUwMDNlZXRoLFxuIFx0XHRcdFx0XHQgICAgUkVHX0dETV9GV0RfQ0ZHKHBvcnQtXHUwMDNlaWQpLFxuIFx0XHRcdFx0XHQgICAgRkVfUFNFX1BPUlRfRFJPUCk7XG4gXHRyZXR1cm4gMDtcbkBAIC0yMDI4LDYgJiM0MzsyMDM0LDUzIEBAIHN0YXRpYyBpbnQgYWlyb2hhX2VuYWJsZV9nZG0yX2xvb3BiYWNrKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGFpcm9oYV9kaXNhYmxlX2dkbTJfbG9vcGJhY2soc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZGV2LVx1MDAzZXBvcnQ7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IGRldi1cdTAwM2VldGg7XG4mIzQzO1x0aW50IGksIHNyY19wb3J0O1xuJiM0MztcdHUzMiBwc2VfcG9ydDtcbiYjNDM7XG4mIzQzO1x0c3JjX3BvcnQgPSBldGgtXHUwMDNlc29jLVx1MDAzZW9wcy5nZXRfc3BvcnQoZGV2LVx1MDAzZXBvcnQsIGRldi1cdTAwM2VuYnEpO1xuJiM0MztcdGlmIChzcmNfcG9ydCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBzcmNfcG9ydDtcbiYjNDM7XG4mIzQzO1x0YWlyb2hhX2ZlX2NsZWFyKGV0aCxcbiYjNDM7XHRcdFx0UkVHX1NQX0RGVF9DUE9SVChzcmNfcG9ydCBcdTAwM2VcdTAwM2UgZmxzKFNQX0NQT1JUX0RGVF9NQVNLKSksXG4mIzQzO1x0XHRcdFNQX0NQT1JUX01BU0soc3JjX3BvcnQgXHUwMDI2IFNQX0NQT1JUX0RGVF9NQVNLKSk7XG4mIzQzO1xuJiM0MztcdGFpcm9oYV9mZV9zZXQoZXRoLCBSRUdfR0RNX0ZXRF9DRkcoQUlST0hBX0dETTJfSURYKSxcbiYjNDM7XHRcdCAgICAgIEdETV9TVFJJUF9DUkNfTUFTSyk7XG4mIzQzO1x0YWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKGV0aCwgUkVHX0dETV9GV0RfQ0ZHKEFJUk9IQV9HRE0yX0lEWCksXG4mIzQzO1x0XHRcdFx0ICAgIEZFX1BTRV9QT1JUX0RST1ApO1xuJiM0MztcdGFpcm9oYV9mZV9jbGVhcihldGgsIFJFR19HRE1fTFBCS19DRkcoQUlST0hBX0dETTJfSURYKSxcbiYjNDM7XHRcdFx0TFBCS19DSEFOX01BU0sgfCBMUEJLX01PREVfTUFTSyB8IExQQktfRU5fTUFTSyk7XG4mIzQzO1x0cHNlX3BvcnQgPSBhaXJvaGFfcHBlX2lzX2VuYWJsZWQoZXRoLCAxKSA/IEZFX1BTRV9QT1JUX1BQRTJcbiYjNDM7XHRcdFx0XHRcdFx0IDogRkVfUFNFX1BPUlRfUFBFMTtcbiYjNDM7XHRhaXJvaGFfc2V0X2dkbV9wb3J0X2Z3ZF9jZmcoZXRoLCBSRUdfR0RNX0ZXRF9DRkcoQUlST0hBX0dETTJfSURYKSxcbiYjNDM7XHRcdFx0XHQgICAgcHNlX3BvcnQpO1xuJiM0MztcbiYjNDM7XHRhaXJvaGFfZmVfcm13KGV0aCwgUkVHX0ZFX1dBTl9QT1JULCBXQU4wX01BU0ssXG4mIzQzO1x0XHQgICAgICBGSUVMRF9QUkVQKFdBTjBfTUFTSywgQUlST0hBX0dETTJfSURYKSk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGV0aC1cdTAwM2Vzb2MtXHUwMDNlbnVtX3BwZTsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRhaXJvaGFfZmVfY2xlYXIoZXRoLCBSRUdfUFBFX0RGVF9DUE9SVChpLCBBSVJPSEFfR0RNMl9JRFgpLFxuJiM0MztcdFx0XHRcdERGVF9DUE9SVF9NQVNLKEFJUk9IQV9HRE0yX0lEWCkpO1xuJiM0MztcbiYjNDM7XHQvKiBFbmFibGUgVklQIGFuZCBJRkMgZm9yIEdETTIgKi9cbiYjNDM7XHRhaXJvaGFfZmVfc2V0KGV0aCwgUkVHX0ZFX1ZJUF9QT1JUX0VOLCBCSVQoQUlST0hBX0dETTJfSURYKSk7XG4mIzQzO1x0YWlyb2hhX2ZlX3NldChldGgsIFJFR19GRV9JRkNfUE9SVF9FTiwgQklUKEFJUk9IQV9HRE0yX0lEWCkpO1xuJiM0MztcbiYjNDM7XHRpZiAocG9ydC1cdTAwM2VpZCA9PSBBSVJPSEFfR0RNNF9JRFggXHUwMDI2XHUwMDI2IGFpcm9oYV9pc183NTgxKGV0aCkpIHtcbiYjNDM7XHRcdHUzMiBtYXNrID0gRkNfSURfT0ZfU1JDX1BPUlRfTUFTSyhkZXYtXHUwMDNlbmJxKTtcbiYjNDM7XG4mIzQzO1x0XHRhaXJvaGFfZmVfcm13KGV0aCwgUkVHX1NSQ19QT1JUX0ZDX01BUDYsIG1hc2ssXG4mIzQzO1x0XHRcdCAgICAgIEZDX01BUDZfREVGX1ZBTFVFIFx1MDAyNiBtYXNrKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKlxuIGFpcm9oYV9nZXRfd2FuX2dkbV9kZXYoc3RydWN0IGFpcm9oYV9ldGggKmV0aClcbiB7XG5AQCAtMjA1NCwxNSAmIzQzOzIxMDcsMzcgQEAgYWlyb2hhX2dldF93YW5fZ2RtX2RldihzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoKVxuIHN0YXRpYyB2b2lkIGFpcm9oYV9kZXZfc2V0X3FkbWEoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpXG4ge1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IG5ldGRldl9mcm9tX3ByaXYoZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKmN1cl9xZG1hLCAqcWRtYTtcbiBcdHN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBkZXYtXHUwMDNlZXRoO1xuLVx0aW50IHBwZV9pZDtcbiYjNDM7XHRpbnQgaSwgcHBlX2lkO1xuIFxuIFx0LyogUURNQTAgaXMgdXNlZCBmb3IgbGFuIHBvcnRzIHdoaWxlIFFETUExIGlzIHVzZWQgZm9yIFdBTiBwb3J0cyAqL1xuLVx0ZGV2LVx1MDAzZXFkbWEgPSBcdTAwMjZldGgtXHUwMDNlcWRtYVshYWlyb2hhX2lzX2xhbl9nZG1fZGV2KGRldildO1xuLVx0bmV0ZGV2LVx1MDAzZWlycSA9IGRldi1cdTAwM2VxZG1hLVx1MDAzZWlycV9iYW5rc1swXS5pcnE7XG4mIzQzO1x0cWRtYSA9IFx1MDAyNmV0aC1cdTAwM2VxZG1hWyFhaXJvaGFfaXNfbGFuX2dkbV9kZXYoZGV2KV07XG4mIzQzO1x0Y3VyX3FkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAoY3VyX3FkbWEpXG4mIzQzO1x0XHRuZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTtcbiYjNDM7XG4mIzQzO1x0cmN1X2Fzc2lnbl9wb2ludGVyKGRldi1cdTAwM2VxZG1hLCBxZG1hKTtcbiYjNDM7XHRuZXRkZXYtXHUwMDNlaXJxID0gcWRtYS1cdTAwM2VpcnFfYmFua3NbMF0uaXJxO1xuJiM0MztcdHN5bmNocm9uaXplX3JjdSgpO1xuIFxuIFx0cHBlX2lkID0gIWFpcm9oYV9pc19sYW5fZ2RtX2RldihkZXYpIFx1MDAyNlx1MDAyNiBhaXJvaGFfcHBlX2lzX2VuYWJsZWQoZXRoLCAxKTtcbiBcdGFpcm9oYV9wcGVfc2V0X2NwdV9wb3J0KGRldiwgcHBlX2lkLCBhaXJvaGFfZ2V0X2ZlX3BvcnQoZGV2KSk7XG4mIzQzO1xuJiM0MztcdC8qIFNlZWQgcW9zX3N0YXRzIGJhc2VsaW5lcyB3aXRoIHRoZSBuZXcgUURNQSBibG9jayYjMzk7cyBjdXJyZW50XG4mIzQzO1x0ICogY291bnRlciB2YWx1ZXMgdG8gYXZvaWQgYSBzcHVyaW91cyBzcGlrZSBvbiB0aGUgZmlyc3Qgc3RhdHNcbiYjNDM7XHQgKiBxdWVyeSBhZnRlciBpbml0IG9yIG1pZ3JhdGlvbi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGRldi1cdTAwM2Vxb3Nfc3RhdHMpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0ZGV2LVx1MDAzZXFvc19zdGF0c1tpXS5jcHVfdHhfcGFja2V0cyA9XG4mIzQzO1x0XHRcdGFpcm9oYV9xZG1hX3JyKHFkbWEsIFJFR19DTlRSX1ZBTChpIFx1MDAzY1x1MDAzYyAxKSk7XG4mIzQzO1x0XHRkZXYtXHUwMDNlcW9zX3N0YXRzW2ldLmZ3ZF90eF9wYWNrZXRzID1cbiYjNDM7XHRcdFx0YWlyb2hhX3FkbWFfcnIocWRtYSwgUkVHX0NOVFJfVkFMKChpIFx1MDAzY1x1MDAzYyAxKSAmIzQzOyAxKSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoY3VyX3FkbWEpXG4mIzQzO1x0XHRuZXRpZl90eF93YWtlX2FsbF9xdWV1ZXMobmV0ZGV2KTtcbiB9XG4gXG4gc3RhdGljIGludCBhaXJvaGFfZGV2X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbkBAIC0yMDc4LDcgJiM0MzsyMTUzLDcgQEAgc3RhdGljIGludCBhaXJvaGFfZGV2X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdFx0ZmFsbHRocm91Z2g7XG4gXHRjYXNlIEFJUk9IQV9HRE0yX0lEWDpcbiBcdFx0LyogR0RNMiBpcyBhbHdheXMgdXNlZCBhcyB3YW4gKi9cbi1cdFx0ZGV2LVx1MDAzZWZsYWdzIHw9IEFJUk9IQV9QUklWX0ZfV0FOO1xuJiM0MztcdFx0c2V0X2JpdChBSVJPSEFfREVWX0ZfV0FOLCBcdTAwMjZkZXYtXHUwMDNlZmxhZ3MpO1xuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdGJyZWFrO1xuQEAgLTIyMTcsOSAmIzQzOzIyOTIsOSBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIHtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cdTAwM2VxZG1hO1xuIFx0dTMyIG5yX2ZyYWdzLCB0YWcsIG1zZzAsIG1zZzEsIGxlbjtcbiBcdHN0cnVjdCBhaXJvaGFfcXVldWVfZW50cnkgKmU7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xuIFx0c3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxO1xuIFx0c3RydWN0IGFpcm9oYV9xdWV1ZSAqcTtcbiBcdExJU1RfSEVBRCh0eF9saXN0KTtcbkBAIC0yMjI4LDYgJiM0MzsyMzAzLDggQEAgc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0dTE2IGluZGV4O1xuIFx0dTggZnBvcnQ7XG4gXG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdHFkbWEgPSByY3VfZGVyZWZlcmVuY2UoZGV2LVx1MDAzZXFkbWEpO1xuIFx0cWlkID0gYWlyb2hhX3FkbWFfZ2V0X3R4cShxZG1hLCBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKSk7XG4gXHR0YWcgPSBhaXJvaGFfZ2V0X2RzYV90YWcoc2tiLCBuZXRkZXYpO1xuIFxuQEAgLTIyNzcsNiAmIzQzOzIzNTQsOCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdG5ldGlmX3R4X3N0b3BfcXVldWUodHhxKTtcbiBcdFx0cS1cdTAwM2V0eHFfc3RvcHBlZCA9IHRydWU7XG4gXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnEtXHUwMDNlbG9jayk7XG4mIzQzO1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4gXHRcdHJldHVybiBORVRERVZfVFhfQlVTWTtcbiBcdH1cbiBcbkBAIC0yMzQyLDYgJiM0MzsyNDIxLDcgQEAgc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0RklFTERfUFJFUChUWF9SSU5HX0NQVV9JRFhfTUFTSywgaW5kZXgpKTtcbiBcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnEtXHUwMDNlbG9jayk7XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRyZXR1cm4gTkVUREVWX1RYX09LO1xuIFxuQEAgLTIzNTQsNiAmIzQzOzI0MzQsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gZXJyb3I6XG4gXHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuIFx0bmV0ZGV2LVx1MDAzZXN0YXRzLnR4X2Ryb3BwZWQmIzQzOyYjNDM7O1xuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0cmV0dXJuIE5FVERFVl9UWF9PSztcbiB9XG5AQCAtMjQzMywxNyAmIzQzOzI1MTQsMTkgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9zZXRfY2hhbl90eF9zY2hlZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRcdFx0XHQgY29uc3QgdTE2ICp3ZWlnaHRzLCB1OCBuX3dlaWdodHMpXG4ge1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcbiBcdGludCBpO1xuIFxuJiM0MztcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQUlST0hBX05VTV9RT1NfUVVFVUVTOyBpJiM0MzsmIzQzOylcbi1cdFx0YWlyb2hhX3FkbWFfY2xlYXIoZGV2LVx1MDAzZXFkbWEsIFJFR19RVUVVRV9DTE9TRV9DRkcoY2hhbm5lbCksXG4mIzQzO1x0XHRhaXJvaGFfcWRtYV9jbGVhcihxZG1hLCBSRUdfUVVFVUVfQ0xPU0VfQ0ZHKGNoYW5uZWwpLFxuIFx0XHRcdFx0ICBUWFFfRElTQUJMRV9DSEFOX1FVRVVFX01BU0soY2hhbm5lbCwgaSkpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgbl93ZWlnaHRzOyBpJiM0MzsmIzQzOykge1xuIFx0XHR1MzIgc3RhdHVzO1xuIFx0XHRpbnQgZXJyO1xuIFxuLVx0XHRhaXJvaGFfcWRtYV93cihkZXYtXHUwMDNlcWRtYSwgUkVHX1RYV1JSX1dFSUdIVF9DRkcsXG4mIzQzO1x0XHRhaXJvaGFfcWRtYV93cihxZG1hLCBSRUdfVFhXUlJfV0VJR0hUX0NGRyxcbiBcdFx0XHQgICAgICAgVFdSUl9SV19DTURfTUFTSyB8XG4gXHRcdFx0ICAgICAgIEZJRUxEX1BSRVAoVFdSUl9DSEFOX0lEWF9NQVNLLCBjaGFubmVsKSB8XG4gXHRcdFx0ICAgICAgIEZJRUxEX1BSRVAoVFdSUl9RVUVVRV9JRFhfTUFTSywgaSkgfFxuQEAgLTI0NTEsMTIgJiM0MzsyNTM0LDEyIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfc2V0X2NoYW5fdHhfc2NoZWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0ZXJyID0gcmVhZF9wb2xsX3RpbWVvdXQoYWlyb2hhX3FkbWFfcnIsIHN0YXR1cyxcbiBcdFx0XHRcdFx0c3RhdHVzIFx1MDAyNiBUV1JSX1JXX0NNRF9ET05FLFxuIFx0XHRcdFx0XHRVU0VDX1BFUl9NU0VDLCAxMCAqIFVTRUNfUEVSX01TRUMsXG4tXHRcdFx0XHRcdHRydWUsIGRldi1cdTAwM2VxZG1hLCBSRUdfVFhXUlJfV0VJR0hUX0NGRyk7XG4mIzQzO1x0XHRcdFx0XHR0cnVlLCBxZG1hLCBSRUdfVFhXUlJfV0VJR0hUX0NGRyk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdH1cbiBcbi1cdGFpcm9oYV9xZG1hX3JtdyhkZXYtXHUwMDNlcWRtYSwgUkVHX0NIQU5fUU9TX01PREUoY2hhbm5lbCBcdTAwM2VcdTAwM2UgMyksXG4mIzQzO1x0YWlyb2hhX3FkbWFfcm13KHFkbWEsIFJFR19DSEFOX1FPU19NT0RFKGNoYW5uZWwgXHUwMDNlXHUwMDNlIDMpLFxuIFx0XHRcdENIQU5fUU9TX01PREVfTUFTSyhjaGFubmVsKSxcbiBcdFx0XHRfX2ZpZWxkX3ByZXAoQ0hBTl9RT1NfTU9ERV9NQVNLKGNoYW5uZWwpLCBtb2RlKSk7XG4gXG5AQCAtMjUyMCwxNyAmIzQzOzI2MDMsMjIgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9nZXRfdHhfZXRzX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBjaGFubmVsLFxuIFx0XHRcdFx0XHRzdHJ1Y3QgdGNfZXRzX3FvcHRfb2ZmbG9hZCAqb3B0KVxuIHtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cdTAwM2VxZG1hO1xuJiM0MztcdHUzMiBjcHVfdHhfcGFja2V0cywgZndkX3R4X3BhY2tldHM7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xuJiM0MztcdHU2NCB0eF9wYWNrZXRzO1xuIFxuLVx0dTY0IGNwdV90eF9wYWNrZXRzID0gYWlyb2hhX3FkbWFfcnIocWRtYSwgUkVHX0NOVFJfVkFMKGNoYW5uZWwgXHUwMDNjXHUwMDNjIDEpKTtcbi1cdHU2NCBmd2RfdHhfcGFja2V0cyA9IGFpcm9oYV9xZG1hX3JyKHFkbWEsXG4tXHRcdFx0XHRcdCAgICBSRUdfQ05UUl9WQUwoKGNoYW5uZWwgXHUwMDNjXHUwMDNjIDEpICYjNDM7IDEpKTtcbi1cdHU2NCB0eF9wYWNrZXRzID0gKGNwdV90eF9wYWNrZXRzIC0gZGV2LVx1MDAzZWNwdV90eF9wYWNrZXRzKSAmIzQzO1xuLVx0XHRcdCAoZndkX3R4X3BhY2tldHMgLSBkZXYtXHUwMDNlZndkX3R4X3BhY2tldHMpO1xuJiM0MztcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuJiM0MztcdGNwdV90eF9wYWNrZXRzID0gYWlyb2hhX3FkbWFfcnIocWRtYSwgUkVHX0NOVFJfVkFMKGNoYW5uZWwgXHUwMDNjXHUwMDNjIDEpKTtcbiYjNDM7XHRmd2RfdHhfcGFja2V0cyA9IGFpcm9oYV9xZG1hX3JyKHFkbWEsXG4mIzQzO1x0XHRcdFx0XHRSRUdfQ05UUl9WQUwoKGNoYW5uZWwgXHUwMDNjXHUwMDNjIDEpICYjNDM7IDEpKTtcbiYjNDM7XHR0eF9wYWNrZXRzID0gKHUzMikoY3B1X3R4X3BhY2tldHMgLVxuJiM0MztcdFx0XHQgICBkZXYtXHUwMDNlcW9zX3N0YXRzW2NoYW5uZWxdLmNwdV90eF9wYWNrZXRzKTtcbiYjNDM7XHR0eF9wYWNrZXRzICYjNDM7PSAodTMyKShmd2RfdHhfcGFja2V0cyAtXG4mIzQzO1x0XHRcdCAgICBkZXYtXHUwMDNlcW9zX3N0YXRzW2NoYW5uZWxdLmZ3ZF90eF9wYWNrZXRzKTtcbiBcbiBcdF9ic3RhdHNfdXBkYXRlKG9wdC1cdTAwM2VzdGF0cy5ic3RhdHMsIDAsIHR4X3BhY2tldHMpO1xuLVx0ZGV2LVx1MDAzZWNwdV90eF9wYWNrZXRzID0gY3B1X3R4X3BhY2tldHM7XG4tXHRkZXYtXHUwMDNlZndkX3R4X3BhY2tldHMgPSBmd2RfdHhfcGFja2V0cztcbiYjNDM7XHRkZXYtXHUwMDNlcW9zX3N0YXRzW2NoYW5uZWxdLmNwdV90eF9wYWNrZXRzID0gY3B1X3R4X3BhY2tldHM7XG4mIzQzO1x0ZGV2LVx1MDAzZXFvc19zdGF0c1tjaGFubmVsXS5md2RfdHhfcGFja2V0cyA9IGZ3ZF90eF9wYWNrZXRzO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTI3ODUsMTYgJiM0MzsyODczLDE4IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfc2V0X3R4X3JhdGVfbGltaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0XHRcdFx0IHUzMiBidWNrZXRfc2l6ZSlcbiB7XG4gXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xuIFx0aW50IGksIGVycjtcbiBcbiYjNDM7XHRxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjPSBUUlRDTV9QRUFLX01PREU7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdGVyciA9IGFpcm9oYV9xZG1hX3NldF90cnRjbV9jb25maWcoZGV2LVx1MDAzZXFkbWEsIGNoYW5uZWwsXG4mIzQzO1x0XHRlcnIgPSBhaXJvaGFfcWRtYV9zZXRfdHJ0Y21fY29uZmlnKHFkbWEsIGNoYW5uZWwsXG4gXHRcdFx0XHRcdFx0ICAgUkVHX0VHUkVTU19UUlRDTV9DRkcsIGksXG4gXHRcdFx0XHRcdFx0ICAgISFyYXRlLCBUUlRDTV9NRVRFUl9NT0RFKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0XHRlcnIgPSBhaXJvaGFfcWRtYV9zZXRfdHJ0Y21fdG9rZW5fYnVja2V0KGRldi1cdTAwM2VxZG1hLCBjaGFubmVsLFxuJiM0MztcdFx0ZXJyID0gYWlyb2hhX3FkbWFfc2V0X3RydGNtX3Rva2VuX2J1Y2tldChxZG1hLCBjaGFubmVsLFxuIFx0XHRcdFx0XHRcdFx0IFJFR19FR1JFU1NfVFJUQ01fQ0ZHLFxuIFx0XHRcdFx0XHRcdFx0IGksIHJhdGUsIGJ1Y2tldF9zaXplKTtcbiBcdFx0aWYgKGVycilcbkBAIC0yODMwLDExICYjNDM7MjkyMCwxMiBAQCBzdGF0aWMgaW50IGFpcm9oYV90Y19odGJfYWxsb2NfbGVhZl9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0dTMyIGNoYW5uZWwgPSBUQ19IX01JTihvcHQtXHUwMDNlY2xhc3NpZCkgJSBBSVJPSEFfTlVNX1FPU19DSEFOTkVMUztcbiBcdGludCBlcnIsIG51bV90eF9xdWV1ZXMgPSBBSVJPSEFfTlVNX1RYX1JJTkcgJiM0MzsgY2hhbm5lbCAmIzQzOyAxO1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuLVx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LVx1MDAzZXFkbWE7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xuIFxuIFx0LyogSGVyZSB3ZSBuZWVkIHRvIGNoZWNrIHRoZSByZXF1ZXN0ZWQgUURNQSBjaGFubmVsIGlzIG5vdCBhbHJlYWR5XG4gXHQgKiBpbiB1c2UgYnkgYW5vdGhlciBuZXRfZGV2aWNlIHJ1bm5pbmcgb24gdGhlIHNhbWUgUURNQSBibG9jay5cbiBcdCAqL1xuJiM0MztcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuIFx0aWYgKHRlc3RfYW5kX3NldF9iaXQoY2hhbm5lbCwgcWRtYS1cdTAwM2Vxb3NfY2hhbm5lbF9tYXApKSB7XG4gXHRcdE5MX1NFVF9FUlJfTVNHX01PRChvcHQtXHUwMDNlZXh0YWNrLFxuIFx0XHRcdFx0ICAgXCYjMzQ7cWRtYSBxb3MgY2hhbm5lbCBhbHJlYWR5IGluIHVzZVwmIzM0Oyk7XG5AQCAtMjg3MCw3ICYjNDM7Mjk2MSw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfc2V0X3J4X21ldGVyKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2LFxuIFx0XHRcdFx0ICAgIHUzMiByYXRlLCB1MzIgYnVja2V0X3NpemUsXG4gXHRcdFx0XHQgICAgZW51bSB0cnRjbV91bml0X3R5cGUgdW5pdF90eXBlKVxuIHtcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cdTAwM2VxZG1hO1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XG4gXHRpbnQgaTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUocWRtYS1cdTAwM2VxX3J4KTsgaSYjNDM7JiM0MzspIHtcbkBAIC0zMDQ1LDEwICYjNDM7MzEzNiwxMSBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfdGNfcmVtb3ZlX2h0Yl9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgcXVldWUpXG4ge1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIFx0aW50IG51bV90eF9xdWV1ZXMgPSBBSVJPSEFfTlVNX1RYX1JJTkc7XG4tXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtXHUwMDNlcWRtYTtcbiYjNDM7XHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7XG4gXG4gXHRhaXJvaGFfcWRtYV9zZXRfdHhfcmF0ZV9saW1pdChuZXRkZXYsIHF1ZXVlLCAwLCAwKTtcbiBcbiYjNDM7XHRxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcbiBcdGNsZWFyX2JpdChxdWV1ZSwgcWRtYS1cdTAwM2Vxb3NfY2hhbm5lbF9tYXApO1xuIFx0Y2xlYXJfYml0KHF1ZXVlLCBkZXYtXHUwMDNlcW9zX3NxX2JtYXApO1xuIFxuQEAgLTMwNzQsNiAmIzQzOzMxNjYsOTggQEAgc3RhdGljIGludCBhaXJvaGFfdGNfaHRiX2RlbGV0ZV9sZWFmX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGFpcm9oYV9kaXNhYmxlX3Fvc19mb3JfZ2RtMzQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZGV2LVx1MDAzZXBvcnQ7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKHBvcnQtXHUwMDNlaWQgIT0gQUlST0hBX0dETTNfSURYIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBwb3J0LVx1MDAzZWlkICE9IEFJUk9IQV9HRE00X0lEWClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gYWlyb2hhX2Rpc2FibGVfZ2RtMl9sb29wYmFjayhkZXYpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRuZXRkZXZfd2FybihuZXRkZXYsXG4mIzQzO1x0XHRcdCAgICBcJiMzNDtmYWlsZWQgZGlzYWJsaW5nIEdETTIgbG9vcGJhY2s6ICVkXFxuXCYjMzQ7LCBlcnIpO1xuJiM0MztcbiYjNDM7XHRjbGVhcl9iaXQoQUlST0hBX0RFVl9GX1dBTiwgXHUwMDI2ZGV2LVx1MDAzZWZsYWdzKTtcbiYjNDM7XHRhaXJvaGFfZGV2X3NldF9xZG1hKGRldik7XG4mIzQzO1xuJiM0MztcdGFpcm9oYV9zZXRfbWFjYWRkcihkZXYsIG5ldGRldi1cdTAwM2VkZXZfYWRkcik7XG4mIzQzO1x0YWlyb2hhX3BwZV9zZXRfeG1pdF9mcmFtZV9zaXplKGRldik7XG4mIzQzO1xuJiM0MztcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXG4mIzQzO1x0XHRhaXJvaGFfc2V0X2dkbV9wb3J0X2Z3ZF9jZmcoZGV2LVx1MDAzZWV0aCxcbiYjNDM7XHRcdFx0XHRcdCAgICBSRUdfR0RNX0ZXRF9DRkcocG9ydC1cdTAwM2VpZCksXG4mIzQzO1x0XHRcdFx0XHQgICAgRkVfUFNFX1BPUlRfUFBFMSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWlyb2hhX2VuYWJsZV9xb3NfZm9yX2dkbTM0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqd2FuX2RldiwgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGRldi1cdTAwM2Vwb3J0O1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBkZXYtXHUwMDNlZXRoO1xuJiM0MztcdGludCBlcnIgPSAtRUJVU1k7XG4mIzQzO1xuJiM0MztcdGlmIChwb3J0LVx1MDAzZWlkICE9IEFJUk9IQV9HRE0zX0lEWCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgcG9ydC1cdTAwM2VpZCAhPSBBSVJPSEFfR0RNNF9JRFgpIHtcbiYjNDM7XHRcdC8qIEhXIFFvUyBpcyBhbHdheXMgc3VwcG9ydGVkIGJ5IEdETTEgYW5kIEdETTIgKi9cbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFhaXJvaGFfaXNfbGFuX2dkbV9kZXYoZGV2KSkgLyogQWxyZWFkeSBlbmFibGVkICovXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZmbG93X29mZmxvYWRfbXV0ZXgpO1xuJiM0MztcbiYjNDM7XHR3YW5fZGV2ID0gYWlyb2hhX2dldF93YW5fZ2RtX2RldihldGgpO1xuJiM0MztcdGlmICh3YW5fZGV2KSB7XG4mIzQzO1x0XHRpZiAodGVzdF9iaXQoQUlST0hBX0RFVl9GX1RYX1FPUywgXHUwMDI2d2FuX2Rldi1cdTAwM2VmbGFncykgfHxcbiYjNDM7XHRcdCAgICB3YW5fZGV2LVx1MDAzZXBvcnQtXHUwMDNlaWQgPT0gQUlST0hBX0dETTJfSURYKSB7XG4mIzQzO1x0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4mIzQzO1x0XHRcdFx0XHQgICBcJiMzNDtRb1MgY29uZmlndXJlZCBmb3IgV0FOIGRldmljZVwmIzM0Oyk7XG4mIzQzO1x0XHRcdGdvdG8gZXJyb3JfdW5sb2NrO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0YWlyb2hhX2Rpc2FibGVfcW9zX2Zvcl9nZG0zNChuZXRkZXZfZnJvbV9wcml2KHdhbl9kZXYpKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNldF9iaXQoQUlST0hBX0RFVl9GX1dBTiwgXHUwMDI2ZGV2LVx1MDAzZWZsYWdzKTtcbiYjNDM7XHRhaXJvaGFfZGV2X3NldF9xZG1hKGRldik7XG4mIzQzO1x0ZXJyID0gYWlyb2hhX2VuYWJsZV9nZG0yX2xvb3BiYWNrKGRldik7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gZXJyb3JfZGlzYWJsZV93YW47XG4mIzQzO1xuJiM0MztcdGVyciA9IGFpcm9oYV9zZXRfbWFjYWRkcihkZXYsIG5ldGRldi1cdTAwM2VkZXZfYWRkcik7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gZXJyb3JfZGlzYWJsZV9sb29wYmFjaztcbiYjNDM7XG4mIzQzO1x0YWlyb2hhX2Rldl9zZXRfeG1pdF9mcmFtZV9zaXplKG5ldGRldik7XG4mIzQzO1x0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkge1xuJiM0MztcdFx0dTMyIHBzZV9wb3J0O1xuJiM0MztcbiYjNDM7XHRcdHBzZV9wb3J0ID0gYWlyb2hhX3BwZV9pc19lbmFibGVkKGV0aCwgMSkgPyBGRV9QU0VfUE9SVF9QUEUyXG4mIzQzO1x0XHRcdFx0XHRcdFx0IDogRkVfUFNFX1BPUlRfUFBFMTtcbiYjNDM7XHRcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhldGgsIFJFR19HRE1fRldEX0NGRyhwb3J0LVx1MDAzZWlkKSxcbiYjNDM7XHRcdFx0XHRcdCAgICBwc2VfcG9ydCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2Zmxvd19vZmZsb2FkX211dGV4KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztlcnJvcl9kaXNhYmxlX2xvb3BiYWNrOlxuJiM0MztcdGFpcm9oYV9kaXNhYmxlX2dkbTJfbG9vcGJhY2soZGV2KTtcbiYjNDM7ZXJyb3JfZGlzYWJsZV93YW46XG4mIzQzO1x0Y2xlYXJfYml0KEFJUk9IQV9ERVZfRl9XQU4sIFx1MDAyNmRldi1cdTAwM2VmbGFncyk7XG4mIzQzO1x0YWlyb2hhX2Rldl9zZXRfcWRtYShkZXYpO1xuJiM0MztlcnJvcl91bmxvY2s6XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmZsb3dfb2ZmbG9hZF9tdXRleCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBhaXJvaGFfdGNfaHRiX2Rlc3Ryb3koc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB7XG4gXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG5AQCAtMzA4Miw2ICYjNDM7MzI2Niw4IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3RjX2h0Yl9kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRmb3JfZWFjaF9zZXRfYml0KHEsIGRldi1cdTAwM2Vxb3Nfc3FfYm1hcCwgQUlST0hBX05VTV9RT1NfQ0hBTk5FTFMpXG4gXHRcdGFpcm9oYV90Y19yZW1vdmVfaHRiX3F1ZXVlKG5ldGRldiwgcSk7XG4gXG4mIzQzO1x0Y2xlYXJfYml0KEFJUk9IQV9ERVZfRl9UWF9RT1MsIFx1MDAyNmRldi1cdTAwM2VmbGFncyk7XG4mIzQzO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTMxMDEsMjQgJiM0MzszMjg3LDMzIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3RjX2dldF9odGJfZ2V0X2xlYWZfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IGFpcm9oYV90Y19zZXR1cF9xZGlzY19odGIoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiYjNDM7c3RhdGljIGludCBhaXJvaGFfdGNfc2V0dXBfcWRpc2NfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCB0Y19odGJfcW9wdF9vZmZsb2FkICpvcHQpXG4ge1xuIFx0c3dpdGNoIChvcHQtXHUwMDNlY29tbWFuZCkge1xuLVx0Y2FzZSBUQ19IVEJfQ1JFQVRFOlxuJiM0MztcdGNhc2UgVENfSFRCX0NSRUFURToge1xuJiM0MztcdFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuJiM0MztcdFx0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0XHRlcnIgPSBhaXJvaGFfZW5hYmxlX3Fvc19mb3JfZ2RtMzQobmV0ZGV2LCBvcHQtXHUwMDNlZXh0YWNrKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdFx0c2V0X2JpdChBSVJPSEFfREVWX0ZfVFhfUU9TLCBcdTAwMjZkZXYtXHUwMDNlZmxhZ3MpO1xuIFx0XHRicmVhaztcbiYjNDM7XHR9XG4gXHRjYXNlIFRDX0hUQl9ERVNUUk9ZOlxuLVx0XHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9kZXN0cm95KGRldik7XG4mIzQzO1x0XHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9kZXN0cm95KG5ldGRldik7XG4gXHRjYXNlIFRDX0hUQl9OT0RFX01PRElGWTpcbi1cdFx0cmV0dXJuIGFpcm9oYV90Y19odGJfbW9kaWZ5X3F1ZXVlKGRldiwgb3B0KTtcbiYjNDM7XHRcdHJldHVybiBhaXJvaGFfdGNfaHRiX21vZGlmeV9xdWV1ZShuZXRkZXYsIG9wdCk7XG4gXHRjYXNlIFRDX0hUQl9MRUFGX0FMTE9DX1FVRVVFOlxuLVx0XHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9hbGxvY19sZWFmX3F1ZXVlKGRldiwgb3B0KTtcbiYjNDM7XHRcdHJldHVybiBhaXJvaGFfdGNfaHRiX2FsbG9jX2xlYWZfcXVldWUobmV0ZGV2LCBvcHQpO1xuIFx0Y2FzZSBUQ19IVEJfTEVBRl9ERUw6XG4gXHRjYXNlIFRDX0hUQl9MRUFGX0RFTF9MQVNUOlxuIFx0Y2FzZSBUQ19IVEJfTEVBRl9ERUxfTEFTVF9GT1JDRTpcbi1cdFx0cmV0dXJuIGFpcm9oYV90Y19odGJfZGVsZXRlX2xlYWZfcXVldWUoZGV2LCBvcHQpO1xuJiM0MztcdFx0cmV0dXJuIGFpcm9oYV90Y19odGJfZGVsZXRlX2xlYWZfcXVldWUobmV0ZGV2LCBvcHQpO1xuIFx0Y2FzZSBUQ19IVEJfTEVBRl9RVUVSWV9RVUVVRTpcbi1cdFx0cmV0dXJuIGFpcm9oYV90Y19nZXRfaHRiX2dldF9sZWFmX3F1ZXVlKGRldiwgb3B0KTtcbiYjNDM7XHRcdHJldHVybiBhaXJvaGFfdGNfZ2V0X2h0Yl9nZXRfbGVhZl9xdWV1ZShuZXRkZXYsIG9wdCk7XG4gXHRkZWZhdWx0OlxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXHR9XG5AQCAtMzIyMCw4ICYjNDM7MzQxNSw4IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2FsbG9jX2dkbV9kZXZpY2Uoc3RydWN0IGFpcm9oYV9ldGggKmV0aCxcbiB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXY7XG4mIzQzO1x0aW50IGVyciwgaTtcbiBcdHU4IGluZGV4O1xuLVx0aW50IGVycjtcbiBcbiBcdG5ldGRldiA9IGRldm1fYWxsb2NfZXRoZXJkZXZfbXFzKGV0aC1cdTAwM2VkZXYsIHNpemVvZigqZGV2KSxcbiBcdFx0XHRcdFx0IEFJUk9IQV9OVU1fTkVUREVWX1RYX1JJTkdTLFxuQEAgLTMyNzIsNiAmIzQzOzM0NjcsOCBAQCBzdGF0aWMgaW50IGFpcm9oYV9hbGxvY19nZG1fZGV2aWNlKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsXG4gXHRuZXRkZXYtXHUwMDNlZGV2Lm9mX25vZGUgPSBvZl9ub2RlX2dldChucCk7XG4gXHRkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIFx0dTY0X3N0YXRzX2luaXQoXHUwMDI2ZGV2LVx1MDAzZXN0YXRzLnN5bmNwKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGRldi1cdTAwM2V0eHFfbG9jayk7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2ZGV2LVx1MDAzZXR4cV9sb2NrW2ldKTtcbiBcdGRldi1cdTAwM2Vwb3J0ID0gcG9ydDtcbiBcdGRldi1cdTAwM2VldGggPSBldGg7XG4gXHRkZXYtXHUwMDNlbmJxID0gbmJxO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oXG5pbmRleCBmZTkzNGY5ZmZlOGExMS4uZmE5YThlZGNlMjJmZmQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oXG5AQCAtNTcwLDI0ICYjNDM7NTcwLDMxIEBAIHN0cnVjdCBhaXJvaGFfcWRtYSB7XG4gXHRERUNMQVJFX0JJVE1BUChxb3NfY2hhbm5lbF9tYXAsIEFJUk9IQV9OVU1fUU9TX0NIQU5ORUxTKTtcbiB9O1xuIFxuLWVudW0gYWlyb2hhX3ByaXZfZmxhZ3Mge1xuLVx0QUlST0hBX1BSSVZfRl9XQU4gPSBCSVQoMCksXG4mIzQzO2VudW0gYWlyb2hhX2Rldl9mbGFncyB7XG4mIzQzO1x0QUlST0hBX0RFVl9GX1dBTixcbiYjNDM7XHRBSVJPSEFfREVWX0ZfVFhfUU9TLFxuIH07XG4gXG4gc3RydWN0IGFpcm9oYV9nZG1fZGV2IHtcbiYjNDM7XHRzdHJ1Y3QgYWlyb2hhX3FkbWEgX19yY3UgKnFkbWE7XG4gXHRzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0O1xuLVx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xuIFx0c3RydWN0IGFpcm9oYV9ldGggKmV0aDtcbiBcbiBcdERFQ0xBUkVfQklUTUFQKHFvc19zcV9ibWFwLCBBSVJPSEFfTlVNX1FPU19DSEFOTkVMUyk7XG4tXHQvKiBxb3Mgc3RhdHMgY291bnRlcnMgKi9cbi1cdHU2NCBjcHVfdHhfcGFja2V0cztcbi1cdHU2NCBmd2RfdHhfcGFja2V0cztcbiYjNDM7XHRzdHJ1Y3Qge1xuJiM0MztcdFx0dTMyIGNwdV90eF9wYWNrZXRzO1xuJiM0MztcdFx0dTMyIGZ3ZF90eF9wYWNrZXRzO1xuJiM0MztcdH0gcW9zX3N0YXRzW0FJUk9IQV9OVU1fUU9TX0NIQU5ORUxTXTtcbiBcbi1cdHUzMiBmbGFncztcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0aW50IG5icTtcbiBcbiBcdHN0cnVjdCBhaXJvaGFfaHdfc3RhdHMgc3RhdHM7XG4mIzQzO1xuJiM0MztcdC8qIFNlcmlhbGl6ZSBuZXRkZXZfdHhfY29tcGxldGVkX3F1ZXVlKCkgY2FsbHMgcGVyIFRYIHF1ZXVlIGR1cmluZ1xuJiM0MztcdCAqIFFETUEgbWlncmF0aW9uLlxuJiM0MztcdCAqL1xuJiM0MztcdHNwaW5sb2NrX3QgdHhxX2xvY2tbQUlST0hBX05VTV9ORVRERVZfVFhfUklOR1NdO1xuIH07XG4gXG4gc3RydWN0IGFpcm9oYV9nZG1fcG9ydCB7XG5AQCAtNjk0LDcgJiM0Mzs3MDEsNyBAQCBzdGF0aWMgaW5saW5lIHUxNiBhaXJvaGFfcWRtYV9nZXRfdHhxKHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSwgdTE2IHFpZClcbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgYWlyb2hhX2lzX2xhbl9nZG1fZGV2KHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxuIHtcbi1cdHJldHVybiAhKGRldi1cdTAwM2VmbGFncyBcdTAwMjYgQUlST0hBX1BSSVZfRl9XQU4pO1xuJiM0MztcdHJldHVybiAhdGVzdF9iaXQoQUlST0hBX0RFVl9GX1dBTiwgXHUwMDI2ZGV2LVx1MDAzZWZsYWdzKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBib29sIGFpcm9oYV9pc183NTgxKHN0cnVjdCBhaXJvaGFfZXRoICpldGgpXG5AQCAtNzExLDYgJiM0Mzs3MTgsMTYgQEAgaW50IGFpcm9oYV9nZXRfZmVfcG9ydChzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldik7XG4gYm9vbCBhaXJvaGFfaXNfdmFsaWRfZ2RtX2RldihzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLFxuIFx0XHRcdCAgICAgc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpO1xuIFxuJiM0MztleHRlcm4gc3RydWN0IG11dGV4IGZsb3dfb2ZmbG9hZF9tdXRleDtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IGFpcm9oYV9xZG1hICpcbiYjNDM7YWlyb2hhX3FkbWFfZGVyZWYoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChkZXYtXHUwMDNlcWRtYSxcbiYjNDM7XHRcdFx0XHRcdCBsb2NrZGVwX3J0bmxfaXNfaGVsZCgpIHx8XG4mIzQzO1x0XHRcdFx0XHQgbG9ja2RlcF9pc19oZWxkKFx1MDAyNmZsb3dfb2ZmbG9hZF9tdXRleCkpO1xuJiM0Mzt9XG4mIzQzO1xuIHZvaWQgYWlyb2hhX3BwZV9zZXRfeG1pdF9mcmFtZV9zaXplKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KTtcbiB2b2lkIGFpcm9oYV9wcGVfc2V0X2NwdV9wb3J0KHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2LCB1OCBwcGVfaWQsIHU4IGZwb3J0KTtcbiBib29sIGFpcm9oYV9wcGVfaXNfZW5hYmxlZChzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLCBpbnQgaW5kZXgpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jXG5pbmRleCBlNGMzNjQ0ZGQ2ZWM3YS4uMzNkZGYwZDA3ODU1MzkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jXG5AQCAtMTUsNyAmIzQzOzE1LDEwIEBAXG4gI2luY2x1ZGUgXCYjMzQ7YWlyb2hhX3JlZ3MuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2Fpcm9oYV9ldGguaFwmIzM0O1xuIFxuLXN0YXRpYyBERUZJTkVfTVVURVgoZmxvd19vZmZsb2FkX211dGV4KTtcbiYjNDM7LyogU2VyaWFsaXplIGFpcm9oYV9nZG1fZGV2IGZsYWdzLCBRRE1BIHBvaW50ZXIgYW5kIFBQRSBDUFUgcG9ydFxuJiM0MzsgKiBjb25maWd1cmF0aW9uLlxuJiM0MzsgKi9cbiYjNDM7REVGSU5FX01VVEVYKGZsb3dfb2ZmbG9hZF9tdXRleCk7XG4gc3RhdGljIERFRklORV9TUElOTE9DSyhwcGVfbG9jayk7XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyBhaXJvaGFfZmxvd190YWJsZV9wYXJhbXMgPSB7XG5AQCAtODYsOCAmIzQzOzg5LDggQEAgc3RhdGljIHUzMiBhaXJvaGFfcHBlX2dldF90aW1lc3RhbXAoc3RydWN0IGFpcm9oYV9wcGUgKnBwZSlcbiBcbiB2b2lkIGFpcm9oYV9wcGVfc2V0X2NwdV9wb3J0KHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2LCB1OCBwcGVfaWQsIHU4IGZwb3J0KVxuIHtcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cdTAwM2VxZG1hO1xuLVx0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IHFkbWEtXHUwMDNlZXRoO1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IGRldi1cdTAwM2VldGg7XG4gXHR1OCBxZG1hX2lkID0gcWRtYSAtIFx1MDAyNmV0aC1cdTAwM2VxZG1hWzBdO1xuIFx0dTMyIGZlX2NwdV9wb3J0O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcmVncy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9yZWdzLmhcbmluZGV4IDZmZWQ2M2QwMTNiNDEyLi40NDJiNDhjOWI5OTFlZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcmVncy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaFxuQEAgLTM3NSw2ICYjNDM7Mzc1LDcgQEBcbiBcbiAjZGVmaW5lIFJFR19TUkNfUE9SVF9GQ19NQVA2XHRcdDB4MjI5OFxuICNkZWZpbmUgRkNfSURfT0ZfU1JDX1BPUlRfTUFTSyhfbilcdEdFTk1BU0soNCAmIzQzOyAoKF9uKSBcdTAwM2NcdTAwM2MgMyksICgoX24pIFx1MDAzY1x1MDAzYyAzKSlcbiYjNDM7I2RlZmluZSBGQ19NQVA2X0RFRl9WQUxVRVx0XHQweDFiMWExOTE4XG4gXG4gI2RlZmluZSBSRUdfV0FOX01UVTBcdFx0XHQweDIzMDBcbiAjZGVmaW5lIFdBTl9NVFUxX01BU0tcdFx0XHRHRU5NQVNLKDI5LCAxNilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxODo1MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFpcm9oYSBTb0MgR2lnYWJpdCBFdGhlcm5ldCBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYSkuIFRoaXMgaXMgYSBwbGF0Zm9ybSBkcml2ZXIgZm9yIHNwZWNpZmljIEFpcm9oYSBTb0NzIChlLmcuLCBlbjc1ODEsIGFuNzU4Mykgd2hpY2ggYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudHMuIEJlY2F1c2UgdGhlIGhhcmR3YXJlIGlzIG5vdCBwcmVzZW50IG9yIGVtdWxhdGVkLCB0aGUgZHJpdmVyIHdpbGwgbm90IHByb2JlIGFuZCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0Y2FiY2JhMzRkMDAzMGE3N2U3YTk1M2VmZWEwY2E1MzVjZmUzZDA5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBKdWwgMjYgMTg6NTM6MzggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYwppbmRleCA3OTQxOGU2ODJmNzFmMy4uZGJhN2M1MmMwODk2OTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYwpAQCAtOTM0LDcgJiM0Mzs5MzQsNyBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfcWRtYV93YWtlX25ldGRldl90eHFzKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEpCiAJCQlpZiAoIWRldikKIAkJCQljb250aW51ZTsKIAotCQkJaWYgKGRldi0mZ3Q7cWRtYSAhPSBxZG1hKQomIzQzOwkJCWlmIChyY3VfYWNjZXNzX3BvaW50ZXIoZGV2LSZndDtxZG1hKSAhPSBxZG1hKQogCQkJCWNvbnRpbnVlOwogCiAJCQluZXRkZXYgPSBuZXRkZXZfZnJvbV9wcml2KGRldik7CkBAIC0xMDM4LDEwICYjNDM7MTAzOCwxNiBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3R4X25hcGlfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCiAJCXEtJmd0O3F1ZXVlZC0tOwogCiAJCWlmIChza2IpIHsKJiM0MzsJCQlzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KHNrYi0mZ3Q7ZGV2KTsKJiM0MzsJCQl1MTYgcWlkeCA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpOwogCQkJc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxOwogCiAJCQl0eHEgPSBza2JfZ2V0X3R4X3F1ZXVlKHNrYi0mZ3Q7ZGV2LCBza2IpOwomIzQzOwomIzQzOwkJCXNwaW5fbG9ja19iaCgmYW1wO2Rldi0mZ3Q7dHhxX2xvY2tbcWlkeF0pOwogCQkJbmV0ZGV2X3R4X2NvbXBsZXRlZF9xdWV1ZSh0eHEsIDEsIHNrYi0mZ3Q7bGVuKTsKJiM0MzsJCQlzcGluX3VubG9ja19iaCgmYW1wO2Rldi0mZ3Q7dHhxX2xvY2tbcWlkeF0pOwomIzQzOwogCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJfQogCkBAIC0xOTA1LDggJiM0MzsxOTExLDggQEAgc3RhdGljIGludCBhaXJvaGFfZGV2X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGRldi0mZ3Q7cG9ydDsKLQlzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtJmd0O3FkbWE7CiAJdTMyIHBzZV9wb3J0ID0gRkVfUFNFX1BPUlRfUFBFMTsKJiM0MzsJc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hOwogCWludCBlcnI7CiAKIAluZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKG5ldGRldik7CkBAIC0xOTE0LDYgJiM0MzsxOTIwLDcgQEAgc3RhdGljIGludCBhaXJvaGFfZGV2X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCiYjNDM7CXFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpOwogCWlmIChuZXRkZXZfdXNlc19kc2EobmV0ZGV2KSkKIAkJYWlyb2hhX2ZlX3NldChxZG1hLSZndDtldGgsIFJFR19HRE1fSU5HUkVTU19DRkcocG9ydC0mZ3Q7aWQpLAogCQkJICAgICAgR0RNX1NUQUdfRU5fTUFTSyk7CkBAIC0xOTM3LDcgJiM0MzsxOTQ0LDYgQEAgc3RhdGljIGludCBhaXJvaGFfZGV2X3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGRldi0mZ3Q7cG9ydDsKLQlzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtJmd0O3FkbWE7CiAKIAluZXRpZl90eF9kaXNhYmxlKG5ldGRldik7CiAJYWlyb2hhX3NldF92aXBfZm9yX2dkbV9wb3J0KGRldiwgZmFsc2UpOwpAQCAtMTk0NSw3ICYjNDM7MTk1MSw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiAJaWYgKC0tcG9ydC0mZ3Q7dXNlcnMpCiAJCWFpcm9oYV9wcGVfc2V0X3htaXRfZnJhbWVfc2l6ZShkZXYpOwogCWVsc2UKLQkJYWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKHFkbWEtJmd0O2V0aCwKJiM0MzsJCWFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhkZXYtJmd0O2V0aCwKIAkJCQkJICAgIFJFR19HRE1fRldEX0NGRyhwb3J0LSZndDtpZCksCiAJCQkJCSAgICBGRV9QU0VfUE9SVF9EUk9QKTsKIAlyZXR1cm4gMDsKQEAgLTIwMjgsNiAmIzQzOzIwMzQsNTMgQEAgc3RhdGljIGludCBhaXJvaGFfZW5hYmxlX2dkbTJfbG9vcGJhY2soc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IGFpcm9oYV9kaXNhYmxlX2dkbTJfbG9vcGJhY2soc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZGV2LSZndDtwb3J0OwomIzQzOwlzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gZGV2LSZndDtldGg7CiYjNDM7CWludCBpLCBzcmNfcG9ydDsKJiM0MzsJdTMyIHBzZV9wb3J0OwomIzQzOwomIzQzOwlzcmNfcG9ydCA9IGV0aC0mZ3Q7c29jLSZndDtvcHMuZ2V0X3Nwb3J0KGRldi0mZ3Q7cG9ydCwgZGV2LSZndDtuYnEpOwomIzQzOwlpZiAoc3JjX3BvcnQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHNyY19wb3J0OwomIzQzOwomIzQzOwlhaXJvaGFfZmVfY2xlYXIoZXRoLAomIzQzOwkJCVJFR19TUF9ERlRfQ1BPUlQoc3JjX3BvcnQgJmd0OyZndDsgZmxzKFNQX0NQT1JUX0RGVF9NQVNLKSksCiYjNDM7CQkJU1BfQ1BPUlRfTUFTSyhzcmNfcG9ydCAmYW1wOyBTUF9DUE9SVF9ERlRfTUFTSykpOwomIzQzOwomIzQzOwlhaXJvaGFfZmVfc2V0KGV0aCwgUkVHX0dETV9GV0RfQ0ZHKEFJUk9IQV9HRE0yX0lEWCksCiYjNDM7CQkgICAgICBHRE1fU1RSSVBfQ1JDX01BU0spOwomIzQzOwlhaXJvaGFfc2V0X2dkbV9wb3J0X2Z3ZF9jZmcoZXRoLCBSRUdfR0RNX0ZXRF9DRkcoQUlST0hBX0dETTJfSURYKSwKJiM0MzsJCQkJICAgIEZFX1BTRV9QT1JUX0RST1ApOwomIzQzOwlhaXJvaGFfZmVfY2xlYXIoZXRoLCBSRUdfR0RNX0xQQktfQ0ZHKEFJUk9IQV9HRE0yX0lEWCksCiYjNDM7CQkJTFBCS19DSEFOX01BU0sgfCBMUEJLX01PREVfTUFTSyB8IExQQktfRU5fTUFTSyk7CiYjNDM7CXBzZV9wb3J0ID0gYWlyb2hhX3BwZV9pc19lbmFibGVkKGV0aCwgMSkgPyBGRV9QU0VfUE9SVF9QUEUyCiYjNDM7CQkJCQkJIDogRkVfUFNFX1BPUlRfUFBFMTsKJiM0MzsJYWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKGV0aCwgUkVHX0dETV9GV0RfQ0ZHKEFJUk9IQV9HRE0yX0lEWCksCiYjNDM7CQkJCSAgICBwc2VfcG9ydCk7CiYjNDM7CiYjNDM7CWFpcm9oYV9mZV9ybXcoZXRoLCBSRUdfRkVfV0FOX1BPUlQsIFdBTjBfTUFTSywKJiM0MzsJCSAgICAgIEZJRUxEX1BSRVAoV0FOMF9NQVNLLCBBSVJPSEFfR0RNMl9JRFgpKTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGV0aC0mZ3Q7c29jLSZndDtudW1fcHBlOyBpJiM0MzsmIzQzOykKJiM0MzsJCWFpcm9oYV9mZV9jbGVhcihldGgsIFJFR19QUEVfREZUX0NQT1JUKGksIEFJUk9IQV9HRE0yX0lEWCksCiYjNDM7CQkJCURGVF9DUE9SVF9NQVNLKEFJUk9IQV9HRE0yX0lEWCkpOwomIzQzOwomIzQzOwkvKiBFbmFibGUgVklQIGFuZCBJRkMgZm9yIEdETTIgKi8KJiM0MzsJYWlyb2hhX2ZlX3NldChldGgsIFJFR19GRV9WSVBfUE9SVF9FTiwgQklUKEFJUk9IQV9HRE0yX0lEWCkpOwomIzQzOwlhaXJvaGFfZmVfc2V0KGV0aCwgUkVHX0ZFX0lGQ19QT1JUX0VOLCBCSVQoQUlST0hBX0dETTJfSURYKSk7CiYjNDM7CiYjNDM7CWlmIChwb3J0LSZndDtpZCA9PSBBSVJPSEFfR0RNNF9JRFggJmFtcDsmYW1wOyBhaXJvaGFfaXNfNzU4MShldGgpKSB7CiYjNDM7CQl1MzIgbWFzayA9IEZDX0lEX09GX1NSQ19QT1JUX01BU0soZGV2LSZndDtuYnEpOwomIzQzOwomIzQzOwkJYWlyb2hhX2ZlX3JtdyhldGgsIFJFR19TUkNfUE9SVF9GQ19NQVA2LCBtYXNrLAomIzQzOwkJCSAgICAgIEZDX01BUDZfREVGX1ZBTFVFICZhbXA7IG1hc2spOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKgogYWlyb2hhX2dldF93YW5fZ2RtX2RldihzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoKQogewpAQCAtMjA1NCwxNSAmIzQzOzIxMDcsMzcgQEAgYWlyb2hhX2dldF93YW5fZ2RtX2RldihzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoKQogc3RhdGljIHZvaWQgYWlyb2hhX2Rldl9zZXRfcWRtYShzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihkZXYpOwomIzQzOwlzdHJ1Y3QgYWlyb2hhX3FkbWEgKmN1cl9xZG1hLCAqcWRtYTsKIAlzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gZGV2LSZndDtldGg7Ci0JaW50IHBwZV9pZDsKJiM0MzsJaW50IGksIHBwZV9pZDsKIAogCS8qIFFETUEwIGlzIHVzZWQgZm9yIGxhbiBwb3J0cyB3aGlsZSBRRE1BMSBpcyB1c2VkIGZvciBXQU4gcG9ydHMgKi8KLQlkZXYtJmd0O3FkbWEgPSAmYW1wO2V0aC0mZ3Q7cWRtYVshYWlyb2hhX2lzX2xhbl9nZG1fZGV2KGRldildOwotCW5ldGRldi0mZ3Q7aXJxID0gZGV2LSZndDtxZG1hLSZndDtpcnFfYmFua3NbMF0uaXJxOwomIzQzOwlxZG1hID0gJmFtcDtldGgtJmd0O3FkbWFbIWFpcm9oYV9pc19sYW5fZ2RtX2RldihkZXYpXTsKJiM0MzsJY3VyX3FkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpOwomIzQzOwomIzQzOwlpZiAoY3VyX3FkbWEpCiYjNDM7CQluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTsKJiM0MzsKJiM0MzsJcmN1X2Fzc2lnbl9wb2ludGVyKGRldi0mZ3Q7cWRtYSwgcWRtYSk7CiYjNDM7CW5ldGRldi0mZ3Q7aXJxID0gcWRtYS0mZ3Q7aXJxX2JhbmtzWzBdLmlycTsKJiM0MzsJc3luY2hyb25pemVfcmN1KCk7CiAKIAlwcGVfaWQgPSAhYWlyb2hhX2lzX2xhbl9nZG1fZGV2KGRldikgJmFtcDsmYW1wOyBhaXJvaGFfcHBlX2lzX2VuYWJsZWQoZXRoLCAxKTsKIAlhaXJvaGFfcHBlX3NldF9jcHVfcG9ydChkZXYsIHBwZV9pZCwgYWlyb2hhX2dldF9mZV9wb3J0KGRldikpOwomIzQzOwomIzQzOwkvKiBTZWVkIHFvc19zdGF0cyBiYXNlbGluZXMgd2l0aCB0aGUgbmV3IFFETUEgYmxvY2smIzM5O3MgY3VycmVudAomIzQzOwkgKiBjb3VudGVyIHZhbHVlcyB0byBhdm9pZCBhIHNwdXJpb3VzIHNwaWtlIG9uIHRoZSBmaXJzdCBzdGF0cwomIzQzOwkgKiBxdWVyeSBhZnRlciBpbml0IG9yIG1pZ3JhdGlvbi4KJiM0MzsJICovCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKGRldi0mZ3Q7cW9zX3N0YXRzKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWRldi0mZ3Q7cW9zX3N0YXRzW2ldLmNwdV90eF9wYWNrZXRzID0KJiM0MzsJCQlhaXJvaGFfcWRtYV9ycihxZG1hLCBSRUdfQ05UUl9WQUwoaSAmbHQ7Jmx0OyAxKSk7CiYjNDM7CQlkZXYtJmd0O3Fvc19zdGF0c1tpXS5md2RfdHhfcGFja2V0cyA9CiYjNDM7CQkJYWlyb2hhX3FkbWFfcnIocWRtYSwgUkVHX0NOVFJfVkFMKChpICZsdDsmbHQ7IDEpICYjNDM7IDEpKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoY3VyX3FkbWEpCiYjNDM7CQluZXRpZl90eF93YWtlX2FsbF9xdWV1ZXMobmV0ZGV2KTsKIH0KIAogc3RhdGljIGludCBhaXJvaGFfZGV2X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKQEAgLTIwNzgsNyAmIzQzOzIxNTMsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9kZXZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCQlmYWxsdGhyb3VnaDsKIAljYXNlIEFJUk9IQV9HRE0yX0lEWDoKIAkJLyogR0RNMiBpcyBhbHdheXMgdXNlZCBhcyB3YW4gKi8KLQkJZGV2LSZndDtmbGFncyB8PSBBSVJPSEFfUFJJVl9GX1dBTjsKJiM0MzsJCXNldF9iaXQoQUlST0hBX0RFVl9GX1dBTiwgJmFtcDtkZXYtJmd0O2ZsYWdzKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CkBAIC0yMjE3LDkgJiM0MzsyMjkyLDkgQEAgc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCXN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi0mZ3Q7cWRtYTsKIAl1MzIgbnJfZnJhZ3MsIHRhZywgbXNnMCwgbXNnMSwgbGVuOwogCXN0cnVjdCBhaXJvaGFfcXVldWVfZW50cnkgKmU7CiYjNDM7CXN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTsKIAlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHE7CiAJc3RydWN0IGFpcm9oYV9xdWV1ZSAqcTsKIAlMSVNUX0hFQUQodHhfbGlzdCk7CkBAIC0yMjI4LDYgJiM0MzsyMzAzLDggQEAgc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCXUxNiBpbmRleDsKIAl1OCBmcG9ydDsKIAomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CXFkbWEgPSByY3VfZGVyZWZlcmVuY2UoZGV2LSZndDtxZG1hKTsKIAlxaWQgPSBhaXJvaGFfcWRtYV9nZXRfdHhxKHFkbWEsIHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpKTsKIAl0YWcgPSBhaXJvaGFfZ2V0X2RzYV90YWcoc2tiLCBuZXRkZXYpOwogCkBAIC0yMjc3LDYgJiM0MzsyMzU0LDggQEAgc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQluZXRpZl90eF9zdG9wX3F1ZXVlKHR4cSk7CiAJCXEtJmd0O3R4cV9zdG9wcGVkID0gdHJ1ZTsKIAkJc3Bpbl91bmxvY2tfYmgoJmFtcDtxLSZndDtsb2NrKTsKJiM0MzsJCXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwogCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAJfQogCkBAIC0yMzQyLDYgJiM0MzsyNDIxLDcgQEAgc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCUZJRUxEX1BSRVAoVFhfUklOR19DUFVfSURYX01BU0ssIGluZGV4KSk7CiAKIAlzcGluX3VubG9ja19iaCgmYW1wO3EtJmd0O2xvY2spOwomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKIAogCXJldHVybiBORVRERVZfVFhfT0s7CiAKQEAgLTIzNTQsNiAmIzQzOzI0MzQsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiBlcnJvcjoKIAlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCW5ldGRldi0mZ3Q7c3RhdHMudHhfZHJvcHBlZCYjNDM7JiM0Mzs7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwogCiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KQEAgLTI0MzMsMTcgJiM0MzsyNTE0LDE5IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfc2V0X2NoYW5fdHhfc2NoZWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkJCQkJIGNvbnN0IHUxNiAqd2VpZ2h0cywgdTggbl93ZWlnaHRzKQogewogCXN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hOwogCWludCBpOwogCiYjNDM7CXFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpOwogCWZvciAoaSA9IDA7IGkgJmx0OyBBSVJPSEFfTlVNX1FPU19RVUVVRVM7IGkmIzQzOyYjNDM7KQotCQlhaXJvaGFfcWRtYV9jbGVhcihkZXYtJmd0O3FkbWEsIFJFR19RVUVVRV9DTE9TRV9DRkcoY2hhbm5lbCksCiYjNDM7CQlhaXJvaGFfcWRtYV9jbGVhcihxZG1hLCBSRUdfUVVFVUVfQ0xPU0VfQ0ZHKGNoYW5uZWwpLAogCQkJCSAgVFhRX0RJU0FCTEVfQ0hBTl9RVUVVRV9NQVNLKGNoYW5uZWwsIGkpKTsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBuX3dlaWdodHM7IGkmIzQzOyYjNDM7KSB7CiAJCXUzMiBzdGF0dXM7CiAJCWludCBlcnI7CiAKLQkJYWlyb2hhX3FkbWFfd3IoZGV2LSZndDtxZG1hLCBSRUdfVFhXUlJfV0VJR0hUX0NGRywKJiM0MzsJCWFpcm9oYV9xZG1hX3dyKHFkbWEsIFJFR19UWFdSUl9XRUlHSFRfQ0ZHLAogCQkJICAgICAgIFRXUlJfUldfQ01EX01BU0sgfAogCQkJICAgICAgIEZJRUxEX1BSRVAoVFdSUl9DSEFOX0lEWF9NQVNLLCBjaGFubmVsKSB8CiAJCQkgICAgICAgRklFTERfUFJFUChUV1JSX1FVRVVFX0lEWF9NQVNLLCBpKSB8CkBAIC0yNDUxLDEyICYjNDM7MjUzNCwxMiBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3NldF9jaGFuX3R4X3NjaGVkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJCWVyciA9IHJlYWRfcG9sbF90aW1lb3V0KGFpcm9oYV9xZG1hX3JyLCBzdGF0dXMsCiAJCQkJCXN0YXR1cyAmYW1wOyBUV1JSX1JXX0NNRF9ET05FLAogCQkJCQlVU0VDX1BFUl9NU0VDLCAxMCAqIFVTRUNfUEVSX01TRUMsCi0JCQkJCXRydWUsIGRldi0mZ3Q7cWRtYSwgUkVHX1RYV1JSX1dFSUdIVF9DRkcpOwomIzQzOwkJCQkJdHJ1ZSwgcWRtYSwgUkVHX1RYV1JSX1dFSUdIVF9DRkcpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKIAl9CiAKLQlhaXJvaGFfcWRtYV9ybXcoZGV2LSZndDtxZG1hLCBSRUdfQ0hBTl9RT1NfTU9ERShjaGFubmVsICZndDsmZ3Q7IDMpLAomIzQzOwlhaXJvaGFfcWRtYV9ybXcocWRtYSwgUkVHX0NIQU5fUU9TX01PREUoY2hhbm5lbCAmZ3Q7Jmd0OyAzKSwKIAkJCUNIQU5fUU9TX01PREVfTUFTSyhjaGFubmVsKSwKIAkJCV9fZmllbGRfcHJlcChDSEFOX1FPU19NT0RFX01BU0soY2hhbm5lbCksIG1vZGUpKTsKIApAQCAtMjUyMCwxNyAmIzQzOzI2MDMsMjIgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9nZXRfdHhfZXRzX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBjaGFubmVsLAogCQkJCQlzdHJ1Y3QgdGNfZXRzX3FvcHRfb2ZmbG9hZCAqb3B0KQogewogCXN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQlzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtJmd0O3FkbWE7CiYjNDM7CXUzMiBjcHVfdHhfcGFja2V0cywgZndkX3R4X3BhY2tldHM7CiYjNDM7CXN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTsKJiM0MzsJdTY0IHR4X3BhY2tldHM7CiAKLQl1NjQgY3B1X3R4X3BhY2tldHMgPSBhaXJvaGFfcWRtYV9ycihxZG1hLCBSRUdfQ05UUl9WQUwoY2hhbm5lbCAmbHQ7Jmx0OyAxKSk7Ci0JdTY0IGZ3ZF90eF9wYWNrZXRzID0gYWlyb2hhX3FkbWFfcnIocWRtYSwKLQkJCQkJICAgIFJFR19DTlRSX1ZBTCgoY2hhbm5lbCAmbHQ7Jmx0OyAxKSAmIzQzOyAxKSk7Ci0JdTY0IHR4X3BhY2tldHMgPSAoY3B1X3R4X3BhY2tldHMgLSBkZXYtJmd0O2NwdV90eF9wYWNrZXRzKSAmIzQzOwotCQkJIChmd2RfdHhfcGFja2V0cyAtIGRldi0mZ3Q7ZndkX3R4X3BhY2tldHMpOwomIzQzOwlxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTsKJiM0MzsJY3B1X3R4X3BhY2tldHMgPSBhaXJvaGFfcWRtYV9ycihxZG1hLCBSRUdfQ05UUl9WQUwoY2hhbm5lbCAmbHQ7Jmx0OyAxKSk7CiYjNDM7CWZ3ZF90eF9wYWNrZXRzID0gYWlyb2hhX3FkbWFfcnIocWRtYSwKJiM0MzsJCQkJCVJFR19DTlRSX1ZBTCgoY2hhbm5lbCAmbHQ7Jmx0OyAxKSAmIzQzOyAxKSk7CiYjNDM7CXR4X3BhY2tldHMgPSAodTMyKShjcHVfdHhfcGFja2V0cyAtCiYjNDM7CQkJICAgZGV2LSZndDtxb3Nfc3RhdHNbY2hhbm5lbF0uY3B1X3R4X3BhY2tldHMpOwomIzQzOwl0eF9wYWNrZXRzICYjNDM7PSAodTMyKShmd2RfdHhfcGFja2V0cyAtCiYjNDM7CQkJICAgIGRldi0mZ3Q7cW9zX3N0YXRzW2NoYW5uZWxdLmZ3ZF90eF9wYWNrZXRzKTsKIAogCV9ic3RhdHNfdXBkYXRlKG9wdC0mZ3Q7c3RhdHMuYnN0YXRzLCAwLCB0eF9wYWNrZXRzKTsKLQlkZXYtJmd0O2NwdV90eF9wYWNrZXRzID0gY3B1X3R4X3BhY2tldHM7Ci0JZGV2LSZndDtmd2RfdHhfcGFja2V0cyA9IGZ3ZF90eF9wYWNrZXRzOwomIzQzOwlkZXYtJmd0O3Fvc19zdGF0c1tjaGFubmVsXS5jcHVfdHhfcGFja2V0cyA9IGNwdV90eF9wYWNrZXRzOwomIzQzOwlkZXYtJmd0O3Fvc19zdGF0c1tjaGFubmVsXS5md2RfdHhfcGFja2V0cyA9IGZ3ZF90eF9wYWNrZXRzOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yNzg1LDE2ICYjNDM7Mjg3MywxOCBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3NldF90eF9yYXRlX2xpbWl0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJCQkJCSB1MzIgYnVja2V0X3NpemUpCiB7CiAJc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwomIzQzOwlzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7CiAJaW50IGksIGVycjsKIAomIzQzOwlxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTsKIAlmb3IgKGkgPSAwOyBpICZsdDs9IFRSVENNX1BFQUtfTU9ERTsgaSYjNDM7JiM0MzspIHsKLQkJZXJyID0gYWlyb2hhX3FkbWFfc2V0X3RydGNtX2NvbmZpZyhkZXYtJmd0O3FkbWEsIGNoYW5uZWwsCiYjNDM7CQllcnIgPSBhaXJvaGFfcWRtYV9zZXRfdHJ0Y21fY29uZmlnKHFkbWEsIGNoYW5uZWwsCiAJCQkJCQkgICBSRUdfRUdSRVNTX1RSVENNX0NGRywgaSwKIAkJCQkJCSAgICEhcmF0ZSwgVFJUQ01fTUVURVJfTU9ERSk7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwogCi0JCWVyciA9IGFpcm9oYV9xZG1hX3NldF90cnRjbV90b2tlbl9idWNrZXQoZGV2LSZndDtxZG1hLCBjaGFubmVsLAomIzQzOwkJZXJyID0gYWlyb2hhX3FkbWFfc2V0X3RydGNtX3Rva2VuX2J1Y2tldChxZG1hLCBjaGFubmVsLAogCQkJCQkJCSBSRUdfRUdSRVNTX1RSVENNX0NGRywKIAkJCQkJCQkgaSwgcmF0ZSwgYnVja2V0X3NpemUpOwogCQlpZiAoZXJyKQpAQCAtMjgzMCwxMSAmIzQzOzI5MjAsMTIgQEAgc3RhdGljIGludCBhaXJvaGFfdGNfaHRiX2FsbG9jX2xlYWZfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAl1MzIgY2hhbm5lbCA9IFRDX0hfTUlOKG9wdC0mZ3Q7Y2xhc3NpZCkgJSBBSVJPSEFfTlVNX1FPU19DSEFOTkVMUzsKIAlpbnQgZXJyLCBudW1fdHhfcXVldWVzID0gQUlST0hBX05VTV9UWF9SSU5HICYjNDM7IGNoYW5uZWwgJiM0MzsgMTsKIAlzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0Jc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LSZndDtxZG1hOwomIzQzOwlzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7CiAKIAkvKiBIZXJlIHdlIG5lZWQgdG8gY2hlY2sgdGhlIHJlcXVlc3RlZCBRRE1BIGNoYW5uZWwgaXMgbm90IGFscmVhZHkKIAkgKiBpbiB1c2UgYnkgYW5vdGhlciBuZXRfZGV2aWNlIHJ1bm5pbmcgb24gdGhlIHNhbWUgUURNQSBibG9jay4KIAkgKi8KJiM0MzsJcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7CiAJaWYgKHRlc3RfYW5kX3NldF9iaXQoY2hhbm5lbCwgcWRtYS0mZ3Q7cW9zX2NoYW5uZWxfbWFwKSkgewogCQlOTF9TRVRfRVJSX01TR19NT0Qob3B0LSZndDtleHRhY2ssCiAJCQkJICAgJiMzNDtxZG1hIHFvcyBjaGFubmVsIGFscmVhZHkgaW4gdXNlJiMzNDspOwpAQCAtMjg3MCw3ICYjNDM7Mjk2MSw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfc2V0X3J4X21ldGVyKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2LAogCQkJCSAgICB1MzIgcmF0ZSwgdTMyIGJ1Y2tldF9zaXplLAogCQkJCSAgICBlbnVtIHRydGNtX3VuaXRfdHlwZSB1bml0X3R5cGUpCiB7Ci0Jc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LSZndDtxZG1hOwomIzQzOwlzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpOwogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUocWRtYS0mZ3Q7cV9yeCk7IGkmIzQzOyYjNDM7KSB7CkBAIC0zMDQ1LDEwICYjNDM7MzEzNiwxMSBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfdGNfcmVtb3ZlX2h0Yl9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgcXVldWUpCiB7CiAJc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCWludCBudW1fdHhfcXVldWVzID0gQUlST0hBX05VTV9UWF9SSU5HOwotCXN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi0mZ3Q7cWRtYTsKJiM0MzsJc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hOwogCiAJYWlyb2hhX3FkbWFfc2V0X3R4X3JhdGVfbGltaXQobmV0ZGV2LCBxdWV1ZSwgMCwgMCk7CiAKJiM0MzsJcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7CiAJY2xlYXJfYml0KHF1ZXVlLCBxZG1hLSZndDtxb3NfY2hhbm5lbF9tYXApOwogCWNsZWFyX2JpdChxdWV1ZSwgZGV2LSZndDtxb3Nfc3FfYm1hcCk7CiAKQEAgLTMwNzQsNiAmIzQzOzMxNjYsOTggQEAgc3RhdGljIGludCBhaXJvaGFfdGNfaHRiX2RlbGV0ZV9sZWFmX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBhaXJvaGFfZGlzYWJsZV9xb3NfZm9yX2dkbTM0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7CiYjNDM7CXN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBkZXYtJmd0O3BvcnQ7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWlmIChwb3J0LSZndDtpZCAhPSBBSVJPSEFfR0RNM19JRFggJmFtcDsmYW1wOwomIzQzOwkgICAgcG9ydC0mZ3Q7aWQgIT0gQUlST0hBX0dETTRfSURYKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwllcnIgPSBhaXJvaGFfZGlzYWJsZV9nZG0yX2xvb3BiYWNrKGRldik7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQluZXRkZXZfd2FybihuZXRkZXYsCiYjNDM7CQkJICAgICYjMzQ7ZmFpbGVkIGRpc2FibGluZyBHRE0yIGxvb3BiYWNrOiAlZFxuJiMzNDssIGVycik7CiYjNDM7CiYjNDM7CWNsZWFyX2JpdChBSVJPSEFfREVWX0ZfV0FOLCAmYW1wO2Rldi0mZ3Q7ZmxhZ3MpOwomIzQzOwlhaXJvaGFfZGV2X3NldF9xZG1hKGRldik7CiYjNDM7CiYjNDM7CWFpcm9oYV9zZXRfbWFjYWRkcihkZXYsIG5ldGRldi0mZ3Q7ZGV2X2FkZHIpOwomIzQzOwlhaXJvaGFfcHBlX3NldF94bWl0X2ZyYW1lX3NpemUoZGV2KTsKJiM0MzsKJiM0MzsJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKJiM0MzsJCWFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhkZXYtJmd0O2V0aCwKJiM0MzsJCQkJCSAgICBSRUdfR0RNX0ZXRF9DRkcocG9ydC0mZ3Q7aWQpLAomIzQzOwkJCQkJICAgIEZFX1BTRV9QT1JUX1BQRTEpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFpcm9oYV9lbmFibGVfcW9zX2Zvcl9nZG0zNChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAomIzQzOwkJCQkgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQomIzQzO3sKJiM0MzsJc3RydWN0IGFpcm9oYV9nZG1fZGV2ICp3YW5fZGV2LCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJc3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGRldi0mZ3Q7cG9ydDsKJiM0MzsJc3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IGRldi0mZ3Q7ZXRoOwomIzQzOwlpbnQgZXJyID0gLUVCVVNZOwomIzQzOwomIzQzOwlpZiAocG9ydC0mZ3Q7aWQgIT0gQUlST0hBX0dETTNfSURYICZhbXA7JmFtcDsKJiM0MzsJICAgIHBvcnQtJmd0O2lkICE9IEFJUk9IQV9HRE00X0lEWCkgewomIzQzOwkJLyogSFcgUW9TIGlzIGFsd2F5cyBzdXBwb3J0ZWQgYnkgR0RNMSBhbmQgR0RNMiAqLwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFhaXJvaGFfaXNfbGFuX2dkbV9kZXYoZGV2KSkgLyogQWxyZWFkeSBlbmFibGVkICovCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO2Zsb3dfb2ZmbG9hZF9tdXRleCk7CiYjNDM7CiYjNDM7CXdhbl9kZXYgPSBhaXJvaGFfZ2V0X3dhbl9nZG1fZGV2KGV0aCk7CiYjNDM7CWlmICh3YW5fZGV2KSB7CiYjNDM7CQlpZiAodGVzdF9iaXQoQUlST0hBX0RFVl9GX1RYX1FPUywgJmFtcDt3YW5fZGV2LSZndDtmbGFncykgfHwKJiM0MzsJCSAgICB3YW5fZGV2LSZndDtwb3J0LSZndDtpZCA9PSBBSVJPSEFfR0RNMl9JRFgpIHsKJiM0MzsJCQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLAomIzQzOwkJCQkJICAgJiMzNDtRb1MgY29uZmlndXJlZCBmb3IgV0FOIGRldmljZSYjMzQ7KTsKJiM0MzsJCQlnb3RvIGVycm9yX3VubG9jazsKJiM0MzsJCX0KJiM0MzsJCWFpcm9oYV9kaXNhYmxlX3Fvc19mb3JfZ2RtMzQobmV0ZGV2X2Zyb21fcHJpdih3YW5fZGV2KSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2V0X2JpdChBSVJPSEFfREVWX0ZfV0FOLCAmYW1wO2Rldi0mZ3Q7ZmxhZ3MpOwomIzQzOwlhaXJvaGFfZGV2X3NldF9xZG1hKGRldik7CiYjNDM7CWVyciA9IGFpcm9oYV9lbmFibGVfZ2RtMl9sb29wYmFjayhkZXYpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBlcnJvcl9kaXNhYmxlX3dhbjsKJiM0MzsKJiM0MzsJZXJyID0gYWlyb2hhX3NldF9tYWNhZGRyKGRldiwgbmV0ZGV2LSZndDtkZXZfYWRkcik7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIGVycm9yX2Rpc2FibGVfbG9vcGJhY2s7CiYjNDM7CiYjNDM7CWFpcm9oYV9kZXZfc2V0X3htaXRfZnJhbWVfc2l6ZShuZXRkZXYpOwomIzQzOwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CiYjNDM7CQl1MzIgcHNlX3BvcnQ7CiYjNDM7CiYjNDM7CQlwc2VfcG9ydCA9IGFpcm9oYV9wcGVfaXNfZW5hYmxlZChldGgsIDEpID8gRkVfUFNFX1BPUlRfUFBFMgomIzQzOwkJCQkJCQkgOiBGRV9QU0VfUE9SVF9QUEUxOwomIzQzOwkJYWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKGV0aCwgUkVHX0dETV9GV0RfQ0ZHKHBvcnQtJmd0O2lkKSwKJiM0MzsJCQkJCSAgICBwc2VfcG9ydCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7Zmxvd19vZmZsb2FkX211dGV4KTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyb3JfZGlzYWJsZV9sb29wYmFjazoKJiM0MzsJYWlyb2hhX2Rpc2FibGVfZ2RtMl9sb29wYmFjayhkZXYpOwomIzQzO2Vycm9yX2Rpc2FibGVfd2FuOgomIzQzOwljbGVhcl9iaXQoQUlST0hBX0RFVl9GX1dBTiwgJmFtcDtkZXYtJmd0O2ZsYWdzKTsKJiM0MzsJYWlyb2hhX2Rldl9zZXRfcWRtYShkZXYpOwomIzQzO2Vycm9yX3VubG9jazoKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7Zmxvd19vZmZsb2FkX211dGV4KTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGFpcm9oYV90Y19odGJfZGVzdHJveShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKQEAgLTMwODIsNiAmIzQzOzMyNjYsOCBAQCBzdGF0aWMgaW50IGFpcm9oYV90Y19odGJfZGVzdHJveShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCWZvcl9lYWNoX3NldF9iaXQocSwgZGV2LSZndDtxb3Nfc3FfYm1hcCwgQUlST0hBX05VTV9RT1NfQ0hBTk5FTFMpCiAJCWFpcm9oYV90Y19yZW1vdmVfaHRiX3F1ZXVlKG5ldGRldiwgcSk7CiAKJiM0MzsJY2xlYXJfYml0KEFJUk9IQV9ERVZfRl9UWF9RT1MsICZhbXA7ZGV2LSZndDtmbGFncyk7CiYjNDM7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMxMDEsMjQgJiM0MzszMjg3LDMzIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3RjX2dldF9odGJfZ2V0X2xlYWZfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBhaXJvaGFfdGNfc2V0dXBfcWRpc2NfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiYjNDM7c3RhdGljIGludCBhaXJvaGFfdGNfc2V0dXBfcWRpc2NfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJCQkJICAgICBzdHJ1Y3QgdGNfaHRiX3FvcHRfb2ZmbG9hZCAqb3B0KQogewogCXN3aXRjaCAob3B0LSZndDtjb21tYW5kKSB7Ci0JY2FzZSBUQ19IVEJfQ1JFQVRFOgomIzQzOwljYXNlIFRDX0hUQl9DUkVBVEU6IHsKJiM0MzsJCXN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJCWludCBlcnI7CiYjNDM7CiYjNDM7CQllcnIgPSBhaXJvaGFfZW5hYmxlX3Fvc19mb3JfZ2RtMzQobmV0ZGV2LCBvcHQtJmd0O2V4dGFjayk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CQlzZXRfYml0KEFJUk9IQV9ERVZfRl9UWF9RT1MsICZhbXA7ZGV2LSZndDtmbGFncyk7CiAJCWJyZWFrOwomIzQzOwl9CiAJY2FzZSBUQ19IVEJfREVTVFJPWToKLQkJcmV0dXJuIGFpcm9oYV90Y19odGJfZGVzdHJveShkZXYpOwomIzQzOwkJcmV0dXJuIGFpcm9oYV90Y19odGJfZGVzdHJveShuZXRkZXYpOwogCWNhc2UgVENfSFRCX05PREVfTU9ESUZZOgotCQlyZXR1cm4gYWlyb2hhX3RjX2h0Yl9tb2RpZnlfcXVldWUoZGV2LCBvcHQpOwomIzQzOwkJcmV0dXJuIGFpcm9oYV90Y19odGJfbW9kaWZ5X3F1ZXVlKG5ldGRldiwgb3B0KTsKIAljYXNlIFRDX0hUQl9MRUFGX0FMTE9DX1FVRVVFOgotCQlyZXR1cm4gYWlyb2hhX3RjX2h0Yl9hbGxvY19sZWFmX3F1ZXVlKGRldiwgb3B0KTsKJiM0MzsJCXJldHVybiBhaXJvaGFfdGNfaHRiX2FsbG9jX2xlYWZfcXVldWUobmV0ZGV2LCBvcHQpOwogCWNhc2UgVENfSFRCX0xFQUZfREVMOgogCWNhc2UgVENfSFRCX0xFQUZfREVMX0xBU1Q6CiAJY2FzZSBUQ19IVEJfTEVBRl9ERUxfTEFTVF9GT1JDRToKLQkJcmV0dXJuIGFpcm9oYV90Y19odGJfZGVsZXRlX2xlYWZfcXVldWUoZGV2LCBvcHQpOwomIzQzOwkJcmV0dXJuIGFpcm9oYV90Y19odGJfZGVsZXRlX2xlYWZfcXVldWUobmV0ZGV2LCBvcHQpOwogCWNhc2UgVENfSFRCX0xFQUZfUVVFUllfUVVFVUU6Ci0JCXJldHVybiBhaXJvaGFfdGNfZ2V0X2h0Yl9nZXRfbGVhZl9xdWV1ZShkZXYsIG9wdCk7CiYjNDM7CQlyZXR1cm4gYWlyb2hhX3RjX2dldF9odGJfZ2V0X2xlYWZfcXVldWUobmV0ZGV2LCBvcHQpOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CkBAIC0zMjIwLDggJiM0MzszNDE1LDggQEAgc3RhdGljIGludCBhaXJvaGFfYWxsb2NfZ2RtX2RldmljZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLAogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CiAJc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXY7CiYjNDM7CWludCBlcnIsIGk7CiAJdTggaW5kZXg7Ci0JaW50IGVycjsKIAogCW5ldGRldiA9IGRldm1fYWxsb2NfZXRoZXJkZXZfbXFzKGV0aC0mZ3Q7ZGV2LCBzaXplb2YoKmRldiksCiAJCQkJCSBBSVJPSEFfTlVNX05FVERFVl9UWF9SSU5HUywKQEAgLTMyNzIsNiAmIzQzOzM0NjcsOCBAQCBzdGF0aWMgaW50IGFpcm9oYV9hbGxvY19nZG1fZGV2aWNlKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsCiAJbmV0ZGV2LSZndDtkZXYub2Zfbm9kZSA9IG9mX25vZGVfZ2V0KG5wKTsKIAlkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXU2NF9zdGF0c19pbml0KCZhbXA7ZGV2LSZndDtzdGF0cy5zeW5jcCk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKGRldi0mZ3Q7dHhxX2xvY2spOyBpJiM0MzsmIzQzOykKJiM0MzsJCXNwaW5fbG9ja19pbml0KCZhbXA7ZGV2LSZndDt0eHFfbG9ja1tpXSk7CiAJZGV2LSZndDtwb3J0ID0gcG9ydDsKIAlkZXYtJmd0O2V0aCA9IGV0aDsKIAlkZXYtJmd0O25icSA9IG5icTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oCmluZGV4IGZlOTM0ZjlmZmU4YTExLi5mYTlhOGVkY2UyMmZmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oCkBAIC01NzAsMjQgJiM0Mzs1NzAsMzEgQEAgc3RydWN0IGFpcm9oYV9xZG1hIHsKIAlERUNMQVJFX0JJVE1BUChxb3NfY2hhbm5lbF9tYXAsIEFJUk9IQV9OVU1fUU9TX0NIQU5ORUxTKTsKIH07CiAKLWVudW0gYWlyb2hhX3ByaXZfZmxhZ3MgewotCUFJUk9IQV9QUklWX0ZfV0FOID0gQklUKDApLAomIzQzO2VudW0gYWlyb2hhX2Rldl9mbGFncyB7CiYjNDM7CUFJUk9IQV9ERVZfRl9XQU4sCiYjNDM7CUFJUk9IQV9ERVZfRl9UWF9RT1MsCiB9OwogCiBzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgewomIzQzOwlzdHJ1Y3QgYWlyb2hhX3FkbWEgX19yY3UgKnFkbWE7CiAJc3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydDsKLQlzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7CiAJc3RydWN0IGFpcm9oYV9ldGggKmV0aDsKIAogCURFQ0xBUkVfQklUTUFQKHFvc19zcV9ibWFwLCBBSVJPSEFfTlVNX1FPU19DSEFOTkVMUyk7Ci0JLyogcW9zIHN0YXRzIGNvdW50ZXJzICovCi0JdTY0IGNwdV90eF9wYWNrZXRzOwotCXU2NCBmd2RfdHhfcGFja2V0czsKJiM0MzsJc3RydWN0IHsKJiM0MzsJCXUzMiBjcHVfdHhfcGFja2V0czsKJiM0MzsJCXUzMiBmd2RfdHhfcGFja2V0czsKJiM0MzsJfSBxb3Nfc3RhdHNbQUlST0hBX05VTV9RT1NfQ0hBTk5FTFNdOwogCi0JdTMyIGZsYWdzOwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBuYnE7CiAKIAlzdHJ1Y3QgYWlyb2hhX2h3X3N0YXRzIHN0YXRzOwomIzQzOwomIzQzOwkvKiBTZXJpYWxpemUgbmV0ZGV2X3R4X2NvbXBsZXRlZF9xdWV1ZSgpIGNhbGxzIHBlciBUWCBxdWV1ZSBkdXJpbmcKJiM0MzsJICogUURNQSBtaWdyYXRpb24uCiYjNDM7CSAqLwomIzQzOwlzcGlubG9ja190IHR4cV9sb2NrW0FJUk9IQV9OVU1fTkVUREVWX1RYX1JJTkdTXTsKIH07CiAKIHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgewpAQCAtNjk0LDcgJiM0Mzs3MDEsNyBAQCBzdGF0aWMgaW5saW5lIHUxNiBhaXJvaGFfcWRtYV9nZXRfdHhxKHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSwgdTE2IHFpZCkKIAogc3RhdGljIGlubGluZSBib29sIGFpcm9oYV9pc19sYW5fZ2RtX2RldihzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldikKIHsKLQlyZXR1cm4gIShkZXYtJmd0O2ZsYWdzICZhbXA7IEFJUk9IQV9QUklWX0ZfV0FOKTsKJiM0MzsJcmV0dXJuICF0ZXN0X2JpdChBSVJPSEFfREVWX0ZfV0FOLCAmYW1wO2Rldi0mZ3Q7ZmxhZ3MpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgYWlyb2hhX2lzXzc1ODEoc3RydWN0IGFpcm9oYV9ldGggKmV0aCkKQEAgLTcxMSw2ICYjNDM7NzE4LDE2IEBAIGludCBhaXJvaGFfZ2V0X2ZlX3BvcnQoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpOwogYm9vbCBhaXJvaGFfaXNfdmFsaWRfZ2RtX2RldihzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLAogCQkJICAgICBzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldik7CiAKJiM0MztleHRlcm4gc3RydWN0IG11dGV4IGZsb3dfb2ZmbG9hZF9tdXRleDsKJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBhaXJvaGFfcWRtYSAqCiYjNDM7YWlyb2hhX3FkbWFfZGVyZWYoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpCiYjNDM7ewomIzQzOwlyZXR1cm4gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChkZXYtJmd0O3FkbWEsCiYjNDM7CQkJCQkgbG9ja2RlcF9ydG5sX2lzX2hlbGQoKSB8fAomIzQzOwkJCQkJIGxvY2tkZXBfaXNfaGVsZCgmYW1wO2Zsb3dfb2ZmbG9hZF9tdXRleCkpOwomIzQzO30KJiM0MzsKIHZvaWQgYWlyb2hhX3BwZV9zZXRfeG1pdF9mcmFtZV9zaXplKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KTsKIHZvaWQgYWlyb2hhX3BwZV9zZXRfY3B1X3BvcnQoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYsIHU4IHBwZV9pZCwgdTggZnBvcnQpOwogYm9vbCBhaXJvaGFfcHBlX2lzX2VuYWJsZWQoc3RydWN0IGFpcm9oYV9ldGggKmV0aCwgaW50IGluZGV4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jCmluZGV4IGU0YzM2NDRkZDZlYzdhLi4zM2RkZjBkMDc4NTUzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jCkBAIC0xNSw3ICYjNDM7MTUsMTAgQEAKICNpbmNsdWRlICYjMzQ7YWlyb2hhX3JlZ3MuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2Fpcm9oYV9ldGguaCYjMzQ7CiAKLXN0YXRpYyBERUZJTkVfTVVURVgoZmxvd19vZmZsb2FkX211dGV4KTsKJiM0MzsvKiBTZXJpYWxpemUgYWlyb2hhX2dkbV9kZXYgZmxhZ3MsIFFETUEgcG9pbnRlciBhbmQgUFBFIENQVSBwb3J0CiYjNDM7ICogY29uZmlndXJhdGlvbi4KJiM0MzsgKi8KJiM0MztERUZJTkVfTVVURVgoZmxvd19vZmZsb2FkX211dGV4KTsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0socHBlX2xvY2spOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJoYXNodGFibGVfcGFyYW1zIGFpcm9oYV9mbG93X3RhYmxlX3BhcmFtcyA9IHsKQEAgLTg2LDggJiM0Mzs4OSw4IEBAIHN0YXRpYyB1MzIgYWlyb2hhX3BwZV9nZXRfdGltZXN0YW1wKHN0cnVjdCBhaXJvaGFfcHBlICpwcGUpCiAKIHZvaWQgYWlyb2hhX3BwZV9zZXRfY3B1X3BvcnQoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYsIHU4IHBwZV9pZCwgdTggZnBvcnQpCiB7Ci0Jc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LSZndDtxZG1hOwotCXN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBxZG1hLSZndDtldGg7CiYjNDM7CXN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7CiYjNDM7CXN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBkZXYtJmd0O2V0aDsKIAl1OCBxZG1hX2lkID0gcWRtYSAtICZhbXA7ZXRoLSZndDtxZG1hWzBdOwogCXUzMiBmZV9jcHVfcG9ydDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9yZWdzLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaAppbmRleCA2ZmVkNjNkMDEzYjQxMi4uNDQyYjQ4YzliOTkxZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcmVncy5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcmVncy5oCkBAIC0zNzUsNiAmIzQzOzM3NSw3IEBACiAKICNkZWZpbmUgUkVHX1NSQ19QT1JUX0ZDX01BUDYJCTB4MjI5OAogI2RlZmluZSBGQ19JRF9PRl9TUkNfUE9SVF9NQVNLKF9uKQlHRU5NQVNLKDQgJiM0MzsgKChfbikgJmx0OyZsdDsgMyksICgoX24pICZsdDsmbHQ7IDMpKQomIzQzOyNkZWZpbmUgRkNfTUFQNl9ERUZfVkFMVUUJCTB4MWIxYTE5MTgKIAogI2RlZmluZSBSRUdfV0FOX01UVTAJCQkweDIzMDAKICNkZWZpbmUgV0FOX01UVTFfTUFTSwkJCUdFTk1BU0soMjksIDE2KQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxODo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTIxNwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDEyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEFpcm9oYSBFdGhlcm5ldCBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gdGhlIEFpcm9oYSBldGhlcm5ldCBkcml2ZXIsIHNwZWNpZmljYWxseSBwb2tpbmcgYXJvdW5kIGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jYCBhbmQgaXRzIGZyaWVuZHMuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgUkNVIHByb3RlY3Rpb24gZm9yIGBkZXYtJmd0O3FkbWFgIGFuZCB0aGUgYWRkZWQgUW9TIHN1cHBvcnQgZm9yIEdETTMvNC4gVGhhdCYjMzk7cyBhIHNpZ25pZmljYW50IGNoYW5nZTsgaXQmIzM5O3MgZnVuY3Rpb25hbGx5IGFsdGVyaW5nIHRoZSBuZXR3b3JrIGRyaXZlciYjMzk7cyBiZWhhdmlvci4gSSBuZWVkIHRvIGJlIHN1cmUgdGhpcyBpcyBnb2luZyB0byBiZWhhdmUgY29ycmVjdGx5LgoKRmlyc3QsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IHdheSB0byB0ZXN0IHRoaXMgdGhvcm91Z2hseS4gQ2FuIEkgc2ltdWxhdGUgdGhlIEFpcm9oYSBoYXJkd2FyZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBUaGF0IHdvdWxkIG1ha2UgdGVzdGluZyBhbmQgZGVidWdnaW5nIGNvbnNpZGVyYWJseSBlYXNpZXIuIEl0JiMzOTtzIGEga2V5IHF1ZXN0aW9uLiBJIG5lZWQgdG8ga25vdyB0aGUgc3BlY2lmaWMgdGFyZ2V0LgoKQW5kIHRoYXQgbGVhZHMgbWUgdG8gbXkgbmV4dCBxdWVzdGlvbjogSXMgdGhpcyBkcml2ZXIgZGVzaWduZWQgZm9yIGEgc3BlY2lmaWMgU3lzdGVtLW9uLUNoaXAgKFNvQyksIG9yIGlzIGl0IG1vcmUgb2YgYSBnZW5lcmFsIGRyaXZlciB0aGF0IHN1cHBvcnRzIGEgc3BlY2lmaWMgUENJZSBjYXJkIGltcGxlbWVudGF0aW9uPyBVbmRlcnN0YW5kaW5nIHRoZSBoYXJkd2FyZSBjb250ZXh0IGlzIGNydWNpYWwgZm9yIGludGVycHJldGluZyB0aGVzZSBjaGFuZ2VzLiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnYCBmaWxlIHRvIHNlZSBpZiBJIGNhbiBnZXQgc29tZSBjb250ZXh0LiBUaGF0IHNob3VsZCBwcm92aWRlIHNvbWUgaGludHMgYWJvdXQgdGhlIGhhcmR3YXJlIHJlcXVpcmVtZW50cyBvciB0YXJnZXRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE4OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfVkVORE9SX0FJUk9IQSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZzoyOmNvbmZpZyBORVRfVkVORE9SX0FJUk9IQVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWctMy1cdGJvb2wgXCYjMzQ7QWlyb2hhIGRldmljZXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxODo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTczOQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqSW52ZW50b3J5IEFzc2Vzc21lbnQ6IFZlbmRvciBGb2N1cyoqCgpBbHJpZ2h0LCBzbyB0aGUgaW1tZWRpYXRlIGdvYWwgaXMgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBsYW5kc2NhcGUgb2YgZGV2aWNlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBzcGVjaWZpYyB2ZW5kb3IuIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiB3aGF0IHdlIGhhdmUgZGVwbG95ZWQsIGFuZCB3aGVyZSB3ZSYjMzk7cmUgYXQgd2l0aCBpdC4gVGhpcyBpcyBhIGZvdW5kYXRpb25hbCBzdGVwLCBhbmQgZGVwZW5kaW5nIG9uIHRoZSBsZXZlbCBvZiBncmFudWxhcml0eSBhdmFpbGFibGUsIGl0IG1heSBndWlkZSBmdXJ0aGVyIGFuYWx5c2lzLiBEZXBlbmRpbmcgb24gd2hhdCBJIGZpbmQsIHRoZSBmb2N1cyBjb3VsZCBzaGlmdCB0byBhIHJpc2sgYXNzZXNzbWVudCwgYSBwZXJmb3JtYW5jZSByZXZpZXcsIG9yIG1heWJlIGV2ZW4gYSBsaWNlbnNlIGNvbXBsaWFuY2UgY2hlY2ssIGJ1dCBmaXJzdCBJIG5lZWQgYSBjb21wbGV0ZSBwaWN0dXJlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3JlIHdvcmtpbmcgd2l0aCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE4OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfVkVORE9SX0FJUk9IQSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjI6Y29uZmlnIE5FVF9WRU5ET1JfQUlST0hBXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZy0zLVx0Ym9vbCBcJiMzNDtBaXJvaGEgZGV2aWNlc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE4OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDIxCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4gVGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gcmVhY2hpbmcgZm9yIGlzIHRoZSBLY29uZmlnIGZpbGUuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIHF1aWNrIHNjYW4gb2YgaXRzIGNvbnRlbnRzLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBrZXkgdmFyaWFibGVzLCBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgb2J2aW91cyBjaGFuZ2VzIGZyb20gdGhlIGxhc3QgdGltZSBJIHRvdWNoZWQgdGhpcy4gSSB3YW50IHRvIHNlZSBpZiBhbnl0aGluZyBqdW1wcyBvdXQgdGhhdCYjMzk7cyBiZWVuIHJlY2VudGx5IG1vZGlmaWVkLCBvciBpZiBhbnl0aGluZyBsb29rcyBvdXQgb2YgcGxhY2UgZ2l2ZW4gbXkgY3VycmVudCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzeXN0ZW0mIzM5O3MgZ29hbHMuIEkgYW0gYWxyZWFkeSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGlmIG9uZSBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGlzIGNoYW5nZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTg6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgTkVUX1ZFTkRPUl9BSVJPSEFcbiAgIDM6XHRcdGJvb2wgXCYjMzQ7QWlyb2hhIGRldmljZXNcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gQVJDSF9BSVJPSEEgfHwgQ09NUElMRV9URVNUXG4gICA1Olx0XHRoZWxwXG4gICA2Olx0XHQgIElmIHlvdSBoYXZlIGEgQWlyb2hhIFNvQyB3aXRoIGV0aGVybmV0LCBzYXkgWS5cbiAgIDc6XHRcbiAgIDg6XHRpZiBORVRfVkVORE9SX0FJUk9IQVxuICAgOTpcdFxuICAxMDpcdGNvbmZpZyBORVRfQUlST0hBX05QVVxuICAxMTpcdFx0dHJpc3RhdGUgXCYjMzQ7QWlyb2hhIE5QVSBzdXBwb3J0XCYjMzQ7XG4gIDEyOlx0XHRzZWxlY3QgV0FOVF9ERVZfQ09SRURVTVBcbiAgMTM6XHRcdHNlbGVjdCBSRUdNQVBfTU1JT1xuICAxNDpcdFx0aGVscFxuICAxNTpcdFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBBaXJvaGEgTmV0d29yayBQcm9jZXNzb3IgKE5QVSkgYXZhaWxhYmxlXG4gIDE2Olx0XHQgIG9uIHRoZSBBaXJvaGEgU29jIGZhbWlseS5cbiAgMTc6XHRcbiAgMTg6XHRjb25maWcgTkVUX0FJUk9IQVxuICAxOTpcdFx0dHJpc3RhdGUgXCYjMzQ7QWlyb2hhIFNvQyBHaWdhYml0IEV0aGVybmV0IHN1cHBvcnRcJiMzNDtcbiAgMjA6XHRcdGRlcGVuZHMgb24gTkVUX0RTQSB8fCAhTkVUX0RTQVxuICAyMTpcdFx0c2VsZWN0IE5FVF9BSVJPSEFfTlBVXG4gIDIyOlx0XHRzZWxlY3QgUEFHRV9QT09MXG4gIDIzOlx0XHRoZWxwXG4gIDI0Olx0XHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBnaWdhYml0IGV0aGVybmV0IE1BQ3MgaW4gdGhlXG4gIDI1Olx0XHQgIEFpcm9oYSBTb0MgZmFtaWx5LlxuICAyNjpcdFxuICAyNzpcdGNvbmZpZyBORVRfQUlST0hBX0ZMT1dfU1RBVFNcbiAgMjg6XHRcdGRlZmF1bHQgeVxuICAyOTpcdFx0Ym9vbCBcJiMzNDtBaXJvaGEgZmxvdyBzdGF0c1wmIzM0O1xuICAzMDpcdFx0ZGVwZW5kcyBvbiBORVRfQUlST0hBIFx1MDAyNlx1MDAyNiBORVRfQUlST0hBX05QVVxuICAzMTpcdFx0aGVscFxuICAzMjpcdFx0ICBFbmFibGUgQWlyb2hhIGZsb3d0YWJsZSBzdGF0aXN0aWMgY291bnRlcnMuXG4gIDMzOlx0XG4gIDM0Olx0ZW5kaWYgI05FVF9WRU5ET1JfQUlST0hBXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTg6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2NTkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBBaXJvaGEgU29DIEdpZ2FiaXQgRXRoZXJuZXQgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGRyaXZlciwgdGhlICYjMzQ7QWlyb2hhIFNvQyBHaWdhYml0IEV0aGVybmV0IHN1cHBvcnQmIzM0OyBvbmUuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSBpdCYjMzk7cyBjb25kaXRpb25hbCBvbiBgQVJDSF9BSVJPSEFgIG9yIGBDT01QSUxFX1RFU1RgLiBNYWtlcyBzZW5zZSwgaXQmIzM5O3Mgc3BlY2lmaWMgdG8gdGhhdCBTb0MuIEdpdmVuIHRoYXQgaXQmIzM5O3MgYW4gU29DIGV0aGVybmV0IGRyaXZlciwgaXQmIzM5O3MgcHJvYmFibHkgZ29pbmcgdG8gYmUgYSBwbGF0Zm9ybSBkZXZpY2UuIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMsIGNhbiBJIGVmZmVjdGl2ZWx5IGZ1enogdGhpcyBpbiBRRU1VPyBBbmQgdGhhdCYjMzk7cyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBTdGFuZGFyZCBRRU1VIGRvZXNuJiMzOTt0IHVzdWFsbHkgZW11bGF0ZSBTb0Mtc3BlY2lmaWMgcGxhdGZvcm0gZGV2aWNlcyB1bmxlc3MgdGhlcmUmIzM5O3MgZXhwbGljaXQgc3VwcG9ydCBidWlsdC1pbi4KClRoZW4gSSBzdGFydCB0aGlua2luZywgY2FuIHN5emthbGxlciBoZWxwIG1lIGhlcmU/IFdlbGwsIHN5emthbGxlciAqY2FuKiBmdXp6IHBsYXRmb3JtIGRldmljZXMsIGlmIHRoZXkmIzM5O3JlIHNldCB1cCB2aWEgdGhlIGRldmljZSB0cmVlIG9yIGlmIGl0IGNhbiBpbmplY3QgdGhlbS4gQnV0LCBteSBleHBlcmllbmNlIHNheXMgc3l6a2FsbGVyJiMzOTtzIHN0cmVuZ3RocyBsaWUgaW4gUENJLCBVU0IsIGFuZCB2aXJ0dWFsIGRldmljZXMuIFBsYXRmb3JtIGRldmljZXMgYXJlIGEgYml0IHRyaWNraWVyLCB0aGV5IHJlcXVpcmUgc3BlY2lmaWMgZW11bGF0b3IgbW9kZWxzIG9yIHN5emthbGxlciBuZWVkcyB0byBnZW5lcmF0ZSB0aGVzZSwgYW5kIGl0JiMzOTtzIG5vdCB0aGUgdXN1YWwgcm91dGUuCgpIb2xkIG9uLCBJIHJlY2FsbCBgc3l6X2dlbmV0bGlua2AgYW5kIG90aGVyIG5ldHdvcmsgZnV6emluZyBjYXBhYmlsaXRpZXMgaW4gc3l6a2FsbGVyLiBIb3dldmVyLCBmdXp6aW5nIGEgc3BlY2lmaWMgU29DIGV0aGVybmV0IGRyaXZlciBtZWFucyB0aGUgZGV2aWNlIG5lZWRzIHRvIGJlICpwcm9iZWQqLiBJdCYjMzk7cyBub3QganVzdCBhYm91dCBuZXR3b3JrIHByaW1pdGl2ZXM7IHRoZSBkcml2ZXIgaGFzIHRvIHN1Y2Nlc3NmdWxseSBhdHRhY2ggdG8gdGhlIGhhcmR3YXJlLiBTbywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZHJpdmVyIGlzIGFjdHVhbGx5IHByb2JlZC4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBkcml2ZXImIzM5O3MgcHJvYmluZyBtZWNoYW5pc20gYW5kIHNlZSBob3cgaXTigJlzIGluaXRpYWxpemVkLiBUaGF0IHdpbGwgZGV0ZXJtaW5lIGlmIEkgY2FuIGdldCB0aGlzIHRoaW5nIHVwIGFuZCBydW5uaW5nIGZvciBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxODo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb2R1bGVfcGxhdGZvcm1fZHJpdmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jPTM5NTQ9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYWlyb2hhX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTM5NjEtfTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM6Mzk2Mjptb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGFpcm9oYV9kcml2ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYy0zOTYzLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM9ODEzPXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGFpcm9oYV9ucHVfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtODIwLX07XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjgyMTptb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGFpcm9oYV9ucHVfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtODIyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxODo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQ4NgoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNoZWNraW5nIFN5emthbGxlciYjMzk7cyBQbGF0Zm9ybSBEcml2ZXIgQ292ZXJhZ2UqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyB0aGlzIGlzIHByb2JhYmx5IGEgcGxhdGZvcm0gZHJpdmVyLCB3aGljaCBtZWFucyBTeXprYWxsZXIgbWlnaHQgYmUgYWJsZSB0byBpbnRlcmFjdCB3aXRoIGl0LCBidXQgaXQmIzM5O3Mgbm90IGEgZ2l2ZW4uIFN5emthbGxlciYjMzk7cyBnb29kIGF0IGluc3RhbnRpYXRpbmcgcGxhdGZvcm0gZGV2aWNlcyB3aGVuIGl0IGhhcyB0aGUgcmlnaHQgZGVzY3JpcHRpb25zLCBidXQgdGhvc2UgZGVzY3JpcHRpb25zIGFyZSBvZnRlbiBtaXNzaW5nIGZvciBzcGVjaWFsaXplZCBvciBsZXNzIGNvbW1vbiBTb0MgZXRoZXJuZXQgZHJpdmVycy4gVW5sZXNzIGl0JiMzOTtzIGEgdmVyeSBwcmV2YWxlbnQgZHJpdmVyIG9yIHNvbWVvbmUmIzM5O3Mgc3BlY2lmaWNhbGx5IGFkZGVkIHN1cHBvcnQgZm9yIGl0LCB3ZSYjMzk7cmUgbGlrZWx5IGdvaW5nIHRvIGJlIGluIHRoZSBkYXJrLiBNeSBmaXJzdCBtb3ZlIGhlcmUgaXMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgU3l6a2FsbGVyIGhhcyBhbnkgYnVpbHQtaW4gZGVzY3JpcHRpb25zIGZvciB0aGUgQWlyb2hhIHBsYXRmb3JtLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE4OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWlyb2hhJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7c3lzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE4OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzI5CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNzI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQWlyb2hhIEV0aGVybmV0IERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gYXNzZXNzIHRoaXMgcGF0Y2ggZm9yIGZ1enppbmcgd29ydGhpbmVzcy4gVGhlIGltbWVkaWF0ZSBjaGFsbGVuZ2UgaXMgdGhhdCBJIGNhbiYjMzk7dCB1c2UgYGdyZXBwZXJgIHRvIHNlYXJjaCB0aGUgYHN5cy9gIGRpcmVjdG9yeS4gVGhhdCYjMzk7cyBhIGdpdmVuLiBUaGUgZG9jdW1lbnRhdGlvbiBleHBsaWNpdGx5IHByb2hpYml0cyBpdCBiZWNhdXNlIGBzeXprYWxsZXJgIGRlc2NyaXB0aW9ucyBhbmQgc3l6XyBzeXNjYWxscyBhcmVuJiMzOTt0IGFjdHVhbGx5IGtlcm5lbCBjb2RlLiBJdCBsb29rcyBsaWtlIEkgbmVlZCB0byBlaXRoZXIgdXNlIGByZWFkLWZpbGVgIG9yIGBjb2Rlc2VhcmNoLWRpci1pbmRleGAsIGJ1dCBob2xkIG9uLi4uIHRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmaWNhbGx5IHNheSBJIHNob3VsZCBiZSB1c2luZyBge3sudG9vbFJlYWREZXNjcmlwdGlvbn19YCBpbnN0ZWFkLiAqV2FpdCBhIHNlY29uZCEqIFRoZXJlIGlzbiYjMzk7dCBhIGB0b29sUmVhZERlc2NyaXB0aW9uYCB0b29sIGluIHRoZSBsaXN0LiBUaGlzIGlzIGZydXN0cmF0aW5nLiBPa2F5LCBJJiMzOTttIGxlZnQgd2l0aCB0aGUgb3RoZXIgdG9vbHMuIEkgY2FuJiMzOTt0IGNoZWNrIHN5emthbGxlciBkZXNjcmlwdGlvbnMuCgpBbHJpZ2h0LCByZWZvY3VzLiBUaGUgaW5zdHJ1Y3Rpb25zIHRlbGwgbWUgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIHVuZGVyIHNwZWNpZmljIGNpcmN1bXN0YW5jZXMuIExldCBtZSBzZWUuLi4gRG9jdW1lbnRhdGlvbi9LY29uZmlnIGNoYW5nZXMsIGNvbW1lbnRzLCBkZWNvcmF0aXZlIGNoYW5nZXMsIGNvbnN0YW50cy9tYWNyb3Mgd2l0aG91dCBmdW5jdGlvbmFsIGltcGFjdCwgYW5kICpjcnVjaWFsbHkqIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UuIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIEdQVSBkcml2ZXJzIHRoYXQgbmVlZCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gUUVNVSwgb3IgYC5yZW1vdmUvLnNodXRkb3duYCBjYWxsYmFja3MgYXJlIGFsc28gb3V0LgoKVGhpcyBpcyBhbiBBaXJvaGEgU29DLXNwZWNpZmljIGV0aGVybmV0IGRyaXZlci4gSXQgcmVxdWlyZXMgYSBwaHlzaWNhbCBBaXJvaGEgU29DIG9yIGFuIEFpcm9oYSBlbXVsYXRvciB0byBmdW5jdGlvbi4gU3RhbmRhcmQgUUVNVSBkb2VzbiYjMzk7dCBlbXVsYXRlIEFpcm9oYSBTb0NzLiBJdCYjMzk7cyAqbm90KiBhIFBDSWUgc3dpdGNoIG9yIFNtYXJ0TklDLCBzbyB0aGF0IGlzbiYjMzk7dCB0aGUgcHJvYmxlbS4gQnV0IGl0IGFic29sdXRlbHkgZmFsbHMgdW5kZXIgJiMzNDtDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUmIzM0Oy4gVGhlc2Uga2luZHMgb2YgcGxhdGZvcm0gZGV2aWNlcywgbGlrZSBBaXJvaGEgRU43NTgxLCBhcmUganVzdCBub3QgZW11bGF0ZWQgYnkgc3RhbmRhcmQgUUVNVS4gVGhhdCBtZWFucyB0aGUgZHJpdmVyJiMzOTtzIGBwcm9iZWAgZnVuY3Rpb24sIHdoaWNoIGlzIHRoZSBlbnRyeSBwb2ludCwgd2lsbCBuZXZlciBiZSBjYWxsZWQuIE5vbmUgb2YgdGhlIGNvZGUgbW9kaWZpZWQgaW4gdGhpcyBwYXRjaCB3aWxsIGV2ZXIgYmUgZXhlY3V0ZWQuCgpMZXQmIzM5O3MgZG8gYSBxdWljayBkb3VibGUtY2hlY2ssIHRob3VnaC4gUGxhdGZvcm0gZHJpdmVycyBiaW5kIHRvIGRldmljZXMgdmlhIERldmljZSBUcmVlIG9yIEFDUEkuIFVubGVzcyBRRU1VIGlzIGNvbmZpZ3VyZWQgdG8gZW11bGF0ZSBhIG1hY2hpbmUgdGhhdCAqaW5jbHVkZXMqIGFuIEFpcm9oYSBkZXZpY2UgaW4gaXRzIERULCBpdCB3b24mIzM5O3QgZXhpc3QuIFN0YW5kYXJkIHN5emthbGxlciB1c2VzIGdlbmVyaWMgbWFjaGluZSB0eXBlcywgbGlrZSBgcTM1YCBmb3IgeDg2XzY0IG9yIGB2aXJ0YCBmb3IgYXJtNjQuIFRob3NlIGRvbiYjMzk7dCBtb2RlbCBBaXJvaGEgZXRoZXJuZXQgTUFDcy4gVGhlIGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgUUVNVS4KCkkgbmVlZCB0byB2ZXJpZnkgdGhlIGRyaXZlciYjMzk7cyBjb21wYXRpYmxlIHN0cmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTg6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b2ZfZGV2aWNlX2lkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jPTM5MzU9c3RhdGljIGNvbnN0IHN0cnVjdCBhaXJvaGFfZXRoX3NvY19kYXRhIGFuNzU4M19zb2NfZGF0YSA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTM5NDYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jOjM5NDc6c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgb2ZfYWlyb2hhX21hdGNoW10gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTM5NDgtXHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7YWlyb2hhLGVuNzU4MS1ldGhcJiMzNDssIC5kYXRhID0gXHUwMDI2ZW43NTgxX3NvY19kYXRhIH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE4OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MjIzCgkJCQkJCQlvdXRwdXQ6IDEyNQoJCQkJCQkJdGhvdWdodHM6IDE0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgQXNzZXNzbWVudCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBsb29rZWQgaW50byB0aGlzIGRyaXZlciwgYGFpcm9oYSxlbjc1ODEtZXRoYCBhbmQgYGFpcm9oYSxhbjc1ODMtZXRoYC4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhlc2UgYXJlICpzcGVjaWZpYyogQWlyb2hhIFNvQyBkcml2ZXJzLCB0YXJnZXRpbmcgdGhvc2UgcGFydGljdWxhciBoYXJkd2FyZSBwbGF0Zm9ybXMuIEFuZCB0aGF0JiMzOTtzIHRoZSBrZXkgaXNzdWUuIEkga25vdyB0aGF0IFFFTVUsIHRoZSBzdGFuZGFyZCBlbXVsYXRvciBTeXprYWxsZXIgcmVsaWVzIG9uLCBkb2VzbiYjMzk7dCBhY3R1YWxseSBtb2RlbCBhbnkgQWlyb2hhIFNvQ3MuIFRoZXJlJiMzOTtzIG5vIEFpcm9oYSBtYWNoaW5lIHR5cGUgYXZhaWxhYmxlIHdpdGhpbiB0aGUgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudCB1c2VkIGJ5IFN5emthbGxlci4gVGhpcyBtZWFucywgcHJhY3RpY2FsbHkgc3BlYWtpbmcsIHRoYXQgdGhpcyBwYXJ0aWN1bGFyIGRyaXZlciBhbmQsIGJ5IGV4dGVuc2lvbiwgdGhlIG1vZGlmaWVkIGNvZGUgaW4gcXVlc3Rpb24sIGlzIHV0dGVybHkgdW5yZWFjaGFibGUgZHVyaW5nIGFueSBraW5kIG9mIGZ1enppbmcgcnVuIGluIGEgdmlydHVhbGl6ZWQgc2V0dGluZy4gVGhlIGNvZGUganVzdCB3b24mIzM5O3QgYmUgdHJpZ2dlcmVkLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBmbGFnIGl0IGFzIHN1Y2guIEkmIzM5O20gZ29pbmcgdG8gc2V0IFdvcnRoRnV6emluZz1mYWxzZSBiZWNhdXNlIGl0IGlzIGFuIFNvQy1zcGVjaWZpYyBwbGF0Zm9ybSBkcml2ZXIgKEFpcm9oYSBFdGhlcm5ldCkgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoYXQsIGFzIEkgc2VlIGl0LCBtYWtlcyB0aGUgY29kZSB1bnJlYWNoYWJsZSBpbiBhbnkgdmlydHVhbGl6ZWQgdGVzdCBlbnZpcm9ubWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTg6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQWlyb2hhIFNvQyBHaWdhYml0IEV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhKS4gVGhpcyBpcyBhIHBsYXRmb3JtIGRyaXZlciBmb3Igc3BlY2lmaWMgQWlyb2hhIFNvQ3MgKGUuZy4sIGVuNzU4MSwgYW43NTgzKSB3aGljaCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50cy4gQmVjYXVzZSB0aGUgaGFyZHdhcmUgaXMgbm90IHByZXNlbnQgb3IgZW11bGF0ZWQsIHRoZSBkcml2ZXIgd2lsbCBub3QgcHJvYmUgYW5kIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFpcm9oYSBTb0MgR2lnYWJpdCBFdGhlcm5ldCBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYSkuIFRoaXMgaXMgYSBwbGF0Zm9ybSBkcml2ZXIgZm9yIHNwZWNpZmljIEFpcm9oYSBTb0NzIChlLmcuLCBlbjc1ODEsIGFuNzU4Mykgd2hpY2ggYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudHMuIEJlY2F1c2UgdGhlIGhhcmR3YXJlIGlzIG5vdCBwcmVzZW50IG9yIGVtdWxhdGVkLCB0aGUgZHJpdmVyIHdpbGwgbm90IHByb2JlIGFuZCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxODo1Mzo0MC4yNDM3NTMwNDhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTExODI0NzE0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFpcm9oYSBTb0MgR2lnYWJpdCBFdGhlcm5ldCBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYSkuIFRoaXMgaXMgYSBwbGF0Zm9ybSBkcml2ZXIgZm9yIHNwZWNpZmljIEFpcm9oYSBTb0NzIChlLmcuLCBlbjc1ODEsIGFuNzU4Mykgd2hpY2ggYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudHMuIEJlY2F1c2UgdGhlIGhhcmR3YXJlIGlzIG5vdCBwcmVzZW50IG9yIGVtdWxhdGVkLCB0aGUgZHJpdmVyIHdpbGwgbm90IHByb2JlIGFuZCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE4OjUzOjQwLjI0Mzc2Mzg5OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc4NzcwOTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNGNhYmNiYTM0ZDAwMzBhNzdlN2E5NTNlZmVhMGNhNTM1Y2ZlM2QwOVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIEp1bCAyNiAxODo1MzozOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguY1xcbmluZGV4IDc5NDE4ZTY4MmY3MWYzLi5kYmE3YzUyYzA4OTY5MCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguY1xcbkBAIC05MzQsNyArOTM0LDcgQEAgc3RhdGljIHZvaWQgYWlyb2hhX3FkbWFfd2FrZV9uZXRkZXZfdHhxcyhzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxKVxcbiBcXHRcXHRcXHRpZiAoIWRldilcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRcXHRcXHRpZiAoZGV2LVxcdTAwM2VxZG1hICE9IHFkbWEpXFxuK1xcdFxcdFxcdGlmIChyY3VfYWNjZXNzX3BvaW50ZXIoZGV2LVxcdTAwM2VxZG1hKSAhPSBxZG1hKVxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdFxcdG5ldGRldiA9IG5ldGRldl9mcm9tX3ByaXYoZGV2KTtcXG5AQCAtMTAzOCwxMCArMTAzOCwxNiBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3R4X25hcGlfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpXFxuIFxcdFxcdHEtXFx1MDAzZXF1ZXVlZC0tO1xcbiBcXG4gXFx0XFx0aWYgKHNrYikge1xcbitcXHRcXHRcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KHNrYi1cXHUwMDNlZGV2KTtcXG4rXFx0XFx0XFx0dTE2IHFpZHggPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTtcXG4gXFx0XFx0XFx0c3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxO1xcbiBcXG4gXFx0XFx0XFx0dHhxID0gc2tiX2dldF90eF9xdWV1ZShza2ItXFx1MDAzZWRldiwgc2tiKTtcXG4rXFxuK1xcdFxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2ZGV2LVxcdTAwM2V0eHFfbG9ja1txaWR4XSk7XFxuIFxcdFxcdFxcdG5ldGRldl90eF9jb21wbGV0ZWRfcXVldWUodHhxLCAxLCBza2ItXFx1MDAzZWxlbik7XFxuK1xcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZkZXYtXFx1MDAzZXR4cV9sb2NrW3FpZHhdKTtcXG4rXFxuIFxcdFxcdFxcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XFxuIFxcdFxcdH1cXG4gXFxuQEAgLTE5MDUsOCArMTkxMSw4IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIHtcXG4gXFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbiBcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZGV2LVxcdTAwM2Vwb3J0O1xcbi1cXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtXFx1MDAzZXFkbWE7XFxuIFxcdHUzMiBwc2VfcG9ydCA9IEZFX1BTRV9QT1JUX1BQRTE7XFxuK1xcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcXG4gXFx0aW50IGVycjtcXG4gXFxuIFxcdG5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMobmV0ZGV2KTtcXG5AQCAtMTkxNCw2ICsxOTIwLDcgQEAgc3RhdGljIGludCBhaXJvaGFfZGV2X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuK1xcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xcbiBcXHRpZiAobmV0ZGV2X3VzZXNfZHNhKG5ldGRldikpXFxuIFxcdFxcdGFpcm9oYV9mZV9zZXQocWRtYS1cXHUwMDNlZXRoLCBSRUdfR0RNX0lOR1JFU1NfQ0ZHKHBvcnQtXFx1MDAzZWlkKSxcXG4gXFx0XFx0XFx0ICAgICAgR0RNX1NUQUdfRU5fTUFTSyk7XFxuQEAgLTE5MzcsNyArMTk0NCw2IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIHtcXG4gXFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbiBcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZGV2LVxcdTAwM2Vwb3J0O1xcbi1cXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtXFx1MDAzZXFkbWE7XFxuIFxcbiBcXHRuZXRpZl90eF9kaXNhYmxlKG5ldGRldik7XFxuIFxcdGFpcm9oYV9zZXRfdmlwX2Zvcl9nZG1fcG9ydChkZXYsIGZhbHNlKTtcXG5AQCAtMTk0NSw3ICsxOTUxLDcgQEAgc3RhdGljIGludCBhaXJvaGFfZGV2X3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4gXFx0aWYgKC0tcG9ydC1cXHUwMDNldXNlcnMpXFxuIFxcdFxcdGFpcm9oYV9wcGVfc2V0X3htaXRfZnJhbWVfc2l6ZShkZXYpO1xcbiBcXHRlbHNlXFxuLVxcdFxcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhxZG1hLVxcdTAwM2VldGgsXFxuK1xcdFxcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhkZXYtXFx1MDAzZWV0aCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIFJFR19HRE1fRldEX0NGRyhwb3J0LVxcdTAwM2VpZCksXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBGRV9QU0VfUE9SVF9EUk9QKTtcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTIwMjgsNiArMjAzNCw1MyBAQCBzdGF0aWMgaW50IGFpcm9oYV9lbmFibGVfZ2RtMl9sb29wYmFjayhzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgYWlyb2hhX2Rpc2FibGVfZ2RtMl9sb29wYmFjayhzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcXG4re1xcbitcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZGV2LVxcdTAwM2Vwb3J0O1xcbitcXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gZGV2LVxcdTAwM2VldGg7XFxuK1xcdGludCBpLCBzcmNfcG9ydDtcXG4rXFx0dTMyIHBzZV9wb3J0O1xcbitcXG4rXFx0c3JjX3BvcnQgPSBldGgtXFx1MDAzZXNvYy1cXHUwMDNlb3BzLmdldF9zcG9ydChkZXYtXFx1MDAzZXBvcnQsIGRldi1cXHUwMDNlbmJxKTtcXG4rXFx0aWYgKHNyY19wb3J0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHNyY19wb3J0O1xcbitcXG4rXFx0YWlyb2hhX2ZlX2NsZWFyKGV0aCxcXG4rXFx0XFx0XFx0UkVHX1NQX0RGVF9DUE9SVChzcmNfcG9ydCBcXHUwMDNlXFx1MDAzZSBmbHMoU1BfQ1BPUlRfREZUX01BU0spKSxcXG4rXFx0XFx0XFx0U1BfQ1BPUlRfTUFTSyhzcmNfcG9ydCBcXHUwMDI2IFNQX0NQT1JUX0RGVF9NQVNLKSk7XFxuK1xcbitcXHRhaXJvaGFfZmVfc2V0KGV0aCwgUkVHX0dETV9GV0RfQ0ZHKEFJUk9IQV9HRE0yX0lEWCksXFxuK1xcdFxcdCAgICAgIEdETV9TVFJJUF9DUkNfTUFTSyk7XFxuK1xcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhldGgsIFJFR19HRE1fRldEX0NGRyhBSVJPSEFfR0RNMl9JRFgpLFxcbitcXHRcXHRcXHRcXHQgICAgRkVfUFNFX1BPUlRfRFJPUCk7XFxuK1xcdGFpcm9oYV9mZV9jbGVhcihldGgsIFJFR19HRE1fTFBCS19DRkcoQUlST0hBX0dETTJfSURYKSxcXG4rXFx0XFx0XFx0TFBCS19DSEFOX01BU0sgfCBMUEJLX01PREVfTUFTSyB8IExQQktfRU5fTUFTSyk7XFxuK1xcdHBzZV9wb3J0ID0gYWlyb2hhX3BwZV9pc19lbmFibGVkKGV0aCwgMSkgPyBGRV9QU0VfUE9SVF9QUEUyXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCA6IEZFX1BTRV9QT1JUX1BQRTE7XFxuK1xcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhldGgsIFJFR19HRE1fRldEX0NGRyhBSVJPSEFfR0RNMl9JRFgpLFxcbitcXHRcXHRcXHRcXHQgICAgcHNlX3BvcnQpO1xcbitcXG4rXFx0YWlyb2hhX2ZlX3JtdyhldGgsIFJFR19GRV9XQU5fUE9SVCwgV0FOMF9NQVNLLFxcbitcXHRcXHQgICAgICBGSUVMRF9QUkVQKFdBTjBfTUFTSywgQUlST0hBX0dETTJfSURYKSk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZXRoLVxcdTAwM2Vzb2MtXFx1MDAzZW51bV9wcGU7IGkrKylcXG4rXFx0XFx0YWlyb2hhX2ZlX2NsZWFyKGV0aCwgUkVHX1BQRV9ERlRfQ1BPUlQoaSwgQUlST0hBX0dETTJfSURYKSxcXG4rXFx0XFx0XFx0XFx0REZUX0NQT1JUX01BU0soQUlST0hBX0dETTJfSURYKSk7XFxuK1xcbitcXHQvKiBFbmFibGUgVklQIGFuZCBJRkMgZm9yIEdETTIgKi9cXG4rXFx0YWlyb2hhX2ZlX3NldChldGgsIFJFR19GRV9WSVBfUE9SVF9FTiwgQklUKEFJUk9IQV9HRE0yX0lEWCkpO1xcbitcXHRhaXJvaGFfZmVfc2V0KGV0aCwgUkVHX0ZFX0lGQ19QT1JUX0VOLCBCSVQoQUlST0hBX0dETTJfSURYKSk7XFxuK1xcbitcXHRpZiAocG9ydC1cXHUwMDNlaWQgPT0gQUlST0hBX0dETTRfSURYIFxcdTAwMjZcXHUwMDI2IGFpcm9oYV9pc183NTgxKGV0aCkpIHtcXG4rXFx0XFx0dTMyIG1hc2sgPSBGQ19JRF9PRl9TUkNfUE9SVF9NQVNLKGRldi1cXHUwMDNlbmJxKTtcXG4rXFxuK1xcdFxcdGFpcm9oYV9mZV9ybXcoZXRoLCBSRUdfU1JDX1BPUlRfRkNfTUFQNiwgbWFzayxcXG4rXFx0XFx0XFx0ICAgICAgRkNfTUFQNl9ERUZfVkFMVUUgXFx1MDAyNiBtYXNrKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKlxcbiBhaXJvaGFfZ2V0X3dhbl9nZG1fZGV2KHN0cnVjdCBhaXJvaGFfZXRoICpldGgpXFxuIHtcXG5AQCAtMjA1NCwxNSArMjEwNywzNyBAQCBhaXJvaGFfZ2V0X3dhbl9nZG1fZGV2KHN0cnVjdCBhaXJvaGFfZXRoICpldGgpXFxuIHN0YXRpYyB2b2lkIGFpcm9oYV9kZXZfc2V0X3FkbWEoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpXFxuIHtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IG5ldGRldl9mcm9tX3ByaXYoZGV2KTtcXG4rXFx0c3RydWN0IGFpcm9oYV9xZG1hICpjdXJfcWRtYSwgKnFkbWE7XFxuIFxcdHN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBkZXYtXFx1MDAzZWV0aDtcXG4tXFx0aW50IHBwZV9pZDtcXG4rXFx0aW50IGksIHBwZV9pZDtcXG4gXFxuIFxcdC8qIFFETUEwIGlzIHVzZWQgZm9yIGxhbiBwb3J0cyB3aGlsZSBRRE1BMSBpcyB1c2VkIGZvciBXQU4gcG9ydHMgKi9cXG4tXFx0ZGV2LVxcdTAwM2VxZG1hID0gXFx1MDAyNmV0aC1cXHUwMDNlcWRtYVshYWlyb2hhX2lzX2xhbl9nZG1fZGV2KGRldildO1xcbi1cXHRuZXRkZXYtXFx1MDAzZWlycSA9IGRldi1cXHUwMDNlcWRtYS1cXHUwMDNlaXJxX2JhbmtzWzBdLmlycTtcXG4rXFx0cWRtYSA9IFxcdTAwMjZldGgtXFx1MDAzZXFkbWFbIWFpcm9oYV9pc19sYW5fZ2RtX2RldihkZXYpXTtcXG4rXFx0Y3VyX3FkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xcbitcXG4rXFx0aWYgKGN1cl9xZG1hKVxcbitcXHRcXHRuZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTtcXG4rXFxuK1xcdHJjdV9hc3NpZ25fcG9pbnRlcihkZXYtXFx1MDAzZXFkbWEsIHFkbWEpO1xcbitcXHRuZXRkZXYtXFx1MDAzZWlycSA9IHFkbWEtXFx1MDAzZWlycV9iYW5rc1swXS5pcnE7XFxuK1xcdHN5bmNocm9uaXplX3JjdSgpO1xcbiBcXG4gXFx0cHBlX2lkID0gIWFpcm9oYV9pc19sYW5fZ2RtX2RldihkZXYpIFxcdTAwMjZcXHUwMDI2IGFpcm9oYV9wcGVfaXNfZW5hYmxlZChldGgsIDEpO1xcbiBcXHRhaXJvaGFfcHBlX3NldF9jcHVfcG9ydChkZXYsIHBwZV9pZCwgYWlyb2hhX2dldF9mZV9wb3J0KGRldikpO1xcbitcXG4rXFx0LyogU2VlZCBxb3Nfc3RhdHMgYmFzZWxpbmVzIHdpdGggdGhlIG5ldyBRRE1BIGJsb2NrJ3MgY3VycmVudFxcbitcXHQgKiBjb3VudGVyIHZhbHVlcyB0byBhdm9pZCBhIHNwdXJpb3VzIHNwaWtlIG9uIHRoZSBmaXJzdCBzdGF0c1xcbitcXHQgKiBxdWVyeSBhZnRlciBpbml0IG9yIG1pZ3JhdGlvbi5cXG4rXFx0ICovXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKGRldi1cXHUwMDNlcW9zX3N0YXRzKTsgaSsrKSB7XFxuK1xcdFxcdGRldi1cXHUwMDNlcW9zX3N0YXRzW2ldLmNwdV90eF9wYWNrZXRzID1cXG4rXFx0XFx0XFx0YWlyb2hhX3FkbWFfcnIocWRtYSwgUkVHX0NOVFJfVkFMKGkgXFx1MDAzY1xcdTAwM2MgMSkpO1xcbitcXHRcXHRkZXYtXFx1MDAzZXFvc19zdGF0c1tpXS5md2RfdHhfcGFja2V0cyA9XFxuK1xcdFxcdFxcdGFpcm9oYV9xZG1hX3JyKHFkbWEsIFJFR19DTlRSX1ZBTCgoaSBcXHUwMDNjXFx1MDAzYyAxKSArIDEpKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGN1cl9xZG1hKVxcbitcXHRcXHRuZXRpZl90eF93YWtlX2FsbF9xdWV1ZXMobmV0ZGV2KTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBhaXJvaGFfZGV2X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG5AQCAtMjA3OCw3ICsyMTUzLDcgQEAgc3RhdGljIGludCBhaXJvaGFfZGV2X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4gXFx0XFx0ZmFsbHRocm91Z2g7XFxuIFxcdGNhc2UgQUlST0hBX0dETTJfSURYOlxcbiBcXHRcXHQvKiBHRE0yIGlzIGFsd2F5cyB1c2VkIGFzIHdhbiAqL1xcbi1cXHRcXHRkZXYtXFx1MDAzZWZsYWdzIHw9IEFJUk9IQV9QUklWX0ZfV0FOO1xcbitcXHRcXHRzZXRfYml0KEFJUk9IQV9ERVZfRl9XQU4sIFxcdTAwMjZkZXYtXFx1MDAzZWZsYWdzKTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdGJyZWFrO1xcbkBAIC0yMjE3LDkgKzIyOTIsOSBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIHtcXG4gXFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbi1cXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtXFx1MDAzZXFkbWE7XFxuIFxcdHUzMiBucl9mcmFncywgdGFnLCBtc2cwLCBtc2cxLCBsZW47XFxuIFxcdHN0cnVjdCBhaXJvaGFfcXVldWVfZW50cnkgKmU7XFxuK1xcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcXG4gXFx0c3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxO1xcbiBcXHRzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxO1xcbiBcXHRMSVNUX0hFQUQodHhfbGlzdCk7XFxuQEAgLTIyMjgsNiArMjMwMyw4IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBhaXJvaGFfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0dTE2IGluZGV4O1xcbiBcXHR1OCBmcG9ydDtcXG4gXFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0cWRtYSA9IHJjdV9kZXJlZmVyZW5jZShkZXYtXFx1MDAzZXFkbWEpO1xcbiBcXHRxaWQgPSBhaXJvaGFfcWRtYV9nZXRfdHhxKHFkbWEsIHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpKTtcXG4gXFx0dGFnID0gYWlyb2hhX2dldF9kc2FfdGFnKHNrYiwgbmV0ZGV2KTtcXG4gXFxuQEAgLTIyNzcsNiArMjM1NCw4IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBhaXJvaGFfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0bmV0aWZfdHhfc3RvcF9xdWV1ZSh0eHEpO1xcbiBcXHRcXHRxLVxcdTAwM2V0eHFfc3RvcHBlZCA9IHRydWU7XFxuIFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZxLVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcbiBcXHRcXHRyZXR1cm4gTkVUREVWX1RYX0JVU1k7XFxuIFxcdH1cXG4gXFxuQEAgLTIzNDIsNiArMjQyMSw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBhaXJvaGFfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0XFx0RklFTERfUFJFUChUWF9SSU5HX0NQVV9JRFhfTUFTSywgaW5kZXgpKTtcXG4gXFxuIFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZxLVxcdTAwM2Vsb2NrKTtcXG4rXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcbiBcXHRyZXR1cm4gTkVUREVWX1RYX09LO1xcbiBcXG5AQCAtMjM1NCw2ICsyNDM0LDcgQEAgc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBlcnJvcjpcXG4gXFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcXG4gXFx0bmV0ZGV2LVxcdTAwM2VzdGF0cy50eF9kcm9wcGVkKys7XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXG4gXFx0cmV0dXJuIE5FVERFVl9UWF9PSztcXG4gfVxcbkBAIC0yNDMzLDE3ICsyNTE0LDE5IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfc2V0X2NoYW5fdHhfc2NoZWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFx0XFx0XFx0XFx0XFx0IGNvbnN0IHUxNiAqd2VpZ2h0cywgdTggbl93ZWlnaHRzKVxcbiB7XFxuIFxcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xcbiBcXHRpbnQgaTtcXG4gXFxuK1xcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQUlST0hBX05VTV9RT1NfUVVFVUVTOyBpKyspXFxuLVxcdFxcdGFpcm9oYV9xZG1hX2NsZWFyKGRldi1cXHUwMDNlcWRtYSwgUkVHX1FVRVVFX0NMT1NFX0NGRyhjaGFubmVsKSxcXG4rXFx0XFx0YWlyb2hhX3FkbWFfY2xlYXIocWRtYSwgUkVHX1FVRVVFX0NMT1NFX0NGRyhjaGFubmVsKSxcXG4gXFx0XFx0XFx0XFx0ICBUWFFfRElTQUJMRV9DSEFOX1FVRVVFX01BU0soY2hhbm5lbCwgaSkpO1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5fd2VpZ2h0czsgaSsrKSB7XFxuIFxcdFxcdHUzMiBzdGF0dXM7XFxuIFxcdFxcdGludCBlcnI7XFxuIFxcbi1cXHRcXHRhaXJvaGFfcWRtYV93cihkZXYtXFx1MDAzZXFkbWEsIFJFR19UWFdSUl9XRUlHSFRfQ0ZHLFxcbitcXHRcXHRhaXJvaGFfcWRtYV93cihxZG1hLCBSRUdfVFhXUlJfV0VJR0hUX0NGRyxcXG4gXFx0XFx0XFx0ICAgICAgIFRXUlJfUldfQ01EX01BU0sgfFxcbiBcXHRcXHRcXHQgICAgICAgRklFTERfUFJFUChUV1JSX0NIQU5fSURYX01BU0ssIGNoYW5uZWwpIHxcXG4gXFx0XFx0XFx0ICAgICAgIEZJRUxEX1BSRVAoVFdSUl9RVUVVRV9JRFhfTUFTSywgaSkgfFxcbkBAIC0yNDUxLDEyICsyNTM0LDEyIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfc2V0X2NoYW5fdHhfc2NoZWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFx0XFx0ZXJyID0gcmVhZF9wb2xsX3RpbWVvdXQoYWlyb2hhX3FkbWFfcnIsIHN0YXR1cyxcXG4gXFx0XFx0XFx0XFx0XFx0c3RhdHVzIFxcdTAwMjYgVFdSUl9SV19DTURfRE9ORSxcXG4gXFx0XFx0XFx0XFx0XFx0VVNFQ19QRVJfTVNFQywgMTAgKiBVU0VDX1BFUl9NU0VDLFxcbi1cXHRcXHRcXHRcXHRcXHR0cnVlLCBkZXYtXFx1MDAzZXFkbWEsIFJFR19UWFdSUl9XRUlHSFRfQ0ZHKTtcXG4rXFx0XFx0XFx0XFx0XFx0dHJ1ZSwgcWRtYSwgUkVHX1RYV1JSX1dFSUdIVF9DRkcpO1xcbiBcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHR9XFxuIFxcbi1cXHRhaXJvaGFfcWRtYV9ybXcoZGV2LVxcdTAwM2VxZG1hLCBSRUdfQ0hBTl9RT1NfTU9ERShjaGFubmVsIFxcdTAwM2VcXHUwMDNlIDMpLFxcbitcXHRhaXJvaGFfcWRtYV9ybXcocWRtYSwgUkVHX0NIQU5fUU9TX01PREUoY2hhbm5lbCBcXHUwMDNlXFx1MDAzZSAzKSxcXG4gXFx0XFx0XFx0Q0hBTl9RT1NfTU9ERV9NQVNLKGNoYW5uZWwpLFxcbiBcXHRcXHRcXHRfX2ZpZWxkX3ByZXAoQ0hBTl9RT1NfTU9ERV9NQVNLKGNoYW5uZWwpLCBtb2RlKSk7XFxuIFxcbkBAIC0yNTIwLDE3ICsyNjAzLDIyIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfZ2V0X3R4X2V0c19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgY2hhbm5lbCxcXG4gXFx0XFx0XFx0XFx0XFx0c3RydWN0IHRjX2V0c19xb3B0X29mZmxvYWQgKm9wdClcXG4ge1xcbiBcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuLVxcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cXHUwMDNlcWRtYTtcXG4rXFx0dTMyIGNwdV90eF9wYWNrZXRzLCBmd2RfdHhfcGFja2V0cztcXG4rXFx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xcbitcXHR1NjQgdHhfcGFja2V0cztcXG4gXFxuLVxcdHU2NCBjcHVfdHhfcGFja2V0cyA9IGFpcm9oYV9xZG1hX3JyKHFkbWEsIFJFR19DTlRSX1ZBTChjaGFubmVsIFxcdTAwM2NcXHUwMDNjIDEpKTtcXG4tXFx0dTY0IGZ3ZF90eF9wYWNrZXRzID0gYWlyb2hhX3FkbWFfcnIocWRtYSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIFJFR19DTlRSX1ZBTCgoY2hhbm5lbCBcXHUwMDNjXFx1MDAzYyAxKSArIDEpKTtcXG4tXFx0dTY0IHR4X3BhY2tldHMgPSAoY3B1X3R4X3BhY2tldHMgLSBkZXYtXFx1MDAzZWNwdV90eF9wYWNrZXRzKSArXFxuLVxcdFxcdFxcdCAoZndkX3R4X3BhY2tldHMgLSBkZXYtXFx1MDAzZWZ3ZF90eF9wYWNrZXRzKTtcXG4rXFx0cWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XFxuK1xcdGNwdV90eF9wYWNrZXRzID0gYWlyb2hhX3FkbWFfcnIocWRtYSwgUkVHX0NOVFJfVkFMKGNoYW5uZWwgXFx1MDAzY1xcdTAwM2MgMSkpO1xcbitcXHRmd2RfdHhfcGFja2V0cyA9IGFpcm9oYV9xZG1hX3JyKHFkbWEsXFxuK1xcdFxcdFxcdFxcdFxcdFJFR19DTlRSX1ZBTCgoY2hhbm5lbCBcXHUwMDNjXFx1MDAzYyAxKSArIDEpKTtcXG4rXFx0dHhfcGFja2V0cyA9ICh1MzIpKGNwdV90eF9wYWNrZXRzIC1cXG4rXFx0XFx0XFx0ICAgZGV2LVxcdTAwM2Vxb3Nfc3RhdHNbY2hhbm5lbF0uY3B1X3R4X3BhY2tldHMpO1xcbitcXHR0eF9wYWNrZXRzICs9ICh1MzIpKGZ3ZF90eF9wYWNrZXRzIC1cXG4rXFx0XFx0XFx0ICAgIGRldi1cXHUwMDNlcW9zX3N0YXRzW2NoYW5uZWxdLmZ3ZF90eF9wYWNrZXRzKTtcXG4gXFxuIFxcdF9ic3RhdHNfdXBkYXRlKG9wdC1cXHUwMDNlc3RhdHMuYnN0YXRzLCAwLCB0eF9wYWNrZXRzKTtcXG4tXFx0ZGV2LVxcdTAwM2VjcHVfdHhfcGFja2V0cyA9IGNwdV90eF9wYWNrZXRzO1xcbi1cXHRkZXYtXFx1MDAzZWZ3ZF90eF9wYWNrZXRzID0gZndkX3R4X3BhY2tldHM7XFxuK1xcdGRldi1cXHUwMDNlcW9zX3N0YXRzW2NoYW5uZWxdLmNwdV90eF9wYWNrZXRzID0gY3B1X3R4X3BhY2tldHM7XFxuK1xcdGRldi1cXHUwMDNlcW9zX3N0YXRzW2NoYW5uZWxdLmZ3ZF90eF9wYWNrZXRzID0gZndkX3R4X3BhY2tldHM7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbkBAIC0yNzg1LDE2ICsyODczLDE4IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfc2V0X3R4X3JhdGVfbGltaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFx0XFx0XFx0XFx0XFx0IHUzMiBidWNrZXRfc2l6ZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuK1xcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcXG4gXFx0aW50IGksIGVycjtcXG4gXFxuK1xcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2M9IFRSVENNX1BFQUtfTU9ERTsgaSsrKSB7XFxuLVxcdFxcdGVyciA9IGFpcm9oYV9xZG1hX3NldF90cnRjbV9jb25maWcoZGV2LVxcdTAwM2VxZG1hLCBjaGFubmVsLFxcbitcXHRcXHRlcnIgPSBhaXJvaGFfcWRtYV9zZXRfdHJ0Y21fY29uZmlnKHFkbWEsIGNoYW5uZWwsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgIFJFR19FR1JFU1NfVFJUQ01fQ0ZHLCBpLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAhIXJhdGUsIFRSVENNX01FVEVSX01PREUpO1xcbiBcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXG4tXFx0XFx0ZXJyID0gYWlyb2hhX3FkbWFfc2V0X3RydGNtX3Rva2VuX2J1Y2tldChkZXYtXFx1MDAzZXFkbWEsIGNoYW5uZWwsXFxuK1xcdFxcdGVyciA9IGFpcm9oYV9xZG1hX3NldF90cnRjbV90b2tlbl9idWNrZXQocWRtYSwgY2hhbm5lbCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0IFJFR19FR1JFU1NfVFJUQ01fQ0ZHLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHQgaSwgcmF0ZSwgYnVja2V0X3NpemUpO1xcbiBcXHRcXHRpZiAoZXJyKVxcbkBAIC0yODMwLDExICsyOTIwLDEyIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3RjX2h0Yl9hbGxvY19sZWFmX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdHUzMiBjaGFubmVsID0gVENfSF9NSU4ob3B0LVxcdTAwM2VjbGFzc2lkKSAlIEFJUk9IQV9OVU1fUU9TX0NIQU5ORUxTO1xcbiBcXHRpbnQgZXJyLCBudW1fdHhfcXVldWVzID0gQUlST0hBX05VTV9UWF9SSU5HICsgY2hhbm5lbCArIDE7XFxuIFxcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4tXFx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LVxcdTAwM2VxZG1hO1xcbitcXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7XFxuIFxcbiBcXHQvKiBIZXJlIHdlIG5lZWQgdG8gY2hlY2sgdGhlIHJlcXVlc3RlZCBRRE1BIGNoYW5uZWwgaXMgbm90IGFscmVhZHlcXG4gXFx0ICogaW4gdXNlIGJ5IGFub3RoZXIgbmV0X2RldmljZSBydW5uaW5nIG9uIHRoZSBzYW1lIFFETUEgYmxvY2suXFxuIFxcdCAqL1xcbitcXHRxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcXG4gXFx0aWYgKHRlc3RfYW5kX3NldF9iaXQoY2hhbm5lbCwgcWRtYS1cXHUwMDNlcW9zX2NoYW5uZWxfbWFwKSkge1xcbiBcXHRcXHROTF9TRVRfRVJSX01TR19NT0Qob3B0LVxcdTAwM2VleHRhY2ssXFxuIFxcdFxcdFxcdFxcdCAgIFxcXCJxZG1hIHFvcyBjaGFubmVsIGFscmVhZHkgaW4gdXNlXFxcIik7XFxuQEAgLTI4NzAsNyArMjk2MSw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfc2V0X3J4X21ldGVyKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2LFxcbiBcXHRcXHRcXHRcXHQgICAgdTMyIHJhdGUsIHUzMiBidWNrZXRfc2l6ZSxcXG4gXFx0XFx0XFx0XFx0ICAgIGVudW0gdHJ0Y21fdW5pdF90eXBlIHVuaXRfdHlwZSlcXG4ge1xcbi1cXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtXFx1MDAzZXFkbWE7XFxuK1xcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XFxuIFxcdGludCBpO1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUocWRtYS1cXHUwMDNlcV9yeCk7IGkrKykge1xcbkBAIC0zMDQ1LDEwICszMTM2LDExIEBAIHN0YXRpYyB2b2lkIGFpcm9oYV90Y19yZW1vdmVfaHRiX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBxdWV1ZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuIFxcdGludCBudW1fdHhfcXVldWVzID0gQUlST0hBX05VTV9UWF9SSU5HO1xcbi1cXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtXFx1MDAzZXFkbWE7XFxuK1xcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcXG4gXFxuIFxcdGFpcm9oYV9xZG1hX3NldF90eF9yYXRlX2xpbWl0KG5ldGRldiwgcXVldWUsIDAsIDApO1xcbiBcXG4rXFx0cWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XFxuIFxcdGNsZWFyX2JpdChxdWV1ZSwgcWRtYS1cXHUwMDNlcW9zX2NoYW5uZWxfbWFwKTtcXG4gXFx0Y2xlYXJfYml0KHF1ZXVlLCBkZXYtXFx1MDAzZXFvc19zcV9ibWFwKTtcXG4gXFxuQEAgLTMwNzQsNiArMzE2Niw5OCBAQCBzdGF0aWMgaW50IGFpcm9oYV90Y19odGJfZGVsZXRlX2xlYWZfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGFpcm9oYV9kaXNhYmxlX3Fvc19mb3JfZ2RtMzQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4re1xcbitcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuK1xcdHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBkZXYtXFx1MDAzZXBvcnQ7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRpZiAocG9ydC1cXHUwMDNlaWQgIT0gQUlST0hBX0dETTNfSURYIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBwb3J0LVxcdTAwM2VpZCAhPSBBSVJPSEFfR0RNNF9JRFgpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGVyciA9IGFpcm9oYV9kaXNhYmxlX2dkbTJfbG9vcGJhY2soZGV2KTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0bmV0ZGV2X3dhcm4obmV0ZGV2LFxcbitcXHRcXHRcXHQgICAgXFxcImZhaWxlZCBkaXNhYmxpbmcgR0RNMiBsb29wYmFjazogJWRcXFxcblxcXCIsIGVycik7XFxuK1xcbitcXHRjbGVhcl9iaXQoQUlST0hBX0RFVl9GX1dBTiwgXFx1MDAyNmRldi1cXHUwMDNlZmxhZ3MpO1xcbitcXHRhaXJvaGFfZGV2X3NldF9xZG1hKGRldik7XFxuK1xcbitcXHRhaXJvaGFfc2V0X21hY2FkZHIoZGV2LCBuZXRkZXYtXFx1MDAzZWRldl9hZGRyKTtcXG4rXFx0YWlyb2hhX3BwZV9zZXRfeG1pdF9mcmFtZV9zaXplKGRldik7XFxuK1xcbitcXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKVxcbitcXHRcXHRhaXJvaGFfc2V0X2dkbV9wb3J0X2Z3ZF9jZmcoZGV2LVxcdTAwM2VldGgsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBSRUdfR0RNX0ZXRF9DRkcocG9ydC1cXHUwMDNlaWQpLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgRkVfUFNFX1BPUlRfUFBFMSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWlyb2hhX2VuYWJsZV9xb3NfZm9yX2dkbTM0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuK3tcXG4rXFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICp3YW5fZGV2LCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFx0c3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGRldi1cXHUwMDNlcG9ydDtcXG4rXFx0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IGRldi1cXHUwMDNlZXRoO1xcbitcXHRpbnQgZXJyID0gLUVCVVNZO1xcbitcXG4rXFx0aWYgKHBvcnQtXFx1MDAzZWlkICE9IEFJUk9IQV9HRE0zX0lEWCBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgcG9ydC1cXHUwMDNlaWQgIT0gQUlST0hBX0dETTRfSURYKSB7XFxuK1xcdFxcdC8qIEhXIFFvUyBpcyBhbHdheXMgc3VwcG9ydGVkIGJ5IEdETTEgYW5kIEdETTIgKi9cXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghYWlyb2hhX2lzX2xhbl9nZG1fZGV2KGRldikpIC8qIEFscmVhZHkgZW5hYmxlZCAqL1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNmZsb3dfb2ZmbG9hZF9tdXRleCk7XFxuK1xcbitcXHR3YW5fZGV2ID0gYWlyb2hhX2dldF93YW5fZ2RtX2RldihldGgpO1xcbitcXHRpZiAod2FuX2Rldikge1xcbitcXHRcXHRpZiAodGVzdF9iaXQoQUlST0hBX0RFVl9GX1RYX1FPUywgXFx1MDAyNndhbl9kZXYtXFx1MDAzZWZsYWdzKSB8fFxcbitcXHRcXHQgICAgd2FuX2Rldi1cXHUwMDNlcG9ydC1cXHUwMDNlaWQgPT0gQUlST0hBX0dETTJfSURYKSB7XFxuK1xcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdFxcdCAgIFxcXCJRb1MgY29uZmlndXJlZCBmb3IgV0FOIGRldmljZVxcXCIpO1xcbitcXHRcXHRcXHRnb3RvIGVycm9yX3VubG9jaztcXG4rXFx0XFx0fVxcbitcXHRcXHRhaXJvaGFfZGlzYWJsZV9xb3NfZm9yX2dkbTM0KG5ldGRldl9mcm9tX3ByaXYod2FuX2RldikpO1xcbitcXHR9XFxuK1xcbitcXHRzZXRfYml0KEFJUk9IQV9ERVZfRl9XQU4sIFxcdTAwMjZkZXYtXFx1MDAzZWZsYWdzKTtcXG4rXFx0YWlyb2hhX2Rldl9zZXRfcWRtYShkZXYpO1xcbitcXHRlcnIgPSBhaXJvaGFfZW5hYmxlX2dkbTJfbG9vcGJhY2soZGV2KTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBlcnJvcl9kaXNhYmxlX3dhbjtcXG4rXFxuK1xcdGVyciA9IGFpcm9oYV9zZXRfbWFjYWRkcihkZXYsIG5ldGRldi1cXHUwMDNlZGV2X2FkZHIpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGVycm9yX2Rpc2FibGVfbG9vcGJhY2s7XFxuK1xcbitcXHRhaXJvaGFfZGV2X3NldF94bWl0X2ZyYW1lX3NpemUobmV0ZGV2KTtcXG4rXFx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkge1xcbitcXHRcXHR1MzIgcHNlX3BvcnQ7XFxuK1xcbitcXHRcXHRwc2VfcG9ydCA9IGFpcm9oYV9wcGVfaXNfZW5hYmxlZChldGgsIDEpID8gRkVfUFNFX1BPUlRfUFBFMlxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgOiBGRV9QU0VfUE9SVF9QUEUxO1xcbitcXHRcXHRhaXJvaGFfc2V0X2dkbV9wb3J0X2Z3ZF9jZmcoZXRoLCBSRUdfR0RNX0ZXRF9DRkcocG9ydC1cXHUwMDNlaWQpLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgcHNlX3BvcnQpO1xcbitcXHR9XFxuK1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNmZsb3dfb2ZmbG9hZF9tdXRleCk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2Vycm9yX2Rpc2FibGVfbG9vcGJhY2s6XFxuK1xcdGFpcm9oYV9kaXNhYmxlX2dkbTJfbG9vcGJhY2soZGV2KTtcXG4rZXJyb3JfZGlzYWJsZV93YW46XFxuK1xcdGNsZWFyX2JpdChBSVJPSEFfREVWX0ZfV0FOLCBcXHUwMDI2ZGV2LVxcdTAwM2VmbGFncyk7XFxuK1xcdGFpcm9oYV9kZXZfc2V0X3FkbWEoZGV2KTtcXG4rZXJyb3JfdW5sb2NrOlxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNmZsb3dfb2ZmbG9hZF9tdXRleCk7XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IGFpcm9oYV90Y19odGJfZGVzdHJveShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG5AQCAtMzA4Miw2ICszMjY2LDggQEAgc3RhdGljIGludCBhaXJvaGFfdGNfaHRiX2Rlc3Ryb3koc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4gXFx0Zm9yX2VhY2hfc2V0X2JpdChxLCBkZXYtXFx1MDAzZXFvc19zcV9ibWFwLCBBSVJPSEFfTlVNX1FPU19DSEFOTkVMUylcXG4gXFx0XFx0YWlyb2hhX3RjX3JlbW92ZV9odGJfcXVldWUobmV0ZGV2LCBxKTtcXG4gXFxuK1xcdGNsZWFyX2JpdChBSVJPSEFfREVWX0ZfVFhfUU9TLCBcXHUwMDI2ZGV2LVxcdTAwM2VmbGFncyk7XFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtMzEwMSwyNCArMzI4NywzMyBAQCBzdGF0aWMgaW50IGFpcm9oYV90Y19nZXRfaHRiX2dldF9sZWFmX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGFpcm9oYV90Y19zZXR1cF9xZGlzY19odGIoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4rc3RhdGljIGludCBhaXJvaGFfdGNfc2V0dXBfcWRpc2NfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHRjX2h0Yl9xb3B0X29mZmxvYWQgKm9wdClcXG4ge1xcbiBcXHRzd2l0Y2ggKG9wdC1cXHUwMDNlY29tbWFuZCkge1xcbi1cXHRjYXNlIFRDX0hUQl9DUkVBVEU6XFxuK1xcdGNhc2UgVENfSFRCX0NSRUFURToge1xcbitcXHRcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuK1xcdFxcdGludCBlcnI7XFxuK1xcbitcXHRcXHRlcnIgPSBhaXJvaGFfZW5hYmxlX3Fvc19mb3JfZ2RtMzQobmV0ZGV2LCBvcHQtXFx1MDAzZWV4dGFjayk7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHRcXHRzZXRfYml0KEFJUk9IQV9ERVZfRl9UWF9RT1MsIFxcdTAwMjZkZXYtXFx1MDAzZWZsYWdzKTtcXG4gXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4gXFx0Y2FzZSBUQ19IVEJfREVTVFJPWTpcXG4tXFx0XFx0cmV0dXJuIGFpcm9oYV90Y19odGJfZGVzdHJveShkZXYpO1xcbitcXHRcXHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9kZXN0cm95KG5ldGRldik7XFxuIFxcdGNhc2UgVENfSFRCX05PREVfTU9ESUZZOlxcbi1cXHRcXHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9tb2RpZnlfcXVldWUoZGV2LCBvcHQpO1xcbitcXHRcXHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9tb2RpZnlfcXVldWUobmV0ZGV2LCBvcHQpO1xcbiBcXHRjYXNlIFRDX0hUQl9MRUFGX0FMTE9DX1FVRVVFOlxcbi1cXHRcXHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9hbGxvY19sZWFmX3F1ZXVlKGRldiwgb3B0KTtcXG4rXFx0XFx0cmV0dXJuIGFpcm9oYV90Y19odGJfYWxsb2NfbGVhZl9xdWV1ZShuZXRkZXYsIG9wdCk7XFxuIFxcdGNhc2UgVENfSFRCX0xFQUZfREVMOlxcbiBcXHRjYXNlIFRDX0hUQl9MRUFGX0RFTF9MQVNUOlxcbiBcXHRjYXNlIFRDX0hUQl9MRUFGX0RFTF9MQVNUX0ZPUkNFOlxcbi1cXHRcXHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9kZWxldGVfbGVhZl9xdWV1ZShkZXYsIG9wdCk7XFxuK1xcdFxcdHJldHVybiBhaXJvaGFfdGNfaHRiX2RlbGV0ZV9sZWFmX3F1ZXVlKG5ldGRldiwgb3B0KTtcXG4gXFx0Y2FzZSBUQ19IVEJfTEVBRl9RVUVSWV9RVUVVRTpcXG4tXFx0XFx0cmV0dXJuIGFpcm9oYV90Y19nZXRfaHRiX2dldF9sZWFmX3F1ZXVlKGRldiwgb3B0KTtcXG4rXFx0XFx0cmV0dXJuIGFpcm9oYV90Y19nZXRfaHRiX2dldF9sZWFmX3F1ZXVlKG5ldGRldiwgb3B0KTtcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiBcXHR9XFxuQEAgLTMyMjAsOCArMzQxNSw4IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2FsbG9jX2dkbV9kZXZpY2Uoc3RydWN0IGFpcm9oYV9ldGggKmV0aCxcXG4ge1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xcbiBcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldjtcXG4rXFx0aW50IGVyciwgaTtcXG4gXFx0dTggaW5kZXg7XFxuLVxcdGludCBlcnI7XFxuIFxcbiBcXHRuZXRkZXYgPSBkZXZtX2FsbG9jX2V0aGVyZGV2X21xcyhldGgtXFx1MDAzZWRldiwgc2l6ZW9mKCpkZXYpLFxcbiBcXHRcXHRcXHRcXHRcXHQgQUlST0hBX05VTV9ORVRERVZfVFhfUklOR1MsXFxuQEAgLTMyNzIsNiArMzQ2Nyw4IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2FsbG9jX2dkbV9kZXZpY2Uoc3RydWN0IGFpcm9oYV9ldGggKmV0aCxcXG4gXFx0bmV0ZGV2LVxcdTAwM2VkZXYub2Zfbm9kZSA9IG9mX25vZGVfZ2V0KG5wKTtcXG4gXFx0ZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4gXFx0dTY0X3N0YXRzX2luaXQoXFx1MDAyNmRldi1cXHUwMDNlc3RhdHMuc3luY3ApO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShkZXYtXFx1MDAzZXR4cV9sb2NrKTsgaSsrKVxcbitcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2ZGV2LVxcdTAwM2V0eHFfbG9ja1tpXSk7XFxuIFxcdGRldi1cXHUwMDNlcG9ydCA9IHBvcnQ7XFxuIFxcdGRldi1cXHUwMDNlZXRoID0gZXRoO1xcbiBcXHRkZXYtXFx1MDAzZW5icSA9IG5icTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmhcXG5pbmRleCBmZTkzNGY5ZmZlOGExMS4uZmE5YThlZGNlMjJmZmQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmhcXG5AQCAtNTcwLDI0ICs1NzAsMzEgQEAgc3RydWN0IGFpcm9oYV9xZG1hIHtcXG4gXFx0REVDTEFSRV9CSVRNQVAocW9zX2NoYW5uZWxfbWFwLCBBSVJPSEFfTlVNX1FPU19DSEFOTkVMUyk7XFxuIH07XFxuIFxcbi1lbnVtIGFpcm9oYV9wcml2X2ZsYWdzIHtcXG4tXFx0QUlST0hBX1BSSVZfRl9XQU4gPSBCSVQoMCksXFxuK2VudW0gYWlyb2hhX2Rldl9mbGFncyB7XFxuK1xcdEFJUk9IQV9ERVZfRl9XQU4sXFxuK1xcdEFJUk9IQV9ERVZfRl9UWF9RT1MsXFxuIH07XFxuIFxcbiBzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYge1xcbitcXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgX19yY3UgKnFkbWE7XFxuIFxcdHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQ7XFxuLVxcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcXG4gXFx0c3RydWN0IGFpcm9oYV9ldGggKmV0aDtcXG4gXFxuIFxcdERFQ0xBUkVfQklUTUFQKHFvc19zcV9ibWFwLCBBSVJPSEFfTlVNX1FPU19DSEFOTkVMUyk7XFxuLVxcdC8qIHFvcyBzdGF0cyBjb3VudGVycyAqL1xcbi1cXHR1NjQgY3B1X3R4X3BhY2tldHM7XFxuLVxcdHU2NCBmd2RfdHhfcGFja2V0cztcXG4rXFx0c3RydWN0IHtcXG4rXFx0XFx0dTMyIGNwdV90eF9wYWNrZXRzO1xcbitcXHRcXHR1MzIgZndkX3R4X3BhY2tldHM7XFxuK1xcdH0gcW9zX3N0YXRzW0FJUk9IQV9OVU1fUU9TX0NIQU5ORUxTXTtcXG4gXFxuLVxcdHUzMiBmbGFncztcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFx0aW50IG5icTtcXG4gXFxuIFxcdHN0cnVjdCBhaXJvaGFfaHdfc3RhdHMgc3RhdHM7XFxuK1xcbitcXHQvKiBTZXJpYWxpemUgbmV0ZGV2X3R4X2NvbXBsZXRlZF9xdWV1ZSgpIGNhbGxzIHBlciBUWCBxdWV1ZSBkdXJpbmdcXG4rXFx0ICogUURNQSBtaWdyYXRpb24uXFxuK1xcdCAqL1xcbitcXHRzcGlubG9ja190IHR4cV9sb2NrW0FJUk9IQV9OVU1fTkVUREVWX1RYX1JJTkdTXTtcXG4gfTtcXG4gXFxuIHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQge1xcbkBAIC02OTQsNyArNzAxLDcgQEAgc3RhdGljIGlubGluZSB1MTYgYWlyb2hhX3FkbWFfZ2V0X3R4cShzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEsIHUxNiBxaWQpXFxuIFxcbiBzdGF0aWMgaW5saW5lIGJvb2wgYWlyb2hhX2lzX2xhbl9nZG1fZGV2KHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxcbiB7XFxuLVxcdHJldHVybiAhKGRldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBBSVJPSEFfUFJJVl9GX1dBTik7XFxuK1xcdHJldHVybiAhdGVzdF9iaXQoQUlST0hBX0RFVl9GX1dBTiwgXFx1MDAyNmRldi1cXHUwMDNlZmxhZ3MpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIGJvb2wgYWlyb2hhX2lzXzc1ODEoc3RydWN0IGFpcm9oYV9ldGggKmV0aClcXG5AQCAtNzExLDYgKzcxOCwxNiBAQCBpbnQgYWlyb2hhX2dldF9mZV9wb3J0KHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KTtcXG4gYm9vbCBhaXJvaGFfaXNfdmFsaWRfZ2RtX2RldihzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLFxcbiBcXHRcXHRcXHQgICAgIHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KTtcXG4gXFxuK2V4dGVybiBzdHJ1Y3QgbXV0ZXggZmxvd19vZmZsb2FkX211dGV4O1xcbitcXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgYWlyb2hhX3FkbWEgKlxcbithaXJvaGFfcWRtYV9kZXJlZihzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcXG4re1xcbitcXHRyZXR1cm4gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChkZXYtXFx1MDAzZXFkbWEsXFxuK1xcdFxcdFxcdFxcdFxcdCBsb2NrZGVwX3J0bmxfaXNfaGVsZCgpIHx8XFxuK1xcdFxcdFxcdFxcdFxcdCBsb2NrZGVwX2lzX2hlbGQoXFx1MDAyNmZsb3dfb2ZmbG9hZF9tdXRleCkpO1xcbit9XFxuK1xcbiB2b2lkIGFpcm9oYV9wcGVfc2V0X3htaXRfZnJhbWVfc2l6ZShzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldik7XFxuIHZvaWQgYWlyb2hhX3BwZV9zZXRfY3B1X3BvcnQoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYsIHU4IHBwZV9pZCwgdTggZnBvcnQpO1xcbiBib29sIGFpcm9oYV9wcGVfaXNfZW5hYmxlZChzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLCBpbnQgaW5kZXgpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xcbmluZGV4IGU0YzM2NDRkZDZlYzdhLi4zM2RkZjBkMDc4NTUzOSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xcbkBAIC0xNSw3ICsxNSwxMCBAQFxcbiAjaW5jbHVkZSBcXFwiYWlyb2hhX3JlZ3MuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImFpcm9oYV9ldGguaFxcXCJcXG4gXFxuLXN0YXRpYyBERUZJTkVfTVVURVgoZmxvd19vZmZsb2FkX211dGV4KTtcXG4rLyogU2VyaWFsaXplIGFpcm9oYV9nZG1fZGV2IGZsYWdzLCBRRE1BIHBvaW50ZXIgYW5kIFBQRSBDUFUgcG9ydFxcbisgKiBjb25maWd1cmF0aW9uLlxcbisgKi9cXG4rREVGSU5FX01VVEVYKGZsb3dfb2ZmbG9hZF9tdXRleCk7XFxuIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0socHBlX2xvY2spO1xcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyBhaXJvaGFfZmxvd190YWJsZV9wYXJhbXMgPSB7XFxuQEAgLTg2LDggKzg5LDggQEAgc3RhdGljIHUzMiBhaXJvaGFfcHBlX2dldF90aW1lc3RhbXAoc3RydWN0IGFpcm9oYV9wcGUgKnBwZSlcXG4gXFxuIHZvaWQgYWlyb2hhX3BwZV9zZXRfY3B1X3BvcnQoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYsIHU4IHBwZV9pZCwgdTggZnBvcnQpXFxuIHtcXG4tXFx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LVxcdTAwM2VxZG1hO1xcbi1cXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gcWRtYS1cXHUwMDNlZXRoO1xcbitcXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xcbitcXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gZGV2LVxcdTAwM2VldGg7XFxuIFxcdHU4IHFkbWFfaWQgPSBxZG1hIC0gXFx1MDAyNmV0aC1cXHUwMDNlcWRtYVswXTtcXG4gXFx0dTMyIGZlX2NwdV9wb3J0O1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9yZWdzLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaFxcbmluZGV4IDZmZWQ2M2QwMTNiNDEyLi40NDJiNDhjOWI5OTFlZiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcmVncy5oXFxuQEAgLTM3NSw2ICszNzUsNyBAQFxcbiBcXG4gI2RlZmluZSBSRUdfU1JDX1BPUlRfRkNfTUFQNlxcdFxcdDB4MjI5OFxcbiAjZGVmaW5lIEZDX0lEX09GX1NSQ19QT1JUX01BU0soX24pXFx0R0VOTUFTSyg0ICsgKChfbikgXFx1MDAzY1xcdTAwM2MgMyksICgoX24pIFxcdTAwM2NcXHUwMDNjIDMpKVxcbisjZGVmaW5lIEZDX01BUDZfREVGX1ZBTFVFXFx0XFx0MHgxYjFhMTkxOFxcbiBcXG4gI2RlZmluZSBSRUdfV0FOX01UVTBcXHRcXHRcXHQweDIzMDBcXG4gI2RlZmluZSBXQU5fTVRVMV9NQVNLXFx0XFx0XFx0R0VOTUFTSygyOSwgMTYpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE4OjUzOjQwLjgyMzY1MTQxM1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjM0NTM4MzQyMjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQWlyb2hhIFNvQyBHaWdhYml0IEV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhKS4gVGhpcyBpcyBhIHBsYXRmb3JtIGRyaXZlciBmb3Igc3BlY2lmaWMgQWlyb2hhIFNvQ3MgKGUuZy4sIGVuNzU4MSwgYW43NTgzKSB3aGljaCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50cy4gQmVjYXVzZSB0aGUgaGFyZHdhcmUgaXMgbm90IHByZXNlbnQgb3IgZW11bGF0ZWQsIHRoZSBkcml2ZXIgd2lsbCBub3QgcHJvYmUgYW5kIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNGNhYmNiYTM0ZDAwMzBhNzdlN2E5NTNlZmVhMGNhNTM1Y2ZlM2QwOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gSnVsIDI2IDE4OjUzOjM4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmNcbmluZGV4IDc5NDE4ZTY4MmY3MWYzLi5kYmE3YzUyYzA4OTY5MCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmNcbkBAIC05MzQsNyArOTM0LDcgQEAgc3RhdGljIHZvaWQgYWlyb2hhX3FkbWFfd2FrZV9uZXRkZXZfdHhxcyhzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxKVxuIFx0XHRcdGlmICghZGV2KVxuIFx0XHRcdFx0Y29udGludWU7XG4gXG4tXHRcdFx0aWYgKGRldi1cdTAwM2VxZG1hICE9IHFkbWEpXG4rXHRcdFx0aWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihkZXYtXHUwMDNlcWRtYSkgIT0gcWRtYSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRcdG5ldGRldiA9IG5ldGRldl9mcm9tX3ByaXYoZGV2KTtcbkBAIC0xMDM4LDEwICsxMDM4LDE2IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfdHhfbmFwaV9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldClcbiBcdFx0cS1cdTAwM2VxdWV1ZWQtLTtcbiBcbiBcdFx0aWYgKHNrYikge1xuK1x0XHRcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYoc2tiLVx1MDAzZWRldik7XG4rXHRcdFx0dTE2IHFpZHggPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTtcbiBcdFx0XHRzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHE7XG4gXG4gXHRcdFx0dHhxID0gc2tiX2dldF90eF9xdWV1ZShza2ItXHUwMDNlZGV2LCBza2IpO1xuK1xuK1x0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZkZXYtXHUwMDNldHhxX2xvY2tbcWlkeF0pO1xuIFx0XHRcdG5ldGRldl90eF9jb21wbGV0ZWRfcXVldWUodHhxLCAxLCBza2ItXHUwMDNlbGVuKTtcbitcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZkZXYtXHUwMDNldHhxX2xvY2tbcWlkeF0pO1xuK1xuIFx0XHRcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XG4gXHRcdH1cbiBcbkBAIC0xOTA1LDggKzE5MTEsOCBAQCBzdGF0aWMgaW50IGFpcm9oYV9kZXZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIHtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBkZXYtXHUwMDNlcG9ydDtcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cdTAwM2VxZG1hO1xuIFx0dTMyIHBzZV9wb3J0ID0gRkVfUFNFX1BPUlRfUFBFMTtcbitcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcbiBcdGludCBlcnI7XG4gXG4gXHRuZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKG5ldGRldik7XG5AQCAtMTkxNCw2ICsxOTIwLDcgQEAgc3RhdGljIGludCBhaXJvaGFfZGV2X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4rXHRxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcbiBcdGlmIChuZXRkZXZfdXNlc19kc2EobmV0ZGV2KSlcbiBcdFx0YWlyb2hhX2ZlX3NldChxZG1hLVx1MDAzZWV0aCwgUkVHX0dETV9JTkdSRVNTX0NGRyhwb3J0LVx1MDAzZWlkKSxcbiBcdFx0XHQgICAgICBHRE1fU1RBR19FTl9NQVNLKTtcbkBAIC0xOTM3LDcgKzE5NDQsNiBAQCBzdGF0aWMgaW50IGFpcm9oYV9kZXZfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIHtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBkZXYtXHUwMDNlcG9ydDtcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cdTAwM2VxZG1hO1xuIFxuIFx0bmV0aWZfdHhfZGlzYWJsZShuZXRkZXYpO1xuIFx0YWlyb2hhX3NldF92aXBfZm9yX2dkbV9wb3J0KGRldiwgZmFsc2UpO1xuQEAgLTE5NDUsNyArMTk1MSw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRpZiAoLS1wb3J0LVx1MDAzZXVzZXJzKVxuIFx0XHRhaXJvaGFfcHBlX3NldF94bWl0X2ZyYW1lX3NpemUoZGV2KTtcbiBcdGVsc2Vcbi1cdFx0YWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKHFkbWEtXHUwMDNlZXRoLFxuK1x0XHRhaXJvaGFfc2V0X2dkbV9wb3J0X2Z3ZF9jZmcoZGV2LVx1MDAzZWV0aCxcbiBcdFx0XHRcdFx0ICAgIFJFR19HRE1fRldEX0NGRyhwb3J0LVx1MDAzZWlkKSxcbiBcdFx0XHRcdFx0ICAgIEZFX1BTRV9QT1JUX0RST1ApO1xuIFx0cmV0dXJuIDA7XG5AQCAtMjAyOCw2ICsyMDM0LDUzIEBAIHN0YXRpYyBpbnQgYWlyb2hhX2VuYWJsZV9nZG0yX2xvb3BiYWNrKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBpbnQgYWlyb2hhX2Rpc2FibGVfZ2RtMl9sb29wYmFjayhzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcbit7XG4rXHRzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZGV2LVx1MDAzZXBvcnQ7XG4rXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gZGV2LVx1MDAzZWV0aDtcbitcdGludCBpLCBzcmNfcG9ydDtcbitcdHUzMiBwc2VfcG9ydDtcbitcbitcdHNyY19wb3J0ID0gZXRoLVx1MDAzZXNvYy1cdTAwM2VvcHMuZ2V0X3Nwb3J0KGRldi1cdTAwM2Vwb3J0LCBkZXYtXHUwMDNlbmJxKTtcbitcdGlmIChzcmNfcG9ydCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHNyY19wb3J0O1xuK1xuK1x0YWlyb2hhX2ZlX2NsZWFyKGV0aCxcbitcdFx0XHRSRUdfU1BfREZUX0NQT1JUKHNyY19wb3J0IFx1MDAzZVx1MDAzZSBmbHMoU1BfQ1BPUlRfREZUX01BU0spKSxcbitcdFx0XHRTUF9DUE9SVF9NQVNLKHNyY19wb3J0IFx1MDAyNiBTUF9DUE9SVF9ERlRfTUFTSykpO1xuK1xuK1x0YWlyb2hhX2ZlX3NldChldGgsIFJFR19HRE1fRldEX0NGRyhBSVJPSEFfR0RNMl9JRFgpLFxuK1x0XHQgICAgICBHRE1fU1RSSVBfQ1JDX01BU0spO1xuK1x0YWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKGV0aCwgUkVHX0dETV9GV0RfQ0ZHKEFJUk9IQV9HRE0yX0lEWCksXG4rXHRcdFx0XHQgICAgRkVfUFNFX1BPUlRfRFJPUCk7XG4rXHRhaXJvaGFfZmVfY2xlYXIoZXRoLCBSRUdfR0RNX0xQQktfQ0ZHKEFJUk9IQV9HRE0yX0lEWCksXG4rXHRcdFx0TFBCS19DSEFOX01BU0sgfCBMUEJLX01PREVfTUFTSyB8IExQQktfRU5fTUFTSyk7XG4rXHRwc2VfcG9ydCA9IGFpcm9oYV9wcGVfaXNfZW5hYmxlZChldGgsIDEpID8gRkVfUFNFX1BPUlRfUFBFMlxuK1x0XHRcdFx0XHRcdCA6IEZFX1BTRV9QT1JUX1BQRTE7XG4rXHRhaXJvaGFfc2V0X2dkbV9wb3J0X2Z3ZF9jZmcoZXRoLCBSRUdfR0RNX0ZXRF9DRkcoQUlST0hBX0dETTJfSURYKSxcbitcdFx0XHRcdCAgICBwc2VfcG9ydCk7XG4rXG4rXHRhaXJvaGFfZmVfcm13KGV0aCwgUkVHX0ZFX1dBTl9QT1JULCBXQU4wX01BU0ssXG4rXHRcdCAgICAgIEZJRUxEX1BSRVAoV0FOMF9NQVNLLCBBSVJPSEFfR0RNMl9JRFgpKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGV0aC1cdTAwM2Vzb2MtXHUwMDNlbnVtX3BwZTsgaSsrKVxuK1x0XHRhaXJvaGFfZmVfY2xlYXIoZXRoLCBSRUdfUFBFX0RGVF9DUE9SVChpLCBBSVJPSEFfR0RNMl9JRFgpLFxuK1x0XHRcdFx0REZUX0NQT1JUX01BU0soQUlST0hBX0dETTJfSURYKSk7XG4rXG4rXHQvKiBFbmFibGUgVklQIGFuZCBJRkMgZm9yIEdETTIgKi9cbitcdGFpcm9oYV9mZV9zZXQoZXRoLCBSRUdfRkVfVklQX1BPUlRfRU4sIEJJVChBSVJPSEFfR0RNMl9JRFgpKTtcbitcdGFpcm9oYV9mZV9zZXQoZXRoLCBSRUdfRkVfSUZDX1BPUlRfRU4sIEJJVChBSVJPSEFfR0RNMl9JRFgpKTtcbitcbitcdGlmIChwb3J0LVx1MDAzZWlkID09IEFJUk9IQV9HRE00X0lEWCBcdTAwMjZcdTAwMjYgYWlyb2hhX2lzXzc1ODEoZXRoKSkge1xuK1x0XHR1MzIgbWFzayA9IEZDX0lEX09GX1NSQ19QT1JUX01BU0soZGV2LVx1MDAzZW5icSk7XG4rXG4rXHRcdGFpcm9oYV9mZV9ybXcoZXRoLCBSRUdfU1JDX1BPUlRfRkNfTUFQNiwgbWFzayxcbitcdFx0XHQgICAgICBGQ19NQVA2X0RFRl9WQUxVRSBcdTAwMjYgbWFzayk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqXG4gYWlyb2hhX2dldF93YW5fZ2RtX2RldihzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoKVxuIHtcbkBAIC0yMDU0LDE1ICsyMTA3LDM3IEBAIGFpcm9oYV9nZXRfd2FuX2dkbV9kZXYoc3RydWN0IGFpcm9oYV9ldGggKmV0aClcbiBzdGF0aWMgdm9pZCBhaXJvaGFfZGV2X3NldF9xZG1hKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxuIHtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBuZXRkZXZfZnJvbV9wcml2KGRldik7XG4rXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKmN1cl9xZG1hLCAqcWRtYTtcbiBcdHN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBkZXYtXHUwMDNlZXRoO1xuLVx0aW50IHBwZV9pZDtcbitcdGludCBpLCBwcGVfaWQ7XG4gXG4gXHQvKiBRRE1BMCBpcyB1c2VkIGZvciBsYW4gcG9ydHMgd2hpbGUgUURNQTEgaXMgdXNlZCBmb3IgV0FOIHBvcnRzICovXG4tXHRkZXYtXHUwMDNlcWRtYSA9IFx1MDAyNmV0aC1cdTAwM2VxZG1hWyFhaXJvaGFfaXNfbGFuX2dkbV9kZXYoZGV2KV07XG4tXHRuZXRkZXYtXHUwMDNlaXJxID0gZGV2LVx1MDAzZXFkbWEtXHUwMDNlaXJxX2JhbmtzWzBdLmlycTtcbitcdHFkbWEgPSBcdTAwMjZldGgtXHUwMDNlcWRtYVshYWlyb2hhX2lzX2xhbl9nZG1fZGV2KGRldildO1xuK1x0Y3VyX3FkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuK1xuK1x0aWYgKGN1cl9xZG1hKVxuK1x0XHRuZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTtcbitcbitcdHJjdV9hc3NpZ25fcG9pbnRlcihkZXYtXHUwMDNlcWRtYSwgcWRtYSk7XG4rXHRuZXRkZXYtXHUwMDNlaXJxID0gcWRtYS1cdTAwM2VpcnFfYmFua3NbMF0uaXJxO1xuK1x0c3luY2hyb25pemVfcmN1KCk7XG4gXG4gXHRwcGVfaWQgPSAhYWlyb2hhX2lzX2xhbl9nZG1fZGV2KGRldikgXHUwMDI2XHUwMDI2IGFpcm9oYV9wcGVfaXNfZW5hYmxlZChldGgsIDEpO1xuIFx0YWlyb2hhX3BwZV9zZXRfY3B1X3BvcnQoZGV2LCBwcGVfaWQsIGFpcm9oYV9nZXRfZmVfcG9ydChkZXYpKTtcbitcbitcdC8qIFNlZWQgcW9zX3N0YXRzIGJhc2VsaW5lcyB3aXRoIHRoZSBuZXcgUURNQSBibG9jaydzIGN1cnJlbnRcbitcdCAqIGNvdW50ZXIgdmFsdWVzIHRvIGF2b2lkIGEgc3B1cmlvdXMgc3Bpa2Ugb24gdGhlIGZpcnN0IHN0YXRzXG4rXHQgKiBxdWVyeSBhZnRlciBpbml0IG9yIG1pZ3JhdGlvbi5cbitcdCAqL1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShkZXYtXHUwMDNlcW9zX3N0YXRzKTsgaSsrKSB7XG4rXHRcdGRldi1cdTAwM2Vxb3Nfc3RhdHNbaV0uY3B1X3R4X3BhY2tldHMgPVxuK1x0XHRcdGFpcm9oYV9xZG1hX3JyKHFkbWEsIFJFR19DTlRSX1ZBTChpIFx1MDAzY1x1MDAzYyAxKSk7XG4rXHRcdGRldi1cdTAwM2Vxb3Nfc3RhdHNbaV0uZndkX3R4X3BhY2tldHMgPVxuK1x0XHRcdGFpcm9oYV9xZG1hX3JyKHFkbWEsIFJFR19DTlRSX1ZBTCgoaSBcdTAwM2NcdTAwM2MgMSkgKyAxKSk7XG4rXHR9XG4rXG4rXHRpZiAoY3VyX3FkbWEpXG4rXHRcdG5ldGlmX3R4X3dha2VfYWxsX3F1ZXVlcyhuZXRkZXYpO1xuIH1cbiBcbiBzdGF0aWMgaW50IGFpcm9oYV9kZXZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuQEAgLTIwNzgsNyArMjE1Myw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRcdGZhbGx0aHJvdWdoO1xuIFx0Y2FzZSBBSVJPSEFfR0RNMl9JRFg6XG4gXHRcdC8qIEdETTIgaXMgYWx3YXlzIHVzZWQgYXMgd2FuICovXG4tXHRcdGRldi1cdTAwM2VmbGFncyB8PSBBSVJPSEFfUFJJVl9GX1dBTjtcbitcdFx0c2V0X2JpdChBSVJPSEFfREVWX0ZfV0FOLCBcdTAwMjZkZXYtXHUwMDNlZmxhZ3MpO1xuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdGJyZWFrO1xuQEAgLTIyMTcsOSArMjI5Miw5IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBhaXJvaGFfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdCAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4ge1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuLVx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LVx1MDAzZXFkbWE7XG4gXHR1MzIgbnJfZnJhZ3MsIHRhZywgbXNnMCwgbXNnMSwgbGVuO1xuIFx0c3RydWN0IGFpcm9oYV9xdWV1ZV9lbnRyeSAqZTtcbitcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcbiBcdHN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cTtcbiBcdHN0cnVjdCBhaXJvaGFfcXVldWUgKnE7XG4gXHRMSVNUX0hFQUQodHhfbGlzdCk7XG5AQCAtMjIyOCw2ICsyMzAzLDggQEAgc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0dTE2IGluZGV4O1xuIFx0dTggZnBvcnQ7XG4gXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRxZG1hID0gcmN1X2RlcmVmZXJlbmNlKGRldi1cdTAwM2VxZG1hKTtcbiBcdHFpZCA9IGFpcm9oYV9xZG1hX2dldF90eHEocWRtYSwgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpO1xuIFx0dGFnID0gYWlyb2hhX2dldF9kc2FfdGFnKHNrYiwgbmV0ZGV2KTtcbiBcbkBAIC0yMjc3LDYgKzIzNTQsOCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdG5ldGlmX3R4X3N0b3BfcXVldWUodHhxKTtcbiBcdFx0cS1cdTAwM2V0eHFfc3RvcHBlZCA9IHRydWU7XG4gXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnEtXHUwMDNlbG9jayk7XG4rXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuK1xuIFx0XHRyZXR1cm4gTkVUREVWX1RYX0JVU1k7XG4gXHR9XG4gXG5AQCAtMjM0Miw2ICsyNDIxLDcgQEAgc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0RklFTERfUFJFUChUWF9SSU5HX0NQVV9JRFhfTUFTSywgaW5kZXgpKTtcbiBcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnEtXHUwMDNlbG9jayk7XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdHJldHVybiBORVRERVZfVFhfT0s7XG4gXG5AQCAtMjM1NCw2ICsyNDM0LDcgQEAgc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIGVycm9yOlxuIFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbiBcdG5ldGRldi1cdTAwM2VzdGF0cy50eF9kcm9wcGVkKys7XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdHJldHVybiBORVRERVZfVFhfT0s7XG4gfVxuQEAgLTI0MzMsMTcgKzI1MTQsMTkgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9zZXRfY2hhbl90eF9zY2hlZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRcdFx0XHQgY29uc3QgdTE2ICp3ZWlnaHRzLCB1OCBuX3dlaWdodHMpXG4ge1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuK1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xuIFx0aW50IGk7XG4gXG4rXHRxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFJUk9IQV9OVU1fUU9TX1FVRVVFUzsgaSsrKVxuLVx0XHRhaXJvaGFfcWRtYV9jbGVhcihkZXYtXHUwMDNlcWRtYSwgUkVHX1FVRVVFX0NMT1NFX0NGRyhjaGFubmVsKSxcbitcdFx0YWlyb2hhX3FkbWFfY2xlYXIocWRtYSwgUkVHX1FVRVVFX0NMT1NFX0NGRyhjaGFubmVsKSxcbiBcdFx0XHRcdCAgVFhRX0RJU0FCTEVfQ0hBTl9RVUVVRV9NQVNLKGNoYW5uZWwsIGkpKTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5fd2VpZ2h0czsgaSsrKSB7XG4gXHRcdHUzMiBzdGF0dXM7XG4gXHRcdGludCBlcnI7XG4gXG4tXHRcdGFpcm9oYV9xZG1hX3dyKGRldi1cdTAwM2VxZG1hLCBSRUdfVFhXUlJfV0VJR0hUX0NGRyxcbitcdFx0YWlyb2hhX3FkbWFfd3IocWRtYSwgUkVHX1RYV1JSX1dFSUdIVF9DRkcsXG4gXHRcdFx0ICAgICAgIFRXUlJfUldfQ01EX01BU0sgfFxuIFx0XHRcdCAgICAgICBGSUVMRF9QUkVQKFRXUlJfQ0hBTl9JRFhfTUFTSywgY2hhbm5lbCkgfFxuIFx0XHRcdCAgICAgICBGSUVMRF9QUkVQKFRXUlJfUVVFVUVfSURYX01BU0ssIGkpIHxcbkBAIC0yNDUxLDEyICsyNTM0LDEyIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfc2V0X2NoYW5fdHhfc2NoZWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0ZXJyID0gcmVhZF9wb2xsX3RpbWVvdXQoYWlyb2hhX3FkbWFfcnIsIHN0YXR1cyxcbiBcdFx0XHRcdFx0c3RhdHVzIFx1MDAyNiBUV1JSX1JXX0NNRF9ET05FLFxuIFx0XHRcdFx0XHRVU0VDX1BFUl9NU0VDLCAxMCAqIFVTRUNfUEVSX01TRUMsXG4tXHRcdFx0XHRcdHRydWUsIGRldi1cdTAwM2VxZG1hLCBSRUdfVFhXUlJfV0VJR0hUX0NGRyk7XG4rXHRcdFx0XHRcdHRydWUsIHFkbWEsIFJFR19UWFdSUl9XRUlHSFRfQ0ZHKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuIFxuLVx0YWlyb2hhX3FkbWFfcm13KGRldi1cdTAwM2VxZG1hLCBSRUdfQ0hBTl9RT1NfTU9ERShjaGFubmVsIFx1MDAzZVx1MDAzZSAzKSxcbitcdGFpcm9oYV9xZG1hX3JtdyhxZG1hLCBSRUdfQ0hBTl9RT1NfTU9ERShjaGFubmVsIFx1MDAzZVx1MDAzZSAzKSxcbiBcdFx0XHRDSEFOX1FPU19NT0RFX01BU0soY2hhbm5lbCksXG4gXHRcdFx0X19maWVsZF9wcmVwKENIQU5fUU9TX01PREVfTUFTSyhjaGFubmVsKSwgbW9kZSkpO1xuIFxuQEAgLTI1MjAsMTcgKzI2MDMsMjIgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9nZXRfdHhfZXRzX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBjaGFubmVsLFxuIFx0XHRcdFx0XHRzdHJ1Y3QgdGNfZXRzX3FvcHRfb2ZmbG9hZCAqb3B0KVxuIHtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cdTAwM2VxZG1hO1xuK1x0dTMyIGNwdV90eF9wYWNrZXRzLCBmd2RfdHhfcGFja2V0cztcbitcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcbitcdHU2NCB0eF9wYWNrZXRzO1xuIFxuLVx0dTY0IGNwdV90eF9wYWNrZXRzID0gYWlyb2hhX3FkbWFfcnIocWRtYSwgUkVHX0NOVFJfVkFMKGNoYW5uZWwgXHUwMDNjXHUwMDNjIDEpKTtcbi1cdHU2NCBmd2RfdHhfcGFja2V0cyA9IGFpcm9oYV9xZG1hX3JyKHFkbWEsXG4tXHRcdFx0XHRcdCAgICBSRUdfQ05UUl9WQUwoKGNoYW5uZWwgXHUwMDNjXHUwMDNjIDEpICsgMSkpO1xuLVx0dTY0IHR4X3BhY2tldHMgPSAoY3B1X3R4X3BhY2tldHMgLSBkZXYtXHUwMDNlY3B1X3R4X3BhY2tldHMpICtcbi1cdFx0XHQgKGZ3ZF90eF9wYWNrZXRzIC0gZGV2LVx1MDAzZWZ3ZF90eF9wYWNrZXRzKTtcbitcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuK1x0Y3B1X3R4X3BhY2tldHMgPSBhaXJvaGFfcWRtYV9ycihxZG1hLCBSRUdfQ05UUl9WQUwoY2hhbm5lbCBcdTAwM2NcdTAwM2MgMSkpO1xuK1x0ZndkX3R4X3BhY2tldHMgPSBhaXJvaGFfcWRtYV9ycihxZG1hLFxuK1x0XHRcdFx0XHRSRUdfQ05UUl9WQUwoKGNoYW5uZWwgXHUwMDNjXHUwMDNjIDEpICsgMSkpO1xuK1x0dHhfcGFja2V0cyA9ICh1MzIpKGNwdV90eF9wYWNrZXRzIC1cbitcdFx0XHQgICBkZXYtXHUwMDNlcW9zX3N0YXRzW2NoYW5uZWxdLmNwdV90eF9wYWNrZXRzKTtcbitcdHR4X3BhY2tldHMgKz0gKHUzMikoZndkX3R4X3BhY2tldHMgLVxuK1x0XHRcdCAgICBkZXYtXHUwMDNlcW9zX3N0YXRzW2NoYW5uZWxdLmZ3ZF90eF9wYWNrZXRzKTtcbiBcbiBcdF9ic3RhdHNfdXBkYXRlKG9wdC1cdTAwM2VzdGF0cy5ic3RhdHMsIDAsIHR4X3BhY2tldHMpO1xuLVx0ZGV2LVx1MDAzZWNwdV90eF9wYWNrZXRzID0gY3B1X3R4X3BhY2tldHM7XG4tXHRkZXYtXHUwMDNlZndkX3R4X3BhY2tldHMgPSBmd2RfdHhfcGFja2V0cztcbitcdGRldi1cdTAwM2Vxb3Nfc3RhdHNbY2hhbm5lbF0uY3B1X3R4X3BhY2tldHMgPSBjcHVfdHhfcGFja2V0cztcbitcdGRldi1cdTAwM2Vxb3Nfc3RhdHNbY2hhbm5lbF0uZndkX3R4X3BhY2tldHMgPSBmd2RfdHhfcGFja2V0cztcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0yNzg1LDE2ICsyODczLDE4IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfc2V0X3R4X3JhdGVfbGltaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0XHRcdFx0IHUzMiBidWNrZXRfc2l6ZSlcbiB7XG4gXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7XG4gXHRpbnQgaSwgZXJyO1xuIFxuK1x0cWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYz0gVFJUQ01fUEVBS19NT0RFOyBpKyspIHtcbi1cdFx0ZXJyID0gYWlyb2hhX3FkbWFfc2V0X3RydGNtX2NvbmZpZyhkZXYtXHUwMDNlcWRtYSwgY2hhbm5lbCxcbitcdFx0ZXJyID0gYWlyb2hhX3FkbWFfc2V0X3RydGNtX2NvbmZpZyhxZG1hLCBjaGFubmVsLFxuIFx0XHRcdFx0XHRcdCAgIFJFR19FR1JFU1NfVFJUQ01fQ0ZHLCBpLFxuIFx0XHRcdFx0XHRcdCAgICEhcmF0ZSwgVFJUQ01fTUVURVJfTU9ERSk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcbi1cdFx0ZXJyID0gYWlyb2hhX3FkbWFfc2V0X3RydGNtX3Rva2VuX2J1Y2tldChkZXYtXHUwMDNlcWRtYSwgY2hhbm5lbCxcbitcdFx0ZXJyID0gYWlyb2hhX3FkbWFfc2V0X3RydGNtX3Rva2VuX2J1Y2tldChxZG1hLCBjaGFubmVsLFxuIFx0XHRcdFx0XHRcdFx0IFJFR19FR1JFU1NfVFJUQ01fQ0ZHLFxuIFx0XHRcdFx0XHRcdFx0IGksIHJhdGUsIGJ1Y2tldF9zaXplKTtcbiBcdFx0aWYgKGVycilcbkBAIC0yODMwLDExICsyOTIwLDEyIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3RjX2h0Yl9hbGxvY19sZWFmX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHR1MzIgY2hhbm5lbCA9IFRDX0hfTUlOKG9wdC1cdTAwM2VjbGFzc2lkKSAlIEFJUk9IQV9OVU1fUU9TX0NIQU5ORUxTO1xuIFx0aW50IGVyciwgbnVtX3R4X3F1ZXVlcyA9IEFJUk9IQV9OVU1fVFhfUklORyArIGNoYW5uZWwgKyAxO1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuLVx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LVx1MDAzZXFkbWE7XG4rXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7XG4gXG4gXHQvKiBIZXJlIHdlIG5lZWQgdG8gY2hlY2sgdGhlIHJlcXVlc3RlZCBRRE1BIGNoYW5uZWwgaXMgbm90IGFscmVhZHlcbiBcdCAqIGluIHVzZSBieSBhbm90aGVyIG5ldF9kZXZpY2UgcnVubmluZyBvbiB0aGUgc2FtZSBRRE1BIGJsb2NrLlxuIFx0ICovXG4rXHRxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcbiBcdGlmICh0ZXN0X2FuZF9zZXRfYml0KGNoYW5uZWwsIHFkbWEtXHUwMDNlcW9zX2NoYW5uZWxfbWFwKSkge1xuIFx0XHROTF9TRVRfRVJSX01TR19NT0Qob3B0LVx1MDAzZWV4dGFjayxcbiBcdFx0XHRcdCAgIFwicWRtYSBxb3MgY2hhbm5lbCBhbHJlYWR5IGluIHVzZVwiKTtcbkBAIC0yODcwLDcgKzI5NjEsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3NldF9yeF9tZXRlcihzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldixcbiBcdFx0XHRcdCAgICB1MzIgcmF0ZSwgdTMyIGJ1Y2tldF9zaXplLFxuIFx0XHRcdFx0ICAgIGVudW0gdHJ0Y21fdW5pdF90eXBlIHVuaXRfdHlwZSlcbiB7XG4tXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtXHUwMDNlcWRtYTtcbitcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XG4gXHRpbnQgaTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUocWRtYS1cdTAwM2VxX3J4KTsgaSsrKSB7XG5AQCAtMzA0NSwxMCArMzEzNiwxMSBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfdGNfcmVtb3ZlX2h0Yl9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgcXVldWUpXG4ge1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIFx0aW50IG51bV90eF9xdWV1ZXMgPSBBSVJPSEFfTlVNX1RYX1JJTkc7XG4tXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtXHUwMDNlcWRtYTtcbitcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcbiBcbiBcdGFpcm9oYV9xZG1hX3NldF90eF9yYXRlX2xpbWl0KG5ldGRldiwgcXVldWUsIDAsIDApO1xuIFxuK1x0cWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XG4gXHRjbGVhcl9iaXQocXVldWUsIHFkbWEtXHUwMDNlcW9zX2NoYW5uZWxfbWFwKTtcbiBcdGNsZWFyX2JpdChxdWV1ZSwgZGV2LVx1MDAzZXFvc19zcV9ibWFwKTtcbiBcbkBAIC0zMDc0LDYgKzMxNjYsOTggQEAgc3RhdGljIGludCBhaXJvaGFfdGNfaHRiX2RlbGV0ZV9sZWFmX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIHZvaWQgYWlyb2hhX2Rpc2FibGVfcW9zX2Zvcl9nZG0zNChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuK3tcbitcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcdHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBkZXYtXHUwMDNlcG9ydDtcbitcdGludCBlcnI7XG4rXG4rXHRpZiAocG9ydC1cdTAwM2VpZCAhPSBBSVJPSEFfR0RNM19JRFggXHUwMDI2XHUwMDI2XG4rXHQgICAgcG9ydC1cdTAwM2VpZCAhPSBBSVJPSEFfR0RNNF9JRFgpXG4rXHRcdHJldHVybjtcbitcbitcdGVyciA9IGFpcm9oYV9kaXNhYmxlX2dkbTJfbG9vcGJhY2soZGV2KTtcbitcdGlmIChlcnIpXG4rXHRcdG5ldGRldl93YXJuKG5ldGRldixcbitcdFx0XHQgICAgXCJmYWlsZWQgZGlzYWJsaW5nIEdETTIgbG9vcGJhY2s6ICVkXFxuXCIsIGVycik7XG4rXG4rXHRjbGVhcl9iaXQoQUlST0hBX0RFVl9GX1dBTiwgXHUwMDI2ZGV2LVx1MDAzZWZsYWdzKTtcbitcdGFpcm9oYV9kZXZfc2V0X3FkbWEoZGV2KTtcbitcbitcdGFpcm9oYV9zZXRfbWFjYWRkcihkZXYsIG5ldGRldi1cdTAwM2VkZXZfYWRkcik7XG4rXHRhaXJvaGFfcHBlX3NldF94bWl0X2ZyYW1lX3NpemUoZGV2KTtcbitcbitcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXG4rXHRcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhkZXYtXHUwMDNlZXRoLFxuK1x0XHRcdFx0XHQgICAgUkVHX0dETV9GV0RfQ0ZHKHBvcnQtXHUwMDNlaWQpLFxuK1x0XHRcdFx0XHQgICAgRkVfUFNFX1BPUlRfUFBFMSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWlyb2hhX2VuYWJsZV9xb3NfZm9yX2dkbTM0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuK3tcbitcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqd2FuX2RldiwgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXHRzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZGV2LVx1MDAzZXBvcnQ7XG4rXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gZGV2LVx1MDAzZWV0aDtcbitcdGludCBlcnIgPSAtRUJVU1k7XG4rXG4rXHRpZiAocG9ydC1cdTAwM2VpZCAhPSBBSVJPSEFfR0RNM19JRFggXHUwMDI2XHUwMDI2XG4rXHQgICAgcG9ydC1cdTAwM2VpZCAhPSBBSVJPSEFfR0RNNF9JRFgpIHtcbitcdFx0LyogSFcgUW9TIGlzIGFsd2F5cyBzdXBwb3J0ZWQgYnkgR0RNMSBhbmQgR0RNMiAqL1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdGlmICghYWlyb2hhX2lzX2xhbl9nZG1fZGV2KGRldikpIC8qIEFscmVhZHkgZW5hYmxlZCAqL1xuK1x0XHRyZXR1cm4gMDtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2Zmxvd19vZmZsb2FkX211dGV4KTtcbitcbitcdHdhbl9kZXYgPSBhaXJvaGFfZ2V0X3dhbl9nZG1fZGV2KGV0aCk7XG4rXHRpZiAod2FuX2Rldikge1xuK1x0XHRpZiAodGVzdF9iaXQoQUlST0hBX0RFVl9GX1RYX1FPUywgXHUwMDI2d2FuX2Rldi1cdTAwM2VmbGFncykgfHxcbitcdFx0ICAgIHdhbl9kZXYtXHUwMDNlcG9ydC1cdTAwM2VpZCA9PSBBSVJPSEFfR0RNMl9JRFgpIHtcbitcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuK1x0XHRcdFx0XHQgICBcIlFvUyBjb25maWd1cmVkIGZvciBXQU4gZGV2aWNlXCIpO1xuK1x0XHRcdGdvdG8gZXJyb3JfdW5sb2NrO1xuK1x0XHR9XG4rXHRcdGFpcm9oYV9kaXNhYmxlX3Fvc19mb3JfZ2RtMzQobmV0ZGV2X2Zyb21fcHJpdih3YW5fZGV2KSk7XG4rXHR9XG4rXG4rXHRzZXRfYml0KEFJUk9IQV9ERVZfRl9XQU4sIFx1MDAyNmRldi1cdTAwM2VmbGFncyk7XG4rXHRhaXJvaGFfZGV2X3NldF9xZG1hKGRldik7XG4rXHRlcnIgPSBhaXJvaGFfZW5hYmxlX2dkbTJfbG9vcGJhY2soZGV2KTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gZXJyb3JfZGlzYWJsZV93YW47XG4rXG4rXHRlcnIgPSBhaXJvaGFfc2V0X21hY2FkZHIoZGV2LCBuZXRkZXYtXHUwMDNlZGV2X2FkZHIpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBlcnJvcl9kaXNhYmxlX2xvb3BiYWNrO1xuK1xuK1x0YWlyb2hhX2Rldl9zZXRfeG1pdF9mcmFtZV9zaXplKG5ldGRldik7XG4rXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7XG4rXHRcdHUzMiBwc2VfcG9ydDtcbitcbitcdFx0cHNlX3BvcnQgPSBhaXJvaGFfcHBlX2lzX2VuYWJsZWQoZXRoLCAxKSA/IEZFX1BTRV9QT1JUX1BQRTJcbitcdFx0XHRcdFx0XHRcdCA6IEZFX1BTRV9QT1JUX1BQRTE7XG4rXHRcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhldGgsIFJFR19HRE1fRldEX0NGRyhwb3J0LVx1MDAzZWlkKSxcbitcdFx0XHRcdFx0ICAgIHBzZV9wb3J0KTtcbitcdH1cbitcbitcdG11dGV4X3VubG9jayhcdTAwMjZmbG93X29mZmxvYWRfbXV0ZXgpO1xuK1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyb3JfZGlzYWJsZV9sb29wYmFjazpcbitcdGFpcm9oYV9kaXNhYmxlX2dkbTJfbG9vcGJhY2soZGV2KTtcbitlcnJvcl9kaXNhYmxlX3dhbjpcbitcdGNsZWFyX2JpdChBSVJPSEFfREVWX0ZfV0FOLCBcdTAwMjZkZXYtXHUwMDNlZmxhZ3MpO1xuK1x0YWlyb2hhX2Rldl9zZXRfcWRtYShkZXYpO1xuK2Vycm9yX3VubG9jazpcbitcdG11dGV4X3VubG9jayhcdTAwMjZmbG93X29mZmxvYWRfbXV0ZXgpO1xuK1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4gc3RhdGljIGludCBhaXJvaGFfdGNfaHRiX2Rlc3Ryb3koc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB7XG4gXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG5AQCAtMzA4Miw2ICszMjY2LDggQEAgc3RhdGljIGludCBhaXJvaGFfdGNfaHRiX2Rlc3Ryb3koc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdGZvcl9lYWNoX3NldF9iaXQocSwgZGV2LVx1MDAzZXFvc19zcV9ibWFwLCBBSVJPSEFfTlVNX1FPU19DSEFOTkVMUylcbiBcdFx0YWlyb2hhX3RjX3JlbW92ZV9odGJfcXVldWUobmV0ZGV2LCBxKTtcbiBcbitcdGNsZWFyX2JpdChBSVJPSEFfREVWX0ZfVFhfUU9TLCBcdTAwMjZkZXYtXHUwMDNlZmxhZ3MpO1xuK1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTMxMDEsMjQgKzMyODcsMzMgQEAgc3RhdGljIGludCBhaXJvaGFfdGNfZ2V0X2h0Yl9nZXRfbGVhZl9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgYWlyb2hhX3RjX3NldHVwX3FkaXNjX2h0YihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuK3N0YXRpYyBpbnQgYWlyb2hhX3RjX3NldHVwX3FkaXNjX2h0YihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3QgdGNfaHRiX3FvcHRfb2ZmbG9hZCAqb3B0KVxuIHtcbiBcdHN3aXRjaCAob3B0LVx1MDAzZWNvbW1hbmQpIHtcbi1cdGNhc2UgVENfSFRCX0NSRUFURTpcbitcdGNhc2UgVENfSFRCX0NSRUFURToge1xuK1x0XHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXHRcdGludCBlcnI7XG4rXG4rXHRcdGVyciA9IGFpcm9oYV9lbmFibGVfcW9zX2Zvcl9nZG0zNChuZXRkZXYsIG9wdC1cdTAwM2VleHRhY2spO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdHJldHVybiBlcnI7XG4rXG4rXHRcdHNldF9iaXQoQUlST0hBX0RFVl9GX1RYX1FPUywgXHUwMDI2ZGV2LVx1MDAzZWZsYWdzKTtcbiBcdFx0YnJlYWs7XG4rXHR9XG4gXHRjYXNlIFRDX0hUQl9ERVNUUk9ZOlxuLVx0XHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9kZXN0cm95KGRldik7XG4rXHRcdHJldHVybiBhaXJvaGFfdGNfaHRiX2Rlc3Ryb3kobmV0ZGV2KTtcbiBcdGNhc2UgVENfSFRCX05PREVfTU9ESUZZOlxuLVx0XHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9tb2RpZnlfcXVldWUoZGV2LCBvcHQpO1xuK1x0XHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9tb2RpZnlfcXVldWUobmV0ZGV2LCBvcHQpO1xuIFx0Y2FzZSBUQ19IVEJfTEVBRl9BTExPQ19RVUVVRTpcbi1cdFx0cmV0dXJuIGFpcm9oYV90Y19odGJfYWxsb2NfbGVhZl9xdWV1ZShkZXYsIG9wdCk7XG4rXHRcdHJldHVybiBhaXJvaGFfdGNfaHRiX2FsbG9jX2xlYWZfcXVldWUobmV0ZGV2LCBvcHQpO1xuIFx0Y2FzZSBUQ19IVEJfTEVBRl9ERUw6XG4gXHRjYXNlIFRDX0hUQl9MRUFGX0RFTF9MQVNUOlxuIFx0Y2FzZSBUQ19IVEJfTEVBRl9ERUxfTEFTVF9GT1JDRTpcbi1cdFx0cmV0dXJuIGFpcm9oYV90Y19odGJfZGVsZXRlX2xlYWZfcXVldWUoZGV2LCBvcHQpO1xuK1x0XHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9kZWxldGVfbGVhZl9xdWV1ZShuZXRkZXYsIG9wdCk7XG4gXHRjYXNlIFRDX0hUQl9MRUFGX1FVRVJZX1FVRVVFOlxuLVx0XHRyZXR1cm4gYWlyb2hhX3RjX2dldF9odGJfZ2V0X2xlYWZfcXVldWUoZGV2LCBvcHQpO1xuK1x0XHRyZXR1cm4gYWlyb2hhX3RjX2dldF9odGJfZ2V0X2xlYWZfcXVldWUobmV0ZGV2LCBvcHQpO1xuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFx0fVxuQEAgLTMyMjAsOCArMzQxNSw4IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2FsbG9jX2dkbV9kZXZpY2Uoc3RydWN0IGFpcm9oYV9ldGggKmV0aCxcbiB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXY7XG4rXHRpbnQgZXJyLCBpO1xuIFx0dTggaW5kZXg7XG4tXHRpbnQgZXJyO1xuIFxuIFx0bmV0ZGV2ID0gZGV2bV9hbGxvY19ldGhlcmRldl9tcXMoZXRoLVx1MDAzZWRldiwgc2l6ZW9mKCpkZXYpLFxuIFx0XHRcdFx0XHQgQUlST0hBX05VTV9ORVRERVZfVFhfUklOR1MsXG5AQCAtMzI3Miw2ICszNDY3LDggQEAgc3RhdGljIGludCBhaXJvaGFfYWxsb2NfZ2RtX2RldmljZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLFxuIFx0bmV0ZGV2LVx1MDAzZWRldi5vZl9ub2RlID0gb2Zfbm9kZV9nZXQobnApO1xuIFx0ZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiBcdHU2NF9zdGF0c19pbml0KFx1MDAyNmRldi1cdTAwM2VzdGF0cy5zeW5jcCk7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGRldi1cdTAwM2V0eHFfbG9jayk7IGkrKylcbitcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2ZGV2LVx1MDAzZXR4cV9sb2NrW2ldKTtcbiBcdGRldi1cdTAwM2Vwb3J0ID0gcG9ydDtcbiBcdGRldi1cdTAwM2VldGggPSBldGg7XG4gXHRkZXYtXHUwMDNlbmJxID0gbmJxO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oXG5pbmRleCBmZTkzNGY5ZmZlOGExMS4uZmE5YThlZGNlMjJmZmQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oXG5AQCAtNTcwLDI0ICs1NzAsMzEgQEAgc3RydWN0IGFpcm9oYV9xZG1hIHtcbiBcdERFQ0xBUkVfQklUTUFQKHFvc19jaGFubmVsX21hcCwgQUlST0hBX05VTV9RT1NfQ0hBTk5FTFMpO1xuIH07XG4gXG4tZW51bSBhaXJvaGFfcHJpdl9mbGFncyB7XG4tXHRBSVJPSEFfUFJJVl9GX1dBTiA9IEJJVCgwKSxcbitlbnVtIGFpcm9oYV9kZXZfZmxhZ3Mge1xuK1x0QUlST0hBX0RFVl9GX1dBTixcbitcdEFJUk9IQV9ERVZfRl9UWF9RT1MsXG4gfTtcbiBcbiBzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYge1xuK1x0c3RydWN0IGFpcm9oYV9xZG1hIF9fcmN1ICpxZG1hO1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydDtcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcbiBcdHN0cnVjdCBhaXJvaGFfZXRoICpldGg7XG4gXG4gXHRERUNMQVJFX0JJVE1BUChxb3Nfc3FfYm1hcCwgQUlST0hBX05VTV9RT1NfQ0hBTk5FTFMpO1xuLVx0LyogcW9zIHN0YXRzIGNvdW50ZXJzICovXG4tXHR1NjQgY3B1X3R4X3BhY2tldHM7XG4tXHR1NjQgZndkX3R4X3BhY2tldHM7XG4rXHRzdHJ1Y3Qge1xuK1x0XHR1MzIgY3B1X3R4X3BhY2tldHM7XG4rXHRcdHUzMiBmd2RfdHhfcGFja2V0cztcbitcdH0gcW9zX3N0YXRzW0FJUk9IQV9OVU1fUU9TX0NIQU5ORUxTXTtcbiBcbi1cdHUzMiBmbGFncztcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRpbnQgbmJxO1xuIFxuIFx0c3RydWN0IGFpcm9oYV9od19zdGF0cyBzdGF0cztcbitcbitcdC8qIFNlcmlhbGl6ZSBuZXRkZXZfdHhfY29tcGxldGVkX3F1ZXVlKCkgY2FsbHMgcGVyIFRYIHF1ZXVlIGR1cmluZ1xuK1x0ICogUURNQSBtaWdyYXRpb24uXG4rXHQgKi9cbitcdHNwaW5sb2NrX3QgdHhxX2xvY2tbQUlST0hBX05VTV9ORVRERVZfVFhfUklOR1NdO1xuIH07XG4gXG4gc3RydWN0IGFpcm9oYV9nZG1fcG9ydCB7XG5AQCAtNjk0LDcgKzcwMSw3IEBAIHN0YXRpYyBpbmxpbmUgdTE2IGFpcm9oYV9xZG1hX2dldF90eHEoc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hLCB1MTYgcWlkKVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBhaXJvaGFfaXNfbGFuX2dkbV9kZXYoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpXG4ge1xuLVx0cmV0dXJuICEoZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBBSVJPSEFfUFJJVl9GX1dBTik7XG4rXHRyZXR1cm4gIXRlc3RfYml0KEFJUk9IQV9ERVZfRl9XQU4sIFx1MDAyNmRldi1cdTAwM2VmbGFncyk7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBhaXJvaGFfaXNfNzU4MShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoKVxuQEAgLTcxMSw2ICs3MTgsMTYgQEAgaW50IGFpcm9oYV9nZXRfZmVfcG9ydChzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldik7XG4gYm9vbCBhaXJvaGFfaXNfdmFsaWRfZ2RtX2RldihzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLFxuIFx0XHRcdCAgICAgc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpO1xuIFxuK2V4dGVybiBzdHJ1Y3QgbXV0ZXggZmxvd19vZmZsb2FkX211dGV4O1xuK1xuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGFpcm9oYV9xZG1hICpcbithaXJvaGFfcWRtYV9kZXJlZihzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcbit7XG4rXHRyZXR1cm4gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChkZXYtXHUwMDNlcWRtYSxcbitcdFx0XHRcdFx0IGxvY2tkZXBfcnRubF9pc19oZWxkKCkgfHxcbitcdFx0XHRcdFx0IGxvY2tkZXBfaXNfaGVsZChcdTAwMjZmbG93X29mZmxvYWRfbXV0ZXgpKTtcbit9XG4rXG4gdm9pZCBhaXJvaGFfcHBlX3NldF94bWl0X2ZyYW1lX3NpemUoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpO1xuIHZvaWQgYWlyb2hhX3BwZV9zZXRfY3B1X3BvcnQoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYsIHU4IHBwZV9pZCwgdTggZnBvcnQpO1xuIGJvb2wgYWlyb2hhX3BwZV9pc19lbmFibGVkKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsIGludCBpbmRleCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmNcbmluZGV4IGU0YzM2NDRkZDZlYzdhLi4zM2RkZjBkMDc4NTUzOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmNcbkBAIC0xNSw3ICsxNSwxMCBAQFxuICNpbmNsdWRlIFwiYWlyb2hhX3JlZ3MuaFwiXG4gI2luY2x1ZGUgXCJhaXJvaGFfZXRoLmhcIlxuIFxuLXN0YXRpYyBERUZJTkVfTVVURVgoZmxvd19vZmZsb2FkX211dGV4KTtcbisvKiBTZXJpYWxpemUgYWlyb2hhX2dkbV9kZXYgZmxhZ3MsIFFETUEgcG9pbnRlciBhbmQgUFBFIENQVSBwb3J0XG4rICogY29uZmlndXJhdGlvbi5cbisgKi9cbitERUZJTkVfTVVURVgoZmxvd19vZmZsb2FkX211dGV4KTtcbiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHBwZV9sb2NrKTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHJoYXNodGFibGVfcGFyYW1zIGFpcm9oYV9mbG93X3RhYmxlX3BhcmFtcyA9IHtcbkBAIC04Niw4ICs4OSw4IEBAIHN0YXRpYyB1MzIgYWlyb2hhX3BwZV9nZXRfdGltZXN0YW1wKHN0cnVjdCBhaXJvaGFfcHBlICpwcGUpXG4gXG4gdm9pZCBhaXJvaGFfcHBlX3NldF9jcHVfcG9ydChzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiwgdTggcHBlX2lkLCB1OCBmcG9ydClcbiB7XG4tXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtXHUwMDNlcWRtYTtcbi1cdHN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBxZG1hLVx1MDAzZWV0aDtcbitcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XG4rXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gZGV2LVx1MDAzZWV0aDtcbiBcdHU4IHFkbWFfaWQgPSBxZG1hIC0gXHUwMDI2ZXRoLVx1MDAzZXFkbWFbMF07XG4gXHR1MzIgZmVfY3B1X3BvcnQ7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9yZWdzLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaFxuaW5kZXggNmZlZDYzZDAxM2I0MTIuLjQ0MmI0OGM5Yjk5MWVmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9yZWdzLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcmVncy5oXG5AQCAtMzc1LDYgKzM3NSw3IEBAXG4gXG4gI2RlZmluZSBSRUdfU1JDX1BPUlRfRkNfTUFQNlx0XHQweDIyOThcbiAjZGVmaW5lIEZDX0lEX09GX1NSQ19QT1JUX01BU0soX24pXHRHRU5NQVNLKDQgKyAoKF9uKSBcdTAwM2NcdTAwM2MgMyksICgoX24pIFx1MDAzY1x1MDAzYyAzKSlcbisjZGVmaW5lIEZDX01BUDZfREVGX1ZBTFVFXHRcdDB4MWIxYTE5MThcbiBcbiAjZGVmaW5lIFJFR19XQU5fTVRVMFx0XHRcdDB4MjMwMFxuICNkZWZpbmUgV0FOX01UVTFfTUFTS1x0XHRcdEdFTk1BU0soMjksIDE2KVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTg6NTM6NDAuODIzNjU0NTUzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY3NzYxMzYyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEFpcm9oYSBFdGhlcm5ldCBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byB0aGUgQWlyb2hhIGV0aGVybmV0IGRyaXZlciwgc3BlY2lmaWNhbGx5IHBva2luZyBhcm91bmQgaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmNgIGFuZCBpdHMgZnJpZW5kcy4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgdGhlIGludHJvZHVjdGlvbiBvZiBSQ1UgcHJvdGVjdGlvbiBmb3IgYGRldi1cdTAwM2VxZG1hYCBhbmQgdGhlIGFkZGVkIFFvUyBzdXBwb3J0IGZvciBHRE0zLzQuIFRoYXQncyBhIHNpZ25pZmljYW50IGNoYW5nZTsgaXQncyBmdW5jdGlvbmFsbHkgYWx0ZXJpbmcgdGhlIG5ldHdvcmsgZHJpdmVyJ3MgYmVoYXZpb3IuIEkgbmVlZCB0byBiZSBzdXJlIHRoaXMgaXMgZ29pbmcgdG8gYmVoYXZlIGNvcnJlY3RseS5cblxuRmlyc3QsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IHdheSB0byB0ZXN0IHRoaXMgdGhvcm91Z2hseS4gQ2FuIEkgc2ltdWxhdGUgdGhlIEFpcm9oYSBoYXJkd2FyZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBUaGF0IHdvdWxkIG1ha2UgdGVzdGluZyBhbmQgZGVidWdnaW5nIGNvbnNpZGVyYWJseSBlYXNpZXIuIEl0J3MgYSBrZXkgcXVlc3Rpb24uIEkgbmVlZCB0byBrbm93IHRoZSBzcGVjaWZpYyB0YXJnZXQuXG5cbkFuZCB0aGF0IGxlYWRzIG1lIHRvIG15IG5leHQgcXVlc3Rpb246IElzIHRoaXMgZHJpdmVyIGRlc2lnbmVkIGZvciBhIHNwZWNpZmljIFN5c3RlbS1vbi1DaGlwIChTb0MpLCBvciBpcyBpdCBtb3JlIG9mIGEgZ2VuZXJhbCBkcml2ZXIgdGhhdCBzdXBwb3J0cyBhIHNwZWNpZmljIFBDSWUgY2FyZCBpbXBsZW1lbnRhdGlvbj8gVW5kZXJzdGFuZGluZyB0aGUgaGFyZHdhcmUgY29udGV4dCBpcyBjcnVjaWFsIGZvciBpbnRlcnByZXRpbmcgdGhlc2UgY2hhbmdlcy4gSSdsbCB0YWtlIGEgbG9vayBhdCB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnYCBmaWxlIHRvIHNlZSBpZiBJIGNhbiBnZXQgc29tZSBjb250ZXh0LiBUaGF0IHNob3VsZCBwcm92aWRlIHNvbWUgaGludHMgYWJvdXQgdGhlIGhhcmR3YXJlIHJlcXVpcmVtZW50cyBvciB0YXJnZXRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTIxNywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE4OjUzOjQ1LjUwMTI3MTEzM1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzIwMjY5OTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9WRU5ET1JfQUlST0hBXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWc6Mjpjb25maWcgTkVUX1ZFTkRPUl9BSVJPSEFcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZy0zLVxcdGJvb2wgXFxcIkFpcm9oYSBkZXZpY2VzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxODo1Mzo0NS45MzMzMzM2ODVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODAzMzY5Njg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqSW52ZW50b3J5IEFzc2Vzc21lbnQ6IFZlbmRvciBGb2N1cyoqXG5cbkFscmlnaHQsIHNvIHRoZSBpbW1lZGlhdGUgZ29hbCBpcyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGxhbmRzY2FwZSBvZiBkZXZpY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNwZWNpZmljIHZlbmRvci4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHdoYXQgd2UgaGF2ZSBkZXBsb3llZCwgYW5kIHdoZXJlIHdlJ3JlIGF0IHdpdGggaXQuIFRoaXMgaXMgYSBmb3VuZGF0aW9uYWwgc3RlcCwgYW5kIGRlcGVuZGluZyBvbiB0aGUgbGV2ZWwgb2YgZ3JhbnVsYXJpdHkgYXZhaWxhYmxlLCBpdCBtYXkgZ3VpZGUgZnVydGhlciBhbmFseXNpcy4gRGVwZW5kaW5nIG9uIHdoYXQgSSBmaW5kLCB0aGUgZm9jdXMgY291bGQgc2hpZnQgdG8gYSByaXNrIGFzc2Vzc21lbnQsIGEgcGVyZm9ybWFuY2UgcmV2aWV3LCBvciBtYXliZSBldmVuIGEgbGljZW5zZSBjb21wbGlhbmNlIGNoZWNrLCBidXQgZmlyc3QgSSBuZWVkIGEgY29tcGxldGUgcGljdHVyZS4gTGV0J3Mgc2VlIHdoYXQgd2UncmUgd29ya2luZyB3aXRoIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzM5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTg6NTM6NDguNzM2NzA5MDU0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyMzMyMDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfVkVORE9SX0FJUk9IQVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWc6Mjpjb25maWcgTkVUX1ZFTkRPUl9BSVJPSEFcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZy0zLVxcdGJvb2wgXFxcIkFpcm9oYSBkZXZpY2VzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxODo1Mzo0OC44MDkwNDc5NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4MjIyNDYzMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4gVGhlIGZpcnN0IHRoaW5nIEknbSByZWFjaGluZyBmb3IgaXMgdGhlIEtjb25maWcgZmlsZS4gSSdtIGdvaW5nIHRvIHN0YXJ0IHdpdGggYSBxdWljayBzY2FuIG9mIGl0cyBjb250ZW50cy4gSSdtIGxvb2tpbmcgZm9yIHRoZSBrZXkgdmFyaWFibGVzLCBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgb2J2aW91cyBjaGFuZ2VzIGZyb20gdGhlIGxhc3QgdGltZSBJIHRvdWNoZWQgdGhpcy4gSSB3YW50IHRvIHNlZSBpZiBhbnl0aGluZyBqdW1wcyBvdXQgdGhhdCdzIGJlZW4gcmVjZW50bHkgbW9kaWZpZWQsIG9yIGlmIGFueXRoaW5nIGxvb2tzIG91dCBvZiBwbGFjZSBnaXZlbiBteSBjdXJyZW50IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSdzIGdvYWxzLiBJIGFtIGFscmVhZHkgdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBpZiBvbmUgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpcyBjaGFuZ2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjAyMSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE4OjUzOjUxLjYzMTI5NzUyN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzEwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBORVRfVkVORE9SX0FJUk9IQVxcbiAgIDM6XFx0XFx0Ym9vbCBcXFwiQWlyb2hhIGRldmljZXNcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIEFSQ0hfQUlST0hBIHx8IENPTVBJTEVfVEVTVFxcbiAgIDU6XFx0XFx0aGVscFxcbiAgIDY6XFx0XFx0ICBJZiB5b3UgaGF2ZSBhIEFpcm9oYSBTb0Mgd2l0aCBldGhlcm5ldCwgc2F5IFkuXFxuICAgNzpcXHRcXG4gICA4OlxcdGlmIE5FVF9WRU5ET1JfQUlST0hBXFxuICAgOTpcXHRcXG4gIDEwOlxcdGNvbmZpZyBORVRfQUlST0hBX05QVVxcbiAgMTE6XFx0XFx0dHJpc3RhdGUgXFxcIkFpcm9oYSBOUFUgc3VwcG9ydFxcXCJcXG4gIDEyOlxcdFxcdHNlbGVjdCBXQU5UX0RFVl9DT1JFRFVNUFxcbiAgMTM6XFx0XFx0c2VsZWN0IFJFR01BUF9NTUlPXFxuICAxNDpcXHRcXHRoZWxwXFxuICAxNTpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIEFpcm9oYSBOZXR3b3JrIFByb2Nlc3NvciAoTlBVKSBhdmFpbGFibGVcXG4gIDE2OlxcdFxcdCAgb24gdGhlIEFpcm9oYSBTb2MgZmFtaWx5LlxcbiAgMTc6XFx0XFxuICAxODpcXHRjb25maWcgTkVUX0FJUk9IQVxcbiAgMTk6XFx0XFx0dHJpc3RhdGUgXFxcIkFpcm9oYSBTb0MgR2lnYWJpdCBFdGhlcm5ldCBzdXBwb3J0XFxcIlxcbiAgMjA6XFx0XFx0ZGVwZW5kcyBvbiBORVRfRFNBIHx8ICFORVRfRFNBXFxuICAyMTpcXHRcXHRzZWxlY3QgTkVUX0FJUk9IQV9OUFVcXG4gIDIyOlxcdFxcdHNlbGVjdCBQQUdFX1BPT0xcXG4gIDIzOlxcdFxcdGhlbHBcXG4gIDI0OlxcdFxcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIGdpZ2FiaXQgZXRoZXJuZXQgTUFDcyBpbiB0aGVcXG4gIDI1OlxcdFxcdCAgQWlyb2hhIFNvQyBmYW1pbHkuXFxuICAyNjpcXHRcXG4gIDI3OlxcdGNvbmZpZyBORVRfQUlST0hBX0ZMT1dfU1RBVFNcXG4gIDI4OlxcdFxcdGRlZmF1bHQgeVxcbiAgMjk6XFx0XFx0Ym9vbCBcXFwiQWlyb2hhIGZsb3cgc3RhdHNcXFwiXFxuICAzMDpcXHRcXHRkZXBlbmRzIG9uIE5FVF9BSVJPSEEgXFx1MDAyNlxcdTAwMjYgTkVUX0FJUk9IQV9OUFVcXG4gIDMxOlxcdFxcdGhlbHBcXG4gIDMyOlxcdFxcdCAgRW5hYmxlIEFpcm9oYSBmbG93dGFibGUgc3RhdGlzdGljIGNvdW50ZXJzLlxcbiAgMzM6XFx0XFxuICAzNDpcXHRlbmRpZiAjTkVUX1ZFTkRPUl9BSVJPSEFcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTg6NTM6NTEuNjMxNDI2NjA3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE0MjkxMzQ1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEFpcm9oYSBTb0MgR2lnYWJpdCBFdGhlcm5ldCBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGRyaXZlciwgdGhlIFwiQWlyb2hhIFNvQyBHaWdhYml0IEV0aGVybmV0IHN1cHBvcnRcIiBvbmUuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSBpdCdzIGNvbmRpdGlvbmFsIG9uIGBBUkNIX0FJUk9IQWAgb3IgYENPTVBJTEVfVEVTVGAuIE1ha2VzIHNlbnNlLCBpdCdzIHNwZWNpZmljIHRvIHRoYXQgU29DLiBHaXZlbiB0aGF0IGl0J3MgYW4gU29DIGV0aGVybmV0IGRyaXZlciwgaXQncyBwcm9iYWJseSBnb2luZyB0byBiZSBhIHBsYXRmb3JtIGRldmljZS4gTm93LCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgY2FuIEkgZWZmZWN0aXZlbHkgZnV6eiB0aGlzIGluIFFFTVU/IEFuZCB0aGF0J3Mgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gU3RhbmRhcmQgUUVNVSBkb2Vzbid0IHVzdWFsbHkgZW11bGF0ZSBTb0Mtc3BlY2lmaWMgcGxhdGZvcm0gZGV2aWNlcyB1bmxlc3MgdGhlcmUncyBleHBsaWNpdCBzdXBwb3J0IGJ1aWx0LWluLlxuXG5UaGVuIEkgc3RhcnQgdGhpbmtpbmcsIGNhbiBzeXprYWxsZXIgaGVscCBtZSBoZXJlPyBXZWxsLCBzeXprYWxsZXIgKmNhbiogZnV6eiBwbGF0Zm9ybSBkZXZpY2VzLCBpZiB0aGV5J3JlIHNldCB1cCB2aWEgdGhlIGRldmljZSB0cmVlIG9yIGlmIGl0IGNhbiBpbmplY3QgdGhlbS4gQnV0LCBteSBleHBlcmllbmNlIHNheXMgc3l6a2FsbGVyJ3Mgc3RyZW5ndGhzIGxpZSBpbiBQQ0ksIFVTQiwgYW5kIHZpcnR1YWwgZGV2aWNlcy4gUGxhdGZvcm0gZGV2aWNlcyBhcmUgYSBiaXQgdHJpY2tpZXIsIHRoZXkgcmVxdWlyZSBzcGVjaWZpYyBlbXVsYXRvciBtb2RlbHMgb3Igc3l6a2FsbGVyIG5lZWRzIHRvIGdlbmVyYXRlIHRoZXNlLCBhbmQgaXQncyBub3QgdGhlIHVzdWFsIHJvdXRlLlxuXG5Ib2xkIG9uLCBJIHJlY2FsbCBgc3l6X2dlbmV0bGlua2AgYW5kIG90aGVyIG5ldHdvcmsgZnV6emluZyBjYXBhYmlsaXRpZXMgaW4gc3l6a2FsbGVyLiBIb3dldmVyLCBmdXp6aW5nIGEgc3BlY2lmaWMgU29DIGV0aGVybmV0IGRyaXZlciBtZWFucyB0aGUgZGV2aWNlIG5lZWRzIHRvIGJlICpwcm9iZWQqLiBJdCdzIG5vdCBqdXN0IGFib3V0IG5ldHdvcmsgcHJpbWl0aXZlczsgdGhlIGRyaXZlciBoYXMgdG8gc3VjY2Vzc2Z1bGx5IGF0dGFjaCB0byB0aGUgaGFyZHdhcmUuIFNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBkcml2ZXIgaXMgYWN0dWFsbHkgcHJvYmVkLiBMZXQncyBkaWcgaW50byB0aGUgZHJpdmVyJ3MgcHJvYmluZyBtZWNoYW5pc20gYW5kIHNlZSBob3cgaXTigJlzIGluaXRpYWxpemVkLiBUaGF0IHdpbGwgZGV0ZXJtaW5lIGlmIEkgY2FuIGdldCB0aGlzIHRoaW5nIHVwIGFuZCBydW5uaW5nIGZvciBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjY1OSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE4OjUzOjU2Ljc3NDM0MzQzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjY0OTU5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb2R1bGVfcGxhdGZvcm1fZHJpdmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYz0zOTU0PXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGFpcm9oYV9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTM5NjEtfTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jOjM5NjI6bW9kdWxlX3BsYXRmb3JtX2RyaXZlcihhaXJvaGFfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTM5NjMtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jPTgxMz1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhaXJvaGFfbnB1X2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtODIwLX07XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo4MjE6bW9kdWxlX3BsYXRmb3JtX2RyaXZlcihhaXJvaGFfbnB1X2RyaXZlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy04MjItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE4OjUzOjU2Ljg0MTAwNjE2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzOTYwNzQyOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ2hlY2tpbmcgU3l6a2FsbGVyJ3MgUGxhdGZvcm0gRHJpdmVyIENvdmVyYWdlKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIHRoaXMgaXMgcHJvYmFibHkgYSBwbGF0Zm9ybSBkcml2ZXIsIHdoaWNoIG1lYW5zIFN5emthbGxlciBtaWdodCBiZSBhYmxlIHRvIGludGVyYWN0IHdpdGggaXQsIGJ1dCBpdCdzIG5vdCBhIGdpdmVuLiBTeXprYWxsZXIncyBnb29kIGF0IGluc3RhbnRpYXRpbmcgcGxhdGZvcm0gZGV2aWNlcyB3aGVuIGl0IGhhcyB0aGUgcmlnaHQgZGVzY3JpcHRpb25zLCBidXQgdGhvc2UgZGVzY3JpcHRpb25zIGFyZSBvZnRlbiBtaXNzaW5nIGZvciBzcGVjaWFsaXplZCBvciBsZXNzIGNvbW1vbiBTb0MgZXRoZXJuZXQgZHJpdmVycy4gVW5sZXNzIGl0J3MgYSB2ZXJ5IHByZXZhbGVudCBkcml2ZXIgb3Igc29tZW9uZSdzIHNwZWNpZmljYWxseSBhZGRlZCBzdXBwb3J0IGZvciBpdCwgd2UncmUgbGlrZWx5IGdvaW5nIHRvIGJlIGluIHRoZSBkYXJrLiBNeSBmaXJzdCBtb3ZlIGhlcmUgaXMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgU3l6a2FsbGVyIGhhcyBhbnkgYnVpbHQtaW4gZGVzY3JpcHRpb25zIGZvciB0aGUgQWlyb2hhIHBsYXRmb3JtLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0ODYsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxODo1NDowMC4yMzcwODQ1NTVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzODcyMzgyLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhaXJvaGFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwic3lzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTg6NTQ6MDAuMzAwOTY5Mjg3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk5MzU3Njc0NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBBaXJvaGEgRXRoZXJuZXQgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSBuZWVkIHRvIGFzc2VzcyB0aGlzIHBhdGNoIGZvciBmdXp6aW5nIHdvcnRoaW5lc3MuIFRoZSBpbW1lZGlhdGUgY2hhbGxlbmdlIGlzIHRoYXQgSSBjYW4ndCB1c2UgYGdyZXBwZXJgIHRvIHNlYXJjaCB0aGUgYHN5cy9gIGRpcmVjdG9yeS4gVGhhdCdzIGEgZ2l2ZW4uIFRoZSBkb2N1bWVudGF0aW9uIGV4cGxpY2l0bHkgcHJvaGliaXRzIGl0IGJlY2F1c2UgYHN5emthbGxlcmAgZGVzY3JpcHRpb25zIGFuZCBzeXpfIHN5c2NhbGxzIGFyZW4ndCBhY3R1YWxseSBrZXJuZWwgY29kZS4gSXQgbG9va3MgbGlrZSBJIG5lZWQgdG8gZWl0aGVyIHVzZSBgcmVhZC1maWxlYCBvciBgY29kZXNlYXJjaC1kaXItaW5kZXhgLCBidXQgaG9sZCBvbi4uLiB0aGUgaW5zdHJ1Y3Rpb25zIHNwZWNpZmljYWxseSBzYXkgSSBzaG91bGQgYmUgdXNpbmcgYHt7LnRvb2xSZWFkRGVzY3JpcHRpb259fWAgaW5zdGVhZC4gKldhaXQgYSBzZWNvbmQhKiBUaGVyZSBpc24ndCBhIGB0b29sUmVhZERlc2NyaXB0aW9uYCB0b29sIGluIHRoZSBsaXN0LiBUaGlzIGlzIGZydXN0cmF0aW5nLiBPa2F5LCBJJ20gbGVmdCB3aXRoIHRoZSBvdGhlciB0b29scy4gSSBjYW4ndCBjaGVjayBzeXprYWxsZXIgZGVzY3JpcHRpb25zLlxuXG5BbHJpZ2h0LCByZWZvY3VzLiBUaGUgaW5zdHJ1Y3Rpb25zIHRlbGwgbWUgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIHVuZGVyIHNwZWNpZmljIGNpcmN1bXN0YW5jZXMuIExldCBtZSBzZWUuLi4gRG9jdW1lbnRhdGlvbi9LY29uZmlnIGNoYW5nZXMsIGNvbW1lbnRzLCBkZWNvcmF0aXZlIGNoYW5nZXMsIGNvbnN0YW50cy9tYWNyb3Mgd2l0aG91dCBmdW5jdGlvbmFsIGltcGFjdCwgYW5kICpjcnVjaWFsbHkqIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UuIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIEdQVSBkcml2ZXJzIHRoYXQgbmVlZCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gUUVNVSwgb3IgYC5yZW1vdmUvLnNodXRkb3duYCBjYWxsYmFja3MgYXJlIGFsc28gb3V0LlxuXG5UaGlzIGlzIGFuIEFpcm9oYSBTb0Mtc3BlY2lmaWMgZXRoZXJuZXQgZHJpdmVyLiBJdCByZXF1aXJlcyBhIHBoeXNpY2FsIEFpcm9oYSBTb0Mgb3IgYW4gQWlyb2hhIGVtdWxhdG9yIHRvIGZ1bmN0aW9uLiBTdGFuZGFyZCBRRU1VIGRvZXNuJ3QgZW11bGF0ZSBBaXJvaGEgU29Dcy4gSXQncyAqbm90KiBhIFBDSWUgc3dpdGNoIG9yIFNtYXJ0TklDLCBzbyB0aGF0IGlzbid0IHRoZSBwcm9ibGVtLiBCdXQgaXQgYWJzb2x1dGVseSBmYWxscyB1bmRlciBcIkNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZVwiLiBUaGVzZSBraW5kcyBvZiBwbGF0Zm9ybSBkZXZpY2VzLCBsaWtlIEFpcm9oYSBFTjc1ODEsIGFyZSBqdXN0IG5vdCBlbXVsYXRlZCBieSBzdGFuZGFyZCBRRU1VLiBUaGF0IG1lYW5zIHRoZSBkcml2ZXIncyBgcHJvYmVgIGZ1bmN0aW9uLCB3aGljaCBpcyB0aGUgZW50cnkgcG9pbnQsIHdpbGwgbmV2ZXIgYmUgY2FsbGVkLiBOb25lIG9mIHRoZSBjb2RlIG1vZGlmaWVkIGluIHRoaXMgcGF0Y2ggd2lsbCBldmVyIGJlIGV4ZWN1dGVkLlxuXG5MZXQncyBkbyBhIHF1aWNrIGRvdWJsZS1jaGVjaywgdGhvdWdoLiBQbGF0Zm9ybSBkcml2ZXJzIGJpbmQgdG8gZGV2aWNlcyB2aWEgRGV2aWNlIFRyZWUgb3IgQUNQSS4gVW5sZXNzIFFFTVUgaXMgY29uZmlndXJlZCB0byBlbXVsYXRlIGEgbWFjaGluZSB0aGF0ICppbmNsdWRlcyogYW4gQWlyb2hhIGRldmljZSBpbiBpdHMgRFQsIGl0IHdvbid0IGV4aXN0LiBTdGFuZGFyZCBzeXprYWxsZXIgdXNlcyBnZW5lcmljIG1hY2hpbmUgdHlwZXMsIGxpa2UgYHEzNWAgZm9yIHg4Nl82NCBvciBgdmlydGAgZm9yIGFybTY0LiBUaG9zZSBkb24ndCBtb2RlbCBBaXJvaGEgZXRoZXJuZXQgTUFDcy4gVGhlIGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgUUVNVS5cblxuSSBuZWVkIHRvIHZlcmlmeSB0aGUgZHJpdmVyJ3MgY29tcGF0aWJsZSBzdHJpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzI5LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE4OjU0OjEwLjIzNjc0MDMzMVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjY2Nzk4MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib2ZfZGV2aWNlX2lkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYz0zOTM1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYWlyb2hhX2V0aF9zb2NfZGF0YSBhbjc1ODNfc29jX2RhdGEgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTM5NDYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYzozOTQ3OnN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9mX2Fpcm9oYV9tYXRjaFtdID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMzk0OC1cXHR7IC5jb21wYXRpYmxlID0gXFxcImFpcm9oYSxlbjc1ODEtZXRoXFxcIiwgLmRhdGEgPSBcXHUwMDI2ZW43NTgxX3NvY19kYXRhIH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE4OjU0OjEwLjMwMzQyOTc5MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDU4NTI3NjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZyBBc3Nlc3NtZW50KipcblxuT2theSwgc28gSSd2ZSBsb29rZWQgaW50byB0aGlzIGRyaXZlciwgYGFpcm9oYSxlbjc1ODEtZXRoYCBhbmQgYGFpcm9oYSxhbjc1ODMtZXRoYC4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhlc2UgYXJlICpzcGVjaWZpYyogQWlyb2hhIFNvQyBkcml2ZXJzLCB0YXJnZXRpbmcgdGhvc2UgcGFydGljdWxhciBoYXJkd2FyZSBwbGF0Zm9ybXMuIEFuZCB0aGF0J3MgdGhlIGtleSBpc3N1ZS4gSSBrbm93IHRoYXQgUUVNVSwgdGhlIHN0YW5kYXJkIGVtdWxhdG9yIFN5emthbGxlciByZWxpZXMgb24sIGRvZXNuJ3QgYWN0dWFsbHkgbW9kZWwgYW55IEFpcm9oYSBTb0NzLiBUaGVyZSdzIG5vIEFpcm9oYSBtYWNoaW5lIHR5cGUgYXZhaWxhYmxlIHdpdGhpbiB0aGUgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudCB1c2VkIGJ5IFN5emthbGxlci4gVGhpcyBtZWFucywgcHJhY3RpY2FsbHkgc3BlYWtpbmcsIHRoYXQgdGhpcyBwYXJ0aWN1bGFyIGRyaXZlciBhbmQsIGJ5IGV4dGVuc2lvbiwgdGhlIG1vZGlmaWVkIGNvZGUgaW4gcXVlc3Rpb24sIGlzIHV0dGVybHkgdW5yZWFjaGFibGUgZHVyaW5nIGFueSBraW5kIG9mIGZ1enppbmcgcnVuIGluIGEgdmlydHVhbGl6ZWQgc2V0dGluZy4gVGhlIGNvZGUganVzdCB3b24ndCBiZSB0cmlnZ2VyZWQuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGZsYWcgaXQgYXMgc3VjaC4gSSdtIGdvaW5nIHRvIHNldCBXb3J0aEZ1enppbmc9ZmFsc2UgYmVjYXVzZSBpdCBpcyBhbiBTb0Mtc3BlY2lmaWMgcGxhdGZvcm0gZHJpdmVyIChBaXJvaGEgRXRoZXJuZXQpIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGF0LCBhcyBJIHNlZSBpdCwgbWFrZXMgdGhlIGNvZGUgdW5yZWFjaGFibGUgaW4gYW55IHZpcnR1YWxpemVkIHRlc3QgZW52aXJvbm1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MjIzLCJPdXRwdXRUb2tlbnMiOjEyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxODo1NDoxNS4zNjE5NjA0MDRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTUzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQWlyb2hhIFNvQyBHaWdhYml0IEV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhKS4gVGhpcyBpcyBhIHBsYXRmb3JtIGRyaXZlciBmb3Igc3BlY2lmaWMgQWlyb2hhIFNvQ3MgKGUuZy4sIGVuNzU4MSwgYW43NTgzKSB3aGljaCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50cy4gQmVjYXVzZSB0aGUgaGFyZHdhcmUgaXMgbm90IHByZXNlbnQgb3IgZW11bGF0ZWQsIHRoZSBkcml2ZXIgd2lsbCBub3QgcHJvYmUgYW5kIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFpcm9oYSBTb0MgR2lnYWJpdCBFdGhlcm5ldCBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYSkuIFRoaXMgaXMgYSBwbGF0Zm9ybSBkcml2ZXIgZm9yIHNwZWNpZmljIEFpcm9oYSBTb0NzIChlLmcuLCBlbjc1ODEsIGFuNzU4Mykgd2hpY2ggYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudHMuIEJlY2F1c2UgdGhlIGhhcmR3YXJlIGlzIG5vdCBwcmVzZW50IG9yIGVtdWxhdGVkLCB0aGUgZHJpdmVyIHdpbGwgbm90IHByb2JlIGFuZCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowt7h58[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-26 18:32:29 +0000 UTC FinishedAt: 2026-07-26 18:54:16 +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+CgkJCTx0ZD4yMDI2LzA3LzI2IDE4OjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBaXJvaGEgU29DIEdpZ2FiaXQgRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEpLiBUaGlzIGlzIGEgcGxhdGZvcm0gZHJpdmVyIGZvciBzcGVjaWZpYyBBaXJvaGEgU29DcyAoZS5nLiwgZW43NTgxLCBhbjc1ODMpIHdoaWNoIGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgZW52aXJvbm1lbnRzLiBCZWNhdXNlIHRoZSBoYXJkd2FyZSBpcyBub3QgcHJlc2VudCBvciBlbXVsYXRlZCwgdGhlIGRyaXZlciB3aWxsIG5vdCBwcm9iZSBhbmQgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE4OjUzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNGNhYmNiYTM0ZDAwMzBhNzdlN2E5NTNlZmVhMGNhNTM1Y2ZlM2QwOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gSnVsIDI2IDE4OjUzOjM4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jXG5pbmRleCA3OTQxOGU2ODJmNzFmMy4uZGJhN2M1MmMwODk2OTAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jXG5AQCAtOTM0LDcgJiM0Mzs5MzQsNyBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfcWRtYV93YWtlX25ldGRldl90eHFzKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEpXG4gXHRcdFx0aWYgKCFkZXYpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0XHRpZiAoZGV2LVx1MDAzZXFkbWEgIT0gcWRtYSlcbiYjNDM7XHRcdFx0aWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihkZXYtXHUwMDNlcWRtYSkgIT0gcWRtYSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRcdG5ldGRldiA9IG5ldGRldl9mcm9tX3ByaXYoZGV2KTtcbkBAIC0xMDM4LDEwICYjNDM7MTAzOCwxNiBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3R4X25hcGlfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpXG4gXHRcdHEtXHUwMDNlcXVldWVkLS07XG4gXG4gXHRcdGlmIChza2IpIHtcbiYjNDM7XHRcdFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihza2ItXHUwMDNlZGV2KTtcbiYjNDM7XHRcdFx0dTE2IHFpZHggPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTtcbiBcdFx0XHRzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHE7XG4gXG4gXHRcdFx0dHhxID0gc2tiX2dldF90eF9xdWV1ZShza2ItXHUwMDNlZGV2LCBza2IpO1xuJiM0MztcbiYjNDM7XHRcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmRldi1cdTAwM2V0eHFfbG9ja1txaWR4XSk7XG4gXHRcdFx0bmV0ZGV2X3R4X2NvbXBsZXRlZF9xdWV1ZSh0eHEsIDEsIHNrYi1cdTAwM2VsZW4pO1xuJiM0MztcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZkZXYtXHUwMDNldHhxX2xvY2tbcWlkeF0pO1xuJiM0MztcbiBcdFx0XHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuIFx0XHR9XG4gXG5AQCAtMTkwNSw4ICYjNDM7MTkxMSw4IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4ge1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGRldi1cdTAwM2Vwb3J0O1xuLVx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LVx1MDAzZXFkbWE7XG4gXHR1MzIgcHNlX3BvcnQgPSBGRV9QU0VfUE9SVF9QUEUxO1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcbiBcdGludCBlcnI7XG4gXG4gXHRuZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKG5ldGRldik7XG5AQCAtMTkxNCw2ICYjNDM7MTkyMCw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuJiM0MztcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuIFx0aWYgKG5ldGRldl91c2VzX2RzYShuZXRkZXYpKVxuIFx0XHRhaXJvaGFfZmVfc2V0KHFkbWEtXHUwMDNlZXRoLCBSRUdfR0RNX0lOR1JFU1NfQ0ZHKHBvcnQtXHUwMDNlaWQpLFxuIFx0XHRcdCAgICAgIEdETV9TVEFHX0VOX01BU0spO1xuQEAgLTE5MzcsNyAmIzQzOzE5NDQsNiBAQCBzdGF0aWMgaW50IGFpcm9oYV9kZXZfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIHtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBkZXYtXHUwMDNlcG9ydDtcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cdTAwM2VxZG1hO1xuIFxuIFx0bmV0aWZfdHhfZGlzYWJsZShuZXRkZXYpO1xuIFx0YWlyb2hhX3NldF92aXBfZm9yX2dkbV9wb3J0KGRldiwgZmFsc2UpO1xuQEAgLTE5NDUsNyAmIzQzOzE5NTEsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9kZXZfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0aWYgKC0tcG9ydC1cdTAwM2V1c2VycylcbiBcdFx0YWlyb2hhX3BwZV9zZXRfeG1pdF9mcmFtZV9zaXplKGRldik7XG4gXHRlbHNlXG4tXHRcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhxZG1hLVx1MDAzZWV0aCxcbiYjNDM7XHRcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhkZXYtXHUwMDNlZXRoLFxuIFx0XHRcdFx0XHQgICAgUkVHX0dETV9GV0RfQ0ZHKHBvcnQtXHUwMDNlaWQpLFxuIFx0XHRcdFx0XHQgICAgRkVfUFNFX1BPUlRfRFJPUCk7XG4gXHRyZXR1cm4gMDtcbkBAIC0yMDI4LDYgJiM0MzsyMDM0LDUzIEBAIHN0YXRpYyBpbnQgYWlyb2hhX2VuYWJsZV9nZG0yX2xvb3BiYWNrKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGFpcm9oYV9kaXNhYmxlX2dkbTJfbG9vcGJhY2soc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZGV2LVx1MDAzZXBvcnQ7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IGRldi1cdTAwM2VldGg7XG4mIzQzO1x0aW50IGksIHNyY19wb3J0O1xuJiM0MztcdHUzMiBwc2VfcG9ydDtcbiYjNDM7XG4mIzQzO1x0c3JjX3BvcnQgPSBldGgtXHUwMDNlc29jLVx1MDAzZW9wcy5nZXRfc3BvcnQoZGV2LVx1MDAzZXBvcnQsIGRldi1cdTAwM2VuYnEpO1xuJiM0MztcdGlmIChzcmNfcG9ydCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBzcmNfcG9ydDtcbiYjNDM7XG4mIzQzO1x0YWlyb2hhX2ZlX2NsZWFyKGV0aCxcbiYjNDM7XHRcdFx0UkVHX1NQX0RGVF9DUE9SVChzcmNfcG9ydCBcdTAwM2VcdTAwM2UgZmxzKFNQX0NQT1JUX0RGVF9NQVNLKSksXG4mIzQzO1x0XHRcdFNQX0NQT1JUX01BU0soc3JjX3BvcnQgXHUwMDI2IFNQX0NQT1JUX0RGVF9NQVNLKSk7XG4mIzQzO1xuJiM0MztcdGFpcm9oYV9mZV9zZXQoZXRoLCBSRUdfR0RNX0ZXRF9DRkcoQUlST0hBX0dETTJfSURYKSxcbiYjNDM7XHRcdCAgICAgIEdETV9TVFJJUF9DUkNfTUFTSyk7XG4mIzQzO1x0YWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKGV0aCwgUkVHX0dETV9GV0RfQ0ZHKEFJUk9IQV9HRE0yX0lEWCksXG4mIzQzO1x0XHRcdFx0ICAgIEZFX1BTRV9QT1JUX0RST1ApO1xuJiM0MztcdGFpcm9oYV9mZV9jbGVhcihldGgsIFJFR19HRE1fTFBCS19DRkcoQUlST0hBX0dETTJfSURYKSxcbiYjNDM7XHRcdFx0TFBCS19DSEFOX01BU0sgfCBMUEJLX01PREVfTUFTSyB8IExQQktfRU5fTUFTSyk7XG4mIzQzO1x0cHNlX3BvcnQgPSBhaXJvaGFfcHBlX2lzX2VuYWJsZWQoZXRoLCAxKSA/IEZFX1BTRV9QT1JUX1BQRTJcbiYjNDM7XHRcdFx0XHRcdFx0IDogRkVfUFNFX1BPUlRfUFBFMTtcbiYjNDM7XHRhaXJvaGFfc2V0X2dkbV9wb3J0X2Z3ZF9jZmcoZXRoLCBSRUdfR0RNX0ZXRF9DRkcoQUlST0hBX0dETTJfSURYKSxcbiYjNDM7XHRcdFx0XHQgICAgcHNlX3BvcnQpO1xuJiM0MztcbiYjNDM7XHRhaXJvaGFfZmVfcm13KGV0aCwgUkVHX0ZFX1dBTl9QT1JULCBXQU4wX01BU0ssXG4mIzQzO1x0XHQgICAgICBGSUVMRF9QUkVQKFdBTjBfTUFTSywgQUlST0hBX0dETTJfSURYKSk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGV0aC1cdTAwM2Vzb2MtXHUwMDNlbnVtX3BwZTsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRhaXJvaGFfZmVfY2xlYXIoZXRoLCBSRUdfUFBFX0RGVF9DUE9SVChpLCBBSVJPSEFfR0RNMl9JRFgpLFxuJiM0MztcdFx0XHRcdERGVF9DUE9SVF9NQVNLKEFJUk9IQV9HRE0yX0lEWCkpO1xuJiM0MztcbiYjNDM7XHQvKiBFbmFibGUgVklQIGFuZCBJRkMgZm9yIEdETTIgKi9cbiYjNDM7XHRhaXJvaGFfZmVfc2V0KGV0aCwgUkVHX0ZFX1ZJUF9QT1JUX0VOLCBCSVQoQUlST0hBX0dETTJfSURYKSk7XG4mIzQzO1x0YWlyb2hhX2ZlX3NldChldGgsIFJFR19GRV9JRkNfUE9SVF9FTiwgQklUKEFJUk9IQV9HRE0yX0lEWCkpO1xuJiM0MztcbiYjNDM7XHRpZiAocG9ydC1cdTAwM2VpZCA9PSBBSVJPSEFfR0RNNF9JRFggXHUwMDI2XHUwMDI2IGFpcm9oYV9pc183NTgxKGV0aCkpIHtcbiYjNDM7XHRcdHUzMiBtYXNrID0gRkNfSURfT0ZfU1JDX1BPUlRfTUFTSyhkZXYtXHUwMDNlbmJxKTtcbiYjNDM7XG4mIzQzO1x0XHRhaXJvaGFfZmVfcm13KGV0aCwgUkVHX1NSQ19QT1JUX0ZDX01BUDYsIG1hc2ssXG4mIzQzO1x0XHRcdCAgICAgIEZDX01BUDZfREVGX1ZBTFVFIFx1MDAyNiBtYXNrKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKlxuIGFpcm9oYV9nZXRfd2FuX2dkbV9kZXYoc3RydWN0IGFpcm9oYV9ldGggKmV0aClcbiB7XG5AQCAtMjA1NCwxNSAmIzQzOzIxMDcsMzcgQEAgYWlyb2hhX2dldF93YW5fZ2RtX2RldihzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoKVxuIHN0YXRpYyB2b2lkIGFpcm9oYV9kZXZfc2V0X3FkbWEoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpXG4ge1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IG5ldGRldl9mcm9tX3ByaXYoZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKmN1cl9xZG1hLCAqcWRtYTtcbiBcdHN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBkZXYtXHUwMDNlZXRoO1xuLVx0aW50IHBwZV9pZDtcbiYjNDM7XHRpbnQgaSwgcHBlX2lkO1xuIFxuIFx0LyogUURNQTAgaXMgdXNlZCBmb3IgbGFuIHBvcnRzIHdoaWxlIFFETUExIGlzIHVzZWQgZm9yIFdBTiBwb3J0cyAqL1xuLVx0ZGV2LVx1MDAzZXFkbWEgPSBcdTAwMjZldGgtXHUwMDNlcWRtYVshYWlyb2hhX2lzX2xhbl9nZG1fZGV2KGRldildO1xuLVx0bmV0ZGV2LVx1MDAzZWlycSA9IGRldi1cdTAwM2VxZG1hLVx1MDAzZWlycV9iYW5rc1swXS5pcnE7XG4mIzQzO1x0cWRtYSA9IFx1MDAyNmV0aC1cdTAwM2VxZG1hWyFhaXJvaGFfaXNfbGFuX2dkbV9kZXYoZGV2KV07XG4mIzQzO1x0Y3VyX3FkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAoY3VyX3FkbWEpXG4mIzQzO1x0XHRuZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTtcbiYjNDM7XG4mIzQzO1x0cmN1X2Fzc2lnbl9wb2ludGVyKGRldi1cdTAwM2VxZG1hLCBxZG1hKTtcbiYjNDM7XHRuZXRkZXYtXHUwMDNlaXJxID0gcWRtYS1cdTAwM2VpcnFfYmFua3NbMF0uaXJxO1xuJiM0MztcdHN5bmNocm9uaXplX3JjdSgpO1xuIFxuIFx0cHBlX2lkID0gIWFpcm9oYV9pc19sYW5fZ2RtX2RldihkZXYpIFx1MDAyNlx1MDAyNiBhaXJvaGFfcHBlX2lzX2VuYWJsZWQoZXRoLCAxKTtcbiBcdGFpcm9oYV9wcGVfc2V0X2NwdV9wb3J0KGRldiwgcHBlX2lkLCBhaXJvaGFfZ2V0X2ZlX3BvcnQoZGV2KSk7XG4mIzQzO1xuJiM0MztcdC8qIFNlZWQgcW9zX3N0YXRzIGJhc2VsaW5lcyB3aXRoIHRoZSBuZXcgUURNQSBibG9jayYjMzk7cyBjdXJyZW50XG4mIzQzO1x0ICogY291bnRlciB2YWx1ZXMgdG8gYXZvaWQgYSBzcHVyaW91cyBzcGlrZSBvbiB0aGUgZmlyc3Qgc3RhdHNcbiYjNDM7XHQgKiBxdWVyeSBhZnRlciBpbml0IG9yIG1pZ3JhdGlvbi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGRldi1cdTAwM2Vxb3Nfc3RhdHMpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0ZGV2LVx1MDAzZXFvc19zdGF0c1tpXS5jcHVfdHhfcGFja2V0cyA9XG4mIzQzO1x0XHRcdGFpcm9oYV9xZG1hX3JyKHFkbWEsIFJFR19DTlRSX1ZBTChpIFx1MDAzY1x1MDAzYyAxKSk7XG4mIzQzO1x0XHRkZXYtXHUwMDNlcW9zX3N0YXRzW2ldLmZ3ZF90eF9wYWNrZXRzID1cbiYjNDM7XHRcdFx0YWlyb2hhX3FkbWFfcnIocWRtYSwgUkVHX0NOVFJfVkFMKChpIFx1MDAzY1x1MDAzYyAxKSAmIzQzOyAxKSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoY3VyX3FkbWEpXG4mIzQzO1x0XHRuZXRpZl90eF93YWtlX2FsbF9xdWV1ZXMobmV0ZGV2KTtcbiB9XG4gXG4gc3RhdGljIGludCBhaXJvaGFfZGV2X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbkBAIC0yMDc4LDcgJiM0MzsyMTUzLDcgQEAgc3RhdGljIGludCBhaXJvaGFfZGV2X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdFx0ZmFsbHRocm91Z2g7XG4gXHRjYXNlIEFJUk9IQV9HRE0yX0lEWDpcbiBcdFx0LyogR0RNMiBpcyBhbHdheXMgdXNlZCBhcyB3YW4gKi9cbi1cdFx0ZGV2LVx1MDAzZWZsYWdzIHw9IEFJUk9IQV9QUklWX0ZfV0FOO1xuJiM0MztcdFx0c2V0X2JpdChBSVJPSEFfREVWX0ZfV0FOLCBcdTAwMjZkZXYtXHUwMDNlZmxhZ3MpO1xuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdGJyZWFrO1xuQEAgLTIyMTcsOSAmIzQzOzIyOTIsOSBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIHtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cdTAwM2VxZG1hO1xuIFx0dTMyIG5yX2ZyYWdzLCB0YWcsIG1zZzAsIG1zZzEsIGxlbjtcbiBcdHN0cnVjdCBhaXJvaGFfcXVldWVfZW50cnkgKmU7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xuIFx0c3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxO1xuIFx0c3RydWN0IGFpcm9oYV9xdWV1ZSAqcTtcbiBcdExJU1RfSEVBRCh0eF9saXN0KTtcbkBAIC0yMjI4LDYgJiM0MzsyMzAzLDggQEAgc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0dTE2IGluZGV4O1xuIFx0dTggZnBvcnQ7XG4gXG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdHFkbWEgPSByY3VfZGVyZWZlcmVuY2UoZGV2LVx1MDAzZXFkbWEpO1xuIFx0cWlkID0gYWlyb2hhX3FkbWFfZ2V0X3R4cShxZG1hLCBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKSk7XG4gXHR0YWcgPSBhaXJvaGFfZ2V0X2RzYV90YWcoc2tiLCBuZXRkZXYpO1xuIFxuQEAgLTIyNzcsNiAmIzQzOzIzNTQsOCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdG5ldGlmX3R4X3N0b3BfcXVldWUodHhxKTtcbiBcdFx0cS1cdTAwM2V0eHFfc3RvcHBlZCA9IHRydWU7XG4gXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnEtXHUwMDNlbG9jayk7XG4mIzQzO1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4gXHRcdHJldHVybiBORVRERVZfVFhfQlVTWTtcbiBcdH1cbiBcbkBAIC0yMzQyLDYgJiM0MzsyNDIxLDcgQEAgc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0RklFTERfUFJFUChUWF9SSU5HX0NQVV9JRFhfTUFTSywgaW5kZXgpKTtcbiBcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnEtXHUwMDNlbG9jayk7XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRyZXR1cm4gTkVUREVWX1RYX09LO1xuIFxuQEAgLTIzNTQsNiAmIzQzOzI0MzQsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gZXJyb3I6XG4gXHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuIFx0bmV0ZGV2LVx1MDAzZXN0YXRzLnR4X2Ryb3BwZWQmIzQzOyYjNDM7O1xuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0cmV0dXJuIE5FVERFVl9UWF9PSztcbiB9XG5AQCAtMjQzMywxNyAmIzQzOzI1MTQsMTkgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9zZXRfY2hhbl90eF9zY2hlZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRcdFx0XHQgY29uc3QgdTE2ICp3ZWlnaHRzLCB1OCBuX3dlaWdodHMpXG4ge1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcbiBcdGludCBpO1xuIFxuJiM0MztcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQUlST0hBX05VTV9RT1NfUVVFVUVTOyBpJiM0MzsmIzQzOylcbi1cdFx0YWlyb2hhX3FkbWFfY2xlYXIoZGV2LVx1MDAzZXFkbWEsIFJFR19RVUVVRV9DTE9TRV9DRkcoY2hhbm5lbCksXG4mIzQzO1x0XHRhaXJvaGFfcWRtYV9jbGVhcihxZG1hLCBSRUdfUVVFVUVfQ0xPU0VfQ0ZHKGNoYW5uZWwpLFxuIFx0XHRcdFx0ICBUWFFfRElTQUJMRV9DSEFOX1FVRVVFX01BU0soY2hhbm5lbCwgaSkpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgbl93ZWlnaHRzOyBpJiM0MzsmIzQzOykge1xuIFx0XHR1MzIgc3RhdHVzO1xuIFx0XHRpbnQgZXJyO1xuIFxuLVx0XHRhaXJvaGFfcWRtYV93cihkZXYtXHUwMDNlcWRtYSwgUkVHX1RYV1JSX1dFSUdIVF9DRkcsXG4mIzQzO1x0XHRhaXJvaGFfcWRtYV93cihxZG1hLCBSRUdfVFhXUlJfV0VJR0hUX0NGRyxcbiBcdFx0XHQgICAgICAgVFdSUl9SV19DTURfTUFTSyB8XG4gXHRcdFx0ICAgICAgIEZJRUxEX1BSRVAoVFdSUl9DSEFOX0lEWF9NQVNLLCBjaGFubmVsKSB8XG4gXHRcdFx0ICAgICAgIEZJRUxEX1BSRVAoVFdSUl9RVUVVRV9JRFhfTUFTSywgaSkgfFxuQEAgLTI0NTEsMTIgJiM0MzsyNTM0LDEyIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfc2V0X2NoYW5fdHhfc2NoZWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0ZXJyID0gcmVhZF9wb2xsX3RpbWVvdXQoYWlyb2hhX3FkbWFfcnIsIHN0YXR1cyxcbiBcdFx0XHRcdFx0c3RhdHVzIFx1MDAyNiBUV1JSX1JXX0NNRF9ET05FLFxuIFx0XHRcdFx0XHRVU0VDX1BFUl9NU0VDLCAxMCAqIFVTRUNfUEVSX01TRUMsXG4tXHRcdFx0XHRcdHRydWUsIGRldi1cdTAwM2VxZG1hLCBSRUdfVFhXUlJfV0VJR0hUX0NGRyk7XG4mIzQzO1x0XHRcdFx0XHR0cnVlLCBxZG1hLCBSRUdfVFhXUlJfV0VJR0hUX0NGRyk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdH1cbiBcbi1cdGFpcm9oYV9xZG1hX3JtdyhkZXYtXHUwMDNlcWRtYSwgUkVHX0NIQU5fUU9TX01PREUoY2hhbm5lbCBcdTAwM2VcdTAwM2UgMyksXG4mIzQzO1x0YWlyb2hhX3FkbWFfcm13KHFkbWEsIFJFR19DSEFOX1FPU19NT0RFKGNoYW5uZWwgXHUwMDNlXHUwMDNlIDMpLFxuIFx0XHRcdENIQU5fUU9TX01PREVfTUFTSyhjaGFubmVsKSxcbiBcdFx0XHRfX2ZpZWxkX3ByZXAoQ0hBTl9RT1NfTU9ERV9NQVNLKGNoYW5uZWwpLCBtb2RlKSk7XG4gXG5AQCAtMjUyMCwxNyAmIzQzOzI2MDMsMjIgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9nZXRfdHhfZXRzX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBjaGFubmVsLFxuIFx0XHRcdFx0XHRzdHJ1Y3QgdGNfZXRzX3FvcHRfb2ZmbG9hZCAqb3B0KVxuIHtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cdTAwM2VxZG1hO1xuJiM0MztcdHUzMiBjcHVfdHhfcGFja2V0cywgZndkX3R4X3BhY2tldHM7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xuJiM0MztcdHU2NCB0eF9wYWNrZXRzO1xuIFxuLVx0dTY0IGNwdV90eF9wYWNrZXRzID0gYWlyb2hhX3FkbWFfcnIocWRtYSwgUkVHX0NOVFJfVkFMKGNoYW5uZWwgXHUwMDNjXHUwMDNjIDEpKTtcbi1cdHU2NCBmd2RfdHhfcGFja2V0cyA9IGFpcm9oYV9xZG1hX3JyKHFkbWEsXG4tXHRcdFx0XHRcdCAgICBSRUdfQ05UUl9WQUwoKGNoYW5uZWwgXHUwMDNjXHUwMDNjIDEpICYjNDM7IDEpKTtcbi1cdHU2NCB0eF9wYWNrZXRzID0gKGNwdV90eF9wYWNrZXRzIC0gZGV2LVx1MDAzZWNwdV90eF9wYWNrZXRzKSAmIzQzO1xuLVx0XHRcdCAoZndkX3R4X3BhY2tldHMgLSBkZXYtXHUwMDNlZndkX3R4X3BhY2tldHMpO1xuJiM0MztcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuJiM0MztcdGNwdV90eF9wYWNrZXRzID0gYWlyb2hhX3FkbWFfcnIocWRtYSwgUkVHX0NOVFJfVkFMKGNoYW5uZWwgXHUwMDNjXHUwMDNjIDEpKTtcbiYjNDM7XHRmd2RfdHhfcGFja2V0cyA9IGFpcm9oYV9xZG1hX3JyKHFkbWEsXG4mIzQzO1x0XHRcdFx0XHRSRUdfQ05UUl9WQUwoKGNoYW5uZWwgXHUwMDNjXHUwMDNjIDEpICYjNDM7IDEpKTtcbiYjNDM7XHR0eF9wYWNrZXRzID0gKHUzMikoY3B1X3R4X3BhY2tldHMgLVxuJiM0MztcdFx0XHQgICBkZXYtXHUwMDNlcW9zX3N0YXRzW2NoYW5uZWxdLmNwdV90eF9wYWNrZXRzKTtcbiYjNDM7XHR0eF9wYWNrZXRzICYjNDM7PSAodTMyKShmd2RfdHhfcGFja2V0cyAtXG4mIzQzO1x0XHRcdCAgICBkZXYtXHUwMDNlcW9zX3N0YXRzW2NoYW5uZWxdLmZ3ZF90eF9wYWNrZXRzKTtcbiBcbiBcdF9ic3RhdHNfdXBkYXRlKG9wdC1cdTAwM2VzdGF0cy5ic3RhdHMsIDAsIHR4X3BhY2tldHMpO1xuLVx0ZGV2LVx1MDAzZWNwdV90eF9wYWNrZXRzID0gY3B1X3R4X3BhY2tldHM7XG4tXHRkZXYtXHUwMDNlZndkX3R4X3BhY2tldHMgPSBmd2RfdHhfcGFja2V0cztcbiYjNDM7XHRkZXYtXHUwMDNlcW9zX3N0YXRzW2NoYW5uZWxdLmNwdV90eF9wYWNrZXRzID0gY3B1X3R4X3BhY2tldHM7XG4mIzQzO1x0ZGV2LVx1MDAzZXFvc19zdGF0c1tjaGFubmVsXS5md2RfdHhfcGFja2V0cyA9IGZ3ZF90eF9wYWNrZXRzO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTI3ODUsMTYgJiM0MzsyODczLDE4IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfc2V0X3R4X3JhdGVfbGltaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0XHRcdFx0IHUzMiBidWNrZXRfc2l6ZSlcbiB7XG4gXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xuIFx0aW50IGksIGVycjtcbiBcbiYjNDM7XHRxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjPSBUUlRDTV9QRUFLX01PREU7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdGVyciA9IGFpcm9oYV9xZG1hX3NldF90cnRjbV9jb25maWcoZGV2LVx1MDAzZXFkbWEsIGNoYW5uZWwsXG4mIzQzO1x0XHRlcnIgPSBhaXJvaGFfcWRtYV9zZXRfdHJ0Y21fY29uZmlnKHFkbWEsIGNoYW5uZWwsXG4gXHRcdFx0XHRcdFx0ICAgUkVHX0VHUkVTU19UUlRDTV9DRkcsIGksXG4gXHRcdFx0XHRcdFx0ICAgISFyYXRlLCBUUlRDTV9NRVRFUl9NT0RFKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0XHRlcnIgPSBhaXJvaGFfcWRtYV9zZXRfdHJ0Y21fdG9rZW5fYnVja2V0KGRldi1cdTAwM2VxZG1hLCBjaGFubmVsLFxuJiM0MztcdFx0ZXJyID0gYWlyb2hhX3FkbWFfc2V0X3RydGNtX3Rva2VuX2J1Y2tldChxZG1hLCBjaGFubmVsLFxuIFx0XHRcdFx0XHRcdFx0IFJFR19FR1JFU1NfVFJUQ01fQ0ZHLFxuIFx0XHRcdFx0XHRcdFx0IGksIHJhdGUsIGJ1Y2tldF9zaXplKTtcbiBcdFx0aWYgKGVycilcbkBAIC0yODMwLDExICYjNDM7MjkyMCwxMiBAQCBzdGF0aWMgaW50IGFpcm9oYV90Y19odGJfYWxsb2NfbGVhZl9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0dTMyIGNoYW5uZWwgPSBUQ19IX01JTihvcHQtXHUwMDNlY2xhc3NpZCkgJSBBSVJPSEFfTlVNX1FPU19DSEFOTkVMUztcbiBcdGludCBlcnIsIG51bV90eF9xdWV1ZXMgPSBBSVJPSEFfTlVNX1RYX1JJTkcgJiM0MzsgY2hhbm5lbCAmIzQzOyAxO1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuLVx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LVx1MDAzZXFkbWE7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xuIFxuIFx0LyogSGVyZSB3ZSBuZWVkIHRvIGNoZWNrIHRoZSByZXF1ZXN0ZWQgUURNQSBjaGFubmVsIGlzIG5vdCBhbHJlYWR5XG4gXHQgKiBpbiB1c2UgYnkgYW5vdGhlciBuZXRfZGV2aWNlIHJ1bm5pbmcgb24gdGhlIHNhbWUgUURNQSBibG9jay5cbiBcdCAqL1xuJiM0MztcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuIFx0aWYgKHRlc3RfYW5kX3NldF9iaXQoY2hhbm5lbCwgcWRtYS1cdTAwM2Vxb3NfY2hhbm5lbF9tYXApKSB7XG4gXHRcdE5MX1NFVF9FUlJfTVNHX01PRChvcHQtXHUwMDNlZXh0YWNrLFxuIFx0XHRcdFx0ICAgXCYjMzQ7cWRtYSBxb3MgY2hhbm5lbCBhbHJlYWR5IGluIHVzZVwmIzM0Oyk7XG5AQCAtMjg3MCw3ICYjNDM7Mjk2MSw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfc2V0X3J4X21ldGVyKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2LFxuIFx0XHRcdFx0ICAgIHUzMiByYXRlLCB1MzIgYnVja2V0X3NpemUsXG4gXHRcdFx0XHQgICAgZW51bSB0cnRjbV91bml0X3R5cGUgdW5pdF90eXBlKVxuIHtcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cdTAwM2VxZG1hO1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XG4gXHRpbnQgaTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUocWRtYS1cdTAwM2VxX3J4KTsgaSYjNDM7JiM0MzspIHtcbkBAIC0zMDQ1LDEwICYjNDM7MzEzNiwxMSBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfdGNfcmVtb3ZlX2h0Yl9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgcXVldWUpXG4ge1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIFx0aW50IG51bV90eF9xdWV1ZXMgPSBBSVJPSEFfTlVNX1RYX1JJTkc7XG4tXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtXHUwMDNlcWRtYTtcbiYjNDM7XHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7XG4gXG4gXHRhaXJvaGFfcWRtYV9zZXRfdHhfcmF0ZV9saW1pdChuZXRkZXYsIHF1ZXVlLCAwLCAwKTtcbiBcbiYjNDM7XHRxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcbiBcdGNsZWFyX2JpdChxdWV1ZSwgcWRtYS1cdTAwM2Vxb3NfY2hhbm5lbF9tYXApO1xuIFx0Y2xlYXJfYml0KHF1ZXVlLCBkZXYtXHUwMDNlcW9zX3NxX2JtYXApO1xuIFxuQEAgLTMwNzQsNiAmIzQzOzMxNjYsOTggQEAgc3RhdGljIGludCBhaXJvaGFfdGNfaHRiX2RlbGV0ZV9sZWFmX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGFpcm9oYV9kaXNhYmxlX3Fvc19mb3JfZ2RtMzQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZGV2LVx1MDAzZXBvcnQ7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKHBvcnQtXHUwMDNlaWQgIT0gQUlST0hBX0dETTNfSURYIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBwb3J0LVx1MDAzZWlkICE9IEFJUk9IQV9HRE00X0lEWClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gYWlyb2hhX2Rpc2FibGVfZ2RtMl9sb29wYmFjayhkZXYpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRuZXRkZXZfd2FybihuZXRkZXYsXG4mIzQzO1x0XHRcdCAgICBcJiMzNDtmYWlsZWQgZGlzYWJsaW5nIEdETTIgbG9vcGJhY2s6ICVkXFxuXCYjMzQ7LCBlcnIpO1xuJiM0MztcbiYjNDM7XHRjbGVhcl9iaXQoQUlST0hBX0RFVl9GX1dBTiwgXHUwMDI2ZGV2LVx1MDAzZWZsYWdzKTtcbiYjNDM7XHRhaXJvaGFfZGV2X3NldF9xZG1hKGRldik7XG4mIzQzO1xuJiM0MztcdGFpcm9oYV9zZXRfbWFjYWRkcihkZXYsIG5ldGRldi1cdTAwM2VkZXZfYWRkcik7XG4mIzQzO1x0YWlyb2hhX3BwZV9zZXRfeG1pdF9mcmFtZV9zaXplKGRldik7XG4mIzQzO1xuJiM0MztcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXG4mIzQzO1x0XHRhaXJvaGFfc2V0X2dkbV9wb3J0X2Z3ZF9jZmcoZGV2LVx1MDAzZWV0aCxcbiYjNDM7XHRcdFx0XHRcdCAgICBSRUdfR0RNX0ZXRF9DRkcocG9ydC1cdTAwM2VpZCksXG4mIzQzO1x0XHRcdFx0XHQgICAgRkVfUFNFX1BPUlRfUFBFMSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWlyb2hhX2VuYWJsZV9xb3NfZm9yX2dkbTM0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqd2FuX2RldiwgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGRldi1cdTAwM2Vwb3J0O1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBkZXYtXHUwMDNlZXRoO1xuJiM0MztcdGludCBlcnIgPSAtRUJVU1k7XG4mIzQzO1xuJiM0MztcdGlmIChwb3J0LVx1MDAzZWlkICE9IEFJUk9IQV9HRE0zX0lEWCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgcG9ydC1cdTAwM2VpZCAhPSBBSVJPSEFfR0RNNF9JRFgpIHtcbiYjNDM7XHRcdC8qIEhXIFFvUyBpcyBhbHdheXMgc3VwcG9ydGVkIGJ5IEdETTEgYW5kIEdETTIgKi9cbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFhaXJvaGFfaXNfbGFuX2dkbV9kZXYoZGV2KSkgLyogQWxyZWFkeSBlbmFibGVkICovXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZmbG93X29mZmxvYWRfbXV0ZXgpO1xuJiM0MztcbiYjNDM7XHR3YW5fZGV2ID0gYWlyb2hhX2dldF93YW5fZ2RtX2RldihldGgpO1xuJiM0MztcdGlmICh3YW5fZGV2KSB7XG4mIzQzO1x0XHRpZiAodGVzdF9iaXQoQUlST0hBX0RFVl9GX1RYX1FPUywgXHUwMDI2d2FuX2Rldi1cdTAwM2VmbGFncykgfHxcbiYjNDM7XHRcdCAgICB3YW5fZGV2LVx1MDAzZXBvcnQtXHUwMDNlaWQgPT0gQUlST0hBX0dETTJfSURYKSB7XG4mIzQzO1x0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4mIzQzO1x0XHRcdFx0XHQgICBcJiMzNDtRb1MgY29uZmlndXJlZCBmb3IgV0FOIGRldmljZVwmIzM0Oyk7XG4mIzQzO1x0XHRcdGdvdG8gZXJyb3JfdW5sb2NrO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0YWlyb2hhX2Rpc2FibGVfcW9zX2Zvcl9nZG0zNChuZXRkZXZfZnJvbV9wcml2KHdhbl9kZXYpKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNldF9iaXQoQUlST0hBX0RFVl9GX1dBTiwgXHUwMDI2ZGV2LVx1MDAzZWZsYWdzKTtcbiYjNDM7XHRhaXJvaGFfZGV2X3NldF9xZG1hKGRldik7XG4mIzQzO1x0ZXJyID0gYWlyb2hhX2VuYWJsZV9nZG0yX2xvb3BiYWNrKGRldik7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gZXJyb3JfZGlzYWJsZV93YW47XG4mIzQzO1xuJiM0MztcdGVyciA9IGFpcm9oYV9zZXRfbWFjYWRkcihkZXYsIG5ldGRldi1cdTAwM2VkZXZfYWRkcik7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gZXJyb3JfZGlzYWJsZV9sb29wYmFjaztcbiYjNDM7XG4mIzQzO1x0YWlyb2hhX2Rldl9zZXRfeG1pdF9mcmFtZV9zaXplKG5ldGRldik7XG4mIzQzO1x0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkge1xuJiM0MztcdFx0dTMyIHBzZV9wb3J0O1xuJiM0MztcbiYjNDM7XHRcdHBzZV9wb3J0ID0gYWlyb2hhX3BwZV9pc19lbmFibGVkKGV0aCwgMSkgPyBGRV9QU0VfUE9SVF9QUEUyXG4mIzQzO1x0XHRcdFx0XHRcdFx0IDogRkVfUFNFX1BPUlRfUFBFMTtcbiYjNDM7XHRcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhldGgsIFJFR19HRE1fRldEX0NGRyhwb3J0LVx1MDAzZWlkKSxcbiYjNDM7XHRcdFx0XHRcdCAgICBwc2VfcG9ydCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2Zmxvd19vZmZsb2FkX211dGV4KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztlcnJvcl9kaXNhYmxlX2xvb3BiYWNrOlxuJiM0MztcdGFpcm9oYV9kaXNhYmxlX2dkbTJfbG9vcGJhY2soZGV2KTtcbiYjNDM7ZXJyb3JfZGlzYWJsZV93YW46XG4mIzQzO1x0Y2xlYXJfYml0KEFJUk9IQV9ERVZfRl9XQU4sIFx1MDAyNmRldi1cdTAwM2VmbGFncyk7XG4mIzQzO1x0YWlyb2hhX2Rldl9zZXRfcWRtYShkZXYpO1xuJiM0MztlcnJvcl91bmxvY2s6XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmZsb3dfb2ZmbG9hZF9tdXRleCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBhaXJvaGFfdGNfaHRiX2Rlc3Ryb3koc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB7XG4gXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG5AQCAtMzA4Miw2ICYjNDM7MzI2Niw4IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3RjX2h0Yl9kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRmb3JfZWFjaF9zZXRfYml0KHEsIGRldi1cdTAwM2Vxb3Nfc3FfYm1hcCwgQUlST0hBX05VTV9RT1NfQ0hBTk5FTFMpXG4gXHRcdGFpcm9oYV90Y19yZW1vdmVfaHRiX3F1ZXVlKG5ldGRldiwgcSk7XG4gXG4mIzQzO1x0Y2xlYXJfYml0KEFJUk9IQV9ERVZfRl9UWF9RT1MsIFx1MDAyNmRldi1cdTAwM2VmbGFncyk7XG4mIzQzO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTMxMDEsMjQgJiM0MzszMjg3LDMzIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3RjX2dldF9odGJfZ2V0X2xlYWZfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IGFpcm9oYV90Y19zZXR1cF9xZGlzY19odGIoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiYjNDM7c3RhdGljIGludCBhaXJvaGFfdGNfc2V0dXBfcWRpc2NfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCB0Y19odGJfcW9wdF9vZmZsb2FkICpvcHQpXG4ge1xuIFx0c3dpdGNoIChvcHQtXHUwMDNlY29tbWFuZCkge1xuLVx0Y2FzZSBUQ19IVEJfQ1JFQVRFOlxuJiM0MztcdGNhc2UgVENfSFRCX0NSRUFURToge1xuJiM0MztcdFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuJiM0MztcdFx0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0XHRlcnIgPSBhaXJvaGFfZW5hYmxlX3Fvc19mb3JfZ2RtMzQobmV0ZGV2LCBvcHQtXHUwMDNlZXh0YWNrKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdFx0c2V0X2JpdChBSVJPSEFfREVWX0ZfVFhfUU9TLCBcdTAwMjZkZXYtXHUwMDNlZmxhZ3MpO1xuIFx0XHRicmVhaztcbiYjNDM7XHR9XG4gXHRjYXNlIFRDX0hUQl9ERVNUUk9ZOlxuLVx0XHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9kZXN0cm95KGRldik7XG4mIzQzO1x0XHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9kZXN0cm95KG5ldGRldik7XG4gXHRjYXNlIFRDX0hUQl9OT0RFX01PRElGWTpcbi1cdFx0cmV0dXJuIGFpcm9oYV90Y19odGJfbW9kaWZ5X3F1ZXVlKGRldiwgb3B0KTtcbiYjNDM7XHRcdHJldHVybiBhaXJvaGFfdGNfaHRiX21vZGlmeV9xdWV1ZShuZXRkZXYsIG9wdCk7XG4gXHRjYXNlIFRDX0hUQl9MRUFGX0FMTE9DX1FVRVVFOlxuLVx0XHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9hbGxvY19sZWFmX3F1ZXVlKGRldiwgb3B0KTtcbiYjNDM7XHRcdHJldHVybiBhaXJvaGFfdGNfaHRiX2FsbG9jX2xlYWZfcXVldWUobmV0ZGV2LCBvcHQpO1xuIFx0Y2FzZSBUQ19IVEJfTEVBRl9ERUw6XG4gXHRjYXNlIFRDX0hUQl9MRUFGX0RFTF9MQVNUOlxuIFx0Y2FzZSBUQ19IVEJfTEVBRl9ERUxfTEFTVF9GT1JDRTpcbi1cdFx0cmV0dXJuIGFpcm9oYV90Y19odGJfZGVsZXRlX2xlYWZfcXVldWUoZGV2LCBvcHQpO1xuJiM0MztcdFx0cmV0dXJuIGFpcm9oYV90Y19odGJfZGVsZXRlX2xlYWZfcXVldWUobmV0ZGV2LCBvcHQpO1xuIFx0Y2FzZSBUQ19IVEJfTEVBRl9RVUVSWV9RVUVVRTpcbi1cdFx0cmV0dXJuIGFpcm9oYV90Y19nZXRfaHRiX2dldF9sZWFmX3F1ZXVlKGRldiwgb3B0KTtcbiYjNDM7XHRcdHJldHVybiBhaXJvaGFfdGNfZ2V0X2h0Yl9nZXRfbGVhZl9xdWV1ZShuZXRkZXYsIG9wdCk7XG4gXHRkZWZhdWx0OlxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXHR9XG5AQCAtMzIyMCw4ICYjNDM7MzQxNSw4IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2FsbG9jX2dkbV9kZXZpY2Uoc3RydWN0IGFpcm9oYV9ldGggKmV0aCxcbiB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXY7XG4mIzQzO1x0aW50IGVyciwgaTtcbiBcdHU4IGluZGV4O1xuLVx0aW50IGVycjtcbiBcbiBcdG5ldGRldiA9IGRldm1fYWxsb2NfZXRoZXJkZXZfbXFzKGV0aC1cdTAwM2VkZXYsIHNpemVvZigqZGV2KSxcbiBcdFx0XHRcdFx0IEFJUk9IQV9OVU1fTkVUREVWX1RYX1JJTkdTLFxuQEAgLTMyNzIsNiAmIzQzOzM0NjcsOCBAQCBzdGF0aWMgaW50IGFpcm9oYV9hbGxvY19nZG1fZGV2aWNlKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsXG4gXHRuZXRkZXYtXHUwMDNlZGV2Lm9mX25vZGUgPSBvZl9ub2RlX2dldChucCk7XG4gXHRkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIFx0dTY0X3N0YXRzX2luaXQoXHUwMDI2ZGV2LVx1MDAzZXN0YXRzLnN5bmNwKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGRldi1cdTAwM2V0eHFfbG9jayk7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2ZGV2LVx1MDAzZXR4cV9sb2NrW2ldKTtcbiBcdGRldi1cdTAwM2Vwb3J0ID0gcG9ydDtcbiBcdGRldi1cdTAwM2VldGggPSBldGg7XG4gXHRkZXYtXHUwMDNlbmJxID0gbmJxO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oXG5pbmRleCBmZTkzNGY5ZmZlOGExMS4uZmE5YThlZGNlMjJmZmQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oXG5AQCAtNTcwLDI0ICYjNDM7NTcwLDMxIEBAIHN0cnVjdCBhaXJvaGFfcWRtYSB7XG4gXHRERUNMQVJFX0JJVE1BUChxb3NfY2hhbm5lbF9tYXAsIEFJUk9IQV9OVU1fUU9TX0NIQU5ORUxTKTtcbiB9O1xuIFxuLWVudW0gYWlyb2hhX3ByaXZfZmxhZ3Mge1xuLVx0QUlST0hBX1BSSVZfRl9XQU4gPSBCSVQoMCksXG4mIzQzO2VudW0gYWlyb2hhX2Rldl9mbGFncyB7XG4mIzQzO1x0QUlST0hBX0RFVl9GX1dBTixcbiYjNDM7XHRBSVJPSEFfREVWX0ZfVFhfUU9TLFxuIH07XG4gXG4gc3RydWN0IGFpcm9oYV9nZG1fZGV2IHtcbiYjNDM7XHRzdHJ1Y3QgYWlyb2hhX3FkbWEgX19yY3UgKnFkbWE7XG4gXHRzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0O1xuLVx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xuIFx0c3RydWN0IGFpcm9oYV9ldGggKmV0aDtcbiBcbiBcdERFQ0xBUkVfQklUTUFQKHFvc19zcV9ibWFwLCBBSVJPSEFfTlVNX1FPU19DSEFOTkVMUyk7XG4tXHQvKiBxb3Mgc3RhdHMgY291bnRlcnMgKi9cbi1cdHU2NCBjcHVfdHhfcGFja2V0cztcbi1cdHU2NCBmd2RfdHhfcGFja2V0cztcbiYjNDM7XHRzdHJ1Y3Qge1xuJiM0MztcdFx0dTMyIGNwdV90eF9wYWNrZXRzO1xuJiM0MztcdFx0dTMyIGZ3ZF90eF9wYWNrZXRzO1xuJiM0MztcdH0gcW9zX3N0YXRzW0FJUk9IQV9OVU1fUU9TX0NIQU5ORUxTXTtcbiBcbi1cdHUzMiBmbGFncztcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0aW50IG5icTtcbiBcbiBcdHN0cnVjdCBhaXJvaGFfaHdfc3RhdHMgc3RhdHM7XG4mIzQzO1xuJiM0MztcdC8qIFNlcmlhbGl6ZSBuZXRkZXZfdHhfY29tcGxldGVkX3F1ZXVlKCkgY2FsbHMgcGVyIFRYIHF1ZXVlIGR1cmluZ1xuJiM0MztcdCAqIFFETUEgbWlncmF0aW9uLlxuJiM0MztcdCAqL1xuJiM0MztcdHNwaW5sb2NrX3QgdHhxX2xvY2tbQUlST0hBX05VTV9ORVRERVZfVFhfUklOR1NdO1xuIH07XG4gXG4gc3RydWN0IGFpcm9oYV9nZG1fcG9ydCB7XG5AQCAtNjk0LDcgJiM0Mzs3MDEsNyBAQCBzdGF0aWMgaW5saW5lIHUxNiBhaXJvaGFfcWRtYV9nZXRfdHhxKHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSwgdTE2IHFpZClcbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgYWlyb2hhX2lzX2xhbl9nZG1fZGV2KHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxuIHtcbi1cdHJldHVybiAhKGRldi1cdTAwM2VmbGFncyBcdTAwMjYgQUlST0hBX1BSSVZfRl9XQU4pO1xuJiM0MztcdHJldHVybiAhdGVzdF9iaXQoQUlST0hBX0RFVl9GX1dBTiwgXHUwMDI2ZGV2LVx1MDAzZWZsYWdzKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBib29sIGFpcm9oYV9pc183NTgxKHN0cnVjdCBhaXJvaGFfZXRoICpldGgpXG5AQCAtNzExLDYgJiM0Mzs3MTgsMTYgQEAgaW50IGFpcm9oYV9nZXRfZmVfcG9ydChzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldik7XG4gYm9vbCBhaXJvaGFfaXNfdmFsaWRfZ2RtX2RldihzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLFxuIFx0XHRcdCAgICAgc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpO1xuIFxuJiM0MztleHRlcm4gc3RydWN0IG11dGV4IGZsb3dfb2ZmbG9hZF9tdXRleDtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IGFpcm9oYV9xZG1hICpcbiYjNDM7YWlyb2hhX3FkbWFfZGVyZWYoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChkZXYtXHUwMDNlcWRtYSxcbiYjNDM7XHRcdFx0XHRcdCBsb2NrZGVwX3J0bmxfaXNfaGVsZCgpIHx8XG4mIzQzO1x0XHRcdFx0XHQgbG9ja2RlcF9pc19oZWxkKFx1MDAyNmZsb3dfb2ZmbG9hZF9tdXRleCkpO1xuJiM0Mzt9XG4mIzQzO1xuIHZvaWQgYWlyb2hhX3BwZV9zZXRfeG1pdF9mcmFtZV9zaXplKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KTtcbiB2b2lkIGFpcm9oYV9wcGVfc2V0X2NwdV9wb3J0KHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2LCB1OCBwcGVfaWQsIHU4IGZwb3J0KTtcbiBib29sIGFpcm9oYV9wcGVfaXNfZW5hYmxlZChzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLCBpbnQgaW5kZXgpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jXG5pbmRleCBlNGMzNjQ0ZGQ2ZWM3YS4uMzNkZGYwZDA3ODU1MzkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jXG5AQCAtMTUsNyAmIzQzOzE1LDEwIEBAXG4gI2luY2x1ZGUgXCYjMzQ7YWlyb2hhX3JlZ3MuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2Fpcm9oYV9ldGguaFwmIzM0O1xuIFxuLXN0YXRpYyBERUZJTkVfTVVURVgoZmxvd19vZmZsb2FkX211dGV4KTtcbiYjNDM7LyogU2VyaWFsaXplIGFpcm9oYV9nZG1fZGV2IGZsYWdzLCBRRE1BIHBvaW50ZXIgYW5kIFBQRSBDUFUgcG9ydFxuJiM0MzsgKiBjb25maWd1cmF0aW9uLlxuJiM0MzsgKi9cbiYjNDM7REVGSU5FX01VVEVYKGZsb3dfb2ZmbG9hZF9tdXRleCk7XG4gc3RhdGljIERFRklORV9TUElOTE9DSyhwcGVfbG9jayk7XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyBhaXJvaGFfZmxvd190YWJsZV9wYXJhbXMgPSB7XG5AQCAtODYsOCAmIzQzOzg5LDggQEAgc3RhdGljIHUzMiBhaXJvaGFfcHBlX2dldF90aW1lc3RhbXAoc3RydWN0IGFpcm9oYV9wcGUgKnBwZSlcbiBcbiB2b2lkIGFpcm9oYV9wcGVfc2V0X2NwdV9wb3J0KHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2LCB1OCBwcGVfaWQsIHU4IGZwb3J0KVxuIHtcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cdTAwM2VxZG1hO1xuLVx0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IHFkbWEtXHUwMDNlZXRoO1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IGRldi1cdTAwM2VldGg7XG4gXHR1OCBxZG1hX2lkID0gcWRtYSAtIFx1MDAyNmV0aC1cdTAwM2VxZG1hWzBdO1xuIFx0dTMyIGZlX2NwdV9wb3J0O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcmVncy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9yZWdzLmhcbmluZGV4IDZmZWQ2M2QwMTNiNDEyLi40NDJiNDhjOWI5OTFlZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcmVncy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaFxuQEAgLTM3NSw2ICYjNDM7Mzc1LDcgQEBcbiBcbiAjZGVmaW5lIFJFR19TUkNfUE9SVF9GQ19NQVA2XHRcdDB4MjI5OFxuICNkZWZpbmUgRkNfSURfT0ZfU1JDX1BPUlRfTUFTSyhfbilcdEdFTk1BU0soNCAmIzQzOyAoKF9uKSBcdTAwM2NcdTAwM2MgMyksICgoX24pIFx1MDAzY1x1MDAzYyAzKSlcbiYjNDM7I2RlZmluZSBGQ19NQVA2X0RFRl9WQUxVRVx0XHQweDFiMWExOTE4XG4gXG4gI2RlZmluZSBSRUdfV0FOX01UVTBcdFx0XHQweDIzMDBcbiAjZGVmaW5lIFdBTl9NVFUxX01BU0tcdFx0XHRHRU5NQVNLKDI5LCAxNilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxODo1MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFpcm9oYSBTb0MgR2lnYWJpdCBFdGhlcm5ldCBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYSkuIFRoaXMgaXMgYSBwbGF0Zm9ybSBkcml2ZXIgZm9yIHNwZWNpZmljIEFpcm9oYSBTb0NzIChlLmcuLCBlbjc1ODEsIGFuNzU4Mykgd2hpY2ggYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudHMuIEJlY2F1c2UgdGhlIGhhcmR3YXJlIGlzIG5vdCBwcmVzZW50IG9yIGVtdWxhdGVkLCB0aGUgZHJpdmVyIHdpbGwgbm90IHByb2JlIGFuZCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0Y2FiY2JhMzRkMDAzMGE3N2U3YTk1M2VmZWEwY2E1MzVjZmUzZDA5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBKdWwgMjYgMTg6NTM6MzggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYwppbmRleCA3OTQxOGU2ODJmNzFmMy4uZGJhN2M1MmMwODk2OTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYwpAQCAtOTM0LDcgJiM0Mzs5MzQsNyBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfcWRtYV93YWtlX25ldGRldl90eHFzKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEpCiAJCQlpZiAoIWRldikKIAkJCQljb250aW51ZTsKIAotCQkJaWYgKGRldi0mZ3Q7cWRtYSAhPSBxZG1hKQomIzQzOwkJCWlmIChyY3VfYWNjZXNzX3BvaW50ZXIoZGV2LSZndDtxZG1hKSAhPSBxZG1hKQogCQkJCWNvbnRpbnVlOwogCiAJCQluZXRkZXYgPSBuZXRkZXZfZnJvbV9wcml2KGRldik7CkBAIC0xMDM4LDEwICYjNDM7MTAzOCwxNiBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3R4X25hcGlfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCiAJCXEtJmd0O3F1ZXVlZC0tOwogCiAJCWlmIChza2IpIHsKJiM0MzsJCQlzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KHNrYi0mZ3Q7ZGV2KTsKJiM0MzsJCQl1MTYgcWlkeCA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpOwogCQkJc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxOwogCiAJCQl0eHEgPSBza2JfZ2V0X3R4X3F1ZXVlKHNrYi0mZ3Q7ZGV2LCBza2IpOwomIzQzOwomIzQzOwkJCXNwaW5fbG9ja19iaCgmYW1wO2Rldi0mZ3Q7dHhxX2xvY2tbcWlkeF0pOwogCQkJbmV0ZGV2X3R4X2NvbXBsZXRlZF9xdWV1ZSh0eHEsIDEsIHNrYi0mZ3Q7bGVuKTsKJiM0MzsJCQlzcGluX3VubG9ja19iaCgmYW1wO2Rldi0mZ3Q7dHhxX2xvY2tbcWlkeF0pOwomIzQzOwogCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJfQogCkBAIC0xOTA1LDggJiM0MzsxOTExLDggQEAgc3RhdGljIGludCBhaXJvaGFfZGV2X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGRldi0mZ3Q7cG9ydDsKLQlzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtJmd0O3FkbWE7CiAJdTMyIHBzZV9wb3J0ID0gRkVfUFNFX1BPUlRfUFBFMTsKJiM0MzsJc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hOwogCWludCBlcnI7CiAKIAluZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKG5ldGRldik7CkBAIC0xOTE0LDYgJiM0MzsxOTIwLDcgQEAgc3RhdGljIGludCBhaXJvaGFfZGV2X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCiYjNDM7CXFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpOwogCWlmIChuZXRkZXZfdXNlc19kc2EobmV0ZGV2KSkKIAkJYWlyb2hhX2ZlX3NldChxZG1hLSZndDtldGgsIFJFR19HRE1fSU5HUkVTU19DRkcocG9ydC0mZ3Q7aWQpLAogCQkJICAgICAgR0RNX1NUQUdfRU5fTUFTSyk7CkBAIC0xOTM3LDcgJiM0MzsxOTQ0LDYgQEAgc3RhdGljIGludCBhaXJvaGFfZGV2X3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGRldi0mZ3Q7cG9ydDsKLQlzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtJmd0O3FkbWE7CiAKIAluZXRpZl90eF9kaXNhYmxlKG5ldGRldik7CiAJYWlyb2hhX3NldF92aXBfZm9yX2dkbV9wb3J0KGRldiwgZmFsc2UpOwpAQCAtMTk0NSw3ICYjNDM7MTk1MSw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiAJaWYgKC0tcG9ydC0mZ3Q7dXNlcnMpCiAJCWFpcm9oYV9wcGVfc2V0X3htaXRfZnJhbWVfc2l6ZShkZXYpOwogCWVsc2UKLQkJYWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKHFkbWEtJmd0O2V0aCwKJiM0MzsJCWFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhkZXYtJmd0O2V0aCwKIAkJCQkJICAgIFJFR19HRE1fRldEX0NGRyhwb3J0LSZndDtpZCksCiAJCQkJCSAgICBGRV9QU0VfUE9SVF9EUk9QKTsKIAlyZXR1cm4gMDsKQEAgLTIwMjgsNiAmIzQzOzIwMzQsNTMgQEAgc3RhdGljIGludCBhaXJvaGFfZW5hYmxlX2dkbTJfbG9vcGJhY2soc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IGFpcm9oYV9kaXNhYmxlX2dkbTJfbG9vcGJhY2soc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZGV2LSZndDtwb3J0OwomIzQzOwlzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gZGV2LSZndDtldGg7CiYjNDM7CWludCBpLCBzcmNfcG9ydDsKJiM0MzsJdTMyIHBzZV9wb3J0OwomIzQzOwomIzQzOwlzcmNfcG9ydCA9IGV0aC0mZ3Q7c29jLSZndDtvcHMuZ2V0X3Nwb3J0KGRldi0mZ3Q7cG9ydCwgZGV2LSZndDtuYnEpOwomIzQzOwlpZiAoc3JjX3BvcnQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHNyY19wb3J0OwomIzQzOwomIzQzOwlhaXJvaGFfZmVfY2xlYXIoZXRoLAomIzQzOwkJCVJFR19TUF9ERlRfQ1BPUlQoc3JjX3BvcnQgJmd0OyZndDsgZmxzKFNQX0NQT1JUX0RGVF9NQVNLKSksCiYjNDM7CQkJU1BfQ1BPUlRfTUFTSyhzcmNfcG9ydCAmYW1wOyBTUF9DUE9SVF9ERlRfTUFTSykpOwomIzQzOwomIzQzOwlhaXJvaGFfZmVfc2V0KGV0aCwgUkVHX0dETV9GV0RfQ0ZHKEFJUk9IQV9HRE0yX0lEWCksCiYjNDM7CQkgICAgICBHRE1fU1RSSVBfQ1JDX01BU0spOwomIzQzOwlhaXJvaGFfc2V0X2dkbV9wb3J0X2Z3ZF9jZmcoZXRoLCBSRUdfR0RNX0ZXRF9DRkcoQUlST0hBX0dETTJfSURYKSwKJiM0MzsJCQkJICAgIEZFX1BTRV9QT1JUX0RST1ApOwomIzQzOwlhaXJvaGFfZmVfY2xlYXIoZXRoLCBSRUdfR0RNX0xQQktfQ0ZHKEFJUk9IQV9HRE0yX0lEWCksCiYjNDM7CQkJTFBCS19DSEFOX01BU0sgfCBMUEJLX01PREVfTUFTSyB8IExQQktfRU5fTUFTSyk7CiYjNDM7CXBzZV9wb3J0ID0gYWlyb2hhX3BwZV9pc19lbmFibGVkKGV0aCwgMSkgPyBGRV9QU0VfUE9SVF9QUEUyCiYjNDM7CQkJCQkJIDogRkVfUFNFX1BPUlRfUFBFMTsKJiM0MzsJYWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKGV0aCwgUkVHX0dETV9GV0RfQ0ZHKEFJUk9IQV9HRE0yX0lEWCksCiYjNDM7CQkJCSAgICBwc2VfcG9ydCk7CiYjNDM7CiYjNDM7CWFpcm9oYV9mZV9ybXcoZXRoLCBSRUdfRkVfV0FOX1BPUlQsIFdBTjBfTUFTSywKJiM0MzsJCSAgICAgIEZJRUxEX1BSRVAoV0FOMF9NQVNLLCBBSVJPSEFfR0RNMl9JRFgpKTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGV0aC0mZ3Q7c29jLSZndDtudW1fcHBlOyBpJiM0MzsmIzQzOykKJiM0MzsJCWFpcm9oYV9mZV9jbGVhcihldGgsIFJFR19QUEVfREZUX0NQT1JUKGksIEFJUk9IQV9HRE0yX0lEWCksCiYjNDM7CQkJCURGVF9DUE9SVF9NQVNLKEFJUk9IQV9HRE0yX0lEWCkpOwomIzQzOwomIzQzOwkvKiBFbmFibGUgVklQIGFuZCBJRkMgZm9yIEdETTIgKi8KJiM0MzsJYWlyb2hhX2ZlX3NldChldGgsIFJFR19GRV9WSVBfUE9SVF9FTiwgQklUKEFJUk9IQV9HRE0yX0lEWCkpOwomIzQzOwlhaXJvaGFfZmVfc2V0KGV0aCwgUkVHX0ZFX0lGQ19QT1JUX0VOLCBCSVQoQUlST0hBX0dETTJfSURYKSk7CiYjNDM7CiYjNDM7CWlmIChwb3J0LSZndDtpZCA9PSBBSVJPSEFfR0RNNF9JRFggJmFtcDsmYW1wOyBhaXJvaGFfaXNfNzU4MShldGgpKSB7CiYjNDM7CQl1MzIgbWFzayA9IEZDX0lEX09GX1NSQ19QT1JUX01BU0soZGV2LSZndDtuYnEpOwomIzQzOwomIzQzOwkJYWlyb2hhX2ZlX3JtdyhldGgsIFJFR19TUkNfUE9SVF9GQ19NQVA2LCBtYXNrLAomIzQzOwkJCSAgICAgIEZDX01BUDZfREVGX1ZBTFVFICZhbXA7IG1hc2spOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKgogYWlyb2hhX2dldF93YW5fZ2RtX2RldihzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoKQogewpAQCAtMjA1NCwxNSAmIzQzOzIxMDcsMzcgQEAgYWlyb2hhX2dldF93YW5fZ2RtX2RldihzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoKQogc3RhdGljIHZvaWQgYWlyb2hhX2Rldl9zZXRfcWRtYShzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihkZXYpOwomIzQzOwlzdHJ1Y3QgYWlyb2hhX3FkbWEgKmN1cl9xZG1hLCAqcWRtYTsKIAlzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gZGV2LSZndDtldGg7Ci0JaW50IHBwZV9pZDsKJiM0MzsJaW50IGksIHBwZV9pZDsKIAogCS8qIFFETUEwIGlzIHVzZWQgZm9yIGxhbiBwb3J0cyB3aGlsZSBRRE1BMSBpcyB1c2VkIGZvciBXQU4gcG9ydHMgKi8KLQlkZXYtJmd0O3FkbWEgPSAmYW1wO2V0aC0mZ3Q7cWRtYVshYWlyb2hhX2lzX2xhbl9nZG1fZGV2KGRldildOwotCW5ldGRldi0mZ3Q7aXJxID0gZGV2LSZndDtxZG1hLSZndDtpcnFfYmFua3NbMF0uaXJxOwomIzQzOwlxZG1hID0gJmFtcDtldGgtJmd0O3FkbWFbIWFpcm9oYV9pc19sYW5fZ2RtX2RldihkZXYpXTsKJiM0MzsJY3VyX3FkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpOwomIzQzOwomIzQzOwlpZiAoY3VyX3FkbWEpCiYjNDM7CQluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTsKJiM0MzsKJiM0MzsJcmN1X2Fzc2lnbl9wb2ludGVyKGRldi0mZ3Q7cWRtYSwgcWRtYSk7CiYjNDM7CW5ldGRldi0mZ3Q7aXJxID0gcWRtYS0mZ3Q7aXJxX2JhbmtzWzBdLmlycTsKJiM0MzsJc3luY2hyb25pemVfcmN1KCk7CiAKIAlwcGVfaWQgPSAhYWlyb2hhX2lzX2xhbl9nZG1fZGV2KGRldikgJmFtcDsmYW1wOyBhaXJvaGFfcHBlX2lzX2VuYWJsZWQoZXRoLCAxKTsKIAlhaXJvaGFfcHBlX3NldF9jcHVfcG9ydChkZXYsIHBwZV9pZCwgYWlyb2hhX2dldF9mZV9wb3J0KGRldikpOwomIzQzOwomIzQzOwkvKiBTZWVkIHFvc19zdGF0cyBiYXNlbGluZXMgd2l0aCB0aGUgbmV3IFFETUEgYmxvY2smIzM5O3MgY3VycmVudAomIzQzOwkgKiBjb3VudGVyIHZhbHVlcyB0byBhdm9pZCBhIHNwdXJpb3VzIHNwaWtlIG9uIHRoZSBmaXJzdCBzdGF0cwomIzQzOwkgKiBxdWVyeSBhZnRlciBpbml0IG9yIG1pZ3JhdGlvbi4KJiM0MzsJICovCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKGRldi0mZ3Q7cW9zX3N0YXRzKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWRldi0mZ3Q7cW9zX3N0YXRzW2ldLmNwdV90eF9wYWNrZXRzID0KJiM0MzsJCQlhaXJvaGFfcWRtYV9ycihxZG1hLCBSRUdfQ05UUl9WQUwoaSAmbHQ7Jmx0OyAxKSk7CiYjNDM7CQlkZXYtJmd0O3Fvc19zdGF0c1tpXS5md2RfdHhfcGFja2V0cyA9CiYjNDM7CQkJYWlyb2hhX3FkbWFfcnIocWRtYSwgUkVHX0NOVFJfVkFMKChpICZsdDsmbHQ7IDEpICYjNDM7IDEpKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoY3VyX3FkbWEpCiYjNDM7CQluZXRpZl90eF93YWtlX2FsbF9xdWV1ZXMobmV0ZGV2KTsKIH0KIAogc3RhdGljIGludCBhaXJvaGFfZGV2X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKQEAgLTIwNzgsNyAmIzQzOzIxNTMsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9kZXZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCQlmYWxsdGhyb3VnaDsKIAljYXNlIEFJUk9IQV9HRE0yX0lEWDoKIAkJLyogR0RNMiBpcyBhbHdheXMgdXNlZCBhcyB3YW4gKi8KLQkJZGV2LSZndDtmbGFncyB8PSBBSVJPSEFfUFJJVl9GX1dBTjsKJiM0MzsJCXNldF9iaXQoQUlST0hBX0RFVl9GX1dBTiwgJmFtcDtkZXYtJmd0O2ZsYWdzKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CkBAIC0yMjE3LDkgJiM0MzsyMjkyLDkgQEAgc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCXN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi0mZ3Q7cWRtYTsKIAl1MzIgbnJfZnJhZ3MsIHRhZywgbXNnMCwgbXNnMSwgbGVuOwogCXN0cnVjdCBhaXJvaGFfcXVldWVfZW50cnkgKmU7CiYjNDM7CXN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTsKIAlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHE7CiAJc3RydWN0IGFpcm9oYV9xdWV1ZSAqcTsKIAlMSVNUX0hFQUQodHhfbGlzdCk7CkBAIC0yMjI4LDYgJiM0MzsyMzAzLDggQEAgc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCXUxNiBpbmRleDsKIAl1OCBmcG9ydDsKIAomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CXFkbWEgPSByY3VfZGVyZWZlcmVuY2UoZGV2LSZndDtxZG1hKTsKIAlxaWQgPSBhaXJvaGFfcWRtYV9nZXRfdHhxKHFkbWEsIHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpKTsKIAl0YWcgPSBhaXJvaGFfZ2V0X2RzYV90YWcoc2tiLCBuZXRkZXYpOwogCkBAIC0yMjc3LDYgJiM0MzsyMzU0LDggQEAgc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQluZXRpZl90eF9zdG9wX3F1ZXVlKHR4cSk7CiAJCXEtJmd0O3R4cV9zdG9wcGVkID0gdHJ1ZTsKIAkJc3Bpbl91bmxvY2tfYmgoJmFtcDtxLSZndDtsb2NrKTsKJiM0MzsJCXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwogCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAJfQogCkBAIC0yMzQyLDYgJiM0MzsyNDIxLDcgQEAgc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCUZJRUxEX1BSRVAoVFhfUklOR19DUFVfSURYX01BU0ssIGluZGV4KSk7CiAKIAlzcGluX3VubG9ja19iaCgmYW1wO3EtJmd0O2xvY2spOwomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKIAogCXJldHVybiBORVRERVZfVFhfT0s7CiAKQEAgLTIzNTQsNiAmIzQzOzI0MzQsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiBlcnJvcjoKIAlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCW5ldGRldi0mZ3Q7c3RhdHMudHhfZHJvcHBlZCYjNDM7JiM0Mzs7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwogCiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KQEAgLTI0MzMsMTcgJiM0MzsyNTE0LDE5IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfc2V0X2NoYW5fdHhfc2NoZWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkJCQkJIGNvbnN0IHUxNiAqd2VpZ2h0cywgdTggbl93ZWlnaHRzKQogewogCXN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hOwogCWludCBpOwogCiYjNDM7CXFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpOwogCWZvciAoaSA9IDA7IGkgJmx0OyBBSVJPSEFfTlVNX1FPU19RVUVVRVM7IGkmIzQzOyYjNDM7KQotCQlhaXJvaGFfcWRtYV9jbGVhcihkZXYtJmd0O3FkbWEsIFJFR19RVUVVRV9DTE9TRV9DRkcoY2hhbm5lbCksCiYjNDM7CQlhaXJvaGFfcWRtYV9jbGVhcihxZG1hLCBSRUdfUVVFVUVfQ0xPU0VfQ0ZHKGNoYW5uZWwpLAogCQkJCSAgVFhRX0RJU0FCTEVfQ0hBTl9RVUVVRV9NQVNLKGNoYW5uZWwsIGkpKTsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBuX3dlaWdodHM7IGkmIzQzOyYjNDM7KSB7CiAJCXUzMiBzdGF0dXM7CiAJCWludCBlcnI7CiAKLQkJYWlyb2hhX3FkbWFfd3IoZGV2LSZndDtxZG1hLCBSRUdfVFhXUlJfV0VJR0hUX0NGRywKJiM0MzsJCWFpcm9oYV9xZG1hX3dyKHFkbWEsIFJFR19UWFdSUl9XRUlHSFRfQ0ZHLAogCQkJICAgICAgIFRXUlJfUldfQ01EX01BU0sgfAogCQkJICAgICAgIEZJRUxEX1BSRVAoVFdSUl9DSEFOX0lEWF9NQVNLLCBjaGFubmVsKSB8CiAJCQkgICAgICAgRklFTERfUFJFUChUV1JSX1FVRVVFX0lEWF9NQVNLLCBpKSB8CkBAIC0yNDUxLDEyICYjNDM7MjUzNCwxMiBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3NldF9jaGFuX3R4X3NjaGVkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJCWVyciA9IHJlYWRfcG9sbF90aW1lb3V0KGFpcm9oYV9xZG1hX3JyLCBzdGF0dXMsCiAJCQkJCXN0YXR1cyAmYW1wOyBUV1JSX1JXX0NNRF9ET05FLAogCQkJCQlVU0VDX1BFUl9NU0VDLCAxMCAqIFVTRUNfUEVSX01TRUMsCi0JCQkJCXRydWUsIGRldi0mZ3Q7cWRtYSwgUkVHX1RYV1JSX1dFSUdIVF9DRkcpOwomIzQzOwkJCQkJdHJ1ZSwgcWRtYSwgUkVHX1RYV1JSX1dFSUdIVF9DRkcpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKIAl9CiAKLQlhaXJvaGFfcWRtYV9ybXcoZGV2LSZndDtxZG1hLCBSRUdfQ0hBTl9RT1NfTU9ERShjaGFubmVsICZndDsmZ3Q7IDMpLAomIzQzOwlhaXJvaGFfcWRtYV9ybXcocWRtYSwgUkVHX0NIQU5fUU9TX01PREUoY2hhbm5lbCAmZ3Q7Jmd0OyAzKSwKIAkJCUNIQU5fUU9TX01PREVfTUFTSyhjaGFubmVsKSwKIAkJCV9fZmllbGRfcHJlcChDSEFOX1FPU19NT0RFX01BU0soY2hhbm5lbCksIG1vZGUpKTsKIApAQCAtMjUyMCwxNyAmIzQzOzI2MDMsMjIgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9nZXRfdHhfZXRzX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBjaGFubmVsLAogCQkJCQlzdHJ1Y3QgdGNfZXRzX3FvcHRfb2ZmbG9hZCAqb3B0KQogewogCXN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQlzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtJmd0O3FkbWE7CiYjNDM7CXUzMiBjcHVfdHhfcGFja2V0cywgZndkX3R4X3BhY2tldHM7CiYjNDM7CXN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTsKJiM0MzsJdTY0IHR4X3BhY2tldHM7CiAKLQl1NjQgY3B1X3R4X3BhY2tldHMgPSBhaXJvaGFfcWRtYV9ycihxZG1hLCBSRUdfQ05UUl9WQUwoY2hhbm5lbCAmbHQ7Jmx0OyAxKSk7Ci0JdTY0IGZ3ZF90eF9wYWNrZXRzID0gYWlyb2hhX3FkbWFfcnIocWRtYSwKLQkJCQkJICAgIFJFR19DTlRSX1ZBTCgoY2hhbm5lbCAmbHQ7Jmx0OyAxKSAmIzQzOyAxKSk7Ci0JdTY0IHR4X3BhY2tldHMgPSAoY3B1X3R4X3BhY2tldHMgLSBkZXYtJmd0O2NwdV90eF9wYWNrZXRzKSAmIzQzOwotCQkJIChmd2RfdHhfcGFja2V0cyAtIGRldi0mZ3Q7ZndkX3R4X3BhY2tldHMpOwomIzQzOwlxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTsKJiM0MzsJY3B1X3R4X3BhY2tldHMgPSBhaXJvaGFfcWRtYV9ycihxZG1hLCBSRUdfQ05UUl9WQUwoY2hhbm5lbCAmbHQ7Jmx0OyAxKSk7CiYjNDM7CWZ3ZF90eF9wYWNrZXRzID0gYWlyb2hhX3FkbWFfcnIocWRtYSwKJiM0MzsJCQkJCVJFR19DTlRSX1ZBTCgoY2hhbm5lbCAmbHQ7Jmx0OyAxKSAmIzQzOyAxKSk7CiYjNDM7CXR4X3BhY2tldHMgPSAodTMyKShjcHVfdHhfcGFja2V0cyAtCiYjNDM7CQkJICAgZGV2LSZndDtxb3Nfc3RhdHNbY2hhbm5lbF0uY3B1X3R4X3BhY2tldHMpOwomIzQzOwl0eF9wYWNrZXRzICYjNDM7PSAodTMyKShmd2RfdHhfcGFja2V0cyAtCiYjNDM7CQkJICAgIGRldi0mZ3Q7cW9zX3N0YXRzW2NoYW5uZWxdLmZ3ZF90eF9wYWNrZXRzKTsKIAogCV9ic3RhdHNfdXBkYXRlKG9wdC0mZ3Q7c3RhdHMuYnN0YXRzLCAwLCB0eF9wYWNrZXRzKTsKLQlkZXYtJmd0O2NwdV90eF9wYWNrZXRzID0gY3B1X3R4X3BhY2tldHM7Ci0JZGV2LSZndDtmd2RfdHhfcGFja2V0cyA9IGZ3ZF90eF9wYWNrZXRzOwomIzQzOwlkZXYtJmd0O3Fvc19zdGF0c1tjaGFubmVsXS5jcHVfdHhfcGFja2V0cyA9IGNwdV90eF9wYWNrZXRzOwomIzQzOwlkZXYtJmd0O3Fvc19zdGF0c1tjaGFubmVsXS5md2RfdHhfcGFja2V0cyA9IGZ3ZF90eF9wYWNrZXRzOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yNzg1LDE2ICYjNDM7Mjg3MywxOCBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3NldF90eF9yYXRlX2xpbWl0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJCQkJCSB1MzIgYnVja2V0X3NpemUpCiB7CiAJc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwomIzQzOwlzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7CiAJaW50IGksIGVycjsKIAomIzQzOwlxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTsKIAlmb3IgKGkgPSAwOyBpICZsdDs9IFRSVENNX1BFQUtfTU9ERTsgaSYjNDM7JiM0MzspIHsKLQkJZXJyID0gYWlyb2hhX3FkbWFfc2V0X3RydGNtX2NvbmZpZyhkZXYtJmd0O3FkbWEsIGNoYW5uZWwsCiYjNDM7CQllcnIgPSBhaXJvaGFfcWRtYV9zZXRfdHJ0Y21fY29uZmlnKHFkbWEsIGNoYW5uZWwsCiAJCQkJCQkgICBSRUdfRUdSRVNTX1RSVENNX0NGRywgaSwKIAkJCQkJCSAgICEhcmF0ZSwgVFJUQ01fTUVURVJfTU9ERSk7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwogCi0JCWVyciA9IGFpcm9oYV9xZG1hX3NldF90cnRjbV90b2tlbl9idWNrZXQoZGV2LSZndDtxZG1hLCBjaGFubmVsLAomIzQzOwkJZXJyID0gYWlyb2hhX3FkbWFfc2V0X3RydGNtX3Rva2VuX2J1Y2tldChxZG1hLCBjaGFubmVsLAogCQkJCQkJCSBSRUdfRUdSRVNTX1RSVENNX0NGRywKIAkJCQkJCQkgaSwgcmF0ZSwgYnVja2V0X3NpemUpOwogCQlpZiAoZXJyKQpAQCAtMjgzMCwxMSAmIzQzOzI5MjAsMTIgQEAgc3RhdGljIGludCBhaXJvaGFfdGNfaHRiX2FsbG9jX2xlYWZfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAl1MzIgY2hhbm5lbCA9IFRDX0hfTUlOKG9wdC0mZ3Q7Y2xhc3NpZCkgJSBBSVJPSEFfTlVNX1FPU19DSEFOTkVMUzsKIAlpbnQgZXJyLCBudW1fdHhfcXVldWVzID0gQUlST0hBX05VTV9UWF9SSU5HICYjNDM7IGNoYW5uZWwgJiM0MzsgMTsKIAlzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0Jc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LSZndDtxZG1hOwomIzQzOwlzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7CiAKIAkvKiBIZXJlIHdlIG5lZWQgdG8gY2hlY2sgdGhlIHJlcXVlc3RlZCBRRE1BIGNoYW5uZWwgaXMgbm90IGFscmVhZHkKIAkgKiBpbiB1c2UgYnkgYW5vdGhlciBuZXRfZGV2aWNlIHJ1bm5pbmcgb24gdGhlIHNhbWUgUURNQSBibG9jay4KIAkgKi8KJiM0MzsJcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7CiAJaWYgKHRlc3RfYW5kX3NldF9iaXQoY2hhbm5lbCwgcWRtYS0mZ3Q7cW9zX2NoYW5uZWxfbWFwKSkgewogCQlOTF9TRVRfRVJSX01TR19NT0Qob3B0LSZndDtleHRhY2ssCiAJCQkJICAgJiMzNDtxZG1hIHFvcyBjaGFubmVsIGFscmVhZHkgaW4gdXNlJiMzNDspOwpAQCAtMjg3MCw3ICYjNDM7Mjk2MSw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfc2V0X3J4X21ldGVyKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2LAogCQkJCSAgICB1MzIgcmF0ZSwgdTMyIGJ1Y2tldF9zaXplLAogCQkJCSAgICBlbnVtIHRydGNtX3VuaXRfdHlwZSB1bml0X3R5cGUpCiB7Ci0Jc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LSZndDtxZG1hOwomIzQzOwlzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpOwogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUocWRtYS0mZ3Q7cV9yeCk7IGkmIzQzOyYjNDM7KSB7CkBAIC0zMDQ1LDEwICYjNDM7MzEzNiwxMSBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfdGNfcmVtb3ZlX2h0Yl9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgcXVldWUpCiB7CiAJc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCWludCBudW1fdHhfcXVldWVzID0gQUlST0hBX05VTV9UWF9SSU5HOwotCXN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi0mZ3Q7cWRtYTsKJiM0MzsJc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hOwogCiAJYWlyb2hhX3FkbWFfc2V0X3R4X3JhdGVfbGltaXQobmV0ZGV2LCBxdWV1ZSwgMCwgMCk7CiAKJiM0MzsJcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7CiAJY2xlYXJfYml0KHF1ZXVlLCBxZG1hLSZndDtxb3NfY2hhbm5lbF9tYXApOwogCWNsZWFyX2JpdChxdWV1ZSwgZGV2LSZndDtxb3Nfc3FfYm1hcCk7CiAKQEAgLTMwNzQsNiAmIzQzOzMxNjYsOTggQEAgc3RhdGljIGludCBhaXJvaGFfdGNfaHRiX2RlbGV0ZV9sZWFmX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBhaXJvaGFfZGlzYWJsZV9xb3NfZm9yX2dkbTM0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7CiYjNDM7CXN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBkZXYtJmd0O3BvcnQ7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWlmIChwb3J0LSZndDtpZCAhPSBBSVJPSEFfR0RNM19JRFggJmFtcDsmYW1wOwomIzQzOwkgICAgcG9ydC0mZ3Q7aWQgIT0gQUlST0hBX0dETTRfSURYKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwllcnIgPSBhaXJvaGFfZGlzYWJsZV9nZG0yX2xvb3BiYWNrKGRldik7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQluZXRkZXZfd2FybihuZXRkZXYsCiYjNDM7CQkJICAgICYjMzQ7ZmFpbGVkIGRpc2FibGluZyBHRE0yIGxvb3BiYWNrOiAlZFxuJiMzNDssIGVycik7CiYjNDM7CiYjNDM7CWNsZWFyX2JpdChBSVJPSEFfREVWX0ZfV0FOLCAmYW1wO2Rldi0mZ3Q7ZmxhZ3MpOwomIzQzOwlhaXJvaGFfZGV2X3NldF9xZG1hKGRldik7CiYjNDM7CiYjNDM7CWFpcm9oYV9zZXRfbWFjYWRkcihkZXYsIG5ldGRldi0mZ3Q7ZGV2X2FkZHIpOwomIzQzOwlhaXJvaGFfcHBlX3NldF94bWl0X2ZyYW1lX3NpemUoZGV2KTsKJiM0MzsKJiM0MzsJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKJiM0MzsJCWFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhkZXYtJmd0O2V0aCwKJiM0MzsJCQkJCSAgICBSRUdfR0RNX0ZXRF9DRkcocG9ydC0mZ3Q7aWQpLAomIzQzOwkJCQkJICAgIEZFX1BTRV9QT1JUX1BQRTEpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFpcm9oYV9lbmFibGVfcW9zX2Zvcl9nZG0zNChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAomIzQzOwkJCQkgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQomIzQzO3sKJiM0MzsJc3RydWN0IGFpcm9oYV9nZG1fZGV2ICp3YW5fZGV2LCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJc3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGRldi0mZ3Q7cG9ydDsKJiM0MzsJc3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IGRldi0mZ3Q7ZXRoOwomIzQzOwlpbnQgZXJyID0gLUVCVVNZOwomIzQzOwomIzQzOwlpZiAocG9ydC0mZ3Q7aWQgIT0gQUlST0hBX0dETTNfSURYICZhbXA7JmFtcDsKJiM0MzsJICAgIHBvcnQtJmd0O2lkICE9IEFJUk9IQV9HRE00X0lEWCkgewomIzQzOwkJLyogSFcgUW9TIGlzIGFsd2F5cyBzdXBwb3J0ZWQgYnkgR0RNMSBhbmQgR0RNMiAqLwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFhaXJvaGFfaXNfbGFuX2dkbV9kZXYoZGV2KSkgLyogQWxyZWFkeSBlbmFibGVkICovCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO2Zsb3dfb2ZmbG9hZF9tdXRleCk7CiYjNDM7CiYjNDM7CXdhbl9kZXYgPSBhaXJvaGFfZ2V0X3dhbl9nZG1fZGV2KGV0aCk7CiYjNDM7CWlmICh3YW5fZGV2KSB7CiYjNDM7CQlpZiAodGVzdF9iaXQoQUlST0hBX0RFVl9GX1RYX1FPUywgJmFtcDt3YW5fZGV2LSZndDtmbGFncykgfHwKJiM0MzsJCSAgICB3YW5fZGV2LSZndDtwb3J0LSZndDtpZCA9PSBBSVJPSEFfR0RNMl9JRFgpIHsKJiM0MzsJCQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLAomIzQzOwkJCQkJICAgJiMzNDtRb1MgY29uZmlndXJlZCBmb3IgV0FOIGRldmljZSYjMzQ7KTsKJiM0MzsJCQlnb3RvIGVycm9yX3VubG9jazsKJiM0MzsJCX0KJiM0MzsJCWFpcm9oYV9kaXNhYmxlX3Fvc19mb3JfZ2RtMzQobmV0ZGV2X2Zyb21fcHJpdih3YW5fZGV2KSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2V0X2JpdChBSVJPSEFfREVWX0ZfV0FOLCAmYW1wO2Rldi0mZ3Q7ZmxhZ3MpOwomIzQzOwlhaXJvaGFfZGV2X3NldF9xZG1hKGRldik7CiYjNDM7CWVyciA9IGFpcm9oYV9lbmFibGVfZ2RtMl9sb29wYmFjayhkZXYpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBlcnJvcl9kaXNhYmxlX3dhbjsKJiM0MzsKJiM0MzsJZXJyID0gYWlyb2hhX3NldF9tYWNhZGRyKGRldiwgbmV0ZGV2LSZndDtkZXZfYWRkcik7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIGVycm9yX2Rpc2FibGVfbG9vcGJhY2s7CiYjNDM7CiYjNDM7CWFpcm9oYV9kZXZfc2V0X3htaXRfZnJhbWVfc2l6ZShuZXRkZXYpOwomIzQzOwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CiYjNDM7CQl1MzIgcHNlX3BvcnQ7CiYjNDM7CiYjNDM7CQlwc2VfcG9ydCA9IGFpcm9oYV9wcGVfaXNfZW5hYmxlZChldGgsIDEpID8gRkVfUFNFX1BPUlRfUFBFMgomIzQzOwkJCQkJCQkgOiBGRV9QU0VfUE9SVF9QUEUxOwomIzQzOwkJYWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKGV0aCwgUkVHX0dETV9GV0RfQ0ZHKHBvcnQtJmd0O2lkKSwKJiM0MzsJCQkJCSAgICBwc2VfcG9ydCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7Zmxvd19vZmZsb2FkX211dGV4KTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyb3JfZGlzYWJsZV9sb29wYmFjazoKJiM0MzsJYWlyb2hhX2Rpc2FibGVfZ2RtMl9sb29wYmFjayhkZXYpOwomIzQzO2Vycm9yX2Rpc2FibGVfd2FuOgomIzQzOwljbGVhcl9iaXQoQUlST0hBX0RFVl9GX1dBTiwgJmFtcDtkZXYtJmd0O2ZsYWdzKTsKJiM0MzsJYWlyb2hhX2Rldl9zZXRfcWRtYShkZXYpOwomIzQzO2Vycm9yX3VubG9jazoKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7Zmxvd19vZmZsb2FkX211dGV4KTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGFpcm9oYV90Y19odGJfZGVzdHJveShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKQEAgLTMwODIsNiAmIzQzOzMyNjYsOCBAQCBzdGF0aWMgaW50IGFpcm9oYV90Y19odGJfZGVzdHJveShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCWZvcl9lYWNoX3NldF9iaXQocSwgZGV2LSZndDtxb3Nfc3FfYm1hcCwgQUlST0hBX05VTV9RT1NfQ0hBTk5FTFMpCiAJCWFpcm9oYV90Y19yZW1vdmVfaHRiX3F1ZXVlKG5ldGRldiwgcSk7CiAKJiM0MzsJY2xlYXJfYml0KEFJUk9IQV9ERVZfRl9UWF9RT1MsICZhbXA7ZGV2LSZndDtmbGFncyk7CiYjNDM7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMxMDEsMjQgJiM0MzszMjg3LDMzIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3RjX2dldF9odGJfZ2V0X2xlYWZfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBhaXJvaGFfdGNfc2V0dXBfcWRpc2NfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiYjNDM7c3RhdGljIGludCBhaXJvaGFfdGNfc2V0dXBfcWRpc2NfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJCQkJICAgICBzdHJ1Y3QgdGNfaHRiX3FvcHRfb2ZmbG9hZCAqb3B0KQogewogCXN3aXRjaCAob3B0LSZndDtjb21tYW5kKSB7Ci0JY2FzZSBUQ19IVEJfQ1JFQVRFOgomIzQzOwljYXNlIFRDX0hUQl9DUkVBVEU6IHsKJiM0MzsJCXN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJCWludCBlcnI7CiYjNDM7CiYjNDM7CQllcnIgPSBhaXJvaGFfZW5hYmxlX3Fvc19mb3JfZ2RtMzQobmV0ZGV2LCBvcHQtJmd0O2V4dGFjayk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CQlzZXRfYml0KEFJUk9IQV9ERVZfRl9UWF9RT1MsICZhbXA7ZGV2LSZndDtmbGFncyk7CiAJCWJyZWFrOwomIzQzOwl9CiAJY2FzZSBUQ19IVEJfREVTVFJPWToKLQkJcmV0dXJuIGFpcm9oYV90Y19odGJfZGVzdHJveShkZXYpOwomIzQzOwkJcmV0dXJuIGFpcm9oYV90Y19odGJfZGVzdHJveShuZXRkZXYpOwogCWNhc2UgVENfSFRCX05PREVfTU9ESUZZOgotCQlyZXR1cm4gYWlyb2hhX3RjX2h0Yl9tb2RpZnlfcXVldWUoZGV2LCBvcHQpOwomIzQzOwkJcmV0dXJuIGFpcm9oYV90Y19odGJfbW9kaWZ5X3F1ZXVlKG5ldGRldiwgb3B0KTsKIAljYXNlIFRDX0hUQl9MRUFGX0FMTE9DX1FVRVVFOgotCQlyZXR1cm4gYWlyb2hhX3RjX2h0Yl9hbGxvY19sZWFmX3F1ZXVlKGRldiwgb3B0KTsKJiM0MzsJCXJldHVybiBhaXJvaGFfdGNfaHRiX2FsbG9jX2xlYWZfcXVldWUobmV0ZGV2LCBvcHQpOwogCWNhc2UgVENfSFRCX0xFQUZfREVMOgogCWNhc2UgVENfSFRCX0xFQUZfREVMX0xBU1Q6CiAJY2FzZSBUQ19IVEJfTEVBRl9ERUxfTEFTVF9GT1JDRToKLQkJcmV0dXJuIGFpcm9oYV90Y19odGJfZGVsZXRlX2xlYWZfcXVldWUoZGV2LCBvcHQpOwomIzQzOwkJcmV0dXJuIGFpcm9oYV90Y19odGJfZGVsZXRlX2xlYWZfcXVldWUobmV0ZGV2LCBvcHQpOwogCWNhc2UgVENfSFRCX0xFQUZfUVVFUllfUVVFVUU6Ci0JCXJldHVybiBhaXJvaGFfdGNfZ2V0X2h0Yl9nZXRfbGVhZl9xdWV1ZShkZXYsIG9wdCk7CiYjNDM7CQlyZXR1cm4gYWlyb2hhX3RjX2dldF9odGJfZ2V0X2xlYWZfcXVldWUobmV0ZGV2LCBvcHQpOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CkBAIC0zMjIwLDggJiM0MzszNDE1LDggQEAgc3RhdGljIGludCBhaXJvaGFfYWxsb2NfZ2RtX2RldmljZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLAogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CiAJc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXY7CiYjNDM7CWludCBlcnIsIGk7CiAJdTggaW5kZXg7Ci0JaW50IGVycjsKIAogCW5ldGRldiA9IGRldm1fYWxsb2NfZXRoZXJkZXZfbXFzKGV0aC0mZ3Q7ZGV2LCBzaXplb2YoKmRldiksCiAJCQkJCSBBSVJPSEFfTlVNX05FVERFVl9UWF9SSU5HUywKQEAgLTMyNzIsNiAmIzQzOzM0NjcsOCBAQCBzdGF0aWMgaW50IGFpcm9oYV9hbGxvY19nZG1fZGV2aWNlKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsCiAJbmV0ZGV2LSZndDtkZXYub2Zfbm9kZSA9IG9mX25vZGVfZ2V0KG5wKTsKIAlkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXU2NF9zdGF0c19pbml0KCZhbXA7ZGV2LSZndDtzdGF0cy5zeW5jcCk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKGRldi0mZ3Q7dHhxX2xvY2spOyBpJiM0MzsmIzQzOykKJiM0MzsJCXNwaW5fbG9ja19pbml0KCZhbXA7ZGV2LSZndDt0eHFfbG9ja1tpXSk7CiAJZGV2LSZndDtwb3J0ID0gcG9ydDsKIAlkZXYtJmd0O2V0aCA9IGV0aDsKIAlkZXYtJmd0O25icSA9IG5icTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oCmluZGV4IGZlOTM0ZjlmZmU4YTExLi5mYTlhOGVkY2UyMmZmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oCkBAIC01NzAsMjQgJiM0Mzs1NzAsMzEgQEAgc3RydWN0IGFpcm9oYV9xZG1hIHsKIAlERUNMQVJFX0JJVE1BUChxb3NfY2hhbm5lbF9tYXAsIEFJUk9IQV9OVU1fUU9TX0NIQU5ORUxTKTsKIH07CiAKLWVudW0gYWlyb2hhX3ByaXZfZmxhZ3MgewotCUFJUk9IQV9QUklWX0ZfV0FOID0gQklUKDApLAomIzQzO2VudW0gYWlyb2hhX2Rldl9mbGFncyB7CiYjNDM7CUFJUk9IQV9ERVZfRl9XQU4sCiYjNDM7CUFJUk9IQV9ERVZfRl9UWF9RT1MsCiB9OwogCiBzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgewomIzQzOwlzdHJ1Y3QgYWlyb2hhX3FkbWEgX19yY3UgKnFkbWE7CiAJc3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydDsKLQlzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7CiAJc3RydWN0IGFpcm9oYV9ldGggKmV0aDsKIAogCURFQ0xBUkVfQklUTUFQKHFvc19zcV9ibWFwLCBBSVJPSEFfTlVNX1FPU19DSEFOTkVMUyk7Ci0JLyogcW9zIHN0YXRzIGNvdW50ZXJzICovCi0JdTY0IGNwdV90eF9wYWNrZXRzOwotCXU2NCBmd2RfdHhfcGFja2V0czsKJiM0MzsJc3RydWN0IHsKJiM0MzsJCXUzMiBjcHVfdHhfcGFja2V0czsKJiM0MzsJCXUzMiBmd2RfdHhfcGFja2V0czsKJiM0MzsJfSBxb3Nfc3RhdHNbQUlST0hBX05VTV9RT1NfQ0hBTk5FTFNdOwogCi0JdTMyIGZsYWdzOwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBuYnE7CiAKIAlzdHJ1Y3QgYWlyb2hhX2h3X3N0YXRzIHN0YXRzOwomIzQzOwomIzQzOwkvKiBTZXJpYWxpemUgbmV0ZGV2X3R4X2NvbXBsZXRlZF9xdWV1ZSgpIGNhbGxzIHBlciBUWCBxdWV1ZSBkdXJpbmcKJiM0MzsJICogUURNQSBtaWdyYXRpb24uCiYjNDM7CSAqLwomIzQzOwlzcGlubG9ja190IHR4cV9sb2NrW0FJUk9IQV9OVU1fTkVUREVWX1RYX1JJTkdTXTsKIH07CiAKIHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgewpAQCAtNjk0LDcgJiM0Mzs3MDEsNyBAQCBzdGF0aWMgaW5saW5lIHUxNiBhaXJvaGFfcWRtYV9nZXRfdHhxKHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSwgdTE2IHFpZCkKIAogc3RhdGljIGlubGluZSBib29sIGFpcm9oYV9pc19sYW5fZ2RtX2RldihzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldikKIHsKLQlyZXR1cm4gIShkZXYtJmd0O2ZsYWdzICZhbXA7IEFJUk9IQV9QUklWX0ZfV0FOKTsKJiM0MzsJcmV0dXJuICF0ZXN0X2JpdChBSVJPSEFfREVWX0ZfV0FOLCAmYW1wO2Rldi0mZ3Q7ZmxhZ3MpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgYWlyb2hhX2lzXzc1ODEoc3RydWN0IGFpcm9oYV9ldGggKmV0aCkKQEAgLTcxMSw2ICYjNDM7NzE4LDE2IEBAIGludCBhaXJvaGFfZ2V0X2ZlX3BvcnQoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpOwogYm9vbCBhaXJvaGFfaXNfdmFsaWRfZ2RtX2RldihzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLAogCQkJICAgICBzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldik7CiAKJiM0MztleHRlcm4gc3RydWN0IG11dGV4IGZsb3dfb2ZmbG9hZF9tdXRleDsKJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBhaXJvaGFfcWRtYSAqCiYjNDM7YWlyb2hhX3FkbWFfZGVyZWYoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpCiYjNDM7ewomIzQzOwlyZXR1cm4gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChkZXYtJmd0O3FkbWEsCiYjNDM7CQkJCQkgbG9ja2RlcF9ydG5sX2lzX2hlbGQoKSB8fAomIzQzOwkJCQkJIGxvY2tkZXBfaXNfaGVsZCgmYW1wO2Zsb3dfb2ZmbG9hZF9tdXRleCkpOwomIzQzO30KJiM0MzsKIHZvaWQgYWlyb2hhX3BwZV9zZXRfeG1pdF9mcmFtZV9zaXplKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KTsKIHZvaWQgYWlyb2hhX3BwZV9zZXRfY3B1X3BvcnQoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYsIHU4IHBwZV9pZCwgdTggZnBvcnQpOwogYm9vbCBhaXJvaGFfcHBlX2lzX2VuYWJsZWQoc3RydWN0IGFpcm9oYV9ldGggKmV0aCwgaW50IGluZGV4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jCmluZGV4IGU0YzM2NDRkZDZlYzdhLi4zM2RkZjBkMDc4NTUzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jCkBAIC0xNSw3ICYjNDM7MTUsMTAgQEAKICNpbmNsdWRlICYjMzQ7YWlyb2hhX3JlZ3MuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2Fpcm9oYV9ldGguaCYjMzQ7CiAKLXN0YXRpYyBERUZJTkVfTVVURVgoZmxvd19vZmZsb2FkX211dGV4KTsKJiM0MzsvKiBTZXJpYWxpemUgYWlyb2hhX2dkbV9kZXYgZmxhZ3MsIFFETUEgcG9pbnRlciBhbmQgUFBFIENQVSBwb3J0CiYjNDM7ICogY29uZmlndXJhdGlvbi4KJiM0MzsgKi8KJiM0MztERUZJTkVfTVVURVgoZmxvd19vZmZsb2FkX211dGV4KTsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0socHBlX2xvY2spOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJoYXNodGFibGVfcGFyYW1zIGFpcm9oYV9mbG93X3RhYmxlX3BhcmFtcyA9IHsKQEAgLTg2LDggJiM0Mzs4OSw4IEBAIHN0YXRpYyB1MzIgYWlyb2hhX3BwZV9nZXRfdGltZXN0YW1wKHN0cnVjdCBhaXJvaGFfcHBlICpwcGUpCiAKIHZvaWQgYWlyb2hhX3BwZV9zZXRfY3B1X3BvcnQoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYsIHU4IHBwZV9pZCwgdTggZnBvcnQpCiB7Ci0Jc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LSZndDtxZG1hOwotCXN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBxZG1hLSZndDtldGg7CiYjNDM7CXN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7CiYjNDM7CXN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBkZXYtJmd0O2V0aDsKIAl1OCBxZG1hX2lkID0gcWRtYSAtICZhbXA7ZXRoLSZndDtxZG1hWzBdOwogCXUzMiBmZV9jcHVfcG9ydDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9yZWdzLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaAppbmRleCA2ZmVkNjNkMDEzYjQxMi4uNDQyYjQ4YzliOTkxZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcmVncy5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcmVncy5oCkBAIC0zNzUsNiAmIzQzOzM3NSw3IEBACiAKICNkZWZpbmUgUkVHX1NSQ19QT1JUX0ZDX01BUDYJCTB4MjI5OAogI2RlZmluZSBGQ19JRF9PRl9TUkNfUE9SVF9NQVNLKF9uKQlHRU5NQVNLKDQgJiM0MzsgKChfbikgJmx0OyZsdDsgMyksICgoX24pICZsdDsmbHQ7IDMpKQomIzQzOyNkZWZpbmUgRkNfTUFQNl9ERUZfVkFMVUUJCTB4MWIxYTE5MTgKIAogI2RlZmluZSBSRUdfV0FOX01UVTAJCQkweDIzMDAKICNkZWZpbmUgV0FOX01UVTFfTUFTSwkJCUdFTk1BU0soMjksIDE2KQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxODo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTIxNwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDEyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEFpcm9oYSBFdGhlcm5ldCBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gdGhlIEFpcm9oYSBldGhlcm5ldCBkcml2ZXIsIHNwZWNpZmljYWxseSBwb2tpbmcgYXJvdW5kIGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jYCBhbmQgaXRzIGZyaWVuZHMuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgUkNVIHByb3RlY3Rpb24gZm9yIGBkZXYtJmd0O3FkbWFgIGFuZCB0aGUgYWRkZWQgUW9TIHN1cHBvcnQgZm9yIEdETTMvNC4gVGhhdCYjMzk7cyBhIHNpZ25pZmljYW50IGNoYW5nZTsgaXQmIzM5O3MgZnVuY3Rpb25hbGx5IGFsdGVyaW5nIHRoZSBuZXR3b3JrIGRyaXZlciYjMzk7cyBiZWhhdmlvci4gSSBuZWVkIHRvIGJlIHN1cmUgdGhpcyBpcyBnb2luZyB0byBiZWhhdmUgY29ycmVjdGx5LgoKRmlyc3QsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IHdheSB0byB0ZXN0IHRoaXMgdGhvcm91Z2hseS4gQ2FuIEkgc2ltdWxhdGUgdGhlIEFpcm9oYSBoYXJkd2FyZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBUaGF0IHdvdWxkIG1ha2UgdGVzdGluZyBhbmQgZGVidWdnaW5nIGNvbnNpZGVyYWJseSBlYXNpZXIuIEl0JiMzOTtzIGEga2V5IHF1ZXN0aW9uLiBJIG5lZWQgdG8ga25vdyB0aGUgc3BlY2lmaWMgdGFyZ2V0LgoKQW5kIHRoYXQgbGVhZHMgbWUgdG8gbXkgbmV4dCBxdWVzdGlvbjogSXMgdGhpcyBkcml2ZXIgZGVzaWduZWQgZm9yIGEgc3BlY2lmaWMgU3lzdGVtLW9uLUNoaXAgKFNvQyksIG9yIGlzIGl0IG1vcmUgb2YgYSBnZW5lcmFsIGRyaXZlciB0aGF0IHN1cHBvcnRzIGEgc3BlY2lmaWMgUENJZSBjYXJkIGltcGxlbWVudGF0aW9uPyBVbmRlcnN0YW5kaW5nIHRoZSBoYXJkd2FyZSBjb250ZXh0IGlzIGNydWNpYWwgZm9yIGludGVycHJldGluZyB0aGVzZSBjaGFuZ2VzLiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnYCBmaWxlIHRvIHNlZSBpZiBJIGNhbiBnZXQgc29tZSBjb250ZXh0LiBUaGF0IHNob3VsZCBwcm92aWRlIHNvbWUgaGludHMgYWJvdXQgdGhlIGhhcmR3YXJlIHJlcXVpcmVtZW50cyBvciB0YXJnZXRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE4OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfVkVORE9SX0FJUk9IQSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZzoyOmNvbmZpZyBORVRfVkVORE9SX0FJUk9IQVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWctMy1cdGJvb2wgXCYjMzQ7QWlyb2hhIGRldmljZXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxODo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTczOQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqSW52ZW50b3J5IEFzc2Vzc21lbnQ6IFZlbmRvciBGb2N1cyoqCgpBbHJpZ2h0LCBzbyB0aGUgaW1tZWRpYXRlIGdvYWwgaXMgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBsYW5kc2NhcGUgb2YgZGV2aWNlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBzcGVjaWZpYyB2ZW5kb3IuIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiB3aGF0IHdlIGhhdmUgZGVwbG95ZWQsIGFuZCB3aGVyZSB3ZSYjMzk7cmUgYXQgd2l0aCBpdC4gVGhpcyBpcyBhIGZvdW5kYXRpb25hbCBzdGVwLCBhbmQgZGVwZW5kaW5nIG9uIHRoZSBsZXZlbCBvZiBncmFudWxhcml0eSBhdmFpbGFibGUsIGl0IG1heSBndWlkZSBmdXJ0aGVyIGFuYWx5c2lzLiBEZXBlbmRpbmcgb24gd2hhdCBJIGZpbmQsIHRoZSBmb2N1cyBjb3VsZCBzaGlmdCB0byBhIHJpc2sgYXNzZXNzbWVudCwgYSBwZXJmb3JtYW5jZSByZXZpZXcsIG9yIG1heWJlIGV2ZW4gYSBsaWNlbnNlIGNvbXBsaWFuY2UgY2hlY2ssIGJ1dCBmaXJzdCBJIG5lZWQgYSBjb21wbGV0ZSBwaWN0dXJlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3JlIHdvcmtpbmcgd2l0aCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE4OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfVkVORE9SX0FJUk9IQSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjI6Y29uZmlnIE5FVF9WRU5ET1JfQUlST0hBXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZy0zLVx0Ym9vbCBcJiMzNDtBaXJvaGEgZGV2aWNlc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE4OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDIxCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4gVGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gcmVhY2hpbmcgZm9yIGlzIHRoZSBLY29uZmlnIGZpbGUuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIHF1aWNrIHNjYW4gb2YgaXRzIGNvbnRlbnRzLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBrZXkgdmFyaWFibGVzLCBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgb2J2aW91cyBjaGFuZ2VzIGZyb20gdGhlIGxhc3QgdGltZSBJIHRvdWNoZWQgdGhpcy4gSSB3YW50IHRvIHNlZSBpZiBhbnl0aGluZyBqdW1wcyBvdXQgdGhhdCYjMzk7cyBiZWVuIHJlY2VudGx5IG1vZGlmaWVkLCBvciBpZiBhbnl0aGluZyBsb29rcyBvdXQgb2YgcGxhY2UgZ2l2ZW4gbXkgY3VycmVudCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzeXN0ZW0mIzM5O3MgZ29hbHMuIEkgYW0gYWxyZWFkeSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGlmIG9uZSBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGlzIGNoYW5nZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTg6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgTkVUX1ZFTkRPUl9BSVJPSEFcbiAgIDM6XHRcdGJvb2wgXCYjMzQ7QWlyb2hhIGRldmljZXNcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gQVJDSF9BSVJPSEEgfHwgQ09NUElMRV9URVNUXG4gICA1Olx0XHRoZWxwXG4gICA2Olx0XHQgIElmIHlvdSBoYXZlIGEgQWlyb2hhIFNvQyB3aXRoIGV0aGVybmV0LCBzYXkgWS5cbiAgIDc6XHRcbiAgIDg6XHRpZiBORVRfVkVORE9SX0FJUk9IQVxuICAgOTpcdFxuICAxMDpcdGNvbmZpZyBORVRfQUlST0hBX05QVVxuICAxMTpcdFx0dHJpc3RhdGUgXCYjMzQ7QWlyb2hhIE5QVSBzdXBwb3J0XCYjMzQ7XG4gIDEyOlx0XHRzZWxlY3QgV0FOVF9ERVZfQ09SRURVTVBcbiAgMTM6XHRcdHNlbGVjdCBSRUdNQVBfTU1JT1xuICAxNDpcdFx0aGVscFxuICAxNTpcdFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBBaXJvaGEgTmV0d29yayBQcm9jZXNzb3IgKE5QVSkgYXZhaWxhYmxlXG4gIDE2Olx0XHQgIG9uIHRoZSBBaXJvaGEgU29jIGZhbWlseS5cbiAgMTc6XHRcbiAgMTg6XHRjb25maWcgTkVUX0FJUk9IQVxuICAxOTpcdFx0dHJpc3RhdGUgXCYjMzQ7QWlyb2hhIFNvQyBHaWdhYml0IEV0aGVybmV0IHN1cHBvcnRcJiMzNDtcbiAgMjA6XHRcdGRlcGVuZHMgb24gTkVUX0RTQSB8fCAhTkVUX0RTQVxuICAyMTpcdFx0c2VsZWN0IE5FVF9BSVJPSEFfTlBVXG4gIDIyOlx0XHRzZWxlY3QgUEFHRV9QT09MXG4gIDIzOlx0XHRoZWxwXG4gIDI0Olx0XHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBnaWdhYml0IGV0aGVybmV0IE1BQ3MgaW4gdGhlXG4gIDI1Olx0XHQgIEFpcm9oYSBTb0MgZmFtaWx5LlxuICAyNjpcdFxuICAyNzpcdGNvbmZpZyBORVRfQUlST0hBX0ZMT1dfU1RBVFNcbiAgMjg6XHRcdGRlZmF1bHQgeVxuICAyOTpcdFx0Ym9vbCBcJiMzNDtBaXJvaGEgZmxvdyBzdGF0c1wmIzM0O1xuICAzMDpcdFx0ZGVwZW5kcyBvbiBORVRfQUlST0hBIFx1MDAyNlx1MDAyNiBORVRfQUlST0hBX05QVVxuICAzMTpcdFx0aGVscFxuICAzMjpcdFx0ICBFbmFibGUgQWlyb2hhIGZsb3d0YWJsZSBzdGF0aXN0aWMgY291bnRlcnMuXG4gIDMzOlx0XG4gIDM0Olx0ZW5kaWYgI05FVF9WRU5ET1JfQUlST0hBXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTg6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2NTkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBBaXJvaGEgU29DIEdpZ2FiaXQgRXRoZXJuZXQgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGRyaXZlciwgdGhlICYjMzQ7QWlyb2hhIFNvQyBHaWdhYml0IEV0aGVybmV0IHN1cHBvcnQmIzM0OyBvbmUuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSBpdCYjMzk7cyBjb25kaXRpb25hbCBvbiBgQVJDSF9BSVJPSEFgIG9yIGBDT01QSUxFX1RFU1RgLiBNYWtlcyBzZW5zZSwgaXQmIzM5O3Mgc3BlY2lmaWMgdG8gdGhhdCBTb0MuIEdpdmVuIHRoYXQgaXQmIzM5O3MgYW4gU29DIGV0aGVybmV0IGRyaXZlciwgaXQmIzM5O3MgcHJvYmFibHkgZ29pbmcgdG8gYmUgYSBwbGF0Zm9ybSBkZXZpY2UuIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMsIGNhbiBJIGVmZmVjdGl2ZWx5IGZ1enogdGhpcyBpbiBRRU1VPyBBbmQgdGhhdCYjMzk7cyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBTdGFuZGFyZCBRRU1VIGRvZXNuJiMzOTt0IHVzdWFsbHkgZW11bGF0ZSBTb0Mtc3BlY2lmaWMgcGxhdGZvcm0gZGV2aWNlcyB1bmxlc3MgdGhlcmUmIzM5O3MgZXhwbGljaXQgc3VwcG9ydCBidWlsdC1pbi4KClRoZW4gSSBzdGFydCB0aGlua2luZywgY2FuIHN5emthbGxlciBoZWxwIG1lIGhlcmU/IFdlbGwsIHN5emthbGxlciAqY2FuKiBmdXp6IHBsYXRmb3JtIGRldmljZXMsIGlmIHRoZXkmIzM5O3JlIHNldCB1cCB2aWEgdGhlIGRldmljZSB0cmVlIG9yIGlmIGl0IGNhbiBpbmplY3QgdGhlbS4gQnV0LCBteSBleHBlcmllbmNlIHNheXMgc3l6a2FsbGVyJiMzOTtzIHN0cmVuZ3RocyBsaWUgaW4gUENJLCBVU0IsIGFuZCB2aXJ0dWFsIGRldmljZXMuIFBsYXRmb3JtIGRldmljZXMgYXJlIGEgYml0IHRyaWNraWVyLCB0aGV5IHJlcXVpcmUgc3BlY2lmaWMgZW11bGF0b3IgbW9kZWxzIG9yIHN5emthbGxlciBuZWVkcyB0byBnZW5lcmF0ZSB0aGVzZSwgYW5kIGl0JiMzOTtzIG5vdCB0aGUgdXN1YWwgcm91dGUuCgpIb2xkIG9uLCBJIHJlY2FsbCBgc3l6X2dlbmV0bGlua2AgYW5kIG90aGVyIG5ldHdvcmsgZnV6emluZyBjYXBhYmlsaXRpZXMgaW4gc3l6a2FsbGVyLiBIb3dldmVyLCBmdXp6aW5nIGEgc3BlY2lmaWMgU29DIGV0aGVybmV0IGRyaXZlciBtZWFucyB0aGUgZGV2aWNlIG5lZWRzIHRvIGJlICpwcm9iZWQqLiBJdCYjMzk7cyBub3QganVzdCBhYm91dCBuZXR3b3JrIHByaW1pdGl2ZXM7IHRoZSBkcml2ZXIgaGFzIHRvIHN1Y2Nlc3NmdWxseSBhdHRhY2ggdG8gdGhlIGhhcmR3YXJlLiBTbywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZHJpdmVyIGlzIGFjdHVhbGx5IHByb2JlZC4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBkcml2ZXImIzM5O3MgcHJvYmluZyBtZWNoYW5pc20gYW5kIHNlZSBob3cgaXTigJlzIGluaXRpYWxpemVkLiBUaGF0IHdpbGwgZGV0ZXJtaW5lIGlmIEkgY2FuIGdldCB0aGlzIHRoaW5nIHVwIGFuZCBydW5uaW5nIGZvciBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxODo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb2R1bGVfcGxhdGZvcm1fZHJpdmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jPTM5NTQ9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYWlyb2hhX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTM5NjEtfTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM6Mzk2Mjptb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGFpcm9oYV9kcml2ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYy0zOTYzLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM9ODEzPXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGFpcm9oYV9ucHVfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtODIwLX07XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjgyMTptb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGFpcm9oYV9ucHVfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtODIyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxODo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQ4NgoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNoZWNraW5nIFN5emthbGxlciYjMzk7cyBQbGF0Zm9ybSBEcml2ZXIgQ292ZXJhZ2UqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyB0aGlzIGlzIHByb2JhYmx5IGEgcGxhdGZvcm0gZHJpdmVyLCB3aGljaCBtZWFucyBTeXprYWxsZXIgbWlnaHQgYmUgYWJsZSB0byBpbnRlcmFjdCB3aXRoIGl0LCBidXQgaXQmIzM5O3Mgbm90IGEgZ2l2ZW4uIFN5emthbGxlciYjMzk7cyBnb29kIGF0IGluc3RhbnRpYXRpbmcgcGxhdGZvcm0gZGV2aWNlcyB3aGVuIGl0IGhhcyB0aGUgcmlnaHQgZGVzY3JpcHRpb25zLCBidXQgdGhvc2UgZGVzY3JpcHRpb25zIGFyZSBvZnRlbiBtaXNzaW5nIGZvciBzcGVjaWFsaXplZCBvciBsZXNzIGNvbW1vbiBTb0MgZXRoZXJuZXQgZHJpdmVycy4gVW5sZXNzIGl0JiMzOTtzIGEgdmVyeSBwcmV2YWxlbnQgZHJpdmVyIG9yIHNvbWVvbmUmIzM5O3Mgc3BlY2lmaWNhbGx5IGFkZGVkIHN1cHBvcnQgZm9yIGl0LCB3ZSYjMzk7cmUgbGlrZWx5IGdvaW5nIHRvIGJlIGluIHRoZSBkYXJrLiBNeSBmaXJzdCBtb3ZlIGhlcmUgaXMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgU3l6a2FsbGVyIGhhcyBhbnkgYnVpbHQtaW4gZGVzY3JpcHRpb25zIGZvciB0aGUgQWlyb2hhIHBsYXRmb3JtLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE4OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWlyb2hhJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7c3lzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE4OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzI5CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNzI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQWlyb2hhIEV0aGVybmV0IERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gYXNzZXNzIHRoaXMgcGF0Y2ggZm9yIGZ1enppbmcgd29ydGhpbmVzcy4gVGhlIGltbWVkaWF0ZSBjaGFsbGVuZ2UgaXMgdGhhdCBJIGNhbiYjMzk7dCB1c2UgYGdyZXBwZXJgIHRvIHNlYXJjaCB0aGUgYHN5cy9gIGRpcmVjdG9yeS4gVGhhdCYjMzk7cyBhIGdpdmVuLiBUaGUgZG9jdW1lbnRhdGlvbiBleHBsaWNpdGx5IHByb2hpYml0cyBpdCBiZWNhdXNlIGBzeXprYWxsZXJgIGRlc2NyaXB0aW9ucyBhbmQgc3l6XyBzeXNjYWxscyBhcmVuJiMzOTt0IGFjdHVhbGx5IGtlcm5lbCBjb2RlLiBJdCBsb29rcyBsaWtlIEkgbmVlZCB0byBlaXRoZXIgdXNlIGByZWFkLWZpbGVgIG9yIGBjb2Rlc2VhcmNoLWRpci1pbmRleGAsIGJ1dCBob2xkIG9uLi4uIHRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmaWNhbGx5IHNheSBJIHNob3VsZCBiZSB1c2luZyBge3sudG9vbFJlYWREZXNjcmlwdGlvbn19YCBpbnN0ZWFkLiAqV2FpdCBhIHNlY29uZCEqIFRoZXJlIGlzbiYjMzk7dCBhIGB0b29sUmVhZERlc2NyaXB0aW9uYCB0b29sIGluIHRoZSBsaXN0LiBUaGlzIGlzIGZydXN0cmF0aW5nLiBPa2F5LCBJJiMzOTttIGxlZnQgd2l0aCB0aGUgb3RoZXIgdG9vbHMuIEkgY2FuJiMzOTt0IGNoZWNrIHN5emthbGxlciBkZXNjcmlwdGlvbnMuCgpBbHJpZ2h0LCByZWZvY3VzLiBUaGUgaW5zdHJ1Y3Rpb25zIHRlbGwgbWUgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIHVuZGVyIHNwZWNpZmljIGNpcmN1bXN0YW5jZXMuIExldCBtZSBzZWUuLi4gRG9jdW1lbnRhdGlvbi9LY29uZmlnIGNoYW5nZXMsIGNvbW1lbnRzLCBkZWNvcmF0aXZlIGNoYW5nZXMsIGNvbnN0YW50cy9tYWNyb3Mgd2l0aG91dCBmdW5jdGlvbmFsIGltcGFjdCwgYW5kICpjcnVjaWFsbHkqIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UuIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIEdQVSBkcml2ZXJzIHRoYXQgbmVlZCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gUUVNVSwgb3IgYC5yZW1vdmUvLnNodXRkb3duYCBjYWxsYmFja3MgYXJlIGFsc28gb3V0LgoKVGhpcyBpcyBhbiBBaXJvaGEgU29DLXNwZWNpZmljIGV0aGVybmV0IGRyaXZlci4gSXQgcmVxdWlyZXMgYSBwaHlzaWNhbCBBaXJvaGEgU29DIG9yIGFuIEFpcm9oYSBlbXVsYXRvciB0byBmdW5jdGlvbi4gU3RhbmRhcmQgUUVNVSBkb2VzbiYjMzk7dCBlbXVsYXRlIEFpcm9oYSBTb0NzLiBJdCYjMzk7cyAqbm90KiBhIFBDSWUgc3dpdGNoIG9yIFNtYXJ0TklDLCBzbyB0aGF0IGlzbiYjMzk7dCB0aGUgcHJvYmxlbS4gQnV0IGl0IGFic29sdXRlbHkgZmFsbHMgdW5kZXIgJiMzNDtDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUmIzM0Oy4gVGhlc2Uga2luZHMgb2YgcGxhdGZvcm0gZGV2aWNlcywgbGlrZSBBaXJvaGEgRU43NTgxLCBhcmUganVzdCBub3QgZW11bGF0ZWQgYnkgc3RhbmRhcmQgUUVNVS4gVGhhdCBtZWFucyB0aGUgZHJpdmVyJiMzOTtzIGBwcm9iZWAgZnVuY3Rpb24sIHdoaWNoIGlzIHRoZSBlbnRyeSBwb2ludCwgd2lsbCBuZXZlciBiZSBjYWxsZWQuIE5vbmUgb2YgdGhlIGNvZGUgbW9kaWZpZWQgaW4gdGhpcyBwYXRjaCB3aWxsIGV2ZXIgYmUgZXhlY3V0ZWQuCgpMZXQmIzM5O3MgZG8gYSBxdWljayBkb3VibGUtY2hlY2ssIHRob3VnaC4gUGxhdGZvcm0gZHJpdmVycyBiaW5kIHRvIGRldmljZXMgdmlhIERldmljZSBUcmVlIG9yIEFDUEkuIFVubGVzcyBRRU1VIGlzIGNvbmZpZ3VyZWQgdG8gZW11bGF0ZSBhIG1hY2hpbmUgdGhhdCAqaW5jbHVkZXMqIGFuIEFpcm9oYSBkZXZpY2UgaW4gaXRzIERULCBpdCB3b24mIzM5O3QgZXhpc3QuIFN0YW5kYXJkIHN5emthbGxlciB1c2VzIGdlbmVyaWMgbWFjaGluZSB0eXBlcywgbGlrZSBgcTM1YCBmb3IgeDg2XzY0IG9yIGB2aXJ0YCBmb3IgYXJtNjQuIFRob3NlIGRvbiYjMzk7dCBtb2RlbCBBaXJvaGEgZXRoZXJuZXQgTUFDcy4gVGhlIGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgUUVNVS4KCkkgbmVlZCB0byB2ZXJpZnkgdGhlIGRyaXZlciYjMzk7cyBjb21wYXRpYmxlIHN0cmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTg6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b2ZfZGV2aWNlX2lkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jPTM5MzU9c3RhdGljIGNvbnN0IHN0cnVjdCBhaXJvaGFfZXRoX3NvY19kYXRhIGFuNzU4M19zb2NfZGF0YSA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTM5NDYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jOjM5NDc6c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgb2ZfYWlyb2hhX21hdGNoW10gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTM5NDgtXHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7YWlyb2hhLGVuNzU4MS1ldGhcJiMzNDssIC5kYXRhID0gXHUwMDI2ZW43NTgxX3NvY19kYXRhIH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE4OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MjIzCgkJCQkJCQlvdXRwdXQ6IDEyNQoJCQkJCQkJdGhvdWdodHM6IDE0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgQXNzZXNzbWVudCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBsb29rZWQgaW50byB0aGlzIGRyaXZlciwgYGFpcm9oYSxlbjc1ODEtZXRoYCBhbmQgYGFpcm9oYSxhbjc1ODMtZXRoYC4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhlc2UgYXJlICpzcGVjaWZpYyogQWlyb2hhIFNvQyBkcml2ZXJzLCB0YXJnZXRpbmcgdGhvc2UgcGFydGljdWxhciBoYXJkd2FyZSBwbGF0Zm9ybXMuIEFuZCB0aGF0JiMzOTtzIHRoZSBrZXkgaXNzdWUuIEkga25vdyB0aGF0IFFFTVUsIHRoZSBzdGFuZGFyZCBlbXVsYXRvciBTeXprYWxsZXIgcmVsaWVzIG9uLCBkb2VzbiYjMzk7dCBhY3R1YWxseSBtb2RlbCBhbnkgQWlyb2hhIFNvQ3MuIFRoZXJlJiMzOTtzIG5vIEFpcm9oYSBtYWNoaW5lIHR5cGUgYXZhaWxhYmxlIHdpdGhpbiB0aGUgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudCB1c2VkIGJ5IFN5emthbGxlci4gVGhpcyBtZWFucywgcHJhY3RpY2FsbHkgc3BlYWtpbmcsIHRoYXQgdGhpcyBwYXJ0aWN1bGFyIGRyaXZlciBhbmQsIGJ5IGV4dGVuc2lvbiwgdGhlIG1vZGlmaWVkIGNvZGUgaW4gcXVlc3Rpb24sIGlzIHV0dGVybHkgdW5yZWFjaGFibGUgZHVyaW5nIGFueSBraW5kIG9mIGZ1enppbmcgcnVuIGluIGEgdmlydHVhbGl6ZWQgc2V0dGluZy4gVGhlIGNvZGUganVzdCB3b24mIzM5O3QgYmUgdHJpZ2dlcmVkLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBmbGFnIGl0IGFzIHN1Y2guIEkmIzM5O20gZ29pbmcgdG8gc2V0IFdvcnRoRnV6emluZz1mYWxzZSBiZWNhdXNlIGl0IGlzIGFuIFNvQy1zcGVjaWZpYyBwbGF0Zm9ybSBkcml2ZXIgKEFpcm9oYSBFdGhlcm5ldCkgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoYXQsIGFzIEkgc2VlIGl0LCBtYWtlcyB0aGUgY29kZSB1bnJlYWNoYWJsZSBpbiBhbnkgdmlydHVhbGl6ZWQgdGVzdCBlbnZpcm9ubWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTg6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQWlyb2hhIFNvQyBHaWdhYml0IEV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhKS4gVGhpcyBpcyBhIHBsYXRmb3JtIGRyaXZlciBmb3Igc3BlY2lmaWMgQWlyb2hhIFNvQ3MgKGUuZy4sIGVuNzU4MSwgYW43NTgzKSB3aGljaCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50cy4gQmVjYXVzZSB0aGUgaGFyZHdhcmUgaXMgbm90IHByZXNlbnQgb3IgZW11bGF0ZWQsIHRoZSBkcml2ZXIgd2lsbCBub3QgcHJvYmUgYW5kIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFpcm9oYSBTb0MgR2lnYWJpdCBFdGhlcm5ldCBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYSkuIFRoaXMgaXMgYSBwbGF0Zm9ybSBkcml2ZXIgZm9yIHNwZWNpZmljIEFpcm9oYSBTb0NzIChlLmcuLCBlbjc1ODEsIGFuNzU4Mykgd2hpY2ggYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudHMuIEJlY2F1c2UgdGhlIGhhcmR3YXJlIGlzIG5vdCBwcmVzZW50IG9yIGVtdWxhdGVkLCB0aGUgZHJpdmVyIHdpbGwgbm90IHByb2JlIGFuZCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxODo1Mzo0MC4yNDM3NTMwNDhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTExODI0NzE0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFpcm9oYSBTb0MgR2lnYWJpdCBFdGhlcm5ldCBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYSkuIFRoaXMgaXMgYSBwbGF0Zm9ybSBkcml2ZXIgZm9yIHNwZWNpZmljIEFpcm9oYSBTb0NzIChlLmcuLCBlbjc1ODEsIGFuNzU4Mykgd2hpY2ggYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudHMuIEJlY2F1c2UgdGhlIGhhcmR3YXJlIGlzIG5vdCBwcmVzZW50IG9yIGVtdWxhdGVkLCB0aGUgZHJpdmVyIHdpbGwgbm90IHByb2JlIGFuZCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE4OjUzOjQwLjI0Mzc2Mzg5OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc4NzcwOTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNGNhYmNiYTM0ZDAwMzBhNzdlN2E5NTNlZmVhMGNhNTM1Y2ZlM2QwOVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIEp1bCAyNiAxODo1MzozOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguY1xcbmluZGV4IDc5NDE4ZTY4MmY3MWYzLi5kYmE3YzUyYzA4OTY5MCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguY1xcbkBAIC05MzQsNyArOTM0LDcgQEAgc3RhdGljIHZvaWQgYWlyb2hhX3FkbWFfd2FrZV9uZXRkZXZfdHhxcyhzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxKVxcbiBcXHRcXHRcXHRpZiAoIWRldilcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRcXHRcXHRpZiAoZGV2LVxcdTAwM2VxZG1hICE9IHFkbWEpXFxuK1xcdFxcdFxcdGlmIChyY3VfYWNjZXNzX3BvaW50ZXIoZGV2LVxcdTAwM2VxZG1hKSAhPSBxZG1hKVxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdFxcdG5ldGRldiA9IG5ldGRldl9mcm9tX3ByaXYoZGV2KTtcXG5AQCAtMTAzOCwxMCArMTAzOCwxNiBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3R4X25hcGlfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpXFxuIFxcdFxcdHEtXFx1MDAzZXF1ZXVlZC0tO1xcbiBcXG4gXFx0XFx0aWYgKHNrYikge1xcbitcXHRcXHRcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KHNrYi1cXHUwMDNlZGV2KTtcXG4rXFx0XFx0XFx0dTE2IHFpZHggPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTtcXG4gXFx0XFx0XFx0c3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxO1xcbiBcXG4gXFx0XFx0XFx0dHhxID0gc2tiX2dldF90eF9xdWV1ZShza2ItXFx1MDAzZWRldiwgc2tiKTtcXG4rXFxuK1xcdFxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2ZGV2LVxcdTAwM2V0eHFfbG9ja1txaWR4XSk7XFxuIFxcdFxcdFxcdG5ldGRldl90eF9jb21wbGV0ZWRfcXVldWUodHhxLCAxLCBza2ItXFx1MDAzZWxlbik7XFxuK1xcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZkZXYtXFx1MDAzZXR4cV9sb2NrW3FpZHhdKTtcXG4rXFxuIFxcdFxcdFxcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XFxuIFxcdFxcdH1cXG4gXFxuQEAgLTE5MDUsOCArMTkxMSw4IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIHtcXG4gXFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbiBcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZGV2LVxcdTAwM2Vwb3J0O1xcbi1cXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtXFx1MDAzZXFkbWE7XFxuIFxcdHUzMiBwc2VfcG9ydCA9IEZFX1BTRV9QT1JUX1BQRTE7XFxuK1xcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcXG4gXFx0aW50IGVycjtcXG4gXFxuIFxcdG5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMobmV0ZGV2KTtcXG5AQCAtMTkxNCw2ICsxOTIwLDcgQEAgc3RhdGljIGludCBhaXJvaGFfZGV2X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuK1xcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xcbiBcXHRpZiAobmV0ZGV2X3VzZXNfZHNhKG5ldGRldikpXFxuIFxcdFxcdGFpcm9oYV9mZV9zZXQocWRtYS1cXHUwMDNlZXRoLCBSRUdfR0RNX0lOR1JFU1NfQ0ZHKHBvcnQtXFx1MDAzZWlkKSxcXG4gXFx0XFx0XFx0ICAgICAgR0RNX1NUQUdfRU5fTUFTSyk7XFxuQEAgLTE5MzcsNyArMTk0NCw2IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIHtcXG4gXFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbiBcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZGV2LVxcdTAwM2Vwb3J0O1xcbi1cXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtXFx1MDAzZXFkbWE7XFxuIFxcbiBcXHRuZXRpZl90eF9kaXNhYmxlKG5ldGRldik7XFxuIFxcdGFpcm9oYV9zZXRfdmlwX2Zvcl9nZG1fcG9ydChkZXYsIGZhbHNlKTtcXG5AQCAtMTk0NSw3ICsxOTUxLDcgQEAgc3RhdGljIGludCBhaXJvaGFfZGV2X3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4gXFx0aWYgKC0tcG9ydC1cXHUwMDNldXNlcnMpXFxuIFxcdFxcdGFpcm9oYV9wcGVfc2V0X3htaXRfZnJhbWVfc2l6ZShkZXYpO1xcbiBcXHRlbHNlXFxuLVxcdFxcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhxZG1hLVxcdTAwM2VldGgsXFxuK1xcdFxcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhkZXYtXFx1MDAzZWV0aCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIFJFR19HRE1fRldEX0NGRyhwb3J0LVxcdTAwM2VpZCksXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBGRV9QU0VfUE9SVF9EUk9QKTtcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTIwMjgsNiArMjAzNCw1MyBAQCBzdGF0aWMgaW50IGFpcm9oYV9lbmFibGVfZ2RtMl9sb29wYmFjayhzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgYWlyb2hhX2Rpc2FibGVfZ2RtMl9sb29wYmFjayhzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcXG4re1xcbitcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZGV2LVxcdTAwM2Vwb3J0O1xcbitcXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gZGV2LVxcdTAwM2VldGg7XFxuK1xcdGludCBpLCBzcmNfcG9ydDtcXG4rXFx0dTMyIHBzZV9wb3J0O1xcbitcXG4rXFx0c3JjX3BvcnQgPSBldGgtXFx1MDAzZXNvYy1cXHUwMDNlb3BzLmdldF9zcG9ydChkZXYtXFx1MDAzZXBvcnQsIGRldi1cXHUwMDNlbmJxKTtcXG4rXFx0aWYgKHNyY19wb3J0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHNyY19wb3J0O1xcbitcXG4rXFx0YWlyb2hhX2ZlX2NsZWFyKGV0aCxcXG4rXFx0XFx0XFx0UkVHX1NQX0RGVF9DUE9SVChzcmNfcG9ydCBcXHUwMDNlXFx1MDAzZSBmbHMoU1BfQ1BPUlRfREZUX01BU0spKSxcXG4rXFx0XFx0XFx0U1BfQ1BPUlRfTUFTSyhzcmNfcG9ydCBcXHUwMDI2IFNQX0NQT1JUX0RGVF9NQVNLKSk7XFxuK1xcbitcXHRhaXJvaGFfZmVfc2V0KGV0aCwgUkVHX0dETV9GV0RfQ0ZHKEFJUk9IQV9HRE0yX0lEWCksXFxuK1xcdFxcdCAgICAgIEdETV9TVFJJUF9DUkNfTUFTSyk7XFxuK1xcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhldGgsIFJFR19HRE1fRldEX0NGRyhBSVJPSEFfR0RNMl9JRFgpLFxcbitcXHRcXHRcXHRcXHQgICAgRkVfUFNFX1BPUlRfRFJPUCk7XFxuK1xcdGFpcm9oYV9mZV9jbGVhcihldGgsIFJFR19HRE1fTFBCS19DRkcoQUlST0hBX0dETTJfSURYKSxcXG4rXFx0XFx0XFx0TFBCS19DSEFOX01BU0sgfCBMUEJLX01PREVfTUFTSyB8IExQQktfRU5fTUFTSyk7XFxuK1xcdHBzZV9wb3J0ID0gYWlyb2hhX3BwZV9pc19lbmFibGVkKGV0aCwgMSkgPyBGRV9QU0VfUE9SVF9QUEUyXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCA6IEZFX1BTRV9QT1JUX1BQRTE7XFxuK1xcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhldGgsIFJFR19HRE1fRldEX0NGRyhBSVJPSEFfR0RNMl9JRFgpLFxcbitcXHRcXHRcXHRcXHQgICAgcHNlX3BvcnQpO1xcbitcXG4rXFx0YWlyb2hhX2ZlX3JtdyhldGgsIFJFR19GRV9XQU5fUE9SVCwgV0FOMF9NQVNLLFxcbitcXHRcXHQgICAgICBGSUVMRF9QUkVQKFdBTjBfTUFTSywgQUlST0hBX0dETTJfSURYKSk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZXRoLVxcdTAwM2Vzb2MtXFx1MDAzZW51bV9wcGU7IGkrKylcXG4rXFx0XFx0YWlyb2hhX2ZlX2NsZWFyKGV0aCwgUkVHX1BQRV9ERlRfQ1BPUlQoaSwgQUlST0hBX0dETTJfSURYKSxcXG4rXFx0XFx0XFx0XFx0REZUX0NQT1JUX01BU0soQUlST0hBX0dETTJfSURYKSk7XFxuK1xcbitcXHQvKiBFbmFibGUgVklQIGFuZCBJRkMgZm9yIEdETTIgKi9cXG4rXFx0YWlyb2hhX2ZlX3NldChldGgsIFJFR19GRV9WSVBfUE9SVF9FTiwgQklUKEFJUk9IQV9HRE0yX0lEWCkpO1xcbitcXHRhaXJvaGFfZmVfc2V0KGV0aCwgUkVHX0ZFX0lGQ19QT1JUX0VOLCBCSVQoQUlST0hBX0dETTJfSURYKSk7XFxuK1xcbitcXHRpZiAocG9ydC1cXHUwMDNlaWQgPT0gQUlST0hBX0dETTRfSURYIFxcdTAwMjZcXHUwMDI2IGFpcm9oYV9pc183NTgxKGV0aCkpIHtcXG4rXFx0XFx0dTMyIG1hc2sgPSBGQ19JRF9PRl9TUkNfUE9SVF9NQVNLKGRldi1cXHUwMDNlbmJxKTtcXG4rXFxuK1xcdFxcdGFpcm9oYV9mZV9ybXcoZXRoLCBSRUdfU1JDX1BPUlRfRkNfTUFQNiwgbWFzayxcXG4rXFx0XFx0XFx0ICAgICAgRkNfTUFQNl9ERUZfVkFMVUUgXFx1MDAyNiBtYXNrKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKlxcbiBhaXJvaGFfZ2V0X3dhbl9nZG1fZGV2KHN0cnVjdCBhaXJvaGFfZXRoICpldGgpXFxuIHtcXG5AQCAtMjA1NCwxNSArMjEwNywzNyBAQCBhaXJvaGFfZ2V0X3dhbl9nZG1fZGV2KHN0cnVjdCBhaXJvaGFfZXRoICpldGgpXFxuIHN0YXRpYyB2b2lkIGFpcm9oYV9kZXZfc2V0X3FkbWEoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpXFxuIHtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IG5ldGRldl9mcm9tX3ByaXYoZGV2KTtcXG4rXFx0c3RydWN0IGFpcm9oYV9xZG1hICpjdXJfcWRtYSwgKnFkbWE7XFxuIFxcdHN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBkZXYtXFx1MDAzZWV0aDtcXG4tXFx0aW50IHBwZV9pZDtcXG4rXFx0aW50IGksIHBwZV9pZDtcXG4gXFxuIFxcdC8qIFFETUEwIGlzIHVzZWQgZm9yIGxhbiBwb3J0cyB3aGlsZSBRRE1BMSBpcyB1c2VkIGZvciBXQU4gcG9ydHMgKi9cXG4tXFx0ZGV2LVxcdTAwM2VxZG1hID0gXFx1MDAyNmV0aC1cXHUwMDNlcWRtYVshYWlyb2hhX2lzX2xhbl9nZG1fZGV2KGRldildO1xcbi1cXHRuZXRkZXYtXFx1MDAzZWlycSA9IGRldi1cXHUwMDNlcWRtYS1cXHUwMDNlaXJxX2JhbmtzWzBdLmlycTtcXG4rXFx0cWRtYSA9IFxcdTAwMjZldGgtXFx1MDAzZXFkbWFbIWFpcm9oYV9pc19sYW5fZ2RtX2RldihkZXYpXTtcXG4rXFx0Y3VyX3FkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xcbitcXG4rXFx0aWYgKGN1cl9xZG1hKVxcbitcXHRcXHRuZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTtcXG4rXFxuK1xcdHJjdV9hc3NpZ25fcG9pbnRlcihkZXYtXFx1MDAzZXFkbWEsIHFkbWEpO1xcbitcXHRuZXRkZXYtXFx1MDAzZWlycSA9IHFkbWEtXFx1MDAzZWlycV9iYW5rc1swXS5pcnE7XFxuK1xcdHN5bmNocm9uaXplX3JjdSgpO1xcbiBcXG4gXFx0cHBlX2lkID0gIWFpcm9oYV9pc19sYW5fZ2RtX2RldihkZXYpIFxcdTAwMjZcXHUwMDI2IGFpcm9oYV9wcGVfaXNfZW5hYmxlZChldGgsIDEpO1xcbiBcXHRhaXJvaGFfcHBlX3NldF9jcHVfcG9ydChkZXYsIHBwZV9pZCwgYWlyb2hhX2dldF9mZV9wb3J0KGRldikpO1xcbitcXG4rXFx0LyogU2VlZCBxb3Nfc3RhdHMgYmFzZWxpbmVzIHdpdGggdGhlIG5ldyBRRE1BIGJsb2NrJ3MgY3VycmVudFxcbitcXHQgKiBjb3VudGVyIHZhbHVlcyB0byBhdm9pZCBhIHNwdXJpb3VzIHNwaWtlIG9uIHRoZSBmaXJzdCBzdGF0c1xcbitcXHQgKiBxdWVyeSBhZnRlciBpbml0IG9yIG1pZ3JhdGlvbi5cXG4rXFx0ICovXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKGRldi1cXHUwMDNlcW9zX3N0YXRzKTsgaSsrKSB7XFxuK1xcdFxcdGRldi1cXHUwMDNlcW9zX3N0YXRzW2ldLmNwdV90eF9wYWNrZXRzID1cXG4rXFx0XFx0XFx0YWlyb2hhX3FkbWFfcnIocWRtYSwgUkVHX0NOVFJfVkFMKGkgXFx1MDAzY1xcdTAwM2MgMSkpO1xcbitcXHRcXHRkZXYtXFx1MDAzZXFvc19zdGF0c1tpXS5md2RfdHhfcGFja2V0cyA9XFxuK1xcdFxcdFxcdGFpcm9oYV9xZG1hX3JyKHFkbWEsIFJFR19DTlRSX1ZBTCgoaSBcXHUwMDNjXFx1MDAzYyAxKSArIDEpKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGN1cl9xZG1hKVxcbitcXHRcXHRuZXRpZl90eF93YWtlX2FsbF9xdWV1ZXMobmV0ZGV2KTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBhaXJvaGFfZGV2X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG5AQCAtMjA3OCw3ICsyMTUzLDcgQEAgc3RhdGljIGludCBhaXJvaGFfZGV2X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4gXFx0XFx0ZmFsbHRocm91Z2g7XFxuIFxcdGNhc2UgQUlST0hBX0dETTJfSURYOlxcbiBcXHRcXHQvKiBHRE0yIGlzIGFsd2F5cyB1c2VkIGFzIHdhbiAqL1xcbi1cXHRcXHRkZXYtXFx1MDAzZWZsYWdzIHw9IEFJUk9IQV9QUklWX0ZfV0FOO1xcbitcXHRcXHRzZXRfYml0KEFJUk9IQV9ERVZfRl9XQU4sIFxcdTAwMjZkZXYtXFx1MDAzZWZsYWdzKTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdGJyZWFrO1xcbkBAIC0yMjE3LDkgKzIyOTIsOSBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIHtcXG4gXFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbi1cXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtXFx1MDAzZXFkbWE7XFxuIFxcdHUzMiBucl9mcmFncywgdGFnLCBtc2cwLCBtc2cxLCBsZW47XFxuIFxcdHN0cnVjdCBhaXJvaGFfcXVldWVfZW50cnkgKmU7XFxuK1xcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcXG4gXFx0c3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxO1xcbiBcXHRzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxO1xcbiBcXHRMSVNUX0hFQUQodHhfbGlzdCk7XFxuQEAgLTIyMjgsNiArMjMwMyw4IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBhaXJvaGFfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0dTE2IGluZGV4O1xcbiBcXHR1OCBmcG9ydDtcXG4gXFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0cWRtYSA9IHJjdV9kZXJlZmVyZW5jZShkZXYtXFx1MDAzZXFkbWEpO1xcbiBcXHRxaWQgPSBhaXJvaGFfcWRtYV9nZXRfdHhxKHFkbWEsIHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpKTtcXG4gXFx0dGFnID0gYWlyb2hhX2dldF9kc2FfdGFnKHNrYiwgbmV0ZGV2KTtcXG4gXFxuQEAgLTIyNzcsNiArMjM1NCw4IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBhaXJvaGFfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0bmV0aWZfdHhfc3RvcF9xdWV1ZSh0eHEpO1xcbiBcXHRcXHRxLVxcdTAwM2V0eHFfc3RvcHBlZCA9IHRydWU7XFxuIFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZxLVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcbiBcXHRcXHRyZXR1cm4gTkVUREVWX1RYX0JVU1k7XFxuIFxcdH1cXG4gXFxuQEAgLTIzNDIsNiArMjQyMSw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBhaXJvaGFfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0XFx0RklFTERfUFJFUChUWF9SSU5HX0NQVV9JRFhfTUFTSywgaW5kZXgpKTtcXG4gXFxuIFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZxLVxcdTAwM2Vsb2NrKTtcXG4rXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcbiBcXHRyZXR1cm4gTkVUREVWX1RYX09LO1xcbiBcXG5AQCAtMjM1NCw2ICsyNDM0LDcgQEAgc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBlcnJvcjpcXG4gXFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcXG4gXFx0bmV0ZGV2LVxcdTAwM2VzdGF0cy50eF9kcm9wcGVkKys7XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXG4gXFx0cmV0dXJuIE5FVERFVl9UWF9PSztcXG4gfVxcbkBAIC0yNDMzLDE3ICsyNTE0LDE5IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfc2V0X2NoYW5fdHhfc2NoZWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFx0XFx0XFx0XFx0XFx0IGNvbnN0IHUxNiAqd2VpZ2h0cywgdTggbl93ZWlnaHRzKVxcbiB7XFxuIFxcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xcbiBcXHRpbnQgaTtcXG4gXFxuK1xcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQUlST0hBX05VTV9RT1NfUVVFVUVTOyBpKyspXFxuLVxcdFxcdGFpcm9oYV9xZG1hX2NsZWFyKGRldi1cXHUwMDNlcWRtYSwgUkVHX1FVRVVFX0NMT1NFX0NGRyhjaGFubmVsKSxcXG4rXFx0XFx0YWlyb2hhX3FkbWFfY2xlYXIocWRtYSwgUkVHX1FVRVVFX0NMT1NFX0NGRyhjaGFubmVsKSxcXG4gXFx0XFx0XFx0XFx0ICBUWFFfRElTQUJMRV9DSEFOX1FVRVVFX01BU0soY2hhbm5lbCwgaSkpO1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5fd2VpZ2h0czsgaSsrKSB7XFxuIFxcdFxcdHUzMiBzdGF0dXM7XFxuIFxcdFxcdGludCBlcnI7XFxuIFxcbi1cXHRcXHRhaXJvaGFfcWRtYV93cihkZXYtXFx1MDAzZXFkbWEsIFJFR19UWFdSUl9XRUlHSFRfQ0ZHLFxcbitcXHRcXHRhaXJvaGFfcWRtYV93cihxZG1hLCBSRUdfVFhXUlJfV0VJR0hUX0NGRyxcXG4gXFx0XFx0XFx0ICAgICAgIFRXUlJfUldfQ01EX01BU0sgfFxcbiBcXHRcXHRcXHQgICAgICAgRklFTERfUFJFUChUV1JSX0NIQU5fSURYX01BU0ssIGNoYW5uZWwpIHxcXG4gXFx0XFx0XFx0ICAgICAgIEZJRUxEX1BSRVAoVFdSUl9RVUVVRV9JRFhfTUFTSywgaSkgfFxcbkBAIC0yNDUxLDEyICsyNTM0LDEyIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfc2V0X2NoYW5fdHhfc2NoZWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFx0XFx0ZXJyID0gcmVhZF9wb2xsX3RpbWVvdXQoYWlyb2hhX3FkbWFfcnIsIHN0YXR1cyxcXG4gXFx0XFx0XFx0XFx0XFx0c3RhdHVzIFxcdTAwMjYgVFdSUl9SV19DTURfRE9ORSxcXG4gXFx0XFx0XFx0XFx0XFx0VVNFQ19QRVJfTVNFQywgMTAgKiBVU0VDX1BFUl9NU0VDLFxcbi1cXHRcXHRcXHRcXHRcXHR0cnVlLCBkZXYtXFx1MDAzZXFkbWEsIFJFR19UWFdSUl9XRUlHSFRfQ0ZHKTtcXG4rXFx0XFx0XFx0XFx0XFx0dHJ1ZSwgcWRtYSwgUkVHX1RYV1JSX1dFSUdIVF9DRkcpO1xcbiBcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHR9XFxuIFxcbi1cXHRhaXJvaGFfcWRtYV9ybXcoZGV2LVxcdTAwM2VxZG1hLCBSRUdfQ0hBTl9RT1NfTU9ERShjaGFubmVsIFxcdTAwM2VcXHUwMDNlIDMpLFxcbitcXHRhaXJvaGFfcWRtYV9ybXcocWRtYSwgUkVHX0NIQU5fUU9TX01PREUoY2hhbm5lbCBcXHUwMDNlXFx1MDAzZSAzKSxcXG4gXFx0XFx0XFx0Q0hBTl9RT1NfTU9ERV9NQVNLKGNoYW5uZWwpLFxcbiBcXHRcXHRcXHRfX2ZpZWxkX3ByZXAoQ0hBTl9RT1NfTU9ERV9NQVNLKGNoYW5uZWwpLCBtb2RlKSk7XFxuIFxcbkBAIC0yNTIwLDE3ICsyNjAzLDIyIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfZ2V0X3R4X2V0c19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgY2hhbm5lbCxcXG4gXFx0XFx0XFx0XFx0XFx0c3RydWN0IHRjX2V0c19xb3B0X29mZmxvYWQgKm9wdClcXG4ge1xcbiBcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuLVxcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cXHUwMDNlcWRtYTtcXG4rXFx0dTMyIGNwdV90eF9wYWNrZXRzLCBmd2RfdHhfcGFja2V0cztcXG4rXFx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xcbitcXHR1NjQgdHhfcGFja2V0cztcXG4gXFxuLVxcdHU2NCBjcHVfdHhfcGFja2V0cyA9IGFpcm9oYV9xZG1hX3JyKHFkbWEsIFJFR19DTlRSX1ZBTChjaGFubmVsIFxcdTAwM2NcXHUwMDNjIDEpKTtcXG4tXFx0dTY0IGZ3ZF90eF9wYWNrZXRzID0gYWlyb2hhX3FkbWFfcnIocWRtYSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIFJFR19DTlRSX1ZBTCgoY2hhbm5lbCBcXHUwMDNjXFx1MDAzYyAxKSArIDEpKTtcXG4tXFx0dTY0IHR4X3BhY2tldHMgPSAoY3B1X3R4X3BhY2tldHMgLSBkZXYtXFx1MDAzZWNwdV90eF9wYWNrZXRzKSArXFxuLVxcdFxcdFxcdCAoZndkX3R4X3BhY2tldHMgLSBkZXYtXFx1MDAzZWZ3ZF90eF9wYWNrZXRzKTtcXG4rXFx0cWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XFxuK1xcdGNwdV90eF9wYWNrZXRzID0gYWlyb2hhX3FkbWFfcnIocWRtYSwgUkVHX0NOVFJfVkFMKGNoYW5uZWwgXFx1MDAzY1xcdTAwM2MgMSkpO1xcbitcXHRmd2RfdHhfcGFja2V0cyA9IGFpcm9oYV9xZG1hX3JyKHFkbWEsXFxuK1xcdFxcdFxcdFxcdFxcdFJFR19DTlRSX1ZBTCgoY2hhbm5lbCBcXHUwMDNjXFx1MDAzYyAxKSArIDEpKTtcXG4rXFx0dHhfcGFja2V0cyA9ICh1MzIpKGNwdV90eF9wYWNrZXRzIC1cXG4rXFx0XFx0XFx0ICAgZGV2LVxcdTAwM2Vxb3Nfc3RhdHNbY2hhbm5lbF0uY3B1X3R4X3BhY2tldHMpO1xcbitcXHR0eF9wYWNrZXRzICs9ICh1MzIpKGZ3ZF90eF9wYWNrZXRzIC1cXG4rXFx0XFx0XFx0ICAgIGRldi1cXHUwMDNlcW9zX3N0YXRzW2NoYW5uZWxdLmZ3ZF90eF9wYWNrZXRzKTtcXG4gXFxuIFxcdF9ic3RhdHNfdXBkYXRlKG9wdC1cXHUwMDNlc3RhdHMuYnN0YXRzLCAwLCB0eF9wYWNrZXRzKTtcXG4tXFx0ZGV2LVxcdTAwM2VjcHVfdHhfcGFja2V0cyA9IGNwdV90eF9wYWNrZXRzO1xcbi1cXHRkZXYtXFx1MDAzZWZ3ZF90eF9wYWNrZXRzID0gZndkX3R4X3BhY2tldHM7XFxuK1xcdGRldi1cXHUwMDNlcW9zX3N0YXRzW2NoYW5uZWxdLmNwdV90eF9wYWNrZXRzID0gY3B1X3R4X3BhY2tldHM7XFxuK1xcdGRldi1cXHUwMDNlcW9zX3N0YXRzW2NoYW5uZWxdLmZ3ZF90eF9wYWNrZXRzID0gZndkX3R4X3BhY2tldHM7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbkBAIC0yNzg1LDE2ICsyODczLDE4IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfc2V0X3R4X3JhdGVfbGltaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFx0XFx0XFx0XFx0XFx0IHUzMiBidWNrZXRfc2l6ZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuK1xcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcXG4gXFx0aW50IGksIGVycjtcXG4gXFxuK1xcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2M9IFRSVENNX1BFQUtfTU9ERTsgaSsrKSB7XFxuLVxcdFxcdGVyciA9IGFpcm9oYV9xZG1hX3NldF90cnRjbV9jb25maWcoZGV2LVxcdTAwM2VxZG1hLCBjaGFubmVsLFxcbitcXHRcXHRlcnIgPSBhaXJvaGFfcWRtYV9zZXRfdHJ0Y21fY29uZmlnKHFkbWEsIGNoYW5uZWwsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgIFJFR19FR1JFU1NfVFJUQ01fQ0ZHLCBpLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAhIXJhdGUsIFRSVENNX01FVEVSX01PREUpO1xcbiBcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXG4tXFx0XFx0ZXJyID0gYWlyb2hhX3FkbWFfc2V0X3RydGNtX3Rva2VuX2J1Y2tldChkZXYtXFx1MDAzZXFkbWEsIGNoYW5uZWwsXFxuK1xcdFxcdGVyciA9IGFpcm9oYV9xZG1hX3NldF90cnRjbV90b2tlbl9idWNrZXQocWRtYSwgY2hhbm5lbCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0IFJFR19FR1JFU1NfVFJUQ01fQ0ZHLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHQgaSwgcmF0ZSwgYnVja2V0X3NpemUpO1xcbiBcXHRcXHRpZiAoZXJyKVxcbkBAIC0yODMwLDExICsyOTIwLDEyIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3RjX2h0Yl9hbGxvY19sZWFmX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdHUzMiBjaGFubmVsID0gVENfSF9NSU4ob3B0LVxcdTAwM2VjbGFzc2lkKSAlIEFJUk9IQV9OVU1fUU9TX0NIQU5ORUxTO1xcbiBcXHRpbnQgZXJyLCBudW1fdHhfcXVldWVzID0gQUlST0hBX05VTV9UWF9SSU5HICsgY2hhbm5lbCArIDE7XFxuIFxcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4tXFx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LVxcdTAwM2VxZG1hO1xcbitcXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7XFxuIFxcbiBcXHQvKiBIZXJlIHdlIG5lZWQgdG8gY2hlY2sgdGhlIHJlcXVlc3RlZCBRRE1BIGNoYW5uZWwgaXMgbm90IGFscmVhZHlcXG4gXFx0ICogaW4gdXNlIGJ5IGFub3RoZXIgbmV0X2RldmljZSBydW5uaW5nIG9uIHRoZSBzYW1lIFFETUEgYmxvY2suXFxuIFxcdCAqL1xcbitcXHRxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcXG4gXFx0aWYgKHRlc3RfYW5kX3NldF9iaXQoY2hhbm5lbCwgcWRtYS1cXHUwMDNlcW9zX2NoYW5uZWxfbWFwKSkge1xcbiBcXHRcXHROTF9TRVRfRVJSX01TR19NT0Qob3B0LVxcdTAwM2VleHRhY2ssXFxuIFxcdFxcdFxcdFxcdCAgIFxcXCJxZG1hIHFvcyBjaGFubmVsIGFscmVhZHkgaW4gdXNlXFxcIik7XFxuQEAgLTI4NzAsNyArMjk2MSw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfc2V0X3J4X21ldGVyKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2LFxcbiBcXHRcXHRcXHRcXHQgICAgdTMyIHJhdGUsIHUzMiBidWNrZXRfc2l6ZSxcXG4gXFx0XFx0XFx0XFx0ICAgIGVudW0gdHJ0Y21fdW5pdF90eXBlIHVuaXRfdHlwZSlcXG4ge1xcbi1cXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtXFx1MDAzZXFkbWE7XFxuK1xcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XFxuIFxcdGludCBpO1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUocWRtYS1cXHUwMDNlcV9yeCk7IGkrKykge1xcbkBAIC0zMDQ1LDEwICszMTM2LDExIEBAIHN0YXRpYyB2b2lkIGFpcm9oYV90Y19yZW1vdmVfaHRiX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBxdWV1ZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuIFxcdGludCBudW1fdHhfcXVldWVzID0gQUlST0hBX05VTV9UWF9SSU5HO1xcbi1cXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtXFx1MDAzZXFkbWE7XFxuK1xcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcXG4gXFxuIFxcdGFpcm9oYV9xZG1hX3NldF90eF9yYXRlX2xpbWl0KG5ldGRldiwgcXVldWUsIDAsIDApO1xcbiBcXG4rXFx0cWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XFxuIFxcdGNsZWFyX2JpdChxdWV1ZSwgcWRtYS1cXHUwMDNlcW9zX2NoYW5uZWxfbWFwKTtcXG4gXFx0Y2xlYXJfYml0KHF1ZXVlLCBkZXYtXFx1MDAzZXFvc19zcV9ibWFwKTtcXG4gXFxuQEAgLTMwNzQsNiArMzE2Niw5OCBAQCBzdGF0aWMgaW50IGFpcm9oYV90Y19odGJfZGVsZXRlX2xlYWZfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGFpcm9oYV9kaXNhYmxlX3Fvc19mb3JfZ2RtMzQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4re1xcbitcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuK1xcdHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBkZXYtXFx1MDAzZXBvcnQ7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRpZiAocG9ydC1cXHUwMDNlaWQgIT0gQUlST0hBX0dETTNfSURYIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBwb3J0LVxcdTAwM2VpZCAhPSBBSVJPSEFfR0RNNF9JRFgpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGVyciA9IGFpcm9oYV9kaXNhYmxlX2dkbTJfbG9vcGJhY2soZGV2KTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0bmV0ZGV2X3dhcm4obmV0ZGV2LFxcbitcXHRcXHRcXHQgICAgXFxcImZhaWxlZCBkaXNhYmxpbmcgR0RNMiBsb29wYmFjazogJWRcXFxcblxcXCIsIGVycik7XFxuK1xcbitcXHRjbGVhcl9iaXQoQUlST0hBX0RFVl9GX1dBTiwgXFx1MDAyNmRldi1cXHUwMDNlZmxhZ3MpO1xcbitcXHRhaXJvaGFfZGV2X3NldF9xZG1hKGRldik7XFxuK1xcbitcXHRhaXJvaGFfc2V0X21hY2FkZHIoZGV2LCBuZXRkZXYtXFx1MDAzZWRldl9hZGRyKTtcXG4rXFx0YWlyb2hhX3BwZV9zZXRfeG1pdF9mcmFtZV9zaXplKGRldik7XFxuK1xcbitcXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKVxcbitcXHRcXHRhaXJvaGFfc2V0X2dkbV9wb3J0X2Z3ZF9jZmcoZGV2LVxcdTAwM2VldGgsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBSRUdfR0RNX0ZXRF9DRkcocG9ydC1cXHUwMDNlaWQpLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgRkVfUFNFX1BPUlRfUFBFMSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWlyb2hhX2VuYWJsZV9xb3NfZm9yX2dkbTM0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuK3tcXG4rXFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICp3YW5fZGV2LCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFx0c3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGRldi1cXHUwMDNlcG9ydDtcXG4rXFx0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IGRldi1cXHUwMDNlZXRoO1xcbitcXHRpbnQgZXJyID0gLUVCVVNZO1xcbitcXG4rXFx0aWYgKHBvcnQtXFx1MDAzZWlkICE9IEFJUk9IQV9HRE0zX0lEWCBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgcG9ydC1cXHUwMDNlaWQgIT0gQUlST0hBX0dETTRfSURYKSB7XFxuK1xcdFxcdC8qIEhXIFFvUyBpcyBhbHdheXMgc3VwcG9ydGVkIGJ5IEdETTEgYW5kIEdETTIgKi9cXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghYWlyb2hhX2lzX2xhbl9nZG1fZGV2KGRldikpIC8qIEFscmVhZHkgZW5hYmxlZCAqL1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNmZsb3dfb2ZmbG9hZF9tdXRleCk7XFxuK1xcbitcXHR3YW5fZGV2ID0gYWlyb2hhX2dldF93YW5fZ2RtX2RldihldGgpO1xcbitcXHRpZiAod2FuX2Rldikge1xcbitcXHRcXHRpZiAodGVzdF9iaXQoQUlST0hBX0RFVl9GX1RYX1FPUywgXFx1MDAyNndhbl9kZXYtXFx1MDAzZWZsYWdzKSB8fFxcbitcXHRcXHQgICAgd2FuX2Rldi1cXHUwMDNlcG9ydC1cXHUwMDNlaWQgPT0gQUlST0hBX0dETTJfSURYKSB7XFxuK1xcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdFxcdCAgIFxcXCJRb1MgY29uZmlndXJlZCBmb3IgV0FOIGRldmljZVxcXCIpO1xcbitcXHRcXHRcXHRnb3RvIGVycm9yX3VubG9jaztcXG4rXFx0XFx0fVxcbitcXHRcXHRhaXJvaGFfZGlzYWJsZV9xb3NfZm9yX2dkbTM0KG5ldGRldl9mcm9tX3ByaXYod2FuX2RldikpO1xcbitcXHR9XFxuK1xcbitcXHRzZXRfYml0KEFJUk9IQV9ERVZfRl9XQU4sIFxcdTAwMjZkZXYtXFx1MDAzZWZsYWdzKTtcXG4rXFx0YWlyb2hhX2Rldl9zZXRfcWRtYShkZXYpO1xcbitcXHRlcnIgPSBhaXJvaGFfZW5hYmxlX2dkbTJfbG9vcGJhY2soZGV2KTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBlcnJvcl9kaXNhYmxlX3dhbjtcXG4rXFxuK1xcdGVyciA9IGFpcm9oYV9zZXRfbWFjYWRkcihkZXYsIG5ldGRldi1cXHUwMDNlZGV2X2FkZHIpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGVycm9yX2Rpc2FibGVfbG9vcGJhY2s7XFxuK1xcbitcXHRhaXJvaGFfZGV2X3NldF94bWl0X2ZyYW1lX3NpemUobmV0ZGV2KTtcXG4rXFx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkge1xcbitcXHRcXHR1MzIgcHNlX3BvcnQ7XFxuK1xcbitcXHRcXHRwc2VfcG9ydCA9IGFpcm9oYV9wcGVfaXNfZW5hYmxlZChldGgsIDEpID8gRkVfUFNFX1BPUlRfUFBFMlxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgOiBGRV9QU0VfUE9SVF9QUEUxO1xcbitcXHRcXHRhaXJvaGFfc2V0X2dkbV9wb3J0X2Z3ZF9jZmcoZXRoLCBSRUdfR0RNX0ZXRF9DRkcocG9ydC1cXHUwMDNlaWQpLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgcHNlX3BvcnQpO1xcbitcXHR9XFxuK1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNmZsb3dfb2ZmbG9hZF9tdXRleCk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2Vycm9yX2Rpc2FibGVfbG9vcGJhY2s6XFxuK1xcdGFpcm9oYV9kaXNhYmxlX2dkbTJfbG9vcGJhY2soZGV2KTtcXG4rZXJyb3JfZGlzYWJsZV93YW46XFxuK1xcdGNsZWFyX2JpdChBSVJPSEFfREVWX0ZfV0FOLCBcXHUwMDI2ZGV2LVxcdTAwM2VmbGFncyk7XFxuK1xcdGFpcm9oYV9kZXZfc2V0X3FkbWEoZGV2KTtcXG4rZXJyb3JfdW5sb2NrOlxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNmZsb3dfb2ZmbG9hZF9tdXRleCk7XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IGFpcm9oYV90Y19odGJfZGVzdHJveShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG5AQCAtMzA4Miw2ICszMjY2LDggQEAgc3RhdGljIGludCBhaXJvaGFfdGNfaHRiX2Rlc3Ryb3koc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4gXFx0Zm9yX2VhY2hfc2V0X2JpdChxLCBkZXYtXFx1MDAzZXFvc19zcV9ibWFwLCBBSVJPSEFfTlVNX1FPU19DSEFOTkVMUylcXG4gXFx0XFx0YWlyb2hhX3RjX3JlbW92ZV9odGJfcXVldWUobmV0ZGV2LCBxKTtcXG4gXFxuK1xcdGNsZWFyX2JpdChBSVJPSEFfREVWX0ZfVFhfUU9TLCBcXHUwMDI2ZGV2LVxcdTAwM2VmbGFncyk7XFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtMzEwMSwyNCArMzI4NywzMyBAQCBzdGF0aWMgaW50IGFpcm9oYV90Y19nZXRfaHRiX2dldF9sZWFmX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGFpcm9oYV90Y19zZXR1cF9xZGlzY19odGIoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4rc3RhdGljIGludCBhaXJvaGFfdGNfc2V0dXBfcWRpc2NfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHRjX2h0Yl9xb3B0X29mZmxvYWQgKm9wdClcXG4ge1xcbiBcXHRzd2l0Y2ggKG9wdC1cXHUwMDNlY29tbWFuZCkge1xcbi1cXHRjYXNlIFRDX0hUQl9DUkVBVEU6XFxuK1xcdGNhc2UgVENfSFRCX0NSRUFURToge1xcbitcXHRcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuK1xcdFxcdGludCBlcnI7XFxuK1xcbitcXHRcXHRlcnIgPSBhaXJvaGFfZW5hYmxlX3Fvc19mb3JfZ2RtMzQobmV0ZGV2LCBvcHQtXFx1MDAzZWV4dGFjayk7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHRcXHRzZXRfYml0KEFJUk9IQV9ERVZfRl9UWF9RT1MsIFxcdTAwMjZkZXYtXFx1MDAzZWZsYWdzKTtcXG4gXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4gXFx0Y2FzZSBUQ19IVEJfREVTVFJPWTpcXG4tXFx0XFx0cmV0dXJuIGFpcm9oYV90Y19odGJfZGVzdHJveShkZXYpO1xcbitcXHRcXHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9kZXN0cm95KG5ldGRldik7XFxuIFxcdGNhc2UgVENfSFRCX05PREVfTU9ESUZZOlxcbi1cXHRcXHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9tb2RpZnlfcXVldWUoZGV2LCBvcHQpO1xcbitcXHRcXHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9tb2RpZnlfcXVldWUobmV0ZGV2LCBvcHQpO1xcbiBcXHRjYXNlIFRDX0hUQl9MRUFGX0FMTE9DX1FVRVVFOlxcbi1cXHRcXHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9hbGxvY19sZWFmX3F1ZXVlKGRldiwgb3B0KTtcXG4rXFx0XFx0cmV0dXJuIGFpcm9oYV90Y19odGJfYWxsb2NfbGVhZl9xdWV1ZShuZXRkZXYsIG9wdCk7XFxuIFxcdGNhc2UgVENfSFRCX0xFQUZfREVMOlxcbiBcXHRjYXNlIFRDX0hUQl9MRUFGX0RFTF9MQVNUOlxcbiBcXHRjYXNlIFRDX0hUQl9MRUFGX0RFTF9MQVNUX0ZPUkNFOlxcbi1cXHRcXHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9kZWxldGVfbGVhZl9xdWV1ZShkZXYsIG9wdCk7XFxuK1xcdFxcdHJldHVybiBhaXJvaGFfdGNfaHRiX2RlbGV0ZV9sZWFmX3F1ZXVlKG5ldGRldiwgb3B0KTtcXG4gXFx0Y2FzZSBUQ19IVEJfTEVBRl9RVUVSWV9RVUVVRTpcXG4tXFx0XFx0cmV0dXJuIGFpcm9oYV90Y19nZXRfaHRiX2dldF9sZWFmX3F1ZXVlKGRldiwgb3B0KTtcXG4rXFx0XFx0cmV0dXJuIGFpcm9oYV90Y19nZXRfaHRiX2dldF9sZWFmX3F1ZXVlKG5ldGRldiwgb3B0KTtcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiBcXHR9XFxuQEAgLTMyMjAsOCArMzQxNSw4IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2FsbG9jX2dkbV9kZXZpY2Uoc3RydWN0IGFpcm9oYV9ldGggKmV0aCxcXG4ge1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xcbiBcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldjtcXG4rXFx0aW50IGVyciwgaTtcXG4gXFx0dTggaW5kZXg7XFxuLVxcdGludCBlcnI7XFxuIFxcbiBcXHRuZXRkZXYgPSBkZXZtX2FsbG9jX2V0aGVyZGV2X21xcyhldGgtXFx1MDAzZWRldiwgc2l6ZW9mKCpkZXYpLFxcbiBcXHRcXHRcXHRcXHRcXHQgQUlST0hBX05VTV9ORVRERVZfVFhfUklOR1MsXFxuQEAgLTMyNzIsNiArMzQ2Nyw4IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2FsbG9jX2dkbV9kZXZpY2Uoc3RydWN0IGFpcm9oYV9ldGggKmV0aCxcXG4gXFx0bmV0ZGV2LVxcdTAwM2VkZXYub2Zfbm9kZSA9IG9mX25vZGVfZ2V0KG5wKTtcXG4gXFx0ZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4gXFx0dTY0X3N0YXRzX2luaXQoXFx1MDAyNmRldi1cXHUwMDNlc3RhdHMuc3luY3ApO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShkZXYtXFx1MDAzZXR4cV9sb2NrKTsgaSsrKVxcbitcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2ZGV2LVxcdTAwM2V0eHFfbG9ja1tpXSk7XFxuIFxcdGRldi1cXHUwMDNlcG9ydCA9IHBvcnQ7XFxuIFxcdGRldi1cXHUwMDNlZXRoID0gZXRoO1xcbiBcXHRkZXYtXFx1MDAzZW5icSA9IG5icTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmhcXG5pbmRleCBmZTkzNGY5ZmZlOGExMS4uZmE5YThlZGNlMjJmZmQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmhcXG5AQCAtNTcwLDI0ICs1NzAsMzEgQEAgc3RydWN0IGFpcm9oYV9xZG1hIHtcXG4gXFx0REVDTEFSRV9CSVRNQVAocW9zX2NoYW5uZWxfbWFwLCBBSVJPSEFfTlVNX1FPU19DSEFOTkVMUyk7XFxuIH07XFxuIFxcbi1lbnVtIGFpcm9oYV9wcml2X2ZsYWdzIHtcXG4tXFx0QUlST0hBX1BSSVZfRl9XQU4gPSBCSVQoMCksXFxuK2VudW0gYWlyb2hhX2Rldl9mbGFncyB7XFxuK1xcdEFJUk9IQV9ERVZfRl9XQU4sXFxuK1xcdEFJUk9IQV9ERVZfRl9UWF9RT1MsXFxuIH07XFxuIFxcbiBzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYge1xcbitcXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgX19yY3UgKnFkbWE7XFxuIFxcdHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQ7XFxuLVxcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcXG4gXFx0c3RydWN0IGFpcm9oYV9ldGggKmV0aDtcXG4gXFxuIFxcdERFQ0xBUkVfQklUTUFQKHFvc19zcV9ibWFwLCBBSVJPSEFfTlVNX1FPU19DSEFOTkVMUyk7XFxuLVxcdC8qIHFvcyBzdGF0cyBjb3VudGVycyAqL1xcbi1cXHR1NjQgY3B1X3R4X3BhY2tldHM7XFxuLVxcdHU2NCBmd2RfdHhfcGFja2V0cztcXG4rXFx0c3RydWN0IHtcXG4rXFx0XFx0dTMyIGNwdV90eF9wYWNrZXRzO1xcbitcXHRcXHR1MzIgZndkX3R4X3BhY2tldHM7XFxuK1xcdH0gcW9zX3N0YXRzW0FJUk9IQV9OVU1fUU9TX0NIQU5ORUxTXTtcXG4gXFxuLVxcdHUzMiBmbGFncztcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFx0aW50IG5icTtcXG4gXFxuIFxcdHN0cnVjdCBhaXJvaGFfaHdfc3RhdHMgc3RhdHM7XFxuK1xcbitcXHQvKiBTZXJpYWxpemUgbmV0ZGV2X3R4X2NvbXBsZXRlZF9xdWV1ZSgpIGNhbGxzIHBlciBUWCBxdWV1ZSBkdXJpbmdcXG4rXFx0ICogUURNQSBtaWdyYXRpb24uXFxuK1xcdCAqL1xcbitcXHRzcGlubG9ja190IHR4cV9sb2NrW0FJUk9IQV9OVU1fTkVUREVWX1RYX1JJTkdTXTtcXG4gfTtcXG4gXFxuIHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQge1xcbkBAIC02OTQsNyArNzAxLDcgQEAgc3RhdGljIGlubGluZSB1MTYgYWlyb2hhX3FkbWFfZ2V0X3R4cShzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEsIHUxNiBxaWQpXFxuIFxcbiBzdGF0aWMgaW5saW5lIGJvb2wgYWlyb2hhX2lzX2xhbl9nZG1fZGV2KHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxcbiB7XFxuLVxcdHJldHVybiAhKGRldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBBSVJPSEFfUFJJVl9GX1dBTik7XFxuK1xcdHJldHVybiAhdGVzdF9iaXQoQUlST0hBX0RFVl9GX1dBTiwgXFx1MDAyNmRldi1cXHUwMDNlZmxhZ3MpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIGJvb2wgYWlyb2hhX2lzXzc1ODEoc3RydWN0IGFpcm9oYV9ldGggKmV0aClcXG5AQCAtNzExLDYgKzcxOCwxNiBAQCBpbnQgYWlyb2hhX2dldF9mZV9wb3J0KHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KTtcXG4gYm9vbCBhaXJvaGFfaXNfdmFsaWRfZ2RtX2RldihzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLFxcbiBcXHRcXHRcXHQgICAgIHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KTtcXG4gXFxuK2V4dGVybiBzdHJ1Y3QgbXV0ZXggZmxvd19vZmZsb2FkX211dGV4O1xcbitcXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgYWlyb2hhX3FkbWEgKlxcbithaXJvaGFfcWRtYV9kZXJlZihzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcXG4re1xcbitcXHRyZXR1cm4gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChkZXYtXFx1MDAzZXFkbWEsXFxuK1xcdFxcdFxcdFxcdFxcdCBsb2NrZGVwX3J0bmxfaXNfaGVsZCgpIHx8XFxuK1xcdFxcdFxcdFxcdFxcdCBsb2NrZGVwX2lzX2hlbGQoXFx1MDAyNmZsb3dfb2ZmbG9hZF9tdXRleCkpO1xcbit9XFxuK1xcbiB2b2lkIGFpcm9oYV9wcGVfc2V0X3htaXRfZnJhbWVfc2l6ZShzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldik7XFxuIHZvaWQgYWlyb2hhX3BwZV9zZXRfY3B1X3BvcnQoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYsIHU4IHBwZV9pZCwgdTggZnBvcnQpO1xcbiBib29sIGFpcm9oYV9wcGVfaXNfZW5hYmxlZChzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLCBpbnQgaW5kZXgpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xcbmluZGV4IGU0YzM2NDRkZDZlYzdhLi4zM2RkZjBkMDc4NTUzOSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xcbkBAIC0xNSw3ICsxNSwxMCBAQFxcbiAjaW5jbHVkZSBcXFwiYWlyb2hhX3JlZ3MuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImFpcm9oYV9ldGguaFxcXCJcXG4gXFxuLXN0YXRpYyBERUZJTkVfTVVURVgoZmxvd19vZmZsb2FkX211dGV4KTtcXG4rLyogU2VyaWFsaXplIGFpcm9oYV9nZG1fZGV2IGZsYWdzLCBRRE1BIHBvaW50ZXIgYW5kIFBQRSBDUFUgcG9ydFxcbisgKiBjb25maWd1cmF0aW9uLlxcbisgKi9cXG4rREVGSU5FX01VVEVYKGZsb3dfb2ZmbG9hZF9tdXRleCk7XFxuIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0socHBlX2xvY2spO1xcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyBhaXJvaGFfZmxvd190YWJsZV9wYXJhbXMgPSB7XFxuQEAgLTg2LDggKzg5LDggQEAgc3RhdGljIHUzMiBhaXJvaGFfcHBlX2dldF90aW1lc3RhbXAoc3RydWN0IGFpcm9oYV9wcGUgKnBwZSlcXG4gXFxuIHZvaWQgYWlyb2hhX3BwZV9zZXRfY3B1X3BvcnQoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYsIHU4IHBwZV9pZCwgdTggZnBvcnQpXFxuIHtcXG4tXFx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LVxcdTAwM2VxZG1hO1xcbi1cXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gcWRtYS1cXHUwMDNlZXRoO1xcbitcXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xcbitcXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gZGV2LVxcdTAwM2VldGg7XFxuIFxcdHU4IHFkbWFfaWQgPSBxZG1hIC0gXFx1MDAyNmV0aC1cXHUwMDNlcWRtYVswXTtcXG4gXFx0dTMyIGZlX2NwdV9wb3J0O1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9yZWdzLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaFxcbmluZGV4IDZmZWQ2M2QwMTNiNDEyLi40NDJiNDhjOWI5OTFlZiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcmVncy5oXFxuQEAgLTM3NSw2ICszNzUsNyBAQFxcbiBcXG4gI2RlZmluZSBSRUdfU1JDX1BPUlRfRkNfTUFQNlxcdFxcdDB4MjI5OFxcbiAjZGVmaW5lIEZDX0lEX09GX1NSQ19QT1JUX01BU0soX24pXFx0R0VOTUFTSyg0ICsgKChfbikgXFx1MDAzY1xcdTAwM2MgMyksICgoX24pIFxcdTAwM2NcXHUwMDNjIDMpKVxcbisjZGVmaW5lIEZDX01BUDZfREVGX1ZBTFVFXFx0XFx0MHgxYjFhMTkxOFxcbiBcXG4gI2RlZmluZSBSRUdfV0FOX01UVTBcXHRcXHRcXHQweDIzMDBcXG4gI2RlZmluZSBXQU5fTVRVMV9NQVNLXFx0XFx0XFx0R0VOTUFTSygyOSwgMTYpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE4OjUzOjQwLjgyMzY1MTQxM1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjM0NTM4MzQyMjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQWlyb2hhIFNvQyBHaWdhYml0IEV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhKS4gVGhpcyBpcyBhIHBsYXRmb3JtIGRyaXZlciBmb3Igc3BlY2lmaWMgQWlyb2hhIFNvQ3MgKGUuZy4sIGVuNzU4MSwgYW43NTgzKSB3aGljaCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50cy4gQmVjYXVzZSB0aGUgaGFyZHdhcmUgaXMgbm90IHByZXNlbnQgb3IgZW11bGF0ZWQsIHRoZSBkcml2ZXIgd2lsbCBub3QgcHJvYmUgYW5kIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNGNhYmNiYTM0ZDAwMzBhNzdlN2E5NTNlZmVhMGNhNTM1Y2ZlM2QwOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gSnVsIDI2IDE4OjUzOjM4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmNcbmluZGV4IDc5NDE4ZTY4MmY3MWYzLi5kYmE3YzUyYzA4OTY5MCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmNcbkBAIC05MzQsNyArOTM0LDcgQEAgc3RhdGljIHZvaWQgYWlyb2hhX3FkbWFfd2FrZV9uZXRkZXZfdHhxcyhzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxKVxuIFx0XHRcdGlmICghZGV2KVxuIFx0XHRcdFx0Y29udGludWU7XG4gXG4tXHRcdFx0aWYgKGRldi1cdTAwM2VxZG1hICE9IHFkbWEpXG4rXHRcdFx0aWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihkZXYtXHUwMDNlcWRtYSkgIT0gcWRtYSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRcdG5ldGRldiA9IG5ldGRldl9mcm9tX3ByaXYoZGV2KTtcbkBAIC0xMDM4LDEwICsxMDM4LDE2IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfdHhfbmFwaV9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldClcbiBcdFx0cS1cdTAwM2VxdWV1ZWQtLTtcbiBcbiBcdFx0aWYgKHNrYikge1xuK1x0XHRcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYoc2tiLVx1MDAzZWRldik7XG4rXHRcdFx0dTE2IHFpZHggPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTtcbiBcdFx0XHRzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHE7XG4gXG4gXHRcdFx0dHhxID0gc2tiX2dldF90eF9xdWV1ZShza2ItXHUwMDNlZGV2LCBza2IpO1xuK1xuK1x0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZkZXYtXHUwMDNldHhxX2xvY2tbcWlkeF0pO1xuIFx0XHRcdG5ldGRldl90eF9jb21wbGV0ZWRfcXVldWUodHhxLCAxLCBza2ItXHUwMDNlbGVuKTtcbitcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZkZXYtXHUwMDNldHhxX2xvY2tbcWlkeF0pO1xuK1xuIFx0XHRcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XG4gXHRcdH1cbiBcbkBAIC0xOTA1LDggKzE5MTEsOCBAQCBzdGF0aWMgaW50IGFpcm9oYV9kZXZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIHtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBkZXYtXHUwMDNlcG9ydDtcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cdTAwM2VxZG1hO1xuIFx0dTMyIHBzZV9wb3J0ID0gRkVfUFNFX1BPUlRfUFBFMTtcbitcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcbiBcdGludCBlcnI7XG4gXG4gXHRuZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKG5ldGRldik7XG5AQCAtMTkxNCw2ICsxOTIwLDcgQEAgc3RhdGljIGludCBhaXJvaGFfZGV2X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4rXHRxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcbiBcdGlmIChuZXRkZXZfdXNlc19kc2EobmV0ZGV2KSlcbiBcdFx0YWlyb2hhX2ZlX3NldChxZG1hLVx1MDAzZWV0aCwgUkVHX0dETV9JTkdSRVNTX0NGRyhwb3J0LVx1MDAzZWlkKSxcbiBcdFx0XHQgICAgICBHRE1fU1RBR19FTl9NQVNLKTtcbkBAIC0xOTM3LDcgKzE5NDQsNiBAQCBzdGF0aWMgaW50IGFpcm9oYV9kZXZfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIHtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBkZXYtXHUwMDNlcG9ydDtcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cdTAwM2VxZG1hO1xuIFxuIFx0bmV0aWZfdHhfZGlzYWJsZShuZXRkZXYpO1xuIFx0YWlyb2hhX3NldF92aXBfZm9yX2dkbV9wb3J0KGRldiwgZmFsc2UpO1xuQEAgLTE5NDUsNyArMTk1MSw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRpZiAoLS1wb3J0LVx1MDAzZXVzZXJzKVxuIFx0XHRhaXJvaGFfcHBlX3NldF94bWl0X2ZyYW1lX3NpemUoZGV2KTtcbiBcdGVsc2Vcbi1cdFx0YWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKHFkbWEtXHUwMDNlZXRoLFxuK1x0XHRhaXJvaGFfc2V0X2dkbV9wb3J0X2Z3ZF9jZmcoZGV2LVx1MDAzZWV0aCxcbiBcdFx0XHRcdFx0ICAgIFJFR19HRE1fRldEX0NGRyhwb3J0LVx1MDAzZWlkKSxcbiBcdFx0XHRcdFx0ICAgIEZFX1BTRV9QT1JUX0RST1ApO1xuIFx0cmV0dXJuIDA7XG5AQCAtMjAyOCw2ICsyMDM0LDUzIEBAIHN0YXRpYyBpbnQgYWlyb2hhX2VuYWJsZV9nZG0yX2xvb3BiYWNrKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBpbnQgYWlyb2hhX2Rpc2FibGVfZ2RtMl9sb29wYmFjayhzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcbit7XG4rXHRzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZGV2LVx1MDAzZXBvcnQ7XG4rXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gZGV2LVx1MDAzZWV0aDtcbitcdGludCBpLCBzcmNfcG9ydDtcbitcdHUzMiBwc2VfcG9ydDtcbitcbitcdHNyY19wb3J0ID0gZXRoLVx1MDAzZXNvYy1cdTAwM2VvcHMuZ2V0X3Nwb3J0KGRldi1cdTAwM2Vwb3J0LCBkZXYtXHUwMDNlbmJxKTtcbitcdGlmIChzcmNfcG9ydCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHNyY19wb3J0O1xuK1xuK1x0YWlyb2hhX2ZlX2NsZWFyKGV0aCxcbitcdFx0XHRSRUdfU1BfREZUX0NQT1JUKHNyY19wb3J0IFx1MDAzZVx1MDAzZSBmbHMoU1BfQ1BPUlRfREZUX01BU0spKSxcbitcdFx0XHRTUF9DUE9SVF9NQVNLKHNyY19wb3J0IFx1MDAyNiBTUF9DUE9SVF9ERlRfTUFTSykpO1xuK1xuK1x0YWlyb2hhX2ZlX3NldChldGgsIFJFR19HRE1fRldEX0NGRyhBSVJPSEFfR0RNMl9JRFgpLFxuK1x0XHQgICAgICBHRE1fU1RSSVBfQ1JDX01BU0spO1xuK1x0YWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKGV0aCwgUkVHX0dETV9GV0RfQ0ZHKEFJUk9IQV9HRE0yX0lEWCksXG4rXHRcdFx0XHQgICAgRkVfUFNFX1BPUlRfRFJPUCk7XG4rXHRhaXJvaGFfZmVfY2xlYXIoZXRoLCBSRUdfR0RNX0xQQktfQ0ZHKEFJUk9IQV9HRE0yX0lEWCksXG4rXHRcdFx0TFBCS19DSEFOX01BU0sgfCBMUEJLX01PREVfTUFTSyB8IExQQktfRU5fTUFTSyk7XG4rXHRwc2VfcG9ydCA9IGFpcm9oYV9wcGVfaXNfZW5hYmxlZChldGgsIDEpID8gRkVfUFNFX1BPUlRfUFBFMlxuK1x0XHRcdFx0XHRcdCA6IEZFX1BTRV9QT1JUX1BQRTE7XG4rXHRhaXJvaGFfc2V0X2dkbV9wb3J0X2Z3ZF9jZmcoZXRoLCBSRUdfR0RNX0ZXRF9DRkcoQUlST0hBX0dETTJfSURYKSxcbitcdFx0XHRcdCAgICBwc2VfcG9ydCk7XG4rXG4rXHRhaXJvaGFfZmVfcm13KGV0aCwgUkVHX0ZFX1dBTl9QT1JULCBXQU4wX01BU0ssXG4rXHRcdCAgICAgIEZJRUxEX1BSRVAoV0FOMF9NQVNLLCBBSVJPSEFfR0RNMl9JRFgpKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGV0aC1cdTAwM2Vzb2MtXHUwMDNlbnVtX3BwZTsgaSsrKVxuK1x0XHRhaXJvaGFfZmVfY2xlYXIoZXRoLCBSRUdfUFBFX0RGVF9DUE9SVChpLCBBSVJPSEFfR0RNMl9JRFgpLFxuK1x0XHRcdFx0REZUX0NQT1JUX01BU0soQUlST0hBX0dETTJfSURYKSk7XG4rXG4rXHQvKiBFbmFibGUgVklQIGFuZCBJRkMgZm9yIEdETTIgKi9cbitcdGFpcm9oYV9mZV9zZXQoZXRoLCBSRUdfRkVfVklQX1BPUlRfRU4sIEJJVChBSVJPSEFfR0RNMl9JRFgpKTtcbitcdGFpcm9oYV9mZV9zZXQoZXRoLCBSRUdfRkVfSUZDX1BPUlRfRU4sIEJJVChBSVJPSEFfR0RNMl9JRFgpKTtcbitcbitcdGlmIChwb3J0LVx1MDAzZWlkID09IEFJUk9IQV9HRE00X0lEWCBcdTAwMjZcdTAwMjYgYWlyb2hhX2lzXzc1ODEoZXRoKSkge1xuK1x0XHR1MzIgbWFzayA9IEZDX0lEX09GX1NSQ19QT1JUX01BU0soZGV2LVx1MDAzZW5icSk7XG4rXG4rXHRcdGFpcm9oYV9mZV9ybXcoZXRoLCBSRUdfU1JDX1BPUlRfRkNfTUFQNiwgbWFzayxcbitcdFx0XHQgICAgICBGQ19NQVA2X0RFRl9WQUxVRSBcdTAwMjYgbWFzayk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqXG4gYWlyb2hhX2dldF93YW5fZ2RtX2RldihzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoKVxuIHtcbkBAIC0yMDU0LDE1ICsyMTA3LDM3IEBAIGFpcm9oYV9nZXRfd2FuX2dkbV9kZXYoc3RydWN0IGFpcm9oYV9ldGggKmV0aClcbiBzdGF0aWMgdm9pZCBhaXJvaGFfZGV2X3NldF9xZG1hKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxuIHtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBuZXRkZXZfZnJvbV9wcml2KGRldik7XG4rXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKmN1cl9xZG1hLCAqcWRtYTtcbiBcdHN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBkZXYtXHUwMDNlZXRoO1xuLVx0aW50IHBwZV9pZDtcbitcdGludCBpLCBwcGVfaWQ7XG4gXG4gXHQvKiBRRE1BMCBpcyB1c2VkIGZvciBsYW4gcG9ydHMgd2hpbGUgUURNQTEgaXMgdXNlZCBmb3IgV0FOIHBvcnRzICovXG4tXHRkZXYtXHUwMDNlcWRtYSA9IFx1MDAyNmV0aC1cdTAwM2VxZG1hWyFhaXJvaGFfaXNfbGFuX2dkbV9kZXYoZGV2KV07XG4tXHRuZXRkZXYtXHUwMDNlaXJxID0gZGV2LVx1MDAzZXFkbWEtXHUwMDNlaXJxX2JhbmtzWzBdLmlycTtcbitcdHFkbWEgPSBcdTAwMjZldGgtXHUwMDNlcWRtYVshYWlyb2hhX2lzX2xhbl9nZG1fZGV2KGRldildO1xuK1x0Y3VyX3FkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuK1xuK1x0aWYgKGN1cl9xZG1hKVxuK1x0XHRuZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTtcbitcbitcdHJjdV9hc3NpZ25fcG9pbnRlcihkZXYtXHUwMDNlcWRtYSwgcWRtYSk7XG4rXHRuZXRkZXYtXHUwMDNlaXJxID0gcWRtYS1cdTAwM2VpcnFfYmFua3NbMF0uaXJxO1xuK1x0c3luY2hyb25pemVfcmN1KCk7XG4gXG4gXHRwcGVfaWQgPSAhYWlyb2hhX2lzX2xhbl9nZG1fZGV2KGRldikgXHUwMDI2XHUwMDI2IGFpcm9oYV9wcGVfaXNfZW5hYmxlZChldGgsIDEpO1xuIFx0YWlyb2hhX3BwZV9zZXRfY3B1X3BvcnQoZGV2LCBwcGVfaWQsIGFpcm9oYV9nZXRfZmVfcG9ydChkZXYpKTtcbitcbitcdC8qIFNlZWQgcW9zX3N0YXRzIGJhc2VsaW5lcyB3aXRoIHRoZSBuZXcgUURNQSBibG9jaydzIGN1cnJlbnRcbitcdCAqIGNvdW50ZXIgdmFsdWVzIHRvIGF2b2lkIGEgc3B1cmlvdXMgc3Bpa2Ugb24gdGhlIGZpcnN0IHN0YXRzXG4rXHQgKiBxdWVyeSBhZnRlciBpbml0IG9yIG1pZ3JhdGlvbi5cbitcdCAqL1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShkZXYtXHUwMDNlcW9zX3N0YXRzKTsgaSsrKSB7XG4rXHRcdGRldi1cdTAwM2Vxb3Nfc3RhdHNbaV0uY3B1X3R4X3BhY2tldHMgPVxuK1x0XHRcdGFpcm9oYV9xZG1hX3JyKHFkbWEsIFJFR19DTlRSX1ZBTChpIFx1MDAzY1x1MDAzYyAxKSk7XG4rXHRcdGRldi1cdTAwM2Vxb3Nfc3RhdHNbaV0uZndkX3R4X3BhY2tldHMgPVxuK1x0XHRcdGFpcm9oYV9xZG1hX3JyKHFkbWEsIFJFR19DTlRSX1ZBTCgoaSBcdTAwM2NcdTAwM2MgMSkgKyAxKSk7XG4rXHR9XG4rXG4rXHRpZiAoY3VyX3FkbWEpXG4rXHRcdG5ldGlmX3R4X3dha2VfYWxsX3F1ZXVlcyhuZXRkZXYpO1xuIH1cbiBcbiBzdGF0aWMgaW50IGFpcm9oYV9kZXZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuQEAgLTIwNzgsNyArMjE1Myw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRcdGZhbGx0aHJvdWdoO1xuIFx0Y2FzZSBBSVJPSEFfR0RNMl9JRFg6XG4gXHRcdC8qIEdETTIgaXMgYWx3YXlzIHVzZWQgYXMgd2FuICovXG4tXHRcdGRldi1cdTAwM2VmbGFncyB8PSBBSVJPSEFfUFJJVl9GX1dBTjtcbitcdFx0c2V0X2JpdChBSVJPSEFfREVWX0ZfV0FOLCBcdTAwMjZkZXYtXHUwMDNlZmxhZ3MpO1xuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdGJyZWFrO1xuQEAgLTIyMTcsOSArMjI5Miw5IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBhaXJvaGFfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdCAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4ge1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuLVx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LVx1MDAzZXFkbWE7XG4gXHR1MzIgbnJfZnJhZ3MsIHRhZywgbXNnMCwgbXNnMSwgbGVuO1xuIFx0c3RydWN0IGFpcm9oYV9xdWV1ZV9lbnRyeSAqZTtcbitcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcbiBcdHN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cTtcbiBcdHN0cnVjdCBhaXJvaGFfcXVldWUgKnE7XG4gXHRMSVNUX0hFQUQodHhfbGlzdCk7XG5AQCAtMjIyOCw2ICsyMzAzLDggQEAgc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0dTE2IGluZGV4O1xuIFx0dTggZnBvcnQ7XG4gXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRxZG1hID0gcmN1X2RlcmVmZXJlbmNlKGRldi1cdTAwM2VxZG1hKTtcbiBcdHFpZCA9IGFpcm9oYV9xZG1hX2dldF90eHEocWRtYSwgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpO1xuIFx0dGFnID0gYWlyb2hhX2dldF9kc2FfdGFnKHNrYiwgbmV0ZGV2KTtcbiBcbkBAIC0yMjc3LDYgKzIzNTQsOCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdG5ldGlmX3R4X3N0b3BfcXVldWUodHhxKTtcbiBcdFx0cS1cdTAwM2V0eHFfc3RvcHBlZCA9IHRydWU7XG4gXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnEtXHUwMDNlbG9jayk7XG4rXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuK1xuIFx0XHRyZXR1cm4gTkVUREVWX1RYX0JVU1k7XG4gXHR9XG4gXG5AQCAtMjM0Miw2ICsyNDIxLDcgQEAgc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0RklFTERfUFJFUChUWF9SSU5HX0NQVV9JRFhfTUFTSywgaW5kZXgpKTtcbiBcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnEtXHUwMDNlbG9jayk7XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdHJldHVybiBORVRERVZfVFhfT0s7XG4gXG5AQCAtMjM1NCw2ICsyNDM0LDcgQEAgc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIGVycm9yOlxuIFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbiBcdG5ldGRldi1cdTAwM2VzdGF0cy50eF9kcm9wcGVkKys7XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdHJldHVybiBORVRERVZfVFhfT0s7XG4gfVxuQEAgLTI0MzMsMTcgKzI1MTQsMTkgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9zZXRfY2hhbl90eF9zY2hlZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRcdFx0XHQgY29uc3QgdTE2ICp3ZWlnaHRzLCB1OCBuX3dlaWdodHMpXG4ge1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuK1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xuIFx0aW50IGk7XG4gXG4rXHRxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFJUk9IQV9OVU1fUU9TX1FVRVVFUzsgaSsrKVxuLVx0XHRhaXJvaGFfcWRtYV9jbGVhcihkZXYtXHUwMDNlcWRtYSwgUkVHX1FVRVVFX0NMT1NFX0NGRyhjaGFubmVsKSxcbitcdFx0YWlyb2hhX3FkbWFfY2xlYXIocWRtYSwgUkVHX1FVRVVFX0NMT1NFX0NGRyhjaGFubmVsKSxcbiBcdFx0XHRcdCAgVFhRX0RJU0FCTEVfQ0hBTl9RVUVVRV9NQVNLKGNoYW5uZWwsIGkpKTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5fd2VpZ2h0czsgaSsrKSB7XG4gXHRcdHUzMiBzdGF0dXM7XG4gXHRcdGludCBlcnI7XG4gXG4tXHRcdGFpcm9oYV9xZG1hX3dyKGRldi1cdTAwM2VxZG1hLCBSRUdfVFhXUlJfV0VJR0hUX0NGRyxcbitcdFx0YWlyb2hhX3FkbWFfd3IocWRtYSwgUkVHX1RYV1JSX1dFSUdIVF9DRkcsXG4gXHRcdFx0ICAgICAgIFRXUlJfUldfQ01EX01BU0sgfFxuIFx0XHRcdCAgICAgICBGSUVMRF9QUkVQKFRXUlJfQ0hBTl9JRFhfTUFTSywgY2hhbm5lbCkgfFxuIFx0XHRcdCAgICAgICBGSUVMRF9QUkVQKFRXUlJfUVVFVUVfSURYX01BU0ssIGkpIHxcbkBAIC0yNDUxLDEyICsyNTM0LDEyIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfc2V0X2NoYW5fdHhfc2NoZWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0ZXJyID0gcmVhZF9wb2xsX3RpbWVvdXQoYWlyb2hhX3FkbWFfcnIsIHN0YXR1cyxcbiBcdFx0XHRcdFx0c3RhdHVzIFx1MDAyNiBUV1JSX1JXX0NNRF9ET05FLFxuIFx0XHRcdFx0XHRVU0VDX1BFUl9NU0VDLCAxMCAqIFVTRUNfUEVSX01TRUMsXG4tXHRcdFx0XHRcdHRydWUsIGRldi1cdTAwM2VxZG1hLCBSRUdfVFhXUlJfV0VJR0hUX0NGRyk7XG4rXHRcdFx0XHRcdHRydWUsIHFkbWEsIFJFR19UWFdSUl9XRUlHSFRfQ0ZHKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuIFxuLVx0YWlyb2hhX3FkbWFfcm13KGRldi1cdTAwM2VxZG1hLCBSRUdfQ0hBTl9RT1NfTU9ERShjaGFubmVsIFx1MDAzZVx1MDAzZSAzKSxcbitcdGFpcm9oYV9xZG1hX3JtdyhxZG1hLCBSRUdfQ0hBTl9RT1NfTU9ERShjaGFubmVsIFx1MDAzZVx1MDAzZSAzKSxcbiBcdFx0XHRDSEFOX1FPU19NT0RFX01BU0soY2hhbm5lbCksXG4gXHRcdFx0X19maWVsZF9wcmVwKENIQU5fUU9TX01PREVfTUFTSyhjaGFubmVsKSwgbW9kZSkpO1xuIFxuQEAgLTI1MjAsMTcgKzI2MDMsMjIgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9nZXRfdHhfZXRzX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBjaGFubmVsLFxuIFx0XHRcdFx0XHRzdHJ1Y3QgdGNfZXRzX3FvcHRfb2ZmbG9hZCAqb3B0KVxuIHtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cdTAwM2VxZG1hO1xuK1x0dTMyIGNwdV90eF9wYWNrZXRzLCBmd2RfdHhfcGFja2V0cztcbitcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcbitcdHU2NCB0eF9wYWNrZXRzO1xuIFxuLVx0dTY0IGNwdV90eF9wYWNrZXRzID0gYWlyb2hhX3FkbWFfcnIocWRtYSwgUkVHX0NOVFJfVkFMKGNoYW5uZWwgXHUwMDNjXHUwMDNjIDEpKTtcbi1cdHU2NCBmd2RfdHhfcGFja2V0cyA9IGFpcm9oYV9xZG1hX3JyKHFkbWEsXG4tXHRcdFx0XHRcdCAgICBSRUdfQ05UUl9WQUwoKGNoYW5uZWwgXHUwMDNjXHUwMDNjIDEpICsgMSkpO1xuLVx0dTY0IHR4X3BhY2tldHMgPSAoY3B1X3R4X3BhY2tldHMgLSBkZXYtXHUwMDNlY3B1X3R4X3BhY2tldHMpICtcbi1cdFx0XHQgKGZ3ZF90eF9wYWNrZXRzIC0gZGV2LVx1MDAzZWZ3ZF90eF9wYWNrZXRzKTtcbitcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuK1x0Y3B1X3R4X3BhY2tldHMgPSBhaXJvaGFfcWRtYV9ycihxZG1hLCBSRUdfQ05UUl9WQUwoY2hhbm5lbCBcdTAwM2NcdTAwM2MgMSkpO1xuK1x0ZndkX3R4X3BhY2tldHMgPSBhaXJvaGFfcWRtYV9ycihxZG1hLFxuK1x0XHRcdFx0XHRSRUdfQ05UUl9WQUwoKGNoYW5uZWwgXHUwMDNjXHUwMDNjIDEpICsgMSkpO1xuK1x0dHhfcGFja2V0cyA9ICh1MzIpKGNwdV90eF9wYWNrZXRzIC1cbitcdFx0XHQgICBkZXYtXHUwMDNlcW9zX3N0YXRzW2NoYW5uZWxdLmNwdV90eF9wYWNrZXRzKTtcbitcdHR4X3BhY2tldHMgKz0gKHUzMikoZndkX3R4X3BhY2tldHMgLVxuK1x0XHRcdCAgICBkZXYtXHUwMDNlcW9zX3N0YXRzW2NoYW5uZWxdLmZ3ZF90eF9wYWNrZXRzKTtcbiBcbiBcdF9ic3RhdHNfdXBkYXRlKG9wdC1cdTAwM2VzdGF0cy5ic3RhdHMsIDAsIHR4X3BhY2tldHMpO1xuLVx0ZGV2LVx1MDAzZWNwdV90eF9wYWNrZXRzID0gY3B1X3R4X3BhY2tldHM7XG4tXHRkZXYtXHUwMDNlZndkX3R4X3BhY2tldHMgPSBmd2RfdHhfcGFja2V0cztcbitcdGRldi1cdTAwM2Vxb3Nfc3RhdHNbY2hhbm5lbF0uY3B1X3R4X3BhY2tldHMgPSBjcHVfdHhfcGFja2V0cztcbitcdGRldi1cdTAwM2Vxb3Nfc3RhdHNbY2hhbm5lbF0uZndkX3R4X3BhY2tldHMgPSBmd2RfdHhfcGFja2V0cztcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0yNzg1LDE2ICsyODczLDE4IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfc2V0X3R4X3JhdGVfbGltaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0XHRcdFx0IHUzMiBidWNrZXRfc2l6ZSlcbiB7XG4gXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7XG4gXHRpbnQgaSwgZXJyO1xuIFxuK1x0cWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYz0gVFJUQ01fUEVBS19NT0RFOyBpKyspIHtcbi1cdFx0ZXJyID0gYWlyb2hhX3FkbWFfc2V0X3RydGNtX2NvbmZpZyhkZXYtXHUwMDNlcWRtYSwgY2hhbm5lbCxcbitcdFx0ZXJyID0gYWlyb2hhX3FkbWFfc2V0X3RydGNtX2NvbmZpZyhxZG1hLCBjaGFubmVsLFxuIFx0XHRcdFx0XHRcdCAgIFJFR19FR1JFU1NfVFJUQ01fQ0ZHLCBpLFxuIFx0XHRcdFx0XHRcdCAgICEhcmF0ZSwgVFJUQ01fTUVURVJfTU9ERSk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcbi1cdFx0ZXJyID0gYWlyb2hhX3FkbWFfc2V0X3RydGNtX3Rva2VuX2J1Y2tldChkZXYtXHUwMDNlcWRtYSwgY2hhbm5lbCxcbitcdFx0ZXJyID0gYWlyb2hhX3FkbWFfc2V0X3RydGNtX3Rva2VuX2J1Y2tldChxZG1hLCBjaGFubmVsLFxuIFx0XHRcdFx0XHRcdFx0IFJFR19FR1JFU1NfVFJUQ01fQ0ZHLFxuIFx0XHRcdFx0XHRcdFx0IGksIHJhdGUsIGJ1Y2tldF9zaXplKTtcbiBcdFx0aWYgKGVycilcbkBAIC0yODMwLDExICsyOTIwLDEyIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3RjX2h0Yl9hbGxvY19sZWFmX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHR1MzIgY2hhbm5lbCA9IFRDX0hfTUlOKG9wdC1cdTAwM2VjbGFzc2lkKSAlIEFJUk9IQV9OVU1fUU9TX0NIQU5ORUxTO1xuIFx0aW50IGVyciwgbnVtX3R4X3F1ZXVlcyA9IEFJUk9IQV9OVU1fVFhfUklORyArIGNoYW5uZWwgKyAxO1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuLVx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LVx1MDAzZXFkbWE7XG4rXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7XG4gXG4gXHQvKiBIZXJlIHdlIG5lZWQgdG8gY2hlY2sgdGhlIHJlcXVlc3RlZCBRRE1BIGNoYW5uZWwgaXMgbm90IGFscmVhZHlcbiBcdCAqIGluIHVzZSBieSBhbm90aGVyIG5ldF9kZXZpY2UgcnVubmluZyBvbiB0aGUgc2FtZSBRRE1BIGJsb2NrLlxuIFx0ICovXG4rXHRxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcbiBcdGlmICh0ZXN0X2FuZF9zZXRfYml0KGNoYW5uZWwsIHFkbWEtXHUwMDNlcW9zX2NoYW5uZWxfbWFwKSkge1xuIFx0XHROTF9TRVRfRVJSX01TR19NT0Qob3B0LVx1MDAzZWV4dGFjayxcbiBcdFx0XHRcdCAgIFwicWRtYSBxb3MgY2hhbm5lbCBhbHJlYWR5IGluIHVzZVwiKTtcbkBAIC0yODcwLDcgKzI5NjEsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3NldF9yeF9tZXRlcihzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldixcbiBcdFx0XHRcdCAgICB1MzIgcmF0ZSwgdTMyIGJ1Y2tldF9zaXplLFxuIFx0XHRcdFx0ICAgIGVudW0gdHJ0Y21fdW5pdF90eXBlIHVuaXRfdHlwZSlcbiB7XG4tXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtXHUwMDNlcWRtYTtcbitcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XG4gXHRpbnQgaTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUocWRtYS1cdTAwM2VxX3J4KTsgaSsrKSB7XG5AQCAtMzA0NSwxMCArMzEzNiwxMSBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfdGNfcmVtb3ZlX2h0Yl9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgcXVldWUpXG4ge1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIFx0aW50IG51bV90eF9xdWV1ZXMgPSBBSVJPSEFfTlVNX1RYX1JJTkc7XG4tXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtXHUwMDNlcWRtYTtcbitcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcbiBcbiBcdGFpcm9oYV9xZG1hX3NldF90eF9yYXRlX2xpbWl0KG5ldGRldiwgcXVldWUsIDAsIDApO1xuIFxuK1x0cWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XG4gXHRjbGVhcl9iaXQocXVldWUsIHFkbWEtXHUwMDNlcW9zX2NoYW5uZWxfbWFwKTtcbiBcdGNsZWFyX2JpdChxdWV1ZSwgZGV2LVx1MDAzZXFvc19zcV9ibWFwKTtcbiBcbkBAIC0zMDc0LDYgKzMxNjYsOTggQEAgc3RhdGljIGludCBhaXJvaGFfdGNfaHRiX2RlbGV0ZV9sZWFmX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIHZvaWQgYWlyb2hhX2Rpc2FibGVfcW9zX2Zvcl9nZG0zNChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuK3tcbitcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcdHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBkZXYtXHUwMDNlcG9ydDtcbitcdGludCBlcnI7XG4rXG4rXHRpZiAocG9ydC1cdTAwM2VpZCAhPSBBSVJPSEFfR0RNM19JRFggXHUwMDI2XHUwMDI2XG4rXHQgICAgcG9ydC1cdTAwM2VpZCAhPSBBSVJPSEFfR0RNNF9JRFgpXG4rXHRcdHJldHVybjtcbitcbitcdGVyciA9IGFpcm9oYV9kaXNhYmxlX2dkbTJfbG9vcGJhY2soZGV2KTtcbitcdGlmIChlcnIpXG4rXHRcdG5ldGRldl93YXJuKG5ldGRldixcbitcdFx0XHQgICAgXCJmYWlsZWQgZGlzYWJsaW5nIEdETTIgbG9vcGJhY2s6ICVkXFxuXCIsIGVycik7XG4rXG4rXHRjbGVhcl9iaXQoQUlST0hBX0RFVl9GX1dBTiwgXHUwMDI2ZGV2LVx1MDAzZWZsYWdzKTtcbitcdGFpcm9oYV9kZXZfc2V0X3FkbWEoZGV2KTtcbitcbitcdGFpcm9oYV9zZXRfbWFjYWRkcihkZXYsIG5ldGRldi1cdTAwM2VkZXZfYWRkcik7XG4rXHRhaXJvaGFfcHBlX3NldF94bWl0X2ZyYW1lX3NpemUoZGV2KTtcbitcbitcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXG4rXHRcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhkZXYtXHUwMDNlZXRoLFxuK1x0XHRcdFx0XHQgICAgUkVHX0dETV9GV0RfQ0ZHKHBvcnQtXHUwMDNlaWQpLFxuK1x0XHRcdFx0XHQgICAgRkVfUFNFX1BPUlRfUFBFMSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWlyb2hhX2VuYWJsZV9xb3NfZm9yX2dkbTM0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuK3tcbitcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqd2FuX2RldiwgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXHRzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZGV2LVx1MDAzZXBvcnQ7XG4rXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gZGV2LVx1MDAzZWV0aDtcbitcdGludCBlcnIgPSAtRUJVU1k7XG4rXG4rXHRpZiAocG9ydC1cdTAwM2VpZCAhPSBBSVJPSEFfR0RNM19JRFggXHUwMDI2XHUwMDI2XG4rXHQgICAgcG9ydC1cdTAwM2VpZCAhPSBBSVJPSEFfR0RNNF9JRFgpIHtcbitcdFx0LyogSFcgUW9TIGlzIGFsd2F5cyBzdXBwb3J0ZWQgYnkgR0RNMSBhbmQgR0RNMiAqL1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdGlmICghYWlyb2hhX2lzX2xhbl9nZG1fZGV2KGRldikpIC8qIEFscmVhZHkgZW5hYmxlZCAqL1xuK1x0XHRyZXR1cm4gMDtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2Zmxvd19vZmZsb2FkX211dGV4KTtcbitcbitcdHdhbl9kZXYgPSBhaXJvaGFfZ2V0X3dhbl9nZG1fZGV2KGV0aCk7XG4rXHRpZiAod2FuX2Rldikge1xuK1x0XHRpZiAodGVzdF9iaXQoQUlST0hBX0RFVl9GX1RYX1FPUywgXHUwMDI2d2FuX2Rldi1cdTAwM2VmbGFncykgfHxcbitcdFx0ICAgIHdhbl9kZXYtXHUwMDNlcG9ydC1cdTAwM2VpZCA9PSBBSVJPSEFfR0RNMl9JRFgpIHtcbitcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuK1x0XHRcdFx0XHQgICBcIlFvUyBjb25maWd1cmVkIGZvciBXQU4gZGV2aWNlXCIpO1xuK1x0XHRcdGdvdG8gZXJyb3JfdW5sb2NrO1xuK1x0XHR9XG4rXHRcdGFpcm9oYV9kaXNhYmxlX3Fvc19mb3JfZ2RtMzQobmV0ZGV2X2Zyb21fcHJpdih3YW5fZGV2KSk7XG4rXHR9XG4rXG4rXHRzZXRfYml0KEFJUk9IQV9ERVZfRl9XQU4sIFx1MDAyNmRldi1cdTAwM2VmbGFncyk7XG4rXHRhaXJvaGFfZGV2X3NldF9xZG1hKGRldik7XG4rXHRlcnIgPSBhaXJvaGFfZW5hYmxlX2dkbTJfbG9vcGJhY2soZGV2KTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gZXJyb3JfZGlzYWJsZV93YW47XG4rXG4rXHRlcnIgPSBhaXJvaGFfc2V0X21hY2FkZHIoZGV2LCBuZXRkZXYtXHUwMDNlZGV2X2FkZHIpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBlcnJvcl9kaXNhYmxlX2xvb3BiYWNrO1xuK1xuK1x0YWlyb2hhX2Rldl9zZXRfeG1pdF9mcmFtZV9zaXplKG5ldGRldik7XG4rXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7XG4rXHRcdHUzMiBwc2VfcG9ydDtcbitcbitcdFx0cHNlX3BvcnQgPSBhaXJvaGFfcHBlX2lzX2VuYWJsZWQoZXRoLCAxKSA/IEZFX1BTRV9QT1JUX1BQRTJcbitcdFx0XHRcdFx0XHRcdCA6IEZFX1BTRV9QT1JUX1BQRTE7XG4rXHRcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhldGgsIFJFR19HRE1fRldEX0NGRyhwb3J0LVx1MDAzZWlkKSxcbitcdFx0XHRcdFx0ICAgIHBzZV9wb3J0KTtcbitcdH1cbitcbitcdG11dGV4X3VubG9jayhcdTAwMjZmbG93X29mZmxvYWRfbXV0ZXgpO1xuK1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyb3JfZGlzYWJsZV9sb29wYmFjazpcbitcdGFpcm9oYV9kaXNhYmxlX2dkbTJfbG9vcGJhY2soZGV2KTtcbitlcnJvcl9kaXNhYmxlX3dhbjpcbitcdGNsZWFyX2JpdChBSVJPSEFfREVWX0ZfV0FOLCBcdTAwMjZkZXYtXHUwMDNlZmxhZ3MpO1xuK1x0YWlyb2hhX2Rldl9zZXRfcWRtYShkZXYpO1xuK2Vycm9yX3VubG9jazpcbitcdG11dGV4X3VubG9jayhcdTAwMjZmbG93X29mZmxvYWRfbXV0ZXgpO1xuK1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4gc3RhdGljIGludCBhaXJvaGFfdGNfaHRiX2Rlc3Ryb3koc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB7XG4gXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG5AQCAtMzA4Miw2ICszMjY2LDggQEAgc3RhdGljIGludCBhaXJvaGFfdGNfaHRiX2Rlc3Ryb3koc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdGZvcl9lYWNoX3NldF9iaXQocSwgZGV2LVx1MDAzZXFvc19zcV9ibWFwLCBBSVJPSEFfTlVNX1FPU19DSEFOTkVMUylcbiBcdFx0YWlyb2hhX3RjX3JlbW92ZV9odGJfcXVldWUobmV0ZGV2LCBxKTtcbiBcbitcdGNsZWFyX2JpdChBSVJPSEFfREVWX0ZfVFhfUU9TLCBcdTAwMjZkZXYtXHUwMDNlZmxhZ3MpO1xuK1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTMxMDEsMjQgKzMyODcsMzMgQEAgc3RhdGljIGludCBhaXJvaGFfdGNfZ2V0X2h0Yl9nZXRfbGVhZl9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgYWlyb2hhX3RjX3NldHVwX3FkaXNjX2h0YihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuK3N0YXRpYyBpbnQgYWlyb2hhX3RjX3NldHVwX3FkaXNjX2h0YihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3QgdGNfaHRiX3FvcHRfb2ZmbG9hZCAqb3B0KVxuIHtcbiBcdHN3aXRjaCAob3B0LVx1MDAzZWNvbW1hbmQpIHtcbi1cdGNhc2UgVENfSFRCX0NSRUFURTpcbitcdGNhc2UgVENfSFRCX0NSRUFURToge1xuK1x0XHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXHRcdGludCBlcnI7XG4rXG4rXHRcdGVyciA9IGFpcm9oYV9lbmFibGVfcW9zX2Zvcl9nZG0zNChuZXRkZXYsIG9wdC1cdTAwM2VleHRhY2spO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdHJldHVybiBlcnI7XG4rXG4rXHRcdHNldF9iaXQoQUlST0hBX0RFVl9GX1RYX1FPUywgXHUwMDI2ZGV2LVx1MDAzZWZsYWdzKTtcbiBcdFx0YnJlYWs7XG4rXHR9XG4gXHRjYXNlIFRDX0hUQl9ERVNUUk9ZOlxuLVx0XHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9kZXN0cm95KGRldik7XG4rXHRcdHJldHVybiBhaXJvaGFfdGNfaHRiX2Rlc3Ryb3kobmV0ZGV2KTtcbiBcdGNhc2UgVENfSFRCX05PREVfTU9ESUZZOlxuLVx0XHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9tb2RpZnlfcXVldWUoZGV2LCBvcHQpO1xuK1x0XHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9tb2RpZnlfcXVldWUobmV0ZGV2LCBvcHQpO1xuIFx0Y2FzZSBUQ19IVEJfTEVBRl9BTExPQ19RVUVVRTpcbi1cdFx0cmV0dXJuIGFpcm9oYV90Y19odGJfYWxsb2NfbGVhZl9xdWV1ZShkZXYsIG9wdCk7XG4rXHRcdHJldHVybiBhaXJvaGFfdGNfaHRiX2FsbG9jX2xlYWZfcXVldWUobmV0ZGV2LCBvcHQpO1xuIFx0Y2FzZSBUQ19IVEJfTEVBRl9ERUw6XG4gXHRjYXNlIFRDX0hUQl9MRUFGX0RFTF9MQVNUOlxuIFx0Y2FzZSBUQ19IVEJfTEVBRl9ERUxfTEFTVF9GT1JDRTpcbi1cdFx0cmV0dXJuIGFpcm9oYV90Y19odGJfZGVsZXRlX2xlYWZfcXVldWUoZGV2LCBvcHQpO1xuK1x0XHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9kZWxldGVfbGVhZl9xdWV1ZShuZXRkZXYsIG9wdCk7XG4gXHRjYXNlIFRDX0hUQl9MRUFGX1FVRVJZX1FVRVVFOlxuLVx0XHRyZXR1cm4gYWlyb2hhX3RjX2dldF9odGJfZ2V0X2xlYWZfcXVldWUoZGV2LCBvcHQpO1xuK1x0XHRyZXR1cm4gYWlyb2hhX3RjX2dldF9odGJfZ2V0X2xlYWZfcXVldWUobmV0ZGV2LCBvcHQpO1xuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFx0fVxuQEAgLTMyMjAsOCArMzQxNSw4IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2FsbG9jX2dkbV9kZXZpY2Uoc3RydWN0IGFpcm9oYV9ldGggKmV0aCxcbiB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXY7XG4rXHRpbnQgZXJyLCBpO1xuIFx0dTggaW5kZXg7XG4tXHRpbnQgZXJyO1xuIFxuIFx0bmV0ZGV2ID0gZGV2bV9hbGxvY19ldGhlcmRldl9tcXMoZXRoLVx1MDAzZWRldiwgc2l6ZW9mKCpkZXYpLFxuIFx0XHRcdFx0XHQgQUlST0hBX05VTV9ORVRERVZfVFhfUklOR1MsXG5AQCAtMzI3Miw2ICszNDY3LDggQEAgc3RhdGljIGludCBhaXJvaGFfYWxsb2NfZ2RtX2RldmljZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLFxuIFx0bmV0ZGV2LVx1MDAzZWRldi5vZl9ub2RlID0gb2Zfbm9kZV9nZXQobnApO1xuIFx0ZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiBcdHU2NF9zdGF0c19pbml0KFx1MDAyNmRldi1cdTAwM2VzdGF0cy5zeW5jcCk7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGRldi1cdTAwM2V0eHFfbG9jayk7IGkrKylcbitcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2ZGV2LVx1MDAzZXR4cV9sb2NrW2ldKTtcbiBcdGRldi1cdTAwM2Vwb3J0ID0gcG9ydDtcbiBcdGRldi1cdTAwM2VldGggPSBldGg7XG4gXHRkZXYtXHUwMDNlbmJxID0gbmJxO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oXG5pbmRleCBmZTkzNGY5ZmZlOGExMS4uZmE5YThlZGNlMjJmZmQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oXG5AQCAtNTcwLDI0ICs1NzAsMzEgQEAgc3RydWN0IGFpcm9oYV9xZG1hIHtcbiBcdERFQ0xBUkVfQklUTUFQKHFvc19jaGFubmVsX21hcCwgQUlST0hBX05VTV9RT1NfQ0hBTk5FTFMpO1xuIH07XG4gXG4tZW51bSBhaXJvaGFfcHJpdl9mbGFncyB7XG4tXHRBSVJPSEFfUFJJVl9GX1dBTiA9IEJJVCgwKSxcbitlbnVtIGFpcm9oYV9kZXZfZmxhZ3Mge1xuK1x0QUlST0hBX0RFVl9GX1dBTixcbitcdEFJUk9IQV9ERVZfRl9UWF9RT1MsXG4gfTtcbiBcbiBzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYge1xuK1x0c3RydWN0IGFpcm9oYV9xZG1hIF9fcmN1ICpxZG1hO1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydDtcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcbiBcdHN0cnVjdCBhaXJvaGFfZXRoICpldGg7XG4gXG4gXHRERUNMQVJFX0JJVE1BUChxb3Nfc3FfYm1hcCwgQUlST0hBX05VTV9RT1NfQ0hBTk5FTFMpO1xuLVx0LyogcW9zIHN0YXRzIGNvdW50ZXJzICovXG4tXHR1NjQgY3B1X3R4X3BhY2tldHM7XG4tXHR1NjQgZndkX3R4X3BhY2tldHM7XG4rXHRzdHJ1Y3Qge1xuK1x0XHR1MzIgY3B1X3R4X3BhY2tldHM7XG4rXHRcdHUzMiBmd2RfdHhfcGFja2V0cztcbitcdH0gcW9zX3N0YXRzW0FJUk9IQV9OVU1fUU9TX0NIQU5ORUxTXTtcbiBcbi1cdHUzMiBmbGFncztcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRpbnQgbmJxO1xuIFxuIFx0c3RydWN0IGFpcm9oYV9od19zdGF0cyBzdGF0cztcbitcbitcdC8qIFNlcmlhbGl6ZSBuZXRkZXZfdHhfY29tcGxldGVkX3F1ZXVlKCkgY2FsbHMgcGVyIFRYIHF1ZXVlIGR1cmluZ1xuK1x0ICogUURNQSBtaWdyYXRpb24uXG4rXHQgKi9cbitcdHNwaW5sb2NrX3QgdHhxX2xvY2tbQUlST0hBX05VTV9ORVRERVZfVFhfUklOR1NdO1xuIH07XG4gXG4gc3RydWN0IGFpcm9oYV9nZG1fcG9ydCB7XG5AQCAtNjk0LDcgKzcwMSw3IEBAIHN0YXRpYyBpbmxpbmUgdTE2IGFpcm9oYV9xZG1hX2dldF90eHEoc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hLCB1MTYgcWlkKVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBhaXJvaGFfaXNfbGFuX2dkbV9kZXYoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpXG4ge1xuLVx0cmV0dXJuICEoZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBBSVJPSEFfUFJJVl9GX1dBTik7XG4rXHRyZXR1cm4gIXRlc3RfYml0KEFJUk9IQV9ERVZfRl9XQU4sIFx1MDAyNmRldi1cdTAwM2VmbGFncyk7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBhaXJvaGFfaXNfNzU4MShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoKVxuQEAgLTcxMSw2ICs3MTgsMTYgQEAgaW50IGFpcm9oYV9nZXRfZmVfcG9ydChzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldik7XG4gYm9vbCBhaXJvaGFfaXNfdmFsaWRfZ2RtX2RldihzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLFxuIFx0XHRcdCAgICAgc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpO1xuIFxuK2V4dGVybiBzdHJ1Y3QgbXV0ZXggZmxvd19vZmZsb2FkX211dGV4O1xuK1xuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGFpcm9oYV9xZG1hICpcbithaXJvaGFfcWRtYV9kZXJlZihzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcbit7XG4rXHRyZXR1cm4gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChkZXYtXHUwMDNlcWRtYSxcbitcdFx0XHRcdFx0IGxvY2tkZXBfcnRubF9pc19oZWxkKCkgfHxcbitcdFx0XHRcdFx0IGxvY2tkZXBfaXNfaGVsZChcdTAwMjZmbG93X29mZmxvYWRfbXV0ZXgpKTtcbit9XG4rXG4gdm9pZCBhaXJvaGFfcHBlX3NldF94bWl0X2ZyYW1lX3NpemUoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpO1xuIHZvaWQgYWlyb2hhX3BwZV9zZXRfY3B1X3BvcnQoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYsIHU4IHBwZV9pZCwgdTggZnBvcnQpO1xuIGJvb2wgYWlyb2hhX3BwZV9pc19lbmFibGVkKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsIGludCBpbmRleCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmNcbmluZGV4IGU0YzM2NDRkZDZlYzdhLi4zM2RkZjBkMDc4NTUzOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmNcbkBAIC0xNSw3ICsxNSwxMCBAQFxuICNpbmNsdWRlIFwiYWlyb2hhX3JlZ3MuaFwiXG4gI2luY2x1ZGUgXCJhaXJvaGFfZXRoLmhcIlxuIFxuLXN0YXRpYyBERUZJTkVfTVVURVgoZmxvd19vZmZsb2FkX211dGV4KTtcbisvKiBTZXJpYWxpemUgYWlyb2hhX2dkbV9kZXYgZmxhZ3MsIFFETUEgcG9pbnRlciBhbmQgUFBFIENQVSBwb3J0XG4rICogY29uZmlndXJhdGlvbi5cbisgKi9cbitERUZJTkVfTVVURVgoZmxvd19vZmZsb2FkX211dGV4KTtcbiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHBwZV9sb2NrKTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHJoYXNodGFibGVfcGFyYW1zIGFpcm9oYV9mbG93X3RhYmxlX3BhcmFtcyA9IHtcbkBAIC04Niw4ICs4OSw4IEBAIHN0YXRpYyB1MzIgYWlyb2hhX3BwZV9nZXRfdGltZXN0YW1wKHN0cnVjdCBhaXJvaGFfcHBlICpwcGUpXG4gXG4gdm9pZCBhaXJvaGFfcHBlX3NldF9jcHVfcG9ydChzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiwgdTggcHBlX2lkLCB1OCBmcG9ydClcbiB7XG4tXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtXHUwMDNlcWRtYTtcbi1cdHN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBxZG1hLVx1MDAzZWV0aDtcbitcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XG4rXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gZGV2LVx1MDAzZWV0aDtcbiBcdHU4IHFkbWFfaWQgPSBxZG1hIC0gXHUwMDI2ZXRoLVx1MDAzZXFkbWFbMF07XG4gXHR1MzIgZmVfY3B1X3BvcnQ7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9yZWdzLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaFxuaW5kZXggNmZlZDYzZDAxM2I0MTIuLjQ0MmI0OGM5Yjk5MWVmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9yZWdzLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcmVncy5oXG5AQCAtMzc1LDYgKzM3NSw3IEBAXG4gXG4gI2RlZmluZSBSRUdfU1JDX1BPUlRfRkNfTUFQNlx0XHQweDIyOThcbiAjZGVmaW5lIEZDX0lEX09GX1NSQ19QT1JUX01BU0soX24pXHRHRU5NQVNLKDQgKyAoKF9uKSBcdTAwM2NcdTAwM2MgMyksICgoX24pIFx1MDAzY1x1MDAzYyAzKSlcbisjZGVmaW5lIEZDX01BUDZfREVGX1ZBTFVFXHRcdDB4MWIxYTE5MThcbiBcbiAjZGVmaW5lIFJFR19XQU5fTVRVMFx0XHRcdDB4MjMwMFxuICNkZWZpbmUgV0FOX01UVTFfTUFTS1x0XHRcdEdFTk1BU0soMjksIDE2KVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTg6NTM6NDAuODIzNjU0NTUzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY3NzYxMzYyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEFpcm9oYSBFdGhlcm5ldCBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byB0aGUgQWlyb2hhIGV0aGVybmV0IGRyaXZlciwgc3BlY2lmaWNhbGx5IHBva2luZyBhcm91bmQgaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmNgIGFuZCBpdHMgZnJpZW5kcy4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgdGhlIGludHJvZHVjdGlvbiBvZiBSQ1UgcHJvdGVjdGlvbiBmb3IgYGRldi1cdTAwM2VxZG1hYCBhbmQgdGhlIGFkZGVkIFFvUyBzdXBwb3J0IGZvciBHRE0zLzQuIFRoYXQncyBhIHNpZ25pZmljYW50IGNoYW5nZTsgaXQncyBmdW5jdGlvbmFsbHkgYWx0ZXJpbmcgdGhlIG5ldHdvcmsgZHJpdmVyJ3MgYmVoYXZpb3IuIEkgbmVlZCB0byBiZSBzdXJlIHRoaXMgaXMgZ29pbmcgdG8gYmVoYXZlIGNvcnJlY3RseS5cblxuRmlyc3QsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IHdheSB0byB0ZXN0IHRoaXMgdGhvcm91Z2hseS4gQ2FuIEkgc2ltdWxhdGUgdGhlIEFpcm9oYSBoYXJkd2FyZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBUaGF0IHdvdWxkIG1ha2UgdGVzdGluZyBhbmQgZGVidWdnaW5nIGNvbnNpZGVyYWJseSBlYXNpZXIuIEl0J3MgYSBrZXkgcXVlc3Rpb24uIEkgbmVlZCB0byBrbm93IHRoZSBzcGVjaWZpYyB0YXJnZXQuXG5cbkFuZCB0aGF0IGxlYWRzIG1lIHRvIG15IG5leHQgcXVlc3Rpb246IElzIHRoaXMgZHJpdmVyIGRlc2lnbmVkIGZvciBhIHNwZWNpZmljIFN5c3RlbS1vbi1DaGlwIChTb0MpLCBvciBpcyBpdCBtb3JlIG9mIGEgZ2VuZXJhbCBkcml2ZXIgdGhhdCBzdXBwb3J0cyBhIHNwZWNpZmljIFBDSWUgY2FyZCBpbXBsZW1lbnRhdGlvbj8gVW5kZXJzdGFuZGluZyB0aGUgaGFyZHdhcmUgY29udGV4dCBpcyBjcnVjaWFsIGZvciBpbnRlcnByZXRpbmcgdGhlc2UgY2hhbmdlcy4gSSdsbCB0YWtlIGEgbG9vayBhdCB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnYCBmaWxlIHRvIHNlZSBpZiBJIGNhbiBnZXQgc29tZSBjb250ZXh0LiBUaGF0IHNob3VsZCBwcm92aWRlIHNvbWUgaGludHMgYWJvdXQgdGhlIGhhcmR3YXJlIHJlcXVpcmVtZW50cyBvciB0YXJnZXRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTIxNywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE4OjUzOjQ1LjUwMTI3MTEzM1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzIwMjY5OTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9WRU5ET1JfQUlST0hBXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWc6Mjpjb25maWcgTkVUX1ZFTkRPUl9BSVJPSEFcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZy0zLVxcdGJvb2wgXFxcIkFpcm9oYSBkZXZpY2VzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxODo1Mzo0NS45MzMzMzM2ODVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODAzMzY5Njg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqSW52ZW50b3J5IEFzc2Vzc21lbnQ6IFZlbmRvciBGb2N1cyoqXG5cbkFscmlnaHQsIHNvIHRoZSBpbW1lZGlhdGUgZ29hbCBpcyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGxhbmRzY2FwZSBvZiBkZXZpY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNwZWNpZmljIHZlbmRvci4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHdoYXQgd2UgaGF2ZSBkZXBsb3llZCwgYW5kIHdoZXJlIHdlJ3JlIGF0IHdpdGggaXQuIFRoaXMgaXMgYSBmb3VuZGF0aW9uYWwgc3RlcCwgYW5kIGRlcGVuZGluZyBvbiB0aGUgbGV2ZWwgb2YgZ3JhbnVsYXJpdHkgYXZhaWxhYmxlLCBpdCBtYXkgZ3VpZGUgZnVydGhlciBhbmFseXNpcy4gRGVwZW5kaW5nIG9uIHdoYXQgSSBmaW5kLCB0aGUgZm9jdXMgY291bGQgc2hpZnQgdG8gYSByaXNrIGFzc2Vzc21lbnQsIGEgcGVyZm9ybWFuY2UgcmV2aWV3LCBvciBtYXliZSBldmVuIGEgbGljZW5zZSBjb21wbGlhbmNlIGNoZWNrLCBidXQgZmlyc3QgSSBuZWVkIGEgY29tcGxldGUgcGljdHVyZS4gTGV0J3Mgc2VlIHdoYXQgd2UncmUgd29ya2luZyB3aXRoIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzM5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTg6NTM6NDguNzM2NzA5MDU0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyMzMyMDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfVkVORE9SX0FJUk9IQVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWc6Mjpjb25maWcgTkVUX1ZFTkRPUl9BSVJPSEFcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZy0zLVxcdGJvb2wgXFxcIkFpcm9oYSBkZXZpY2VzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxODo1Mzo0OC44MDkwNDc5NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4MjIyNDYzMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4gVGhlIGZpcnN0IHRoaW5nIEknbSByZWFjaGluZyBmb3IgaXMgdGhlIEtjb25maWcgZmlsZS4gSSdtIGdvaW5nIHRvIHN0YXJ0IHdpdGggYSBxdWljayBzY2FuIG9mIGl0cyBjb250ZW50cy4gSSdtIGxvb2tpbmcgZm9yIHRoZSBrZXkgdmFyaWFibGVzLCBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgb2J2aW91cyBjaGFuZ2VzIGZyb20gdGhlIGxhc3QgdGltZSBJIHRvdWNoZWQgdGhpcy4gSSB3YW50IHRvIHNlZSBpZiBhbnl0aGluZyBqdW1wcyBvdXQgdGhhdCdzIGJlZW4gcmVjZW50bHkgbW9kaWZpZWQsIG9yIGlmIGFueXRoaW5nIGxvb2tzIG91dCBvZiBwbGFjZSBnaXZlbiBteSBjdXJyZW50IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSdzIGdvYWxzLiBJIGFtIGFscmVhZHkgdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBpZiBvbmUgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpcyBjaGFuZ2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjAyMSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE4OjUzOjUxLjYzMTI5NzUyN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzEwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBORVRfVkVORE9SX0FJUk9IQVxcbiAgIDM6XFx0XFx0Ym9vbCBcXFwiQWlyb2hhIGRldmljZXNcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIEFSQ0hfQUlST0hBIHx8IENPTVBJTEVfVEVTVFxcbiAgIDU6XFx0XFx0aGVscFxcbiAgIDY6XFx0XFx0ICBJZiB5b3UgaGF2ZSBhIEFpcm9oYSBTb0Mgd2l0aCBldGhlcm5ldCwgc2F5IFkuXFxuICAgNzpcXHRcXG4gICA4OlxcdGlmIE5FVF9WRU5ET1JfQUlST0hBXFxuICAgOTpcXHRcXG4gIDEwOlxcdGNvbmZpZyBORVRfQUlST0hBX05QVVxcbiAgMTE6XFx0XFx0dHJpc3RhdGUgXFxcIkFpcm9oYSBOUFUgc3VwcG9ydFxcXCJcXG4gIDEyOlxcdFxcdHNlbGVjdCBXQU5UX0RFVl9DT1JFRFVNUFxcbiAgMTM6XFx0XFx0c2VsZWN0IFJFR01BUF9NTUlPXFxuICAxNDpcXHRcXHRoZWxwXFxuICAxNTpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIEFpcm9oYSBOZXR3b3JrIFByb2Nlc3NvciAoTlBVKSBhdmFpbGFibGVcXG4gIDE2OlxcdFxcdCAgb24gdGhlIEFpcm9oYSBTb2MgZmFtaWx5LlxcbiAgMTc6XFx0XFxuICAxODpcXHRjb25maWcgTkVUX0FJUk9IQVxcbiAgMTk6XFx0XFx0dHJpc3RhdGUgXFxcIkFpcm9oYSBTb0MgR2lnYWJpdCBFdGhlcm5ldCBzdXBwb3J0XFxcIlxcbiAgMjA6XFx0XFx0ZGVwZW5kcyBvbiBORVRfRFNBIHx8ICFORVRfRFNBXFxuICAyMTpcXHRcXHRzZWxlY3QgTkVUX0FJUk9IQV9OUFVcXG4gIDIyOlxcdFxcdHNlbGVjdCBQQUdFX1BPT0xcXG4gIDIzOlxcdFxcdGhlbHBcXG4gIDI0OlxcdFxcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIGdpZ2FiaXQgZXRoZXJuZXQgTUFDcyBpbiB0aGVcXG4gIDI1OlxcdFxcdCAgQWlyb2hhIFNvQyBmYW1pbHkuXFxuICAyNjpcXHRcXG4gIDI3OlxcdGNvbmZpZyBORVRfQUlST0hBX0ZMT1dfU1RBVFNcXG4gIDI4OlxcdFxcdGRlZmF1bHQgeVxcbiAgMjk6XFx0XFx0Ym9vbCBcXFwiQWlyb2hhIGZsb3cgc3RhdHNcXFwiXFxuICAzMDpcXHRcXHRkZXBlbmRzIG9uIE5FVF9BSVJPSEEgXFx1MDAyNlxcdTAwMjYgTkVUX0FJUk9IQV9OUFVcXG4gIDMxOlxcdFxcdGhlbHBcXG4gIDMyOlxcdFxcdCAgRW5hYmxlIEFpcm9oYSBmbG93dGFibGUgc3RhdGlzdGljIGNvdW50ZXJzLlxcbiAgMzM6XFx0XFxuICAzNDpcXHRlbmRpZiAjTkVUX1ZFTkRPUl9BSVJPSEFcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTg6NTM6NTEuNjMxNDI2NjA3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE0MjkxMzQ1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEFpcm9oYSBTb0MgR2lnYWJpdCBFdGhlcm5ldCBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGRyaXZlciwgdGhlIFwiQWlyb2hhIFNvQyBHaWdhYml0IEV0aGVybmV0IHN1cHBvcnRcIiBvbmUuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSBpdCdzIGNvbmRpdGlvbmFsIG9uIGBBUkNIX0FJUk9IQWAgb3IgYENPTVBJTEVfVEVTVGAuIE1ha2VzIHNlbnNlLCBpdCdzIHNwZWNpZmljIHRvIHRoYXQgU29DLiBHaXZlbiB0aGF0IGl0J3MgYW4gU29DIGV0aGVybmV0IGRyaXZlciwgaXQncyBwcm9iYWJseSBnb2luZyB0byBiZSBhIHBsYXRmb3JtIGRldmljZS4gTm93LCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgY2FuIEkgZWZmZWN0aXZlbHkgZnV6eiB0aGlzIGluIFFFTVU/IEFuZCB0aGF0J3Mgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gU3RhbmRhcmQgUUVNVSBkb2Vzbid0IHVzdWFsbHkgZW11bGF0ZSBTb0Mtc3BlY2lmaWMgcGxhdGZvcm0gZGV2aWNlcyB1bmxlc3MgdGhlcmUncyBleHBsaWNpdCBzdXBwb3J0IGJ1aWx0LWluLlxuXG5UaGVuIEkgc3RhcnQgdGhpbmtpbmcsIGNhbiBzeXprYWxsZXIgaGVscCBtZSBoZXJlPyBXZWxsLCBzeXprYWxsZXIgKmNhbiogZnV6eiBwbGF0Zm9ybSBkZXZpY2VzLCBpZiB0aGV5J3JlIHNldCB1cCB2aWEgdGhlIGRldmljZSB0cmVlIG9yIGlmIGl0IGNhbiBpbmplY3QgdGhlbS4gQnV0LCBteSBleHBlcmllbmNlIHNheXMgc3l6a2FsbGVyJ3Mgc3RyZW5ndGhzIGxpZSBpbiBQQ0ksIFVTQiwgYW5kIHZpcnR1YWwgZGV2aWNlcy4gUGxhdGZvcm0gZGV2aWNlcyBhcmUgYSBiaXQgdHJpY2tpZXIsIHRoZXkgcmVxdWlyZSBzcGVjaWZpYyBlbXVsYXRvciBtb2RlbHMgb3Igc3l6a2FsbGVyIG5lZWRzIHRvIGdlbmVyYXRlIHRoZXNlLCBhbmQgaXQncyBub3QgdGhlIHVzdWFsIHJvdXRlLlxuXG5Ib2xkIG9uLCBJIHJlY2FsbCBgc3l6X2dlbmV0bGlua2AgYW5kIG90aGVyIG5ldHdvcmsgZnV6emluZyBjYXBhYmlsaXRpZXMgaW4gc3l6a2FsbGVyLiBIb3dldmVyLCBmdXp6aW5nIGEgc3BlY2lmaWMgU29DIGV0aGVybmV0IGRyaXZlciBtZWFucyB0aGUgZGV2aWNlIG5lZWRzIHRvIGJlICpwcm9iZWQqLiBJdCdzIG5vdCBqdXN0IGFib3V0IG5ldHdvcmsgcHJpbWl0aXZlczsgdGhlIGRyaXZlciBoYXMgdG8gc3VjY2Vzc2Z1bGx5IGF0dGFjaCB0byB0aGUgaGFyZHdhcmUuIFNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBkcml2ZXIgaXMgYWN0dWFsbHkgcHJvYmVkLiBMZXQncyBkaWcgaW50byB0aGUgZHJpdmVyJ3MgcHJvYmluZyBtZWNoYW5pc20gYW5kIHNlZSBob3cgaXTigJlzIGluaXRpYWxpemVkLiBUaGF0IHdpbGwgZGV0ZXJtaW5lIGlmIEkgY2FuIGdldCB0aGlzIHRoaW5nIHVwIGFuZCBydW5uaW5nIGZvciBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjY1OSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE4OjUzOjU2Ljc3NDM0MzQzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjY0OTU5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb2R1bGVfcGxhdGZvcm1fZHJpdmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYz0zOTU0PXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGFpcm9oYV9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTM5NjEtfTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jOjM5NjI6bW9kdWxlX3BsYXRmb3JtX2RyaXZlcihhaXJvaGFfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTM5NjMtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jPTgxMz1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhaXJvaGFfbnB1X2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtODIwLX07XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo4MjE6bW9kdWxlX3BsYXRmb3JtX2RyaXZlcihhaXJvaGFfbnB1X2RyaXZlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy04MjItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE4OjUzOjU2Ljg0MTAwNjE2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzOTYwNzQyOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ2hlY2tpbmcgU3l6a2FsbGVyJ3MgUGxhdGZvcm0gRHJpdmVyIENvdmVyYWdlKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIHRoaXMgaXMgcHJvYmFibHkgYSBwbGF0Zm9ybSBkcml2ZXIsIHdoaWNoIG1lYW5zIFN5emthbGxlciBtaWdodCBiZSBhYmxlIHRvIGludGVyYWN0IHdpdGggaXQsIGJ1dCBpdCdzIG5vdCBhIGdpdmVuLiBTeXprYWxsZXIncyBnb29kIGF0IGluc3RhbnRpYXRpbmcgcGxhdGZvcm0gZGV2aWNlcyB3aGVuIGl0IGhhcyB0aGUgcmlnaHQgZGVzY3JpcHRpb25zLCBidXQgdGhvc2UgZGVzY3JpcHRpb25zIGFyZSBvZnRlbiBtaXNzaW5nIGZvciBzcGVjaWFsaXplZCBvciBsZXNzIGNvbW1vbiBTb0MgZXRoZXJuZXQgZHJpdmVycy4gVW5sZXNzIGl0J3MgYSB2ZXJ5IHByZXZhbGVudCBkcml2ZXIgb3Igc29tZW9uZSdzIHNwZWNpZmljYWxseSBhZGRlZCBzdXBwb3J0IGZvciBpdCwgd2UncmUgbGlrZWx5IGdvaW5nIHRvIGJlIGluIHRoZSBkYXJrLiBNeSBmaXJzdCBtb3ZlIGhlcmUgaXMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgU3l6a2FsbGVyIGhhcyBhbnkgYnVpbHQtaW4gZGVzY3JpcHRpb25zIGZvciB0aGUgQWlyb2hhIHBsYXRmb3JtLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0ODYsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxODo1NDowMC4yMzcwODQ1NTVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzODcyMzgyLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhaXJvaGFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwic3lzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTg6NTQ6MDAuMzAwOTY5Mjg3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk5MzU3Njc0NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBBaXJvaGEgRXRoZXJuZXQgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSBuZWVkIHRvIGFzc2VzcyB0aGlzIHBhdGNoIGZvciBmdXp6aW5nIHdvcnRoaW5lc3MuIFRoZSBpbW1lZGlhdGUgY2hhbGxlbmdlIGlzIHRoYXQgSSBjYW4ndCB1c2UgYGdyZXBwZXJgIHRvIHNlYXJjaCB0aGUgYHN5cy9gIGRpcmVjdG9yeS4gVGhhdCdzIGEgZ2l2ZW4uIFRoZSBkb2N1bWVudGF0aW9uIGV4cGxpY2l0bHkgcHJvaGliaXRzIGl0IGJlY2F1c2UgYHN5emthbGxlcmAgZGVzY3JpcHRpb25zIGFuZCBzeXpfIHN5c2NhbGxzIGFyZW4ndCBhY3R1YWxseSBrZXJuZWwgY29kZS4gSXQgbG9va3MgbGlrZSBJIG5lZWQgdG8gZWl0aGVyIHVzZSBgcmVhZC1maWxlYCBvciBgY29kZXNlYXJjaC1kaXItaW5kZXhgLCBidXQgaG9sZCBvbi4uLiB0aGUgaW5zdHJ1Y3Rpb25zIHNwZWNpZmljYWxseSBzYXkgSSBzaG91bGQgYmUgdXNpbmcgYHt7LnRvb2xSZWFkRGVzY3JpcHRpb259fWAgaW5zdGVhZC4gKldhaXQgYSBzZWNvbmQhKiBUaGVyZSBpc24ndCBhIGB0b29sUmVhZERlc2NyaXB0aW9uYCB0b29sIGluIHRoZSBsaXN0LiBUaGlzIGlzIGZydXN0cmF0aW5nLiBPa2F5LCBJJ20gbGVmdCB3aXRoIHRoZSBvdGhlciB0b29scy4gSSBjYW4ndCBjaGVjayBzeXprYWxsZXIgZGVzY3JpcHRpb25zLlxuXG5BbHJpZ2h0LCByZWZvY3VzLiBUaGUgaW5zdHJ1Y3Rpb25zIHRlbGwgbWUgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIHVuZGVyIHNwZWNpZmljIGNpcmN1bXN0YW5jZXMuIExldCBtZSBzZWUuLi4gRG9jdW1lbnRhdGlvbi9LY29uZmlnIGNoYW5nZXMsIGNvbW1lbnRzLCBkZWNvcmF0aXZlIGNoYW5nZXMsIGNvbnN0YW50cy9tYWNyb3Mgd2l0aG91dCBmdW5jdGlvbmFsIGltcGFjdCwgYW5kICpjcnVjaWFsbHkqIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UuIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIEdQVSBkcml2ZXJzIHRoYXQgbmVlZCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gUUVNVSwgb3IgYC5yZW1vdmUvLnNodXRkb3duYCBjYWxsYmFja3MgYXJlIGFsc28gb3V0LlxuXG5UaGlzIGlzIGFuIEFpcm9oYSBTb0Mtc3BlY2lmaWMgZXRoZXJuZXQgZHJpdmVyLiBJdCByZXF1aXJlcyBhIHBoeXNpY2FsIEFpcm9oYSBTb0Mgb3IgYW4gQWlyb2hhIGVtdWxhdG9yIHRvIGZ1bmN0aW9uLiBTdGFuZGFyZCBRRU1VIGRvZXNuJ3QgZW11bGF0ZSBBaXJvaGEgU29Dcy4gSXQncyAqbm90KiBhIFBDSWUgc3dpdGNoIG9yIFNtYXJ0TklDLCBzbyB0aGF0IGlzbid0IHRoZSBwcm9ibGVtLiBCdXQgaXQgYWJzb2x1dGVseSBmYWxscyB1bmRlciBcIkNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZVwiLiBUaGVzZSBraW5kcyBvZiBwbGF0Zm9ybSBkZXZpY2VzLCBsaWtlIEFpcm9oYSBFTjc1ODEsIGFyZSBqdXN0IG5vdCBlbXVsYXRlZCBieSBzdGFuZGFyZCBRRU1VLiBUaGF0IG1lYW5zIHRoZSBkcml2ZXIncyBgcHJvYmVgIGZ1bmN0aW9uLCB3aGljaCBpcyB0aGUgZW50cnkgcG9pbnQsIHdpbGwgbmV2ZXIgYmUgY2FsbGVkLiBOb25lIG9mIHRoZSBjb2RlIG1vZGlmaWVkIGluIHRoaXMgcGF0Y2ggd2lsbCBldmVyIGJlIGV4ZWN1dGVkLlxuXG5MZXQncyBkbyBhIHF1aWNrIGRvdWJsZS1jaGVjaywgdGhvdWdoLiBQbGF0Zm9ybSBkcml2ZXJzIGJpbmQgdG8gZGV2aWNlcyB2aWEgRGV2aWNlIFRyZWUgb3IgQUNQSS4gVW5sZXNzIFFFTVUgaXMgY29uZmlndXJlZCB0byBlbXVsYXRlIGEgbWFjaGluZSB0aGF0ICppbmNsdWRlcyogYW4gQWlyb2hhIGRldmljZSBpbiBpdHMgRFQsIGl0IHdvbid0IGV4aXN0LiBTdGFuZGFyZCBzeXprYWxsZXIgdXNlcyBnZW5lcmljIG1hY2hpbmUgdHlwZXMsIGxpa2UgYHEzNWAgZm9yIHg4Nl82NCBvciBgdmlydGAgZm9yIGFybTY0LiBUaG9zZSBkb24ndCBtb2RlbCBBaXJvaGEgZXRoZXJuZXQgTUFDcy4gVGhlIGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgUUVNVS5cblxuSSBuZWVkIHRvIHZlcmlmeSB0aGUgZHJpdmVyJ3MgY29tcGF0aWJsZSBzdHJpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzI5LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE4OjU0OjEwLjIzNjc0MDMzMVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjY2Nzk4MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib2ZfZGV2aWNlX2lkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYz0zOTM1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYWlyb2hhX2V0aF9zb2NfZGF0YSBhbjc1ODNfc29jX2RhdGEgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTM5NDYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYzozOTQ3OnN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9mX2Fpcm9oYV9tYXRjaFtdID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMzk0OC1cXHR7IC5jb21wYXRpYmxlID0gXFxcImFpcm9oYSxlbjc1ODEtZXRoXFxcIiwgLmRhdGEgPSBcXHUwMDI2ZW43NTgxX3NvY19kYXRhIH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE4OjU0OjEwLjMwMzQyOTc5MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDU4NTI3NjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZyBBc3Nlc3NtZW50KipcblxuT2theSwgc28gSSd2ZSBsb29rZWQgaW50byB0aGlzIGRyaXZlciwgYGFpcm9oYSxlbjc1ODEtZXRoYCBhbmQgYGFpcm9oYSxhbjc1ODMtZXRoYC4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhlc2UgYXJlICpzcGVjaWZpYyogQWlyb2hhIFNvQyBkcml2ZXJzLCB0YXJnZXRpbmcgdGhvc2UgcGFydGljdWxhciBoYXJkd2FyZSBwbGF0Zm9ybXMuIEFuZCB0aGF0J3MgdGhlIGtleSBpc3N1ZS4gSSBrbm93IHRoYXQgUUVNVSwgdGhlIHN0YW5kYXJkIGVtdWxhdG9yIFN5emthbGxlciByZWxpZXMgb24sIGRvZXNuJ3QgYWN0dWFsbHkgbW9kZWwgYW55IEFpcm9oYSBTb0NzLiBUaGVyZSdzIG5vIEFpcm9oYSBtYWNoaW5lIHR5cGUgYXZhaWxhYmxlIHdpdGhpbiB0aGUgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudCB1c2VkIGJ5IFN5emthbGxlci4gVGhpcyBtZWFucywgcHJhY3RpY2FsbHkgc3BlYWtpbmcsIHRoYXQgdGhpcyBwYXJ0aWN1bGFyIGRyaXZlciBhbmQsIGJ5IGV4dGVuc2lvbiwgdGhlIG1vZGlmaWVkIGNvZGUgaW4gcXVlc3Rpb24sIGlzIHV0dGVybHkgdW5yZWFjaGFibGUgZHVyaW5nIGFueSBraW5kIG9mIGZ1enppbmcgcnVuIGluIGEgdmlydHVhbGl6ZWQgc2V0dGluZy4gVGhlIGNvZGUganVzdCB3b24ndCBiZSB0cmlnZ2VyZWQuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGZsYWcgaXQgYXMgc3VjaC4gSSdtIGdvaW5nIHRvIHNldCBXb3J0aEZ1enppbmc9ZmFsc2UgYmVjYXVzZSBpdCBpcyBhbiBTb0Mtc3BlY2lmaWMgcGxhdGZvcm0gZHJpdmVyIChBaXJvaGEgRXRoZXJuZXQpIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGF0LCBhcyBJIHNlZSBpdCwgbWFrZXMgdGhlIGNvZGUgdW5yZWFjaGFibGUgaW4gYW55IHZpcnR1YWxpemVkIHRlc3QgZW52aXJvbm1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MjIzLCJPdXRwdXRUb2tlbnMiOjEyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxODo1NDoxNS4zNjE5NjA0MDRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTUzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQWlyb2hhIFNvQyBHaWdhYml0IEV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhKS4gVGhpcyBpcyBhIHBsYXRmb3JtIGRyaXZlciBmb3Igc3BlY2lmaWMgQWlyb2hhIFNvQ3MgKGUuZy4sIGVuNzU4MSwgYW43NTgzKSB3aGljaCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50cy4gQmVjYXVzZSB0aGUgaGFyZHdhcmUgaXMgbm90IHByZXNlbnQgb3IgZW11bGF0ZWQsIHRoZSBkcml2ZXIgd2lsbCBub3QgcHJvYmUgYW5kIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFpcm9oYSBTb0MgR2lnYWJpdCBFdGhlcm5ldCBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYSkuIFRoaXMgaXMgYSBwbGF0Zm9ybSBkcml2ZXIgZm9yIHNwZWNpZmljIEFpcm9oYSBTb0NzIChlLmcuLCBlbjc1ODEsIGFuNzU4Mykgd2hpY2ggYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudHMuIEJlY2F1c2UgdGhlIGhhcmR3YXJlIGlzIG5vdCBwcmVzZW50IG9yIGVtdWxhdGVkLCB0aGUgZHJpdmVyIHdpbGwgbm90IHByb2JlIGFuZCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowt7h58[1] Phase: Running StartedAt: 2026-07-26 18:54:27 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt7h58[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-26 18:54:27 +0000 UTC FinishedAt: 2026-07-26 18:54:33 +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,}