Name: series-workflow5wppw Phase: Failed StartedAt: 2026-09-11 12:23:37 +0000 UTC FinishedAt: 2026-09-11 12:47:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wppw[0] Phase: Succeeded StartedAt: 2026-09-11 12:23:37 +0000 UTC FinishedAt: 2026-09-11 12:47:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wppw[0].run-triage Phase: Succeeded StartedAt: 2026-09-11 12:23:37 +0000 UTC FinishedAt: 2026-09-11 12:47:22 +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+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjQ2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGV4Y2x1c2l2ZWx5IG1vZGlmaWVzIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBSVlUvTklDIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvKSwgYWRkaW5nIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBzdXBwb3J0IGFuZCByZWZhY3RvcmluZyBmbGFnIGJpdG1hc2sgb3BlcmF0aW9ucy4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgc3BlY2lmaWMgcGh5c2ljYWwgTWFydmVsbCBPY3Rlb25UWDIgLyBDTjEwSyBoYXJkd2FyZS9BU0lDcyBhbmQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIHZpcnR1YWxpemF0aW9uIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3Igc3l6a2FsbGVyIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjQ2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOTJjMTMzNGNkOWU1MDQ4ZTNjNjUxZjE3MzVhZDAyMDE4YWJjMGQ4NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDEyOjQ2OjUxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguY1xuaW5kZXggZDgwZDJjMDBiZDg0My4uMmQxYWI4Yzc2MWM0MCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jXG5AQCAtMzMxLDggJiM0MzszMzEsMTIgQEAgc3RhdGljIGJvb2wgaXNfdmFsaWRfdHhzY2hxKHN0cnVjdCBydnUgKnJ2dSwgaW50IGJsa2FkZHIsXG4gXHRcdFx0cmV0dXJuIHRydWU7XG4gXHR9XG4gXG4tXHRpZiAobWFwX2Z1bmMgIT0gcGNpZnVuYylcbiYjNDM7XHRpZiAobWFwX2Z1bmMgIT0gcGNpZnVuYykge1xuJiM0MztcdFx0ZGV2X2Vycl9yYXRlbGltaXRlZChydnUtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdCAgICBcJiMzNDtwY2lmdW5jICV4IG1hcCBwY2lmdW5jICV4IG5vdCBlcXVhbCwgbHZsPSV1IHNjaHE9JXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgIHBjaWZ1bmMsIG1hcF9mdW5jLCBsdmwsIHNjaHEpO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0fVxuIFxuIFx0cmV0dXJuIHRydWU7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9jbjEwa19pcHNlYy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL2NuMTBrX2lwc2VjLmNcbmluZGV4IDc3NTQzZDQ3MjM0NWUuLjUwZWM0NTQyYzQxODMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvY24xMGtfaXBzZWMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL2NuMTBrX2lwc2VjLmNcbkBAIC0zMzQsNyAmIzQzOzMzNCw3IEBAIHN0YXRpYyBpbnQgY24xMGtfb3V0Yl9jcHRfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0XHRcdFx0XHRcdENOMTBLX0NQVF9MRl9OUVgoMCkpO1xuIFxuIFx0LyogU2V0IGlwc2VjIG9mZmxvYWQgZW5hYmxlZCBmb3IgdGhpcyBkZXZpY2UgKi9cbi1cdHBmLVx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19JUFNFQ19PRkZMT0FEX0VOQUJMRUQ7XG4mIzQzO1x0b3R4Ml9zZXRfZmxhZyhwZiwgT1RYMl9GTEFHX0lQU0VDX09GRkxPQURfRU5BQkxFRCk7XG4gXG4gXHRjbjEwa19jcHRfZGV2aWNlX3NldF9hdmFpbGFibGUocGYpO1xuIFx0cmV0dXJuIDA7XG5AQCAtMzU2LDcgJiM0MzszNTYsNyBAQCBzdGF0aWMgaW50IGNuMTBrX291dGJfY3B0X2NsZWFuKHN0cnVjdCBvdHgyX25pYyAqcGYpXG4gXHR9XG4gXG4gXHQvKiBTZXQgaXBzZWMgb2ZmbG9hZCBkaXNhYmxlZCBmb3IgdGhpcyBkZXZpY2UgKi9cbi1cdHBmLVx1MDAzZWZsYWdzIFx1MDAyNj0gfk9UWDJfRkxBR19JUFNFQ19PRkZMT0FEX0VOQUJMRUQ7XG4mIzQzO1x0b3R4Ml9jbGVhcl9mbGFnKHBmLCBPVFgyX0ZMQUdfSVBTRUNfT0ZGTE9BRF9FTkFCTEVEKTtcbiBcbiBcdC8qIERpc2FibGUgQ1BUTEYgSW5zdHJ1Y3Rpb24gUXVldWUgKElRKSAqL1xuIFx0Y24xMGtfb3V0Yl9jcHRsZl9pcV9kaXNhYmxlKHBmKTtcbkBAIC04MjAsNyAmIzQzOzgyMCw3IEBAIHZvaWQgY24xMGtfaXBzZWNfY2xlYW4oc3RydWN0IG90eDJfbmljICpwZilcbiBcdGlmICghaXNfZGV2X3N1cHBvcnRfaXBzZWNfb2ZmbG9hZChwZi1cdTAwM2VwZGV2KSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0aWYgKCEocGYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19JUFNFQ19PRkZMT0FEX0VOQUJMRUQpKVxuJiM0MztcdGlmICghb3R4Ml90ZXN0X2ZsYWcocGYsIE9UWDJfRkxBR19JUFNFQ19PRkZMT0FEX0VOQUJMRUQpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRpZiAocGYtXHUwMDNlaXBzZWMuc2Ffd29ya3EpIHtcbkBAIC05NDUsNyAmIzQzOzk0NSw3IEBAIGJvb2wgY24xMGtfaXBzZWNfdHJhbnNtaXQoc3RydWN0IG90eDJfbmljICpwZiwgc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxLFxuIFx0dTE2IGRsZW47XG4gXG4gXHQvKiBDaGVjayBmb3IgSVBTRUMgb2ZmbG9hZCBlbmFibGVkICovXG4tXHRpZiAoIShwZi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX0lQU0VDX09GRkxPQURfRU5BQkxFRCkpXG4mIzQzO1x0aWYgKCFvdHgyX3Rlc3RfZmxhZyhwZiwgT1RYMl9GTEFHX0lQU0VDX09GRkxPQURfRU5BQkxFRCkpXG4gXHRcdGdvdG8gZHJvcDtcbiBcbiBcdHNwID0gc2tiX3NlY19wYXRoKHNrYik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uY1xuaW5kZXggMTc1OTkyMTg4YzE4YS4uNWJhZDI0NjZkYTBjNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uY1xuQEAgLTIyMCwxMCAmIzQzOzIyMCwxMCBAQCBpbnQgb3R4Ml9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdm9pZCAqcClcbiBcdFx0ZXRoX2h3X2FkZHJfc2V0KG5ldGRldiwgYWRkci1cdTAwM2VzYV9kYXRhKTtcbiBcdFx0LyogdXBkYXRlIGRtYWMgZmllbGQgaW4gdmxhbiBvZmZsb2FkIHJ1bGUgKi9cbiBcdFx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19SWF9WTEFOX1NVUFBPUlQpXG4mIzQzO1x0XHQgICAgb3R4Ml90ZXN0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1JYX1ZMQU5fU1VQUE9SVCkpXG4gXHRcdFx0b3R4Ml9pbnN0YWxsX3J4dmxhbl9vZmZsb2FkX2Zsb3cocGZ2Zik7XG4gXHRcdC8qIHVwZGF0ZSBkbWFjIGFkZHJlc3MgaW4gbnR1cGxlIGFuZCBETUFDIGZpbHRlciBsaXN0ICovXG4tXHRcdGlmIChwZnZmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfRE1BQ0ZMVFJfU1VQUE9SVClcbiYjNDM7XHRcdGlmIChvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfRE1BQ0ZMVFJfU1VQUE9SVCkpXG4gXHRcdFx0b3R4Ml9kbWFjZmx0X3VwZGF0ZV9wZm1hY19mbG93KHBmdmYpO1xuIFx0fSBlbHNlIHtcbiBcdFx0cmV0dXJuIC1FUEVSTTtcbkBAIC0yNzUsOCAmIzQzOzI3NSw4IEBAIGludCBvdHgyX2NvbmZpZ19wYXVzZV9mcm0oc3RydWN0IG90eDJfbmljICpwZnZmKVxuIFx0XHRnb3RvIHVubG9jaztcbiBcdH1cbiBcbi1cdHJlcS1cdTAwM2VyeF9wYXVzZSA9ICEhKHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19SWF9QQVVTRV9FTkFCTEVEKTtcbi1cdHJlcS1cdTAwM2V0eF9wYXVzZSA9ICEhKHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19UWF9QQVVTRV9FTkFCTEVEKTtcbiYjNDM7XHRyZXEtXHUwMDNlcnhfcGF1c2UgPSBvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfUlhfUEFVU0VfRU5BQkxFRCk7XG4mIzQzO1x0cmVxLVx1MDAzZXR4X3BhdXNlID0gb3R4Ml90ZXN0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1RYX1BBVVNFX0VOQUJMRUQpO1xuIFx0cmVxLVx1MDAzZXNldCA9IDE7XG4gXG4gXHRlcnIgPSBvdHgyX3N5bmNfbWJveF9tc2coXHUwMDI2cGZ2Zi1cdTAwM2VtYm94KTtcbkBAIC02MTUsNiAmIzQzOzYxNSwxNDIgQEAgdm9pZCBvdHgyX2dldF9tYWNfZnJvbV9hZihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIH1cbiBFWFBPUlRfU1lNQk9MKG90eDJfZ2V0X21hY19mcm9tX2FmKTtcbiBcbiYjNDM7c3RhdGljIGludFxuJiM0MztvdHgyX25peF90bXFfcmVnX3dyaXRlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGNudCxcbiYjNDM7XHRcdCAgICAgICB1NjQgcmVnX2FkZHJbTUFYX1JFR1NfUEVSX01CT1hfTVNHXSxcbiYjNDM7XHRcdCAgICAgICB1NjQgcmVnX3ZhbFtNQVhfUkVHU19QRVJfTUJPWF9NU0ddKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1ib3ggKm1ib3ggPSBcdTAwMjZwZnZmLVx1MDAzZW1ib3g7XG4mIzQzO1x0c3RydWN0IG5peF90eHNjaHFfY29uZmlnICpyZXE7XG4mIzQzO1x0aW50IGksIGVycjtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZtYm94LVx1MDAzZWxvY2spO1xuJiM0MztcdHJlcSA9IG90eDJfbWJveF9hbGxvY19tc2dfbml4X3R4c2NocV9jZmcobWJveCk7XG4mIzQzO1x0aWYgKCFyZXEpIHtcbiYjNDM7XHRcdG11dGV4X3VubG9jayhcdTAwMjZtYm94LVx1MDAzZWxvY2spO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXEtXHUwMDNlbHZsID0gTklYX1RYU0NIX0xWTF9NRFE7XG4mIzQzO1x0cmVxLVx1MDAzZW51bV9yZWdzID0gY250O1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjbnQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRyZXEtXHUwMDNlcmVnW2ldID0gcmVnX2FkZHJbaV07XG4mIzQzO1x0XHRyZXEtXHUwMDNlcmVndmFsW2ldID0gcmVnX3ZhbFtpXTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVyciA9IG90eDJfc3luY19tYm94X21zZyhtYm94KTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4mIzQzO3tcbiYjNDM7XHR1NjQgcmVnX2FkZHJbTUFYX1JFR1NfUEVSX01CT1hfTVNHXTtcbiYjNDM7XHR1NjQgcmVnX3ZhbFtNQVhfUkVHU19QRVJfTUJPWF9NU0ddO1xuJiM0MztcdGludCBlcnIsIHNtcSwgaSwgY250ID0gMDtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcGZ2Zi1cdTAwM2Vody50eHNjaHFfY250W05JWF9UWFNDSF9MVkxfU01RXTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHNtcSA9IHBmdmYtXHUwMDNlaHcudHhzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9TTVFdW2ldO1xuJiM0MztcbiYjNDM7XHRcdHJlZ19hZGRyW2NudF0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTtcbiYjNDM7XHRcdHJlZ192YWxbY250XSA9IDA7XG4mIzQzO1x0XHRjbnQmIzQzOyYjNDM7O1xuJiM0MztcbiYjNDM7XHRcdHJlZ19hZGRyW2NudF0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTtcbiYjNDM7XHRcdHJlZ192YWxbY250XSA9IDA7XG4mIzQzO1x0XHRjbnQmIzQzOyYjNDM7O1xuJiM0MztcbiYjNDM7XHRcdGlmIChjbnQgXHUwMDNjIE1BWF9SRUdTX1BFUl9NQk9YX01TRyAtIDEpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdGVyciA9IG90eDJfbml4X3RtcV9yZWdfd3JpdGUocGZ2ZiwgY250LFxuJiM0MztcdFx0XHRcdFx0ICAgICByZWdfYWRkciwgcmVnX3ZhbCk7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRnb3RvIGZhaWw7XG4mIzQzO1x0XHRjbnQgPSAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGNudCkge1xuJiM0MztcdFx0ZXJyID0gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCBjbnQsXG4mIzQzO1x0XHRcdFx0XHQgICAgIHJlZ19hZGRyLCByZWdfdmFsKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdGdvdG8gZmFpbDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztmYWlsOlxuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbiYjNDM7XHRcdFx0XHQgaW50IHR4cSwgdTY0IG1pbnJhdGUsIHU2NCBtYXhyYXRlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1ib3ggKm1ib3ggPSBcdTAwMjZwZnZmLVx1MDAzZW1ib3g7XG4mIzQzO1x0c3RydWN0IG5peF90eHNjaHFfY29uZmlnICpyZXE7XG4mIzQzO1x0aW50IGVyciwgc21xLCBuID0gMDtcbiYjNDM7XHR1NjQgcmVnX2FkZHJbMl07XG4mIzQzO1x0dTY0IHJlZ192YWxbMl07XG4mIzQzO1x0dTY0IHJhdGU7XG4mIzQzO1xuJiM0MztcdGlmICghbWF4cmF0ZSBcdTAwMjZcdTAwMjYgIW1pbnJhdGUpIHtcbiYjNDM7XHRcdHNtcSA9IG90eDJfZ2V0X3NtcV9pZHgocGZ2ZiwgdHhxKTtcbiYjNDM7XHRcdHJlZ19hZGRyWzBdID0gTklYX0FGX01EUVhfUElSKHNtcSk7XG4mIzQzO1x0XHRyZWdfdmFsWzBdID0gMDtcbiYjNDM7XHRcdHJlZ19hZGRyWzFdID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7XG4mIzQzO1x0XHRyZWdfdmFsWzFdID0gMDtcbiYjNDM7XHRcdHJldHVybiBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIDIsIHJlZ19hZGRyLCByZWdfdmFsKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNtcSA9IG90eDJfZ2V0X3NtcV9pZHgocGZ2ZiwgdHhxKTtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZtYm94LVx1MDAzZWxvY2spO1xuJiM0MztcdHJlcSA9IG90eDJfbWJveF9hbGxvY19tc2dfbml4X3R4c2NocV9jZmcobWJveCk7XG4mIzQzO1x0aWYgKCFyZXEpIHtcbiYjNDM7XHRcdG11dGV4X3VubG9jayhcdTAwMjZtYm94LVx1MDAzZWxvY2spO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXEtXHUwMDNlbHZsID0gTklYX1RYU0NIX0xWTF9NRFE7XG4mIzQzO1xuJiM0MztcdC8qIE1RUFJJTyBleHBvc2VzIG9ubHkgbWluL21heCByYXRlLCBub3QgYnVyc3QuICBQYXNzIGJ1cnN0IDAgc29cbiYjNDM7XHQgKiBvdHgyX2dldF9lZ3Jlc3NfYnVyc3RfY2ZnKCkgcHJvZ3JhbW1lcyB0aGUgbGFyZ2VzdCBidXJzdCB0aGUgTklYXG4mIzQzO1x0ICogZW5jb2Rpbmcgc3VwcG9ydHMgKENOMTBLX01BWF9CVVJTVF9TSVpFIG9uIENOMTBLKS4gIFRoaXMgZGlmZmVyc1xuJiM0MztcdCAqIGZyb20gdGhlIDY1NTM2IGJ5dGUgZGVmYXVsdCB1c2VkIGluIHRoZSBIVEIgcGF0aCwgd2hpY2ggaXMgYVxuJiM0MztcdCAqIGtlcm5lbC1zaWRlIGRlZmF1bHQgd2hlbiBubyBleHBsaWNpdCBidXJzdCBpcyBjb25maWd1cmVkLCBub3QgYVxuJiM0MztcdCAqIGhhcmR3YXJlIGNhcC5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIG1xcHJpbyBzZXR1cCByZXN0YXJ0cyB0aGUgbmV0ZGV2IChvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldiksXG4mIzQzO1x0ICogd2hpY2ggcmVzZXRzIE1EUSBzaGFwZXJzIHRvIHplcm8uICBQcm9ncmFtIGJvdGggUElSIGFuZCBDSVIgb25cbiYjNDM7XHQgKiBldmVyeSB1cGRhdGUgc28gb21pdHRlZCByYXRlcyBhcmUgYXBwbGllZCBleHBsaWNpdGx5IHJhdGhlciB0aGFuXG4mIzQzO1x0ICogcmVseWluZyBvbiBzdGFsZSBoYXJkd2FyZSBzdGF0ZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXEtXHUwMDNlcmVnW25dID0gTklYX0FGX01EUVhfUElSKHNtcSk7XG4mIzQzO1x0aWYgKG1heHJhdGUpIHtcbiYjNDM7XHRcdHJhdGUgPSBvdHgyX2NvbnZlcnRfcmF0ZShtYXhyYXRlKTtcbiYjNDM7XHRcdHJlcS1cdTAwM2VyZWd2YWxbbl0gPSBvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwocGZ2ZiwgcmF0ZSwgMCk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHJlcS1cdTAwM2VyZWd2YWxbbl0gPSAwO1xuJiM0MztcdH1cbiYjNDM7XHRuJiM0MzsmIzQzOztcbiYjNDM7XG4mIzQzO1x0LyogQ0lSJiM0MztQSVIgc3VwcG9ydCBpcyByZXF1aXJlZCBhbmQgY2hlY2tlZCBhdCBtcXByaW8gc2V0dXAuICovXG4mIzQzO1x0cmVxLVx1MDAzZXJlZ1tuXSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpO1xuJiM0MztcdGlmIChtaW5yYXRlKSB7XG4mIzQzO1x0XHRyYXRlID0gb3R4Ml9jb252ZXJ0X3JhdGUobWlucmF0ZSk7XG4mIzQzO1x0XHRyZXEtXHUwMDNlcmVndmFsW25dID0gb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIHJhdGUsIDApO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRyZXEtXHUwMDNlcmVndmFsW25dID0gMDtcbiYjNDM7XHR9XG4mIzQzO1x0biYjNDM7JiM0Mzs7XG4mIzQzO1x0cmVxLVx1MDAzZW51bV9yZWdzID0gbjtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gb3R4Ml9zeW5jX21ib3hfbXNnKG1ib3gpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZtYm94LVx1MDAzZWxvY2spO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4gaW50IG90eDJfdHhzY2hxX2NvbmZpZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBsdmwsIGludCBwcmlvLCBib29sIHR4c2NocV9mb3JfcGZjKVxuIHtcbiBcdHUxNiAoKnNjaHFfbGlzdClbTUFYX1RYU0NIUV9QRVJfRlVOQ107XG5AQCAtNjUxLDcgJiM0Mzs3ODcsMTEgQEAgaW50IG90eDJfdHhzY2hxX2NvbmZpZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBsdmwsIGludCBwcmlvLCBib29sIHR4c2NocV9mb3JcbiBcdFx0XHRcdFx0XHQodTY0KWh3LVx1MDAzZXNtcV9saW5rX3R5cGUpO1xuIFx0XHRyZXEtXHUwMDNlbnVtX3JlZ3MmIzQzOyYjNDM7O1xuIFx0XHQvKiBNRFEgY29uZmlnICovXG4tXHRcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bcHJpb107XG4mIzQzO1x0XHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdClcbiYjNDM7XHRcdFx0cGFyZW50ID0gc2NocV9saXN0W05JWF9UWFNDSF9MVkxfVEw0XVswXTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0cGFyZW50ID0gc2NocV9saXN0W05JWF9UWFNDSF9MVkxfVEw0XVtwcmlvXTtcbiYjNDM7XG4gXHRcdHJlcS1cdTAwM2VyZWdbMV0gPSBOSVhfQUZfTURRWF9QQVJFTlQoc2NocSk7XG4gXHRcdHJlcS1cdTAwM2VyZWd2YWxbMV0gPSBwYXJlbnQgXHUwMDNjXHUwMDNjIDE2O1xuIFx0XHRyZXEtXHUwMDNlbnVtX3JlZ3MmIzQzOyYjNDM7O1xuQEAgLTc3OSw2ICYjNDM7OTE5LDkgQEAgaW50IG90eDJfdHhzY2hfYWxsb2Moc3RydWN0IG90eDJfbmljICpwZnZmKVxuIFx0XHRyZXEtXHUwMDNlc2NocVtOSVhfVFhTQ0hfTFZMX1RMNF0gPSBjaGFuX2NudDtcbiBcdH1cbiBcbiYjNDM7XHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdClcbiYjNDM7XHRcdHJlcS1cdTAwM2VzY2hxW05JWF9UWFNDSF9MVkxfU01RXSA9IHBmdmYtXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXM7XG4mIzQzO1xuIFx0cmMgPSBvdHgyX3N5bmNfbWJveF9tc2coXHUwMDI2cGZ2Zi1cdTAwM2VtYm94KTtcbiBcdGlmIChyYylcbiBcdFx0cmV0dXJuIHJjO1xuQEAgLTg0NCw2ICYjNDM7OTg3LDcgQEAgdm9pZCBvdHgyX3R4c2NocV9zdG9wKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiBcbiBcdC8qIENsZWFyIHRoZSB0eHNjaHEgbGlzdCAqL1xuIFx0Zm9yIChsdmwgPSAwOyBsdmwgXHUwMDNjIE5JWF9UWFNDSF9MVkxfQ05UOyBsdmwmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRwZnZmLVx1MDAzZWh3LnR4c2NocV9jbnRbbHZsXSA9IDA7XG4gXHRcdGZvciAoc2NocSA9IDA7IHNjaHEgXHUwMDNjIE1BWF9UWFNDSFFfUEVSX0ZVTkM7IHNjaHEmIzQzOyYjNDM7KVxuIFx0XHRcdHBmdmYtXHUwMDNlaHcudHhzY2hxX2xpc3RbbHZsXVtzY2hxXSA9IDA7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaFxuaW5kZXggZWVjZWU2MTJiN2IyYy4uNmU3MTMyZjI3YjYyMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaFxuQEAgLTE3LDYgJiM0MzsxNyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc29jL21hcnZlbGwvc2lsaWNvbnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NvYy9tYXJ2ZWxsL29jdGVvbnR4Mi9hc20uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9tYWNzZWMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L3BrdF9zY2hlZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3BrdF9jbHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9kZXZsaW5rLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90aW1lNjQuaFx1MDAzZVxuQEAgLTQ4Myw2ICYjNDM7NDg0LDIzIEBAIHN0cnVjdCBwZl9pcnFfZGF0YSB7XG4gXHRpbnQgbWRldnM7XG4gfTtcbiBcbiYjNDM7c3RydWN0IG1xX29mZmxvYWRfc25hcCB7XG4mIzQzO1x0dTY0IG1pbl9yYXRlW1RDX1FPUFRfTUFYX1FVRVVFXTtcbiYjNDM7XHR1NjQgbWF4X3JhdGVbVENfUU9QVF9NQVhfUVVFVUVdO1xuJiM0MztcdF9fdTggbnVtX3RjO1xuJiM0MztcdF9fdTE2IGNvdW50W1RDX1FPUFRfTUFYX1FVRVVFXTtcbiYjNDM7XHRfX3UxNiBvZmZzZXRbVENfUU9QVF9NQVhfUVVFVUVdO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IG90eDJfbXFwcmlvIHtcbiYjNDM7XHR1MzJcdGZsYWdzO1xuJiM0MztcdHU2NFx0Km1pbl9yYXRlO1xuJiM0MztcdHU2NFx0Km1heF9yYXRlO1xuJiM0MztcdGJvb2xcdHJhdGVfbGltaXQ7XG4mIzQzO1x0Ym9vbFx0cmVwbGFjZV9zZXR1cF9kb25lO1xuJiM0MztcdGJvb2xcdHJlcGxhY2VfZ3JhZnRfZG9uZTtcbiYjNDM7fTtcbiYjNDM7XG4gc3RydWN0IG90eDJfbmljIHtcbiBcdHZvaWQgX19pb21lbVx0XHQqcmVnX2Jhc2U7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZVx0Km5ldGRldjtcbkBAIC00OTEsMzAgJiM0Mzs1MDksMzUgQEAgc3RydWN0IG90eDJfbmljIHtcbiBcdHUxNlx0XHRcdHR4X21heF9wa3RsZW47XG4gXHR1MTZcdFx0XHRyYnNpemU7IC8qIFJlY2VpdmUgYnVmZmVyIHNpemUgKi9cbiBcbi0jZGVmaW5lIE9UWDJfRkxBR19SWF9UU1RBTVBfRU5BQkxFRFx0XHRCSVRfVUxMKDApXG4tI2RlZmluZSBPVFgyX0ZMQUdfVFhfVFNUQU1QX0VOQUJMRURcdFx0QklUX1VMTCgxKVxuLSNkZWZpbmUgT1RYMl9GTEFHX0lOVEZfRE9XTlx0XHRcdEJJVF9VTEwoMilcbi0jZGVmaW5lIE9UWDJfRkxBR19NQ0FNX0VOVFJJRVNfQUxMT0NcdFx0QklUX1VMTCgzKVxuLSNkZWZpbmUgT1RYMl9GTEFHX05UVVBMRV9TVVBQT1JUXHRcdEJJVF9VTEwoNClcbi0jZGVmaW5lIE9UWDJfRkxBR19VQ0FTVF9GTFRSX1NVUFBPUlRcdFx0QklUX1VMTCg1KVxuLSNkZWZpbmUgT1RYMl9GTEFHX1JYX1ZMQU5fU1VQUE9SVFx0XHRCSVRfVUxMKDYpXG4tI2RlZmluZSBPVFgyX0ZMQUdfVkZfVkxBTl9TVVBQT1JUXHRcdEJJVF9VTEwoNylcbi0jZGVmaW5lIE9UWDJfRkxBR19QRl9TSFVURE9XTlx0XHRcdEJJVF9VTEwoOClcbi0jZGVmaW5lIE9UWDJfRkxBR19SWF9QQVVTRV9FTkFCTEVEXHRcdEJJVF9VTEwoOSlcbi0jZGVmaW5lIE9UWDJfRkxBR19UWF9QQVVTRV9FTkFCTEVEXHRcdEJJVF9VTEwoMTApXG4tI2RlZmluZSBPVFgyX0ZMQUdfVENfRkxPV0VSX1NVUFBPUlRcdFx0QklUX1VMTCgxMSlcbi0jZGVmaW5lIE9UWDJfRkxBR19UQ19NQVRDSEFMTF9FR1JFU1NfRU5BQkxFRFx0QklUX1VMTCgxMilcbi0jZGVmaW5lIE9UWDJfRkxBR19UQ19NQVRDSEFMTF9JTkdSRVNTX0VOQUJMRURcdEJJVF9VTEwoMTMpXG4tI2RlZmluZSBPVFgyX0ZMQUdfRE1BQ0ZMVFJfU1VQUE9SVFx0XHRCSVRfVUxMKDE0KVxuLSNkZWZpbmUgT1RYMl9GTEFHX1BUUF9PTkVTVEVQX1NZTkNcdFx0QklUX1VMTCgxNSlcbi0jZGVmaW5lIE9UWDJfRkxBR19BRFBUVl9JTlRfQ09BTF9FTkFCTEVEIEJJVF9VTEwoMTYpXG4tI2RlZmluZSBPVFgyX0ZMQUdfVENfTUFSS19FTkFCTEVEXHRcdEJJVF9VTEwoMTcpXG4tI2RlZmluZSBPVFgyX0ZMQUdfUkVQX01PREVfRU5BQkxFRFx0XHQgQklUX1VMTCgxOClcbi0jZGVmaW5lIE9UWDJfRkxBR19QT1JUX1VQXHRcdFx0QklUX1VMTCgxOSlcbi0jZGVmaW5lIE9UWDJfRkxBR19JUFNFQ19PRkZMT0FEX0VOQUJMRURcdFx0QklUX1VMTCgyMClcbi1cdHU2NFx0XHRcdGZsYWdzO1xuJiM0MzsjZGVmaW5lIE9UWDJfRkxBR19SWF9UU1RBTVBfRU5BQkxFRFx0XHQwXG4mIzQzOyNkZWZpbmUgT1RYMl9GTEFHX1RYX1RTVEFNUF9FTkFCTEVEXHRcdDFcbiYjNDM7I2RlZmluZSBPVFgyX0ZMQUdfSU5URl9ET1dOXHRcdFx0MlxuJiM0MzsjZGVmaW5lIE9UWDJfRkxBR19NQ0FNX0VOVFJJRVNfQUxMT0NcdFx0M1xuJiM0MzsjZGVmaW5lIE9UWDJfRkxBR19OVFVQTEVfU1VQUE9SVFx0XHQ0XG4mIzQzOyNkZWZpbmUgT1RYMl9GTEFHX1VDQVNUX0ZMVFJfU1VQUE9SVFx0XHQ1XG4mIzQzOyNkZWZpbmUgT1RYMl9GTEFHX1JYX1ZMQU5fU1VQUE9SVFx0XHQ2XG4mIzQzOyNkZWZpbmUgT1RYMl9GTEFHX1ZGX1ZMQU5fU1VQUE9SVFx0XHQ3XG4mIzQzOyNkZWZpbmUgT1RYMl9GTEFHX1BGX1NIVVRET1dOXHRcdFx0OFxuJiM0MzsjZGVmaW5lIE9UWDJfRkxBR19SWF9QQVVTRV9FTkFCTEVEXHRcdDlcbiYjNDM7I2RlZmluZSBPVFgyX0ZMQUdfVFhfUEFVU0VfRU5BQkxFRFx0XHQxMFxuJiM0MzsjZGVmaW5lIE9UWDJfRkxBR19UQ19GTE9XRVJfU1VQUE9SVFx0XHQxMVxuJiM0MzsjZGVmaW5lIE9UWDJfRkxBR19UQ19NQVRDSEFMTF9FR1JFU1NfRU5BQkxFRFx0MTJcbiYjNDM7I2RlZmluZSBPVFgyX0ZMQUdfVENfTUFUQ0hBTExfSU5HUkVTU19FTkFCTEVEXHQxM1xuJiM0MzsjZGVmaW5lIE9UWDJfRkxBR19ETUFDRkxUUl9TVVBQT1JUXHRcdDE0XG4mIzQzOyNkZWZpbmUgT1RYMl9GTEFHX1BUUF9PTkVTVEVQX1NZTkNcdFx0MTVcbiYjNDM7I2RlZmluZSBPVFgyX0ZMQUdfQURQVFZfSU5UX0NPQUxfRU5BQkxFRFx0MTZcbiYjNDM7I2RlZmluZSBPVFgyX0ZMQUdfVENfTUFSS19FTkFCTEVEXHRcdDE3XG4mIzQzOyNkZWZpbmUgT1RYMl9GTEFHX1JFUF9NT0RFX0VOQUJMRURcdFx0MThcbiYjNDM7I2RlZmluZSBPVFgyX0ZMQUdfUE9SVF9VUFx0XHRcdDE5XG4mIzQzOyNkZWZpbmUgT1RYMl9GTEFHX0lQU0VDX09GRkxPQURfRU5BQkxFRFx0XHQyMFxuJiM0MzsjZGVmaW5lIE9UWDJfUkVQX1ZGX0lOSVRJQUxJWkVEXHRcdFx0MjFcbiYjNDM7XHR1bnNpZ25lZCBsb25nXHRcdGZsYWdzO1xuIFx0dTY0XHRcdFx0KmNxX29wX2FkZHI7XG4gXG4mIzQzO1x0c3RydWN0IG90eDJfbXFwcmlvXHRtcXByaW87XG4mIzQzO1x0c3RydWN0IG1xX29mZmxvYWRfc25hcFx0KmN1cl9tcV9zbmFwO1xuJiM0MztcdHN0cnVjdCBtcV9vZmZsb2FkX3NuYXBcdCpvbGRfbXFfc25hcDtcbiYjNDM7XG4gXHRzdHJ1Y3QgYnBmX3Byb2dcdFx0KnhkcF9wcm9nO1xuIFx0c3RydWN0IG90eDJfcXNldFx0cXNldDtcbiBcdHN0cnVjdCBvdHgyX2h3XHRcdGh3O1xuQEAgLTU5NCw2ICYjNDM7NjE3LDM0IEBAIHN0cnVjdCBvdHgyX25pYyB7XG4gXHR1bnNpZ25lZCBsb25nXHRcdCphZl94ZHBfemNfcWlkeDtcbiB9O1xuIFxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgb3R4Ml9zZXRfZmxhZyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdW5zaWduZWQgaW50IGZsYWcpXG4mIzQzO3tcbiYjNDM7XHRzZXRfYml0KGZsYWcsIFx1MDAyNm5pYy1cdTAwM2VmbGFncyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBvdHgyX2NsZWFyX2ZsYWcoc3RydWN0IG90eDJfbmljICpuaWMsIHVuc2lnbmVkIGludCBmbGFnKVxuJiM0Mzt7XG4mIzQzO1x0Y2xlYXJfYml0KGZsYWcsIFx1MDAyNm5pYy1cdTAwM2VmbGFncyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBvdHgyX3Rlc3RfZmxhZyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdW5zaWduZWQgaW50IGZsYWcpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gdGVzdF9iaXQoZmxhZywgXHUwMDI2bmljLVx1MDAzZWZsYWdzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG90eDJfc3luY19mbGFnc19mcm9tX3JlcChzdHJ1Y3Qgb3R4Ml9uaWMgKmRzdCxcbiYjNDM7XHRcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nICpzcmNfZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgZmxhZztcbiYjNDM7XG4mIzQzO1x0Zm9yIChmbGFnID0gMDsgZmxhZyBcdTAwM2M9IE9UWDJfUkVQX1ZGX0lOSVRJQUxJWkVEOyBmbGFnJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKHRlc3RfYml0KGZsYWcsIHNyY19mbGFncykpXG4mIzQzO1x0XHRcdHNldF9iaXQoZmxhZywgXHUwMDI2ZHN0LVx1MDAzZWZsYWdzKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0Y2xlYXJfYml0KGZsYWcsIFx1MDAyNmRzdC1cdTAwM2VmbGFncyk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19vdHgyX2xia3ZmKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIHtcbiBcdHJldHVybiAocGRldi1cdTAwM2VkZXZpY2UgPT0gUENJX0RFVklEX09DVEVPTlRYMl9SVlVfQUZWRikgfHxcbkBAIC0xMjQ2LDYgJiM0MzsxMjk3LDExIEBAIGRtYV9hZGRyX3Qgb3R4Ml9kbWFfbWFwX3NrYl9mcmFnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbiBcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgc2VnLCBpbnQgKmxlbik7XG4gdm9pZCBvdHgyX2RtYV91bm1hcF9za2JfZnJhZ3Moc3RydWN0IG90eDJfbmljICpwZnZmLCBzdHJ1Y3Qgc2dfbGlzdCAqc2cpO1xuIGludCBvdHgyX3JlYWRfZnJlZV9zcWUoc3RydWN0IG90eDJfbmljICpwZnZmLCB1MTYgcWlkeCk7XG4mIzQzO2ludCBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IHR4cSxcbiYjNDM7XHRcdFx0XHQgdTY0IG1pbnJhdGUsIHU2NCBtYXhyYXRlKTtcbiYjNDM7aW50IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xuJiM0MztpbnQgb3R4Ml9tcXByaW9fZG93bihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xuJiM0MztpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKTtcbiB2b2lkIG90eDJfcXVldWVfdmZfd29yayhzdHJ1Y3QgbWJveCAqbXcsIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICptYm94X3dxLFxuIFx0XHRcdGludCBmaXJzdCwgaW50IG1kZXZzLCB1NjQgaW50cik7XG4gaW50IG90eDJfZGVsX21jYW1fZmxvd19lbnRyeShzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTE2IGVudHJ5LFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jXG5pbmRleCA5MWQzNDZkMTE0YWY1Li5iN2JkMDgxMjlmYjY0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xuQEAgLTQxMyw2ICYjNDM7NDEzLDEyIEBAIHN0YXRpYyBpbnQgb3R4Ml9kY2JubF9pZWVlX3NldHBmYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWVlZV9wZmMgKnBmYylcbiBcdHU4IG9sZF9wZmNfZW47XG4gXHRpbnQgZXJyO1xuIFxuJiM0MztcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0IFx1MDAyNlx1MDAyNiBwZmMtXHUwMDNlcGZjX2VuKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKGRldixcbiYjNDM7XHRcdFx0ICAgXCYjMzQ7UEZDOiBjYW5ub3QgZW5hYmxlIHdoaWxlIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBpcyBhY3RpdmVcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRvbGRfcGZjX2VuID0gcGZ2Zi1cdTAwM2VwZmNfZW47XG4gXHRwZnZmLVx1MDAzZXBmY19lbiA9IHBmYy1cdTAwM2VwZmNfZW47XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGV2bGluay5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGV2bGluay5jXG5pbmRleCA0YTVjZTBlNjdkZGE4Li44NjNhNWNlZDlhMjZiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGV2bGluay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kZXZsaW5rLmNcbkBAIC0xMDQsNyAmIzQzOzEwNCw3IEBAIHN0YXRpYyBpbnQgb3R4Ml9kbF91Y2FzdF9mbHRfY250X3ZhbGlkYXRlKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLCB1MzIgaWQsXG4gXHRzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBvdHgyX2RsLVx1MDAzZXBmdmY7XG4gXG4gXHQvKiBDaGVjayBmb3IgVU5JQ0FTVCBmaWx0ZXIgc3VwcG9ydCovXG4tXHRpZiAoIShwZnZmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfVUNBU1RfRkxUUl9TVVBQT1JUKSkge1xuJiM0MztcdGlmICghb3R4Ml90ZXN0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1VDQVNUX0ZMVFJfU1VQUE9SVCkpIHtcbiBcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbiBcdFx0XHRcdCAgIFwmIzM0O1VuaWNhc3QgZmlsdGVyIG5vdCBlbmFibGVkXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jXG5pbmRleCA5YmVlMWI5MWVlYWE2Li5lNjNlYWQzYjExMTNlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmNcbkBAIC0yODcsNiAmIzQzOzI4NywxNCBAQCBzdGF0aWMgaW50IG90eDJfc2V0X2NoYW5uZWxzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuJiM0MztcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0IFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAoY2hhbm5lbC1cdTAwM2V0eF9jb3VudCAhPSBwZnZmLVx1MDAzZWh3LnR4X3F1ZXVlcyB8fFxuJiM0MztcdCAgICAgY2hhbm5lbC1cdTAwM2VyeF9jb3VudCAhPSBwZnZmLVx1MDAzZWh3LnJ4X3F1ZXVlcykpIHtcbiYjNDM7XHRcdG5ldGRldl9pbmZvKGRldixcbiYjNDM7XHRcdFx0ICAgIFwmIzM0O05vdCBwZXJtaXR0ZWQgdG8gY2hhbmdlIGNoYW5uZWwgY291bnQgd2hpbGUgTVEgcHJpbyBpcyBhY3RpdmVcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmIChpZl91cClcbiBcdFx0ZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX3N0b3AoZGV2KTtcbiBcbkBAIC0zNTQsMTQgJiM0MzszNjIsMTQgQEAgc3RhdGljIGludCBvdHgyX3NldF9wYXVzZXBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbiBcdGlmIChwYXVzZS1cdTAwM2VyeF9wYXVzZSlcbi1cdFx0cGZ2Zi1cdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfUlhfUEFVU0VfRU5BQkxFRDtcbiYjNDM7XHRcdG90eDJfc2V0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1JYX1BBVVNFX0VOQUJMRUQpO1xuIFx0ZWxzZVxuLVx0XHRwZnZmLVx1MDAzZWZsYWdzIFx1MDAyNj0gfk9UWDJfRkxBR19SWF9QQVVTRV9FTkFCTEVEO1xuJiM0MztcdFx0b3R4Ml9jbGVhcl9mbGFnKHBmdmYsIE9UWDJfRkxBR19SWF9QQVVTRV9FTkFCTEVEKTtcbiBcbiBcdGlmIChwYXVzZS1cdTAwM2V0eF9wYXVzZSlcbi1cdFx0cGZ2Zi1cdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfVFhfUEFVU0VfRU5BQkxFRDtcbiYjNDM7XHRcdG90eDJfc2V0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1RYX1BBVVNFX0VOQUJMRUQpO1xuIFx0ZWxzZVxuLVx0XHRwZnZmLVx1MDAzZWZsYWdzIFx1MDAyNj0gfk9UWDJfRkxBR19UWF9QQVVTRV9FTkFCTEVEO1xuJiM0MztcdFx0b3R4Ml9jbGVhcl9mbGFnKHBmdmYsIE9UWDJfRkxBR19UWF9QQVVTRV9FTkFCTEVEKTtcbiBcbiBcdHJldHVybiBvdHgyX2NvbmZpZ19wYXVzZV9mcm0ocGZ2Zik7XG4gfVxuQEAgLTQ3MCw4ICYjNDM7NDc4LDcgQEAgc3RhdGljIGludCBvdHgyX2dldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0Y21kLVx1MDAzZXJ4X21heF9jb2FsZXNjZWRfZnJhbWVzID0gaHctXHUwMDNlY3FfZWNvdW50X3dhaXQ7XG4gXHRjbWQtXHUwMDNldHhfY29hbGVzY2VfdXNlY3MgPSBody1cdTAwM2VjcV90aW1lX3dhaXQ7XG4gXHRjbWQtXHUwMDNldHhfbWF4X2NvYWxlc2NlZF9mcmFtZXMgPSBody1cdTAwM2VjcV9lY291bnRfd2FpdDtcbi1cdGlmICgocGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX0FEUFRWX0lOVF9DT0FMX0VOQUJMRUQpID09XG4tXHRcdFx0T1RYMl9GTEFHX0FEUFRWX0lOVF9DT0FMX0VOQUJMRUQpIHtcbiYjNDM7XHRpZiAob3R4Ml90ZXN0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX0FEUFRWX0lOVF9DT0FMX0VOQUJMRUQpKSB7XG4gXHRcdGNtZC1cdTAwM2V1c2VfYWRhcHRpdmVfcnhfY29hbGVzY2UgPSAxO1xuIFx0XHRjbWQtXHUwMDNldXNlX2FkYXB0aXZlX3R4X2NvYWxlc2NlID0gMTtcbiBcdH0gZWxzZSB7XG5AQCAtNTAyLDE1ICYjNDM7NTA5LDE0IEBAIHN0YXRpYyBpbnQgb3R4Ml9zZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdH1cbiBcbiBcdC8qIENoZWNrIGFuZCB1cGRhdGUgY29hbGVzY2Ugc3RhdHVzICovXG4tXHRpZiAoKHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19BRFBUVl9JTlRfQ09BTF9FTkFCTEVEKSA9PVxuLVx0XHRcdE9UWDJfRkxBR19BRFBUVl9JTlRfQ09BTF9FTkFCTEVEKSB7XG4mIzQzO1x0aWYgKG90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19BRFBUVl9JTlRfQ09BTF9FTkFCTEVEKSkge1xuIFx0XHRwcml2X2NvYWxlc2NlX3N0YXR1cyA9IDE7XG4gXHRcdGlmICghZWMtXHUwMDNldXNlX2FkYXB0aXZlX3J4X2NvYWxlc2NlKVxuLVx0XHRcdHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+T1RYMl9GTEFHX0FEUFRWX0lOVF9DT0FMX0VOQUJMRUQ7XG4mIzQzO1x0XHRcdG90eDJfY2xlYXJfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfQURQVFZfSU5UX0NPQUxfRU5BQkxFRCk7XG4gXHR9IGVsc2Uge1xuIFx0XHRwcml2X2NvYWxlc2NlX3N0YXR1cyA9IDA7XG4gXHRcdGlmIChlYy1cdTAwM2V1c2VfYWRhcHRpdmVfcnhfY29hbGVzY2UpXG4tXHRcdFx0cGZ2Zi1cdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfQURQVFZfSU5UX0NPQUxfRU5BQkxFRDtcbiYjNDM7XHRcdFx0b3R4Ml9zZXRfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfQURQVFZfSU5UX0NPQUxfRU5BQkxFRCk7XG4gXHR9XG4gXG4gXHQvKiAmIzM5O2NxX3RpbWVfd2FpdCYjMzk7IGlzIDhiaXQgYW5kIGlzIGluIG11bHRpcGxlIG9mIDEwMG5zLFxuQEAgLTU1Niw4ICYjNDM7NTYyLDcgQEAgc3RhdGljIGludCBvdHgyX3NldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0ICogJiMzOTtvbiYjMzk7IHRvICYjMzk7b2ZmJiMzOTsuXG4gXHQgKi9cbiBcdGlmIChwcml2X2NvYWxlc2NlX3N0YXR1cyBcdTAwMjZcdTAwMjZcbi1cdCAgICAoKHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19BRFBUVl9JTlRfQ09BTF9FTkFCTEVEKSAhPVxuLVx0ICAgICBPVFgyX0ZMQUdfQURQVFZfSU5UX0NPQUxfRU5BQkxFRCkpIHtcbiYjNDM7XHQgICAgKCFvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfQURQVFZfSU5UX0NPQUxfRU5BQkxFRCkpKSB7XG4gXHRcdGh3LVx1MDAzZWNxX3RpbWVfd2FpdCA9IENRX1RJTUVSX1RIUkVTSF9ERUZBVUxUO1xuIFx0XHRody1cdTAwM2VjcV9lY291bnRfd2FpdCA9IENRX0NRRV9USFJFU0hfREVGQVVMVDtcbiBcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9mbG93cy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZmxvd3MuY1xuaW5kZXggOTlkNzhmYzVhMmM0YS4uYjhmZjQ5ZjBmNmUzYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2Zsb3dzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2Zsb3dzLmNcbkBAIC0yNzAsOSAmIzQzOzI3MCw5IEBAIGludCBvdHgyX2FsbG9jX21jYW1fZW50cmllcyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHUxNiBjb3VudClcbiBcdGZsb3dfY2ZnLVx1MDAzZW1heF9mbG93cyA9IGFsbG9jYXRlZDtcbiBcbiBcdGlmIChhbGxvY2F0ZWQpIHtcbi1cdFx0cGZ2Zi1cdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfTUNBTV9FTlRSSUVTX0FMTE9DO1xuLVx0XHRwZnZmLVx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19OVFVQTEVfU1VQUE9SVDtcbi1cdFx0cGZ2Zi1cdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfVENfRkxPV0VSX1NVUFBPUlQ7XG4mIzQzO1x0XHRvdHgyX3NldF9mbGFnKHBmdmYsIE9UWDJfRkxBR19NQ0FNX0VOVFJJRVNfQUxMT0MpO1xuJiM0MztcdFx0b3R4Ml9zZXRfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfTlRVUExFX1NVUFBPUlQpO1xuJiM0MztcdFx0b3R4Ml9zZXRfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfVENfRkxPV0VSX1NVUFBPUlQpO1xuIFx0fVxuIFxuIFx0aWYgKGFsbG9jYXRlZCAhPSBjb3VudClcbkBAIC0zNzYsNyAmIzQzOzM3Niw3IEBAIGludCBvdHgyX21jYW1fZW50cnlfaW5pdChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4gXHRmbG93X2NmZy1cdTAwM2V1bmljYXN0X29mZnNldCA9IHZmX3ZsYW5fbWF4X2Zsb3dzO1xuIFx0Zmxvd19jZmctXHUwMDNlcnhfdmxhbl9vZmZzZXQgPSBmbG93X2NmZy1cdTAwM2V1bmljYXN0X29mZnNldCAmIzQzO1xuIFx0XHRcdFx0XHRmbG93X2NmZy1cdTAwM2V1Y2FzdF9mbHRfY250O1xuLVx0cGZ2Zi1cdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfVUNBU1RfRkxUUl9TVVBQT1JUO1xuJiM0MztcdG90eDJfc2V0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1VDQVNUX0ZMVFJfU1VQUE9SVCk7XG4gXG4gXHQvKiBDaGVjayBpZiBOUENfRE1BQyBmaWVsZCBpcyBzdXBwb3J0ZWRcbiBcdCAqIGJ5IHRoZSBta2V4IHByb2ZpbGUgYmVmb3JlIHNldHRpbmcgVkxBTiBzdXBwb3J0IGZsYWcuXG5AQCAtNDAxLDExICYjNDM7NDAxLDExIEBAIGludCBvdHgyX21jYW1fZW50cnlfaW5pdChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4gXHR9XG4gXG4gXHRpZiAoZnJzcC1cdTAwM2VlbmFibGUpIHtcbi1cdFx0cGZ2Zi1cdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfUlhfVkxBTl9TVVBQT1JUO1xuLVx0XHRwZnZmLVx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19WRl9WTEFOX1NVUFBPUlQ7XG4mIzQzO1x0XHRvdHgyX3NldF9mbGFnKHBmdmYsIE9UWDJfRkxBR19SWF9WTEFOX1NVUFBPUlQpO1xuJiM0MztcdFx0b3R4Ml9zZXRfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfVkZfVkxBTl9TVVBQT1JUKTtcbiBcdH1cbiBcbi1cdHBmdmYtXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX01DQU1fRU5UUklFU19BTExPQztcbiYjNDM7XHRvdHgyX3NldF9mbGFnKHBmdmYsIE9UWDJfRkxBR19NQ0FNX0VOVFJJRVNfQUxMT0MpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBmdmYtXHUwMDNlbWJveC5sb2NrKTtcbiBcbiBcdC8qIEFsbG9jYXRlIGVudHJpZXMgZm9yIE50dXBsZSBmaWx0ZXJzICovXG5AQCAtNDE1LDcgJiM0Mzs0MTUsNyBAQCBpbnQgb3R4Ml9tY2FtX2VudHJ5X2luaXQoc3RydWN0IG90eDJfbmljICpwZnZmKVxuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbi1cdHBmdmYtXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX1RDX0ZMT1dFUl9TVVBQT1JUO1xuJiM0MztcdG90eDJfc2V0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1RDX0ZMT1dFUl9TVVBQT1JUKTtcbiBcbiBcdHJlZmNvdW50X3NldChcdTAwMjZmbG93X2NmZy1cdTAwM2VtYXJrX2Zsb3dzLCAxKTtcbiBcdHJldHVybiAwO1xuQEAgLTQ3OSw3ICYjNDM7NDc5LDcgQEAgaW50IG90eDJfbWNhbV9mbG93X2luaXQoc3RydWN0IG90eDJfbmljICpwZilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbiBcdC8qIENoZWNrIGlmIE1DQU0gZW50cmllcyBhcmUgYWxsb2NhdGUgb3Igbm90ICovXG4tXHRpZiAoIShwZi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1VDQVNUX0ZMVFJfU1VQUE9SVCkpXG4mIzQzO1x0aWYgKCFvdHgyX3Rlc3RfZmxhZyhwZiwgT1RYMl9GTEFHX1VDQVNUX0ZMVFJfU1VQUE9SVCkpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0cGYtXHUwMDNlbWFjX3RhYmxlID0gZGV2bV9remFsbG9jKHBmLVx1MDAzZWRldiwgc2l6ZW9mKHN0cnVjdCBvdHgyX21hY190YWJsZSlcbkBAIC01MDEsNyAmIzQzOzUwMSw3IEBAIGludCBvdHgyX21jYW1fZmxvd19pbml0KHN0cnVjdCBvdHgyX25pYyAqcGYpXG4gXHRpZiAoIXBmLVx1MDAzZWZsb3dfY2ZnLVx1MDAzZWJtYXBfdG9fZG1hY2luZGV4KVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdHBmLVx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19ETUFDRkxUUl9TVVBQT1JUO1xuJiM0MztcdG90eDJfc2V0X2ZsYWcocGYsIE9UWDJfRkxBR19ETUFDRkxUUl9TVVBQT1JUKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC01MjEsNyAmIzQzOzUyMSw3IEBAIHN0YXRpYyBpbnQgb3R4Ml9kb19hZGRfbWFjZmlsdGVyKHN0cnVjdCBvdHgyX25pYyAqcGYsIGNvbnN0IHU4ICptYWMpXG4gXHRzdHJ1Y3QgbnBjX2luc3RhbGxfZmxvd19yZXEgKnJlcTtcbiBcdGludCBlcnIsIGk7XG4gXG4tXHRpZiAoIShwZi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1VDQVNUX0ZMVFJfU1VQUE9SVCkpXG4mIzQzO1x0aWYgKCFvdHgyX3Rlc3RfZmxhZyhwZiwgT1RYMl9GTEFHX1VDQVNUX0ZMVFJfU1VQUE9SVCkpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIFx0LyogZG9udCBoYXZlIGZyZWUgbWNhbSBlbnRyaWVzIG9yIHVjIGxpc3QgaXMgZ3JlYXRlciB0aGFuIGFsbG90ZWQgKi9cbkBAIC0xMTY3LDcgJiM0MzsxMTY3LDcgQEAgc3RhdGljIGludCBvdHgyX2lzX2Zsb3dfcnVsZV9kbWFjZmlsdGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbiBcdHU2NCByaW5nX2Nvb2tpZSA9IGZzcC1cdTAwM2VyaW5nX2Nvb2tpZTtcbiBcdHUzMiBmbG93X3R5cGU7XG4gXG4tXHRpZiAoIShwZnZmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfRE1BQ0ZMVFJfU1VQUE9SVCkpXG4mIzQzO1x0aWYgKCFvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfRE1BQ0ZMVFJfU1VQUE9SVCkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdGZsb3dfdHlwZSA9IGZzcC1cdTAwM2VmbG93X3R5cGUgXHUwMDI2IH4oRkxPV19FWFQgfCBGTE9XX01BQ19FWFQgfCBGTE9XX1JTUyk7XG5AQCAtMTM2NCw3ICYjNDM7MTM2NCw3IEBAIGludCBvdHgyX2FkZF9mbG93KHN0cnVjdCBvdHgyX25pYyAqcGZ2Ziwgc3RydWN0IGV0aHRvb2xfcnhuZmMgKm5mYylcbiBcdH1cbiBcbiBcdHJpbmcgPSBldGh0b29sX2dldF9mbG93X3NwZWNfcmluZyhmc3AtXHUwMDNlcmluZ19jb29raWUpO1xuLVx0aWYgKCEocGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX05UVVBMRV9TVVBQT1JUKSlcbiYjNDM7XHRpZiAoIW90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19OVFVQTEVfU1VQUE9SVCkpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIFx0LyogTnVtYmVyIG9mIHF1ZXVlcyBvbiBhIFZGIGNhbiBiZSBncmVhdGVyIG9yIGxlc3MgdGhhblxuQEAgLTE1OTYsNyAmIzQzOzE1OTYsNyBAQCBpbnQgb3R4Ml9kZXN0cm95X250dXBsZV9mbG93cyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4gXHRzdHJ1Y3Qgb3R4Ml9mbG93ICppdGVyLCAqdG1wO1xuIFx0aW50IGVycjtcbiBcbi1cdGlmICghKHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19OVFVQTEVfU1VQUE9SVCkpXG4mIzQzO1x0aWYgKCFvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfTlRVUExFX1NVUFBPUlQpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdGlmICghZmxvd19jZmctXHUwMDNlbWF4X2Zsb3dzKVxuQEAgLTE2MjksNyAmIzQzOzE2MjksNyBAQCBpbnQgb3R4Ml9kZXN0cm95X21jYW1fZmxvd3Moc3RydWN0IG90eDJfbmljICpwZnZmKVxuIFx0c3RydWN0IG90eDJfZmxvdyAqaXRlciwgKnRtcDtcbiBcdGludCBlcnI7XG4gXG4tXHRpZiAoIShwZnZmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfTUNBTV9FTlRSSUVTX0FMTE9DKSlcbiYjNDM7XHRpZiAoIW90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19NQ0FNX0VOVFJJRVNfQUxMT0MpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdC8qIHJlbW92ZSBhbGwgZmxvd3MgKi9cbkBAIC0xNjU4LDcgJiM0MzsxNjU4LDcgQEAgaW50IG90eDJfZGVzdHJveV9tY2FtX2Zsb3dzKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiBcdFx0cmV0dXJuIGVycjtcbiBcdH1cbiBcbi1cdHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+T1RYMl9GTEFHX01DQU1fRU5UUklFU19BTExPQztcbiYjNDM7XHRvdHgyX2NsZWFyX2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX01DQU1fRU5UUklFU19BTExPQyk7XG4gXHRmbG93X2NmZy1cdTAwM2VtYXhfZmxvd3MgPSAwO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBmdmYtXHUwMDNlbWJveC5sb2NrKTtcbiBcbkBAIC0xNzIxLDcgJiM0MzsxNzIxLDcgQEAgaW50IG90eDJfZW5hYmxlX3J4dmxhbihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmLCBib29sIGVuYWJsZSlcbiBcdGludCBlcnI7XG4gXG4gXHQvKiBEb250IGhhdmUgZW5vdWdoIG1jYW0gZW50cmllcyAqL1xuLVx0aWYgKCEocGYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19SWF9WTEFOX1NVUFBPUlQpKVxuJiM0MztcdGlmICghb3R4Ml90ZXN0X2ZsYWcocGYsIE9UWDJfRkxBR19SWF9WTEFOX1NVUFBPUlQpKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiBcdGlmIChlbmFibGUpIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuY1xuaW5kZXggYzBlMjEwMGRlMWQ5My4uMWUxN2Y4ZDQ5ZmQ0NCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNcbkBAIC04NzksNyAmIzQzOzg3OSw3IEBAIHN0YXRpYyB2b2lkIG90eDJfaGFuZGxlX2xpbmtfZXZlbnQoc3RydWN0IG90eDJfbmljICpwZilcbiBcdHN0cnVjdCBjZ3hfbGlua191c2VyX2luZm8gKmxpbmZvID0gXHUwMDI2cGYtXHUwMDNlbGluZm87XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGYtXHUwMDNlbmV0ZGV2O1xuIFxuLVx0aWYgKHBmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfUE9SVF9VUClcbiYjNDM7XHRpZiAob3R4Ml90ZXN0X2ZsYWcocGYsIE9UWDJfRkxBR19QT1JUX1VQKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0cHJfaW5mbyhcJiMzNDslcyBOSUMgTGluayBpcyAlcyAlZCBNYnBzICVzIGR1cGxleFxcblwmIzM0OywgbmV0ZGV2LVx1MDAzZW5hbWUsXG5AQCAtOTA3LDExICYjNDM7OTA3LDExIEBAIHN0YXRpYyBpbnQgb3R4Ml9tYm94X3VwX2hhbmRsZXJfcmVwX2V2ZW50X3VwX25vdGlmeShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmLFxuIFxuIFx0aWYgKGluZm8tXHUwMDNlZXZlbnQgPT0gUlZVX0VWRU5UX1BPUlRfU1RBVEUpIHtcbiBcdFx0aWYgKGluZm8tXHUwMDNlZXZ0X2RhdGEucG9ydF9zdGF0ZSkge1xuLVx0XHRcdHBmLVx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19QT1JUX1VQO1xuJiM0MztcdFx0XHRvdHgyX3NldF9mbGFnKHBmLCBPVFgyX0ZMQUdfUE9SVF9VUCk7XG4gXHRcdFx0bmV0aWZfY2Fycmllcl9vbihuZXRkZXYpO1xuIFx0XHRcdG5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMobmV0ZGV2KTtcbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHRwZi1cdTAwM2VmbGFncyBcdTAwMjY9IH5PVFgyX0ZMQUdfUE9SVF9VUDtcbiYjNDM7XHRcdFx0b3R4Ml9jbGVhcl9mbGFnKHBmLCBPVFgyX0ZMQUdfUE9SVF9VUCk7XG4gXHRcdFx0bmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5ldGRldik7XG4gXHRcdFx0bmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTtcbiBcdFx0fVxuQEAgLTk1Myw3ICYjNDM7OTUzLDcgQEAgaW50IG90eDJfbWJveF91cF9oYW5kbGVyX2NneF9saW5rX2V2ZW50KHN0cnVjdCBvdHgyX25pYyAqcGYsXG4gXHR9XG4gXG4gXHQvKiBpbnRlcmZhY2UgaGFzIG5vdCBiZWVuIGZ1bGx5IGNvbmZpZ3VyZWQgeWV0ICovXG4tXHRpZiAocGYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19JTlRGX0RPV04pXG4mIzQzO1x0aWYgKG90eDJfdGVzdF9mbGFnKHBmLCBPVFgyX0ZMQUdfSU5URl9ET1dOKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRvdHgyX2hhbmRsZV9saW5rX2V2ZW50KHBmKTtcbkBAIC0xODI4LDcgJiM0MzsxODI4LDcgQEAgdm9pZCBvdHgyX2ZyZWVfaHdfcmVzb3VyY2VzKHN0cnVjdCBvdHgyX25pYyAqcGYpXG4gXHRmcmVlX3JlcSA9IG90eDJfbWJveF9hbGxvY19tc2dfbml4X2xmX2ZyZWUobWJveCk7XG4gXHRpZiAoZnJlZV9yZXEpIHtcbiBcdFx0ZnJlZV9yZXEtXHUwMDNlZmxhZ3MgPSBOSVhfTEZfRElTQUJMRV9GTE9XUyB8IE5JWF9MRl9ET05UX0ZSRUVfREZUX0lEWFM7XG4tXHRcdGlmICghKHBmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfUEZfU0hVVERPV04pKVxuJiM0MztcdFx0aWYgKCFvdHgyX3Rlc3RfZmxhZyhwZiwgT1RYMl9GTEFHX1BGX1NIVVRET1dOKSlcbiBcdFx0XHRmcmVlX3JlcS1cdTAwM2VmbGFncyB8PSBOSVhfTEZfRE9OVF9GUkVFX1RYX1ZUQUc7XG4gXHRcdGlmIChvdHgyX3N5bmNfbWJveF9tc2cobWJveCkpXG4gXHRcdFx0ZGV2X2VycihwZi1cdTAwM2VkZXYsIFwmIzM0OyVzIGZhaWxlZCB0byBmcmVlIG5peGxmXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG5AQCAtMjAwNyw2ICYjNDM7MjAwNywxNCBAQCBpbnQgb3R4Ml9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9mcmVlX21lbTtcbiBcbiYjNDM7XHRlcnIgPSBvdHgyX21xcHJpb191cChwZik7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0bmV0ZGV2X2VycihwZi1cdTAwM2VuZXRkZXYsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O21xcHJpbzogZmFpbGVkIHRvIHJlc3RvcmUgc2hhcGVycyBkdXJpbmcgb3BlbjogJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgIGVycik7XG4mIzQzO1x0XHRnb3RvIGVycl9mcmVlX2h3O1xuJiM0MztcdH1cbiYjNDM7XG4gXHQvKiBSZWdpc3RlciBOQVBJIGhhbmRsZXIgKi9cbiBcdGZvciAocWlkeCA9IDA7IHFpZHggXHUwMDNjIHBmLVx1MDAzZWh3LmNpbnRfY250OyBxaWR4JiM0MzsmIzQzOykge1xuIFx0XHRjcV9wb2xsID0gXHUwMDI2cXNldC1cdTAwM2VuYXBpW3FpZHhdO1xuQEAgLTIxMzUsMjEgJiM0MzsyMTQzLDIxIEBAIGludCBvdHgyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdH1cbiBcdG90eDJfd3JpdGU2NChwZiwgTklYX0xGX1JBU19FTkFfVzFTLCBOSVhfTEZfUkFTX01BU0spO1xuIFxuLVx0aWYgKHBmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfUlhfVkxBTl9TVVBQT1JUKVxuJiM0MztcdGlmIChvdHgyX3Rlc3RfZmxhZyhwZiwgT1RYMl9GTEFHX1JYX1ZMQU5fU1VQUE9SVCkpXG4gXHRcdG90eDJfZW5hYmxlX3J4dmxhbihwZiwgdHJ1ZSk7XG4gXG4gXHQvKiBXaGVuIHJlaW5pdGlhbGl6aW5nIGVuYWJsZSB0aW1lIHN0YW1waW5nIGlmIGl0IGlzIGVuYWJsZWQgYmVmb3JlICovXG4tXHRpZiAocGYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19UWF9UU1RBTVBfRU5BQkxFRCkge1xuLVx0XHRwZi1cdTAwM2VmbGFncyBcdTAwMjY9IH5PVFgyX0ZMQUdfVFhfVFNUQU1QX0VOQUJMRUQ7XG4mIzQzO1x0aWYgKG90eDJfdGVzdF9mbGFnKHBmLCBPVFgyX0ZMQUdfVFhfVFNUQU1QX0VOQUJMRUQpKSB7XG4mIzQzO1x0XHRvdHgyX2NsZWFyX2ZsYWcocGYsIE9UWDJfRkxBR19UWF9UU1RBTVBfRU5BQkxFRCk7XG4gXHRcdG90eDJfY29uZmlnX2h3X3R4X3RzdGFtcChwZiwgdHJ1ZSk7XG4gXHR9XG4tXHRpZiAocGYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19SWF9UU1RBTVBfRU5BQkxFRCkge1xuLVx0XHRwZi1cdTAwM2VmbGFncyBcdTAwMjY9IH5PVFgyX0ZMQUdfUlhfVFNUQU1QX0VOQUJMRUQ7XG4mIzQzO1x0aWYgKG90eDJfdGVzdF9mbGFnKHBmLCBPVFgyX0ZMQUdfUlhfVFNUQU1QX0VOQUJMRUQpKSB7XG4mIzQzO1x0XHRvdHgyX2NsZWFyX2ZsYWcocGYsIE9UWDJfRkxBR19SWF9UU1RBTVBfRU5BQkxFRCk7XG4gXHRcdG90eDJfY29uZmlnX2h3X3J4X3RzdGFtcChwZiwgdHJ1ZSk7XG4gXHR9XG4gXG4tXHRwZi1cdTAwM2VmbGFncyBcdTAwMjY9IH5PVFgyX0ZMQUdfSU5URl9ET1dOO1xuLVx0cGYtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+T1RYMl9GTEFHX1BPUlRfVVA7XG4mIzQzO1x0b3R4Ml9jbGVhcl9mbGFnKHBmLCBPVFgyX0ZMQUdfSU5URl9ET1dOKTtcbiYjNDM7XHRvdHgyX2NsZWFyX2ZsYWcocGYsIE9UWDJfRkxBR19QT1JUX1VQKTtcbiBcdC8qICYjMzk7aW50Zl9kb3duJiMzOTsgbWF5IGJlIGNoZWNrZWQgb24gYW55IGNwdSAqL1xuIFx0c21wX3dtYigpO1xuIFxuQEAgLTIxNjEsNyAmIzQzOzIxNjksNyBAQCBpbnQgb3R4Ml9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRcdG90eDJfaGFuZGxlX2xpbmtfZXZlbnQocGYpO1xuIFxuIFx0LyogSW5zdGFsbCBETUFDIEZpbHRlcnMgKi9cbi1cdGlmIChwZi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX0RNQUNGTFRSX1NVUFBPUlQpXG4mIzQzO1x0aWYgKG90eDJfdGVzdF9mbGFnKHBmLCBPVFgyX0ZMQUdfRE1BQ0ZMVFJfU1VQUE9SVCkpXG4gXHRcdG90eDJfZG1hY2ZsdF9yZWluc3RhbGxfZmxvd3MocGYpO1xuIFxuIFx0b3R4Ml90Y19hcHBseV9pbmdyZXNzX3BvbGljZV9ydWxlcyhwZik7XG5AQCAtMjE4Niw3ICYjNDM7MjE5NCw3IEBAIGludCBvdHgyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBlcnJfdHhfc3RvcF9xdWV1ZXM6XG4gXHRuZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTtcbiBcdG5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7XG4tXHRwZi1cdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfSU5URl9ET1dOO1xuJiM0MztcdG90eDJfc2V0X2ZsYWcocGYsIE9UWDJfRkxBR19JTlRGX0RPV04pO1xuIFx0LyogZnJlZSBOSVhMRiBQT0lTT04gaXJxICovXG4gXHR2ZWMgPSBwY2lfaXJxX3ZlY3RvcihwZi1cdTAwM2VwZGV2LFxuIFx0XHRcdCAgICAgcGYtXHUwMDNlaHcubml4X21zaXhvZmYgJiM0MzsgTklYX0xGX1BPSVNPTl9WRUMpO1xuQEAgLTIyMDUsNiAmIzQzOzIyMTMsNyBAQCBpbnQgb3R4Ml9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRmcmVlX2lycSh2ZWMsIHBmKTtcbiBlcnJfZGlzYWJsZV9uYXBpOlxuIFx0b3R4Ml9kaXNhYmxlX25hcGkocGYpO1xuJiM0MztlcnJfZnJlZV9odzpcbiBcdG90eDJfZnJlZV9od19yZXNvdXJjZXMocGYpO1xuIGVycl9mcmVlX21lbTpcbiBcdG90eDJfZnJlZV9xdWV1ZV9tZW0ocXNldCk7XG5AQCAtMjIyMCwxMyAmIzQzOzIyMjksMTMgQEAgaW50IG90eDJfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0aW50IHFpZHgsIHZlYywgd3JrO1xuIFxuIFx0LyogSWYgdGhlIERPV04gZmxhZyBpcyBzZXQgcmVzb3VyY2VzIGFyZSBhbHJlYWR5IGZyZWVkICovXG4tXHRpZiAocGYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19JTlRGX0RPV04pXG4mIzQzO1x0aWYgKG90eDJfdGVzdF9mbGFnKHBmLCBPVFgyX0ZMQUdfSU5URl9ET1dOKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRuZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpO1xuIFx0bmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5ldGRldik7XG4gXG4tXHRwZi1cdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfSU5URl9ET1dOO1xuJiM0MztcdG90eDJfc2V0X2ZsYWcocGYsIE9UWDJfRkxBR19JTlRGX0RPV04pO1xuIFx0LyogJiMzOTtpbnRmX2Rvd24mIzM5OyBtYXkgYmUgY2hlY2tlZCBvbiBhbnkgY3B1ICovXG4gXHRzbXBfd21iKCk7XG4gXG5AQCAtMjI4MCw2ICYjNDM7MjI4OSw3IEBAIGludCBvdHgyX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdGZvciAocWlkeCA9IDA7IHFpZHggXHUwMDNjIG5ldGRldi1cdTAwM2VudW1fdHhfcXVldWVzOyBxaWR4JiM0MzsmIzQzOylcbiBcdFx0bmV0ZGV2X3R4X3Jlc2V0X3F1ZXVlKG5ldGRldl9nZXRfdHhfcXVldWUobmV0ZGV2LCBxaWR4KSk7XG4gXG4mIzQzO1x0c3luY2hyb25pemVfbmV0KCk7XG4gXHRvdHgyX2ZyZWVfcXVldWVfbWVtKHFzZXQpO1xuIFx0LyogRG8gbm90IGNsZWFyIFJRL1NRIHJpbmdzaXplIHNldHRpbmdzICovXG4gXHRtZW1zZXRfc3RhcnRhdChxc2V0LCAwLCBzcWVfY250KTtcbkBAIC0yNDU3LDcgJiM0MzsyNDY3LDcgQEAgc3RhdGljIGludCBvdHgyX2NvbmZpZ19od19yeF90c3RhbXAoc3RydWN0IG90eDJfbmljICpwZnZmLCBib29sIGVuYWJsZSlcbiBcdHN0cnVjdCBtc2dfcmVxICpyZXE7XG4gXHRpbnQgZXJyO1xuIFxuLVx0aWYgKHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19SWF9UU1RBTVBfRU5BQkxFRCBcdTAwMjZcdTAwMjYgZW5hYmxlKVxuJiM0MztcdGlmIChvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfUlhfVFNUQU1QX0VOQUJMRUQpIFx1MDAyNlx1MDAyNiBlbmFibGUpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZwZnZmLVx1MDAzZW1ib3gubG9jayk7XG5AQCAtMjQ3OCw5ICYjNDM7MjQ4OCw5IEBAIHN0YXRpYyBpbnQgb3R4Ml9jb25maWdfaHdfcnhfdHN0YW1wKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgYm9vbCBlbmFibGUpXG4gXG4gXHRtdXRleF91bmxvY2soXHUwMDI2cGZ2Zi1cdTAwM2VtYm94LmxvY2spO1xuIFx0aWYgKGVuYWJsZSlcbi1cdFx0cGZ2Zi1cdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfUlhfVFNUQU1QX0VOQUJMRUQ7XG4mIzQzO1x0XHRvdHgyX3NldF9mbGFnKHBmdmYsIE9UWDJfRkxBR19SWF9UU1RBTVBfRU5BQkxFRCk7XG4gXHRlbHNlXG4tXHRcdHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+T1RYMl9GTEFHX1JYX1RTVEFNUF9FTkFCTEVEO1xuJiM0MztcdFx0b3R4Ml9jbGVhcl9mbGFnKHBmdmYsIE9UWDJfRkxBR19SWF9UU1RBTVBfRU5BQkxFRCk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMjQ4OSw3ICYjNDM7MjQ5OSw3IEBAIHN0YXRpYyBpbnQgb3R4Ml9jb25maWdfaHdfdHhfdHN0YW1wKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgYm9vbCBlbmFibGUpXG4gXHRzdHJ1Y3QgbXNnX3JlcSAqcmVxO1xuIFx0aW50IGVycjtcbiBcbi1cdGlmIChwZnZmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfVFhfVFNUQU1QX0VOQUJMRUQgXHUwMDI2XHUwMDI2IGVuYWJsZSlcbiYjNDM7XHRpZiAob3R4Ml90ZXN0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1RYX1RTVEFNUF9FTkFCTEVEKSBcdTAwMjZcdTAwMjYgZW5hYmxlKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdG11dGV4X2xvY2soXHUwMDI2cGZ2Zi1cdTAwM2VtYm94LmxvY2spO1xuQEAgLTI1MTAsOSAmIzQzOzI1MjAsOSBAQCBzdGF0aWMgaW50IG90eDJfY29uZmlnX2h3X3R4X3RzdGFtcChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGJvb2wgZW5hYmxlKVxuIFxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBmdmYtXHUwMDNlbWJveC5sb2NrKTtcbiBcdGlmIChlbmFibGUpXG4tXHRcdHBmdmYtXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX1RYX1RTVEFNUF9FTkFCTEVEO1xuJiM0MztcdFx0b3R4Ml9zZXRfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfVFhfVFNUQU1QX0VOQUJMRUQpO1xuIFx0ZWxzZVxuLVx0XHRwZnZmLVx1MDAzZWZsYWdzIFx1MDAyNj0gfk9UWDJfRkxBR19UWF9UU1RBTVBfRU5BQkxFRDtcbiYjNDM7XHRcdG90eDJfY2xlYXJfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfVFhfVFNUQU1QX0VOQUJMRUQpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTI1MzcsOCAmIzQzOzI1NDcsOCBAQCBpbnQgb3R4Ml9jb25maWdfaHd0c3RhbXBfc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXG4gXHRzd2l0Y2ggKGNvbmZpZy1cdTAwM2V0eF90eXBlKSB7XG4gXHRjYXNlIEhXVFNUQU1QX1RYX09GRjpcbi1cdFx0aWYgKHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19QVFBfT05FU1RFUF9TWU5DKVxuLVx0XHRcdHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+T1RYMl9GTEFHX1BUUF9PTkVTVEVQX1NZTkM7XG4mIzQzO1x0XHRpZiAob3R4Ml90ZXN0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1BUUF9PTkVTVEVQX1NZTkMpKVxuJiM0MztcdFx0XHRvdHgyX2NsZWFyX2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1BUUF9PTkVTVEVQX1NZTkMpO1xuIFxuIFx0XHRjYW5jZWxfZGVsYXllZF93b3JrKFx1MDAyNnBmdmYtXHUwMDNlcHRwLVx1MDAzZXN5bmN0c3RhbXBfd29yayk7XG4gXHRcdG90eDJfY29uZmlnX2h3X3R4X3RzdGFtcChwZnZmLCBmYWxzZSk7XG5AQCAtMjU0OSw3ICYjNDM7MjU1OSw3IEBAIGludCBvdHgyX2NvbmZpZ19od3RzdGFtcF9zZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0XHRcdFx0ICAgXCYjMzQ7T25lLXN0ZXAgdGltZSBzdGFtcGluZyBpcyBub3Qgc3VwcG9ydGVkXCYjMzQ7KTtcbiBcdFx0XHRyZXR1cm4gLUVSQU5HRTtcbiBcdFx0fVxuLVx0XHRwZnZmLVx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19QVFBfT05FU1RFUF9TWU5DO1xuJiM0MztcdFx0b3R4Ml9zZXRfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfUFRQX09ORVNURVBfU1lOQyk7XG4gXHRcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZwZnZmLVx1MDAzZXB0cC1cdTAwM2VzeW5jdHN0YW1wX3dvcmssXG4gXHRcdFx0XHQgICAgICBtc2Vjc190b19qaWZmaWVzKDUwMCkpO1xuIFx0XHRmYWxsdGhyb3VnaDtcbkBAIC0yODM1LDcgJiM0MzsyODQ1LDcgQEAgc3RhdGljIGludCBvdHgyX3NldF92Zl92bGFuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCB2ZiwgdTE2IHZsYW4sIHU4IHFvcyxcbiBcdGlmIChwcm90byAhPSBodG9ucyhFVEhfUF84MDIxUSkpXG4gXHRcdHJldHVybiAtRVBST1RPTk9TVVBQT1JUO1xuIFxuLVx0aWYgKCEocGYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19WRl9WTEFOX1NVUFBPUlQpKVxuJiM0MztcdGlmICghb3R4Ml90ZXN0X2ZsYWcocGYsIE9UWDJfRkxBR19WRl9WTEFOX1NVUFBPUlQpKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4gXHRyZXR1cm4gb3R4Ml9kb19zZXRfdmZfdmxhbihwZiwgdmYsIHZsYW4sIHFvcywgcHJvdG8pO1xuQEAgLTI5MjMsNiAmIzQzOzI5MzMsMTIgQEAgc3RhdGljIGludCBvdHgyX3hkcF9zZXR1cChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4gXHRib29sIGlmX3VwID0gbmV0aWZfcnVubmluZyhwZi1cdTAwM2VuZXRkZXYpO1xuIFx0c3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZztcbiBcbiYjNDM7XHRpZiAocHJvZyBcdTAwMjZcdTAwMjYgcGYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIoZGV2LFxuJiM0MztcdFx0XHQgICBcJiMzNDtYRFA6IGNhbm5vdCBhdHRhY2ggd2hpbGUgbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGlzIGFjdGl2ZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmIChwcm9nIFx1MDAyNlx1MDAyNiBkZXYtXHUwMDNlbXR1IFx1MDAzZSBNQVhfWERQX01UVSkge1xuIFx0XHRuZXRkZXZfd2FybihkZXYsIFwmIzM0O0p1bWJvIGZyYW1lcyBub3QgeWV0IHN1cHBvcnRlZCB3aXRoIFhEUFxcblwmIzM0Oyk7XG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbkBAIC0zMDg2LDcgJiM0MzszMTAyLDcgQEAgaW50IG90eDJfcmVhbGxvY19tc2l4X3ZlY3RvcnMoc3RydWN0IG90eDJfbmljICpwZilcbiBcdCAqIGludGVycnVwdCByYW5nZSAoUUlOVCwgQ0lOVCwgR0lOVCwgRVJSIGFuZCBQT0lTT04gdmVjdG9ycykuXG4gXHQgKi9cbiBcdG51bV92ZWMgPSBody1cdTAwM2VuaXhfbXNpeG9mZjtcbi1cdGlmIChwZi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1JFUF9NT0RFX0VOQUJMRUQpXG4mIzQzO1x0aWYgKG90eDJfdGVzdF9mbGFnKHBmLCBPVFgyX0ZMQUdfUkVQX01PREVfRU5BQkxFRCkpXG4gXHRcdG51bV92ZWMgJiM0Mzs9IE5JWF9MRl9DSU5UX1ZFQ19TVEFSVCAmIzQzOyBody1cdTAwM2VtYXhfcXVldWVzO1xuIFx0ZWxzZVxuIFx0XHRudW1fdmVjICYjNDM7PSBOSVhfTEZfUE9JU09OX1ZFQyAmIzQzOyAxO1xuQEAgLTMyNzMsNyAmIzQzOzMyODksNyBAQCBzdGF0aWMgaW50IG90eDJfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbiBcdHBmLVx1MDAzZXBkZXYgPSBwZGV2O1xuIFx0cGYtXHUwMDNlZGV2ID0gZGV2O1xuIFx0cGYtXHUwMDNldG90YWxfdmZzID0gcGNpX3NyaW92X2dldF90b3RhbHZmcyhwZGV2KTtcbi1cdHBmLVx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19JTlRGX0RPV047XG4mIzQzO1x0b3R4Ml9zZXRfZmxhZyhwZiwgT1RYMl9GTEFHX0lOVEZfRE9XTik7XG4gXG4gXHRodyA9IFx1MDAyNnBmLVx1MDAzZWh3O1xuIFx0aHctXHUwMDNlcGRldiA9IHBkZXY7XG5AQCAtMzMyOCwyMyAmIzQzOzMzNDQsMjMgQEAgc3RhdGljIGludCBvdHgyX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9kZWxfbWNhbV9lbnRyaWVzO1xuIFxuLVx0aWYgKHBmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfTlRVUExFX1NVUFBPUlQpXG4mIzQzO1x0aWYgKG90eDJfdGVzdF9mbGFnKHBmLCBPVFgyX0ZMQUdfTlRVUExFX1NVUFBPUlQpKVxuIFx0XHRuZXRkZXYtXHUwMDNlaHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9OVFVQTEU7XG4gXG4tXHRpZiAocGYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19VQ0FTVF9GTFRSX1NVUFBPUlQpXG4mIzQzO1x0aWYgKG90eDJfdGVzdF9mbGFnKHBmLCBPVFgyX0ZMQUdfVUNBU1RfRkxUUl9TVVBQT1JUKSlcbiBcdFx0bmV0ZGV2LVx1MDAzZXByaXZfZmxhZ3MgfD0gSUZGX1VOSUNBU1RfRkxUO1xuIFxuIFx0LyogU3VwcG9ydCBUU08gb24gdGFnIGludGVyZmFjZSAqL1xuIFx0bmV0ZGV2LVx1MDAzZXZsYW5fZmVhdHVyZXMgfD0gbmV0ZGV2LVx1MDAzZWZlYXR1cmVzO1xuIFx0bmV0ZGV2LVx1MDAzZWh3X2ZlYXR1cmVzICB8PSBORVRJRl9GX0hXX1ZMQU5fQ1RBR19UWCB8XG4gXHRcdFx0XHRORVRJRl9GX0hXX1ZMQU5fU1RBR19UWDtcbi1cdGlmIChwZi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1JYX1ZMQU5fU1VQUE9SVClcbiYjNDM7XHRpZiAob3R4Ml90ZXN0X2ZsYWcocGYsIE9UWDJfRkxBR19SWF9WTEFOX1NVUFBPUlQpKVxuIFx0XHRuZXRkZXYtXHUwMDNlaHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX0NUQUdfUlggfFxuIFx0XHRcdFx0ICAgICAgIE5FVElGX0ZfSFdfVkxBTl9TVEFHX1JYO1xuIFx0bmV0ZGV2LVx1MDAzZWZlYXR1cmVzIHw9IG5ldGRldi1cdTAwM2Vod19mZWF0dXJlcztcbiBcbiBcdC8qIEhXIHN1cHBvcnRzIHRjIG9mZmxvYWQgYnV0IG11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIG4tdHVwbGUgZmlsdGVycyAqL1xuLVx0aWYgKHBmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfVENfRkxPV0VSX1NVUFBPUlQpXG4mIzQzO1x0aWYgKG90eDJfdGVzdF9mbGFnKHBmLCBPVFgyX0ZMQUdfVENfRkxPV0VSX1NVUFBPUlQpKVxuIFx0XHRuZXRkZXYtXHUwMDNlaHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19UQztcbiBcbiBcdG5ldGRldi1cdTAwM2Vod19mZWF0dXJlcyB8PSBORVRJRl9GX0xPT1BCQUNLIHwgTkVUSUZfRl9SWEFMTDtcbkBAIC0zNTk1LDE4ICYjNDM7MzYxMSwxOCBAQCBzdGF0aWMgdm9pZCBvdHgyX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcbiBcdHBmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiBcbi1cdHBmLVx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19QRl9TSFVURE9XTjtcbiYjNDM7XHRvdHgyX3NldF9mbGFnKHBmLCBPVFgyX0ZMQUdfUEZfU0hVVERPV04pO1xuIFxuLVx0aWYgKHBmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfVFhfVFNUQU1QX0VOQUJMRUQpXG4mIzQzO1x0aWYgKG90eDJfdGVzdF9mbGFnKHBmLCBPVFgyX0ZMQUdfVFhfVFNUQU1QX0VOQUJMRUQpKVxuIFx0XHRvdHgyX2NvbmZpZ19od190eF90c3RhbXAocGYsIGZhbHNlKTtcbi1cdGlmIChwZi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1JYX1RTVEFNUF9FTkFCTEVEKVxuJiM0MztcdGlmIChvdHgyX3Rlc3RfZmxhZyhwZiwgT1RYMl9GTEFHX1JYX1RTVEFNUF9FTkFCTEVEKSlcbiBcdFx0b3R4Ml9jb25maWdfaHdfcnhfdHN0YW1wKHBmLCBmYWxzZSk7XG4gXG4gXHQvKiBEaXNhYmxlIDgwMi4zeCBwYXVzZSBmcmFtZXMgKi9cbi1cdGlmIChwZi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1JYX1BBVVNFX0VOQUJMRUQgfHxcbi1cdCAgICAocGYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19UWF9QQVVTRV9FTkFCTEVEKSkge1xuLVx0XHRwZi1cdTAwM2VmbGFncyBcdTAwMjY9IH5PVFgyX0ZMQUdfUlhfUEFVU0VfRU5BQkxFRDtcbi1cdFx0cGYtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+T1RYMl9GTEFHX1RYX1BBVVNFX0VOQUJMRUQ7XG4mIzQzO1x0aWYgKG90eDJfdGVzdF9mbGFnKHBmLCBPVFgyX0ZMQUdfUlhfUEFVU0VfRU5BQkxFRCkgfHxcbiYjNDM7XHQgICAgb3R4Ml90ZXN0X2ZsYWcocGYsIE9UWDJfRkxBR19UWF9QQVVTRV9FTkFCTEVEKSkge1xuJiM0MztcdFx0b3R4Ml9jbGVhcl9mbGFnKHBmLCBPVFgyX0ZMQUdfUlhfUEFVU0VfRU5BQkxFRCk7XG4mIzQzO1x0XHRvdHgyX2NsZWFyX2ZsYWcocGYsIE9UWDJfRkxBR19UWF9QQVVTRV9FTkFCTEVEKTtcbiBcdFx0b3R4Ml9jb25maWdfcGF1c2VfZnJtKHBmKTtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuY1xuaW5kZXggMDM5ZmQ0N2ViZjUyMi4uNzBkOTlhZTNkZWZiNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmNcbkBAIC0xNiw2ICYjNDM7MTYsOCBAQFxuICNpbmNsdWRlIFx1MDAzY25ldC90Y19hY3QvdGNfbWlycmVkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvdGNfYWN0L3RjX3ZsYW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9pcHY2LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L3BrdF9zY2hlZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC9zY2hfZ2VuZXJpYy5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7Y24xMGsuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O290eDJfY29tbW9uLmhcJiMzNDtcbkBAIC0zMSw2ICYjNDM7MzMsMTAgQEBcbiBcbiAjZGVmaW5lIE1DQVNUX0lOVkFMSURfR1JQXHRcdCgtMVUpXG4gI2RlZmluZSBSQVRFX01BTlRJU1NBX0JJVFNcdFx0OFxuJiM0MzsvKiBNaW4gcGVyLXF1ZXVlIGVncmVzcyBzaGFwaW5nIHJhdGUgdGhlIE5JWCBUTFggZW5jb2RlciBzdXBwb3J0cyAoMiBNYnBzKS4gKi9cbiYjNDM7I2RlZmluZSBPVFgyX01RUFJJT19NSU5fUkFURV9CWVRFU19QU1x0MjUwMDAwVUxMXG4mIzQzOy8qIE1heCBlZ3Jlc3Mgc2hhcGluZyByYXRlIHRoZSBOSVggVExYIGVuY29kZXIgc3VwcG9ydHMgKDEzMDgxNiBNYnBzKS4gKi9cbiYjNDM7I2RlZmluZSBPVFgyX01RUFJJT19NQVhfUkFURV9CWVRFU19QU1x0KChNQVhfQlVSU1RfU0laRSAqIDEwMDAwMDBVTEwpIC8gOFVMTClcbiBcbiBzdGF0aWMgdm9pZCBvdHgyX2dldF9lZ3Jlc3NfYnVyc3RfY2ZnKHN0cnVjdCBvdHgyX25pYyAqbmljLCB1MzIgYnVyc3QsXG4gXHRcdFx0XHQgICAgICB1MzIgKmJ1cnN0X2V4cCwgdTMyICpidXJzdF9tYW50aXNzYSlcbkBAIC02MSw2ICYjNDM7NjcsOSBAQCBzdGF0aWMgdm9pZCBvdHgyX2dldF9lZ3Jlc3NfYnVyc3RfY2ZnKHN0cnVjdCBvdHgyX25pYyAqbmljLCB1MzIgYnVyc3QsXG4gXHRcdFx0KmJ1cnN0X21hbnRpc3NhID0gdG1wIC8gKDFVTEwgXHUwMDNjXHUwMDNjICgqYnVyc3RfZXhwIC0gNykpO1xuIFx0XHR9XG4gXHR9IGVsc2Uge1xuJiM0MztcdFx0LyogYnVyc3QgMDogbGFyZ2VzdCBlbmNvZGFibGUgYnVyc3QgKENOMTBLX01BWF9CVVJTVF9TSVpFIG9uXG4mIzQzO1x0XHQgKiBDTjEwSyksIG5vdCBhIG1pbmltYWwgYnVyc3QuXG4mIzQzO1x0XHQgKi9cbiBcdFx0KmJ1cnN0X2V4cCA9IE1BWF9CVVJTVF9FWFBPTkVOVDtcbiBcdFx0KmJ1cnN0X21hbnRpc3NhID0gbWF4X21hbnRpc3NhO1xuIFx0fVxuQEAgLTE1OSw3ICYjNDM7MTY4LDcgQEAgc3RhdGljIGludCBvdHgyX3RjX3ZhbGlkYXRlX2Zsb3coc3RydWN0IG90eDJfbmljICpuaWMsXG4gXHRcdFx0XHQgc3RydWN0IGZsb3dfYWN0aW9uICphY3Rpb25zLFxuIFx0XHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4tXHRpZiAobmljLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfSU5URl9ET1dOKSB7XG4mIzQzO1x0aWYgKG90eDJfdGVzdF9mbGFnKG5pYywgT1RYMl9GTEFHX0lOVEZfRE9XTikpIHtcbiBcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7SW50ZXJmYWNlIG5vdCBpbml0aWFsaXplZFwmIzM0Oyk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuQEAgLTIyMyw3ICYjNDM7MjMyLDcgQEAgc3RhdGljIGludCBvdHgyX3RjX2VncmVzc19tYXRjaGFsbF9pbnN0YWxsKHN0cnVjdCBvdHgyX25pYyAqbmljLFxuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbi1cdGlmIChuaWMtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19UQ19NQVRDSEFMTF9FR1JFU1NfRU5BQkxFRCkge1xuJiM0MztcdGlmIChvdHgyX3Rlc3RfZmxhZyhuaWMsIE9UWDJfRkxBR19UQ19NQVRDSEFMTF9FR1JFU1NfRU5BQkxFRCkpIHtcbiBcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbiBcdFx0XHRcdCAgIFwmIzM0O09ubHkgb25lIEVncmVzcyBNQVRDSEFMTCByYXRlbGltaXRlciBjYW4gYmUgb2ZmbG9hZGVkXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG5AQCAtMjQ0LDcgJiM0MzsyNTMsNyBAQCBzdGF0aWMgaW50IG90eDJfdGNfZWdyZXNzX21hdGNoYWxsX2luc3RhbGwoc3RydWN0IG90eDJfbmljICpuaWMsXG4gXHRcdFx0XHRcdFx0ICAgIG90eDJfY29udmVydF9yYXRlKGVudHJ5LVx1MDAzZXBvbGljZS5yYXRlX2J5dGVzX3BzKSk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIGVycjtcbi1cdFx0bmljLVx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19UQ19NQVRDSEFMTF9FR1JFU1NfRU5BQkxFRDtcbiYjNDM7XHRcdG90eDJfc2V0X2ZsYWcobmljLCBPVFgyX0ZMQUdfVENfTUFUQ0hBTExfRUdSRVNTX0VOQUJMRUQpO1xuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG5AQCAtMjYxLDEzICYjNDM7MjcwLDEzIEBAIHN0YXRpYyBpbnQgb3R4Ml90Y19lZ3Jlc3NfbWF0Y2hhbGxfZGVsZXRlKHN0cnVjdCBvdHgyX25pYyAqbmljLFxuIFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrID0gY2xzLVx1MDAzZWNvbW1vbi5leHRhY2s7XG4gXHRpbnQgZXJyO1xuIFxuLVx0aWYgKG5pYy1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX0lOVEZfRE9XTikge1xuJiM0MztcdGlmIChvdHgyX3Rlc3RfZmxhZyhuaWMsIE9UWDJfRkxBR19JTlRGX0RPV04pKSB7XG4gXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwmIzM0O0ludGVyZmFjZSBub3QgaW5pdGlhbGl6ZWRcJiMzNDspO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbiBcdGVyciA9IG90eDJfc2V0X21hdGNoYWxsX2VncmVzc19yYXRlKG5pYywgMCwgMCk7XG4tXHRuaWMtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+T1RYMl9GTEFHX1RDX01BVENIQUxMX0VHUkVTU19FTkFCTEVEO1xuJiM0MztcdG90eDJfY2xlYXJfZmxhZyhuaWMsIE9UWDJfRkxBR19UQ19NQVRDSEFMTF9FR1JFU1NfRU5BQkxFRCk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC01MDUsNyAmIzQzOzUxNCw3IEBAIHN0YXRpYyBpbnQgb3R4Ml90Y19wYXJzZV9hY3Rpb25zKHN0cnVjdCBvdHgyX25pYyAqbmljLFxuIFx0XHRcdG1hcmsgPSBhY3QtXHUwMDNlbWFyaztcbiBcdFx0XHRyZXEtXHUwMDNlbWF0Y2hfaWQgPSBtYXJrIFx1MDAyNiBPVFgyX1JYX01BVENIX0lEX01BU0s7XG4gXHRcdFx0cmVxLVx1MDAzZW9wID0gTklYX1JYX0FDVElPTl9ERUZBVUxUO1xuLVx0XHRcdG5pYy1cdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfVENfTUFSS19FTkFCTEVEO1xuJiM0MztcdFx0XHRvdHgyX3NldF9mbGFnKG5pYywgT1RYMl9GTEFHX1RDX01BUktfRU5BQkxFRCk7XG4gXHRcdFx0cmVmY291bnRfaW5jKFx1MDAyNm5pYy1cdTAwM2VmbG93X2NmZy1cdTAwM2VtYXJrX2Zsb3dzKTtcbiBcdFx0XHRicmVhaztcbiBcbkBAIC05NDIsNyAmIzQzOzk1MSw3IEBAIHN0YXRpYyB2b2lkIG90eDJfZGVzdHJveV90Y19mbG93X2xpc3Qoc3RydWN0IG90eDJfbmljICpwZnZmKVxuIFx0c3RydWN0IG90eDJfZmxvd19jb25maWcgKmZsb3dfY2ZnID0gcGZ2Zi1cdTAwM2VmbG93X2NmZztcbiBcdHN0cnVjdCBvdHgyX3RjX2Zsb3cgKml0ZXIsICp0bXA7XG4gXG4tXHRpZiAoIShwZnZmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfTUNBTV9FTlRSSUVTX0FMTE9DKSlcbiYjNDM7XHRpZiAoIW90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19NQ0FNX0VOVFJJRVNfQUxMT0MpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaXRlciwgdG1wLCBcdTAwMjZmbG93X2NmZy1cdTAwM2VmbG93X2xpc3RfdGMsIGxpc3QpIHtcbkBAIC0xMTk1LDEyICYjNDM7MTIwNCwxMiBAQCBzdGF0aWMgaW50IG90eDJfdGNfZGVsX2Zsb3coc3RydWN0IG90eDJfbmljICpuaWMsXG4gXHQvKiBEaXNhYmxlIFRDIE1BUksgZmxhZyBpZiB0aGV5IGFyZSBubyBydWxlcyB3aXRoIHNrYmVkaXQgbWFyayBhY3Rpb24gKi9cbiBcdGlmIChmbG93X25vZGUtXHUwMDNlcmVxLm1hdGNoX2lkKVxuIFx0XHRpZiAoIXJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZmbG93X2NmZy1cdTAwM2VtYXJrX2Zsb3dzKSlcbi1cdFx0XHRuaWMtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+T1RYMl9GTEFHX1RDX01BUktfRU5BQkxFRDtcbiYjNDM7XHRcdFx0b3R4Ml9jbGVhcl9mbGFnKG5pYywgT1RYMl9GTEFHX1RDX01BUktfRU5BQkxFRCk7XG4gXG4gXHRpZiAoZmxvd19ub2RlLVx1MDAzZWlzX2FjdF9wb2xpY2UpIHtcbiBcdFx0X19jbGVhcl9iaXQoZmxvd19ub2RlLVx1MDAzZXJxLCBcdTAwMjZuaWMtXHUwMDNlcnFfYm1hcCk7XG4gXG4tXHRcdGlmIChuaWMtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19JTlRGX0RPV04pXG4mIzQzO1x0XHRpZiAob3R4Ml90ZXN0X2ZsYWcobmljLCBPVFgyX0ZMQUdfSU5URl9ET1dOKSlcbiBcdFx0XHRnb3RvIGZyZWVfbWNhbV9mbG93O1xuIFxuIFx0XHRtdXRleF9sb2NrKFx1MDAyNm5pYy1cdTAwM2VtYm94LmxvY2spO1xuQEAgLTEyNDYsMTAgJiM0MzsxMjU1LDEwIEBAIHN0YXRpYyBpbnQgb3R4Ml90Y19hZGRfZmxvdyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYyxcbiBcdHN0cnVjdCBucGNfaW5zdGFsbF9mbG93X3JlcSAqcmVxLCBkdW1teTtcbiBcdGludCByYywgZXJyLCBlbnRyeTtcbiBcbi1cdGlmICghKG5pYy1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1RDX0ZMT1dFUl9TVVBQT1JUKSlcbiYjNDM7XHRpZiAoIW90eDJfdGVzdF9mbGFnKG5pYywgT1RYMl9GTEFHX1RDX0ZMT1dFUl9TVVBQT1JUKSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4tXHRpZiAobmljLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfSU5URl9ET1dOKSB7XG4mIzQzO1x0aWYgKG90eDJfdGVzdF9mbGFnKG5pYywgT1RYMl9GTEFHX0lOVEZfRE9XTikpIHtcbiBcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7SW50ZXJmYWNlIG5vdCBpbml0aWFsaXplZFwmIzM0Oyk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuQEAgLTE0NDQsNyAmIzQzOzE0NTMsNyBAQCBzdGF0aWMgaW50IG90eDJfdGNfaW5ncmVzc19tYXRjaGFsbF9pbnN0YWxsKHN0cnVjdCBvdHgyX25pYyAqbmljLFxuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbi1cdGlmIChuaWMtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19UQ19NQVRDSEFMTF9JTkdSRVNTX0VOQUJMRUQpIHtcbiYjNDM7XHRpZiAob3R4Ml90ZXN0X2ZsYWcobmljLCBPVFgyX0ZMQUdfVENfTUFUQ0hBTExfSU5HUkVTU19FTkFCTEVEKSkge1xuIFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuIFx0XHRcdFx0ICAgXCYjMzQ7T25seSBvbmUgaW5ncmVzcyBNQVRDSEFMTCByYXRlbGltaXR0ZXIgY2FuIGJlIG9mZmxvYWRlZFwmIzM0Oyk7XG4gXHRcdHJldHVybiAtRU5PTUVNO1xuQEAgLTE0NjksNyAmIzQzOzE0NzgsNyBAQCBzdGF0aWMgaW50IG90eDJfdGNfaW5ncmVzc19tYXRjaGFsbF9pbnN0YWxsKHN0cnVjdCBvdHgyX25pYyAqbmljLFxuIFx0XHRlcnIgPSBjbjEwa19zZXRfbWF0Y2hhbGxfaXBvbGljZXJfcmF0ZShuaWMsIGVudHJ5LVx1MDAzZXBvbGljZS5idXJzdCwgcmF0ZSk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIGVycjtcbi1cdFx0bmljLVx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19UQ19NQVRDSEFMTF9JTkdSRVNTX0VOQUJMRUQ7XG4mIzQzO1x0XHRvdHgyX3NldF9mbGFnKG5pYywgT1RYMl9GTEFHX1RDX01BVENIQUxMX0lOR1JFU1NfRU5BQkxFRCk7XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbkBAIC0xNDg2LDEzICYjNDM7MTQ5NSwxMyBAQCBzdGF0aWMgaW50IG90eDJfdGNfaW5ncmVzc19tYXRjaGFsbF9kZWxldGUoc3RydWN0IG90eDJfbmljICpuaWMsXG4gXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2sgPSBjbHMtXHUwMDNlY29tbW9uLmV4dGFjaztcbiBcdGludCBlcnI7XG4gXG4tXHRpZiAobmljLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfSU5URl9ET1dOKSB7XG4mIzQzO1x0aWYgKG90eDJfdGVzdF9mbGFnKG5pYywgT1RYMl9GTEFHX0lOVEZfRE9XTikpIHtcbiBcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7SW50ZXJmYWNlIG5vdCBpbml0aWFsaXplZFwmIzM0Oyk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuIFx0ZXJyID0gY24xMGtfZnJlZV9tYXRjaGFsbF9pcG9saWNlcihuaWMpO1xuLVx0bmljLVx1MDAzZWZsYWdzIFx1MDAyNj0gfk9UWDJfRkxBR19UQ19NQVRDSEFMTF9JTkdSRVNTX0VOQUJMRUQ7XG4mIzQzO1x0b3R4Ml9jbGVhcl9mbGFnKG5pYywgT1RYMl9GTEFHX1RDX01BVENIQUxMX0lOR1JFU1NfRU5BQkxFRCk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC0xNjAwLDE0ICYjNDM7MTYwOSw3NTAgQEAgc3RhdGljIGludCBvdHgyX3NldHVwX3RjX2Jsb2NrKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdFx0XHRcdCAgbmljLCBuaWMsIGluZ3Jlc3MpO1xuIH1cbiBcbiYjNDM7LyogRnJlZSB0aGUgcGVyLXF1ZXVlIG1pbi9tYXggcmF0ZSBjYWNoZXMuICovXG4mIzQzO3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUoc3RydWN0IG90eDJfbmljICpwZnZmKVxuJiM0Mzt7XG4mIzQzO1x0ZGV2bV9rZnJlZShwZnZmLVx1MDAzZWRldiwgcGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUpO1xuJiM0MztcdGRldm1fa2ZyZWUocGZ2Zi1cdTAwM2VkZXYsIHBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlKTtcbiYjNDM7XHRwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSA9IE5VTEw7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUgPSBOVUxMO1xuJiM0MztcdHBmdmYtXHUwMDNlbXFwcmlvLmZsYWdzID0gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHgyX21xcHJpb19hbGxvY19jYWNoZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGJvb2wgcmVwbGFjaW5nKVxuJiM0Mzt7XG4mIzQzO1x0dTE2IG51bV90eHEgPSBwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzO1xuJiM0MztcbiYjNDM7XHRpZiAocmVwbGFjaW5nIFx1MDAyNlx1MDAyNiBwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSBcdTAwMjZcdTAwMjYgcGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUpIHtcbiYjNDM7XHRcdG1lbXNldChwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSwgMCxcbiYjNDM7XHRcdCAgICAgICBudW1fdHhxICogc2l6ZW9mKCpwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSkpO1xuJiM0MztcdFx0bWVtc2V0KHBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlLCAwLFxuJiM0MztcdFx0ICAgICAgIG51bV90eHEgKiBzaXplb2YoKnBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlKSk7XG4mIzQzO1x0XHRwZnZmLVx1MDAzZW1xcHJpby5mbGFncyA9IDA7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7XG4mIzQzO1xuJiM0MztcdHBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlID0gZGV2bV9rY2FsbG9jKHBmdmYtXHUwMDNlZGV2LCBudW1fdHhxLFxuJiM0MztcdFx0XHRcdFx0ICAgICBzaXplb2YoKnBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlKSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUgPSBkZXZtX2tjYWxsb2MocGZ2Zi1cdTAwM2VkZXYsIG51bV90eHEsXG4mIzQzO1x0XHRcdFx0XHQgICAgIHNpemVvZigqcGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUpLFxuJiM0MztcdFx0XHRcdFx0ICAgICBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIXBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlIHx8ICFwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSkge1xuJiM0MztcdFx0b3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTtcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX3NuYXBfZnJlZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4mIzQzO1x0XHRcdFx0ICBzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwICoqc25hcClcbiYjNDM7e1xuJiM0MztcdGlmICghKnNuYXApXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGRldm1fa2ZyZWUocGZ2Zi1cdTAwM2VkZXYsICpzbmFwKTtcbiYjNDM7XHQqc25hcCA9IE5VTEw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fc25hcF9jb3B5KHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbiYjNDM7XHRcdFx0XHQgc3RydWN0IG1xX29mZmxvYWRfc25hcCAqKmRzdCxcbiYjNDM7XHRcdFx0XHQgY29uc3Qgc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbylcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9IFx1MDAyNm1xcHJpby1cdTAwM2Vxb3B0O1xuJiM0MztcdHN0cnVjdCBtcV9vZmZsb2FkX3NuYXAgKnNuYXA7XG4mIzQzO1x0aW50IHRjO1xuJiM0MztcbiYjNDM7XHRpZiAoISpkc3QpIHtcbiYjNDM7XHRcdHNuYXAgPSBkZXZtX2t6YWxsb2MocGZ2Zi1cdTAwM2VkZXYsIHNpemVvZigqc25hcCksIEdGUF9LRVJORUwpO1xuJiM0MztcdFx0aWYgKCFzbmFwKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHRcdCpkc3QgPSBzbmFwO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRzbmFwID0gKmRzdDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNuYXAtXHUwMDNlbnVtX3RjID0gcW9wdC1cdTAwM2VudW1fdGM7XG4mIzQzO1x0Zm9yICh0YyA9IDA7IHRjIFx1MDAzYyBUQ19RT1BUX01BWF9RVUVVRTsgdGMmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzbmFwLVx1MDAzZWNvdW50W3RjXSA9IHFvcHQtXHUwMDNlY291bnRbdGNdO1xuJiM0MztcdFx0c25hcC1cdTAwM2VvZmZzZXRbdGNdID0gcW9wdC1cdTAwM2VvZmZzZXRbdGNdO1xuJiM0MztcdFx0c25hcC1cdTAwM2VtaW5fcmF0ZVt0Y10gPSAwO1xuJiM0MztcdFx0c25hcC1cdTAwM2VtYXhfcmF0ZVt0Y10gPSAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Zm9yICh0YyA9IDA7IHRjIFx1MDAzYyBxb3B0LVx1MDAzZW51bV90YzsgdGMmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcbiYjNDM7XHRcdFx0c25hcC1cdTAwM2VtaW5fcmF0ZVt0Y10gPSBtcXByaW8tXHUwMDNlbWluX3JhdGVbdGNdO1xuJiM0MztcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUpXG4mIzQzO1x0XHRcdHNuYXAtXHUwMDNlbWF4X3JhdGVbdGNdID0gbXFwcmlvLVx1MDAzZW1heF9yYXRlW3RjXTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90eDJfbXFwcmlvX3N0YWdlX2N1cihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4mIzQzO1x0XHRcdFx0IGNvbnN0IHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gb3R4Ml9tcXByaW9fc25hcF9jb3B5KHBmdmYsIFx1MDAyNnBmdmYtXHUwMDNlY3VyX21xX3NuYXAsIG1xcHJpbyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX3NuYXBfY29tbWl0KHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiYjNDM7e1xuJiM0MztcdG90eDJfbXFwcmlvX3NuYXBfZnJlZShwZnZmLCBcdTAwMjZwZnZmLVx1MDAzZW9sZF9tcV9zbmFwKTtcbiYjNDM7XHRwZnZmLVx1MDAzZW9sZF9tcV9zbmFwID0gcGZ2Zi1cdTAwM2VjdXJfbXFfc25hcDtcbiYjNDM7XHRwZnZmLVx1MDAzZWN1cl9tcV9zbmFwID0gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fY2xlYXJfcmVwbGFjZV9zdGF0ZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4mIzQzO3tcbiYjNDM7XHRwZnZmLVx1MDAzZW1xcHJpby5yZXBsYWNlX3NldHVwX2RvbmUgPSBmYWxzZTtcbiYjNDM7XHRwZnZmLVx1MDAzZW1xcHJpby5yZXBsYWNlX2dyYWZ0X2RvbmUgPSBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgb3R4Ml9tcXByaW9fbWRxX2FsbG9jYXRlZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcGZ2Zi1cdTAwM2Vody50eHNjaHFfY250W05JWF9UWFNDSF9MVkxfTURRXSAhPSAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmF0ZV9saW1pdCk7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90eDJfbXFwcmlvX3Jlc3RvcmVfb2xkKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtcV9vZmZsb2FkX3NuYXAgKnNuYXAgPSBwZnZmLVx1MDAzZW9sZF9tcV9zbmFwO1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVx1MDAzZW5ldGRldjtcbiYjNDM7XHR1MTYgbnVtX3R4cSA9IHBmdmYtXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXM7XG4mIzQzO1x0aW50IHRjLCB0eHEsIGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFzbmFwKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGVyciA9IG90eDJfbXFwcmlvX2FsbG9jX2NhY2hlKHBmdmYsIGZhbHNlKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4mIzQzO1x0bWVtc2V0KHBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlLCAwLCBudW1fdHhxICogc2l6ZW9mKCpwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSkpO1xuJiM0MztcdG1lbXNldChwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSwgMCwgbnVtX3R4cSAqIHNpemVvZigqcGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUpKTtcbiYjNDM7XHRwZnZmLVx1MDAzZW1xcHJpby5mbGFncyA9IDA7XG4mIzQzO1xuJiM0MztcdGZvciAodGMgPSAwOyB0YyBcdTAwM2Mgc25hcC1cdTAwM2VudW1fdGM7IHRjJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dTY0IG1pbl9yYXRlID0gc25hcC1cdTAwM2VtaW5fcmF0ZVt0Y107XG4mIzQzO1x0XHR1NjQgbWF4X3JhdGUgPSBzbmFwLVx1MDAzZW1heF9yYXRlW3RjXTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAobWluX3JhdGUpXG4mIzQzO1x0XHRcdHBmdmYtXHUwMDNlbXFwcmlvLmZsYWdzIHw9IFRDX01RUFJJT19GX01JTl9SQVRFO1xuJiM0MztcdFx0aWYgKG1heF9yYXRlKVxuJiM0MztcdFx0XHRwZnZmLVx1MDAzZW1xcHJpby5mbGFncyB8PSBUQ19NUVBSSU9fRl9NQVhfUkFURTtcbiYjNDM7XG4mIzQzO1x0XHRmb3IgKHR4cSA9IHNuYXAtXHUwMDNlb2Zmc2V0W3RjXTtcbiYjNDM7XHRcdCAgICAgdHhxIFx1MDAzYyBzbmFwLVx1MDAzZW9mZnNldFt0Y10gJiM0Mzsgc25hcC1cdTAwM2Vjb3VudFt0Y107IHR4cSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0cGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGVbdHhxXSA9IG1pbl9yYXRlO1xuJiM0MztcdFx0XHRwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZVt0eHFdID0gbWF4X3JhdGU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRuZXRkZXZfc2V0X251bV90YyhuZXRkZXYsIHNuYXAtXHUwMDNlbnVtX3RjKTtcbiYjNDM7XHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIHNuYXAtXHUwMDNlbnVtX3RjOyB0YyYjNDM7JiM0MzspXG4mIzQzO1x0XHRuZXRkZXZfc2V0X3RjX3F1ZXVlKG5ldGRldiwgdGMsIHNuYXAtXHUwMDNlY291bnRbdGNdLFxuJiM0MztcdFx0XHRcdCAgICBzbmFwLVx1MDAzZW9mZnNldFt0Y10pO1xuJiM0MztcbiYjNDM7XHRpZiAob3R4Ml9tcXByaW9fbWRxX2FsbG9jYXRlZChwZnZmKSkge1xuJiM0MztcdFx0ZXJyID0gb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHBmdmYpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFJlYnVpbGQgdGhlIFRYIHNjaGVkdWxlciB2aWEgbmV0ZGV2IHJlc3RhcnQgd2hlbiBydW5uaW5nOyBvdHgyX21xcHJpb191cCgpXG4mIzQzO1x0ICogYWxvbmUgaXMgaW5zdWZmaWNpZW50IGFmdGVyIGEgZmFpbGVkIHJlcGxhY2UgdGhhdCBhbHJlYWR5IGJvdW5jZWQgdGhlXG4mIzQzO1x0ICogaW50ZXJmYWNlLiBJZiBvcGVuIGZhaWxlZCwgVFggc2NoZWR1bGVycyB3ZXJlIGZyZWVkOyBkZWZlciBzaGFwZXIgcmVzdG9yZVxuJiM0MztcdCAqIHRvIHRoZSBuZXh0IHN1Y2Nlc3NmdWwgbmRvX29wZW4oKSB2aWEgb3R4Ml9tcXByaW9fdXAoKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0ID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkge1xuJiM0MztcdFx0ZXJyID0gb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYobmV0ZGV2LCB0cnVlKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0fSBlbHNlIGlmIChwZnZmLVx1MDAzZWh3LnR4c2NocV9jbnRbTklYX1RYU0NIX0xWTF9TTVFdKSB7XG4mIzQzO1x0XHRlcnIgPSBvdHgyX21xcHJpb191cChwZnZmKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgXHUwMDI2cGZ2Zi1cdTAwM2VjdXJfbXFfc25hcCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19zbmFwX2Rlc3Ryb3koc3RydWN0IG90eDJfbmljICpwZnZmKVxuJiM0Mzt7XG4mIzQzO1x0b3R4Ml9tcXByaW9fc25hcF9mcmVlKHBmdmYsIFx1MDAyNnBmdmYtXHUwMDNlY3VyX21xX3NuYXApO1xuJiM0MztcdG90eDJfbXFwcmlvX3NuYXBfZnJlZShwZnZmLCBcdTAwMjZwZnZmLVx1MDAzZW9sZF9tcV9zbmFwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fY2xlYXJfc3coc3RydWN0IG90eDJfbmljICpwZnZmKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtXHUwMDNlbmV0ZGV2O1xuJiM0MztcbiYjNDM7XHRwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0ID0gZmFsc2U7XG4mIzQzO1x0b3R4Ml9tcXByaW9fY2xlYXJfcmVwbGFjZV9zdGF0ZShwZnZmKTtcbiYjNDM7XHRuZXRkZXZfc2V0X251bV90YyhuZXRkZXYsIDApO1xuJiM0MztcdG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFRlYXIgZG93biBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQ6IGNsZWFyIHBlci1xdWV1ZSBzaGFwZXJzLFxuJiM0MzsgKiBtcXByaW9fcmF0ZV9saW1pdCwgbmV0ZGV2IFRDIG1hcHBpbmdzLCBhbmQgdGhlIGNhY2hlZCByYXRlcy4gIENhbGxlZCBvblxuJiM0MzsgKiBleHBsaWNpdCBtcXByaW8gdGVhcmRvd24gKHRjIHFkaXNjIGRlbCkgYW5kIGVycm9yIGNsZWFudXAsIG5vdCBvblxuJiM0MzsgKiByb3V0aW5lIG5ldGRldiBzdG9wL29wZW4gY3ljbGVzIHdoZXJlIHRoZSBvZmZsb2FkIHN0YXlzIGFjdGl2ZS5cbiYjNDM7ICovXG4mIzQzO2ludCBvdHgyX21xcHJpb19kb3duKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiYjNDM7e1xuJiM0MztcdGludCBlcnIgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoIXBmdmYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKG5ldGlmX3J1bm5pbmcocGZ2Zi1cdTAwM2VuZXRkZXYpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBvdHgyX21xcHJpb19tZHFfYWxsb2NhdGVkKHBmdmYpKVxuJiM0MztcdFx0ZXJyID0gb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHBmdmYpO1xuJiM0MztcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRuZXRkZXZfd2FybihwZnZmLVx1MDAzZW5ldGRldixcbiYjNDM7XHRcdFx0ICAgIFwmIzM0O21xcHJpbzogZmFpbGVkIHRvIGNsZWFyIGhhcmR3YXJlIHNoYXBlcnM6ICVkOyBjbGVhcmluZyBzb2Z0d2FyZSBzdGF0ZVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgIGVycik7XG4mIzQzO1x0XHRvdHgyX21xcHJpb19jbGVhcl9zdyhwZnZmKTtcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRvdHgyX21xcHJpb19jbGVhcl9zdyhwZnZmKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBvdHgyX21xcHJpb191cChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGZ2Zi1cdTAwM2VuZXRkZXY7XG4mIzQzO1x0aW50IHR4cSwgZXJyO1xuJiM0MztcbiYjNDM7XHRpZiAoIXBmdmYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSB8fCAhcGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0Zm9yICh0eHEgPSAwOyB0eHEgXHUwMDNjIHBmdmYtXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXM7IHR4cSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8uZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFKVxuJiM0MztcdFx0XHRtaW5fcmF0ZSA9IHBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlW3R4cV07XG4mIzQzO1x0XHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8uZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKVxuJiM0MztcdFx0XHRtYXhfcmF0ZSA9IHBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlW3R4cV07XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFtaW5fcmF0ZSBcdTAwMjZcdTAwMjYgIW1heF9yYXRlKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRlcnIgPSBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHBmdmYsIHR4cSwgbWluX3JhdGUsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIG1heF9yYXRlKTtcbiYjNDM7XHRcdGlmIChlcnIpIHtcbiYjNDM7XHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiBmYWlsZWQgdG8gcmVzdG9yZSBzaGFwZXIgZm9yIHR4cSAlZDogJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgdHhxLCBlcnIpO1xuJiM0MztcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFJlc3RhcnQgdGhlIG5ldGRldiB0byByZXByb2dyYW0gdGhlIFRYIHNjaGVkdWxlciBoaWVyYXJjaHkgZm9yIG1xcHJpb1xuJiM0MzsgKiBiYW5kd2lkdGggb2ZmbG9hZC4gIEJvdGggbXFwcmlvIGFkZCBhbmQgZGVsZXRlICh3aGVuIG9mZmxvYWQgd2FzIGFjdGl2ZSlcbiYjNDM7ICogdGFrZSB0aGlzIHBhdGggdmlhIG5kb19zdG9wKCkvbmRvX29wZW4oKSBzbyBWRi1zcGVjaWZpYyBvcGVuIGxvZ2ljIChlLmcuXG4mIzQzOyAqIExCSyBjYXJyaWVyIG9uKSBydW5zIGNvcnJlY3RseS5cbiYjNDM7ICpcbiYjNDM7ICogSW50ZW50aW9uYWwgYmVoYXZpb3VyOiB0aGlzIGZ1bGwgc3RvcC9vcGVuIGN5Y2xlIGRyb3BzIGluLWZsaWdodCB0cmFmZmljXG4mIzQzOyAqIChjYXJyaWVyIG9mZiwgSVJRL05BUEkgdGVhcmRvd24sIHF1ZXVlIGRyYWluKS4gIFRoZSBOSVggVFggc2NoZWR1bGVyIG11c3RcbiYjNDM7ICogYmUgcmVhbGxvY2F0ZWQgKGUuZy4gb25lIFNNUSBwZXIgbm9uLVFvUyBxdWV1ZSkgYW5kIGNhbm5vdCBiZSByZXByb2dyYW1tZWRcbiYjNDM7ICogbGl2ZSB0b2RheSwgc28gYSBuZXRkZXYgYm91bmNlIGlzIHJlcXVpcmVkIG9uIGV2ZXJ5IG1xcHJpbyBhZGQsIHJlcGxhY2UsXG4mIzQzOyAqIGRlbGV0ZSwgYW5kIHJvbGxiYWNrLiAgVXNlcnMgc2VlIGEgYnJpZWYgY29ubmVjdGl2aXR5IGJsaXA7IHRoaXMgaXMgbm90IGFcbiYjNDM7ICogYnVnIHRvIFwmIzM0O2ZpeFwmIzM0OyB3aXRob3V0IGltcGxlbWVudGluZyB0aGUgbGl2ZS1yZXByb2dyYW1taW5nIHBhdGggbm90ZWQgYmVsb3cuXG4mIzQzOyAqIElmIG9wZW4gZmFpbHMsIHRoZSBpbnRlcmZhY2UgaXMgbGVmdCBhZG1pbmlzdHJhdGl2ZWx5IGRvd24gd2l0aG91dCBjYWxsaW5nXG4mIzQzOyAqIG5kb19zdG9wKCkgYWdhaW4gb24gcmVzb3VyY2VzIGFscmVhZHkgdG9ybiBkb3duIGJ5IHRoZSBvcGVuIGVycm9yIHBhdGguXG4mIzQzOyAqXG4mIzQzOyAqIFF1aWVzY2UgdGhlIHRyYW5zbWl0IHBhdGggbGlrZSBfX2Rldl9jbG9zZV9tYW55KCkgYmVmb3JlIG5kb19zdG9wKCkgc29cbiYjNDM7ICogb3R4Ml94bWl0KCkgY2Fubm90IHJhY2Ugb3R4Ml9mcmVlX3F1ZXVlX21lbSgpLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJhdGVfbGltaXQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyAqb3BzID0gbmV0ZGV2LVx1MDAzZW5ldGRldl9vcHM7XG4mIzQzO1x0Ym9vbCBydW5uaW5nID0gbmV0aWZfcnVubmluZyhuZXRkZXYpO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdC8qIFRPRE86IEV4cGxvcmUgbGl2ZSBUWCBzY2hlZHVsZXIgcmVwcm9ncmFtbWluZyB0byBhdm9pZCBhIGZ1bGxcbiYjNDM7XHQgKiBuZG9fc3RvcCgpL25kb19vcGVuKCkgYm91bmNlIG9uIGV2ZXJ5IG1xcHJpbyBjaGFuZ2UuXG4mIzQzO1x0ICovXG4mIzQzO1x0bmV0ZGV2X2luZm8obmV0ZGV2LFxuJiM0MztcdFx0ICAgIFwmIzM0O21xcHJpbzogcmVzdGFydGluZyBpbnRlcmZhY2UgdG8gcmVwcm9ncmFtIFRYIHNjaGVkdWxlcjsgaW4tZmxpZ2h0IHRyYWZmaWMgd2lsbCBiZSBkcm9wcGVkXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJ1bm5pbmcpIHtcbiYjNDM7XHRcdGNsZWFyX2JpdChfX0xJTktfU1RBVEVfU1RBUlQsIFx1MDAyNm5ldGRldi1cdTAwM2VzdGF0ZSk7XG4mIzQzO1x0XHRzbXBfbWJfX2FmdGVyX2F0b21pYygpOyAvKiBDb21taXQgbmV0aWZfcnVubmluZygpLiAqL1xuJiM0MztcdH1cbiYjNDM7XHRkZXZfZGVhY3RpdmF0ZShuZXRkZXYsIHRydWUpO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBvcHMtXHUwMDNlbmRvX3N0b3AobmV0ZGV2KTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRpZiAocnVubmluZykge1xuJiM0MztcdFx0XHRzZXRfYml0KF9fTElOS19TVEFURV9TVEFSVCwgXHUwMDI2bmV0ZGV2LVx1MDAzZXN0YXRlKTtcbiYjNDM7XHRcdFx0ZGV2X2FjdGl2YXRlKG5ldGRldik7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogU2V0IGJlZm9yZSBuZG9fb3BlbigpIHNvIG90eDJfdHhzY2hfYWxsb2MoKSB3aWRlbnMgU01RIGFsbG9jYXRpb24uXG4mIzQzO1x0ICogT24gdGVhcmRvd24sIGRyb3AgbXFwcmlvIHNvZnR3YXJlIHN0YXRlIHNvIG5kb19vcGVuKCkgZG9lcyBub3RcbiYjNDM7XHQgKiByZS1hcHBseSBiYW5kd2lkdGggbGltaXRzIHZpYSBvdHgyX21xcHJpb191cCgpIGFmdGVyIHRoZSBrZXJuZWxcbiYjNDM7XHQgKiByZW1vdmVkIHRoZSBxZGlzYy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocmF0ZV9saW1pdClcbiYjNDM7XHRcdHBmdmYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQgPSB0cnVlO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdG90eDJfbXFwcmlvX2NsZWFyX3N3KHBmdmYpO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBvcHMtXHUwMDNlbmRvX29wZW4obmV0ZGV2KTtcbiYjNDM7XHRpZiAoIWVyciBcdTAwMjZcdTAwMjYgcnVubmluZykge1xuJiM0MztcdFx0c2V0X2JpdChfX0xJTktfU1RBVEVfU1RBUlQsIFx1MDAyNm5ldGRldi1cdTAwM2VzdGF0ZSk7XG4mIzQzO1x0XHRkZXZfYWN0aXZhdGUobmV0ZGV2KTtcbiYjNDM7XHR9IGVsc2UgaWYgKGVycikge1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O0ZhaWxlZCB0byByZXN0YXJ0IGRldmljZSBhZnRlciBtcXByaW8gY2hhbmdlOiAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgZXJyKTtcbiYjNDM7XHRcdC8qIG5kb19vcGVuKCkgYWxyZWFkeSBmcmVlZCB0aGUgVFggc2NoZWR1bGVycyBvbiBmYWlsdXJlIHdoaWxlXG4mIzQzO1x0XHQgKiBuZXRpZl9ydW5uaW5nKCkgbWF5IHN0aWxsIGJlIHRydWU7IGRyb3AgbXFwcmlvIHNvZnR3YXJlIHN0YXRlXG4mIzQzO1x0XHQgKiBvbmx5IGluc3RlYWQgb2Ygc2VuZGluZyBzaGFwZXIgY2xlYXJzIHRvIGZyZWVkIHF1ZXVlcy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0b3R4Ml9tcXByaW9fY2xlYXJfc3cocGZ2Zik7XG4mIzQzO1x0XHQvKiBuZG9fb3BlbigpIHJvbGxzIGJhY2sgb24gZmFpbHVyZTsgbWFyayB0aGUgaW50ZXJmYWNlIGRvd24gc29cbiYjNDM7XHRcdCAqIG5ldGlmX2Nsb3NlKCkgZG9lcyBub3QgaW52b2tlIG5kb19zdG9wKCkgb24gZnJlZWQgTkFQSS9xdWV1ZVxuJiM0MztcdFx0ICogc3RhdGUuIENhbGxlciBob2xkcyBSVE5MOyBkZXZfY2xvc2UoKSB3b3VsZCBkZWFkbG9jay5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0b3R4Ml9zZXRfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfSU5URl9ET1dOKTtcbiYjNDM7XHRcdC8qIHZpc2libGUgdG8gb3R4Ml9zdG9wKCkgb24gb3RoZXIgY3B1cyAqL1xuJiM0MztcdFx0c21wX3dtYigpO1xuJiM0MztcdFx0bmV0aWZfY2xvc2UobmV0ZGV2KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fdmFsaWRhdGVfdGNfcmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuJiM0MztcdFx0XHRcdFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxuJiM0MztcdFx0XHRcdFx0dTY0IHJhdGUsIHUzMiBxY291bnQsIGludCB0YyxcbiYjNDM7XHRcdFx0XHRcdGNvbnN0IGNoYXIgKm5hbWUpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIXJhdGUpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKHFjb3VudCBcdTAwM2M9IDEpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0LyogVE9ETzogbXFwcmlvIG1pbl9yYXRlL21heF9yYXRlIGFyZSBwZXIgdHJhZmZpYyBjbGFzcywgYnV0IGJhbmR3aWR0aFxuJiM0MztcdCAqIG9mZmxvYWQgc2hhcGVzIG9uIHBlci1xdWV1ZSBNRFEgbm9kZXMgcGFyZW50ZWQgdW5kZXIgYSBzaW5nbGUgVEw0LlxuJiM0MztcdCAqIFdpdGhvdXQgcGVyLVRDIFRMNCBzaGFwZXJzIHRoZSBkcml2ZXIgY2Fubm90IGhvbm9yIFRDLWxldmVsIGxpbWl0c1xuJiM0MztcdCAqIGZvciBhIHRyYWZmaWMgY2xhc3MgdGhhdCBzcGFucyBtdWx0aXBsZSBxdWV1ZXMgd2l0aG91dCBlaXRoZXJcbiYjNDM7XHQgKiBkaXZpZGluZyB0aGUgcmF0ZSBhY3Jvc3MgcXVldWVzICh1QVBJIG1pc21hdGNoKSBvciBleGNlZWRpbmcgdGhlIFRDXG4mIzQzO1x0ICogY2FwIHdoZW4gZXZlcnkgbWVtYmVyIHF1ZXVlIGlzIGFjdGl2ZS4gUmVqZWN0IHVudGlsIHBlci1UQyBUTDRcbiYjNDM7XHQgKiBzaGFwaW5nIGNhbiBiZSBpbXBsZW1lbnRlZCB3aXRob3V0IGFsbG9jYXRpbmcgYWRkaXRpb25hbCBUTDQgbm9kZXNcbiYjNDM7XHQgKiBiZXlvbmQgdGhlIGV4aXN0aW5nIGhpZXJhcmNoeS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRuZXRkZXZfZXJyKG5ldGRldixcbiYjNDM7XHRcdCAgIFwmIzM0O21xcHJpbzogJXMgcmF0ZSBmb3IgdGMgJWQgbm90IHN1cHBvcnRlZCB3aXRoICV1IHF1ZXVlc1xcblwmIzM0OyxcbiYjNDM7XHRcdCAgIG5hbWUsIHRjLCBxY291bnQpO1xuJiM0MztcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHQgICAgICAgXCYjMzQ7bXFwcmlvOiAlcyByYXRlIGZvciB0YyAlZCBub3Qgc3VwcG9ydGVkIHdpdGggJXUgcXVldWVzXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgICAgbmFtZSwgdGMsIHFjb3VudCk7XG4mIzQzO1x0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3R4cXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiYjNDM7XHRcdFx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICAgIHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4mIzQzO1x0dTE2IG51bV90eHEgPSBwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzO1xuJiM0MztcdGludCB0YywgdHhxO1xuJiM0MztcbiYjNDM7XHRpZiAocW9wdC1cdTAwM2VudW1fdGMgXHUwMDNlIG51bV90eHEpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcJiMzNDtOdW1iZXIgb2YgVENzICgldSkgZXhjZWVkcyBodyBxdWV1ZXMgJXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgIHFvcHQtXHUwMDNlbnVtX3RjLCBudW1fdHhxKTtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHRcdCAgICAgICBcJiMzNDtOdW1iZXIgb2YgVENzICgldSkgZXhjZWVkcyBodyBxdWV1ZXMgJXVcJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICAgIHFvcHQtXHUwMDNlbnVtX3RjLCBudW1fdHhxKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKG51bV90eHEgXHUwMDNlIE1BWF9UWFNDSFFfUEVSX0ZVTkMpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0XHQgICBcJiMzNDtOdW1iZXIgb2YgcXVldWVzICgldSkgZXhjZWVkcyBtYXggc2NoZWR1bGVyIHF1ZXVlcyAldVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgbnVtX3R4cSwgTUFYX1RYU0NIUV9QRVJfRlVOQyk7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICAgICAgXCYjMzQ7TnVtYmVyIG9mIHF1ZXVlcyAoJXUpIGV4Y2VlZHMgbWF4IHNjaGVkdWxlciBxdWV1ZXMgJXVcJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICAgIG51bV90eHEsIE1BWF9UWFNDSFFfUEVSX0ZVTkMpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIHFvcHQtXHUwMDNlbnVtX3RjOyB0YyYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHUzMiBxY291bnQgPSBxb3B0LVx1MDAzZWNvdW50W3RjXTtcbiYjNDM7XG4mIzQzO1x0XHRmb3IgKHR4cSA9IHFvcHQtXHUwMDNlb2Zmc2V0W3RjXTtcbiYjNDM7XHRcdCAgICAgdHhxIFx1MDAzYyBxb3B0LVx1MDAzZW9mZnNldFt0Y10gJiM0MzsgcWNvdW50OyB0eHEmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdGlmICh0eHEgXHUwMDNlPSBudW1fdHhxKSB7XG4mIzQzO1x0XHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdFx0XHQgICBcJiMzNDttcXByaW86IHR4cSAlZCBleGNlZWRzIG9mZmxvYWQgcXVldWUgY291bnQgJXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICB0eHEsIG51bV90eHEpO1xuJiM0MztcdFx0XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgXCYjMzQ7bXFwcmlvOiB0eHEgJWQgZXhjZWVkcyBvZmZsb2FkIHF1ZXVlIGNvdW50ICV1XCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgdHhxLCBudW1fdHhxKTtcbiYjNDM7XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIG90eDJfbXFwcmlvX3JhdGVfdmFsaWQodTY0IHJhdGVfYnl0ZXNfcHMpXG4mIzQzO3tcbiYjNDM7XHR1NjQgbWJwcztcbiYjNDM7XG4mIzQzO1x0aWYgKCFyYXRlX2J5dGVzX3BzKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdGlmIChyYXRlX2J5dGVzX3BzIFx1MDAzYyBPVFgyX01RUFJJT19NSU5fUkFURV9CWVRFU19QUylcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJhdGVfYnl0ZXNfcHMgXHUwMDNlIE9UWDJfTVFQUklPX01BWF9SQVRFX0JZVEVTX1BTKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRpZiAocmF0ZV9ieXRlc19wcyBcdTAwM2UgZGl2X3U2NChVNjRfTUFYLCA4KSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0bWJwcyA9IG90eDJfY29udmVydF9yYXRlKHJhdGVfYnl0ZXNfcHMpO1xuJiM0MztcdHJldHVybiBpbG9nMihtYnBzIC8gMikgXHUwMDNjPSBNQVhfUkFURV9FWFBPTkVOVDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHgyX3RlYXJkb3duX3RjX21xcHJpbyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4mIzQzO1x0XHRcdFx0ICAgc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9IFx1MDAyNm1xcHJpby1cdTAwM2Vxb3B0O1xuJiM0MztcdGJvb2wgaGFkX21xcHJpbyA9IHBmdmYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQ7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtXHUwMDNlbmV0ZGV2O1xuJiM0MztcdGJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKG5ldGRldik7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0cW9wdC1cdTAwM2VodyA9IDA7XG4mIzQzO1xuJiM0MztcdC8qIHRjIHFkaXNjIHJlcGxhY2UgcnVucyBzZXR1cCBvbiB0aGUgbmV3IG1xcHJpbyBiZWZvcmUgZGVzdHJveWluZyB0aGVcbiYjNDM7XHQgKiBvbGQgb25lLiByZXBsYWNlX3NldHVwX2RvbmUgYW5kIFRDX1JPT1RfR1JBRlQgZGlzdGluZ3Vpc2ggc3RhbGVcbiYjNDM7XHQgKiBvbGQtaW5zdGFuY2UgdGVhcmRvd24gZnJvbSBncmFmdCBmYWlsdXJlIGFmdGVyIHNldHVwLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5yZXBsYWNlX3NldHVwX2RvbmUgXHUwMDI2XHUwMDI2IHBmdmYtXHUwMDNlY3VyX21xX3NuYXApIHtcbiYjNDM7XHRcdGVyciA9IDA7XG4mIzQzO1x0XHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8ucmVwbGFjZV9ncmFmdF9kb25lKVxuJiM0MztcdFx0XHRvdHgyX21xcHJpb19zbmFwX2NvbW1pdChwZnZmKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0ZXJyID0gb3R4Ml9tcXByaW9fcmVzdG9yZV9vbGQocGZ2Zik7XG4mIzQzO1x0XHRvdHgyX21xcHJpb19jbGVhcl9yZXBsYWNlX3N0YXRlKHBmdmYpO1xuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFNraXAgdGhlIG5ldGRldiByZXN0YXJ0IHdoZW4gbXFwcmlvIG9mZmxvYWQgd2FzIG5vdCBhY3RpdmUuICovXG4mIzQzO1x0aWYgKCFoYWRfbXFwcmlvKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmIChpZl91cCkge1xuJiM0MztcdFx0aW50IGRvd25fZXJyLCBlcnI7XG4mIzQzO1xuJiM0MztcdFx0ZG93bl9lcnIgPSBvdHgyX21xcHJpb19kb3duKHBmdmYpO1xuJiM0MztcdFx0ZXJyID0gb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYobmV0ZGV2LCBmYWxzZSk7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0cmV0dXJuIGRvd25fZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogbmRvX3N0b3AoKSBhbHJlYWR5IGZyZWVkIHRoZSBUWCBzY2hlZHVsZXIgVEwgbm9kZXM7IGRyb3Agc29mdHdhcmVcbiYjNDM7XHQgKiBzdGF0ZSBvbmx5LlxuJiM0MztcdCAqL1xuJiM0MztcdG90eDJfbXFwcmlvX2NsZWFyX3N3KHBmdmYpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfbXFwcmlvKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4mIzQzO1x0XHRcdFx0c3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayA9IG1xcHJpby1cdTAwM2VleHRhY2s7XG4mIzQzO1x0c3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcdTAwMjZtcXByaW8tXHUwMDNlcW9wdDtcbiYjNDM7XHRib29sIHJlcGxhY2luZyA9IHBmdmYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQ7XG4mIzQzO1x0Ym9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcobmV0ZGV2KTtcbiYjNDM7XHRpbnQgdGMsIHR4cSwgZXJyLCBpO1xuJiM0MztcbiYjNDM7XHRpZiAoIXFvcHQtXHUwMDNlaHcpXG4mIzQzO1x0XHRyZXR1cm4gb3R4Ml90ZWFyZG93bl90Y19tcXByaW8ocGZ2ZiwgbXFwcmlvKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFpZl91cCkge1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwmIzM0O21xcHJpbzogc2V0dXAgcmVxdWlyZXMgaW50ZXJmYWNlIFVQXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwmIzM0O21xcHJpbzogc2V0dXAgcmVxdWlyZXMgaW50ZXJmYWNlIFVQXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChtcXByaW8tXHUwMDNlc2hhcGVyICE9IFRDX01RUFJJT19TSEFQRVJfQldfUkFURSkge1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwmIzM0O1Vuc3VwcG9ydGVkIG1xcHJpbyBzaGFwZXIgJSN4XFxuXCYjMzQ7LCBtcXByaW8tXHUwMDNlc2hhcGVyKTtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLCBcJiMzNDtVbnN1cHBvcnRlZCBtcXByaW8gc2hhcGVyICUjeFwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgICAgbXFwcmlvLVx1MDAzZXNoYXBlcik7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIXRlc3RfYml0KFFPU19DSVJfUElSX1NVUFBPUlQsIFx1MDAyNnBmdmYtXHUwMDNlaHcuY2FwX2ZsYWcpKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5ldGRldixcbiYjNDM7XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCByZXF1aXJlcyBDSVImIzQzO1BJUiBzdXBwb3J0XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCByZXF1aXJlcyBDSVImIzQzO1BJUiBzdXBwb3J0XCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChpc19vdHgyX3NkcF9yZXAocGZ2Zi1cdTAwM2VwZGV2KSkge1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwmIzM0O21xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgbm90IHN1cHBvcnRlZCBvbiBTRFAgcmVwXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCBub3Qgc3VwcG9ydGVkIG9uIFNEUCByZXBcJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHBmdmYtXHUwMDNlcGZjX2VuKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5ldGRldixcbiYjNDM7XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgUEZDIGlzIGVuYWJsZWRcXG5cJiMzNDspO1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDttcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBQRkMgaXMgZW5hYmxlZFwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAocGZ2Zi1cdTAwM2V4ZHBfcHJvZykge1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O21xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFhEUCBpcyBhY3RpdmVcXG5cJiMzNDspO1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDttcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBYRFAgaXMgYWN0aXZlXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghbGlzdF9lbXB0eShcdTAwMjZwZnZmLVx1MDAzZXFvcy5xb3NfdHJlZSkpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0XHQgICBcJiMzNDttcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBIVEIgaXMgYWN0aXZlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgSFRCIGlzIGFjdGl2ZVwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIHFvcHQtXHUwMDNlbnVtX3RjOyB0YyYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDtcbiYjNDM7XHRcdHUzMiBxY291bnQgPSBxb3B0LVx1MDAzZWNvdW50W3RjXTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcbiYjNDM7XHRcdFx0bWluX3JhdGUgPSBtcXByaW8tXHUwMDNlbWluX3JhdGVbdGNdO1xuJiM0MztcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUpXG4mIzQzO1x0XHRcdG1heF9yYXRlID0gbXFwcmlvLVx1MDAzZW1heF9yYXRlW3RjXTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAobWluX3JhdGUgXHUwMDI2XHUwMDI2IG1heF9yYXRlIFx1MDAyNlx1MDAyNiBtaW5fcmF0ZSBcdTAwM2UgbWF4X3JhdGUpIHtcbiYjNDM7XHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7bWluX3JhdGUgJWxsdSBleGNlZWRzIG1heF9yYXRlICVsbHUgZm9yIHRjICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIG1pbl9yYXRlLCBtYXhfcmF0ZSwgdGMpO1xuJiM0MztcdFx0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBcJiMzNDttaW5fcmF0ZSAlbGx1IGV4Y2VlZHMgbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWRcJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgbWluX3JhdGUsIG1heF9yYXRlLCB0Yyk7XG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFKSB7XG4mIzQzO1x0XHRcdGVyciA9IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3RjX3JhdGUobmV0ZGV2LCBleHRhY2ssIG1pbl9yYXRlLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgIHFjb3VudCwgdGMsIFwmIzM0O21pblwmIzM0Oyk7XG4mIzQzO1x0XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSkge1xuJiM0MztcdFx0XHRlcnIgPSBvdHgyX21xcHJpb192YWxpZGF0ZV90Y19yYXRlKG5ldGRldiwgZXh0YWNrLCBtYXhfcmF0ZSxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICBxY291bnQsIHRjLCBcJiMzNDttYXhcJiMzNDspO1xuJiM0MztcdFx0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIW90eDJfbXFwcmlvX3JhdGVfdmFsaWQobWluX3JhdGUpKSB7XG4mIzQzO1x0XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O21xcHJpbzogbWluX3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgbWluX3JhdGUsIHRjKTtcbiYjNDM7XHRcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgXCYjMzQ7bXFwcmlvOiBtaW5fcmF0ZSAlbGx1IGZvciB0YyAlZCBpcyBvdXRzaWRlIGhhcmR3YXJlIGxpbWl0c1wmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBtaW5fcmF0ZSwgdGMpO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAhb3R4Ml9tcXByaW9fcmF0ZV92YWxpZChtYXhfcmF0ZSkpIHtcbiYjNDM7XHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZCBpcyBvdXRzaWRlIGhhcmR3YXJlIGxpbWl0c1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICBtYXhfcmF0ZSwgdGMpO1xuJiM0MztcdFx0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBcJiMzNDttcXByaW86IG1heF9yYXRlICVsbHUgZm9yIHRjICVkIGlzIG91dHNpZGUgaGFyZHdhcmUgbGltaXRzXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIG1heF9yYXRlLCB0Yyk7XG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZXJyID0gb3R4Ml9tcXByaW9fdmFsaWRhdGVfdHhxcyhuZXRkZXYsIGV4dGFjaywgcW9wdCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdGVyciA9IG90eDJfbXFwcmlvX3N0YWdlX2N1cihwZnZmLCBtcXByaW8pO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihwZnZmLVx1MDAzZW5ldGRldiwgdHJ1ZSk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gb3R4Ml9tcXByaW9fYWxsb2NfY2FjaGUocGZ2ZiwgcmVwbGFjaW5nKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHQvKiBvdHgyX21xcHJpb191cCgpIG1heSBoYXZlIHJlc3RvcmVkIHRoZSBwcmV2aW91cyBjb25maWd1cmF0aW9uIGR1cmluZ1xuJiM0MztcdCAqIHRoZSByZXN0YXJ0IGFib3ZlLiBDbGVhciBldmVyeSBNRFEgc2hhcGVyIGJlZm9yZSBhcHBseWluZyB0aGUgbmV3XG4mIzQzO1x0ICogbWFwcGluZyBzbyBxdWV1ZXMgZHJvcHBlZCBmcm9tIHRoZSBUQyBsYXlvdXQgZG8gbm90IGtlZXAgc3RhbGVcbiYjNDM7XHQgKiBsaW1pdHMgaW4gaGFyZHdhcmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKG90eDJfbXFwcmlvX21kcV9hbGxvY2F0ZWQocGZ2ZikpIHtcbiYjNDM7XHRcdGVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHBmdmYtXHUwMDNlbXFwcmlvLmZsYWdzID0gbXFwcmlvLVx1MDAzZWZsYWdzO1xuJiM0MztcbiYjNDM7XHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIHFvcHQtXHUwMDNlbnVtX3RjOyB0YyYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDtcbiYjNDM7XHRcdHUzMiBxY291bnQgPSBxb3B0LVx1MDAzZWNvdW50W3RjXTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBSYXRlcyBvbWl0dGVkIGZyb20gdGMgbXFwcmlvIGFyZSBwYXNzZWQgYXMgemVybyBhbmQgYm90aCBNRFFcbiYjNDM7XHRcdCAqIHNoYXBlciByZWdpc3RlcnMgYXJlIHByb2dyYW1tZWQ7IHNlZVxuJiM0MztcdFx0ICogb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcigpLiBNdWx0aS1xdWV1ZSBUQ3Mgd2l0aCByYXRlc1xuJiM0MztcdFx0ICogYXJlIHJlamVjdGVkIGFib3ZlLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcbiYjNDM7XHRcdFx0bWluX3JhdGUgPSBtcXByaW8tXHUwMDNlbWluX3JhdGVbdGNdO1xuJiM0MztcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUpXG4mIzQzO1x0XHRcdG1heF9yYXRlID0gbXFwcmlvLVx1MDAzZW1heF9yYXRlW3RjXTtcbiYjNDM7XG4mIzQzO1x0XHRmb3IgKHR4cSA9IHFvcHQtXHUwMDNlb2Zmc2V0W3RjXTtcbiYjNDM7XHRcdCAgICAgdHhxIFx1MDAzYyBxb3B0LVx1MDAzZW9mZnNldFt0Y10gJiM0MzsgcWNvdW50OyB0eHEmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdG5ldGRldl9kYmcobmV0ZGV2LFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O21xcHJpbzogdGMgJWQgdHhxICVkIG1pbl9yYXRlICVsbHUgbWF4X3JhdGUgJWxsdVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICB0YywgdHhxLCBtaW5fcmF0ZSwgbWF4X3JhdGUpO1xuJiM0MztcbiYjNDM7XHRcdFx0cGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGVbdHhxXSA9IG1pbl9yYXRlO1xuJiM0MztcdFx0XHRwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZVt0eHFdID0gbWF4X3JhdGU7XG4mIzQzO1xuJiM0MztcdFx0XHRlcnIgPSBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHBmdmYsIHR4cSxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICBtaW5fcmF0ZSwgbWF4X3JhdGUpO1xuJiM0MztcdFx0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG5ldGRldl9zZXRfbnVtX3RjKG5ldGRldiwgcGZ2Zi1cdTAwM2VjdXJfbXFfc25hcC1cdTAwM2VudW1fdGMpO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBmdmYtXHUwMDNlY3VyX21xX3NuYXAtXHUwMDNlbnVtX3RjOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdG5ldGRldl9zZXRfdGNfcXVldWUobmV0ZGV2LCBpLCBwZnZmLVx1MDAzZWN1cl9tcV9zbmFwLVx1MDAzZWNvdW50W2ldLFxuJiM0MztcdFx0XHRcdCAgICBxb3B0LVx1MDAzZW9mZnNldFtpXSk7XG4mIzQzO1xuJiM0MztcdHFvcHQtXHUwMDNlaHcgPSBUQ19NUVBSSU9fSFdfT0ZGTE9BRF9UQ1M7XG4mIzQzO1xuJiM0MztcdGlmIChyZXBsYWNpbmcpIHtcbiYjNDM7XHRcdHBmdmYtXHUwMDNlbXFwcmlvLnJlcGxhY2Vfc2V0dXBfZG9uZSA9IHRydWU7XG4mIzQzO1x0XHRwZnZmLVx1MDAzZW1xcHJpby5yZXBsYWNlX2dyYWZ0X2RvbmUgPSBmYWxzZTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0b3R4Ml9tcXByaW9fc25hcF9jb21taXQocGZ2Zik7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2NsZWFudXA6XG4mIzQzO1x0cW9wdC1cdTAwM2VodyA9IDA7XG4mIzQzO1x0aWYgKHJlcGxhY2luZykge1xuJiM0MztcdFx0aW50IHJlc3RvcmVfZXJyID0gb3R4Ml9tcXByaW9fcmVzdG9yZV9vbGQocGZ2Zik7XG4mIzQzO1xuJiM0MztcdFx0b3R4Ml9tcXByaW9fY2xlYXJfcmVwbGFjZV9zdGF0ZShwZnZmKTtcbiYjNDM7XHRcdGlmIChyZXN0b3JlX2Vycikge1xuJiM0MztcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDttcXByaW86IHJlcGxhY2UgZmFpbGVkIGFuZCBwcmlvciBjb25maWd1cmF0aW9uIHJvbGxiYWNrIGZhaWxlZDogJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgcmVzdG9yZV9lcnIpO1xuJiM0MztcdFx0XHRpZiAoZXh0YWNrKVxuJiM0MztcdFx0XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgXCYjMzQ7bXFwcmlvOiByZXBsYWNlIGZhaWxlZCBhbmQgcHJpb3IgY29uZmlndXJhdGlvbiByb2xsYmFjayBmYWlsZWQ6ICVkXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgcmVzdG9yZV9lcnIpO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiByZXBsYWNlIGZhaWxlZDsgcHJpb3IgY29uZmlndXJhdGlvbiByZXN0b3JlZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdGlmIChleHRhY2spXG4mIzQzO1x0XHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiByZXBsYWNlIGZhaWxlZDsgcHJpb3IgY29uZmlndXJhdGlvbiByZXN0b3JlZFwmIzM0Oyk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRyZXR1cm4gZXJyID8gZXJyIDogLUVJTztcbiYjNDM7XHR9XG4mIzQzO1x0b3R4Ml90ZWFyZG93bl90Y19tcXByaW8ocGZ2ZiwgbXFwcmlvKTtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfcm9vdChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCB0Y19yb290X3FvcHRfb2ZmbG9hZCAqcm9vdClcbiYjNDM7e1xuJiM0MztcdHN3aXRjaCAocm9vdC1cdTAwM2Vjb21tYW5kKSB7XG4mIzQzO1x0Y2FzZSBUQ19ST09UX0dSQUZUOlxuJiM0MztcdFx0aWYgKHBmdmYtXHUwMDNlbXFwcmlvLnJlcGxhY2Vfc2V0dXBfZG9uZSlcbiYjNDM7XHRcdFx0cGZ2Zi1cdTAwM2VtcXByaW8ucmVwbGFjZV9ncmFmdF9kb25lID0gdHJ1ZTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfcXVlcnlfY2Fwcyh2b2lkICp0eXBlX2RhdGEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGNfcXVlcnlfY2Fwc19iYXNlICpiYXNlID0gdHlwZV9kYXRhO1xuJiM0MztcdHN0cnVjdCB0Y19tcXByaW9fY2FwcyAqY2FwcztcbiYjNDM7XG4mIzQzO1x0aWYgKGJhc2UtXHUwMDNldHlwZSAhPSBUQ19TRVRVUF9RRElTQ19NUVBSSU8pXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdGNhcHMgPSBiYXNlLVx1MDAzZWNhcHM7XG4mIzQzO1x0Y2Fwcy1cdTAwM2V2YWxpZGF0ZV9xdWV1ZV9jb3VudHMgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBpbnQgb3R4Ml9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSxcbiBcdFx0ICB2b2lkICp0eXBlX2RhdGEpXG4ge1xuIFx0c3dpdGNoICh0eXBlKSB7XG4mIzQzO1x0Y2FzZSBUQ19RVUVSWV9DQVBTOlxuJiM0MztcdFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfcXVlcnlfY2Fwcyh0eXBlX2RhdGEpO1xuIFx0Y2FzZSBUQ19TRVRVUF9CTE9DSzpcbiBcdFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfYmxvY2sobmV0ZGV2LCB0eXBlX2RhdGEpO1xuIFx0Y2FzZSBUQ19TRVRVUF9RRElTQ19IVEI6XG4gXHRcdHJldHVybiBvdHgyX3NldHVwX3RjX2h0YihuZXRkZXYsIHR5cGVfZGF0YSk7XG4mIzQzO1x0Y2FzZSBUQ19TRVRVUF9RRElTQ19NUVBSSU86XG4mIzQzO1x0XHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19tcXByaW8obmV0ZGV2LCB0eXBlX2RhdGEpO1xuJiM0MztcdGNhc2UgVENfU0VUVVBfUk9PVF9RRElTQzpcbiYjNDM7XHRcdHJldHVybiBvdHgyX3NldHVwX3RjX3Jvb3QobmV0ZGV2X3ByaXYobmV0ZGV2KSwgdHlwZV9kYXRhKTtcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcdH1cbkBAIC0xNjMyLDYgJiM0MzsyMzc3LDcgQEAgRVhQT1JUX1NZTUJPTChvdHgyX2luaXRfdGMpO1xuIHZvaWQgb3R4Ml9zaHV0ZG93bl90YyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYylcbiB7XG4gXHRvdHgyX2Rlc3Ryb3lfdGNfZmxvd19saXN0KG5pYyk7XG4mIzQzO1x0b3R4Ml9tcXByaW9fc25hcF9kZXN0cm95KG5pYyk7XG4gfVxuIEVYUE9SVF9TWU1CT0wob3R4Ml9zaHV0ZG93bl90Yyk7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdHhyeC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdHhyeC5jXG5pbmRleCA4ZDJkNjA3YmM5MmY5Li5mNjViYTQ0ZGI2MGI2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdHhyeC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90eHJ4LmNcbkBAIC0xNzEsNyAmIzQzOzE3MSw3IEBAIHN0YXRpYyB2b2lkIG90eDJfc2V0X3J4dHN0YW1wKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbiBcdHU2NCB0aW1lc3RhbXAsIHRzbnM7XG4gXHRpbnQgZXJyO1xuIFxuLVx0aWYgKCEocGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1JYX1RTVEFNUF9FTkFCTEVEKSlcbiYjNDM7XHRpZiAoIW90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19SWF9UU1RBTVBfRU5BQkxFRCkpXG4gXHRcdHJldHVybjtcbiBcbiBcdHRpbWVzdGFtcCA9IHBmdmYtXHUwMDNlcHRwLVx1MDAzZWNvbnZlcnRfcnhfcHRwX3RzdG1wKCoodTY0ICopZGF0YSk7XG5AQCAtMzc0LDEzICYjNDM7Mzc0LDEzIEBAIHN0YXRpYyB2b2lkIG90eDJfcmN2X3BrdF9oYW5kbGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbiBcdH1cbiBcdG90eDJfc2V0X3J4aGFzaChwZnZmLCBjcWUsIHNrYik7XG4gXG4tXHRpZiAoIShwZnZmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfUkVQX01PREVfRU5BQkxFRCkpIHtcbiYjNDM7XHRpZiAoIW90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19SRVBfTU9ERV9FTkFCTEVEKSkge1xuIFx0XHRza2JfcmVjb3JkX3J4X3F1ZXVlKHNrYiwgY3EtXHUwMDNlY3FfaWR4KTtcbiBcdFx0aWYgKHBmdmYtXHUwMDNlbmV0ZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX1JYQ1NVTSlcbiBcdFx0XHRza2ItXHUwMDNlaXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7XG4gXHR9XG4gXG4tXHRpZiAocGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1RDX01BUktfRU5BQkxFRClcbiYjNDM7XHRpZiAob3R4Ml90ZXN0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1RDX01BUktfRU5BQkxFRCkpXG4gXHRcdHNrYi1cdTAwM2VtYXJrID0gcGFyc2UtXHUwMDNlbWF0Y2hfaWQ7XG4gXG4gXHRza2JfbWFya19mb3JfcmVjeWNsZShza2IpO1xuQEAgLTUxMyw3ICYjNDM7NTEzLDcgQEAgc3RhdGljIGludCBvdHgyX3R4X25hcGlfaGFuZGxlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4gXHRcdCAgICAgKCh1NjQpY3EtXHUwMDNlY3FfaWR4IFx1MDAzY1x1MDAzYyAzMikgfCBwcm9jZXNzZWRfY3FlKTtcbiBcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfUlZVX0VTV0lUQ0gpXG4tXHRpZiAocGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1JFUF9NT0RFX0VOQUJMRUQpXG4mIzQzO1x0aWYgKG90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19SRVBfTU9ERV9FTkFCTEVEKSlcbiBcdFx0bmRldiA9IHBmdmYtXHUwMDNlcmVwc1txaWR4XS1cdTAwM2VuZXRkZXY7XG4gXHRlbHNlXG4gI2VuZGlmXG5AQCAtNTI2LDcgJiM0Mzs1MjYsNyBAQCBzdGF0aWMgaW50IG90eDJfdHhfbmFwaV9oYW5kbGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbiBcbiBcdFx0aWYgKHFpZHggXHUwMDNlPSBwZnZmLVx1MDAzZWh3LnR4X3F1ZXVlcylcbiBcdFx0XHRxaWR4IC09IHBmdmYtXHUwMDNlaHcueGRwX3F1ZXVlcztcbi1cdFx0aWYgKHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19SRVBfTU9ERV9FTkFCTEVEKVxuJiM0MztcdFx0aWYgKG90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19SRVBfTU9ERV9FTkFCTEVEKSlcbiBcdFx0XHRxaWR4ID0gMDtcbiBcdFx0dHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShuZGV2LCBxaWR4KTtcbiBcdFx0bmV0ZGV2X3R4X2NvbXBsZXRlZF9xdWV1ZSh0eHEsIHR4X3BrdHMsIHR4X2J5dGVzKTtcbkBAIC01OTksMTEgJiM0Mzs1OTksMTEgQEAgaW50IG90eDJfbmFwaV9oYW5kbGVyKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldClcbiBcbiBcdGlmICh3b3JrZG9uZSBcdTAwM2MgYnVkZ2V0IFx1MDAyNlx1MDAyNiBuYXBpX2NvbXBsZXRlX2RvbmUobmFwaSwgd29ya2RvbmUpKSB7XG4gXHRcdC8qIElmIGludGVyZmFjZSBpcyBnb2luZyBkb3duLCBkb24mIzM5O3QgcmUtZW5hYmxlIElSUSAqL1xuLVx0XHRpZiAocGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX0lOVEZfRE9XTilcbiYjNDM7XHRcdGlmIChvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfSU5URl9ET1dOKSlcbiBcdFx0XHRyZXR1cm4gd29ya2RvbmU7XG4gXG4gXHRcdC8qIEFkanVzdCBpcnEgY29hbGVzZSB1c2luZyBuZXRfZGltICovXG4tXHRcdGlmIChwZnZmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfQURQVFZfSU5UX0NPQUxfRU5BQkxFRClcbiYjNDM7XHRcdGlmIChvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfQURQVFZfSU5UX0NPQUxfRU5BQkxFRCkpXG4gXHRcdFx0b3R4Ml9hZGp1c3RfYWRhcHRpdmVfY29hbGVzZShwZnZmLCBjcV9wb2xsKTtcbiBcbiBcdFx0aWYgKGxpa2VseShjcSkpXG5AQCAtMTEzNyw3ICYjNDM7MTEzNyw3IEBAIHN0YXRpYyB2b2lkIG90eDJfc2V0X3R4dHN0YW1wKHN0cnVjdCBvdHgyX25pYyAqcGZ2Ziwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcbiBcdGlmICh1bmxpa2VseSghc2tiX3NoaW5mbyhza2IpLVx1MDAzZWdzb19zaXplIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgIChza2Jfc2hpbmZvKHNrYiktXHUwMDNldHhfZmxhZ3MgXHUwMDI2IFNLQlRYX0hXX1RTVEFNUCkpKSB7XG4tXHRcdGlmICh1bmxpa2VseShwZnZmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfUFRQX09ORVNURVBfU1lOQyBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdGlmICh1bmxpa2VseShvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfUFRQX09ORVNURVBfU1lOQykgXHUwMDI2XHUwMDI2XG4gXHRcdFx0ICAgICBvdHgyX3B0cF9pc19zeW5jKHNrYiwgXHUwMDI2cHRwX29mZnNldCwgXHUwMDI2dWRwX2NzdW1fY3J0KSkpIHtcbiBcdFx0XHRvcmlnaW5fdHN0YW1wID0gKHN0cnVjdCBwdHB2Ml90c3RhbXAgKilcbiBcdFx0XHRcdFx0KCh1OCAqKXNrYi1cdTAwM2VkYXRhICYjNDM7IHB0cF9vZmZzZXQgJiM0MztcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml92Zi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdmYuY1xuaW5kZXggZjc3NjVlMTlkNzhhOS4uNWY3OTE1MjMxY2EzYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmNcbkBAIC02MTAsNyAmIzQzOzYxMCw3IEBAIHN0YXRpYyBpbnQgb3R4MnZmX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG4gXHR2Zi1cdTAwM2VkZXYgPSBkZXY7XG4gXHR2Zi1cdTAwM2Vpb21tdV9kb21haW4gPSBpb21tdV9nZXRfZG9tYWluX2Zvcl9kZXYoZGV2KTtcbiBcbi1cdHZmLVx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19JTlRGX0RPV047XG4mIzQzO1x0b3R4Ml9zZXRfZmxhZyh2ZiwgT1RYMl9GTEFHX0lOVEZfRE9XTik7XG4gXHRodyA9IFx1MDAyNnZmLVx1MDAzZWh3O1xuIFx0aHctXHUwMDNlcGRldiA9IHZmLVx1MDAzZXBkZXY7XG4gXHRody1cdTAwM2VyeF9xdWV1ZXMgPSBxY291bnQ7XG5AQCAtODI0LDEwICYjNDM7ODI0LDEwIEBAIHN0YXRpYyB2b2lkIG90eDJ2Zl9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHR2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4gXG4gXHQvKiBEaXNhYmxlIDgwMi4zeCBwYXVzZSBmcmFtZXMgKi9cbi1cdGlmICh2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1JYX1BBVVNFX0VOQUJMRUQgfHxcbi1cdCAgICAodmYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19UWF9QQVVTRV9FTkFCTEVEKSkge1xuLVx0XHR2Zi1cdTAwM2VmbGFncyBcdTAwMjY9IH5PVFgyX0ZMQUdfUlhfUEFVU0VfRU5BQkxFRDtcbi1cdFx0dmYtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+T1RYMl9GTEFHX1RYX1BBVVNFX0VOQUJMRUQ7XG4mIzQzO1x0aWYgKG90eDJfdGVzdF9mbGFnKHZmLCBPVFgyX0ZMQUdfUlhfUEFVU0VfRU5BQkxFRCkgfHxcbiYjNDM7XHQgICAgb3R4Ml90ZXN0X2ZsYWcodmYsIE9UWDJfRkxBR19UWF9QQVVTRV9FTkFCTEVEKSkge1xuJiM0MztcdFx0b3R4Ml9jbGVhcl9mbGFnKHZmLCBPVFgyX0ZMQUdfUlhfUEFVU0VfRU5BQkxFRCk7XG4mIzQzO1x0XHRvdHgyX2NsZWFyX2ZsYWcodmYsIE9UWDJfRkxBR19UWF9QQVVTRV9FTkFCTEVEKTtcbiBcdFx0b3R4Ml9jb25maWdfcGF1c2VfZnJtKHZmKTtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml94c2suYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3hzay5jXG5pbmRleCAwZThhNmE2NDg2YzRhLi43ODA4NTg4YTAyMzRhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfeHNrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3hzay5jXG5AQCAtOTYsNyAmIzQzOzk2LDcgQEAgc3RhdGljIHZvaWQgb3R4Ml9jbGVhbl91cF9ycShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBxaWR4KVxuIFx0dTY0IGlvdmE7XG4gXG4gXHQvKiBJZiB0aGUgRE9XTiBmbGFnIGlzIHNldCBTUXMgYXJlIGFscmVhZHkgZnJlZWQgKi9cbi1cdGlmIChwZnZmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfSU5URl9ET1dOKVxuJiM0MztcdGlmIChvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfSU5URl9ET1dOKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0Y3EgPSBcdTAwMjZxc2V0LVx1MDAzZWNxW3FpZHhdO1xuQEAgLTE3Miw3ICYjNDM7MTcyLDcgQEAgaW50IG90eDJfeHNrX3dha2V1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgcXVldWVfaWQsIHUzMiBmbGFncylcbiBcdHN0cnVjdCBvdHgyX2NxX3BvbGwgKmNxX3BvbGwgPSBOVUxMO1xuIFx0c3RydWN0IG90eDJfcXNldCAqcXNldCA9IFx1MDAyNnBmLVx1MDAzZXFzZXQ7XG4gXG4tXHRpZiAocGYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19JTlRGX0RPV04pXG4mIzQzO1x0aWYgKG90eDJfdGVzdF9mbGFnKHBmLCBPVFgyX0ZMQUdfSU5URl9ET1dOKSlcbiBcdFx0cmV0dXJuIC1FTkVURE9XTjtcbiBcbiBcdGlmIChxdWV1ZV9pZCBcdTAwM2U9IHBmLVx1MDAzZWh3LnJ4X3F1ZXVlcyB8fCBxdWV1ZV9pZCBcdTAwM2U9IHBmLVx1MDAzZWh3LnR4X3F1ZXVlcylcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmNcbmluZGV4IGYxNjBiMTYxOGVmYTIuLjllZjU1YTZkYjUwYjcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuY1xuQEAgLTExOCw2ICYjNDM7MTE4LDkgQEAgc3RhdGljIHZvaWQgb3R4Ml9jb25maWdfc2NoZWRfc2hhcGluZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4gXHQvKiBjb25maWd1cmUgUElSICovXG4gXHRtYXhyYXRlID0gKG5vZGUtXHUwMDNlcmF0ZSBcdTAwM2Ugbm9kZS1cdTAwM2VjZWlsKSA/IG5vZGUtXHUwMDNlcmF0ZSA6IG5vZGUtXHUwMDNlY2VpbDtcbiBcbiYjNDM7XHQvKiA2NTUzNiBpcyB0aGUga2VybmVsLXNpZGUgZGVmYXVsdCBidXJzdCB3aGVuIEhUQiBkb2VzIG5vdCBzdXBwbHkgYW5cbiYjNDM7XHQgKiBleHBsaWNpdCB2YWx1ZSwgbm90IHRoZSBOSVggaGFyZHdhcmUgbWF4aW11bSAoQ04xMEtfTUFYX0JVUlNUX1NJWkUpLlxuJiM0MztcdCAqL1xuIFx0Y2ZnLVx1MDAzZXJlZ3ZhbFsqbnVtX3JlZ3NdID1cbiBcdFx0b3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIG1heHJhdGUsIDY1NTM2KTtcbiBcdCgqbnVtX3JlZ3MpJiM0MzsmIzQzOztcbkBAIC0xMDg4LDYgJiM0MzsxMDkxLDE0IEBAIHN0YXRpYyBpbnQgb3R4Ml9xb3Nfcm9vdF9hZGQoc3RydWN0IG90eDJfbmljICpwZnZmLCB1MTYgaHRiX21hal9pZCwgdTE2IGh0Yl9kZWZjXG4gXHRcdCAgIFwmIzM0O1RDX0hUQl9DUkVBVEU6IGhhbmRsZT0weCV4IGRlZmNscz0weCV4XFxuXCYjMzQ7LFxuIFx0XHQgICBodGJfbWFqX2lkLCBodGJfZGVmY2xzKTtcbiBcbiYjNDM7XHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdCkge1xuJiM0MztcdFx0bmV0ZGV2X2VycihwZnZmLVx1MDAzZW5ldGRldixcbiYjNDM7XHRcdFx0ICAgXCYjMzQ7SFRCOiBjYW5ub3QgZW5hYmxlIHdoaWxlIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBpcyBhY3RpdmVcXG5cJiMzNDspO1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDtIVEI6IGNhbm5vdCBlbmFibGUgd2hpbGUgbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGlzIGFjdGl2ZVwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHJvb3QgPSBvdHgyX3Fvc19hbGxvY19yb290KHBmdmYpO1xuIFx0aWYgKElTX0VSUihyb290KSkge1xuIFx0XHRlcnIgPSBQVFJfRVJSKHJvb3QpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3Nfc3EuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3Nfc3EuY1xuaW5kZXggMjg3MmFkYWJjODMwNS4uNWYwOWUyOTYwMTQ0MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3Nfc3EuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvc19zcS5jXG5AQCAtMjM4LDcgJiM0MzsyMzgsNyBAQCBpbnQgb3R4Ml9xb3NfZW5hYmxlX3NxKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IHFpZHgpXG4gXHRzdHJ1Y3Qgb3R4Ml9odyAqaHcgPSBcdTAwMjZwZnZmLVx1MDAzZWh3O1xuIFx0aW50IHBvb2xfaWQsIHNxX2lkeCwgZXJyO1xuIFxuLVx0aWYgKHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19JTlRGX0RPV04pXG4mIzQzO1x0aWYgKG90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19JTlRGX0RPV04pKVxuIFx0XHRyZXR1cm4gLUVQRVJNO1xuIFxuIFx0c3FfaWR4ID0gaHctXHUwMDNlbm9uX3Fvc19xdWV1ZXMgJiM0MzsgcWlkeDtcbkBAIC0yODgsNyAmIzQzOzI4OCw3IEBAIHZvaWQgb3R4Ml9xb3NfZGlzYWJsZV9zcShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBxaWR4KVxuIFx0c3FfaWR4ID0gaHctXHUwMDNlbm9uX3Fvc19xdWV1ZXMgJiM0MzsgcWlkeDtcbiBcbiBcdC8qIElmIHRoZSBET1dOIGZsYWcgaXMgc2V0IFNRcyBhcmUgYWxyZWFkeSBmcmVlZCAqL1xuLVx0aWYgKHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19JTlRGX0RPV04pXG4mIzQzO1x0aWYgKG90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19JTlRGX0RPV04pKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRzcSA9IFx1MDAyNnBmdmYtXHUwMDNlcXNldC5zcVtzcV9pZHhdO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuY1xuaW5kZXggMGY1ZDU2NDJkM2Y3YS4uOGE4YzAwODhmZDIwNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3JlcC5jXG5AQCAtOTMsOSAmIzQzOzkzLDkgQEAgc3RhdGljIGludCBydnVfcmVwX21jYW1fZmxvd19pbml0KHN0cnVjdCByZXBfZGV2ICpyZXApXG4gXHRyZXAtXHUwMDNlZmxvd19jZmctXHUwMDNlbWF4X2Zsb3dzID0gYWxsb2NhdGVkO1xuIFxuIFx0aWYgKGFsbG9jYXRlZCkge1xuLVx0XHRyZXAtXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX01DQU1fRU5UUklFU19BTExPQztcbi1cdFx0cmVwLVx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19OVFVQTEVfU1VQUE9SVDtcbi1cdFx0cmVwLVx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19UQ19GTE9XRVJfU1VQUE9SVDtcbiYjNDM7XHRcdHNldF9iaXQoT1RYMl9GTEFHX01DQU1fRU5UUklFU19BTExPQywgXHUwMDI2cmVwLVx1MDAzZWZsYWdzKTtcbiYjNDM7XHRcdHNldF9iaXQoT1RYMl9GTEFHX05UVVBMRV9TVVBQT1JULCBcdTAwMjZyZXAtXHUwMDNlZmxhZ3MpO1xuJiM0MztcdFx0c2V0X2JpdChPVFgyX0ZMQUdfVENfRkxPV0VSX1NVUFBPUlQsIFx1MDAyNnJlcC1cdTAwM2VmbGFncyk7XG4gXHR9XG4gXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZyZXAtXHUwMDNlZmxvd19jZmctXHUwMDNlZmxvd19saXN0KTtcbkBAIC0xMDksMTQgJiM0MzsxMDksMTQgQEAgc3RhdGljIGludCBydnVfcmVwX3NldHVwX3RjX2NiKGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLFxuIFx0c3RydWN0IHJlcF9kZXYgKnJlcCA9IGNiX3ByaXY7XG4gXHRzdHJ1Y3Qgb3R4Ml9uaWMgKnByaXYgPSByZXAtXHUwMDNlbWRldjtcbiBcbi1cdGlmICghKHJlcC1cdTAwM2VmbGFncyBcdTAwMjYgUlZVX1JFUF9WRl9JTklUSUFMSVpFRCkpXG4mIzQzO1x0aWYgKCF0ZXN0X2JpdChPVFgyX1JFUF9WRl9JTklUSUFMSVpFRCwgXHUwMDI2cmVwLVx1MDAzZWZsYWdzKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRpZiAoIShyZXAtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19UQ19GTE9XRVJfU1VQUE9SVCkpXG4mIzQzO1x0aWYgKCF0ZXN0X2JpdChPVFgyX0ZMQUdfVENfRkxPV0VSX1NVUFBPUlQsIFx1MDAyNnJlcC1cdTAwM2VmbGFncykpXG4gXHRcdHJ2dV9yZXBfbWNhbV9mbG93X2luaXQocmVwKTtcbiBcbiBcdHByaXYtXHUwMDNlbmV0ZGV2ID0gcmVwLVx1MDAzZW5ldGRldjtcbi1cdHByaXYtXHUwMDNlZmxhZ3MgPSByZXAtXHUwMDNlZmxhZ3M7XG4mIzQzO1x0b3R4Ml9zeW5jX2ZsYWdzX2Zyb21fcmVwKHByaXYsIFx1MDAyNnJlcC1cdTAwM2VmbGFncyk7XG4gXHRwcml2LVx1MDAzZXBjaWZ1bmMgPSByZXAtXHUwMDNlcGNpZnVuYztcbiBcdHByaXYtXHUwMDNlZmxvd19jZmcgPSByZXAtXHUwMDNlZmxvd19jZmc7XG4gXG5AQCAtMzAzLDkgJiM0MzszMDMsOSBAQCBzdGF0aWMgdm9pZCBydnVfcmVwX3N0YXRlX2V2dF9oYW5kbGVyKHN0cnVjdCBvdHgyX25pYyAqcHJpdixcbiBcdHJlcF9pZCA9IHJ2dV9yZXBfZ2V0X3JlcGlkKHByaXYsIGluZm8tXHUwMDNlcGNpZnVuYyk7XG4gXHRyZXAgPSBwcml2LVx1MDAzZXJlcHNbcmVwX2lkXTtcbiBcdGlmIChpbmZvLVx1MDAzZWV2dF9kYXRhLnZmX3N0YXRlKVxuLVx0XHRyZXAtXHUwMDNlZmxhZ3MgfD0gUlZVX1JFUF9WRl9JTklUSUFMSVpFRDtcbiYjNDM7XHRcdHNldF9iaXQoT1RYMl9SRVBfVkZfSU5JVElBTElaRUQsIFx1MDAyNnJlcC1cdTAwM2VmbGFncyk7XG4gXHRlbHNlXG4tXHRcdHJlcC1cdTAwM2VmbGFncyBcdTAwMjY9IH5SVlVfUkVQX1ZGX0lOSVRJQUxJWkVEO1xuJiM0MztcdFx0Y2xlYXJfYml0KE9UWDJfUkVQX1ZGX0lOSVRJQUxJWkVELCBcdTAwMjZyZXAtXHUwMDNlZmxhZ3MpO1xuIH1cbiBcbiBpbnQgcnZ1X2V2ZW50X3VwX25vdGlmeShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmLCBzdHJ1Y3QgcmVwX2V2ZW50ICppbmZvKVxuQEAgLTM4Miw3ICYjNDM7MzgyLDcgQEAgc3RhdGljIHZvaWQgcnZ1X3JlcF9nZXRfc3RhdHM2NChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIHtcbiBcdHN0cnVjdCByZXBfZGV2ICpyZXAgPSBuZXRkZXZfcHJpdihkZXYpO1xuIFxuLVx0aWYgKCEocmVwLVx1MDAzZWZsYWdzIFx1MDAyNiBSVlVfUkVQX1ZGX0lOSVRJQUxJWkVEKSlcbiYjNDM7XHRpZiAoIXRlc3RfYml0KE9UWDJfUkVQX1ZGX0lOSVRJQUxJWkVELCBcdTAwMjZyZXAtXHUwMDNlZmxhZ3MpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRzdGF0cy1cdTAwM2VyeF9wYWNrZXRzID0gcmVwLVx1MDAzZXN0YXRzLnJ4X2ZyYW1lcztcbkBAIC00NTMsNyAmIzQzOzQ1Myw3IEBAIHN0YXRpYyBpbnQgcnZ1X3JlcF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRzdHJ1Y3Qgb3R4Ml9uaWMgKnByaXYgPSByZXAtXHUwMDNlbWRldjtcbiBcdHN0cnVjdCByZXBfZXZlbnQgZXZ0ID0gezB9O1xuIFxuLVx0aWYgKCEocmVwLVx1MDAzZWZsYWdzIFx1MDAyNiBSVlVfUkVQX1ZGX0lOSVRJQUxJWkVEKSlcbiYjNDM7XHRpZiAoIXRlc3RfYml0KE9UWDJfUkVQX1ZGX0lOSVRJQUxJWkVELCBcdTAwMjZyZXAtXHUwMDNlZmxhZ3MpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdG5ldGlmX2NhcnJpZXJfb24oZGV2KTtcbkBAIC00NzIsNyAmIzQzOzQ3Miw3IEBAIHN0YXRpYyBpbnQgcnZ1X3JlcF9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRzdHJ1Y3Qgb3R4Ml9uaWMgKnByaXYgPSByZXAtXHUwMDNlbWRldjtcbiBcdHN0cnVjdCByZXBfZXZlbnQgZXZ0ID0gezB9O1xuIFxuLVx0aWYgKCEocmVwLVx1MDAzZWZsYWdzIFx1MDAyNiBSVlVfUkVQX1ZGX0lOSVRJQUxJWkVEKSlcbiYjNDM7XHRpZiAoIXRlc3RfYml0KE9UWDJfUkVQX1ZGX0lOSVRJQUxJWkVELCBcdTAwMjZyZXAtXHUwMDNlZmxhZ3MpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdG5ldGlmX2NhcnJpZXJfb2ZmKGRldik7XG5AQCAtNTQ3LDcgJiM0Mzs1NDcsNyBAQCBzdGF0aWMgaW50IHJ2dV9yZXBfbmFwaV9pbml0KHN0cnVjdCBvdHgyX25pYyAqcHJpdixcbiBcdFx0b3R4Ml93cml0ZTY0KHByaXYsIE5JWF9MRl9DSU5UWF9JTlQocWlkeCksIEJJVF9VTEwoMCkpO1xuIFx0XHRvdHgyX3dyaXRlNjQocHJpdiwgTklYX0xGX0NJTlRYX0VOQV9XMVMocWlkeCksIEJJVF9VTEwoMCkpO1xuIFx0fVxuLVx0cHJpdi1cdTAwM2VmbGFncyBcdTAwMjY9IH5PVFgyX0ZMQUdfSU5URl9ET1dOO1xuJiM0MztcdG90eDJfY2xlYXJfZmxhZyhwcml2LCBPVFgyX0ZMQUdfSU5URl9ET1dOKTtcbiBcdHJldHVybiAwO1xuIFxuIGVycl9mcmVlX2NpbnRzOlxuQEAgLTYzMiw3ICYjNDM7NjMyLDcgQEAgdm9pZCBydnVfcmVwX2Rlc3Ryb3koc3RydWN0IG90eDJfbmljICpwcml2KVxuIFx0aW50IHJlcF9pZDtcbiBcbiBcdHJ2dV9lc3dpdGNoX2NvbmZpZyhwcml2LCBmYWxzZSk7XG4tXHRwcml2LVx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19JTlRGX0RPV047XG4mIzQzO1x0b3R4Ml9zZXRfZmxhZyhwcml2LCBPVFgyX0ZMQUdfSU5URl9ET1dOKTtcbiBcdHJ2dV9yZXBfZnJlZV9jcV9yc3JjKHByaXYpO1xuIFx0Zm9yIChyZXBfaWQgPSAwOyByZXBfaWQgXHUwMDNjIHByaXYtXHUwMDNlcmVwX2NudDsgcmVwX2lkJiM0MzsmIzQzOykge1xuIFx0XHRyZXAgPSBwcml2LVx1MDAzZXJlcHNbcmVwX2lkXTtcbkBAIC04MDEsOCAmIzQzOzgwMSw4IEBAIHN0YXRpYyBpbnQgcnZ1X3JlcF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuIFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIHByaXYpO1xuIFx0cHJpdi1cdTAwM2VwZGV2ID0gcGRldjtcbiBcdHByaXYtXHUwMDNlZGV2ID0gZGV2O1xuLVx0cHJpdi1cdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfSU5URl9ET1dOO1xuLVx0cHJpdi1cdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfUkVQX01PREVfRU5BQkxFRDtcbiYjNDM7XHRvdHgyX3NldF9mbGFnKHByaXYsIE9UWDJfRkxBR19JTlRGX0RPV04pO1xuJiM0MztcdG90eDJfc2V0X2ZsYWcocHJpdiwgT1RYMl9GTEFHX1JFUF9NT0RFX0VOQUJMRUQpO1xuIFxuIFx0aHcgPSBcdTAwMjZwcml2LVx1MDAzZWh3O1xuIFx0aHctXHUwMDNlcGRldiA9IHBkZXY7XG5AQCAtODQ1LDcgJiM0Mzs4NDUsNyBAQCBzdGF0aWMgdm9pZCBydnVfcmVwX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdHN0cnVjdCBvdHgyX25pYyAqcHJpdiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbiBcbiBcdG90eDJfdW5yZWdpc3Rlcl9kbChwcml2KTtcbi1cdGlmICghKHByaXYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19JTlRGX0RPV04pKVxuJiM0MztcdGlmICghb3R4Ml90ZXN0X2ZsYWcocHJpdiwgT1RYMl9GTEFHX0lOVEZfRE9XTikpXG4gXHRcdHJ2dV9yZXBfZGVzdHJveShwcml2KTtcbiBcdG90eDJfZGV0YWNoX3Jlc291cmNlcyhcdTAwMjZwcml2LVx1MDAzZW1ib3gpO1xuIFx0aWYgKHByaXYtXHUwMDNlaHcubG10X2luZm8pXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3JlcC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3JlcC5oXG5pbmRleCA1YmM5ZTJjN2Q4MDBiLi40NTcwN2M0MzRkODlmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3JlcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmhcbkBAIC0zNyw4ICYjNDM7MzcsNyBAQCBzdHJ1Y3QgcmVwX2RldiB7XG4gXHRzdHJ1Y3QgZGVsYXllZF93b3JrIHN0YXRzX3dyaztcbiBcdHN0cnVjdCBkZXZsaW5rX3BvcnQgZGxfcG9ydDtcbiBcdHN0cnVjdCBvdHgyX2Zsb3dfY29uZmlnXHQqZmxvd19jZmc7XG4tI2RlZmluZSBSVlVfUkVQX1ZGX0lOSVRJQUxJWkVEXHRcdEJJVF9VTEwoMClcbi1cdHU2NCBmbGFncztcbiYjNDM7XHR1bnNpZ25lZCBsb25nXHRcdGZsYWdzO1xuIFx0dTE2IHJlcF9pZDtcbiBcdHUxNiBwY2lmdW5jO1xuIFx0dTggbWFjW0VUSF9BTEVOXTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjo0NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgZXhjbHVzaXZlbHkgbW9kaWZpZXMgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIFJWVS9OSUMgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi8pLCBhZGRpbmcgbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIHN1cHBvcnQgYW5kIHJlZmFjdG9yaW5nIGZsYWcgYml0bWFzayBvcGVyYXRpb25zLiBUaGlzIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbCBNYXJ2ZWxsIE9jdGVvblRYMiAvIENOMTBLIGhhcmR3YXJlL0FTSUNzIGFuZCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBzeXprYWxsZXIgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5MmMxMzM0Y2Q5ZTUwNDhlM2M2NTFmMTczNWFkMDIwMThhYmMwZDg0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgMTEgMTI6NDY6NTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmMKaW5kZXggZDgwZDJjMDBiZDg0My4uMmQxYWI4Yzc2MWM0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguYwpAQCAtMzMxLDggJiM0MzszMzEsMTIgQEAgc3RhdGljIGJvb2wgaXNfdmFsaWRfdHhzY2hxKHN0cnVjdCBydnUgKnJ2dSwgaW50IGJsa2FkZHIsCiAJCQlyZXR1cm4gdHJ1ZTsKIAl9CiAKLQlpZiAobWFwX2Z1bmMgIT0gcGNpZnVuYykKJiM0MzsJaWYgKG1hcF9mdW5jICE9IHBjaWZ1bmMpIHsKJiM0MzsJCWRldl9lcnJfcmF0ZWxpbWl0ZWQocnZ1LSZndDtkZXYsCiYjNDM7CQkJCSAgICAmIzM0O3BjaWZ1bmMgJXggbWFwIHBjaWZ1bmMgJXggbm90IGVxdWFsLCBsdmw9JXUgc2NocT0ldVxuJiMzNDssCiYjNDM7CQkJCSAgICBwY2lmdW5jLCBtYXBfZnVuYywgbHZsLCBzY2hxKTsKIAkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiAKIAlyZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9jbjEwa19pcHNlYy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL2NuMTBrX2lwc2VjLmMKaW5kZXggNzc1NDNkNDcyMzQ1ZS4uNTBlYzQ1NDJjNDE4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL2NuMTBrX2lwc2VjLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL2NuMTBrX2lwc2VjLmMKQEAgLTMzNCw3ICYjNDM7MzM0LDcgQEAgc3RhdGljIGludCBjbjEwa19vdXRiX2NwdF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiAJCQkJCQlDTjEwS19DUFRfTEZfTlFYKDApKTsKIAogCS8qIFNldCBpcHNlYyBvZmZsb2FkIGVuYWJsZWQgZm9yIHRoaXMgZGV2aWNlICovCi0JcGYtJmd0O2ZsYWdzIHw9IE9UWDJfRkxBR19JUFNFQ19PRkZMT0FEX0VOQUJMRUQ7CiYjNDM7CW90eDJfc2V0X2ZsYWcocGYsIE9UWDJfRkxBR19JUFNFQ19PRkZMT0FEX0VOQUJMRUQpOwogCiAJY24xMGtfY3B0X2RldmljZV9zZXRfYXZhaWxhYmxlKHBmKTsKIAlyZXR1cm4gMDsKQEAgLTM1Niw3ICYjNDM7MzU2LDcgQEAgc3RhdGljIGludCBjbjEwa19vdXRiX2NwdF9jbGVhbihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmKQogCX0KIAogCS8qIFNldCBpcHNlYyBvZmZsb2FkIGRpc2FibGVkIGZvciB0aGlzIGRldmljZSAqLwotCXBmLSZndDtmbGFncyAmYW1wOz0gfk9UWDJfRkxBR19JUFNFQ19PRkZMT0FEX0VOQUJMRUQ7CiYjNDM7CW90eDJfY2xlYXJfZmxhZyhwZiwgT1RYMl9GTEFHX0lQU0VDX09GRkxPQURfRU5BQkxFRCk7CiAKIAkvKiBEaXNhYmxlIENQVExGIEluc3RydWN0aW9uIFF1ZXVlIChJUSkgKi8KIAljbjEwa19vdXRiX2NwdGxmX2lxX2Rpc2FibGUocGYpOwpAQCAtODIwLDcgJiM0Mzs4MjAsNyBAQCB2b2lkIGNuMTBrX2lwc2VjX2NsZWFuKHN0cnVjdCBvdHgyX25pYyAqcGYpCiAJaWYgKCFpc19kZXZfc3VwcG9ydF9pcHNlY19vZmZsb2FkKHBmLSZndDtwZGV2KSkKIAkJcmV0dXJuOwogCi0JaWYgKCEocGYtJmd0O2ZsYWdzICZhbXA7IE9UWDJfRkxBR19JUFNFQ19PRkZMT0FEX0VOQUJMRUQpKQomIzQzOwlpZiAoIW90eDJfdGVzdF9mbGFnKHBmLCBPVFgyX0ZMQUdfSVBTRUNfT0ZGTE9BRF9FTkFCTEVEKSkKIAkJcmV0dXJuOwogCiAJaWYgKHBmLSZndDtpcHNlYy5zYV93b3JrcSkgewpAQCAtOTQ1LDcgJiM0Mzs5NDUsNyBAQCBib29sIGNuMTBrX2lwc2VjX3RyYW5zbWl0KHN0cnVjdCBvdHgyX25pYyAqcGYsIHN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cSwKIAl1MTYgZGxlbjsKIAogCS8qIENoZWNrIGZvciBJUFNFQyBvZmZsb2FkIGVuYWJsZWQgKi8KLQlpZiAoIShwZi0mZ3Q7ZmxhZ3MgJmFtcDsgT1RYMl9GTEFHX0lQU0VDX09GRkxPQURfRU5BQkxFRCkpCiYjNDM7CWlmICghb3R4Ml90ZXN0X2ZsYWcocGYsIE9UWDJfRkxBR19JUFNFQ19PRkZMT0FEX0VOQUJMRUQpKQogCQlnb3RvIGRyb3A7CiAKIAlzcCA9IHNrYl9zZWNfcGF0aChza2IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uYwppbmRleCAxNzU5OTIxODhjMThhLi41YmFkMjQ2NmRhMGM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uYwpAQCAtMjIwLDEwICYjNDM7MjIwLDEwIEBAIGludCBvdHgyX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB2b2lkICpwKQogCQlldGhfaHdfYWRkcl9zZXQobmV0ZGV2LCBhZGRyLSZndDtzYV9kYXRhKTsKIAkJLyogdXBkYXRlIGRtYWMgZmllbGQgaW4gdmxhbiBvZmZsb2FkIHJ1bGUgKi8KIAkJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSAmYW1wOyZhbXA7Ci0JCSAgICBwZnZmLSZndDtmbGFncyAmYW1wOyBPVFgyX0ZMQUdfUlhfVkxBTl9TVVBQT1JUKQomIzQzOwkJICAgIG90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19SWF9WTEFOX1NVUFBPUlQpKQogCQkJb3R4Ml9pbnN0YWxsX3J4dmxhbl9vZmZsb2FkX2Zsb3cocGZ2Zik7CiAJCS8qIHVwZGF0ZSBkbWFjIGFkZHJlc3MgaW4gbnR1cGxlIGFuZCBETUFDIGZpbHRlciBsaXN0ICovCi0JCWlmIChwZnZmLSZndDtmbGFncyAmYW1wOyBPVFgyX0ZMQUdfRE1BQ0ZMVFJfU1VQUE9SVCkKJiM0MzsJCWlmIChvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfRE1BQ0ZMVFJfU1VQUE9SVCkpCiAJCQlvdHgyX2RtYWNmbHRfdXBkYXRlX3BmbWFjX2Zsb3cocGZ2Zik7CiAJfSBlbHNlIHsKIAkJcmV0dXJuIC1FUEVSTTsKQEAgLTI3NSw4ICYjNDM7Mjc1LDggQEAgaW50IG90eDJfY29uZmlnX3BhdXNlX2ZybShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiAJCWdvdG8gdW5sb2NrOwogCX0KIAotCXJlcS0mZ3Q7cnhfcGF1c2UgPSAhIShwZnZmLSZndDtmbGFncyAmYW1wOyBPVFgyX0ZMQUdfUlhfUEFVU0VfRU5BQkxFRCk7Ci0JcmVxLSZndDt0eF9wYXVzZSA9ICEhKHBmdmYtJmd0O2ZsYWdzICZhbXA7IE9UWDJfRkxBR19UWF9QQVVTRV9FTkFCTEVEKTsKJiM0MzsJcmVxLSZndDtyeF9wYXVzZSA9IG90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19SWF9QQVVTRV9FTkFCTEVEKTsKJiM0MzsJcmVxLSZndDt0eF9wYXVzZSA9IG90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19UWF9QQVVTRV9FTkFCTEVEKTsKIAlyZXEtJmd0O3NldCA9IDE7CiAKIAllcnIgPSBvdHgyX3N5bmNfbWJveF9tc2coJmFtcDtwZnZmLSZndDttYm94KTsKQEAgLTYxNSw2ICYjNDM7NjE1LDE0MiBAQCB2b2lkIG90eDJfZ2V0X21hY19mcm9tX2FmKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB9CiBFWFBPUlRfU1lNQk9MKG90eDJfZ2V0X21hY19mcm9tX2FmKTsKIAomIzQzO3N0YXRpYyBpbnQKJiM0MztvdHgyX25peF90bXFfcmVnX3dyaXRlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGNudCwKJiM0MzsJCSAgICAgICB1NjQgcmVnX2FkZHJbTUFYX1JFR1NfUEVSX01CT1hfTVNHXSwKJiM0MzsJCSAgICAgICB1NjQgcmVnX3ZhbFtNQVhfUkVHU19QRVJfTUJPWF9NU0ddKQomIzQzO3sKJiM0MzsJc3RydWN0IG1ib3ggKm1ib3ggPSAmYW1wO3BmdmYtJmd0O21ib3g7CiYjNDM7CXN0cnVjdCBuaXhfdHhzY2hxX2NvbmZpZyAqcmVxOwomIzQzOwlpbnQgaSwgZXJyOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7bWJveC0mZ3Q7bG9jayk7CiYjNDM7CXJlcSA9IG90eDJfbWJveF9hbGxvY19tc2dfbml4X3R4c2NocV9jZmcobWJveCk7CiYjNDM7CWlmICghcmVxKSB7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDttYm94LSZndDtsb2NrKTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJlcS0mZ3Q7bHZsID0gTklYX1RYU0NIX0xWTF9NRFE7CiYjNDM7CXJlcS0mZ3Q7bnVtX3JlZ3MgPSBjbnQ7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBjbnQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlyZXEtJmd0O3JlZ1tpXSA9IHJlZ19hZGRyW2ldOwomIzQzOwkJcmVxLSZndDtyZWd2YWxbaV0gPSByZWdfdmFsW2ldOwomIzQzOwl9CiYjNDM7CiYjNDM7CWVyciA9IG90eDJfc3luY19tYm94X21zZyhtYm94KTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7bWJveC0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO2ludCBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmKQomIzQzO3sKJiM0MzsJdTY0IHJlZ19hZGRyW01BWF9SRUdTX1BFUl9NQk9YX01TR107CiYjNDM7CXU2NCByZWdfdmFsW01BWF9SRUdTX1BFUl9NQk9YX01TR107CiYjNDM7CWludCBlcnIsIHNtcSwgaSwgY250ID0gMDsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHBmdmYtJmd0O2h3LnR4c2NocV9jbnRbTklYX1RYU0NIX0xWTF9TTVFdOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc21xID0gcGZ2Zi0mZ3Q7aHcudHhzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9TTVFdW2ldOwomIzQzOwomIzQzOwkJcmVnX2FkZHJbY250XSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpOwomIzQzOwkJcmVnX3ZhbFtjbnRdID0gMDsKJiM0MzsJCWNudCYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CQlyZWdfYWRkcltjbnRdID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7CiYjNDM7CQlyZWdfdmFsW2NudF0gPSAwOwomIzQzOwkJY250JiM0MzsmIzQzOzsKJiM0MzsKJiM0MzsJCWlmIChjbnQgJmx0OyBNQVhfUkVHU19QRVJfTUJPWF9NU0cgLSAxKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJZXJyID0gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCBjbnQsCiYjNDM7CQkJCQkgICAgIHJlZ19hZGRyLCByZWdfdmFsKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJZ290byBmYWlsOwomIzQzOwkJY250ID0gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoY250KSB7CiYjNDM7CQllcnIgPSBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIGNudCwKJiM0MzsJCQkJCSAgICAgcmVnX2FkZHIsIHJlZ192YWwpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlnb3RvIGZhaWw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7ZmFpbDoKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmLAomIzQzOwkJCQkgaW50IHR4cSwgdTY0IG1pbnJhdGUsIHU2NCBtYXhyYXRlKQomIzQzO3sKJiM0MzsJc3RydWN0IG1ib3ggKm1ib3ggPSAmYW1wO3BmdmYtJmd0O21ib3g7CiYjNDM7CXN0cnVjdCBuaXhfdHhzY2hxX2NvbmZpZyAqcmVxOwomIzQzOwlpbnQgZXJyLCBzbXEsIG4gPSAwOwomIzQzOwl1NjQgcmVnX2FkZHJbMl07CiYjNDM7CXU2NCByZWdfdmFsWzJdOwomIzQzOwl1NjQgcmF0ZTsKJiM0MzsKJiM0MzsJaWYgKCFtYXhyYXRlICZhbXA7JmFtcDsgIW1pbnJhdGUpIHsKJiM0MzsJCXNtcSA9IG90eDJfZ2V0X3NtcV9pZHgocGZ2ZiwgdHhxKTsKJiM0MzsJCXJlZ19hZGRyWzBdID0gTklYX0FGX01EUVhfUElSKHNtcSk7CiYjNDM7CQlyZWdfdmFsWzBdID0gMDsKJiM0MzsJCXJlZ19hZGRyWzFdID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7CiYjNDM7CQlyZWdfdmFsWzFdID0gMDsKJiM0MzsJCXJldHVybiBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIDIsIHJlZ19hZGRyLCByZWdfdmFsKTsKJiM0MzsJfQomIzQzOwomIzQzOwlzbXEgPSBvdHgyX2dldF9zbXFfaWR4KHBmdmYsIHR4cSk7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDttYm94LSZndDtsb2NrKTsKJiM0MzsJcmVxID0gb3R4Ml9tYm94X2FsbG9jX21zZ19uaXhfdHhzY2hxX2NmZyhtYm94KTsKJiM0MzsJaWYgKCFyZXEpIHsKJiM0MzsJCW11dGV4X3VubG9jaygmYW1wO21ib3gtJmd0O2xvY2spOwomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmVxLSZndDtsdmwgPSBOSVhfVFhTQ0hfTFZMX01EUTsKJiM0MzsKJiM0MzsJLyogTVFQUklPIGV4cG9zZXMgb25seSBtaW4vbWF4IHJhdGUsIG5vdCBidXJzdC4gIFBhc3MgYnVyc3QgMCBzbwomIzQzOwkgKiBvdHgyX2dldF9lZ3Jlc3NfYnVyc3RfY2ZnKCkgcHJvZ3JhbW1lcyB0aGUgbGFyZ2VzdCBidXJzdCB0aGUgTklYCiYjNDM7CSAqIGVuY29kaW5nIHN1cHBvcnRzIChDTjEwS19NQVhfQlVSU1RfU0laRSBvbiBDTjEwSykuICBUaGlzIGRpZmZlcnMKJiM0MzsJICogZnJvbSB0aGUgNjU1MzYgYnl0ZSBkZWZhdWx0IHVzZWQgaW4gdGhlIEhUQiBwYXRoLCB3aGljaCBpcyBhCiYjNDM7CSAqIGtlcm5lbC1zaWRlIGRlZmF1bHQgd2hlbiBubyBleHBsaWNpdCBidXJzdCBpcyBjb25maWd1cmVkLCBub3QgYQomIzQzOwkgKiBoYXJkd2FyZSBjYXAuCiYjNDM7CSAqCiYjNDM7CSAqIG1xcHJpbyBzZXR1cCByZXN0YXJ0cyB0aGUgbmV0ZGV2IChvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldiksCiYjNDM7CSAqIHdoaWNoIHJlc2V0cyBNRFEgc2hhcGVycyB0byB6ZXJvLiAgUHJvZ3JhbSBib3RoIFBJUiBhbmQgQ0lSIG9uCiYjNDM7CSAqIGV2ZXJ5IHVwZGF0ZSBzbyBvbWl0dGVkIHJhdGVzIGFyZSBhcHBsaWVkIGV4cGxpY2l0bHkgcmF0aGVyIHRoYW4KJiM0MzsJICogcmVseWluZyBvbiBzdGFsZSBoYXJkd2FyZSBzdGF0ZS4KJiM0MzsJICovCiYjNDM7CXJlcS0mZ3Q7cmVnW25dID0gTklYX0FGX01EUVhfUElSKHNtcSk7CiYjNDM7CWlmIChtYXhyYXRlKSB7CiYjNDM7CQlyYXRlID0gb3R4Ml9jb252ZXJ0X3JhdGUobWF4cmF0ZSk7CiYjNDM7CQlyZXEtJmd0O3JlZ3ZhbFtuXSA9IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCByYXRlLCAwKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJlcS0mZ3Q7cmVndmFsW25dID0gMDsKJiM0MzsJfQomIzQzOwluJiM0MzsmIzQzOzsKJiM0MzsKJiM0MzsJLyogQ0lSJiM0MztQSVIgc3VwcG9ydCBpcyByZXF1aXJlZCBhbmQgY2hlY2tlZCBhdCBtcXByaW8gc2V0dXAuICovCiYjNDM7CXJlcS0mZ3Q7cmVnW25dID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7CiYjNDM7CWlmIChtaW5yYXRlKSB7CiYjNDM7CQlyYXRlID0gb3R4Ml9jb252ZXJ0X3JhdGUobWlucmF0ZSk7CiYjNDM7CQlyZXEtJmd0O3JlZ3ZhbFtuXSA9IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCByYXRlLCAwKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJlcS0mZ3Q7cmVndmFsW25dID0gMDsKJiM0MzsJfQomIzQzOwluJiM0MzsmIzQzOzsKJiM0MzsJcmVxLSZndDtudW1fcmVncyA9IG47CiYjNDM7CiYjNDM7CWVyciA9IG90eDJfc3luY19tYm94X21zZyhtYm94KTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7bWJveC0mZ3Q7bG9jayk7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwogaW50IG90eDJfdHhzY2hxX2NvbmZpZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBsdmwsIGludCBwcmlvLCBib29sIHR4c2NocV9mb3JfcGZjKQogewogCXUxNiAoKnNjaHFfbGlzdClbTUFYX1RYU0NIUV9QRVJfRlVOQ107CkBAIC02NTEsNyAmIzQzOzc4NywxMSBAQCBpbnQgb3R4Ml90eHNjaHFfY29uZmlnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGx2bCwgaW50IHByaW8sIGJvb2wgdHhzY2hxX2ZvcgogCQkJCQkJKHU2NClody0mZ3Q7c21xX2xpbmtfdHlwZSk7CiAJCXJlcS0mZ3Q7bnVtX3JlZ3MmIzQzOyYjNDM7OwogCQkvKiBNRFEgY29uZmlnICovCi0JCXBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bcHJpb107CiYjNDM7CQlpZiAocGZ2Zi0mZ3Q7bXFwcmlvLnJhdGVfbGltaXQpCiYjNDM7CQkJcGFyZW50ID0gc2NocV9saXN0W05JWF9UWFNDSF9MVkxfVEw0XVswXTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdW3ByaW9dOwomIzQzOwogCQlyZXEtJmd0O3JlZ1sxXSA9IE5JWF9BRl9NRFFYX1BBUkVOVChzY2hxKTsKIAkJcmVxLSZndDtyZWd2YWxbMV0gPSBwYXJlbnQgJmx0OyZsdDsgMTY7CiAJCXJlcS0mZ3Q7bnVtX3JlZ3MmIzQzOyYjNDM7OwpAQCAtNzc5LDYgJiM0Mzs5MTksOSBAQCBpbnQgb3R4Ml90eHNjaF9hbGxvYyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiAJCXJlcS0mZ3Q7c2NocVtOSVhfVFhTQ0hfTFZMX1RMNF0gPSBjaGFuX2NudDsKIAl9CiAKJiM0MzsJaWYgKHBmdmYtJmd0O21xcHJpby5yYXRlX2xpbWl0KQomIzQzOwkJcmVxLSZndDtzY2hxW05JWF9UWFNDSF9MVkxfU01RXSA9IHBmdmYtJmd0O2h3Lm5vbl9xb3NfcXVldWVzOwomIzQzOwogCXJjID0gb3R4Ml9zeW5jX21ib3hfbXNnKCZhbXA7cGZ2Zi0mZ3Q7bWJveCk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CkBAIC04NDQsNiAmIzQzOzk4Nyw3IEBAIHZvaWQgb3R4Ml90eHNjaHFfc3RvcChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiAKIAkvKiBDbGVhciB0aGUgdHhzY2hxIGxpc3QgKi8KIAlmb3IgKGx2bCA9IDA7IGx2bCAmbHQ7IE5JWF9UWFNDSF9MVkxfQ05UOyBsdmwmIzQzOyYjNDM7KSB7CiYjNDM7CQlwZnZmLSZndDtody50eHNjaHFfY250W2x2bF0gPSAwOwogCQlmb3IgKHNjaHEgPSAwOyBzY2hxICZsdDsgTUFYX1RYU0NIUV9QRVJfRlVOQzsgc2NocSYjNDM7JiM0MzspCiAJCQlwZnZmLSZndDtody50eHNjaHFfbGlzdFtsdmxdW3NjaHFdID0gMDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oCmluZGV4IGVlY2VlNjEyYjdiMmMuLjZlNzEzMmYyN2I2MjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oCkBAIC0xNyw2ICYjNDM7MTcsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3NvYy9tYXJ2ZWxsL3NpbGljb25zLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc29jL21hcnZlbGwvb2N0ZW9udHgyL2FzbS5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9tYWNzZWMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dWFwaS9saW51eC9wa3Rfc2NoZWQuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvcGt0X2Nscy5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9kZXZsaW5rLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdGltZTY0LmgmZ3Q7CkBAIC00ODMsNiAmIzQzOzQ4NCwyMyBAQCBzdHJ1Y3QgcGZfaXJxX2RhdGEgewogCWludCBtZGV2czsKIH07CiAKJiM0MztzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwIHsKJiM0MzsJdTY0IG1pbl9yYXRlW1RDX1FPUFRfTUFYX1FVRVVFXTsKJiM0MzsJdTY0IG1heF9yYXRlW1RDX1FPUFRfTUFYX1FVRVVFXTsKJiM0MzsJX191OCBudW1fdGM7CiYjNDM7CV9fdTE2IGNvdW50W1RDX1FPUFRfTUFYX1FVRVVFXTsKJiM0MzsJX191MTYgb2Zmc2V0W1RDX1FPUFRfTUFYX1FVRVVFXTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBvdHgyX21xcHJpbyB7CiYjNDM7CXUzMglmbGFnczsKJiM0MzsJdTY0CSptaW5fcmF0ZTsKJiM0MzsJdTY0CSptYXhfcmF0ZTsKJiM0MzsJYm9vbAlyYXRlX2xpbWl0OwomIzQzOwlib29sCXJlcGxhY2Vfc2V0dXBfZG9uZTsKJiM0MzsJYm9vbAlyZXBsYWNlX2dyYWZ0X2RvbmU7CiYjNDM7fTsKJiM0MzsKIHN0cnVjdCBvdHgyX25pYyB7CiAJdm9pZCBfX2lvbWVtCQkqcmVnX2Jhc2U7CiAJc3RydWN0IG5ldF9kZXZpY2UJKm5ldGRldjsKQEAgLTQ5MSwzMCAmIzQzOzUwOSwzNSBAQCBzdHJ1Y3Qgb3R4Ml9uaWMgewogCXUxNgkJCXR4X21heF9wa3RsZW47CiAJdTE2CQkJcmJzaXplOyAvKiBSZWNlaXZlIGJ1ZmZlciBzaXplICovCiAKLSNkZWZpbmUgT1RYMl9GTEFHX1JYX1RTVEFNUF9FTkFCTEVECQlCSVRfVUxMKDApCi0jZGVmaW5lIE9UWDJfRkxBR19UWF9UU1RBTVBfRU5BQkxFRAkJQklUX1VMTCgxKQotI2RlZmluZSBPVFgyX0ZMQUdfSU5URl9ET1dOCQkJQklUX1VMTCgyKQotI2RlZmluZSBPVFgyX0ZMQUdfTUNBTV9FTlRSSUVTX0FMTE9DCQlCSVRfVUxMKDMpCi0jZGVmaW5lIE9UWDJfRkxBR19OVFVQTEVfU1VQUE9SVAkJQklUX1VMTCg0KQotI2RlZmluZSBPVFgyX0ZMQUdfVUNBU1RfRkxUUl9TVVBQT1JUCQlCSVRfVUxMKDUpCi0jZGVmaW5lIE9UWDJfRkxBR19SWF9WTEFOX1NVUFBPUlQJCUJJVF9VTEwoNikKLSNkZWZpbmUgT1RYMl9GTEFHX1ZGX1ZMQU5fU1VQUE9SVAkJQklUX1VMTCg3KQotI2RlZmluZSBPVFgyX0ZMQUdfUEZfU0hVVERPV04JCQlCSVRfVUxMKDgpCi0jZGVmaW5lIE9UWDJfRkxBR19SWF9QQVVTRV9FTkFCTEVECQlCSVRfVUxMKDkpCi0jZGVmaW5lIE9UWDJfRkxBR19UWF9QQVVTRV9FTkFCTEVECQlCSVRfVUxMKDEwKQotI2RlZmluZSBPVFgyX0ZMQUdfVENfRkxPV0VSX1NVUFBPUlQJCUJJVF9VTEwoMTEpCi0jZGVmaW5lIE9UWDJfRkxBR19UQ19NQVRDSEFMTF9FR1JFU1NfRU5BQkxFRAlCSVRfVUxMKDEyKQotI2RlZmluZSBPVFgyX0ZMQUdfVENfTUFUQ0hBTExfSU5HUkVTU19FTkFCTEVECUJJVF9VTEwoMTMpCi0jZGVmaW5lIE9UWDJfRkxBR19ETUFDRkxUUl9TVVBQT1JUCQlCSVRfVUxMKDE0KQotI2RlZmluZSBPVFgyX0ZMQUdfUFRQX09ORVNURVBfU1lOQwkJQklUX1VMTCgxNSkKLSNkZWZpbmUgT1RYMl9GTEFHX0FEUFRWX0lOVF9DT0FMX0VOQUJMRUQgQklUX1VMTCgxNikKLSNkZWZpbmUgT1RYMl9GTEFHX1RDX01BUktfRU5BQkxFRAkJQklUX1VMTCgxNykKLSNkZWZpbmUgT1RYMl9GTEFHX1JFUF9NT0RFX0VOQUJMRUQJCSBCSVRfVUxMKDE4KQotI2RlZmluZSBPVFgyX0ZMQUdfUE9SVF9VUAkJCUJJVF9VTEwoMTkpCi0jZGVmaW5lIE9UWDJfRkxBR19JUFNFQ19PRkZMT0FEX0VOQUJMRUQJCUJJVF9VTEwoMjApCi0JdTY0CQkJZmxhZ3M7CiYjNDM7I2RlZmluZSBPVFgyX0ZMQUdfUlhfVFNUQU1QX0VOQUJMRUQJCTAKJiM0MzsjZGVmaW5lIE9UWDJfRkxBR19UWF9UU1RBTVBfRU5BQkxFRAkJMQomIzQzOyNkZWZpbmUgT1RYMl9GTEFHX0lOVEZfRE9XTgkJCTIKJiM0MzsjZGVmaW5lIE9UWDJfRkxBR19NQ0FNX0VOVFJJRVNfQUxMT0MJCTMKJiM0MzsjZGVmaW5lIE9UWDJfRkxBR19OVFVQTEVfU1VQUE9SVAkJNAomIzQzOyNkZWZpbmUgT1RYMl9GTEFHX1VDQVNUX0ZMVFJfU1VQUE9SVAkJNQomIzQzOyNkZWZpbmUgT1RYMl9GTEFHX1JYX1ZMQU5fU1VQUE9SVAkJNgomIzQzOyNkZWZpbmUgT1RYMl9GTEFHX1ZGX1ZMQU5fU1VQUE9SVAkJNwomIzQzOyNkZWZpbmUgT1RYMl9GTEFHX1BGX1NIVVRET1dOCQkJOAomIzQzOyNkZWZpbmUgT1RYMl9GTEFHX1JYX1BBVVNFX0VOQUJMRUQJCTkKJiM0MzsjZGVmaW5lIE9UWDJfRkxBR19UWF9QQVVTRV9FTkFCTEVECQkxMAomIzQzOyNkZWZpbmUgT1RYMl9GTEFHX1RDX0ZMT1dFUl9TVVBQT1JUCQkxMQomIzQzOyNkZWZpbmUgT1RYMl9GTEFHX1RDX01BVENIQUxMX0VHUkVTU19FTkFCTEVECTEyCiYjNDM7I2RlZmluZSBPVFgyX0ZMQUdfVENfTUFUQ0hBTExfSU5HUkVTU19FTkFCTEVECTEzCiYjNDM7I2RlZmluZSBPVFgyX0ZMQUdfRE1BQ0ZMVFJfU1VQUE9SVAkJMTQKJiM0MzsjZGVmaW5lIE9UWDJfRkxBR19QVFBfT05FU1RFUF9TWU5DCQkxNQomIzQzOyNkZWZpbmUgT1RYMl9GTEFHX0FEUFRWX0lOVF9DT0FMX0VOQUJMRUQJMTYKJiM0MzsjZGVmaW5lIE9UWDJfRkxBR19UQ19NQVJLX0VOQUJMRUQJCTE3CiYjNDM7I2RlZmluZSBPVFgyX0ZMQUdfUkVQX01PREVfRU5BQkxFRAkJMTgKJiM0MzsjZGVmaW5lIE9UWDJfRkxBR19QT1JUX1VQCQkJMTkKJiM0MzsjZGVmaW5lIE9UWDJfRkxBR19JUFNFQ19PRkZMT0FEX0VOQUJMRUQJCTIwCiYjNDM7I2RlZmluZSBPVFgyX1JFUF9WRl9JTklUSUFMSVpFRAkJCTIxCiYjNDM7CXVuc2lnbmVkIGxvbmcJCWZsYWdzOwogCXU2NAkJCSpjcV9vcF9hZGRyOwogCiYjNDM7CXN0cnVjdCBvdHgyX21xcHJpbwltcXByaW87CiYjNDM7CXN0cnVjdCBtcV9vZmZsb2FkX3NuYXAJKmN1cl9tcV9zbmFwOwomIzQzOwlzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwCSpvbGRfbXFfc25hcDsKJiM0MzsKIAlzdHJ1Y3QgYnBmX3Byb2cJCSp4ZHBfcHJvZzsKIAlzdHJ1Y3Qgb3R4Ml9xc2V0CXFzZXQ7CiAJc3RydWN0IG90eDJfaHcJCWh3OwpAQCAtNTk0LDYgJiM0Mzs2MTcsMzQgQEAgc3RydWN0IG90eDJfbmljIHsKIAl1bnNpZ25lZCBsb25nCQkqYWZfeGRwX3pjX3FpZHg7CiB9OwogCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG90eDJfc2V0X2ZsYWcoc3RydWN0IG90eDJfbmljICpuaWMsIHVuc2lnbmVkIGludCBmbGFnKQomIzQzO3sKJiM0MzsJc2V0X2JpdChmbGFnLCAmYW1wO25pYy0mZ3Q7ZmxhZ3MpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgb3R4Ml9jbGVhcl9mbGFnKHN0cnVjdCBvdHgyX25pYyAqbmljLCB1bnNpZ25lZCBpbnQgZmxhZykKJiM0Mzt7CiYjNDM7CWNsZWFyX2JpdChmbGFnLCAmYW1wO25pYy0mZ3Q7ZmxhZ3MpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgb3R4Ml90ZXN0X2ZsYWcoc3RydWN0IG90eDJfbmljICpuaWMsIHVuc2lnbmVkIGludCBmbGFnKQomIzQzO3sKJiM0MzsJcmV0dXJuIHRlc3RfYml0KGZsYWcsICZhbXA7bmljLSZndDtmbGFncyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBvdHgyX3N5bmNfZmxhZ3NfZnJvbV9yZXAoc3RydWN0IG90eDJfbmljICpkc3QsCiYjNDM7CQkJCQkgICAgdW5zaWduZWQgbG9uZyAqc3JjX2ZsYWdzKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IGZsYWc7CiYjNDM7CiYjNDM7CWZvciAoZmxhZyA9IDA7IGZsYWcgJmx0Oz0gT1RYMl9SRVBfVkZfSU5JVElBTElaRUQ7IGZsYWcmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAodGVzdF9iaXQoZmxhZywgc3JjX2ZsYWdzKSkKJiM0MzsJCQlzZXRfYml0KGZsYWcsICZhbXA7ZHN0LSZndDtmbGFncyk7CiYjNDM7CQllbHNlCiYjNDM7CQkJY2xlYXJfYml0KGZsYWcsICZhbXA7ZHN0LSZndDtmbGFncyk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIGJvb2wgaXNfb3R4Ml9sYmt2ZihzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKIAlyZXR1cm4gKHBkZXYtJmd0O2RldmljZSA9PSBQQ0lfREVWSURfT0NURU9OVFgyX1JWVV9BRlZGKSB8fApAQCAtMTI0Niw2ICYjNDM7MTI5NywxMSBAQCBkbWFfYWRkcl90IG90eDJfZG1hX21hcF9za2JfZnJhZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsCiAJCQkJIHN0cnVjdCBza19idWZmICpza2IsIGludCBzZWcsIGludCAqbGVuKTsKIHZvaWQgb3R4Ml9kbWFfdW5tYXBfc2tiX2ZyYWdzKHN0cnVjdCBvdHgyX25pYyAqcGZ2Ziwgc3RydWN0IHNnX2xpc3QgKnNnKTsKIGludCBvdHgyX3JlYWRfZnJlZV9zcWUoc3RydWN0IG90eDJfbmljICpwZnZmLCB1MTYgcWlkeCk7CiYjNDM7aW50IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgdHhxLAomIzQzOwkJCQkgdTY0IG1pbnJhdGUsIHU2NCBtYXhyYXRlKTsKJiM0MztpbnQgb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7CiYjNDM7aW50IG90eDJfbXFwcmlvX2Rvd24oc3RydWN0IG90eDJfbmljICpwZnZmKTsKJiM0MztpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKTsKIHZvaWQgb3R4Ml9xdWV1ZV92Zl93b3JrKHN0cnVjdCBtYm94ICptdywgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm1ib3hfd3EsCiAJCQlpbnQgZmlyc3QsIGludCBtZGV2cywgdTY0IGludHIpOwogaW50IG90eDJfZGVsX21jYW1fZmxvd19lbnRyeShzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTE2IGVudHJ5LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmMKaW5kZXggOTFkMzQ2ZDExNGFmNS4uYjdiZDA4MTI5ZmI2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jCkBAIC00MTMsNiAmIzQzOzQxMywxMiBAQCBzdGF0aWMgaW50IG90eDJfZGNibmxfaWVlZV9zZXRwZmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGllZWVfcGZjICpwZmMpCiAJdTggb2xkX3BmY19lbjsKIAlpbnQgZXJyOwogCiYjNDM7CWlmIChwZnZmLSZndDttcXByaW8ucmF0ZV9saW1pdCAmYW1wOyZhbXA7IHBmYy0mZ3Q7cGZjX2VuKSB7CiYjNDM7CQluZXRkZXZfZXJyKGRldiwKJiM0MzsJCQkgICAmIzM0O1BGQzogY2Fubm90IGVuYWJsZSB3aGlsZSBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgaXMgYWN0aXZlXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKIAlvbGRfcGZjX2VuID0gcGZ2Zi0mZ3Q7cGZjX2VuOwogCXBmdmYtJmd0O3BmY19lbiA9IHBmYy0mZ3Q7cGZjX2VuOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kZXZsaW5rLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kZXZsaW5rLmMKaW5kZXggNGE1Y2UwZTY3ZGRhOC4uODYzYTVjZWQ5YTI2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGV2bGluay5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RldmxpbmsuYwpAQCAtMTA0LDcgJiM0MzsxMDQsNyBAQCBzdGF0aWMgaW50IG90eDJfZGxfdWNhc3RfZmx0X2NudF92YWxpZGF0ZShzdHJ1Y3QgZGV2bGluayAqZGV2bGluaywgdTMyIGlkLAogCXN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG90eDJfZGwtJmd0O3BmdmY7CiAKIAkvKiBDaGVjayBmb3IgVU5JQ0FTVCBmaWx0ZXIgc3VwcG9ydCovCi0JaWYgKCEocGZ2Zi0mZ3Q7ZmxhZ3MgJmFtcDsgT1RYMl9GTEFHX1VDQVNUX0ZMVFJfU1VQUE9SVCkpIHsKJiM0MzsJaWYgKCFvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfVUNBU1RfRkxUUl9TVVBQT1JUKSkgewogCQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLAogCQkJCSAgICYjMzQ7VW5pY2FzdCBmaWx0ZXIgbm90IGVuYWJsZWQmIzM0Oyk7CiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jCmluZGV4IDliZWUxYjkxZWVhYTYuLmU2M2VhZDNiMTExM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmMKQEAgLTI4Nyw2ICYjNDM7Mjg3LDE0IEBAIHN0YXRpYyBpbnQgb3R4Ml9zZXRfY2hhbm5lbHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiYjNDM7CWlmIChwZnZmLSZndDttcXByaW8ucmF0ZV9saW1pdCAmYW1wOyZhbXA7CiYjNDM7CSAgICAoY2hhbm5lbC0mZ3Q7dHhfY291bnQgIT0gcGZ2Zi0mZ3Q7aHcudHhfcXVldWVzIHx8CiYjNDM7CSAgICAgY2hhbm5lbC0mZ3Q7cnhfY291bnQgIT0gcGZ2Zi0mZ3Q7aHcucnhfcXVldWVzKSkgewomIzQzOwkJbmV0ZGV2X2luZm8oZGV2LAomIzQzOwkJCSAgICAmIzM0O05vdCBwZXJtaXR0ZWQgdG8gY2hhbmdlIGNoYW5uZWwgY291bnQgd2hpbGUgTVEgcHJpbyBpcyBhY3RpdmVcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiAJaWYgKGlmX3VwKQogCQlkZXYtJmd0O25ldGRldl9vcHMtJmd0O25kb19zdG9wKGRldik7CiAKQEAgLTM1NCwxNCAmIzQzOzM2MiwxNCBAQCBzdGF0aWMgaW50IG90eDJfc2V0X3BhdXNlcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJaWYgKHBhdXNlLSZndDtyeF9wYXVzZSkKLQkJcGZ2Zi0mZ3Q7ZmxhZ3MgfD0gT1RYMl9GTEFHX1JYX1BBVVNFX0VOQUJMRUQ7CiYjNDM7CQlvdHgyX3NldF9mbGFnKHBmdmYsIE9UWDJfRkxBR19SWF9QQVVTRV9FTkFCTEVEKTsKIAllbHNlCi0JCXBmdmYtJmd0O2ZsYWdzICZhbXA7PSB+T1RYMl9GTEFHX1JYX1BBVVNFX0VOQUJMRUQ7CiYjNDM7CQlvdHgyX2NsZWFyX2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1JYX1BBVVNFX0VOQUJMRUQpOwogCiAJaWYgKHBhdXNlLSZndDt0eF9wYXVzZSkKLQkJcGZ2Zi0mZ3Q7ZmxhZ3MgfD0gT1RYMl9GTEFHX1RYX1BBVVNFX0VOQUJMRUQ7CiYjNDM7CQlvdHgyX3NldF9mbGFnKHBmdmYsIE9UWDJfRkxBR19UWF9QQVVTRV9FTkFCTEVEKTsKIAllbHNlCi0JCXBmdmYtJmd0O2ZsYWdzICZhbXA7PSB+T1RYMl9GTEFHX1RYX1BBVVNFX0VOQUJMRUQ7CiYjNDM7CQlvdHgyX2NsZWFyX2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1RYX1BBVVNFX0VOQUJMRUQpOwogCiAJcmV0dXJuIG90eDJfY29uZmlnX3BhdXNlX2ZybShwZnZmKTsKIH0KQEAgLTQ3MCw4ICYjNDM7NDc4LDcgQEAgc3RhdGljIGludCBvdHgyX2dldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCWNtZC0mZ3Q7cnhfbWF4X2NvYWxlc2NlZF9mcmFtZXMgPSBody0mZ3Q7Y3FfZWNvdW50X3dhaXQ7CiAJY21kLSZndDt0eF9jb2FsZXNjZV91c2VjcyA9IGh3LSZndDtjcV90aW1lX3dhaXQ7CiAJY21kLSZndDt0eF9tYXhfY29hbGVzY2VkX2ZyYW1lcyA9IGh3LSZndDtjcV9lY291bnRfd2FpdDsKLQlpZiAoKHBmdmYtJmd0O2ZsYWdzICZhbXA7IE9UWDJfRkxBR19BRFBUVl9JTlRfQ09BTF9FTkFCTEVEKSA9PQotCQkJT1RYMl9GTEFHX0FEUFRWX0lOVF9DT0FMX0VOQUJMRUQpIHsKJiM0MzsJaWYgKG90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19BRFBUVl9JTlRfQ09BTF9FTkFCTEVEKSkgewogCQljbWQtJmd0O3VzZV9hZGFwdGl2ZV9yeF9jb2FsZXNjZSA9IDE7CiAJCWNtZC0mZ3Q7dXNlX2FkYXB0aXZlX3R4X2NvYWxlc2NlID0gMTsKIAl9IGVsc2UgewpAQCAtNTAyLDE1ICYjNDM7NTA5LDE0IEBAIHN0YXRpYyBpbnQgb3R4Ml9zZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAl9CiAKIAkvKiBDaGVjayBhbmQgdXBkYXRlIGNvYWxlc2NlIHN0YXR1cyAqLwotCWlmICgocGZ2Zi0mZ3Q7ZmxhZ3MgJmFtcDsgT1RYMl9GTEFHX0FEUFRWX0lOVF9DT0FMX0VOQUJMRUQpID09Ci0JCQlPVFgyX0ZMQUdfQURQVFZfSU5UX0NPQUxfRU5BQkxFRCkgewomIzQzOwlpZiAob3R4Ml90ZXN0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX0FEUFRWX0lOVF9DT0FMX0VOQUJMRUQpKSB7CiAJCXByaXZfY29hbGVzY2Vfc3RhdHVzID0gMTsKIAkJaWYgKCFlYy0mZ3Q7dXNlX2FkYXB0aXZlX3J4X2NvYWxlc2NlKQotCQkJcGZ2Zi0mZ3Q7ZmxhZ3MgJmFtcDs9IH5PVFgyX0ZMQUdfQURQVFZfSU5UX0NPQUxfRU5BQkxFRDsKJiM0MzsJCQlvdHgyX2NsZWFyX2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX0FEUFRWX0lOVF9DT0FMX0VOQUJMRUQpOwogCX0gZWxzZSB7CiAJCXByaXZfY29hbGVzY2Vfc3RhdHVzID0gMDsKIAkJaWYgKGVjLSZndDt1c2VfYWRhcHRpdmVfcnhfY29hbGVzY2UpCi0JCQlwZnZmLSZndDtmbGFncyB8PSBPVFgyX0ZMQUdfQURQVFZfSU5UX0NPQUxfRU5BQkxFRDsKJiM0MzsJCQlvdHgyX3NldF9mbGFnKHBmdmYsIE9UWDJfRkxBR19BRFBUVl9JTlRfQ09BTF9FTkFCTEVEKTsKIAl9CiAKIAkvKiAmIzM5O2NxX3RpbWVfd2FpdCYjMzk7IGlzIDhiaXQgYW5kIGlzIGluIG11bHRpcGxlIG9mIDEwMG5zLApAQCAtNTU2LDggJiM0Mzs1NjIsNyBAQCBzdGF0aWMgaW50IG90eDJfc2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJICogJiMzOTtvbiYjMzk7IHRvICYjMzk7b2ZmJiMzOTsuCiAJICovCiAJaWYgKHByaXZfY29hbGVzY2Vfc3RhdHVzICZhbXA7JmFtcDsKLQkgICAgKChwZnZmLSZndDtmbGFncyAmYW1wOyBPVFgyX0ZMQUdfQURQVFZfSU5UX0NPQUxfRU5BQkxFRCkgIT0KLQkgICAgIE9UWDJfRkxBR19BRFBUVl9JTlRfQ09BTF9FTkFCTEVEKSkgewomIzQzOwkgICAgKCFvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfQURQVFZfSU5UX0NPQUxfRU5BQkxFRCkpKSB7CiAJCWh3LSZndDtjcV90aW1lX3dhaXQgPSBDUV9USU1FUl9USFJFU0hfREVGQVVMVDsKIAkJaHctJmd0O2NxX2Vjb3VudF93YWl0ID0gQ1FfQ1FFX1RIUkVTSF9ERUZBVUxUOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2Zsb3dzLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9mbG93cy5jCmluZGV4IDk5ZDc4ZmM1YTJjNGEuLmI4ZmY0OWYwZjZlM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2Zsb3dzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZmxvd3MuYwpAQCAtMjcwLDkgJiM0MzsyNzAsOSBAQCBpbnQgb3R4Ml9hbGxvY19tY2FtX2VudHJpZXMoc3RydWN0IG90eDJfbmljICpwZnZmLCB1MTYgY291bnQpCiAJZmxvd19jZmctJmd0O21heF9mbG93cyA9IGFsbG9jYXRlZDsKIAogCWlmIChhbGxvY2F0ZWQpIHsKLQkJcGZ2Zi0mZ3Q7ZmxhZ3MgfD0gT1RYMl9GTEFHX01DQU1fRU5UUklFU19BTExPQzsKLQkJcGZ2Zi0mZ3Q7ZmxhZ3MgfD0gT1RYMl9GTEFHX05UVVBMRV9TVVBQT1JUOwotCQlwZnZmLSZndDtmbGFncyB8PSBPVFgyX0ZMQUdfVENfRkxPV0VSX1NVUFBPUlQ7CiYjNDM7CQlvdHgyX3NldF9mbGFnKHBmdmYsIE9UWDJfRkxBR19NQ0FNX0VOVFJJRVNfQUxMT0MpOwomIzQzOwkJb3R4Ml9zZXRfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfTlRVUExFX1NVUFBPUlQpOwomIzQzOwkJb3R4Ml9zZXRfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfVENfRkxPV0VSX1NVUFBPUlQpOwogCX0KIAogCWlmIChhbGxvY2F0ZWQgIT0gY291bnQpCkBAIC0zNzYsNyAmIzQzOzM3Niw3IEBAIGludCBvdHgyX21jYW1fZW50cnlfaW5pdChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiAJZmxvd19jZmctJmd0O3VuaWNhc3Rfb2Zmc2V0ID0gdmZfdmxhbl9tYXhfZmxvd3M7CiAJZmxvd19jZmctJmd0O3J4X3ZsYW5fb2Zmc2V0ID0gZmxvd19jZmctJmd0O3VuaWNhc3Rfb2Zmc2V0ICYjNDM7CiAJCQkJCWZsb3dfY2ZnLSZndDt1Y2FzdF9mbHRfY250OwotCXBmdmYtJmd0O2ZsYWdzIHw9IE9UWDJfRkxBR19VQ0FTVF9GTFRSX1NVUFBPUlQ7CiYjNDM7CW90eDJfc2V0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1VDQVNUX0ZMVFJfU1VQUE9SVCk7CiAKIAkvKiBDaGVjayBpZiBOUENfRE1BQyBmaWVsZCBpcyBzdXBwb3J0ZWQKIAkgKiBieSB0aGUgbWtleCBwcm9maWxlIGJlZm9yZSBzZXR0aW5nIFZMQU4gc3VwcG9ydCBmbGFnLgpAQCAtNDAxLDExICYjNDM7NDAxLDExIEBAIGludCBvdHgyX21jYW1fZW50cnlfaW5pdChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiAJfQogCiAJaWYgKGZyc3AtJmd0O2VuYWJsZSkgewotCQlwZnZmLSZndDtmbGFncyB8PSBPVFgyX0ZMQUdfUlhfVkxBTl9TVVBQT1JUOwotCQlwZnZmLSZndDtmbGFncyB8PSBPVFgyX0ZMQUdfVkZfVkxBTl9TVVBQT1JUOwomIzQzOwkJb3R4Ml9zZXRfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfUlhfVkxBTl9TVVBQT1JUKTsKJiM0MzsJCW90eDJfc2V0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1ZGX1ZMQU5fU1VQUE9SVCk7CiAJfQogCi0JcGZ2Zi0mZ3Q7ZmxhZ3MgfD0gT1RYMl9GTEFHX01DQU1fRU5UUklFU19BTExPQzsKJiM0MzsJb3R4Ml9zZXRfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfTUNBTV9FTlRSSUVTX0FMTE9DKTsKIAltdXRleF91bmxvY2soJmFtcDtwZnZmLSZndDttYm94LmxvY2spOwogCiAJLyogQWxsb2NhdGUgZW50cmllcyBmb3IgTnR1cGxlIGZpbHRlcnMgKi8KQEAgLTQxNSw3ICYjNDM7NDE1LDcgQEAgaW50IG90eDJfbWNhbV9lbnRyeV9pbml0KHN0cnVjdCBvdHgyX25pYyAqcGZ2ZikKIAkJcmV0dXJuIDA7CiAJfQogCi0JcGZ2Zi0mZ3Q7ZmxhZ3MgfD0gT1RYMl9GTEFHX1RDX0ZMT1dFUl9TVVBQT1JUOwomIzQzOwlvdHgyX3NldF9mbGFnKHBmdmYsIE9UWDJfRkxBR19UQ19GTE9XRVJfU1VQUE9SVCk7CiAKIAlyZWZjb3VudF9zZXQoJmFtcDtmbG93X2NmZy0mZ3Q7bWFya19mbG93cywgMSk7CiAJcmV0dXJuIDA7CkBAIC00NzksNyAmIzQzOzQ3OSw3IEBAIGludCBvdHgyX21jYW1fZmxvd19pbml0KHN0cnVjdCBvdHgyX25pYyAqcGYpCiAJCXJldHVybiBlcnI7CiAKIAkvKiBDaGVjayBpZiBNQ0FNIGVudHJpZXMgYXJlIGFsbG9jYXRlIG9yIG5vdCAqLwotCWlmICghKHBmLSZndDtmbGFncyAmYW1wOyBPVFgyX0ZMQUdfVUNBU1RfRkxUUl9TVVBQT1JUKSkKJiM0MzsJaWYgKCFvdHgyX3Rlc3RfZmxhZyhwZiwgT1RYMl9GTEFHX1VDQVNUX0ZMVFJfU1VQUE9SVCkpCiAJCXJldHVybiAwOwogCiAJcGYtJmd0O21hY190YWJsZSA9IGRldm1fa3phbGxvYyhwZi0mZ3Q7ZGV2LCBzaXplb2Yoc3RydWN0IG90eDJfbWFjX3RhYmxlKQpAQCAtNTAxLDcgJiM0Mzs1MDEsNyBAQCBpbnQgb3R4Ml9tY2FtX2Zsb3dfaW5pdChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmKQogCWlmICghcGYtJmd0O2Zsb3dfY2ZnLSZndDtibWFwX3RvX2RtYWNpbmRleCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlwZi0mZ3Q7ZmxhZ3MgfD0gT1RYMl9GTEFHX0RNQUNGTFRSX1NVUFBPUlQ7CiYjNDM7CW90eDJfc2V0X2ZsYWcocGYsIE9UWDJfRkxBR19ETUFDRkxUUl9TVVBQT1JUKTsKIAogCXJldHVybiAwOwogfQpAQCAtNTIxLDcgJiM0Mzs1MjEsNyBAQCBzdGF0aWMgaW50IG90eDJfZG9fYWRkX21hY2ZpbHRlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmLCBjb25zdCB1OCAqbWFjKQogCXN0cnVjdCBucGNfaW5zdGFsbF9mbG93X3JlcSAqcmVxOwogCWludCBlcnIsIGk7CiAKLQlpZiAoIShwZi0mZ3Q7ZmxhZ3MgJmFtcDsgT1RYMl9GTEFHX1VDQVNUX0ZMVFJfU1VQUE9SVCkpCiYjNDM7CWlmICghb3R4Ml90ZXN0X2ZsYWcocGYsIE9UWDJfRkxBR19VQ0FTVF9GTFRSX1NVUFBPUlQpKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCS8qIGRvbnQgaGF2ZSBmcmVlIG1jYW0gZW50cmllcyBvciB1YyBsaXN0IGlzIGdyZWF0ZXIgdGhhbiBhbGxvdGVkICovCkBAIC0xMTY3LDcgJiM0MzsxMTY3LDcgQEAgc3RhdGljIGludCBvdHgyX2lzX2Zsb3dfcnVsZV9kbWFjZmlsdGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwKIAl1NjQgcmluZ19jb29raWUgPSBmc3AtJmd0O3JpbmdfY29va2llOwogCXUzMiBmbG93X3R5cGU7CiAKLQlpZiAoIShwZnZmLSZndDtmbGFncyAmYW1wOyBPVFgyX0ZMQUdfRE1BQ0ZMVFJfU1VQUE9SVCkpCiYjNDM7CWlmICghb3R4Ml90ZXN0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX0RNQUNGTFRSX1NVUFBPUlQpKQogCQlyZXR1cm4gZmFsc2U7CiAKIAlmbG93X3R5cGUgPSBmc3AtJmd0O2Zsb3dfdHlwZSAmYW1wOyB+KEZMT1dfRVhUIHwgRkxPV19NQUNfRVhUIHwgRkxPV19SU1MpOwpAQCAtMTM2NCw3ICYjNDM7MTM2NCw3IEBAIGludCBvdHgyX2FkZF9mbG93KHN0cnVjdCBvdHgyX25pYyAqcGZ2Ziwgc3RydWN0IGV0aHRvb2xfcnhuZmMgKm5mYykKIAl9CiAKIAlyaW5nID0gZXRodG9vbF9nZXRfZmxvd19zcGVjX3JpbmcoZnNwLSZndDtyaW5nX2Nvb2tpZSk7Ci0JaWYgKCEocGZ2Zi0mZ3Q7ZmxhZ3MgJmFtcDsgT1RYMl9GTEFHX05UVVBMRV9TVVBQT1JUKSkKJiM0MzsJaWYgKCFvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfTlRVUExFX1NVUFBPUlQpKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCS8qIE51bWJlciBvZiBxdWV1ZXMgb24gYSBWRiBjYW4gYmUgZ3JlYXRlciBvciBsZXNzIHRoYW4KQEAgLTE1OTYsNyAmIzQzOzE1OTYsNyBAQCBpbnQgb3R4Ml9kZXN0cm95X250dXBsZV9mbG93cyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiAJc3RydWN0IG90eDJfZmxvdyAqaXRlciwgKnRtcDsKIAlpbnQgZXJyOwogCi0JaWYgKCEocGZ2Zi0mZ3Q7ZmxhZ3MgJmFtcDsgT1RYMl9GTEFHX05UVVBMRV9TVVBQT1JUKSkKJiM0MzsJaWYgKCFvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfTlRVUExFX1NVUFBPUlQpKQogCQlyZXR1cm4gMDsKIAogCWlmICghZmxvd19jZmctJmd0O21heF9mbG93cykKQEAgLTE2MjksNyAmIzQzOzE2MjksNyBAQCBpbnQgb3R4Ml9kZXN0cm95X21jYW1fZmxvd3Moc3RydWN0IG90eDJfbmljICpwZnZmKQogCXN0cnVjdCBvdHgyX2Zsb3cgKml0ZXIsICp0bXA7CiAJaW50IGVycjsKIAotCWlmICghKHBmdmYtJmd0O2ZsYWdzICZhbXA7IE9UWDJfRkxBR19NQ0FNX0VOVFJJRVNfQUxMT0MpKQomIzQzOwlpZiAoIW90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19NQ0FNX0VOVFJJRVNfQUxMT0MpKQogCQlyZXR1cm4gMDsKIAogCS8qIHJlbW92ZSBhbGwgZmxvd3MgKi8KQEAgLTE2NTgsNyAmIzQzOzE2NTgsNyBAQCBpbnQgb3R4Ml9kZXN0cm95X21jYW1fZmxvd3Moc3RydWN0IG90eDJfbmljICpwZnZmKQogCQlyZXR1cm4gZXJyOwogCX0KIAotCXBmdmYtJmd0O2ZsYWdzICZhbXA7PSB+T1RYMl9GTEFHX01DQU1fRU5UUklFU19BTExPQzsKJiM0MzsJb3R4Ml9jbGVhcl9mbGFnKHBmdmYsIE9UWDJfRkxBR19NQ0FNX0VOVFJJRVNfQUxMT0MpOwogCWZsb3dfY2ZnLSZndDttYXhfZmxvd3MgPSAwOwogCW11dGV4X3VubG9jaygmYW1wO3BmdmYtJmd0O21ib3gubG9jayk7CiAKQEAgLTE3MjEsNyAmIzQzOzE3MjEsNyBAQCBpbnQgb3R4Ml9lbmFibGVfcnh2bGFuKHN0cnVjdCBvdHgyX25pYyAqcGYsIGJvb2wgZW5hYmxlKQogCWludCBlcnI7CiAKIAkvKiBEb250IGhhdmUgZW5vdWdoIG1jYW0gZW50cmllcyAqLwotCWlmICghKHBmLSZndDtmbGFncyAmYW1wOyBPVFgyX0ZMQUdfUlhfVkxBTl9TVVBQT1JUKSkKJiM0MzsJaWYgKCFvdHgyX3Rlc3RfZmxhZyhwZiwgT1RYMl9GTEFHX1JYX1ZMQU5fU1VQUE9SVCkpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJaWYgKGVuYWJsZSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMKaW5kZXggYzBlMjEwMGRlMWQ5My4uMWUxN2Y4ZDQ5ZmQ0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jCkBAIC04NzksNyAmIzQzOzg3OSw3IEBAIHN0YXRpYyB2b2lkIG90eDJfaGFuZGxlX2xpbmtfZXZlbnQoc3RydWN0IG90eDJfbmljICpwZikKIAlzdHJ1Y3QgY2d4X2xpbmtfdXNlcl9pbmZvICpsaW5mbyA9ICZhbXA7cGYtJmd0O2xpbmZvOwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZi0mZ3Q7bmV0ZGV2OwogCi0JaWYgKHBmLSZndDtmbGFncyAmYW1wOyBPVFgyX0ZMQUdfUE9SVF9VUCkKJiM0MzsJaWYgKG90eDJfdGVzdF9mbGFnKHBmLCBPVFgyX0ZMQUdfUE9SVF9VUCkpCiAJCXJldHVybjsKIAogCXByX2luZm8oJiMzNDslcyBOSUMgTGluayBpcyAlcyAlZCBNYnBzICVzIGR1cGxleFxuJiMzNDssIG5ldGRldi0mZ3Q7bmFtZSwKQEAgLTkwNywxMSAmIzQzOzkwNywxMSBAQCBzdGF0aWMgaW50IG90eDJfbWJveF91cF9oYW5kbGVyX3JlcF9ldmVudF91cF9ub3RpZnkoc3RydWN0IG90eDJfbmljICpwZiwKIAogCWlmIChpbmZvLSZndDtldmVudCA9PSBSVlVfRVZFTlRfUE9SVF9TVEFURSkgewogCQlpZiAoaW5mby0mZ3Q7ZXZ0X2RhdGEucG9ydF9zdGF0ZSkgewotCQkJcGYtJmd0O2ZsYWdzIHw9IE9UWDJfRkxBR19QT1JUX1VQOwomIzQzOwkJCW90eDJfc2V0X2ZsYWcocGYsIE9UWDJfRkxBR19QT1JUX1VQKTsKIAkJCW5ldGlmX2NhcnJpZXJfb24obmV0ZGV2KTsKIAkJCW5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMobmV0ZGV2KTsKIAkJfSBlbHNlIHsKLQkJCXBmLSZndDtmbGFncyAmYW1wOz0gfk9UWDJfRkxBR19QT1JUX1VQOwomIzQzOwkJCW90eDJfY2xlYXJfZmxhZyhwZiwgT1RYMl9GTEFHX1BPUlRfVVApOwogCQkJbmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5ldGRldik7CiAJCQluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOwogCQl9CkBAIC05NTMsNyAmIzQzOzk1Myw3IEBAIGludCBvdHgyX21ib3hfdXBfaGFuZGxlcl9jZ3hfbGlua19ldmVudChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmLAogCX0KIAogCS8qIGludGVyZmFjZSBoYXMgbm90IGJlZW4gZnVsbHkgY29uZmlndXJlZCB5ZXQgKi8KLQlpZiAocGYtJmd0O2ZsYWdzICZhbXA7IE9UWDJfRkxBR19JTlRGX0RPV04pCiYjNDM7CWlmIChvdHgyX3Rlc3RfZmxhZyhwZiwgT1RYMl9GTEFHX0lOVEZfRE9XTikpCiAJCXJldHVybiAwOwogCiAJb3R4Ml9oYW5kbGVfbGlua19ldmVudChwZik7CkBAIC0xODI4LDcgJiM0MzsxODI4LDcgQEAgdm9pZCBvdHgyX2ZyZWVfaHdfcmVzb3VyY2VzKHN0cnVjdCBvdHgyX25pYyAqcGYpCiAJZnJlZV9yZXEgPSBvdHgyX21ib3hfYWxsb2NfbXNnX25peF9sZl9mcmVlKG1ib3gpOwogCWlmIChmcmVlX3JlcSkgewogCQlmcmVlX3JlcS0mZ3Q7ZmxhZ3MgPSBOSVhfTEZfRElTQUJMRV9GTE9XUyB8IE5JWF9MRl9ET05UX0ZSRUVfREZUX0lEWFM7Ci0JCWlmICghKHBmLSZndDtmbGFncyAmYW1wOyBPVFgyX0ZMQUdfUEZfU0hVVERPV04pKQomIzQzOwkJaWYgKCFvdHgyX3Rlc3RfZmxhZyhwZiwgT1RYMl9GTEFHX1BGX1NIVVRET1dOKSkKIAkJCWZyZWVfcmVxLSZndDtmbGFncyB8PSBOSVhfTEZfRE9OVF9GUkVFX1RYX1ZUQUc7CiAJCWlmIChvdHgyX3N5bmNfbWJveF9tc2cobWJveCkpCiAJCQlkZXZfZXJyKHBmLSZndDtkZXYsICYjMzQ7JXMgZmFpbGVkIHRvIGZyZWUgbml4bGZcbiYjMzQ7LCBfX2Z1bmNfXyk7CkBAIC0yMDA3LDYgJiM0MzsyMDA3LDE0IEBAIGludCBvdHgyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9mcmVlX21lbTsKIAomIzQzOwllcnIgPSBvdHgyX21xcHJpb191cChwZik7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCW5ldGRldl9lcnIocGYtJmd0O25ldGRldiwKJiM0MzsJCQkgICAmIzM0O21xcHJpbzogZmFpbGVkIHRvIHJlc3RvcmUgc2hhcGVycyBkdXJpbmcgb3BlbjogJWRcbiYjMzQ7LAomIzQzOwkJCSAgIGVycik7CiYjNDM7CQlnb3RvIGVycl9mcmVlX2h3OwomIzQzOwl9CiYjNDM7CiAJLyogUmVnaXN0ZXIgTkFQSSBoYW5kbGVyICovCiAJZm9yIChxaWR4ID0gMDsgcWlkeCAmbHQ7IHBmLSZndDtody5jaW50X2NudDsgcWlkeCYjNDM7JiM0MzspIHsKIAkJY3FfcG9sbCA9ICZhbXA7cXNldC0mZ3Q7bmFwaVtxaWR4XTsKQEAgLTIxMzUsMjEgJiM0MzsyMTQzLDIxIEBAIGludCBvdHgyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIAl9CiAJb3R4Ml93cml0ZTY0KHBmLCBOSVhfTEZfUkFTX0VOQV9XMVMsIE5JWF9MRl9SQVNfTUFTSyk7CiAKLQlpZiAocGYtJmd0O2ZsYWdzICZhbXA7IE9UWDJfRkxBR19SWF9WTEFOX1NVUFBPUlQpCiYjNDM7CWlmIChvdHgyX3Rlc3RfZmxhZyhwZiwgT1RYMl9GTEFHX1JYX1ZMQU5fU1VQUE9SVCkpCiAJCW90eDJfZW5hYmxlX3J4dmxhbihwZiwgdHJ1ZSk7CiAKIAkvKiBXaGVuIHJlaW5pdGlhbGl6aW5nIGVuYWJsZSB0aW1lIHN0YW1waW5nIGlmIGl0IGlzIGVuYWJsZWQgYmVmb3JlICovCi0JaWYgKHBmLSZndDtmbGFncyAmYW1wOyBPVFgyX0ZMQUdfVFhfVFNUQU1QX0VOQUJMRUQpIHsKLQkJcGYtJmd0O2ZsYWdzICZhbXA7PSB+T1RYMl9GTEFHX1RYX1RTVEFNUF9FTkFCTEVEOwomIzQzOwlpZiAob3R4Ml90ZXN0X2ZsYWcocGYsIE9UWDJfRkxBR19UWF9UU1RBTVBfRU5BQkxFRCkpIHsKJiM0MzsJCW90eDJfY2xlYXJfZmxhZyhwZiwgT1RYMl9GTEFHX1RYX1RTVEFNUF9FTkFCTEVEKTsKIAkJb3R4Ml9jb25maWdfaHdfdHhfdHN0YW1wKHBmLCB0cnVlKTsKIAl9Ci0JaWYgKHBmLSZndDtmbGFncyAmYW1wOyBPVFgyX0ZMQUdfUlhfVFNUQU1QX0VOQUJMRUQpIHsKLQkJcGYtJmd0O2ZsYWdzICZhbXA7PSB+T1RYMl9GTEFHX1JYX1RTVEFNUF9FTkFCTEVEOwomIzQzOwlpZiAob3R4Ml90ZXN0X2ZsYWcocGYsIE9UWDJfRkxBR19SWF9UU1RBTVBfRU5BQkxFRCkpIHsKJiM0MzsJCW90eDJfY2xlYXJfZmxhZyhwZiwgT1RYMl9GTEFHX1JYX1RTVEFNUF9FTkFCTEVEKTsKIAkJb3R4Ml9jb25maWdfaHdfcnhfdHN0YW1wKHBmLCB0cnVlKTsKIAl9CiAKLQlwZi0mZ3Q7ZmxhZ3MgJmFtcDs9IH5PVFgyX0ZMQUdfSU5URl9ET1dOOwotCXBmLSZndDtmbGFncyAmYW1wOz0gfk9UWDJfRkxBR19QT1JUX1VQOwomIzQzOwlvdHgyX2NsZWFyX2ZsYWcocGYsIE9UWDJfRkxBR19JTlRGX0RPV04pOwomIzQzOwlvdHgyX2NsZWFyX2ZsYWcocGYsIE9UWDJfRkxBR19QT1JUX1VQKTsKIAkvKiAmIzM5O2ludGZfZG93biYjMzk7IG1heSBiZSBjaGVja2VkIG9uIGFueSBjcHUgKi8KIAlzbXBfd21iKCk7CiAKQEAgLTIxNjEsNyAmIzQzOzIxNjksNyBAQCBpbnQgb3R4Ml9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiAJCW90eDJfaGFuZGxlX2xpbmtfZXZlbnQocGYpOwogCiAJLyogSW5zdGFsbCBETUFDIEZpbHRlcnMgKi8KLQlpZiAocGYtJmd0O2ZsYWdzICZhbXA7IE9UWDJfRkxBR19ETUFDRkxUUl9TVVBQT1JUKQomIzQzOwlpZiAob3R4Ml90ZXN0X2ZsYWcocGYsIE9UWDJfRkxBR19ETUFDRkxUUl9TVVBQT1JUKSkKIAkJb3R4Ml9kbWFjZmx0X3JlaW5zdGFsbF9mbG93cyhwZik7CiAKIAlvdHgyX3RjX2FwcGx5X2luZ3Jlc3NfcG9saWNlX3J1bGVzKHBmKTsKQEAgLTIxODYsNyAmIzQzOzIxOTQsNyBAQCBpbnQgb3R4Ml9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiBlcnJfdHhfc3RvcF9xdWV1ZXM6CiAJbmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5ldGRldik7CiAJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKLQlwZi0mZ3Q7ZmxhZ3MgfD0gT1RYMl9GTEFHX0lOVEZfRE9XTjsKJiM0MzsJb3R4Ml9zZXRfZmxhZyhwZiwgT1RYMl9GTEFHX0lOVEZfRE9XTik7CiAJLyogZnJlZSBOSVhMRiBQT0lTT04gaXJxICovCiAJdmVjID0gcGNpX2lycV92ZWN0b3IocGYtJmd0O3BkZXYsCiAJCQkgICAgIHBmLSZndDtody5uaXhfbXNpeG9mZiAmIzQzOyBOSVhfTEZfUE9JU09OX1ZFQyk7CkBAIC0yMjA1LDYgJiM0MzsyMjEzLDcgQEAgaW50IG90eDJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCWZyZWVfaXJxKHZlYywgcGYpOwogZXJyX2Rpc2FibGVfbmFwaToKIAlvdHgyX2Rpc2FibGVfbmFwaShwZik7CiYjNDM7ZXJyX2ZyZWVfaHc6CiAJb3R4Ml9mcmVlX2h3X3Jlc291cmNlcyhwZik7CiBlcnJfZnJlZV9tZW06CiAJb3R4Ml9mcmVlX3F1ZXVlX21lbShxc2V0KTsKQEAgLTIyMjAsMTMgJiM0MzsyMjI5LDEzIEBAIGludCBvdHgyX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIAlpbnQgcWlkeCwgdmVjLCB3cms7CiAKIAkvKiBJZiB0aGUgRE9XTiBmbGFnIGlzIHNldCByZXNvdXJjZXMgYXJlIGFscmVhZHkgZnJlZWQgKi8KLQlpZiAocGYtJmd0O2ZsYWdzICZhbXA7IE9UWDJfRkxBR19JTlRGX0RPV04pCiYjNDM7CWlmIChvdHgyX3Rlc3RfZmxhZyhwZiwgT1RYMl9GTEFHX0lOVEZfRE9XTikpCiAJCXJldHVybiAwOwogCiAJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKIAluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTsKIAotCXBmLSZndDtmbGFncyB8PSBPVFgyX0ZMQUdfSU5URl9ET1dOOwomIzQzOwlvdHgyX3NldF9mbGFnKHBmLCBPVFgyX0ZMQUdfSU5URl9ET1dOKTsKIAkvKiAmIzM5O2ludGZfZG93biYjMzk7IG1heSBiZSBjaGVja2VkIG9uIGFueSBjcHUgKi8KIAlzbXBfd21iKCk7CiAKQEAgLTIyODAsNiAmIzQzOzIyODksNyBAQCBpbnQgb3R4Ml9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiAJZm9yIChxaWR4ID0gMDsgcWlkeCAmbHQ7IG5ldGRldi0mZ3Q7bnVtX3R4X3F1ZXVlczsgcWlkeCYjNDM7JiM0MzspCiAJCW5ldGRldl90eF9yZXNldF9xdWV1ZShuZXRkZXZfZ2V0X3R4X3F1ZXVlKG5ldGRldiwgcWlkeCkpOwogCiYjNDM7CXN5bmNocm9uaXplX25ldCgpOwogCW90eDJfZnJlZV9xdWV1ZV9tZW0ocXNldCk7CiAJLyogRG8gbm90IGNsZWFyIFJRL1NRIHJpbmdzaXplIHNldHRpbmdzICovCiAJbWVtc2V0X3N0YXJ0YXQocXNldCwgMCwgc3FlX2NudCk7CkBAIC0yNDU3LDcgJiM0MzsyNDY3LDcgQEAgc3RhdGljIGludCBvdHgyX2NvbmZpZ19od19yeF90c3RhbXAoc3RydWN0IG90eDJfbmljICpwZnZmLCBib29sIGVuYWJsZSkKIAlzdHJ1Y3QgbXNnX3JlcSAqcmVxOwogCWludCBlcnI7CiAKLQlpZiAocGZ2Zi0mZ3Q7ZmxhZ3MgJmFtcDsgT1RYMl9GTEFHX1JYX1RTVEFNUF9FTkFCTEVEICZhbXA7JmFtcDsgZW5hYmxlKQomIzQzOwlpZiAob3R4Ml90ZXN0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1JYX1RTVEFNUF9FTkFCTEVEKSAmYW1wOyZhbXA7IGVuYWJsZSkKIAkJcmV0dXJuIDA7CiAKIAltdXRleF9sb2NrKCZhbXA7cGZ2Zi0mZ3Q7bWJveC5sb2NrKTsKQEAgLTI0NzgsOSAmIzQzOzI0ODgsOSBAQCBzdGF0aWMgaW50IG90eDJfY29uZmlnX2h3X3J4X3RzdGFtcChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGJvb2wgZW5hYmxlKQogCiAJbXV0ZXhfdW5sb2NrKCZhbXA7cGZ2Zi0mZ3Q7bWJveC5sb2NrKTsKIAlpZiAoZW5hYmxlKQotCQlwZnZmLSZndDtmbGFncyB8PSBPVFgyX0ZMQUdfUlhfVFNUQU1QX0VOQUJMRUQ7CiYjNDM7CQlvdHgyX3NldF9mbGFnKHBmdmYsIE9UWDJfRkxBR19SWF9UU1RBTVBfRU5BQkxFRCk7CiAJZWxzZQotCQlwZnZmLSZndDtmbGFncyAmYW1wOz0gfk9UWDJfRkxBR19SWF9UU1RBTVBfRU5BQkxFRDsKJiM0MzsJCW90eDJfY2xlYXJfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfUlhfVFNUQU1QX0VOQUJMRUQpOwogCXJldHVybiAwOwogfQogCkBAIC0yNDg5LDcgJiM0MzsyNDk5LDcgQEAgc3RhdGljIGludCBvdHgyX2NvbmZpZ19od190eF90c3RhbXAoc3RydWN0IG90eDJfbmljICpwZnZmLCBib29sIGVuYWJsZSkKIAlzdHJ1Y3QgbXNnX3JlcSAqcmVxOwogCWludCBlcnI7CiAKLQlpZiAocGZ2Zi0mZ3Q7ZmxhZ3MgJmFtcDsgT1RYMl9GTEFHX1RYX1RTVEFNUF9FTkFCTEVEICZhbXA7JmFtcDsgZW5hYmxlKQomIzQzOwlpZiAob3R4Ml90ZXN0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1RYX1RTVEFNUF9FTkFCTEVEKSAmYW1wOyZhbXA7IGVuYWJsZSkKIAkJcmV0dXJuIDA7CiAKIAltdXRleF9sb2NrKCZhbXA7cGZ2Zi0mZ3Q7bWJveC5sb2NrKTsKQEAgLTI1MTAsOSAmIzQzOzI1MjAsOSBAQCBzdGF0aWMgaW50IG90eDJfY29uZmlnX2h3X3R4X3RzdGFtcChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGJvb2wgZW5hYmxlKQogCiAJbXV0ZXhfdW5sb2NrKCZhbXA7cGZ2Zi0mZ3Q7bWJveC5sb2NrKTsKIAlpZiAoZW5hYmxlKQotCQlwZnZmLSZndDtmbGFncyB8PSBPVFgyX0ZMQUdfVFhfVFNUQU1QX0VOQUJMRUQ7CiYjNDM7CQlvdHgyX3NldF9mbGFnKHBmdmYsIE9UWDJfRkxBR19UWF9UU1RBTVBfRU5BQkxFRCk7CiAJZWxzZQotCQlwZnZmLSZndDtmbGFncyAmYW1wOz0gfk9UWDJfRkxBR19UWF9UU1RBTVBfRU5BQkxFRDsKJiM0MzsJCW90eDJfY2xlYXJfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfVFhfVFNUQU1QX0VOQUJMRUQpOwogCXJldHVybiAwOwogfQogCkBAIC0yNTM3LDggJiM0MzsyNTQ3LDggQEAgaW50IG90eDJfY29uZmlnX2h3dHN0YW1wX3NldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCiAJc3dpdGNoIChjb25maWctJmd0O3R4X3R5cGUpIHsKIAljYXNlIEhXVFNUQU1QX1RYX09GRjoKLQkJaWYgKHBmdmYtJmd0O2ZsYWdzICZhbXA7IE9UWDJfRkxBR19QVFBfT05FU1RFUF9TWU5DKQotCQkJcGZ2Zi0mZ3Q7ZmxhZ3MgJmFtcDs9IH5PVFgyX0ZMQUdfUFRQX09ORVNURVBfU1lOQzsKJiM0MzsJCWlmIChvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfUFRQX09ORVNURVBfU1lOQykpCiYjNDM7CQkJb3R4Ml9jbGVhcl9mbGFnKHBmdmYsIE9UWDJfRkxBR19QVFBfT05FU1RFUF9TWU5DKTsKIAogCQljYW5jZWxfZGVsYXllZF93b3JrKCZhbXA7cGZ2Zi0mZ3Q7cHRwLSZndDtzeW5jdHN0YW1wX3dvcmspOwogCQlvdHgyX2NvbmZpZ19od190eF90c3RhbXAocGZ2ZiwgZmFsc2UpOwpAQCAtMjU0OSw3ICYjNDM7MjU1OSw3IEBAIGludCBvdHgyX2NvbmZpZ19od3RzdGFtcF9zZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkJCQkJICAgJiMzNDtPbmUtc3RlcCB0aW1lIHN0YW1waW5nIGlzIG5vdCBzdXBwb3J0ZWQmIzM0Oyk7CiAJCQlyZXR1cm4gLUVSQU5HRTsKIAkJfQotCQlwZnZmLSZndDtmbGFncyB8PSBPVFgyX0ZMQUdfUFRQX09ORVNURVBfU1lOQzsKJiM0MzsJCW90eDJfc2V0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1BUUF9PTkVTVEVQX1NZTkMpOwogCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmFtcDtwZnZmLSZndDtwdHAtJmd0O3N5bmN0c3RhbXBfd29yaywKIAkJCQkgICAgICBtc2Vjc190b19qaWZmaWVzKDUwMCkpOwogCQlmYWxsdGhyb3VnaDsKQEAgLTI4MzUsNyAmIzQzOzI4NDUsNyBAQCBzdGF0aWMgaW50IG90eDJfc2V0X3ZmX3ZsYW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHZmLCB1MTYgdmxhbiwgdTggcW9zLAogCWlmIChwcm90byAhPSBodG9ucyhFVEhfUF84MDIxUSkpCiAJCXJldHVybiAtRVBST1RPTk9TVVBQT1JUOwogCi0JaWYgKCEocGYtJmd0O2ZsYWdzICZhbXA7IE9UWDJfRkxBR19WRl9WTEFOX1NVUFBPUlQpKQomIzQzOwlpZiAoIW90eDJfdGVzdF9mbGFnKHBmLCBPVFgyX0ZMQUdfVkZfVkxBTl9TVVBQT1JUKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJcmV0dXJuIG90eDJfZG9fc2V0X3ZmX3ZsYW4ocGYsIHZmLCB2bGFuLCBxb3MsIHByb3RvKTsKQEAgLTI5MjMsNiAmIzQzOzI5MzMsMTIgQEAgc3RhdGljIGludCBvdHgyX3hkcF9zZXR1cChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpCiAJYm9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcocGYtJmd0O25ldGRldik7CiAJc3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZzsKIAomIzQzOwlpZiAocHJvZyAmYW1wOyZhbXA7IHBmLSZndDttcXByaW8ucmF0ZV9saW1pdCkgewomIzQzOwkJbmV0ZGV2X2VycihkZXYsCiYjNDM7CQkJICAgJiMzNDtYRFA6IGNhbm5vdCBhdHRhY2ggd2hpbGUgbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGlzIGFjdGl2ZVxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiAJaWYgKHByb2cgJmFtcDsmYW1wOyBkZXYtJmd0O210dSAmZ3Q7IE1BWF9YRFBfTVRVKSB7CiAJCW5ldGRldl93YXJuKGRldiwgJiMzNDtKdW1ibyBmcmFtZXMgbm90IHlldCBzdXBwb3J0ZWQgd2l0aCBYRFBcbiYjMzQ7KTsKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwpAQCAtMzA4Niw3ICYjNDM7MzEwMiw3IEBAIGludCBvdHgyX3JlYWxsb2NfbXNpeF92ZWN0b3JzKHN0cnVjdCBvdHgyX25pYyAqcGYpCiAJICogaW50ZXJydXB0IHJhbmdlIChRSU5ULCBDSU5ULCBHSU5ULCBFUlIgYW5kIFBPSVNPTiB2ZWN0b3JzKS4KIAkgKi8KIAludW1fdmVjID0gaHctJmd0O25peF9tc2l4b2ZmOwotCWlmIChwZi0mZ3Q7ZmxhZ3MgJmFtcDsgT1RYMl9GTEFHX1JFUF9NT0RFX0VOQUJMRUQpCiYjNDM7CWlmIChvdHgyX3Rlc3RfZmxhZyhwZiwgT1RYMl9GTEFHX1JFUF9NT0RFX0VOQUJMRUQpKQogCQludW1fdmVjICYjNDM7PSBOSVhfTEZfQ0lOVF9WRUNfU1RBUlQgJiM0MzsgaHctJmd0O21heF9xdWV1ZXM7CiAJZWxzZQogCQludW1fdmVjICYjNDM7PSBOSVhfTEZfUE9JU09OX1ZFQyAmIzQzOyAxOwpAQCAtMzI3Myw3ICYjNDM7MzI4OSw3IEBAIHN0YXRpYyBpbnQgb3R4Ml9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQogCXBmLSZndDtwZGV2ID0gcGRldjsKIAlwZi0mZ3Q7ZGV2ID0gZGV2OwogCXBmLSZndDt0b3RhbF92ZnMgPSBwY2lfc3Jpb3ZfZ2V0X3RvdGFsdmZzKHBkZXYpOwotCXBmLSZndDtmbGFncyB8PSBPVFgyX0ZMQUdfSU5URl9ET1dOOwomIzQzOwlvdHgyX3NldF9mbGFnKHBmLCBPVFgyX0ZMQUdfSU5URl9ET1dOKTsKIAogCWh3ID0gJmFtcDtwZi0mZ3Q7aHc7CiAJaHctJmd0O3BkZXYgPSBwZGV2OwpAQCAtMzMyOCwyMyAmIzQzOzMzNDQsMjMgQEAgc3RhdGljIGludCBvdHgyX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCiAJaWYgKGVycikKIAkJZ290byBlcnJfZGVsX21jYW1fZW50cmllczsKIAotCWlmIChwZi0mZ3Q7ZmxhZ3MgJmFtcDsgT1RYMl9GTEFHX05UVVBMRV9TVVBQT1JUKQomIzQzOwlpZiAob3R4Ml90ZXN0X2ZsYWcocGYsIE9UWDJfRkxBR19OVFVQTEVfU1VQUE9SVCkpCiAJCW5ldGRldi0mZ3Q7aHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9OVFVQTEU7CiAKLQlpZiAocGYtJmd0O2ZsYWdzICZhbXA7IE9UWDJfRkxBR19VQ0FTVF9GTFRSX1NVUFBPUlQpCiYjNDM7CWlmIChvdHgyX3Rlc3RfZmxhZyhwZiwgT1RYMl9GTEFHX1VDQVNUX0ZMVFJfU1VQUE9SVCkpCiAJCW5ldGRldi0mZ3Q7cHJpdl9mbGFncyB8PSBJRkZfVU5JQ0FTVF9GTFQ7CiAKIAkvKiBTdXBwb3J0IFRTTyBvbiB0YWcgaW50ZXJmYWNlICovCiAJbmV0ZGV2LSZndDt2bGFuX2ZlYXR1cmVzIHw9IG5ldGRldi0mZ3Q7ZmVhdHVyZXM7CiAJbmV0ZGV2LSZndDtod19mZWF0dXJlcyAgfD0gTkVUSUZfRl9IV19WTEFOX0NUQUdfVFggfAogCQkJCU5FVElGX0ZfSFdfVkxBTl9TVEFHX1RYOwotCWlmIChwZi0mZ3Q7ZmxhZ3MgJmFtcDsgT1RYMl9GTEFHX1JYX1ZMQU5fU1VQUE9SVCkKJiM0MzsJaWYgKG90eDJfdGVzdF9mbGFnKHBmLCBPVFgyX0ZMQUdfUlhfVkxBTl9TVVBQT1JUKSkKIAkJbmV0ZGV2LSZndDtod19mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1ZMQU5fQ1RBR19SWCB8CiAJCQkJICAgICAgIE5FVElGX0ZfSFdfVkxBTl9TVEFHX1JYOwogCW5ldGRldi0mZ3Q7ZmVhdHVyZXMgfD0gbmV0ZGV2LSZndDtod19mZWF0dXJlczsKIAogCS8qIEhXIHN1cHBvcnRzIHRjIG9mZmxvYWQgYnV0IG11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIG4tdHVwbGUgZmlsdGVycyAqLwotCWlmIChwZi0mZ3Q7ZmxhZ3MgJmFtcDsgT1RYMl9GTEFHX1RDX0ZMT1dFUl9TVVBQT1JUKQomIzQzOwlpZiAob3R4Ml90ZXN0X2ZsYWcocGYsIE9UWDJfRkxBR19UQ19GTE9XRVJfU1VQUE9SVCkpCiAJCW5ldGRldi0mZ3Q7aHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19UQzsKIAogCW5ldGRldi0mZ3Q7aHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9MT09QQkFDSyB8IE5FVElGX0ZfUlhBTEw7CkBAIC0zNTk1LDE4ICYjNDM7MzYxMSwxOCBAQCBzdGF0aWMgdm9pZCBvdHgyX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIAogCXBmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAotCXBmLSZndDtmbGFncyB8PSBPVFgyX0ZMQUdfUEZfU0hVVERPV047CiYjNDM7CW90eDJfc2V0X2ZsYWcocGYsIE9UWDJfRkxBR19QRl9TSFVURE9XTik7CiAKLQlpZiAocGYtJmd0O2ZsYWdzICZhbXA7IE9UWDJfRkxBR19UWF9UU1RBTVBfRU5BQkxFRCkKJiM0MzsJaWYgKG90eDJfdGVzdF9mbGFnKHBmLCBPVFgyX0ZMQUdfVFhfVFNUQU1QX0VOQUJMRUQpKQogCQlvdHgyX2NvbmZpZ19od190eF90c3RhbXAocGYsIGZhbHNlKTsKLQlpZiAocGYtJmd0O2ZsYWdzICZhbXA7IE9UWDJfRkxBR19SWF9UU1RBTVBfRU5BQkxFRCkKJiM0MzsJaWYgKG90eDJfdGVzdF9mbGFnKHBmLCBPVFgyX0ZMQUdfUlhfVFNUQU1QX0VOQUJMRUQpKQogCQlvdHgyX2NvbmZpZ19od19yeF90c3RhbXAocGYsIGZhbHNlKTsKIAogCS8qIERpc2FibGUgODAyLjN4IHBhdXNlIGZyYW1lcyAqLwotCWlmIChwZi0mZ3Q7ZmxhZ3MgJmFtcDsgT1RYMl9GTEFHX1JYX1BBVVNFX0VOQUJMRUQgfHwKLQkgICAgKHBmLSZndDtmbGFncyAmYW1wOyBPVFgyX0ZMQUdfVFhfUEFVU0VfRU5BQkxFRCkpIHsKLQkJcGYtJmd0O2ZsYWdzICZhbXA7PSB+T1RYMl9GTEFHX1JYX1BBVVNFX0VOQUJMRUQ7Ci0JCXBmLSZndDtmbGFncyAmYW1wOz0gfk9UWDJfRkxBR19UWF9QQVVTRV9FTkFCTEVEOwomIzQzOwlpZiAob3R4Ml90ZXN0X2ZsYWcocGYsIE9UWDJfRkxBR19SWF9QQVVTRV9FTkFCTEVEKSB8fAomIzQzOwkgICAgb3R4Ml90ZXN0X2ZsYWcocGYsIE9UWDJfRkxBR19UWF9QQVVTRV9FTkFCTEVEKSkgewomIzQzOwkJb3R4Ml9jbGVhcl9mbGFnKHBmLCBPVFgyX0ZMQUdfUlhfUEFVU0VfRU5BQkxFRCk7CiYjNDM7CQlvdHgyX2NsZWFyX2ZsYWcocGYsIE9UWDJfRkxBR19UWF9QQVVTRV9FTkFCTEVEKTsKIAkJb3R4Ml9jb25maWdfcGF1c2VfZnJtKHBmKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jCmluZGV4IDAzOWZkNDdlYmY1MjIuLjcwZDk5YWUzZGVmYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuYwpAQCAtMTYsNiAmIzQzOzE2LDggQEAKICNpbmNsdWRlICZsdDtuZXQvdGNfYWN0L3RjX21pcnJlZC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC90Y19hY3QvdGNfdmxhbi5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9pcHY2LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9wa3Rfc2NoZWQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L3NjaF9nZW5lcmljLmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7Y24xMGsuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O290eDJfY29tbW9uLmgmIzM0OwpAQCAtMzEsNiAmIzQzOzMzLDEwIEBACiAKICNkZWZpbmUgTUNBU1RfSU5WQUxJRF9HUlAJCSgtMVUpCiAjZGVmaW5lIFJBVEVfTUFOVElTU0FfQklUUwkJOAomIzQzOy8qIE1pbiBwZXItcXVldWUgZWdyZXNzIHNoYXBpbmcgcmF0ZSB0aGUgTklYIFRMWCBlbmNvZGVyIHN1cHBvcnRzICgyIE1icHMpLiAqLwomIzQzOyNkZWZpbmUgT1RYMl9NUVBSSU9fTUlOX1JBVEVfQllURVNfUFMJMjUwMDAwVUxMCiYjNDM7LyogTWF4IGVncmVzcyBzaGFwaW5nIHJhdGUgdGhlIE5JWCBUTFggZW5jb2RlciBzdXBwb3J0cyAoMTMwODE2IE1icHMpLiAqLwomIzQzOyNkZWZpbmUgT1RYMl9NUVBSSU9fTUFYX1JBVEVfQllURVNfUFMJKChNQVhfQlVSU1RfU0laRSAqIDEwMDAwMDBVTEwpIC8gOFVMTCkKIAogc3RhdGljIHZvaWQgb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTMyIGJ1cnN0LAogCQkJCSAgICAgIHUzMiAqYnVyc3RfZXhwLCB1MzIgKmJ1cnN0X21hbnRpc3NhKQpAQCAtNjEsNiAmIzQzOzY3LDkgQEAgc3RhdGljIHZvaWQgb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTMyIGJ1cnN0LAogCQkJKmJ1cnN0X21hbnRpc3NhID0gdG1wIC8gKDFVTEwgJmx0OyZsdDsgKCpidXJzdF9leHAgLSA3KSk7CiAJCX0KIAl9IGVsc2UgewomIzQzOwkJLyogYnVyc3QgMDogbGFyZ2VzdCBlbmNvZGFibGUgYnVyc3QgKENOMTBLX01BWF9CVVJTVF9TSVpFIG9uCiYjNDM7CQkgKiBDTjEwSyksIG5vdCBhIG1pbmltYWwgYnVyc3QuCiYjNDM7CQkgKi8KIAkJKmJ1cnN0X2V4cCA9IE1BWF9CVVJTVF9FWFBPTkVOVDsKIAkJKmJ1cnN0X21hbnRpc3NhID0gbWF4X21hbnRpc3NhOwogCX0KQEAgLTE1OSw3ICYjNDM7MTY4LDcgQEAgc3RhdGljIGludCBvdHgyX3RjX3ZhbGlkYXRlX2Zsb3coc3RydWN0IG90eDJfbmljICpuaWMsCiAJCQkJIHN0cnVjdCBmbG93X2FjdGlvbiAqYWN0aW9ucywKIAkJCQkgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQogewotCWlmIChuaWMtJmd0O2ZsYWdzICZhbXA7IE9UWDJfRkxBR19JTlRGX0RPV04pIHsKJiM0MzsJaWYgKG90eDJfdGVzdF9mbGFnKG5pYywgT1RYMl9GTEFHX0lOVEZfRE9XTikpIHsKIAkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgJiMzNDtJbnRlcmZhY2Ugbm90IGluaXRpYWxpemVkJiMzNDspOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0yMjMsNyAmIzQzOzIzMiw3IEBAIHN0YXRpYyBpbnQgb3R4Ml90Y19lZ3Jlc3NfbWF0Y2hhbGxfaW5zdGFsbChzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JaWYgKG5pYy0mZ3Q7ZmxhZ3MgJmFtcDsgT1RYMl9GTEFHX1RDX01BVENIQUxMX0VHUkVTU19FTkFCTEVEKSB7CiYjNDM7CWlmIChvdHgyX3Rlc3RfZmxhZyhuaWMsIE9UWDJfRkxBR19UQ19NQVRDSEFMTF9FR1JFU1NfRU5BQkxFRCkpIHsKIAkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywKIAkJCQkgICAmIzM0O09ubHkgb25lIEVncmVzcyBNQVRDSEFMTCByYXRlbGltaXRlciBjYW4gYmUgb2ZmbG9hZGVkJiMzNDspOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTI0NCw3ICYjNDM7MjUzLDcgQEAgc3RhdGljIGludCBvdHgyX3RjX2VncmVzc19tYXRjaGFsbF9pbnN0YWxsKHN0cnVjdCBvdHgyX25pYyAqbmljLAogCQkJCQkJICAgIG90eDJfY29udmVydF9yYXRlKGVudHJ5LSZndDtwb2xpY2UucmF0ZV9ieXRlc19wcykpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKLQkJbmljLSZndDtmbGFncyB8PSBPVFgyX0ZMQUdfVENfTUFUQ0hBTExfRUdSRVNTX0VOQUJMRUQ7CiYjNDM7CQlvdHgyX3NldF9mbGFnKG5pYywgT1RYMl9GTEFHX1RDX01BVENIQUxMX0VHUkVTU19FTkFCTEVEKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywKQEAgLTI2MSwxMyAmIzQzOzI3MCwxMyBAQCBzdGF0aWMgaW50IG90eDJfdGNfZWdyZXNzX21hdGNoYWxsX2RlbGV0ZShzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywKIAlzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2sgPSBjbHMtJmd0O2NvbW1vbi5leHRhY2s7CiAJaW50IGVycjsKIAotCWlmIChuaWMtJmd0O2ZsYWdzICZhbXA7IE9UWDJfRkxBR19JTlRGX0RPV04pIHsKJiM0MzsJaWYgKG90eDJfdGVzdF9mbGFnKG5pYywgT1RYMl9GTEFHX0lOVEZfRE9XTikpIHsKIAkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgJiMzNDtJbnRlcmZhY2Ugbm90IGluaXRpYWxpemVkJiMzNDspOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAllcnIgPSBvdHgyX3NldF9tYXRjaGFsbF9lZ3Jlc3NfcmF0ZShuaWMsIDAsIDApOwotCW5pYy0mZ3Q7ZmxhZ3MgJmFtcDs9IH5PVFgyX0ZMQUdfVENfTUFUQ0hBTExfRUdSRVNTX0VOQUJMRUQ7CiYjNDM7CW90eDJfY2xlYXJfZmxhZyhuaWMsIE9UWDJfRkxBR19UQ19NQVRDSEFMTF9FR1JFU1NfRU5BQkxFRCk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtNTA1LDcgJiM0Mzs1MTQsNyBAQCBzdGF0aWMgaW50IG90eDJfdGNfcGFyc2VfYWN0aW9ucyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywKIAkJCW1hcmsgPSBhY3QtJmd0O21hcms7CiAJCQlyZXEtJmd0O21hdGNoX2lkID0gbWFyayAmYW1wOyBPVFgyX1JYX01BVENIX0lEX01BU0s7CiAJCQlyZXEtJmd0O29wID0gTklYX1JYX0FDVElPTl9ERUZBVUxUOwotCQkJbmljLSZndDtmbGFncyB8PSBPVFgyX0ZMQUdfVENfTUFSS19FTkFCTEVEOwomIzQzOwkJCW90eDJfc2V0X2ZsYWcobmljLCBPVFgyX0ZMQUdfVENfTUFSS19FTkFCTEVEKTsKIAkJCXJlZmNvdW50X2luYygmYW1wO25pYy0mZ3Q7Zmxvd19jZmctJmd0O21hcmtfZmxvd3MpOwogCQkJYnJlYWs7CiAKQEAgLTk0Miw3ICYjNDM7OTUxLDcgQEAgc3RhdGljIHZvaWQgb3R4Ml9kZXN0cm95X3RjX2Zsb3dfbGlzdChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiAJc3RydWN0IG90eDJfZmxvd19jb25maWcgKmZsb3dfY2ZnID0gcGZ2Zi0mZ3Q7Zmxvd19jZmc7CiAJc3RydWN0IG90eDJfdGNfZmxvdyAqaXRlciwgKnRtcDsKIAotCWlmICghKHBmdmYtJmd0O2ZsYWdzICZhbXA7IE9UWDJfRkxBR19NQ0FNX0VOVFJJRVNfQUxMT0MpKQomIzQzOwlpZiAoIW90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19NQ0FNX0VOVFJJRVNfQUxMT0MpKQogCQlyZXR1cm47CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaXRlciwgdG1wLCAmYW1wO2Zsb3dfY2ZnLSZndDtmbG93X2xpc3RfdGMsIGxpc3QpIHsKQEAgLTExOTUsMTIgJiM0MzsxMjA0LDEyIEBAIHN0YXRpYyBpbnQgb3R4Ml90Y19kZWxfZmxvdyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywKIAkvKiBEaXNhYmxlIFRDIE1BUksgZmxhZyBpZiB0aGV5IGFyZSBubyBydWxlcyB3aXRoIHNrYmVkaXQgbWFyayBhY3Rpb24gKi8KIAlpZiAoZmxvd19ub2RlLSZndDtyZXEubWF0Y2hfaWQpCiAJCWlmICghcmVmY291bnRfZGVjX2FuZF90ZXN0KCZhbXA7Zmxvd19jZmctJmd0O21hcmtfZmxvd3MpKQotCQkJbmljLSZndDtmbGFncyAmYW1wOz0gfk9UWDJfRkxBR19UQ19NQVJLX0VOQUJMRUQ7CiYjNDM7CQkJb3R4Ml9jbGVhcl9mbGFnKG5pYywgT1RYMl9GTEFHX1RDX01BUktfRU5BQkxFRCk7CiAKIAlpZiAoZmxvd19ub2RlLSZndDtpc19hY3RfcG9saWNlKSB7CiAJCV9fY2xlYXJfYml0KGZsb3dfbm9kZS0mZ3Q7cnEsICZhbXA7bmljLSZndDtycV9ibWFwKTsKIAotCQlpZiAobmljLSZndDtmbGFncyAmYW1wOyBPVFgyX0ZMQUdfSU5URl9ET1dOKQomIzQzOwkJaWYgKG90eDJfdGVzdF9mbGFnKG5pYywgT1RYMl9GTEFHX0lOVEZfRE9XTikpCiAJCQlnb3RvIGZyZWVfbWNhbV9mbG93OwogCiAJCW11dGV4X2xvY2soJmFtcDtuaWMtJmd0O21ib3gubG9jayk7CkBAIC0xMjQ2LDEwICYjNDM7MTI1NSwxMCBAQCBzdGF0aWMgaW50IG90eDJfdGNfYWRkX2Zsb3coc3RydWN0IG90eDJfbmljICpuaWMsCiAJc3RydWN0IG5wY19pbnN0YWxsX2Zsb3dfcmVxICpyZXEsIGR1bW15OwogCWludCByYywgZXJyLCBlbnRyeTsKIAotCWlmICghKG5pYy0mZ3Q7ZmxhZ3MgJmFtcDsgT1RYMl9GTEFHX1RDX0ZMT1dFUl9TVVBQT1JUKSkKJiM0MzsJaWYgKCFvdHgyX3Rlc3RfZmxhZyhuaWMsIE9UWDJfRkxBR19UQ19GTE9XRVJfU1VQUE9SVCkpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JaWYgKG5pYy0mZ3Q7ZmxhZ3MgJmFtcDsgT1RYMl9GTEFHX0lOVEZfRE9XTikgewomIzQzOwlpZiAob3R4Ml90ZXN0X2ZsYWcobmljLCBPVFgyX0ZMQUdfSU5URl9ET1dOKSkgewogCQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCAmIzM0O0ludGVyZmFjZSBub3QgaW5pdGlhbGl6ZWQmIzM0Oyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTE0NDQsNyAmIzQzOzE0NTMsNyBAQCBzdGF0aWMgaW50IG90eDJfdGNfaW5ncmVzc19tYXRjaGFsbF9pbnN0YWxsKHN0cnVjdCBvdHgyX25pYyAqbmljLAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQlpZiAobmljLSZndDtmbGFncyAmYW1wOyBPVFgyX0ZMQUdfVENfTUFUQ0hBTExfSU5HUkVTU19FTkFCTEVEKSB7CiYjNDM7CWlmIChvdHgyX3Rlc3RfZmxhZyhuaWMsIE9UWDJfRkxBR19UQ19NQVRDSEFMTF9JTkdSRVNTX0VOQUJMRUQpKSB7CiAJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssCiAJCQkJICAgJiMzNDtPbmx5IG9uZSBpbmdyZXNzIE1BVENIQUxMIHJhdGVsaW1pdHRlciBjYW4gYmUgb2ZmbG9hZGVkJiMzNDspOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTE0NjksNyAmIzQzOzE0NzgsNyBAQCBzdGF0aWMgaW50IG90eDJfdGNfaW5ncmVzc19tYXRjaGFsbF9pbnN0YWxsKHN0cnVjdCBvdHgyX25pYyAqbmljLAogCQllcnIgPSBjbjEwa19zZXRfbWF0Y2hhbGxfaXBvbGljZXJfcmF0ZShuaWMsIGVudHJ5LSZndDtwb2xpY2UuYnVyc3QsIHJhdGUpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKLQkJbmljLSZndDtmbGFncyB8PSBPVFgyX0ZMQUdfVENfTUFUQ0hBTExfSU5HUkVTU19FTkFCTEVEOwomIzQzOwkJb3R4Ml9zZXRfZmxhZyhuaWMsIE9UWDJfRkxBR19UQ19NQVRDSEFMTF9JTkdSRVNTX0VOQUJMRUQpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLApAQCAtMTQ4NiwxMyAmIzQzOzE0OTUsMTMgQEAgc3RhdGljIGludCBvdHgyX3RjX2luZ3Jlc3NfbWF0Y2hhbGxfZGVsZXRlKHN0cnVjdCBvdHgyX25pYyAqbmljLAogCXN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayA9IGNscy0mZ3Q7Y29tbW9uLmV4dGFjazsKIAlpbnQgZXJyOwogCi0JaWYgKG5pYy0mZ3Q7ZmxhZ3MgJmFtcDsgT1RYMl9GTEFHX0lOVEZfRE9XTikgewomIzQzOwlpZiAob3R4Ml90ZXN0X2ZsYWcobmljLCBPVFgyX0ZMQUdfSU5URl9ET1dOKSkgewogCQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCAmIzM0O0ludGVyZmFjZSBub3QgaW5pdGlhbGl6ZWQmIzM0Oyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWVyciA9IGNuMTBrX2ZyZWVfbWF0Y2hhbGxfaXBvbGljZXIobmljKTsKLQluaWMtJmd0O2ZsYWdzICZhbXA7PSB+T1RYMl9GTEFHX1RDX01BVENIQUxMX0lOR1JFU1NfRU5BQkxFRDsKJiM0MzsJb3R4Ml9jbGVhcl9mbGFnKG5pYywgT1RYMl9GTEFHX1RDX01BVENIQUxMX0lOR1JFU1NfRU5BQkxFRCk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTYwMCwxNCAmIzQzOzE2MDksNzUwIEBAIHN0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19ibG9jayhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCQkJCQkgIG5pYywgbmljLCBpbmdyZXNzKTsKIH0KIAomIzQzOy8qIEZyZWUgdGhlIHBlci1xdWV1ZSBtaW4vbWF4IHJhdGUgY2FjaGVzLiAqLwomIzQzO3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUoc3RydWN0IG90eDJfbmljICpwZnZmKQomIzQzO3sKJiM0MzsJZGV2bV9rZnJlZShwZnZmLSZndDtkZXYsIHBmdmYtJmd0O21xcHJpby5taW5fcmF0ZSk7CiYjNDM7CWRldm1fa2ZyZWUocGZ2Zi0mZ3Q7ZGV2LCBwZnZmLSZndDttcXByaW8ubWF4X3JhdGUpOwomIzQzOwlwZnZmLSZndDttcXByaW8ubWluX3JhdGUgPSBOVUxMOwomIzQzOwlwZnZmLSZndDttcXByaW8ubWF4X3JhdGUgPSBOVUxMOwomIzQzOwlwZnZmLSZndDttcXByaW8uZmxhZ3MgPSAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG90eDJfbXFwcmlvX2FsbG9jX2NhY2hlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgYm9vbCByZXBsYWNpbmcpCiYjNDM7ewomIzQzOwl1MTYgbnVtX3R4cSA9IHBmdmYtJmd0O2h3Lm5vbl9xb3NfcXVldWVzOwomIzQzOwomIzQzOwlpZiAocmVwbGFjaW5nICZhbXA7JmFtcDsgcGZ2Zi0mZ3Q7bXFwcmlvLm1pbl9yYXRlICZhbXA7JmFtcDsgcGZ2Zi0mZ3Q7bXFwcmlvLm1heF9yYXRlKSB7CiYjNDM7CQltZW1zZXQocGZ2Zi0mZ3Q7bXFwcmlvLm1pbl9yYXRlLCAwLAomIzQzOwkJICAgICAgIG51bV90eHEgKiBzaXplb2YoKnBmdmYtJmd0O21xcHJpby5taW5fcmF0ZSkpOwomIzQzOwkJbWVtc2V0KHBmdmYtJmd0O21xcHJpby5tYXhfcmF0ZSwgMCwKJiM0MzsJCSAgICAgICBudW1fdHhxICogc2l6ZW9mKCpwZnZmLSZndDttcXByaW8ubWF4X3JhdGUpKTsKJiM0MzsJCXBmdmYtJmd0O21xcHJpby5mbGFncyA9IDA7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlvdHgyX21xcHJpb19mcmVlX2NhY2hlKHBmdmYpOwomIzQzOwomIzQzOwlwZnZmLSZndDttcXByaW8ubWluX3JhdGUgPSBkZXZtX2tjYWxsb2MocGZ2Zi0mZ3Q7ZGV2LCBudW1fdHhxLAomIzQzOwkJCQkJICAgICBzaXplb2YoKnBmdmYtJmd0O21xcHJpby5taW5fcmF0ZSksCiYjNDM7CQkJCQkgICAgIEdGUF9LRVJORUwpOwomIzQzOwlwZnZmLSZndDttcXByaW8ubWF4X3JhdGUgPSBkZXZtX2tjYWxsb2MocGZ2Zi0mZ3Q7ZGV2LCBudW1fdHhxLAomIzQzOwkJCQkJICAgICBzaXplb2YoKnBmdmYtJmd0O21xcHJpby5tYXhfcmF0ZSksCiYjNDM7CQkJCQkgICAgIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXBmdmYtJmd0O21xcHJpby5taW5fcmF0ZSB8fCAhcGZ2Zi0mZ3Q7bXFwcmlvLm1heF9yYXRlKSB7CiYjNDM7CQlvdHgyX21xcHJpb19mcmVlX2NhY2hlKHBmdmYpOwomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX3NuYXBfZnJlZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsCiYjNDM7CQkJCSAgc3RydWN0IG1xX29mZmxvYWRfc25hcCAqKnNuYXApCiYjNDM7ewomIzQzOwlpZiAoISpzbmFwKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlkZXZtX2tmcmVlKHBmdmYtJmd0O2RldiwgKnNuYXApOwomIzQzOwkqc25hcCA9IE5VTEw7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fc25hcF9jb3B5KHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwKJiM0MzsJCQkJIHN0cnVjdCBtcV9vZmZsb2FkX3NuYXAgKipkc3QsCiYjNDM7CQkJCSBjb25zdCBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0ID0gJmFtcDttcXByaW8tJmd0O3FvcHQ7CiYjNDM7CXN0cnVjdCBtcV9vZmZsb2FkX3NuYXAgKnNuYXA7CiYjNDM7CWludCB0YzsKJiM0MzsKJiM0MzsJaWYgKCEqZHN0KSB7CiYjNDM7CQlzbmFwID0gZGV2bV9remFsbG9jKHBmdmYtJmd0O2Rldiwgc2l6ZW9mKCpzbmFwKSwgR0ZQX0tFUk5FTCk7CiYjNDM7CQlpZiAoIXNuYXApCiYjNDM7CQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CQkqZHN0ID0gc25hcDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXNuYXAgPSAqZHN0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXNuYXAtJmd0O251bV90YyA9IHFvcHQtJmd0O251bV90YzsKJiM0MzsJZm9yICh0YyA9IDA7IHRjICZsdDsgVENfUU9QVF9NQVhfUVVFVUU7IHRjJiM0MzsmIzQzOykgewomIzQzOwkJc25hcC0mZ3Q7Y291bnRbdGNdID0gcW9wdC0mZ3Q7Y291bnRbdGNdOwomIzQzOwkJc25hcC0mZ3Q7b2Zmc2V0W3RjXSA9IHFvcHQtJmd0O29mZnNldFt0Y107CiYjNDM7CQlzbmFwLSZndDttaW5fcmF0ZVt0Y10gPSAwOwomIzQzOwkJc25hcC0mZ3Q7bWF4X3JhdGVbdGNdID0gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKHRjID0gMDsgdGMgJmx0OyBxb3B0LSZndDtudW1fdGM7IHRjJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKG1xcHJpby0mZ3Q7ZmxhZ3MgJmFtcDsgVENfTVFQUklPX0ZfTUlOX1JBVEUpCiYjNDM7CQkJc25hcC0mZ3Q7bWluX3JhdGVbdGNdID0gbXFwcmlvLSZndDttaW5fcmF0ZVt0Y107CiYjNDM7CQlpZiAobXFwcmlvLSZndDtmbGFncyAmYW1wOyBUQ19NUVBSSU9fRl9NQVhfUkFURSkKJiM0MzsJCQlzbmFwLSZndDttYXhfcmF0ZVt0Y10gPSBtcXByaW8tJmd0O21heF9yYXRlW3RjXTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBvdHgyX21xcHJpb19zdGFnZV9jdXIoc3RydWN0IG90eDJfbmljICpwZnZmLAomIzQzOwkJCQkgY29uc3Qgc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbykKJiM0Mzt7CiYjNDM7CXJldHVybiBvdHgyX21xcHJpb19zbmFwX2NvcHkocGZ2ZiwgJmFtcDtwZnZmLSZndDtjdXJfbXFfc25hcCwgbXFwcmlvKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fc25hcF9jb21taXQoc3RydWN0IG90eDJfbmljICpwZnZmKQomIzQzO3sKJiM0MzsJb3R4Ml9tcXByaW9fc25hcF9mcmVlKHBmdmYsICZhbXA7cGZ2Zi0mZ3Q7b2xkX21xX3NuYXApOwomIzQzOwlwZnZmLSZndDtvbGRfbXFfc25hcCA9IHBmdmYtJmd0O2N1cl9tcV9zbmFwOwomIzQzOwlwZnZmLSZndDtjdXJfbXFfc25hcCA9IE5VTEw7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX2NsZWFyX3JlcGxhY2Vfc3RhdGUoc3RydWN0IG90eDJfbmljICpwZnZmKQomIzQzO3sKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvLnJlcGxhY2Vfc2V0dXBfZG9uZSA9IGZhbHNlOwomIzQzOwlwZnZmLSZndDttcXByaW8ucmVwbGFjZV9ncmFmdF9kb25lID0gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIG90eDJfbXFwcmlvX21kcV9hbGxvY2F0ZWQoc3RydWN0IG90eDJfbmljICpwZnZmKQomIzQzO3sKJiM0MzsJcmV0dXJuIHBmdmYtJmd0O2h3LnR4c2NocV9jbnRbTklYX1RYU0NIX0xWTF9NRFFdICE9IDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByYXRlX2xpbWl0KTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IG90eDJfbXFwcmlvX3Jlc3RvcmVfb2xkKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtcV9vZmZsb2FkX3NuYXAgKnNuYXAgPSBwZnZmLSZndDtvbGRfbXFfc25hcDsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtJmd0O25ldGRldjsKJiM0MzsJdTE2IG51bV90eHEgPSBwZnZmLSZndDtody5ub25fcW9zX3F1ZXVlczsKJiM0MzsJaW50IHRjLCB0eHEsIGVycjsKJiM0MzsKJiM0MzsJaWYgKCFzbmFwKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWVyciA9IG90eDJfbXFwcmlvX2FsbG9jX2NhY2hlKHBmdmYsIGZhbHNlKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CW1lbXNldChwZnZmLSZndDttcXByaW8ubWluX3JhdGUsIDAsIG51bV90eHEgKiBzaXplb2YoKnBmdmYtJmd0O21xcHJpby5taW5fcmF0ZSkpOwomIzQzOwltZW1zZXQocGZ2Zi0mZ3Q7bXFwcmlvLm1heF9yYXRlLCAwLCBudW1fdHhxICogc2l6ZW9mKCpwZnZmLSZndDttcXByaW8ubWF4X3JhdGUpKTsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvLmZsYWdzID0gMDsKJiM0MzsKJiM0MzsJZm9yICh0YyA9IDA7IHRjICZsdDsgc25hcC0mZ3Q7bnVtX3RjOyB0YyYjNDM7JiM0MzspIHsKJiM0MzsJCXU2NCBtaW5fcmF0ZSA9IHNuYXAtJmd0O21pbl9yYXRlW3RjXTsKJiM0MzsJCXU2NCBtYXhfcmF0ZSA9IHNuYXAtJmd0O21heF9yYXRlW3RjXTsKJiM0MzsKJiM0MzsJCWlmIChtaW5fcmF0ZSkKJiM0MzsJCQlwZnZmLSZndDttcXByaW8uZmxhZ3MgfD0gVENfTVFQUklPX0ZfTUlOX1JBVEU7CiYjNDM7CQlpZiAobWF4X3JhdGUpCiYjNDM7CQkJcGZ2Zi0mZ3Q7bXFwcmlvLmZsYWdzIHw9IFRDX01RUFJJT19GX01BWF9SQVRFOwomIzQzOwomIzQzOwkJZm9yICh0eHEgPSBzbmFwLSZndDtvZmZzZXRbdGNdOwomIzQzOwkJICAgICB0eHEgJmx0OyBzbmFwLSZndDtvZmZzZXRbdGNdICYjNDM7IHNuYXAtJmd0O2NvdW50W3RjXTsgdHhxJiM0MzsmIzQzOykgewomIzQzOwkJCXBmdmYtJmd0O21xcHJpby5taW5fcmF0ZVt0eHFdID0gbWluX3JhdGU7CiYjNDM7CQkJcGZ2Zi0mZ3Q7bXFwcmlvLm1heF9yYXRlW3R4cV0gPSBtYXhfcmF0ZTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwluZXRkZXZfc2V0X251bV90YyhuZXRkZXYsIHNuYXAtJmd0O251bV90Yyk7CiYjNDM7CWZvciAodGMgPSAwOyB0YyAmbHQ7IHNuYXAtJmd0O251bV90YzsgdGMmIzQzOyYjNDM7KQomIzQzOwkJbmV0ZGV2X3NldF90Y19xdWV1ZShuZXRkZXYsIHRjLCBzbmFwLSZndDtjb3VudFt0Y10sCiYjNDM7CQkJCSAgICBzbmFwLSZndDtvZmZzZXRbdGNdKTsKJiM0MzsKJiM0MzsJaWYgKG90eDJfbXFwcmlvX21kcV9hbGxvY2F0ZWQocGZ2ZikpIHsKJiM0MzsJCWVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBSZWJ1aWxkIHRoZSBUWCBzY2hlZHVsZXIgdmlhIG5ldGRldiByZXN0YXJ0IHdoZW4gcnVubmluZzsgb3R4Ml9tcXByaW9fdXAoKQomIzQzOwkgKiBhbG9uZSBpcyBpbnN1ZmZpY2llbnQgYWZ0ZXIgYSBmYWlsZWQgcmVwbGFjZSB0aGF0IGFscmVhZHkgYm91bmNlZCB0aGUKJiM0MzsJICogaW50ZXJmYWNlLiBJZiBvcGVuIGZhaWxlZCwgVFggc2NoZWR1bGVycyB3ZXJlIGZyZWVkOyBkZWZlciBzaGFwZXIgcmVzdG9yZQomIzQzOwkgKiB0byB0aGUgbmV4dCBzdWNjZXNzZnVsIG5kb19vcGVuKCkgdmlhIG90eDJfbXFwcmlvX3VwKCkuCiYjNDM7CSAqLwomIzQzOwlwZnZmLSZndDttcXByaW8ucmF0ZV9saW1pdCA9IHRydWU7CiYjNDM7CiYjNDM7CWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKJiM0MzsJCWVyciA9IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KG5ldGRldiwgdHJ1ZSk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CX0gZWxzZSBpZiAocGZ2Zi0mZ3Q7aHcudHhzY2hxX2NudFtOSVhfVFhTQ0hfTFZMX1NNUV0pIHsKJiM0MzsJCWVyciA9IG90eDJfbXFwcmlvX3VwKHBmdmYpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CW90eDJfbXFwcmlvX3NuYXBfZnJlZShwZnZmLCAmYW1wO3BmdmYtJmd0O2N1cl9tcV9zbmFwKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX3NuYXBfZGVzdHJveShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiYjNDM7ewomIzQzOwlvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgJmFtcDtwZnZmLSZndDtjdXJfbXFfc25hcCk7CiYjNDM7CW90eDJfbXFwcmlvX3NuYXBfZnJlZShwZnZmLCAmYW1wO3BmdmYtJmd0O29sZF9tcV9zbmFwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fY2xlYXJfc3coc3RydWN0IG90eDJfbmljICpwZnZmKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtJmd0O25ldGRldjsKJiM0MzsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvLnJhdGVfbGltaXQgPSBmYWxzZTsKJiM0MzsJb3R4Ml9tcXByaW9fY2xlYXJfcmVwbGFjZV9zdGF0ZShwZnZmKTsKJiM0MzsJbmV0ZGV2X3NldF9udW1fdGMobmV0ZGV2LCAwKTsKJiM0MzsJb3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogVGVhciBkb3duIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZDogY2xlYXIgcGVyLXF1ZXVlIHNoYXBlcnMsCiYjNDM7ICogbXFwcmlvX3JhdGVfbGltaXQsIG5ldGRldiBUQyBtYXBwaW5ncywgYW5kIHRoZSBjYWNoZWQgcmF0ZXMuICBDYWxsZWQgb24KJiM0MzsgKiBleHBsaWNpdCBtcXByaW8gdGVhcmRvd24gKHRjIHFkaXNjIGRlbCkgYW5kIGVycm9yIGNsZWFudXAsIG5vdCBvbgomIzQzOyAqIHJvdXRpbmUgbmV0ZGV2IHN0b3Avb3BlbiBjeWNsZXMgd2hlcmUgdGhlIG9mZmxvYWQgc3RheXMgYWN0aXZlLgomIzQzOyAqLwomIzQzO2ludCBvdHgyX21xcHJpb19kb3duKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZikKJiM0Mzt7CiYjNDM7CWludCBlcnIgPSAwOwomIzQzOwomIzQzOwlpZiAoIXBmdmYtJmd0O21xcHJpby5yYXRlX2xpbWl0KQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmIChuZXRpZl9ydW5uaW5nKHBmdmYtJmd0O25ldGRldikgJmFtcDsmYW1wOwomIzQzOwkgICAgb3R4Ml9tcXByaW9fbWRxX2FsbG9jYXRlZChwZnZmKSkKJiM0MzsJCWVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTsKJiM0MzsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJbmV0ZGV2X3dhcm4ocGZ2Zi0mZ3Q7bmV0ZGV2LAomIzQzOwkJCSAgICAmIzM0O21xcHJpbzogZmFpbGVkIHRvIGNsZWFyIGhhcmR3YXJlIHNoYXBlcnM6ICVkOyBjbGVhcmluZyBzb2Z0d2FyZSBzdGF0ZVxuJiMzNDssCiYjNDM7CQkJICAgIGVycik7CiYjNDM7CQlvdHgyX21xcHJpb19jbGVhcl9zdyhwZnZmKTsKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJb3R4Ml9tcXByaW9fY2xlYXJfc3cocGZ2Zik7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtJmd0O25ldGRldjsKJiM0MzsJaW50IHR4cSwgZXJyOwomIzQzOwomIzQzOwlpZiAoIXBmdmYtJmd0O21xcHJpby5yYXRlX2xpbWl0KQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmICghcGZ2Zi0mZ3Q7bXFwcmlvLm1pbl9yYXRlIHx8ICFwZnZmLSZndDttcXByaW8ubWF4X3JhdGUpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJZm9yICh0eHEgPSAwOyB0eHEgJmx0OyBwZnZmLSZndDtody5ub25fcW9zX3F1ZXVlczsgdHhxJiM0MzsmIzQzOykgewomIzQzOwkJdTY0IG1pbl9yYXRlID0gMCwgbWF4X3JhdGUgPSAwOwomIzQzOwomIzQzOwkJaWYgKHBmdmYtJmd0O21xcHJpby5mbGFncyAmYW1wOyBUQ19NUVBSSU9fRl9NSU5fUkFURSkKJiM0MzsJCQltaW5fcmF0ZSA9IHBmdmYtJmd0O21xcHJpby5taW5fcmF0ZVt0eHFdOwomIzQzOwkJaWYgKHBmdmYtJmd0O21xcHJpby5mbGFncyAmYW1wOyBUQ19NUVBSSU9fRl9NQVhfUkFURSkKJiM0MzsJCQltYXhfcmF0ZSA9IHBmdmYtJmd0O21xcHJpby5tYXhfcmF0ZVt0eHFdOwomIzQzOwomIzQzOwkJaWYgKCFtaW5fcmF0ZSAmYW1wOyZhbXA7ICFtYXhfcmF0ZSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWVyciA9IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIocGZ2ZiwgdHhxLCBtaW5fcmF0ZSwKJiM0MzsJCQkJCQkgICBtYXhfcmF0ZSk7CiYjNDM7CQlpZiAoZXJyKSB7CiYjNDM7CQkJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkJCSAgICYjMzQ7bXFwcmlvOiBmYWlsZWQgdG8gcmVzdG9yZSBzaGFwZXIgZm9yIHR4cSAlZDogJWRcbiYjMzQ7LAomIzQzOwkJCQkgICB0eHEsIGVycik7CiYjNDM7CQkJcmV0dXJuIGVycjsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogUmVzdGFydCB0aGUgbmV0ZGV2IHRvIHJlcHJvZ3JhbSB0aGUgVFggc2NoZWR1bGVyIGhpZXJhcmNoeSBmb3IgbXFwcmlvCiYjNDM7ICogYmFuZHdpZHRoIG9mZmxvYWQuICBCb3RoIG1xcHJpbyBhZGQgYW5kIGRlbGV0ZSAod2hlbiBvZmZsb2FkIHdhcyBhY3RpdmUpCiYjNDM7ICogdGFrZSB0aGlzIHBhdGggdmlhIG5kb19zdG9wKCkvbmRvX29wZW4oKSBzbyBWRi1zcGVjaWZpYyBvcGVuIGxvZ2ljIChlLmcuCiYjNDM7ICogTEJLIGNhcnJpZXIgb24pIHJ1bnMgY29ycmVjdGx5LgomIzQzOyAqCiYjNDM7ICogSW50ZW50aW9uYWwgYmVoYXZpb3VyOiB0aGlzIGZ1bGwgc3RvcC9vcGVuIGN5Y2xlIGRyb3BzIGluLWZsaWdodCB0cmFmZmljCiYjNDM7ICogKGNhcnJpZXIgb2ZmLCBJUlEvTkFQSSB0ZWFyZG93biwgcXVldWUgZHJhaW4pLiAgVGhlIE5JWCBUWCBzY2hlZHVsZXIgbXVzdAomIzQzOyAqIGJlIHJlYWxsb2NhdGVkIChlLmcuIG9uZSBTTVEgcGVyIG5vbi1Rb1MgcXVldWUpIGFuZCBjYW5ub3QgYmUgcmVwcm9ncmFtbWVkCiYjNDM7ICogbGl2ZSB0b2RheSwgc28gYSBuZXRkZXYgYm91bmNlIGlzIHJlcXVpcmVkIG9uIGV2ZXJ5IG1xcHJpbyBhZGQsIHJlcGxhY2UsCiYjNDM7ICogZGVsZXRlLCBhbmQgcm9sbGJhY2suICBVc2VycyBzZWUgYSBicmllZiBjb25uZWN0aXZpdHkgYmxpcDsgdGhpcyBpcyBub3QgYQomIzQzOyAqIGJ1ZyB0byAmIzM0O2ZpeCYjMzQ7IHdpdGhvdXQgaW1wbGVtZW50aW5nIHRoZSBsaXZlLXJlcHJvZ3JhbW1pbmcgcGF0aCBub3RlZCBiZWxvdy4KJiM0MzsgKiBJZiBvcGVuIGZhaWxzLCB0aGUgaW50ZXJmYWNlIGlzIGxlZnQgYWRtaW5pc3RyYXRpdmVseSBkb3duIHdpdGhvdXQgY2FsbGluZwomIzQzOyAqIG5kb19zdG9wKCkgYWdhaW4gb24gcmVzb3VyY2VzIGFscmVhZHkgdG9ybiBkb3duIGJ5IHRoZSBvcGVuIGVycm9yIHBhdGguCiYjNDM7ICoKJiM0MzsgKiBRdWllc2NlIHRoZSB0cmFuc21pdCBwYXRoIGxpa2UgX19kZXZfY2xvc2VfbWFueSgpIGJlZm9yZSBuZG9fc3RvcCgpIHNvCiYjNDM7ICogb3R4Ml94bWl0KCkgY2Fubm90IHJhY2Ugb3R4Ml9mcmVlX3F1ZXVlX21lbSgpLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByYXRlX2xpbWl0KQomIzQzO3sKJiM0MzsJc3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHMgPSBuZXRkZXYtJmd0O25ldGRldl9vcHM7CiYjNDM7CWJvb2wgcnVubmluZyA9IG5ldGlmX3J1bm5pbmcobmV0ZGV2KTsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJLyogVE9ETzogRXhwbG9yZSBsaXZlIFRYIHNjaGVkdWxlciByZXByb2dyYW1taW5nIHRvIGF2b2lkIGEgZnVsbAomIzQzOwkgKiBuZG9fc3RvcCgpL25kb19vcGVuKCkgYm91bmNlIG9uIGV2ZXJ5IG1xcHJpbyBjaGFuZ2UuCiYjNDM7CSAqLwomIzQzOwluZXRkZXZfaW5mbyhuZXRkZXYsCiYjNDM7CQkgICAgJiMzNDttcXByaW86IHJlc3RhcnRpbmcgaW50ZXJmYWNlIHRvIHJlcHJvZ3JhbSBUWCBzY2hlZHVsZXI7IGluLWZsaWdodCB0cmFmZmljIHdpbGwgYmUgZHJvcHBlZFxuJiMzNDspOwomIzQzOwomIzQzOwlpZiAocnVubmluZykgewomIzQzOwkJY2xlYXJfYml0KF9fTElOS19TVEFURV9TVEFSVCwgJmFtcDtuZXRkZXYtJmd0O3N0YXRlKTsKJiM0MzsJCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7IC8qIENvbW1pdCBuZXRpZl9ydW5uaW5nKCkuICovCiYjNDM7CX0KJiM0MzsJZGV2X2RlYWN0aXZhdGUobmV0ZGV2LCB0cnVlKTsKJiM0MzsKJiM0MzsJZXJyID0gb3BzLSZndDtuZG9fc3RvcChuZXRkZXYpOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQlpZiAocnVubmluZykgewomIzQzOwkJCXNldF9iaXQoX19MSU5LX1NUQVRFX1NUQVJULCAmYW1wO25ldGRldi0mZ3Q7c3RhdGUpOwomIzQzOwkJCWRldl9hY3RpdmF0ZShuZXRkZXYpOwomIzQzOwkJfQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBTZXQgYmVmb3JlIG5kb19vcGVuKCkgc28gb3R4Ml90eHNjaF9hbGxvYygpIHdpZGVucyBTTVEgYWxsb2NhdGlvbi4KJiM0MzsJICogT24gdGVhcmRvd24sIGRyb3AgbXFwcmlvIHNvZnR3YXJlIHN0YXRlIHNvIG5kb19vcGVuKCkgZG9lcyBub3QKJiM0MzsJICogcmUtYXBwbHkgYmFuZHdpZHRoIGxpbWl0cyB2aWEgb3R4Ml9tcXByaW9fdXAoKSBhZnRlciB0aGUga2VybmVsCiYjNDM7CSAqIHJlbW92ZWQgdGhlIHFkaXNjLgomIzQzOwkgKi8KJiM0MzsJaWYgKHJhdGVfbGltaXQpCiYjNDM7CQlwZnZmLSZndDttcXByaW8ucmF0ZV9saW1pdCA9IHRydWU7CiYjNDM7CWVsc2UKJiM0MzsJCW90eDJfbXFwcmlvX2NsZWFyX3N3KHBmdmYpOwomIzQzOwomIzQzOwllcnIgPSBvcHMtJmd0O25kb19vcGVuKG5ldGRldik7CiYjNDM7CWlmICghZXJyICZhbXA7JmFtcDsgcnVubmluZykgewomIzQzOwkJc2V0X2JpdChfX0xJTktfU1RBVEVfU1RBUlQsICZhbXA7bmV0ZGV2LSZndDtzdGF0ZSk7CiYjNDM7CQlkZXZfYWN0aXZhdGUobmV0ZGV2KTsKJiM0MzsJfSBlbHNlIGlmIChlcnIpIHsKJiM0MzsJCW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJCSAgICYjMzQ7RmFpbGVkIHRvIHJlc3RhcnQgZGV2aWNlIGFmdGVyIG1xcHJpbyBjaGFuZ2U6ICVkXG4mIzM0OywKJiM0MzsJCQkgICBlcnIpOwomIzQzOwkJLyogbmRvX29wZW4oKSBhbHJlYWR5IGZyZWVkIHRoZSBUWCBzY2hlZHVsZXJzIG9uIGZhaWx1cmUgd2hpbGUKJiM0MzsJCSAqIG5ldGlmX3J1bm5pbmcoKSBtYXkgc3RpbGwgYmUgdHJ1ZTsgZHJvcCBtcXByaW8gc29mdHdhcmUgc3RhdGUKJiM0MzsJCSAqIG9ubHkgaW5zdGVhZCBvZiBzZW5kaW5nIHNoYXBlciBjbGVhcnMgdG8gZnJlZWQgcXVldWVzLgomIzQzOwkJICovCiYjNDM7CQlvdHgyX21xcHJpb19jbGVhcl9zdyhwZnZmKTsKJiM0MzsJCS8qIG5kb19vcGVuKCkgcm9sbHMgYmFjayBvbiBmYWlsdXJlOyBtYXJrIHRoZSBpbnRlcmZhY2UgZG93biBzbwomIzQzOwkJICogbmV0aWZfY2xvc2UoKSBkb2VzIG5vdCBpbnZva2UgbmRvX3N0b3AoKSBvbiBmcmVlZCBOQVBJL3F1ZXVlCiYjNDM7CQkgKiBzdGF0ZS4gQ2FsbGVyIGhvbGRzIFJUTkw7IGRldl9jbG9zZSgpIHdvdWxkIGRlYWRsb2NrLgomIzQzOwkJICovCiYjNDM7CQlvdHgyX3NldF9mbGFnKHBmdmYsIE9UWDJfRkxBR19JTlRGX0RPV04pOwomIzQzOwkJLyogdmlzaWJsZSB0byBvdHgyX3N0b3AoKSBvbiBvdGhlciBjcHVzICovCiYjNDM7CQlzbXBfd21iKCk7CiYjNDM7CQluZXRpZl9jbG9zZShuZXRkZXYpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fdmFsaWRhdGVfdGNfcmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAomIzQzOwkJCQkJc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLAomIzQzOwkJCQkJdTY0IHJhdGUsIHUzMiBxY291bnQsIGludCB0YywKJiM0MzsJCQkJCWNvbnN0IGNoYXIgKm5hbWUpCiYjNDM7ewomIzQzOwlpZiAoIXJhdGUpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKHFjb3VudCAmbHQ7PSAxKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CS8qIFRPRE86IG1xcHJpbyBtaW5fcmF0ZS9tYXhfcmF0ZSBhcmUgcGVyIHRyYWZmaWMgY2xhc3MsIGJ1dCBiYW5kd2lkdGgKJiM0MzsJICogb2ZmbG9hZCBzaGFwZXMgb24gcGVyLXF1ZXVlIE1EUSBub2RlcyBwYXJlbnRlZCB1bmRlciBhIHNpbmdsZSBUTDQuCiYjNDM7CSAqIFdpdGhvdXQgcGVyLVRDIFRMNCBzaGFwZXJzIHRoZSBkcml2ZXIgY2Fubm90IGhvbm9yIFRDLWxldmVsIGxpbWl0cwomIzQzOwkgKiBmb3IgYSB0cmFmZmljIGNsYXNzIHRoYXQgc3BhbnMgbXVsdGlwbGUgcXVldWVzIHdpdGhvdXQgZWl0aGVyCiYjNDM7CSAqIGRpdmlkaW5nIHRoZSByYXRlIGFjcm9zcyBxdWV1ZXMgKHVBUEkgbWlzbWF0Y2gpIG9yIGV4Y2VlZGluZyB0aGUgVEMKJiM0MzsJICogY2FwIHdoZW4gZXZlcnkgbWVtYmVyIHF1ZXVlIGlzIGFjdGl2ZS4gUmVqZWN0IHVudGlsIHBlci1UQyBUTDQKJiM0MzsJICogc2hhcGluZyBjYW4gYmUgaW1wbGVtZW50ZWQgd2l0aG91dCBhbGxvY2F0aW5nIGFkZGl0aW9uYWwgVEw0IG5vZGVzCiYjNDM7CSAqIGJleW9uZCB0aGUgZXhpc3RpbmcgaGllcmFyY2h5LgomIzQzOwkgKi8KJiM0MzsJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkgICAmIzM0O21xcHJpbzogJXMgcmF0ZSBmb3IgdGMgJWQgbm90IHN1cHBvcnRlZCB3aXRoICV1IHF1ZXVlc1xuJiMzNDssCiYjNDM7CQkgICBuYW1lLCB0YywgcWNvdW50KTsKJiM0MzsJTkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssCiYjNDM7CQkJICAgICAgICYjMzQ7bXFwcmlvOiAlcyByYXRlIGZvciB0YyAlZCBub3Qgc3VwcG9ydGVkIHdpdGggJXUgcXVldWVzJiMzNDssCiYjNDM7CQkJICAgICAgIG5hbWUsIHRjLCBxY291bnQpOwomIzQzOwlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fdmFsaWRhdGVfdHhxcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAomIzQzOwkJCQkgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaywKJiM0MzsJCQkJICAgICBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwomIzQzOwl1MTYgbnVtX3R4cSA9IHBmdmYtJmd0O2h3Lm5vbl9xb3NfcXVldWVzOwomIzQzOwlpbnQgdGMsIHR4cTsKJiM0MzsKJiM0MzsJaWYgKHFvcHQtJmd0O251bV90YyAmZ3Q7IG51bV90eHEpIHsKJiM0MzsJCW5ldGRldl9lcnIobmV0ZGV2LCAmIzM0O051bWJlciBvZiBUQ3MgKCV1KSBleGNlZWRzIGh3IHF1ZXVlcyAldVxuJiMzNDssCiYjNDM7CQkJICAgcW9wdC0mZ3Q7bnVtX3RjLCBudW1fdHhxKTsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLAomIzQzOwkJCQkgICAgICAgJiMzNDtOdW1iZXIgb2YgVENzICgldSkgZXhjZWVkcyBodyBxdWV1ZXMgJXUmIzM0OywKJiM0MzsJCQkJICAgICAgIHFvcHQtJmd0O251bV90YywgbnVtX3R4cSk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAobnVtX3R4cSAmZ3Q7IE1BWF9UWFNDSFFfUEVSX0ZVTkMpIHsKJiM0MzsJCW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJCSAgICYjMzQ7TnVtYmVyIG9mIHF1ZXVlcyAoJXUpIGV4Y2VlZHMgbWF4IHNjaGVkdWxlciBxdWV1ZXMgJXVcbiYjMzQ7LAomIzQzOwkJCSAgIG51bV90eHEsIE1BWF9UWFNDSFFfUEVSX0ZVTkMpOwomIzQzOwkJTkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssCiYjNDM7CQkJCSAgICAgICAmIzM0O051bWJlciBvZiBxdWV1ZXMgKCV1KSBleGNlZWRzIG1heCBzY2hlZHVsZXIgcXVldWVzICV1JiMzNDssCiYjNDM7CQkJCSAgICAgICBudW1fdHhxLCBNQVhfVFhTQ0hRX1BFUl9GVU5DKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWZvciAodGMgPSAwOyB0YyAmbHQ7IHFvcHQtJmd0O251bV90YzsgdGMmIzQzOyYjNDM7KSB7CiYjNDM7CQl1MzIgcWNvdW50ID0gcW9wdC0mZ3Q7Y291bnRbdGNdOwomIzQzOwomIzQzOwkJZm9yICh0eHEgPSBxb3B0LSZndDtvZmZzZXRbdGNdOwomIzQzOwkJICAgICB0eHEgJmx0OyBxb3B0LSZndDtvZmZzZXRbdGNdICYjNDM7IHFjb3VudDsgdHhxJiM0MzsmIzQzOykgewomIzQzOwkJCWlmICh0eHEgJmd0Oz0gbnVtX3R4cSkgewomIzQzOwkJCQluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCQkJCSAgICYjMzQ7bXFwcmlvOiB0eHEgJWQgZXhjZWVkcyBvZmZsb2FkIHF1ZXVlIGNvdW50ICV1XG4mIzM0OywKJiM0MzsJCQkJCSAgIHR4cSwgbnVtX3R4cSk7CiYjNDM7CQkJCU5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLAomIzQzOwkJCQkJCSAgICAgICAmIzM0O21xcHJpbzogdHhxICVkIGV4Y2VlZHMgb2ZmbG9hZCBxdWV1ZSBjb3VudCAldSYjMzQ7LAomIzQzOwkJCQkJCSAgICAgICB0eHEsIG51bV90eHEpOwomIzQzOwkJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCQl9CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIG90eDJfbXFwcmlvX3JhdGVfdmFsaWQodTY0IHJhdGVfYnl0ZXNfcHMpCiYjNDM7ewomIzQzOwl1NjQgbWJwczsKJiM0MzsKJiM0MzsJaWYgKCFyYXRlX2J5dGVzX3BzKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CWlmIChyYXRlX2J5dGVzX3BzICZsdDsgT1RYMl9NUVBSSU9fTUlOX1JBVEVfQllURVNfUFMpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlmIChyYXRlX2J5dGVzX3BzICZndDsgT1RYMl9NUVBSSU9fTUFYX1JBVEVfQllURVNfUFMpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlmIChyYXRlX2J5dGVzX3BzICZndDsgZGl2X3U2NChVNjRfTUFYLCA4KSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJbWJwcyA9IG90eDJfY29udmVydF9yYXRlKHJhdGVfYnl0ZXNfcHMpOwomIzQzOwlyZXR1cm4gaWxvZzIobWJwcyAvIDIpICZsdDs9IE1BWF9SQVRFX0VYUE9ORU5UOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwKJiM0MzsJCQkJICAgc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9ICZhbXA7bXFwcmlvLSZndDtxb3B0OwomIzQzOwlib29sIGhhZF9tcXByaW8gPSBwZnZmLSZndDttcXByaW8ucmF0ZV9saW1pdDsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtJmd0O25ldGRldjsKJiM0MzsJYm9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcobmV0ZGV2KTsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJcW9wdC0mZ3Q7aHcgPSAwOwomIzQzOwomIzQzOwkvKiB0YyBxZGlzYyByZXBsYWNlIHJ1bnMgc2V0dXAgb24gdGhlIG5ldyBtcXByaW8gYmVmb3JlIGRlc3Ryb3lpbmcgdGhlCiYjNDM7CSAqIG9sZCBvbmUuIHJlcGxhY2Vfc2V0dXBfZG9uZSBhbmQgVENfUk9PVF9HUkFGVCBkaXN0aW5ndWlzaCBzdGFsZQomIzQzOwkgKiBvbGQtaW5zdGFuY2UgdGVhcmRvd24gZnJvbSBncmFmdCBmYWlsdXJlIGFmdGVyIHNldHVwLgomIzQzOwkgKi8KJiM0MzsJaWYgKHBmdmYtJmd0O21xcHJpby5yZXBsYWNlX3NldHVwX2RvbmUgJmFtcDsmYW1wOyBwZnZmLSZndDtjdXJfbXFfc25hcCkgewomIzQzOwkJZXJyID0gMDsKJiM0MzsJCWlmIChwZnZmLSZndDttcXByaW8ucmVwbGFjZV9ncmFmdF9kb25lKQomIzQzOwkJCW90eDJfbXFwcmlvX3NuYXBfY29tbWl0KHBmdmYpOwomIzQzOwkJZWxzZQomIzQzOwkJCWVyciA9IG90eDJfbXFwcmlvX3Jlc3RvcmVfb2xkKHBmdmYpOwomIzQzOwkJb3R4Ml9tcXByaW9fY2xlYXJfcmVwbGFjZV9zdGF0ZShwZnZmKTsKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogU2tpcCB0aGUgbmV0ZGV2IHJlc3RhcnQgd2hlbiBtcXByaW8gb2ZmbG9hZCB3YXMgbm90IGFjdGl2ZS4gKi8KJiM0MzsJaWYgKCFoYWRfbXFwcmlvKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmIChpZl91cCkgewomIzQzOwkJaW50IGRvd25fZXJyLCBlcnI7CiYjNDM7CiYjNDM7CQlkb3duX2VyciA9IG90eDJfbXFwcmlvX2Rvd24ocGZ2Zik7CiYjNDM7CQllcnIgPSBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihuZXRkZXYsIGZhbHNlKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJcmV0dXJuIGVycjsKJiM0MzsJCXJldHVybiBkb3duX2VycjsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBuZG9fc3RvcCgpIGFscmVhZHkgZnJlZWQgdGhlIFRYIHNjaGVkdWxlciBUTCBub2RlczsgZHJvcCBzb2Z0d2FyZQomIzQzOwkgKiBzdGF0ZSBvbmx5LgomIzQzOwkgKi8KJiM0MzsJb3R4Ml9tcXByaW9fY2xlYXJfc3cocGZ2Zik7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfbXFwcmlvKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiYjNDM7CQkJCXN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2sgPSBtcXByaW8tJmd0O2V4dGFjazsKJiM0MzsJc3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJc3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0ID0gJmFtcDttcXByaW8tJmd0O3FvcHQ7CiYjNDM7CWJvb2wgcmVwbGFjaW5nID0gcGZ2Zi0mZ3Q7bXFwcmlvLnJhdGVfbGltaXQ7CiYjNDM7CWJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKG5ldGRldik7CiYjNDM7CWludCB0YywgdHhxLCBlcnIsIGk7CiYjNDM7CiYjNDM7CWlmICghcW9wdC0mZ3Q7aHcpCiYjNDM7CQlyZXR1cm4gb3R4Ml90ZWFyZG93bl90Y19tcXByaW8ocGZ2ZiwgbXFwcmlvKTsKJiM0MzsKJiM0MzsJaWYgKCFpZl91cCkgewomIzQzOwkJbmV0ZGV2X2VycihuZXRkZXYsICYjMzQ7bXFwcmlvOiBzZXR1cCByZXF1aXJlcyBpbnRlcmZhY2UgVVBcbiYjMzQ7KTsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssICYjMzQ7bXFwcmlvOiBzZXR1cCByZXF1aXJlcyBpbnRlcmZhY2UgVVAmIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKG1xcHJpby0mZ3Q7c2hhcGVyICE9IFRDX01RUFJJT19TSEFQRVJfQldfUkFURSkgewomIzQzOwkJbmV0ZGV2X2VycihuZXRkZXYsICYjMzQ7VW5zdXBwb3J0ZWQgbXFwcmlvIHNoYXBlciAlI3hcbiYjMzQ7LCBtcXByaW8tJmd0O3NoYXBlcik7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjaywgJiMzNDtVbnN1cHBvcnRlZCBtcXByaW8gc2hhcGVyICUjeCYjMzQ7LAomIzQzOwkJCQkgICAgICAgbXFwcmlvLSZndDtzaGFwZXIpOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghdGVzdF9iaXQoUU9TX0NJUl9QSVJfU1VQUE9SVCwgJmFtcDtwZnZmLSZndDtody5jYXBfZmxhZykpIHsKJiM0MzsJCW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJCSAgICYjMzQ7bXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCByZXF1aXJlcyBDSVImIzQzO1BJUiBzdXBwb3J0XG4mIzM0Oyk7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLAomIzQzOwkJCQkgICAmIzM0O21xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgcmVxdWlyZXMgQ0lSJiM0MztQSVIgc3VwcG9ydCYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoaXNfb3R4Ml9zZHBfcmVwKHBmdmYtJmd0O3BkZXYpKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwgJiMzNDttcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIG5vdCBzdXBwb3J0ZWQgb24gU0RQIHJlcFxuJiMzNDspOwomIzQzOwkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywKJiM0MzsJCQkJICAgJiMzNDttcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIG5vdCBzdXBwb3J0ZWQgb24gU0RQIHJlcCYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAocGZ2Zi0mZ3Q7cGZjX2VuKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCQkgICAmIzM0O21xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFBGQyBpcyBlbmFibGVkXG4mIzM0Oyk7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLAomIzQzOwkJCQkgICAmIzM0O21xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFBGQyBpcyBlbmFibGVkJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChwZnZmLSZndDt4ZHBfcHJvZykgewomIzQzOwkJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkJICAgJiMzNDttcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBYRFAgaXMgYWN0aXZlXG4mIzM0Oyk7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLAomIzQzOwkJCQkgICAmIzM0O21xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFhEUCBpcyBhY3RpdmUmIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFsaXN0X2VtcHR5KCZhbXA7cGZ2Zi0mZ3Q7cW9zLnFvc190cmVlKSkgewomIzQzOwkJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkJICAgJiMzNDttcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBIVEIgaXMgYWN0aXZlXG4mIzM0Oyk7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLAomIzQzOwkJCQkgICAmIzM0O21xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIEhUQiBpcyBhY3RpdmUmIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZm9yICh0YyA9IDA7IHRjICZsdDsgcW9wdC0mZ3Q7bnVtX3RjOyB0YyYjNDM7JiM0MzspIHsKJiM0MzsJCXU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDsKJiM0MzsJCXUzMiBxY291bnQgPSBxb3B0LSZndDtjb3VudFt0Y107CiYjNDM7CiYjNDM7CQlpZiAobXFwcmlvLSZndDtmbGFncyAmYW1wOyBUQ19NUVBSSU9fRl9NSU5fUkFURSkKJiM0MzsJCQltaW5fcmF0ZSA9IG1xcHJpby0mZ3Q7bWluX3JhdGVbdGNdOwomIzQzOwkJaWYgKG1xcHJpby0mZ3Q7ZmxhZ3MgJmFtcDsgVENfTVFQUklPX0ZfTUFYX1JBVEUpCiYjNDM7CQkJbWF4X3JhdGUgPSBtcXByaW8tJmd0O21heF9yYXRlW3RjXTsKJiM0MzsKJiM0MzsJCWlmIChtaW5fcmF0ZSAmYW1wOyZhbXA7IG1heF9yYXRlICZhbXA7JmFtcDsgbWluX3JhdGUgJmd0OyBtYXhfcmF0ZSkgewomIzQzOwkJCW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJCQkgICAmIzM0O21pbl9yYXRlICVsbHUgZXhjZWVkcyBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZFxuJiMzNDssCiYjNDM7CQkJCSAgIG1pbl9yYXRlLCBtYXhfcmF0ZSwgdGMpOwomIzQzOwkJCU5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLAomIzQzOwkJCQkJICAgICAgICYjMzQ7bWluX3JhdGUgJWxsdSBleGNlZWRzIG1heF9yYXRlICVsbHUgZm9yIHRjICVkJiMzNDssCiYjNDM7CQkJCQkgICAgICAgbWluX3JhdGUsIG1heF9yYXRlLCB0Yyk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAobXFwcmlvLSZndDtmbGFncyAmYW1wOyBUQ19NUVBSSU9fRl9NSU5fUkFURSkgewomIzQzOwkJCWVyciA9IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3RjX3JhdGUobmV0ZGV2LCBleHRhY2ssIG1pbl9yYXRlLAomIzQzOwkJCQkJCQkgICBxY291bnQsIHRjLCAmIzM0O21pbiYjMzQ7KTsKJiM0MzsJCQlpZiAoZXJyKQomIzQzOwkJCQlyZXR1cm4gZXJyOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKG1xcHJpby0mZ3Q7ZmxhZ3MgJmFtcDsgVENfTVFQUklPX0ZfTUFYX1JBVEUpIHsKJiM0MzsJCQllcnIgPSBvdHgyX21xcHJpb192YWxpZGF0ZV90Y19yYXRlKG5ldGRldiwgZXh0YWNrLCBtYXhfcmF0ZSwKJiM0MzsJCQkJCQkJICAgcWNvdW50LCB0YywgJiMzNDttYXgmIzM0Oyk7CiYjNDM7CQkJaWYgKGVycikKJiM0MzsJCQkJcmV0dXJuIGVycjsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmIChtcXByaW8tJmd0O2ZsYWdzICZhbXA7IFRDX01RUFJJT19GX01JTl9SQVRFICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhb3R4Ml9tcXByaW9fcmF0ZV92YWxpZChtaW5fcmF0ZSkpIHsKJiM0MzsJCQluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCQkJICAgJiMzNDttcXByaW86IG1pbl9yYXRlICVsbHUgZm9yIHRjICVkIGlzIG91dHNpZGUgaGFyZHdhcmUgbGltaXRzXG4mIzM0OywKJiM0MzsJCQkJICAgbWluX3JhdGUsIHRjKTsKJiM0MzsJCQlOTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjaywKJiM0MzsJCQkJCSAgICAgICAmIzM0O21xcHJpbzogbWluX3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHMmIzM0OywKJiM0MzsJCQkJCSAgICAgICBtaW5fcmF0ZSwgdGMpOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKG1xcHJpby0mZ3Q7ZmxhZ3MgJmFtcDsgVENfTVFQUklPX0ZfTUFYX1JBVEUgJmFtcDsmYW1wOwomIzQzOwkJICAgICFvdHgyX21xcHJpb19yYXRlX3ZhbGlkKG1heF9yYXRlKSkgewomIzQzOwkJCW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJCQkgICAmIzM0O21xcHJpbzogbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcbiYjMzQ7LAomIzQzOwkJCQkgICBtYXhfcmF0ZSwgdGMpOwomIzQzOwkJCU5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLAomIzQzOwkJCQkJICAgICAgICYjMzQ7bXFwcmlvOiBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZCBpcyBvdXRzaWRlIGhhcmR3YXJlIGxpbWl0cyYjMzQ7LAomIzQzOwkJCQkJICAgICAgIG1heF9yYXRlLCB0Yyk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJZXJyID0gb3R4Ml9tcXByaW9fdmFsaWRhdGVfdHhxcyhuZXRkZXYsIGV4dGFjaywgcW9wdCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwllcnIgPSBvdHgyX21xcHJpb19zdGFnZV9jdXIocGZ2ZiwgbXFwcmlvKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CWVyciA9IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KHBmdmYtJmd0O25ldGRldiwgdHJ1ZSk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CWVyciA9IG90eDJfbXFwcmlvX2FsbG9jX2NhY2hlKHBmdmYsIHJlcGxhY2luZyk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CS8qIG90eDJfbXFwcmlvX3VwKCkgbWF5IGhhdmUgcmVzdG9yZWQgdGhlIHByZXZpb3VzIGNvbmZpZ3VyYXRpb24gZHVyaW5nCiYjNDM7CSAqIHRoZSByZXN0YXJ0IGFib3ZlLiBDbGVhciBldmVyeSBNRFEgc2hhcGVyIGJlZm9yZSBhcHBseWluZyB0aGUgbmV3CiYjNDM7CSAqIG1hcHBpbmcgc28gcXVldWVzIGRyb3BwZWQgZnJvbSB0aGUgVEMgbGF5b3V0IGRvIG5vdCBrZWVwIHN0YWxlCiYjNDM7CSAqIGxpbWl0cyBpbiBoYXJkd2FyZS4KJiM0MzsJICovCiYjNDM7CWlmIChvdHgyX21xcHJpb19tZHFfYWxsb2NhdGVkKHBmdmYpKSB7CiYjNDM7CQllcnIgPSBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIocGZ2Zik7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCWdvdG8gY2xlYW51cDsKJiM0MzsJfQomIzQzOwomIzQzOwlwZnZmLSZndDttcXByaW8uZmxhZ3MgPSBtcXByaW8tJmd0O2ZsYWdzOwomIzQzOwomIzQzOwlmb3IgKHRjID0gMDsgdGMgJmx0OyBxb3B0LSZndDtudW1fdGM7IHRjJiM0MzsmIzQzOykgewomIzQzOwkJdTY0IG1pbl9yYXRlID0gMCwgbWF4X3JhdGUgPSAwOwomIzQzOwkJdTMyIHFjb3VudCA9IHFvcHQtJmd0O2NvdW50W3RjXTsKJiM0MzsKJiM0MzsJCS8qIFJhdGVzIG9taXR0ZWQgZnJvbSB0YyBtcXByaW8gYXJlIHBhc3NlZCBhcyB6ZXJvIGFuZCBib3RoIE1EUQomIzQzOwkJICogc2hhcGVyIHJlZ2lzdGVycyBhcmUgcHJvZ3JhbW1lZDsgc2VlCiYjNDM7CQkgKiBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKCkuIE11bHRpLXF1ZXVlIFRDcyB3aXRoIHJhdGVzCiYjNDM7CQkgKiBhcmUgcmVqZWN0ZWQgYWJvdmUuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChtcXByaW8tJmd0O2ZsYWdzICZhbXA7IFRDX01RUFJJT19GX01JTl9SQVRFKQomIzQzOwkJCW1pbl9yYXRlID0gbXFwcmlvLSZndDttaW5fcmF0ZVt0Y107CiYjNDM7CQlpZiAobXFwcmlvLSZndDtmbGFncyAmYW1wOyBUQ19NUVBSSU9fRl9NQVhfUkFURSkKJiM0MzsJCQltYXhfcmF0ZSA9IG1xcHJpby0mZ3Q7bWF4X3JhdGVbdGNdOwomIzQzOwomIzQzOwkJZm9yICh0eHEgPSBxb3B0LSZndDtvZmZzZXRbdGNdOwomIzQzOwkJICAgICB0eHEgJmx0OyBxb3B0LSZndDtvZmZzZXRbdGNdICYjNDM7IHFjb3VudDsgdHhxJiM0MzsmIzQzOykgewomIzQzOwkJCW5ldGRldl9kYmcobmV0ZGV2LAomIzQzOwkJCQkgICAmIzM0O21xcHJpbzogdGMgJWQgdHhxICVkIG1pbl9yYXRlICVsbHUgbWF4X3JhdGUgJWxsdVxuJiMzNDssCiYjNDM7CQkJCSAgIHRjLCB0eHEsIG1pbl9yYXRlLCBtYXhfcmF0ZSk7CiYjNDM7CiYjNDM7CQkJcGZ2Zi0mZ3Q7bXFwcmlvLm1pbl9yYXRlW3R4cV0gPSBtaW5fcmF0ZTsKJiM0MzsJCQlwZnZmLSZndDttcXByaW8ubWF4X3JhdGVbdHhxXSA9IG1heF9yYXRlOwomIzQzOwomIzQzOwkJCWVyciA9IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIocGZ2ZiwgdHhxLAomIzQzOwkJCQkJCQkgICBtaW5fcmF0ZSwgbWF4X3JhdGUpOwomIzQzOwkJCWlmIChlcnIpCiYjNDM7CQkJCWdvdG8gY2xlYW51cDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwluZXRkZXZfc2V0X251bV90YyhuZXRkZXYsIHBmdmYtJmd0O2N1cl9tcV9zbmFwLSZndDtudW1fdGMpOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgcGZ2Zi0mZ3Q7Y3VyX21xX3NuYXAtJmd0O251bV90YzsgaSYjNDM7JiM0MzspCiYjNDM7CQluZXRkZXZfc2V0X3RjX3F1ZXVlKG5ldGRldiwgaSwgcGZ2Zi0mZ3Q7Y3VyX21xX3NuYXAtJmd0O2NvdW50W2ldLAomIzQzOwkJCQkgICAgcW9wdC0mZ3Q7b2Zmc2V0W2ldKTsKJiM0MzsKJiM0MzsJcW9wdC0mZ3Q7aHcgPSBUQ19NUVBSSU9fSFdfT0ZGTE9BRF9UQ1M7CiYjNDM7CiYjNDM7CWlmIChyZXBsYWNpbmcpIHsKJiM0MzsJCXBmdmYtJmd0O21xcHJpby5yZXBsYWNlX3NldHVwX2RvbmUgPSB0cnVlOwomIzQzOwkJcGZ2Zi0mZ3Q7bXFwcmlvLnJlcGxhY2VfZ3JhZnRfZG9uZSA9IGZhbHNlOwomIzQzOwl9IGVsc2UgewomIzQzOwkJb3R4Ml9tcXByaW9fc25hcF9jb21taXQocGZ2Zik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7Y2xlYW51cDoKJiM0MzsJcW9wdC0mZ3Q7aHcgPSAwOwomIzQzOwlpZiAocmVwbGFjaW5nKSB7CiYjNDM7CQlpbnQgcmVzdG9yZV9lcnIgPSBvdHgyX21xcHJpb19yZXN0b3JlX29sZChwZnZmKTsKJiM0MzsKJiM0MzsJCW90eDJfbXFwcmlvX2NsZWFyX3JlcGxhY2Vfc3RhdGUocGZ2Zik7CiYjNDM7CQlpZiAocmVzdG9yZV9lcnIpIHsKJiM0MzsJCQluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCQkJICAgJiMzNDttcXByaW86IHJlcGxhY2UgZmFpbGVkIGFuZCBwcmlvciBjb25maWd1cmF0aW9uIHJvbGxiYWNrIGZhaWxlZDogJWRcbiYjMzQ7LAomIzQzOwkJCQkgICByZXN0b3JlX2Vycik7CiYjNDM7CQkJaWYgKGV4dGFjaykKJiM0MzsJCQkJTkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssCiYjNDM7CQkJCQkJICAgICAgICYjMzQ7bXFwcmlvOiByZXBsYWNlIGZhaWxlZCBhbmQgcHJpb3IgY29uZmlndXJhdGlvbiByb2xsYmFjayBmYWlsZWQ6ICVkJiMzNDssCiYjNDM7CQkJCQkJICAgICAgIHJlc3RvcmVfZXJyKTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkJCSAgICYjMzQ7bXFwcmlvOiByZXBsYWNlIGZhaWxlZDsgcHJpb3IgY29uZmlndXJhdGlvbiByZXN0b3JlZFxuJiMzNDspOwomIzQzOwkJCWlmIChleHRhY2spCiYjNDM7CQkJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssCiYjNDM7CQkJCQkJICAgJiMzNDttcXByaW86IHJlcGxhY2UgZmFpbGVkOyBwcmlvciBjb25maWd1cmF0aW9uIHJlc3RvcmVkJiMzNDspOwomIzQzOwkJfQomIzQzOwkJcmV0dXJuIGVyciA/IGVyciA6IC1FSU87CiYjNDM7CX0KJiM0MzsJb3R4Ml90ZWFyZG93bl90Y19tcXByaW8ocGZ2ZiwgbXFwcmlvKTsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBvdHgyX3NldHVwX3RjX3Jvb3Qoc3RydWN0IG90eDJfbmljICpwZnZmLAomIzQzOwkJCSAgICAgIHN0cnVjdCB0Y19yb290X3FvcHRfb2ZmbG9hZCAqcm9vdCkKJiM0Mzt7CiYjNDM7CXN3aXRjaCAocm9vdC0mZ3Q7Y29tbWFuZCkgewomIzQzOwljYXNlIFRDX1JPT1RfR1JBRlQ6CiYjNDM7CQlpZiAocGZ2Zi0mZ3Q7bXFwcmlvLnJlcGxhY2Vfc2V0dXBfZG9uZSkKJiM0MzsJCQlwZnZmLSZndDttcXByaW8ucmVwbGFjZV9ncmFmdF9kb25lID0gdHJ1ZTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19xdWVyeV9jYXBzKHZvaWQgKnR5cGVfZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0Y19xdWVyeV9jYXBzX2Jhc2UgKmJhc2UgPSB0eXBlX2RhdGE7CiYjNDM7CXN0cnVjdCB0Y19tcXByaW9fY2FwcyAqY2FwczsKJiM0MzsKJiM0MzsJaWYgKGJhc2UtJmd0O3R5cGUgIT0gVENfU0VUVVBfUURJU0NfTVFQUklPKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwljYXBzID0gYmFzZS0mZ3Q7Y2FwczsKJiM0MzsJY2Fwcy0mZ3Q7dmFsaWRhdGVfcXVldWVfY291bnRzID0gdHJ1ZTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogaW50IG90eDJfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsCiAJCSAgdm9pZCAqdHlwZV9kYXRhKQogewogCXN3aXRjaCAodHlwZSkgewomIzQzOwljYXNlIFRDX1FVRVJZX0NBUFM6CiYjNDM7CQlyZXR1cm4gb3R4Ml9zZXR1cF90Y19xdWVyeV9jYXBzKHR5cGVfZGF0YSk7CiAJY2FzZSBUQ19TRVRVUF9CTE9DSzoKIAkJcmV0dXJuIG90eDJfc2V0dXBfdGNfYmxvY2sobmV0ZGV2LCB0eXBlX2RhdGEpOwogCWNhc2UgVENfU0VUVVBfUURJU0NfSFRCOgogCQlyZXR1cm4gb3R4Ml9zZXR1cF90Y19odGIobmV0ZGV2LCB0eXBlX2RhdGEpOwomIzQzOwljYXNlIFRDX1NFVFVQX1FESVNDX01RUFJJTzoKJiM0MzsJCXJldHVybiBvdHgyX3NldHVwX3RjX21xcHJpbyhuZXRkZXYsIHR5cGVfZGF0YSk7CiYjNDM7CWNhc2UgVENfU0VUVVBfUk9PVF9RRElTQzoKJiM0MzsJCXJldHVybiBvdHgyX3NldHVwX3RjX3Jvb3QobmV0ZGV2X3ByaXYobmV0ZGV2KSwgdHlwZV9kYXRhKTsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQpAQCAtMTYzMiw2ICYjNDM7MjM3Nyw3IEBAIEVYUE9SVF9TWU1CT0wob3R4Ml9pbml0X3RjKTsKIHZvaWQgb3R4Ml9zaHV0ZG93bl90YyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYykKIHsKIAlvdHgyX2Rlc3Ryb3lfdGNfZmxvd19saXN0KG5pYyk7CiYjNDM7CW90eDJfbXFwcmlvX3NuYXBfZGVzdHJveShuaWMpOwogfQogRVhQT1JUX1NZTUJPTChvdHgyX3NodXRkb3duX3RjKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdHhyeC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdHhyeC5jCmluZGV4IDhkMmQ2MDdiYzkyZjkuLmY2NWJhNDRkYjYwYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3R4cnguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90eHJ4LmMKQEAgLTE3MSw3ICYjNDM7MTcxLDcgQEAgc3RhdGljIHZvaWQgb3R4Ml9zZXRfcnh0c3RhbXAoc3RydWN0IG90eDJfbmljICpwZnZmLAogCXU2NCB0aW1lc3RhbXAsIHRzbnM7CiAJaW50IGVycjsKIAotCWlmICghKHBmdmYtJmd0O2ZsYWdzICZhbXA7IE9UWDJfRkxBR19SWF9UU1RBTVBfRU5BQkxFRCkpCiYjNDM7CWlmICghb3R4Ml90ZXN0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1JYX1RTVEFNUF9FTkFCTEVEKSkKIAkJcmV0dXJuOwogCiAJdGltZXN0YW1wID0gcGZ2Zi0mZ3Q7cHRwLSZndDtjb252ZXJ0X3J4X3B0cF90c3RtcCgqKHU2NCAqKWRhdGEpOwpAQCAtMzc0LDEzICYjNDM7Mzc0LDEzIEBAIHN0YXRpYyB2b2lkIG90eDJfcmN2X3BrdF9oYW5kbGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwKIAl9CiAJb3R4Ml9zZXRfcnhoYXNoKHBmdmYsIGNxZSwgc2tiKTsKIAotCWlmICghKHBmdmYtJmd0O2ZsYWdzICZhbXA7IE9UWDJfRkxBR19SRVBfTU9ERV9FTkFCTEVEKSkgewomIzQzOwlpZiAoIW90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19SRVBfTU9ERV9FTkFCTEVEKSkgewogCQlza2JfcmVjb3JkX3J4X3F1ZXVlKHNrYiwgY3EtJmd0O2NxX2lkeCk7CiAJCWlmIChwZnZmLSZndDtuZXRkZXYtJmd0O2ZlYXR1cmVzICZhbXA7IE5FVElGX0ZfUlhDU1VNKQogCQkJc2tiLSZndDtpcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKIAl9CiAKLQlpZiAocGZ2Zi0mZ3Q7ZmxhZ3MgJmFtcDsgT1RYMl9GTEFHX1RDX01BUktfRU5BQkxFRCkKJiM0MzsJaWYgKG90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19UQ19NQVJLX0VOQUJMRUQpKQogCQlza2ItJmd0O21hcmsgPSBwYXJzZS0mZ3Q7bWF0Y2hfaWQ7CiAKIAlza2JfbWFya19mb3JfcmVjeWNsZShza2IpOwpAQCAtNTEzLDcgJiM0Mzs1MTMsNyBAQCBzdGF0aWMgaW50IG90eDJfdHhfbmFwaV9oYW5kbGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwKIAkJICAgICAoKHU2NCljcS0mZ3Q7Y3FfaWR4ICZsdDsmbHQ7IDMyKSB8IHByb2Nlc3NlZF9jcWUpOwogCiAjaWYgSVNfRU5BQkxFRChDT05GSUdfUlZVX0VTV0lUQ0gpCi0JaWYgKHBmdmYtJmd0O2ZsYWdzICZhbXA7IE9UWDJfRkxBR19SRVBfTU9ERV9FTkFCTEVEKQomIzQzOwlpZiAob3R4Ml90ZXN0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1JFUF9NT0RFX0VOQUJMRUQpKQogCQluZGV2ID0gcGZ2Zi0mZ3Q7cmVwc1txaWR4XS0mZ3Q7bmV0ZGV2OwogCWVsc2UKICNlbmRpZgpAQCAtNTI2LDcgJiM0Mzs1MjYsNyBAQCBzdGF0aWMgaW50IG90eDJfdHhfbmFwaV9oYW5kbGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwKIAogCQlpZiAocWlkeCAmZ3Q7PSBwZnZmLSZndDtody50eF9xdWV1ZXMpCiAJCQlxaWR4IC09IHBmdmYtJmd0O2h3LnhkcF9xdWV1ZXM7Ci0JCWlmIChwZnZmLSZndDtmbGFncyAmYW1wOyBPVFgyX0ZMQUdfUkVQX01PREVfRU5BQkxFRCkKJiM0MzsJCWlmIChvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfUkVQX01PREVfRU5BQkxFRCkpCiAJCQlxaWR4ID0gMDsKIAkJdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShuZGV2LCBxaWR4KTsKIAkJbmV0ZGV2X3R4X2NvbXBsZXRlZF9xdWV1ZSh0eHEsIHR4X3BrdHMsIHR4X2J5dGVzKTsKQEAgLTU5OSwxMSAmIzQzOzU5OSwxMSBAQCBpbnQgb3R4Ml9uYXBpX2hhbmRsZXIoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQogCiAJaWYgKHdvcmtkb25lICZsdDsgYnVkZ2V0ICZhbXA7JmFtcDsgbmFwaV9jb21wbGV0ZV9kb25lKG5hcGksIHdvcmtkb25lKSkgewogCQkvKiBJZiBpbnRlcmZhY2UgaXMgZ29pbmcgZG93biwgZG9uJiMzOTt0IHJlLWVuYWJsZSBJUlEgKi8KLQkJaWYgKHBmdmYtJmd0O2ZsYWdzICZhbXA7IE9UWDJfRkxBR19JTlRGX0RPV04pCiYjNDM7CQlpZiAob3R4Ml90ZXN0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX0lOVEZfRE9XTikpCiAJCQlyZXR1cm4gd29ya2RvbmU7CiAKIAkJLyogQWRqdXN0IGlycSBjb2FsZXNlIHVzaW5nIG5ldF9kaW0gKi8KLQkJaWYgKHBmdmYtJmd0O2ZsYWdzICZhbXA7IE9UWDJfRkxBR19BRFBUVl9JTlRfQ09BTF9FTkFCTEVEKQomIzQzOwkJaWYgKG90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19BRFBUVl9JTlRfQ09BTF9FTkFCTEVEKSkKIAkJCW90eDJfYWRqdXN0X2FkYXB0aXZlX2NvYWxlc2UocGZ2ZiwgY3FfcG9sbCk7CiAKIAkJaWYgKGxpa2VseShjcSkpCkBAIC0xMTM3LDcgJiM0MzsxMTM3LDcgQEAgc3RhdGljIHZvaWQgb3R4Ml9zZXRfdHh0c3RhbXAoc3RydWN0IG90eDJfbmljICpwZnZmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCiAJaWYgKHVubGlrZWx5KCFza2Jfc2hpbmZvKHNrYiktJmd0O2dzb19zaXplICZhbXA7JmFtcDsKIAkJICAgICAoc2tiX3NoaW5mbyhza2IpLSZndDt0eF9mbGFncyAmYW1wOyBTS0JUWF9IV19UU1RBTVApKSkgewotCQlpZiAodW5saWtlbHkocGZ2Zi0mZ3Q7ZmxhZ3MgJmFtcDsgT1RYMl9GTEFHX1BUUF9PTkVTVEVQX1NZTkMgJmFtcDsmYW1wOwomIzQzOwkJaWYgKHVubGlrZWx5KG90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19QVFBfT05FU1RFUF9TWU5DKSAmYW1wOyZhbXA7CiAJCQkgICAgIG90eDJfcHRwX2lzX3N5bmMoc2tiLCAmYW1wO3B0cF9vZmZzZXQsICZhbXA7dWRwX2NzdW1fY3J0KSkpIHsKIAkJCW9yaWdpbl90c3RhbXAgPSAoc3RydWN0IHB0cHYyX3RzdGFtcCAqKQogCQkJCQkoKHU4ICopc2tiLSZndDtkYXRhICYjNDM7IHB0cF9vZmZzZXQgJiM0MzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml92Zi5jCmluZGV4IGY3NzY1ZTE5ZDc4YTkuLjVmNzkxNTIzMWNhM2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdmYuYwpAQCAtNjEwLDcgJiM0Mzs2MTAsNyBAQCBzdGF0aWMgaW50IG90eDJ2Zl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQogCXZmLSZndDtkZXYgPSBkZXY7CiAJdmYtJmd0O2lvbW11X2RvbWFpbiA9IGlvbW11X2dldF9kb21haW5fZm9yX2RldihkZXYpOwogCi0JdmYtJmd0O2ZsYWdzIHw9IE9UWDJfRkxBR19JTlRGX0RPV047CiYjNDM7CW90eDJfc2V0X2ZsYWcodmYsIE9UWDJfRkxBR19JTlRGX0RPV04pOwogCWh3ID0gJmFtcDt2Zi0mZ3Q7aHc7CiAJaHctJmd0O3BkZXYgPSB2Zi0mZ3Q7cGRldjsKIAlody0mZ3Q7cnhfcXVldWVzID0gcWNvdW50OwpAQCAtODI0LDEwICYjNDM7ODI0LDEwIEBAIHN0YXRpYyB2b2lkIG90eDJ2Zl9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiAJdmYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCiAJLyogRGlzYWJsZSA4MDIuM3ggcGF1c2UgZnJhbWVzICovCi0JaWYgKHZmLSZndDtmbGFncyAmYW1wOyBPVFgyX0ZMQUdfUlhfUEFVU0VfRU5BQkxFRCB8fAotCSAgICAodmYtJmd0O2ZsYWdzICZhbXA7IE9UWDJfRkxBR19UWF9QQVVTRV9FTkFCTEVEKSkgewotCQl2Zi0mZ3Q7ZmxhZ3MgJmFtcDs9IH5PVFgyX0ZMQUdfUlhfUEFVU0VfRU5BQkxFRDsKLQkJdmYtJmd0O2ZsYWdzICZhbXA7PSB+T1RYMl9GTEFHX1RYX1BBVVNFX0VOQUJMRUQ7CiYjNDM7CWlmIChvdHgyX3Rlc3RfZmxhZyh2ZiwgT1RYMl9GTEFHX1JYX1BBVVNFX0VOQUJMRUQpIHx8CiYjNDM7CSAgICBvdHgyX3Rlc3RfZmxhZyh2ZiwgT1RYMl9GTEFHX1RYX1BBVVNFX0VOQUJMRUQpKSB7CiYjNDM7CQlvdHgyX2NsZWFyX2ZsYWcodmYsIE9UWDJfRkxBR19SWF9QQVVTRV9FTkFCTEVEKTsKJiM0MzsJCW90eDJfY2xlYXJfZmxhZyh2ZiwgT1RYMl9GTEFHX1RYX1BBVVNFX0VOQUJMRUQpOwogCQlvdHgyX2NvbmZpZ19wYXVzZV9mcm0odmYpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfeHNrLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml94c2suYwppbmRleCAwZThhNmE2NDg2YzRhLi43ODA4NTg4YTAyMzRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml94c2suYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml94c2suYwpAQCAtOTYsNyAmIzQzOzk2LDcgQEAgc3RhdGljIHZvaWQgb3R4Ml9jbGVhbl91cF9ycShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBxaWR4KQogCXU2NCBpb3ZhOwogCiAJLyogSWYgdGhlIERPV04gZmxhZyBpcyBzZXQgU1FzIGFyZSBhbHJlYWR5IGZyZWVkICovCi0JaWYgKHBmdmYtJmd0O2ZsYWdzICZhbXA7IE9UWDJfRkxBR19JTlRGX0RPV04pCiYjNDM7CWlmIChvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfSU5URl9ET1dOKSkKIAkJcmV0dXJuOwogCiAJY3EgPSAmYW1wO3FzZXQtJmd0O2NxW3FpZHhdOwpAQCAtMTcyLDcgJiM0MzsxNzIsNyBAQCBpbnQgb3R4Ml94c2tfd2FrZXVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBxdWV1ZV9pZCwgdTMyIGZsYWdzKQogCXN0cnVjdCBvdHgyX2NxX3BvbGwgKmNxX3BvbGwgPSBOVUxMOwogCXN0cnVjdCBvdHgyX3FzZXQgKnFzZXQgPSAmYW1wO3BmLSZndDtxc2V0OwogCi0JaWYgKHBmLSZndDtmbGFncyAmYW1wOyBPVFgyX0ZMQUdfSU5URl9ET1dOKQomIzQzOwlpZiAob3R4Ml90ZXN0X2ZsYWcocGYsIE9UWDJfRkxBR19JTlRGX0RPV04pKQogCQlyZXR1cm4gLUVORVRET1dOOwogCiAJaWYgKHF1ZXVlX2lkICZndDs9IHBmLSZndDtody5yeF9xdWV1ZXMgfHwgcXVldWVfaWQgJmd0Oz0gcGYtJmd0O2h3LnR4X3F1ZXVlcykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuYwppbmRleCBmMTYwYjE2MThlZmEyLi45ZWY1NWE2ZGI1MGI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jCkBAIC0xMTgsNiAmIzQzOzExOCw5IEBAIHN0YXRpYyB2b2lkIG90eDJfY29uZmlnX3NjaGVkX3NoYXBpbmcoc3RydWN0IG90eDJfbmljICpwZnZmLAogCS8qIGNvbmZpZ3VyZSBQSVIgKi8KIAltYXhyYXRlID0gKG5vZGUtJmd0O3JhdGUgJmd0OyBub2RlLSZndDtjZWlsKSA/IG5vZGUtJmd0O3JhdGUgOiBub2RlLSZndDtjZWlsOwogCiYjNDM7CS8qIDY1NTM2IGlzIHRoZSBrZXJuZWwtc2lkZSBkZWZhdWx0IGJ1cnN0IHdoZW4gSFRCIGRvZXMgbm90IHN1cHBseSBhbgomIzQzOwkgKiBleHBsaWNpdCB2YWx1ZSwgbm90IHRoZSBOSVggaGFyZHdhcmUgbWF4aW11bSAoQ04xMEtfTUFYX0JVUlNUX1NJWkUpLgomIzQzOwkgKi8KIAljZmctJmd0O3JlZ3ZhbFsqbnVtX3JlZ3NdID0KIAkJb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIG1heHJhdGUsIDY1NTM2KTsKIAkoKm51bV9yZWdzKSYjNDM7JiM0Mzs7CkBAIC0xMDg4LDYgJiM0MzsxMDkxLDE0IEBAIHN0YXRpYyBpbnQgb3R4Ml9xb3Nfcm9vdF9hZGQoc3RydWN0IG90eDJfbmljICpwZnZmLCB1MTYgaHRiX21hal9pZCwgdTE2IGh0Yl9kZWZjCiAJCSAgICYjMzQ7VENfSFRCX0NSRUFURTogaGFuZGxlPTB4JXggZGVmY2xzPTB4JXhcbiYjMzQ7LAogCQkgICBodGJfbWFqX2lkLCBodGJfZGVmY2xzKTsKIAomIzQzOwlpZiAocGZ2Zi0mZ3Q7bXFwcmlvLnJhdGVfbGltaXQpIHsKJiM0MzsJCW5ldGRldl9lcnIocGZ2Zi0mZ3Q7bmV0ZGV2LAomIzQzOwkJCSAgICYjMzQ7SFRCOiBjYW5ub3QgZW5hYmxlIHdoaWxlIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBpcyBhY3RpdmVcbiYjMzQ7KTsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssCiYjNDM7CQkJCSAgICYjMzQ7SFRCOiBjYW5ub3QgZW5hYmxlIHdoaWxlIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBpcyBhY3RpdmUmIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKIAlyb290ID0gb3R4Ml9xb3NfYWxsb2Nfcm9vdChwZnZmKTsKIAlpZiAoSVNfRVJSKHJvb3QpKSB7CiAJCWVyciA9IFBUUl9FUlIocm9vdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zX3NxLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zX3NxLmMKaW5kZXggMjg3MmFkYWJjODMwNS4uNWYwOWUyOTYwMTQ0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvc19zcS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3Nfc3EuYwpAQCAtMjM4LDcgJiM0MzsyMzgsNyBAQCBpbnQgb3R4Ml9xb3NfZW5hYmxlX3NxKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IHFpZHgpCiAJc3RydWN0IG90eDJfaHcgKmh3ID0gJmFtcDtwZnZmLSZndDtodzsKIAlpbnQgcG9vbF9pZCwgc3FfaWR4LCBlcnI7CiAKLQlpZiAocGZ2Zi0mZ3Q7ZmxhZ3MgJmFtcDsgT1RYMl9GTEFHX0lOVEZfRE9XTikKJiM0MzsJaWYgKG90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19JTlRGX0RPV04pKQogCQlyZXR1cm4gLUVQRVJNOwogCiAJc3FfaWR4ID0gaHctJmd0O25vbl9xb3NfcXVldWVzICYjNDM7IHFpZHg7CkBAIC0yODgsNyAmIzQzOzI4OCw3IEBAIHZvaWQgb3R4Ml9xb3NfZGlzYWJsZV9zcShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBxaWR4KQogCXNxX2lkeCA9IGh3LSZndDtub25fcW9zX3F1ZXVlcyAmIzQzOyBxaWR4OwogCiAJLyogSWYgdGhlIERPV04gZmxhZyBpcyBzZXQgU1FzIGFyZSBhbHJlYWR5IGZyZWVkICovCi0JaWYgKHBmdmYtJmd0O2ZsYWdzICZhbXA7IE9UWDJfRkxBR19JTlRGX0RPV04pCiYjNDM7CWlmIChvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfSU5URl9ET1dOKSkKIAkJcmV0dXJuOwogCiAJc3EgPSAmYW1wO3BmdmYtJmd0O3FzZXQuc3Fbc3FfaWR4XTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuYwppbmRleCAwZjVkNTY0MmQzZjdhLi44YThjMDA4OGZkMjA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3JlcC5jCkBAIC05Myw5ICYjNDM7OTMsOSBAQCBzdGF0aWMgaW50IHJ2dV9yZXBfbWNhbV9mbG93X2luaXQoc3RydWN0IHJlcF9kZXYgKnJlcCkKIAlyZXAtJmd0O2Zsb3dfY2ZnLSZndDttYXhfZmxvd3MgPSBhbGxvY2F0ZWQ7CiAKIAlpZiAoYWxsb2NhdGVkKSB7Ci0JCXJlcC0mZ3Q7ZmxhZ3MgfD0gT1RYMl9GTEFHX01DQU1fRU5UUklFU19BTExPQzsKLQkJcmVwLSZndDtmbGFncyB8PSBPVFgyX0ZMQUdfTlRVUExFX1NVUFBPUlQ7Ci0JCXJlcC0mZ3Q7ZmxhZ3MgfD0gT1RYMl9GTEFHX1RDX0ZMT1dFUl9TVVBQT1JUOwomIzQzOwkJc2V0X2JpdChPVFgyX0ZMQUdfTUNBTV9FTlRSSUVTX0FMTE9DLCAmYW1wO3JlcC0mZ3Q7ZmxhZ3MpOwomIzQzOwkJc2V0X2JpdChPVFgyX0ZMQUdfTlRVUExFX1NVUFBPUlQsICZhbXA7cmVwLSZndDtmbGFncyk7CiYjNDM7CQlzZXRfYml0KE9UWDJfRkxBR19UQ19GTE9XRVJfU1VQUE9SVCwgJmFtcDtyZXAtJmd0O2ZsYWdzKTsKIAl9CiAKIAlJTklUX0xJU1RfSEVBRCgmYW1wO3JlcC0mZ3Q7Zmxvd19jZmctJmd0O2Zsb3dfbGlzdCk7CkBAIC0xMDksMTQgJiM0MzsxMDksMTQgQEAgc3RhdGljIGludCBydnVfcmVwX3NldHVwX3RjX2NiKGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLAogCXN0cnVjdCByZXBfZGV2ICpyZXAgPSBjYl9wcml2OwogCXN0cnVjdCBvdHgyX25pYyAqcHJpdiA9IHJlcC0mZ3Q7bWRldjsKIAotCWlmICghKHJlcC0mZ3Q7ZmxhZ3MgJmFtcDsgUlZVX1JFUF9WRl9JTklUSUFMSVpFRCkpCiYjNDM7CWlmICghdGVzdF9iaXQoT1RYMl9SRVBfVkZfSU5JVElBTElaRUQsICZhbXA7cmVwLSZndDtmbGFncykpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKCEocmVwLSZndDtmbGFncyAmYW1wOyBPVFgyX0ZMQUdfVENfRkxPV0VSX1NVUFBPUlQpKQomIzQzOwlpZiAoIXRlc3RfYml0KE9UWDJfRkxBR19UQ19GTE9XRVJfU1VQUE9SVCwgJmFtcDtyZXAtJmd0O2ZsYWdzKSkKIAkJcnZ1X3JlcF9tY2FtX2Zsb3dfaW5pdChyZXApOwogCiAJcHJpdi0mZ3Q7bmV0ZGV2ID0gcmVwLSZndDtuZXRkZXY7Ci0JcHJpdi0mZ3Q7ZmxhZ3MgPSByZXAtJmd0O2ZsYWdzOwomIzQzOwlvdHgyX3N5bmNfZmxhZ3NfZnJvbV9yZXAocHJpdiwgJmFtcDtyZXAtJmd0O2ZsYWdzKTsKIAlwcml2LSZndDtwY2lmdW5jID0gcmVwLSZndDtwY2lmdW5jOwogCXByaXYtJmd0O2Zsb3dfY2ZnID0gcmVwLSZndDtmbG93X2NmZzsKIApAQCAtMzAzLDkgJiM0MzszMDMsOSBAQCBzdGF0aWMgdm9pZCBydnVfcmVwX3N0YXRlX2V2dF9oYW5kbGVyKHN0cnVjdCBvdHgyX25pYyAqcHJpdiwKIAlyZXBfaWQgPSBydnVfcmVwX2dldF9yZXBpZChwcml2LCBpbmZvLSZndDtwY2lmdW5jKTsKIAlyZXAgPSBwcml2LSZndDtyZXBzW3JlcF9pZF07CiAJaWYgKGluZm8tJmd0O2V2dF9kYXRhLnZmX3N0YXRlKQotCQlyZXAtJmd0O2ZsYWdzIHw9IFJWVV9SRVBfVkZfSU5JVElBTElaRUQ7CiYjNDM7CQlzZXRfYml0KE9UWDJfUkVQX1ZGX0lOSVRJQUxJWkVELCAmYW1wO3JlcC0mZ3Q7ZmxhZ3MpOwogCWVsc2UKLQkJcmVwLSZndDtmbGFncyAmYW1wOz0gflJWVV9SRVBfVkZfSU5JVElBTElaRUQ7CiYjNDM7CQljbGVhcl9iaXQoT1RYMl9SRVBfVkZfSU5JVElBTElaRUQsICZhbXA7cmVwLSZndDtmbGFncyk7CiB9CiAKIGludCBydnVfZXZlbnRfdXBfbm90aWZ5KHN0cnVjdCBvdHgyX25pYyAqcGYsIHN0cnVjdCByZXBfZXZlbnQgKmluZm8pCkBAIC0zODIsNyAmIzQzOzM4Miw3IEBAIHN0YXRpYyB2b2lkIHJ2dV9yZXBfZ2V0X3N0YXRzNjQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIHsKIAlzdHJ1Y3QgcmVwX2RldiAqcmVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCWlmICghKHJlcC0mZ3Q7ZmxhZ3MgJmFtcDsgUlZVX1JFUF9WRl9JTklUSUFMSVpFRCkpCiYjNDM7CWlmICghdGVzdF9iaXQoT1RYMl9SRVBfVkZfSU5JVElBTElaRUQsICZhbXA7cmVwLSZndDtmbGFncykpCiAJCXJldHVybjsKIAogCXN0YXRzLSZndDtyeF9wYWNrZXRzID0gcmVwLSZndDtzdGF0cy5yeF9mcmFtZXM7CkBAIC00NTMsNyAmIzQzOzQ1Myw3IEBAIHN0YXRpYyBpbnQgcnZ1X3JlcF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJc3RydWN0IG90eDJfbmljICpwcml2ID0gcmVwLSZndDttZGV2OwogCXN0cnVjdCByZXBfZXZlbnQgZXZ0ID0gezB9OwogCi0JaWYgKCEocmVwLSZndDtmbGFncyAmYW1wOyBSVlVfUkVQX1ZGX0lOSVRJQUxJWkVEKSkKJiM0MzsJaWYgKCF0ZXN0X2JpdChPVFgyX1JFUF9WRl9JTklUSUFMSVpFRCwgJmFtcDtyZXAtJmd0O2ZsYWdzKSkKIAkJcmV0dXJuIDA7CiAKIAluZXRpZl9jYXJyaWVyX29uKGRldik7CkBAIC00NzIsNyAmIzQzOzQ3Miw3IEBAIHN0YXRpYyBpbnQgcnZ1X3JlcF9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJc3RydWN0IG90eDJfbmljICpwcml2ID0gcmVwLSZndDttZGV2OwogCXN0cnVjdCByZXBfZXZlbnQgZXZ0ID0gezB9OwogCi0JaWYgKCEocmVwLSZndDtmbGFncyAmYW1wOyBSVlVfUkVQX1ZGX0lOSVRJQUxJWkVEKSkKJiM0MzsJaWYgKCF0ZXN0X2JpdChPVFgyX1JFUF9WRl9JTklUSUFMSVpFRCwgJmFtcDtyZXAtJmd0O2ZsYWdzKSkKIAkJcmV0dXJuIDA7CiAKIAluZXRpZl9jYXJyaWVyX29mZihkZXYpOwpAQCAtNTQ3LDcgJiM0Mzs1NDcsNyBAQCBzdGF0aWMgaW50IHJ2dV9yZXBfbmFwaV9pbml0KHN0cnVjdCBvdHgyX25pYyAqcHJpdiwKIAkJb3R4Ml93cml0ZTY0KHByaXYsIE5JWF9MRl9DSU5UWF9JTlQocWlkeCksIEJJVF9VTEwoMCkpOwogCQlvdHgyX3dyaXRlNjQocHJpdiwgTklYX0xGX0NJTlRYX0VOQV9XMVMocWlkeCksIEJJVF9VTEwoMCkpOwogCX0KLQlwcml2LSZndDtmbGFncyAmYW1wOz0gfk9UWDJfRkxBR19JTlRGX0RPV047CiYjNDM7CW90eDJfY2xlYXJfZmxhZyhwcml2LCBPVFgyX0ZMQUdfSU5URl9ET1dOKTsKIAlyZXR1cm4gMDsKIAogZXJyX2ZyZWVfY2ludHM6CkBAIC02MzIsNyAmIzQzOzYzMiw3IEBAIHZvaWQgcnZ1X3JlcF9kZXN0cm95KHN0cnVjdCBvdHgyX25pYyAqcHJpdikKIAlpbnQgcmVwX2lkOwogCiAJcnZ1X2Vzd2l0Y2hfY29uZmlnKHByaXYsIGZhbHNlKTsKLQlwcml2LSZndDtmbGFncyB8PSBPVFgyX0ZMQUdfSU5URl9ET1dOOwomIzQzOwlvdHgyX3NldF9mbGFnKHByaXYsIE9UWDJfRkxBR19JTlRGX0RPV04pOwogCXJ2dV9yZXBfZnJlZV9jcV9yc3JjKHByaXYpOwogCWZvciAocmVwX2lkID0gMDsgcmVwX2lkICZsdDsgcHJpdi0mZ3Q7cmVwX2NudDsgcmVwX2lkJiM0MzsmIzQzOykgewogCQlyZXAgPSBwcml2LSZndDtyZXBzW3JlcF9pZF07CkBAIC04MDEsOCAmIzQzOzgwMSw4IEBAIHN0YXRpYyBpbnQgcnZ1X3JlcF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBwcml2KTsKIAlwcml2LSZndDtwZGV2ID0gcGRldjsKIAlwcml2LSZndDtkZXYgPSBkZXY7Ci0JcHJpdi0mZ3Q7ZmxhZ3MgfD0gT1RYMl9GTEFHX0lOVEZfRE9XTjsKLQlwcml2LSZndDtmbGFncyB8PSBPVFgyX0ZMQUdfUkVQX01PREVfRU5BQkxFRDsKJiM0MzsJb3R4Ml9zZXRfZmxhZyhwcml2LCBPVFgyX0ZMQUdfSU5URl9ET1dOKTsKJiM0MzsJb3R4Ml9zZXRfZmxhZyhwcml2LCBPVFgyX0ZMQUdfUkVQX01PREVfRU5BQkxFRCk7CiAKIAlodyA9ICZhbXA7cHJpdi0mZ3Q7aHc7CiAJaHctJmd0O3BkZXYgPSBwZGV2OwpAQCAtODQ1LDcgJiM0Mzs4NDUsNyBAQCBzdGF0aWMgdm9pZCBydnVfcmVwX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIAlzdHJ1Y3Qgb3R4Ml9uaWMgKnByaXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAKIAlvdHgyX3VucmVnaXN0ZXJfZGwocHJpdik7Ci0JaWYgKCEocHJpdi0mZ3Q7ZmxhZ3MgJmFtcDsgT1RYMl9GTEFHX0lOVEZfRE9XTikpCiYjNDM7CWlmICghb3R4Ml90ZXN0X2ZsYWcocHJpdiwgT1RYMl9GTEFHX0lOVEZfRE9XTikpCiAJCXJ2dV9yZXBfZGVzdHJveShwcml2KTsKIAlvdHgyX2RldGFjaF9yZXNvdXJjZXMoJmFtcDtwcml2LSZndDttYm94KTsKIAlpZiAocHJpdi0mZ3Q7aHcubG10X2luZm8pCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmgKaW5kZXggNWJjOWUyYzdkODAwYi4uNDU3MDdjNDM0ZDg5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3JlcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuaApAQCAtMzcsOCAmIzQzOzM3LDcgQEAgc3RydWN0IHJlcF9kZXYgewogCXN0cnVjdCBkZWxheWVkX3dvcmsgc3RhdHNfd3JrOwogCXN0cnVjdCBkZXZsaW5rX3BvcnQgZGxfcG9ydDsKIAlzdHJ1Y3Qgb3R4Ml9mbG93X2NvbmZpZwkqZmxvd19jZmc7Ci0jZGVmaW5lIFJWVV9SRVBfVkZfSU5JVElBTElaRUQJCUJJVF9VTEwoMCkKLQl1NjQgZmxhZ3M7CiYjNDM7CXVuc2lnbmVkIGxvbmcJCWZsYWdzOwogCXUxNiByZXBfaWQ7CiAJdTE2IHBjaWZ1bmM7CiAJdTggbWFjW0VUSF9BTEVOXTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU5OTQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA3NjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBEZWNpc2lvbiBmb3IgdGhlIE9jdGVvblRYMiBOSUMgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGZvY3VzZWQgb24gd2hldGhlciB0aGlzIHBhdGNoIGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcsIGFuZCBJIG5lZWQgdG8gYXBwbHkgdGhlIGVzdGFibGlzaGVkIGd1aWRlbGluZXMuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZXMuIFRoZSBwYXRjaCB0b3VjaGVzIGEgbG90IG9mIGZpbGVzIHdpdGhpbiB0aGUgTWFydmVsbCBPY3Rlb25UWDIgbmV0d29ya2luZyBkcml2ZXIuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgdG8gbW9kaWZ5IGNvZGUgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDJgIGRpcmVjdG9yeS4gVGhpcyBpcyBpbnRlcmVzdGluZywgYXMgdGhpcyBsaWtlbHkgaXMgYSBkcml2ZXIgZm9yIGEgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlLCBhIFNtYXJ0TklDIG9yIHBvdGVudGlhbGx5IGEgU29DLgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgaGFyZHdhcmUgaXMgcmVhbGlzdGljYWxseSByZWFjaGFibGUgZm9yIGZ1enppbmcsIHdoaWNoIG1lYW5zIHRoZSBoYXJkd2FyZSBtdXN0IGJlIGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgZGlyZWN0bHkgYWNjZXNzaWJsZS4gVGhlIGd1aWRlbGluZXMsIHNwZWNpZmljYWxseSBTZWN0aW9uIDIsIGFyZSB2ZXJ5IGNsZWFyIG9uIHRoaXMuIFRoZSAmIzM0O3N0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSYjMzQ7IGNsYXVzZSBqdW1wcyBvdXQsIGFuZCBJJiMzOTttIGxvb2tpbmcgdG8gY2hlY2sgdG8gY29uZmlybSB3aGV0aGVyIE9jdGVvblRYMiBmYWxscyBpbnRvIHRoYXQgY2F0ZWdvcnkuIFRoZSBydWxlIHNwZWNpZmljYWxseSBjYWxscyBvdXQgU21hcnROSUNzIGFuZCB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcyBhcyBwb3RlbnRpYWwgZXhjbHVzaW9ucy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIG5hdHVyZSBvZiB0aGUgT2N0ZW9uVFgyLiBJcyBpdCBhIHByb3ByaWV0YXJ5IEFTSUMsIGEgTklDIHRoYXQgcmVxdWlyZXMgYSBzcGVjaWZpYyBoYXJkd2FyZSBzZXR1cCwgb3IgY2FuIGl0IGJlIHNpbXVsYXRlZCBvciBhY2Nlc3NlZCBpbiBhIHdheSB0aGF0IGFsaWducyB3aXRoIHRoZSBmdXp6aW5nIGluZnJhc3RydWN0dXJlPyBUaGlzIGlzIGNyaXRpY2FsLgoKSSYjMzk7bGwgbmVlZCB0byByZXNlYXJjaCB3aGF0IHRoZSBgb2N0ZW9udHgyYCByZWZlcnMgdG8sIGFuZCB3aGF0IHRoZSBoYXJkd2FyZSBlbnRhaWxzLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnLCBvciBzZWFyY2ggZm9yIGluZm9ybWF0aW9uIHRvIHVuZGVyc3RhbmQgd2hhdCBpdCBpcyBhbmQgaG93IGFjY2Vzc2libGUgaXQgaXMuIElmIGl0JiMzOTtzIHNvbWV0aGluZyBsaWtlIGFuIG1seHN3LCBvciBpb25pYywgSSYjMzk7bGwgbmVlZCB0byBzdHJvbmdseSBjb25zaWRlciB3aGV0aGVyIHRoaXMgaXMgd29ydGggcHVyc3VpbmcsIG9yIGlmIGl0IGlzIHVuZmVhc2libGUgZ2l2ZW4gdGhhdCBJIGRvbiYjMzk7dCBoYXZlIGRpcmVjdCBhY2Nlc3MgdG8gdGhhdCBoYXJkd2FyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgT0NURU9OVFgyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy01LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzo2OmNvbmZpZyBPQ1RFT05UWDJfTUJPWFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy03LVx0dHJpc3RhdGVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc6OTpjb25maWcgT0NURU9OVFgyX0FGXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTEwLVx0dHJpc3RhdGUgXCYjMzQ7TWFydmVsbCBPY3Rlb25UWDIgUlZVIEFkbWluIEZ1bmN0aW9uIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc9MjI9Y29uZmlnIE5EQ19ESVNfRFlOQU1JQ19DQUNISU5HXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0zMC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc6MzE6Y29uZmlnIE9DVEVPTlRYMl9QRlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0zMi1cdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgT2N0ZW9uVFgyIE5JQyBQaHlzaWNhbCBGdW5jdGlvbiBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTQ0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzo0NTpjb25maWcgT0NURU9OVFgyX1ZGXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTQ2LVx0dHJpc3RhdGUgXCYjMzQ7TWFydmVsbCBPY3Rlb25UWDIgTklDIFZpcnR1YWwgRnVuY3Rpb24gZHJpdmVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc1ODIKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgS2NvbmZpZyBmaWxlOgoKKipEaXZpbmcgaW50byB0aGUgTWFydmVsbCBPY3Rlb24gVFgyIEV0aGVybmV0IERyaXZlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gYWJvdXQgdG8gZGlzc2VjdCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgTWFydmVsbCBPY3Rlb24gVFgyIEV0aGVybmV0IGRyaXZlciBhcmUgZGVmaW5lZCwgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgaXQgY2FuIGJlIHRhaWxvcmVkIGZvciBkaWZmZXJlbnQgc3lzdGVtcyBhbmQgdXNlIGNhc2VzLiBJIGV4cGVjdCB0byBmaW5kIGRlcGVuZGVuY2llcyBvbiBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLCBoYXJkd2FyZS1zcGVjaWZpYyBzZXR0aW5ncywgYW5kIHRoZSB1c3VhbCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBsb2dpYy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrcyAtIHRoZSBmZWF0dXJlcyB0aGF0IGNhbiBiZSBlbmFibGVkIG9yIGRpc2FibGVkLCBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aG9zZSBjaG9pY2VzLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRlcGVuZGVuY2llcyDigJMgd2hhdCBvdGhlciBkcml2ZXJzIG9yIGtlcm5lbCBmZWF0dXJlcyBhcmUgcmVxdWlyZWQgZm9yIHZhcmlvdXMgT2N0ZW9uIFRYMiBFdGhlcm5ldCBmdW5jdGlvbmFsaXRpZXMuIEFyZSB0aGVyZSBzcGVjaWZpYyBib2FyZCBjb25maWd1cmF0aW9ucyBvciBQSFkgb3B0aW9ucyBJIG5lZWQgdG8gY29uc2lkZXI/IEkmIzM5O2xsIGFsc28gYmUgc2Nhbm5pbmcgZm9yIGFueSB1bnVzdWFsIG9yIHZlbmRvci1zcGVjaWZpYyBvcHRpb25zIHRoYXQgbWlnaHQgaW5kaWNhdGUgdW5pcXVlIE1hcnZlbGwgb3B0aW1pemF0aW9ucyBvciBoYXJkd2FyZSBmZWF0dXJlcy4gTXkgZ29hbCBpcyB0byBncmFzcCB0aGUgY29uZmlndXJhYmlsaXR5IG9mIHRoaXMgZHJpdmVyIGFuZCBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIHRoZSBvdmVyYWxsIG5ldHdvcmtpbmcgc3RhY2suIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgdGhlIGtleSBjb25maWd1cmFibGUgZWxlbWVudHMgYXJlIGFuZCB0aGVpciBwb3RlbnRpYWwgaW1wYWN0cyBvbiBwZXJmb3JtYW5jZSwgcG93ZXIgY29uc3VtcHRpb24sIGFuZCBzdXBwb3J0ZWQgaGFyZHdhcmUuIEZpbmFsbHksIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyBhYm91dCBwb3RlbnRpYWwgY29uZmlndXJhdGlvbiBwaXRmYWxscyBvciBjb21tb24gaXNzdWVzIHRoYXQgbWlnaHQgYXJpc2UgZHVyaW5nIGRlcGxveW1lbnQuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBNYXJ2ZWxsIFJWVSBOZXR3b3JrIGRyaXZlcnMgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRjb25maWcgT0NURU9OVFgyX01CT1hcbiAgIDc6XHRcdHRyaXN0YXRlXG4gICA4Olx0XG4gICA5Olx0Y29uZmlnIE9DVEVPTlRYMl9BRlxuICAxMDpcdFx0dHJpc3RhdGUgXCYjMzQ7TWFydmVsbCBPY3Rlb25UWDIgUlZVIEFkbWluIEZ1bmN0aW9uIGRyaXZlclwmIzM0O1xuICAxMTpcdFx0c2VsZWN0IE9DVEVPTlRYMl9NQk9YXG4gIDEyOlx0XHRzZWxlY3QgTkVUX0RFVkxJTktcbiAgMTM6XHRcdGRlcGVuZHMgb24gKDY0QklUIFx1MDAyNlx1MDAyNiBDT01QSUxFX1RFU1QpIHx8IEFSTTY0XG4gIDE0Olx0XHRkZXBlbmRzIG9uIFBDSVxuICAxNTpcdFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxuICAxNjpcdFx0aGVscFxuICAxNzpcdFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBNYXJ2ZWxsJiMzOTtzIE9jdGVvblRYMiBSZXNvdXJjZSBWaXJ0dWFsaXphdGlvblxuICAxODpcdFx0ICBVbml0JiMzOTtzIGFkbWluIGZ1bmN0aW9uIG1hbmFnZXIgd2hpY2ggbWFuYWdlcyBhbGwgUlZVIEhXIHJlc291cmNlc1xuICAxOTpcdFx0ICBhbmQgcHJvdmlkZXMgYSBtZWRpdW0gdG8gb3RoZXIgUEYvVkZzIHRvIGNvbmZpZ3VyZSBIVy4gU2hvdWxkIGJlXG4gIDIwOlx0XHQgIGVuYWJsZWQgZm9yIG90aGVyIFJWVSBkZXZpY2UgZHJpdmVycyB0byB3b3JrLlxuICAyMTpcdFxuICAyMjpcdGNvbmZpZyBORENfRElTX0RZTkFNSUNfQ0FDSElOR1xuICAyMzpcdFx0Ym9vbCBcJiMzNDtEaXNhYmxlIGNhY2hpbmcgb2YgZHluYW1pYyBlbnRyaWVzIGluIE5EQ1wmIzM0O1xuICAyNDpcdFx0ZGVwZW5kcyBvbiBPQ1RFT05UWDJfQUZcbiAgMjU6XHRcdGRlZmF1bHQgblxuICAyNjpcdFx0aGVscFxuICAyNzpcdFx0ICBUaGlzIGNvbmZpZyBvcHRpb24gZGlzYWJsZXMgY2FjaGluZyBvZiBkeW5hbWljIGVudHJpZXMgc3VjaCBhcyBOSVggU1FFc1xuICAyODpcdFx0ICAsIE5QQSBzdGFjayBwYWdlcyBldGMgaW4gTkRDLiBBbHNvIGxvY2tzIGRvd24gTklYIFNRL0NRL1JRL1JTUyBhbmRcbiAgMjk6XHRcdCAgTlBBIEF1cmEvUG9vbCBjb250ZXh0cy5cbiAgMzA6XHRcbiAgMzE6XHRjb25maWcgT0NURU9OVFgyX1BGXG4gIDMyOlx0XHR0cmlzdGF0ZSBcJiMzNDtNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgUGh5c2ljYWwgRnVuY3Rpb24gZHJpdmVyXCYjMzQ7XG4gIDMzOlx0XHRzZWxlY3QgT0NURU9OVFgyX01CT1hcbiAgMzQ6XHRcdHNlbGVjdCBORVRfREVWTElOS1xuICAzNTpcdFx0c2VsZWN0IFBBR0VfUE9PTFxuICAzNjpcdFx0c2VsZWN0IENSWVBUT19MSUJfQUVTIGlmIE1BQ1NFQ1xuICAzNzpcdFx0ZGVwZW5kcyBvbiAoNjRCSVQgXHUwMDI2XHUwMDI2IENPTVBJTEVfVEVTVCkgfHwgQVJNNjRcbiAgMzg6XHRcdHNlbGVjdCBESU1MSUJcbiAgMzk6XHRcdGRlcGVuZHMgb24gUENJXG4gIDQwOlx0XHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXG4gIDQxOlx0XHRkZXBlbmRzIG9uIE1BQ1NFQyB8fCAhTUFDU0VDXG4gIDQyOlx0XHRoZWxwXG4gIDQzOlx0XHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIE1hcnZlbGwmIzM5O3MgT2N0ZW9uVFgyIE5JQyBwaHlzaWNhbCBmdW5jdGlvbi5cbiAgNDQ6XHRcbiAgNDU6XHRjb25maWcgT0NURU9OVFgyX1ZGXG4gIDQ2Olx0XHR0cmlzdGF0ZSBcJiMzNDtNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgVmlydHVhbCBGdW5jdGlvbiBkcml2ZXJcJiMzNDtcbiAgNDc6XHRcdGRlcGVuZHMgb24gT0NURU9OVFgyX1BGXG4gIDQ4Olx0XHRoZWxwXG4gIDQ5Olx0XHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIE1hcnZlbGwmIzM5O3MgT2N0ZW9uVFgyIE5JQyB2aXJ0dWFsIGZ1bmN0aW9uLlxuICA1MDpcdFxuICA1MTpcdGNvbmZpZyBSVlVfRVNXSVRDSFxuICA1MjpcdFx0dHJpc3RhdGUgXCYjMzQ7TWFydmVsbCBSVlUgRS1Td2l0Y2ggc3VwcG9ydFwmIzM0O1xuICA1MzpcdFx0ZGVwZW5kcyBvbiBPQ1RFT05UWDJfUEZcbiAgNTQ6XHRcdGRlZmF1bHQgbVxuICA1NTpcdFx0aGVscFxuICA1NjpcdFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBNYXJ2ZWxsJiMzOTtzIFJWVSBFLVN3aXRjaCB0aGF0XG4gIDU3Olx0XHQgIHByb3ZpZGVzIGludGVybmFsIFNSSU9WIHBhY2tldCBzdGVlcmluZyBhbmQgc3dpdGNoaW5nLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4NzY3CgkJCQkJCQlvdXRwdXQ6IDEzMQoJCQkJCQkJdGhvdWdodHM6IDk0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgT2N0ZW9uVFgyIERyaXZlciBmb3IgRnV6emluZyBFbGlnaWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGVzZSBgT0NURU9OVFgyYCBkcml2ZXJzIGFyZSwgYXMgSSB1bmRlcnN0YW5kLCBzcGVjaWZpYyB0byBNYXJ2ZWxsJiMzOTtzIE9jdGVvblRYMiBSVlUvU21hcnROSUMvU29DIGhhcmR3YXJlLiBUaGV5JiMzOTtyZSBwaHlzaWNhbCBkcml2ZXJzIGZvciBBUk02NCBvciwgaW4gc29tZSBjYXNlcywgNjQtYml0IGNvbXBpbGF0aW9uIHRlc3RzLiBUaGUga2V5IGhlcmUgaXMgKnBoeXNpY2FsKiBoYXJkd2FyZTsgdGhlc2UgZHJpdmVycyBhcmUgdGllZCB0byBNYXJ2ZWxsJiMzOTtzIFBDSWUgZGV2aWNlcy4gU3RhbmRhcmQgUUVNVSBvciBHQ0UgVk1zIHNpbXBseSB3b24mIzM5O3QgY3V0IGl0LiBUaGV5IGNhbiYjMzk7dCBlbXVsYXRlIHRoaXMgaGFyZHdhcmUuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB2ZXJpZnkgdGhlIHNjb3BlIG9mIHRoZSBtb2RpZmljYXRpb25zLiBBIHF1aWNrIHNjYW4gb2YgdGhlIGNoYW5nZWQgZmlsZXMgY29uZmlybXMgdGhpcy4gSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggdG91Y2hlcyBhIGNvbXByZWhlbnNpdmUgc2V0IG9mIGZpbGVzIHdpdGhpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYC4gSXQgaW5jbHVkZXMgdGhpbmdzIGxpa2UgYGFmL3J2dV9uaXguY2AsIGBuaWMvY24xMGtfaXBzZWMuY2AsIGBuaWMvb3R4Ml9jb21tb24uY2AsIGFuZCBzbyBvbi4gTm8gY29yZSBuZXR3b3JraW5nLCBzb2NrZXQgY29kZSwgb3IgTmV0bGluayBjb3JlIGhhdmUgYmVlbiBtb2RpZmllZCwgc28gdGhhdCYjMzk7cyBhIGdvb2Qgc2lnbi4gVGhlIGNoYW5nZXMgYXJlIGFsbCBzZWxmLWNvbnRhaW5lZCB3aXRoaW4gdGhpcyBkcml2ZXImIzM5O3Mgc3BlY2lmaWMgZGlyZWN0b3J5LgoKTm93LCBsZXQmIzM5O3MgYXBwbHkgdGhlIGNyaXRlcmlhLiBXZSYjMzk7cmUgbG9va2luZyBmb3Igc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLiBMb29raW5nIGF0IHNlY3Rpb24gMiwgdGhlIGV4YW1wbGVzIHByb3ZpZGVkIHRoZXJlLCBgbWx4c3dgLCBgcGRzX2NvcmVgLCBgcWVkYCwgZXRjLiwgYXJlIGFsbCB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcyBvciBTbWFydE5JQyBkcml2ZXJzLiAgVGhlc2UgcmVxdWlyZSBwaHlzaWNhbCBBU0lDcyBvciBQQ0llIGNhcmRzIHRoYXQgYXJlbiYjMzk7dCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGF0IGlzIGV4YWN0bHkgd2hhdCB3ZSBoYXZlIGhlcmUuIFRoZSBPY3Rlb25UWDIgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgU21hcnROSUMvU29DIG5ldHdvcmsgZHJpdmVyLCBhbmQgaXQgbmVlZHMgcGh5c2ljYWwgTWFydmVsbCBoYXJkd2FyZSAvIEFTSUNzIHRvIHdvcmsuICBUaGlzIGlzIGNyaXRpY2FsLgoKVGhpcyBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgY29kZSB0aGF0IGlzIGluaGVyZW50bHkgdW5yZWFjaGFibGUgaW4gYW55IHR5cGljYWwgZnV6emluZyBzZXR1cCBsaWtlIHRoZSBvbmUgaW4gc3l6a2FsbGVyLiBUaGUgaGFyZHdhcmUgZGVwZW5kZW5jeSByZW5kZXJzIGl0IG1vb3QuCgpUaGVyZWZvcmUsIHRoZSBgV29ydGhGdXp6aW5nYCBmbGFnIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYC4gVGhlcmUmIzM5O3Mgbm8gcG9pbnQgaW4gdHJ5aW5nIHRvIGZ1enogY29kZSB0aGF0IHdvbiYjMzk7dCBldmVyIGV4ZWN1dGUgaW4gdGhlIGZ1enppbmcgZW52aXJvbm1lbnQuCgpGaW5hbGx5LCBsZXQmIzM5O3MgcHJlcGFyZSB0aGUgdG9vbCBjYWxsOgoKKiAgIGBXb3J0aEZ1enppbmc6IGZhbHNlYAoqICAgYEZvY3VzU3ltYm9sczogW11gIChXZSBkb24mIzM5O3QgbmVlZCBhbnkgZm9jdXNlZCBzeW1ib2xzKQoqICAgYEVuYWJsZUNvbmZpZ3M6IFtdYCAoV2UgZG9uJiMzOTt0IG5lZWQgdG8gZW5hYmxlIGFueXRoaW5nKQoqICAgYFJlYXNvbmluZzogVGhlIG1vZGlmaWNhdGlvbnMgYXJlIGV4Y2x1c2l2ZWx5IHdpdGhpbiB0aGUgTWFydmVsbCBPY3Rlb25UWDIgTklDIGRyaXZlciwgcmVxdWlyaW5nIHBoeXNpY2FsIE1hcnZlbGwgT2N0ZW9uVFgyIC8gQ04xMEsgQVNJQy9QQ0llIGhhcmR3YXJlLCB3aGljaCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuYAoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGV4Y2x1c2l2ZWx5IG1vZGlmaWVzIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBSVlUvTklDIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvKSwgYWRkaW5nIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBzdXBwb3J0IGFuZCByZWZhY3RvcmluZyBmbGFnIGJpdG1hc2sgb3BlcmF0aW9ucy4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgc3BlY2lmaWMgcGh5c2ljYWwgTWFydmVsbCBPY3Rlb25UWDIgLyBDTjEwSyBoYXJkd2FyZS9BU0lDcyBhbmQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIHZpcnR1YWxpemF0aW9uIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3Igc3l6a2FsbGVyIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgZXhjbHVzaXZlbHkgbW9kaWZpZXMgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIFJWVS9OSUMgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi8pLCBhZGRpbmcgbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIHN1cHBvcnQgYW5kIHJlZmFjdG9yaW5nIGZsYWcgYml0bWFzayBvcGVyYXRpb25zLiBUaGlzIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbCBNYXJ2ZWxsIE9jdGVvblRYMiAvIENOMTBLIGhhcmR3YXJlL0FTSUNzIGFuZCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBzeXprYWxsZXIgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6NDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjQ2OjUyLjk1MTU3Nzg1OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTAzODAwMDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGV4Y2x1c2l2ZWx5IG1vZGlmaWVzIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBSVlUvTklDIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvKSwgYWRkaW5nIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBzdXBwb3J0IGFuZCByZWZhY3RvcmluZyBmbGFnIGJpdG1hc2sgb3BlcmF0aW9ucy4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgc3BlY2lmaWMgcGh5c2ljYWwgTWFydmVsbCBPY3Rlb25UWDIgLyBDTjEwSyBoYXJkd2FyZS9BU0lDcyBhbmQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIHZpcnR1YWxpemF0aW9uIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3Igc3l6a2FsbGVyIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjo0Njo1Mi45NTE1ODQ3NzhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwODAwMzcyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDkyYzEzMzRjZDllNTA0OGUzYzY1MWYxNzM1YWQwMjAxOGFiYzBkODRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBTZXAgMTEgMTI6NDY6NTEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jXFxuaW5kZXggZDgwZDJjMDBiZDg0My4uMmQxYWI4Yzc2MWM0MCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcXG5AQCAtMzMxLDggKzMzMSwxMiBAQCBzdGF0aWMgYm9vbCBpc192YWxpZF90eHNjaHEoc3RydWN0IHJ2dSAqcnZ1LCBpbnQgYmxrYWRkcixcXG4gXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChtYXBfZnVuYyAhPSBwY2lmdW5jKVxcbitcXHRpZiAobWFwX2Z1bmMgIT0gcGNpZnVuYykge1xcbitcXHRcXHRkZXZfZXJyX3JhdGVsaW1pdGVkKHJ2dS1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgXFxcInBjaWZ1bmMgJXggbWFwIHBjaWZ1bmMgJXggbm90IGVxdWFsLCBsdmw9JXUgc2NocT0ldVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgIHBjaWZ1bmMsIG1hcF9mdW5jLCBsdmwsIHNjaHEpO1xcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdH1cXG4gXFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9jbjEwa19pcHNlYy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL2NuMTBrX2lwc2VjLmNcXG5pbmRleCA3NzU0M2Q0NzIzNDVlLi41MGVjNDU0MmM0MTgzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9jbjEwa19pcHNlYy5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL2NuMTBrX2lwc2VjLmNcXG5AQCAtMzM0LDcgKzMzNCw3IEBAIHN0YXRpYyBpbnQgY24xMGtfb3V0Yl9jcHRfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiBcXHRcXHRcXHRcXHRcXHRcXHRDTjEwS19DUFRfTEZfTlFYKDApKTtcXG4gXFxuIFxcdC8qIFNldCBpcHNlYyBvZmZsb2FkIGVuYWJsZWQgZm9yIHRoaXMgZGV2aWNlICovXFxuLVxcdHBmLVxcdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfSVBTRUNfT0ZGTE9BRF9FTkFCTEVEO1xcbitcXHRvdHgyX3NldF9mbGFnKHBmLCBPVFgyX0ZMQUdfSVBTRUNfT0ZGTE9BRF9FTkFCTEVEKTtcXG4gXFxuIFxcdGNuMTBrX2NwdF9kZXZpY2Vfc2V0X2F2YWlsYWJsZShwZik7XFxuIFxcdHJldHVybiAwO1xcbkBAIC0zNTYsNyArMzU2LDcgQEAgc3RhdGljIGludCBjbjEwa19vdXRiX2NwdF9jbGVhbihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmKVxcbiBcXHR9XFxuIFxcbiBcXHQvKiBTZXQgaXBzZWMgb2ZmbG9hZCBkaXNhYmxlZCBmb3IgdGhpcyBkZXZpY2UgKi9cXG4tXFx0cGYtXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5PVFgyX0ZMQUdfSVBTRUNfT0ZGTE9BRF9FTkFCTEVEO1xcbitcXHRvdHgyX2NsZWFyX2ZsYWcocGYsIE9UWDJfRkxBR19JUFNFQ19PRkZMT0FEX0VOQUJMRUQpO1xcbiBcXG4gXFx0LyogRGlzYWJsZSBDUFRMRiBJbnN0cnVjdGlvbiBRdWV1ZSAoSVEpICovXFxuIFxcdGNuMTBrX291dGJfY3B0bGZfaXFfZGlzYWJsZShwZik7XFxuQEAgLTgyMCw3ICs4MjAsNyBAQCB2b2lkIGNuMTBrX2lwc2VjX2NsZWFuKHN0cnVjdCBvdHgyX25pYyAqcGYpXFxuIFxcdGlmICghaXNfZGV2X3N1cHBvcnRfaXBzZWNfb2ZmbG9hZChwZi1cXHUwMDNlcGRldikpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdGlmICghKHBmLVxcdTAwM2VmbGFncyBcXHUwMDI2IE9UWDJfRkxBR19JUFNFQ19PRkZMT0FEX0VOQUJMRUQpKVxcbitcXHRpZiAoIW90eDJfdGVzdF9mbGFnKHBmLCBPVFgyX0ZMQUdfSVBTRUNfT0ZGTE9BRF9FTkFCTEVEKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0aWYgKHBmLVxcdTAwM2VpcHNlYy5zYV93b3JrcSkge1xcbkBAIC05NDUsNyArOTQ1LDcgQEAgYm9vbCBjbjEwa19pcHNlY190cmFuc21pdChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmLCBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHEsXFxuIFxcdHUxNiBkbGVuO1xcbiBcXG4gXFx0LyogQ2hlY2sgZm9yIElQU0VDIG9mZmxvYWQgZW5hYmxlZCAqL1xcbi1cXHRpZiAoIShwZi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBPVFgyX0ZMQUdfSVBTRUNfT0ZGTE9BRF9FTkFCTEVEKSlcXG4rXFx0aWYgKCFvdHgyX3Rlc3RfZmxhZyhwZiwgT1RYMl9GTEFHX0lQU0VDX09GRkxPQURfRU5BQkxFRCkpXFxuIFxcdFxcdGdvdG8gZHJvcDtcXG4gXFxuIFxcdHNwID0gc2tiX3NlY19wYXRoKHNrYik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmNcXG5pbmRleCAxNzU5OTIxODhjMThhLi41YmFkMjQ2NmRhMGM1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmNcXG5AQCAtMjIwLDEwICsyMjAsMTAgQEAgaW50IG90eDJfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHZvaWQgKnApXFxuIFxcdFxcdGV0aF9od19hZGRyX3NldChuZXRkZXYsIGFkZHItXFx1MDAzZXNhX2RhdGEpO1xcbiBcXHRcXHQvKiB1cGRhdGUgZG1hYyBmaWVsZCBpbiB2bGFuIG9mZmxvYWQgcnVsZSAqL1xcbiBcXHRcXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgICBwZnZmLVxcdTAwM2VmbGFncyBcXHUwMDI2IE9UWDJfRkxBR19SWF9WTEFOX1NVUFBPUlQpXFxuK1xcdFxcdCAgICBvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfUlhfVkxBTl9TVVBQT1JUKSlcXG4gXFx0XFx0XFx0b3R4Ml9pbnN0YWxsX3J4dmxhbl9vZmZsb2FkX2Zsb3cocGZ2Zik7XFxuIFxcdFxcdC8qIHVwZGF0ZSBkbWFjIGFkZHJlc3MgaW4gbnR1cGxlIGFuZCBETUFDIGZpbHRlciBsaXN0ICovXFxuLVxcdFxcdGlmIChwZnZmLVxcdTAwM2VmbGFncyBcXHUwMDI2IE9UWDJfRkxBR19ETUFDRkxUUl9TVVBQT1JUKVxcbitcXHRcXHRpZiAob3R4Ml90ZXN0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX0RNQUNGTFRSX1NVUFBPUlQpKVxcbiBcXHRcXHRcXHRvdHgyX2RtYWNmbHRfdXBkYXRlX3BmbWFjX2Zsb3cocGZ2Zik7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdHJldHVybiAtRVBFUk07XFxuQEAgLTI3NSw4ICsyNzUsOCBAQCBpbnQgb3R4Ml9jb25maWdfcGF1c2VfZnJtKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4gXFx0XFx0Z290byB1bmxvY2s7XFxuIFxcdH1cXG4gXFxuLVxcdHJlcS1cXHUwMDNlcnhfcGF1c2UgPSAhIShwZnZmLVxcdTAwM2VmbGFncyBcXHUwMDI2IE9UWDJfRkxBR19SWF9QQVVTRV9FTkFCTEVEKTtcXG4tXFx0cmVxLVxcdTAwM2V0eF9wYXVzZSA9ICEhKHBmdmYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgT1RYMl9GTEFHX1RYX1BBVVNFX0VOQUJMRUQpO1xcbitcXHRyZXEtXFx1MDAzZXJ4X3BhdXNlID0gb3R4Ml90ZXN0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1JYX1BBVVNFX0VOQUJMRUQpO1xcbitcXHRyZXEtXFx1MDAzZXR4X3BhdXNlID0gb3R4Ml90ZXN0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1RYX1BBVVNFX0VOQUJMRUQpO1xcbiBcXHRyZXEtXFx1MDAzZXNldCA9IDE7XFxuIFxcbiBcXHRlcnIgPSBvdHgyX3N5bmNfbWJveF9tc2coXFx1MDAyNnBmdmYtXFx1MDAzZW1ib3gpO1xcbkBAIC02MTUsNiArNjE1LDE0MiBAQCB2b2lkIG90eDJfZ2V0X21hY19mcm9tX2FmKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTChvdHgyX2dldF9tYWNfZnJvbV9hZik7XFxuIFxcbitzdGF0aWMgaW50XFxuK290eDJfbml4X3RtcV9yZWdfd3JpdGUoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgY250LFxcbitcXHRcXHQgICAgICAgdTY0IHJlZ19hZGRyW01BWF9SRUdTX1BFUl9NQk9YX01TR10sXFxuK1xcdFxcdCAgICAgICB1NjQgcmVnX3ZhbFtNQVhfUkVHU19QRVJfTUJPWF9NU0ddKVxcbit7XFxuK1xcdHN0cnVjdCBtYm94ICptYm94ID0gXFx1MDAyNnBmdmYtXFx1MDAzZW1ib3g7XFxuK1xcdHN0cnVjdCBuaXhfdHhzY2hxX2NvbmZpZyAqcmVxO1xcbitcXHRpbnQgaSwgZXJyO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2bWJveC1cXHUwMDNlbG9jayk7XFxuK1xcdHJlcSA9IG90eDJfbWJveF9hbGxvY19tc2dfbml4X3R4c2NocV9jZmcobWJveCk7XFxuK1xcdGlmICghcmVxKSB7XFxuK1xcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWJveC1cXHUwMDNlbG9jayk7XFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR9XFxuK1xcbitcXHRyZXEtXFx1MDAzZWx2bCA9IE5JWF9UWFNDSF9MVkxfTURRO1xcbitcXHRyZXEtXFx1MDAzZW51bV9yZWdzID0gY250O1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNudDsgaSsrKSB7XFxuK1xcdFxcdHJlcS1cXHUwMDNlcmVnW2ldID0gcmVnX2FkZHJbaV07XFxuK1xcdFxcdHJlcS1cXHUwMDNlcmVndmFsW2ldID0gcmVnX3ZhbFtpXTtcXG4rXFx0fVxcbitcXG4rXFx0ZXJyID0gb3R4Ml9zeW5jX21ib3hfbXNnKG1ib3gpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNm1ib3gtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4raW50IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXFxuK3tcXG4rXFx0dTY0IHJlZ19hZGRyW01BWF9SRUdTX1BFUl9NQk9YX01TR107XFxuK1xcdHU2NCByZWdfdmFsW01BWF9SRUdTX1BFUl9NQk9YX01TR107XFxuK1xcdGludCBlcnIsIHNtcSwgaSwgY250ID0gMDtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwZnZmLVxcdTAwM2Vody50eHNjaHFfY250W05JWF9UWFNDSF9MVkxfU01RXTsgaSsrKSB7XFxuK1xcdFxcdHNtcSA9IHBmdmYtXFx1MDAzZWh3LnR4c2NocV9saXN0W05JWF9UWFNDSF9MVkxfU01RXVtpXTtcXG4rXFxuK1xcdFxcdHJlZ19hZGRyW2NudF0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTtcXG4rXFx0XFx0cmVnX3ZhbFtjbnRdID0gMDtcXG4rXFx0XFx0Y250Kys7XFxuK1xcbitcXHRcXHRyZWdfYWRkcltjbnRdID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7XFxuK1xcdFxcdHJlZ192YWxbY250XSA9IDA7XFxuK1xcdFxcdGNudCsrO1xcbitcXG4rXFx0XFx0aWYgKGNudCBcXHUwMDNjIE1BWF9SRUdTX1BFUl9NQk9YX01TRyAtIDEpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0ZXJyID0gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCBjbnQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgcmVnX2FkZHIsIHJlZ192YWwpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRnb3RvIGZhaWw7XFxuK1xcdFxcdGNudCA9IDA7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChjbnQpIHtcXG4rXFx0XFx0ZXJyID0gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCBjbnQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgcmVnX2FkZHIsIHJlZ192YWwpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRnb3RvIGZhaWw7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbitmYWlsOlxcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitpbnQgb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXFxuK1xcdFxcdFxcdFxcdCBpbnQgdHhxLCB1NjQgbWlucmF0ZSwgdTY0IG1heHJhdGUpXFxuK3tcXG4rXFx0c3RydWN0IG1ib3ggKm1ib3ggPSBcXHUwMDI2cGZ2Zi1cXHUwMDNlbWJveDtcXG4rXFx0c3RydWN0IG5peF90eHNjaHFfY29uZmlnICpyZXE7XFxuK1xcdGludCBlcnIsIHNtcSwgbiA9IDA7XFxuK1xcdHU2NCByZWdfYWRkclsyXTtcXG4rXFx0dTY0IHJlZ192YWxbMl07XFxuK1xcdHU2NCByYXRlO1xcbitcXG4rXFx0aWYgKCFtYXhyYXRlIFxcdTAwMjZcXHUwMDI2ICFtaW5yYXRlKSB7XFxuK1xcdFxcdHNtcSA9IG90eDJfZ2V0X3NtcV9pZHgocGZ2ZiwgdHhxKTtcXG4rXFx0XFx0cmVnX2FkZHJbMF0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTtcXG4rXFx0XFx0cmVnX3ZhbFswXSA9IDA7XFxuK1xcdFxcdHJlZ19hZGRyWzFdID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7XFxuK1xcdFxcdHJlZ192YWxbMV0gPSAwO1xcbitcXHRcXHRyZXR1cm4gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCAyLCByZWdfYWRkciwgcmVnX3ZhbCk7XFxuK1xcdH1cXG4rXFxuK1xcdHNtcSA9IG90eDJfZ2V0X3NtcV9pZHgocGZ2ZiwgdHhxKTtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNm1ib3gtXFx1MDAzZWxvY2spO1xcbitcXHRyZXEgPSBvdHgyX21ib3hfYWxsb2NfbXNnX25peF90eHNjaHFfY2ZnKG1ib3gpO1xcbitcXHRpZiAoIXJlcSkge1xcbitcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm1ib3gtXFx1MDAzZWxvY2spO1xcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0fVxcbitcXG4rXFx0cmVxLVxcdTAwM2VsdmwgPSBOSVhfVFhTQ0hfTFZMX01EUTtcXG4rXFxuK1xcdC8qIE1RUFJJTyBleHBvc2VzIG9ubHkgbWluL21heCByYXRlLCBub3QgYnVyc3QuICBQYXNzIGJ1cnN0IDAgc29cXG4rXFx0ICogb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZygpIHByb2dyYW1tZXMgdGhlIGxhcmdlc3QgYnVyc3QgdGhlIE5JWFxcbitcXHQgKiBlbmNvZGluZyBzdXBwb3J0cyAoQ04xMEtfTUFYX0JVUlNUX1NJWkUgb24gQ04xMEspLiAgVGhpcyBkaWZmZXJzXFxuK1xcdCAqIGZyb20gdGhlIDY1NTM2IGJ5dGUgZGVmYXVsdCB1c2VkIGluIHRoZSBIVEIgcGF0aCwgd2hpY2ggaXMgYVxcbitcXHQgKiBrZXJuZWwtc2lkZSBkZWZhdWx0IHdoZW4gbm8gZXhwbGljaXQgYnVyc3QgaXMgY29uZmlndXJlZCwgbm90IGFcXG4rXFx0ICogaGFyZHdhcmUgY2FwLlxcbitcXHQgKlxcbitcXHQgKiBtcXByaW8gc2V0dXAgcmVzdGFydHMgdGhlIG5ldGRldiAob3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYpLFxcbitcXHQgKiB3aGljaCByZXNldHMgTURRIHNoYXBlcnMgdG8gemVyby4gIFByb2dyYW0gYm90aCBQSVIgYW5kIENJUiBvblxcbitcXHQgKiBldmVyeSB1cGRhdGUgc28gb21pdHRlZCByYXRlcyBhcmUgYXBwbGllZCBleHBsaWNpdGx5IHJhdGhlciB0aGFuXFxuK1xcdCAqIHJlbHlpbmcgb24gc3RhbGUgaGFyZHdhcmUgc3RhdGUuXFxuK1xcdCAqL1xcbitcXHRyZXEtXFx1MDAzZXJlZ1tuXSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpO1xcbitcXHRpZiAobWF4cmF0ZSkge1xcbitcXHRcXHRyYXRlID0gb3R4Ml9jb252ZXJ0X3JhdGUobWF4cmF0ZSk7XFxuK1xcdFxcdHJlcS1cXHUwMDNlcmVndmFsW25dID0gb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIHJhdGUsIDApO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRyZXEtXFx1MDAzZXJlZ3ZhbFtuXSA9IDA7XFxuK1xcdH1cXG4rXFx0bisrO1xcbitcXG4rXFx0LyogQ0lSK1BJUiBzdXBwb3J0IGlzIHJlcXVpcmVkIGFuZCBjaGVja2VkIGF0IG1xcHJpbyBzZXR1cC4gKi9cXG4rXFx0cmVxLVxcdTAwM2VyZWdbbl0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTtcXG4rXFx0aWYgKG1pbnJhdGUpIHtcXG4rXFx0XFx0cmF0ZSA9IG90eDJfY29udmVydF9yYXRlKG1pbnJhdGUpO1xcbitcXHRcXHRyZXEtXFx1MDAzZXJlZ3ZhbFtuXSA9IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCByYXRlLCAwKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmVxLVxcdTAwM2VyZWd2YWxbbl0gPSAwO1xcbitcXHR9XFxuK1xcdG4rKztcXG4rXFx0cmVxLVxcdTAwM2VudW1fcmVncyA9IG47XFxuK1xcbitcXHRlcnIgPSBvdHgyX3N5bmNfbWJveF9tc2cobWJveCk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2bWJveC1cXHUwMDNlbG9jayk7XFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuIGludCBvdHgyX3R4c2NocV9jb25maWcoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgbHZsLCBpbnQgcHJpbywgYm9vbCB0eHNjaHFfZm9yX3BmYylcXG4ge1xcbiBcXHR1MTYgKCpzY2hxX2xpc3QpW01BWF9UWFNDSFFfUEVSX0ZVTkNdO1xcbkBAIC02NTEsNyArNzg3LDExIEBAIGludCBvdHgyX3R4c2NocV9jb25maWcoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgbHZsLCBpbnQgcHJpbywgYm9vbCB0eHNjaHFfZm9yXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCh1NjQpaHctXFx1MDAzZXNtcV9saW5rX3R5cGUpO1xcbiBcXHRcXHRyZXEtXFx1MDAzZW51bV9yZWdzKys7XFxuIFxcdFxcdC8qIE1EUSBjb25maWcgKi9cXG4tXFx0XFx0cGFyZW50ID0gc2NocV9saXN0W05JWF9UWFNDSF9MVkxfVEw0XVtwcmlvXTtcXG4rXFx0XFx0aWYgKHBmdmYtXFx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KVxcbitcXHRcXHRcXHRwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdWzBdO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bcHJpb107XFxuK1xcbiBcXHRcXHRyZXEtXFx1MDAzZXJlZ1sxXSA9IE5JWF9BRl9NRFFYX1BBUkVOVChzY2hxKTtcXG4gXFx0XFx0cmVxLVxcdTAwM2VyZWd2YWxbMV0gPSBwYXJlbnQgXFx1MDAzY1xcdTAwM2MgMTY7XFxuIFxcdFxcdHJlcS1cXHUwMDNlbnVtX3JlZ3MrKztcXG5AQCAtNzc5LDYgKzkxOSw5IEBAIGludCBvdHgyX3R4c2NoX2FsbG9jKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4gXFx0XFx0cmVxLVxcdTAwM2VzY2hxW05JWF9UWFNDSF9MVkxfVEw0XSA9IGNoYW5fY250O1xcbiBcXHR9XFxuIFxcbitcXHRpZiAocGZ2Zi1cXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpXFxuK1xcdFxcdHJlcS1cXHUwMDNlc2NocVtOSVhfVFhTQ0hfTFZMX1NNUV0gPSBwZnZmLVxcdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcXG4rXFxuIFxcdHJjID0gb3R4Ml9zeW5jX21ib3hfbXNnKFxcdTAwMjZwZnZmLVxcdTAwM2VtYm94KTtcXG4gXFx0aWYgKHJjKVxcbiBcXHRcXHRyZXR1cm4gcmM7XFxuQEAgLTg0NCw2ICs5ODcsNyBAQCB2b2lkIG90eDJfdHhzY2hxX3N0b3Aoc3RydWN0IG90eDJfbmljICpwZnZmKVxcbiBcXG4gXFx0LyogQ2xlYXIgdGhlIHR4c2NocSBsaXN0ICovXFxuIFxcdGZvciAobHZsID0gMDsgbHZsIFxcdTAwM2MgTklYX1RYU0NIX0xWTF9DTlQ7IGx2bCsrKSB7XFxuK1xcdFxcdHBmdmYtXFx1MDAzZWh3LnR4c2NocV9jbnRbbHZsXSA9IDA7XFxuIFxcdFxcdGZvciAoc2NocSA9IDA7IHNjaHEgXFx1MDAzYyBNQVhfVFhTQ0hRX1BFUl9GVU5DOyBzY2hxKyspXFxuIFxcdFxcdFxcdHBmdmYtXFx1MDAzZWh3LnR4c2NocV9saXN0W2x2bF1bc2NocV0gPSAwO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmhcXG5pbmRleCBlZWNlZTYxMmI3YjJjLi42ZTcxMzJmMjdiNjIxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmhcXG5AQCAtMTcsNiArMTcsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc29jL21hcnZlbGwvc2lsaWNvbnMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NvYy9tYXJ2ZWxsL29jdGVvbnR4Mi9hc20uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9tYWNzZWMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3VhcGkvbGludXgvcGt0X3NjaGVkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvcGt0X2Nscy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2RldmxpbmsuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3RpbWU2NC5oXFx1MDAzZVxcbkBAIC00ODMsNiArNDg0LDIzIEBAIHN0cnVjdCBwZl9pcnFfZGF0YSB7XFxuIFxcdGludCBtZGV2cztcXG4gfTtcXG4gXFxuK3N0cnVjdCBtcV9vZmZsb2FkX3NuYXAge1xcbitcXHR1NjQgbWluX3JhdGVbVENfUU9QVF9NQVhfUVVFVUVdO1xcbitcXHR1NjQgbWF4X3JhdGVbVENfUU9QVF9NQVhfUVVFVUVdO1xcbitcXHRfX3U4IG51bV90YztcXG4rXFx0X191MTYgY291bnRbVENfUU9QVF9NQVhfUVVFVUVdO1xcbitcXHRfX3UxNiBvZmZzZXRbVENfUU9QVF9NQVhfUVVFVUVdO1xcbit9O1xcbitcXG4rc3RydWN0IG90eDJfbXFwcmlvIHtcXG4rXFx0dTMyXFx0ZmxhZ3M7XFxuK1xcdHU2NFxcdCptaW5fcmF0ZTtcXG4rXFx0dTY0XFx0Km1heF9yYXRlO1xcbitcXHRib29sXFx0cmF0ZV9saW1pdDtcXG4rXFx0Ym9vbFxcdHJlcGxhY2Vfc2V0dXBfZG9uZTtcXG4rXFx0Ym9vbFxcdHJlcGxhY2VfZ3JhZnRfZG9uZTtcXG4rfTtcXG4rXFxuIHN0cnVjdCBvdHgyX25pYyB7XFxuIFxcdHZvaWQgX19pb21lbVxcdFxcdCpyZWdfYmFzZTtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2VcXHQqbmV0ZGV2O1xcbkBAIC00OTEsMzAgKzUwOSwzNSBAQCBzdHJ1Y3Qgb3R4Ml9uaWMge1xcbiBcXHR1MTZcXHRcXHRcXHR0eF9tYXhfcGt0bGVuO1xcbiBcXHR1MTZcXHRcXHRcXHRyYnNpemU7IC8qIFJlY2VpdmUgYnVmZmVyIHNpemUgKi9cXG4gXFxuLSNkZWZpbmUgT1RYMl9GTEFHX1JYX1RTVEFNUF9FTkFCTEVEXFx0XFx0QklUX1VMTCgwKVxcbi0jZGVmaW5lIE9UWDJfRkxBR19UWF9UU1RBTVBfRU5BQkxFRFxcdFxcdEJJVF9VTEwoMSlcXG4tI2RlZmluZSBPVFgyX0ZMQUdfSU5URl9ET1dOXFx0XFx0XFx0QklUX1VMTCgyKVxcbi0jZGVmaW5lIE9UWDJfRkxBR19NQ0FNX0VOVFJJRVNfQUxMT0NcXHRcXHRCSVRfVUxMKDMpXFxuLSNkZWZpbmUgT1RYMl9GTEFHX05UVVBMRV9TVVBQT1JUXFx0XFx0QklUX1VMTCg0KVxcbi0jZGVmaW5lIE9UWDJfRkxBR19VQ0FTVF9GTFRSX1NVUFBPUlRcXHRcXHRCSVRfVUxMKDUpXFxuLSNkZWZpbmUgT1RYMl9GTEFHX1JYX1ZMQU5fU1VQUE9SVFxcdFxcdEJJVF9VTEwoNilcXG4tI2RlZmluZSBPVFgyX0ZMQUdfVkZfVkxBTl9TVVBQT1JUXFx0XFx0QklUX1VMTCg3KVxcbi0jZGVmaW5lIE9UWDJfRkxBR19QRl9TSFVURE9XTlxcdFxcdFxcdEJJVF9VTEwoOClcXG4tI2RlZmluZSBPVFgyX0ZMQUdfUlhfUEFVU0VfRU5BQkxFRFxcdFxcdEJJVF9VTEwoOSlcXG4tI2RlZmluZSBPVFgyX0ZMQUdfVFhfUEFVU0VfRU5BQkxFRFxcdFxcdEJJVF9VTEwoMTApXFxuLSNkZWZpbmUgT1RYMl9GTEFHX1RDX0ZMT1dFUl9TVVBQT1JUXFx0XFx0QklUX1VMTCgxMSlcXG4tI2RlZmluZSBPVFgyX0ZMQUdfVENfTUFUQ0hBTExfRUdSRVNTX0VOQUJMRURcXHRCSVRfVUxMKDEyKVxcbi0jZGVmaW5lIE9UWDJfRkxBR19UQ19NQVRDSEFMTF9JTkdSRVNTX0VOQUJMRURcXHRCSVRfVUxMKDEzKVxcbi0jZGVmaW5lIE9UWDJfRkxBR19ETUFDRkxUUl9TVVBQT1JUXFx0XFx0QklUX1VMTCgxNClcXG4tI2RlZmluZSBPVFgyX0ZMQUdfUFRQX09ORVNURVBfU1lOQ1xcdFxcdEJJVF9VTEwoMTUpXFxuLSNkZWZpbmUgT1RYMl9GTEFHX0FEUFRWX0lOVF9DT0FMX0VOQUJMRUQgQklUX1VMTCgxNilcXG4tI2RlZmluZSBPVFgyX0ZMQUdfVENfTUFSS19FTkFCTEVEXFx0XFx0QklUX1VMTCgxNylcXG4tI2RlZmluZSBPVFgyX0ZMQUdfUkVQX01PREVfRU5BQkxFRFxcdFxcdCBCSVRfVUxMKDE4KVxcbi0jZGVmaW5lIE9UWDJfRkxBR19QT1JUX1VQXFx0XFx0XFx0QklUX1VMTCgxOSlcXG4tI2RlZmluZSBPVFgyX0ZMQUdfSVBTRUNfT0ZGTE9BRF9FTkFCTEVEXFx0XFx0QklUX1VMTCgyMClcXG4tXFx0dTY0XFx0XFx0XFx0ZmxhZ3M7XFxuKyNkZWZpbmUgT1RYMl9GTEFHX1JYX1RTVEFNUF9FTkFCTEVEXFx0XFx0MFxcbisjZGVmaW5lIE9UWDJfRkxBR19UWF9UU1RBTVBfRU5BQkxFRFxcdFxcdDFcXG4rI2RlZmluZSBPVFgyX0ZMQUdfSU5URl9ET1dOXFx0XFx0XFx0MlxcbisjZGVmaW5lIE9UWDJfRkxBR19NQ0FNX0VOVFJJRVNfQUxMT0NcXHRcXHQzXFxuKyNkZWZpbmUgT1RYMl9GTEFHX05UVVBMRV9TVVBQT1JUXFx0XFx0NFxcbisjZGVmaW5lIE9UWDJfRkxBR19VQ0FTVF9GTFRSX1NVUFBPUlRcXHRcXHQ1XFxuKyNkZWZpbmUgT1RYMl9GTEFHX1JYX1ZMQU5fU1VQUE9SVFxcdFxcdDZcXG4rI2RlZmluZSBPVFgyX0ZMQUdfVkZfVkxBTl9TVVBQT1JUXFx0XFx0N1xcbisjZGVmaW5lIE9UWDJfRkxBR19QRl9TSFVURE9XTlxcdFxcdFxcdDhcXG4rI2RlZmluZSBPVFgyX0ZMQUdfUlhfUEFVU0VfRU5BQkxFRFxcdFxcdDlcXG4rI2RlZmluZSBPVFgyX0ZMQUdfVFhfUEFVU0VfRU5BQkxFRFxcdFxcdDEwXFxuKyNkZWZpbmUgT1RYMl9GTEFHX1RDX0ZMT1dFUl9TVVBQT1JUXFx0XFx0MTFcXG4rI2RlZmluZSBPVFgyX0ZMQUdfVENfTUFUQ0hBTExfRUdSRVNTX0VOQUJMRURcXHQxMlxcbisjZGVmaW5lIE9UWDJfRkxBR19UQ19NQVRDSEFMTF9JTkdSRVNTX0VOQUJMRURcXHQxM1xcbisjZGVmaW5lIE9UWDJfRkxBR19ETUFDRkxUUl9TVVBQT1JUXFx0XFx0MTRcXG4rI2RlZmluZSBPVFgyX0ZMQUdfUFRQX09ORVNURVBfU1lOQ1xcdFxcdDE1XFxuKyNkZWZpbmUgT1RYMl9GTEFHX0FEUFRWX0lOVF9DT0FMX0VOQUJMRURcXHQxNlxcbisjZGVmaW5lIE9UWDJfRkxBR19UQ19NQVJLX0VOQUJMRURcXHRcXHQxN1xcbisjZGVmaW5lIE9UWDJfRkxBR19SRVBfTU9ERV9FTkFCTEVEXFx0XFx0MThcXG4rI2RlZmluZSBPVFgyX0ZMQUdfUE9SVF9VUFxcdFxcdFxcdDE5XFxuKyNkZWZpbmUgT1RYMl9GTEFHX0lQU0VDX09GRkxPQURfRU5BQkxFRFxcdFxcdDIwXFxuKyNkZWZpbmUgT1RYMl9SRVBfVkZfSU5JVElBTElaRURcXHRcXHRcXHQyMVxcbitcXHR1bnNpZ25lZCBsb25nXFx0XFx0ZmxhZ3M7XFxuIFxcdHU2NFxcdFxcdFxcdCpjcV9vcF9hZGRyO1xcbiBcXG4rXFx0c3RydWN0IG90eDJfbXFwcmlvXFx0bXFwcmlvO1xcbitcXHRzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwXFx0KmN1cl9tcV9zbmFwO1xcbitcXHRzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwXFx0Km9sZF9tcV9zbmFwO1xcbitcXG4gXFx0c3RydWN0IGJwZl9wcm9nXFx0XFx0KnhkcF9wcm9nO1xcbiBcXHRzdHJ1Y3Qgb3R4Ml9xc2V0XFx0cXNldDtcXG4gXFx0c3RydWN0IG90eDJfaHdcXHRcXHRodztcXG5AQCAtNTk0LDYgKzYxNywzNCBAQCBzdHJ1Y3Qgb3R4Ml9uaWMge1xcbiBcXHR1bnNpZ25lZCBsb25nXFx0XFx0KmFmX3hkcF96Y19xaWR4O1xcbiB9O1xcbiBcXG4rc3RhdGljIGlubGluZSB2b2lkIG90eDJfc2V0X2ZsYWcoc3RydWN0IG90eDJfbmljICpuaWMsIHVuc2lnbmVkIGludCBmbGFnKVxcbit7XFxuK1xcdHNldF9iaXQoZmxhZywgXFx1MDAyNm5pYy1cXHUwMDNlZmxhZ3MpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgb3R4Ml9jbGVhcl9mbGFnKHN0cnVjdCBvdHgyX25pYyAqbmljLCB1bnNpZ25lZCBpbnQgZmxhZylcXG4re1xcbitcXHRjbGVhcl9iaXQoZmxhZywgXFx1MDAyNm5pYy1cXHUwMDNlZmxhZ3MpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGJvb2wgb3R4Ml90ZXN0X2ZsYWcoc3RydWN0IG90eDJfbmljICpuaWMsIHVuc2lnbmVkIGludCBmbGFnKVxcbit7XFxuK1xcdHJldHVybiB0ZXN0X2JpdChmbGFnLCBcXHUwMDI2bmljLVxcdTAwM2VmbGFncyk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBvdHgyX3N5bmNfZmxhZ3NfZnJvbV9yZXAoc3RydWN0IG90eDJfbmljICpkc3QsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nICpzcmNfZmxhZ3MpXFxuK3tcXG4rXFx0dW5zaWduZWQgaW50IGZsYWc7XFxuK1xcbitcXHRmb3IgKGZsYWcgPSAwOyBmbGFnIFxcdTAwM2M9IE9UWDJfUkVQX1ZGX0lOSVRJQUxJWkVEOyBmbGFnKyspIHtcXG4rXFx0XFx0aWYgKHRlc3RfYml0KGZsYWcsIHNyY19mbGFncykpXFxuK1xcdFxcdFxcdHNldF9iaXQoZmxhZywgXFx1MDAyNmRzdC1cXHUwMDNlZmxhZ3MpO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdGNsZWFyX2JpdChmbGFnLCBcXHUwMDI2ZHN0LVxcdTAwM2VmbGFncyk7XFxuK1xcdH1cXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSBib29sIGlzX290eDJfbGJrdmYoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIHtcXG4gXFx0cmV0dXJuIChwZGV2LVxcdTAwM2VkZXZpY2UgPT0gUENJX0RFVklEX09DVEVPTlRYMl9SVlVfQUZWRikgfHxcXG5AQCAtMTI0Niw2ICsxMjk3LDExIEBAIGRtYV9hZGRyX3Qgb3R4Ml9kbWFfbWFwX3NrYl9mcmFnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcXG4gXFx0XFx0XFx0XFx0IHN0cnVjdCBza19idWZmICpza2IsIGludCBzZWcsIGludCAqbGVuKTtcXG4gdm9pZCBvdHgyX2RtYV91bm1hcF9za2JfZnJhZ3Moc3RydWN0IG90eDJfbmljICpwZnZmLCBzdHJ1Y3Qgc2dfbGlzdCAqc2cpO1xcbiBpbnQgb3R4Ml9yZWFkX2ZyZWVfc3FlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgdTE2IHFpZHgpO1xcbitpbnQgb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCB0eHEsXFxuK1xcdFxcdFxcdFxcdCB1NjQgbWlucmF0ZSwgdTY0IG1heHJhdGUpO1xcbitpbnQgb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XFxuK2ludCBvdHgyX21xcHJpb19kb3duKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XFxuK2ludCBvdHgyX21xcHJpb191cChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xcbiB2b2lkIG90eDJfcXVldWVfdmZfd29yayhzdHJ1Y3QgbWJveCAqbXcsIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICptYm94X3dxLFxcbiBcXHRcXHRcXHRpbnQgZmlyc3QsIGludCBtZGV2cywgdTY0IGludHIpO1xcbiBpbnQgb3R4Ml9kZWxfbWNhbV9mbG93X2VudHJ5KHN0cnVjdCBvdHgyX25pYyAqbmljLCB1MTYgZW50cnksXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jXFxuaW5kZXggOTFkMzQ2ZDExNGFmNS4uYjdiZDA4MTI5ZmI2NCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xcbkBAIC00MTMsNiArNDEzLDEyIEBAIHN0YXRpYyBpbnQgb3R4Ml9kY2JubF9pZWVlX3NldHBmYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWVlZV9wZmMgKnBmYylcXG4gXFx0dTggb2xkX3BmY19lbjtcXG4gXFx0aW50IGVycjtcXG4gXFxuK1xcdGlmIChwZnZmLVxcdTAwM2VtcXByaW8ucmF0ZV9saW1pdCBcXHUwMDI2XFx1MDAyNiBwZmMtXFx1MDAzZXBmY19lbikge1xcbitcXHRcXHRuZXRkZXZfZXJyKGRldixcXG4rXFx0XFx0XFx0ICAgXFxcIlBGQzogY2Fubm90IGVuYWJsZSB3aGlsZSBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgaXMgYWN0aXZlXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbiBcXHRvbGRfcGZjX2VuID0gcGZ2Zi1cXHUwMDNlcGZjX2VuO1xcbiBcXHRwZnZmLVxcdTAwM2VwZmNfZW4gPSBwZmMtXFx1MDAzZXBmY19lbjtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RldmxpbmsuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RldmxpbmsuY1xcbmluZGV4IDRhNWNlMGU2N2RkYTguLjg2M2E1Y2VkOWEyNmIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGV2bGluay5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGV2bGluay5jXFxuQEAgLTEwNCw3ICsxMDQsNyBAQCBzdGF0aWMgaW50IG90eDJfZGxfdWNhc3RfZmx0X2NudF92YWxpZGF0ZShzdHJ1Y3QgZGV2bGluayAqZGV2bGluaywgdTMyIGlkLFxcbiBcXHRzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBvdHgyX2RsLVxcdTAwM2VwZnZmO1xcbiBcXG4gXFx0LyogQ2hlY2sgZm9yIFVOSUNBU1QgZmlsdGVyIHN1cHBvcnQqL1xcbi1cXHRpZiAoIShwZnZmLVxcdTAwM2VmbGFncyBcXHUwMDI2IE9UWDJfRkxBR19VQ0FTVF9GTFRSX1NVUFBPUlQpKSB7XFxuK1xcdGlmICghb3R4Ml90ZXN0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1VDQVNUX0ZMVFJfU1VQUE9SVCkpIHtcXG4gXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcXG4gXFx0XFx0XFx0XFx0ICAgXFxcIlVuaWNhc3QgZmlsdGVyIG5vdCBlbmFibGVkXFxcIik7XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmNcXG5pbmRleCA5YmVlMWI5MWVlYWE2Li5lNjNlYWQzYjExMTNlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuY1xcbkBAIC0yODcsNiArMjg3LDE0IEBAIHN0YXRpYyBpbnQgb3R4Ml9zZXRfY2hhbm5lbHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFxuK1xcdGlmIChwZnZmLVxcdTAwM2VtcXByaW8ucmF0ZV9saW1pdCBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgKGNoYW5uZWwtXFx1MDAzZXR4X2NvdW50ICE9IHBmdmYtXFx1MDAzZWh3LnR4X3F1ZXVlcyB8fFxcbitcXHQgICAgIGNoYW5uZWwtXFx1MDAzZXJ4X2NvdW50ICE9IHBmdmYtXFx1MDAzZWh3LnJ4X3F1ZXVlcykpIHtcXG4rXFx0XFx0bmV0ZGV2X2luZm8oZGV2LFxcbitcXHRcXHRcXHQgICAgXFxcIk5vdCBwZXJtaXR0ZWQgdG8gY2hhbmdlIGNoYW5uZWwgY291bnQgd2hpbGUgTVEgcHJpbyBpcyBhY3RpdmVcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKGlmX3VwKVxcbiBcXHRcXHRkZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19zdG9wKGRldik7XFxuIFxcbkBAIC0zNTQsMTQgKzM2MiwxNCBAQCBzdGF0aWMgaW50IG90eDJfc2V0X3BhdXNlcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiBcXG4gXFx0aWYgKHBhdXNlLVxcdTAwM2VyeF9wYXVzZSlcXG4tXFx0XFx0cGZ2Zi1cXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX1JYX1BBVVNFX0VOQUJMRUQ7XFxuK1xcdFxcdG90eDJfc2V0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1JYX1BBVVNFX0VOQUJMRUQpO1xcbiBcXHRlbHNlXFxuLVxcdFxcdHBmdmYtXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5PVFgyX0ZMQUdfUlhfUEFVU0VfRU5BQkxFRDtcXG4rXFx0XFx0b3R4Ml9jbGVhcl9mbGFnKHBmdmYsIE9UWDJfRkxBR19SWF9QQVVTRV9FTkFCTEVEKTtcXG4gXFxuIFxcdGlmIChwYXVzZS1cXHUwMDNldHhfcGF1c2UpXFxuLVxcdFxcdHBmdmYtXFx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19UWF9QQVVTRV9FTkFCTEVEO1xcbitcXHRcXHRvdHgyX3NldF9mbGFnKHBmdmYsIE9UWDJfRkxBR19UWF9QQVVTRV9FTkFCTEVEKTtcXG4gXFx0ZWxzZVxcbi1cXHRcXHRwZnZmLVxcdTAwM2VmbGFncyBcXHUwMDI2PSB+T1RYMl9GTEFHX1RYX1BBVVNFX0VOQUJMRUQ7XFxuK1xcdFxcdG90eDJfY2xlYXJfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfVFhfUEFVU0VfRU5BQkxFRCk7XFxuIFxcbiBcXHRyZXR1cm4gb3R4Ml9jb25maWdfcGF1c2VfZnJtKHBmdmYpO1xcbiB9XFxuQEAgLTQ3MCw4ICs0NzgsNyBAQCBzdGF0aWMgaW50IG90eDJfZ2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdGNtZC1cXHUwMDNlcnhfbWF4X2NvYWxlc2NlZF9mcmFtZXMgPSBody1cXHUwMDNlY3FfZWNvdW50X3dhaXQ7XFxuIFxcdGNtZC1cXHUwMDNldHhfY29hbGVzY2VfdXNlY3MgPSBody1cXHUwMDNlY3FfdGltZV93YWl0O1xcbiBcXHRjbWQtXFx1MDAzZXR4X21heF9jb2FsZXNjZWRfZnJhbWVzID0gaHctXFx1MDAzZWNxX2Vjb3VudF93YWl0O1xcbi1cXHRpZiAoKHBmdmYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgT1RYMl9GTEFHX0FEUFRWX0lOVF9DT0FMX0VOQUJMRUQpID09XFxuLVxcdFxcdFxcdE9UWDJfRkxBR19BRFBUVl9JTlRfQ09BTF9FTkFCTEVEKSB7XFxuK1xcdGlmIChvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfQURQVFZfSU5UX0NPQUxfRU5BQkxFRCkpIHtcXG4gXFx0XFx0Y21kLVxcdTAwM2V1c2VfYWRhcHRpdmVfcnhfY29hbGVzY2UgPSAxO1xcbiBcXHRcXHRjbWQtXFx1MDAzZXVzZV9hZGFwdGl2ZV90eF9jb2FsZXNjZSA9IDE7XFxuIFxcdH0gZWxzZSB7XFxuQEAgLTUwMiwxNSArNTA5LDE0IEBAIHN0YXRpYyBpbnQgb3R4Ml9zZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFx0fVxcbiBcXG4gXFx0LyogQ2hlY2sgYW5kIHVwZGF0ZSBjb2FsZXNjZSBzdGF0dXMgKi9cXG4tXFx0aWYgKChwZnZmLVxcdTAwM2VmbGFncyBcXHUwMDI2IE9UWDJfRkxBR19BRFBUVl9JTlRfQ09BTF9FTkFCTEVEKSA9PVxcbi1cXHRcXHRcXHRPVFgyX0ZMQUdfQURQVFZfSU5UX0NPQUxfRU5BQkxFRCkge1xcbitcXHRpZiAob3R4Ml90ZXN0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX0FEUFRWX0lOVF9DT0FMX0VOQUJMRUQpKSB7XFxuIFxcdFxcdHByaXZfY29hbGVzY2Vfc3RhdHVzID0gMTtcXG4gXFx0XFx0aWYgKCFlYy1cXHUwMDNldXNlX2FkYXB0aXZlX3J4X2NvYWxlc2NlKVxcbi1cXHRcXHRcXHRwZnZmLVxcdTAwM2VmbGFncyBcXHUwMDI2PSB+T1RYMl9GTEFHX0FEUFRWX0lOVF9DT0FMX0VOQUJMRUQ7XFxuK1xcdFxcdFxcdG90eDJfY2xlYXJfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfQURQVFZfSU5UX0NPQUxfRU5BQkxFRCk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdHByaXZfY29hbGVzY2Vfc3RhdHVzID0gMDtcXG4gXFx0XFx0aWYgKGVjLVxcdTAwM2V1c2VfYWRhcHRpdmVfcnhfY29hbGVzY2UpXFxuLVxcdFxcdFxcdHBmdmYtXFx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19BRFBUVl9JTlRfQ09BTF9FTkFCTEVEO1xcbitcXHRcXHRcXHRvdHgyX3NldF9mbGFnKHBmdmYsIE9UWDJfRkxBR19BRFBUVl9JTlRfQ09BTF9FTkFCTEVEKTtcXG4gXFx0fVxcbiBcXG4gXFx0LyogJ2NxX3RpbWVfd2FpdCcgaXMgOGJpdCBhbmQgaXMgaW4gbXVsdGlwbGUgb2YgMTAwbnMsXFxuQEAgLTU1Niw4ICs1NjIsNyBAQCBzdGF0aWMgaW50IG90eDJfc2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdCAqICdvbicgdG8gJ29mZicuXFxuIFxcdCAqL1xcbiBcXHRpZiAocHJpdl9jb2FsZXNjZV9zdGF0dXMgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgICgocGZ2Zi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBPVFgyX0ZMQUdfQURQVFZfSU5UX0NPQUxfRU5BQkxFRCkgIT1cXG4tXFx0ICAgICBPVFgyX0ZMQUdfQURQVFZfSU5UX0NPQUxfRU5BQkxFRCkpIHtcXG4rXFx0ICAgICghb3R4Ml90ZXN0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX0FEUFRWX0lOVF9DT0FMX0VOQUJMRUQpKSkge1xcbiBcXHRcXHRody1cXHUwMDNlY3FfdGltZV93YWl0ID0gQ1FfVElNRVJfVEhSRVNIX0RFRkFVTFQ7XFxuIFxcdFxcdGh3LVxcdTAwM2VjcV9lY291bnRfd2FpdCA9IENRX0NRRV9USFJFU0hfREVGQVVMVDtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9mbG93cy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZmxvd3MuY1xcbmluZGV4IDk5ZDc4ZmM1YTJjNGEuLmI4ZmY0OWYwZjZlM2IgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZmxvd3MuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2Zsb3dzLmNcXG5AQCAtMjcwLDkgKzI3MCw5IEBAIGludCBvdHgyX2FsbG9jX21jYW1fZW50cmllcyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHUxNiBjb3VudClcXG4gXFx0Zmxvd19jZmctXFx1MDAzZW1heF9mbG93cyA9IGFsbG9jYXRlZDtcXG4gXFxuIFxcdGlmIChhbGxvY2F0ZWQpIHtcXG4tXFx0XFx0cGZ2Zi1cXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX01DQU1fRU5UUklFU19BTExPQztcXG4tXFx0XFx0cGZ2Zi1cXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX05UVVBMRV9TVVBQT1JUO1xcbi1cXHRcXHRwZnZmLVxcdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfVENfRkxPV0VSX1NVUFBPUlQ7XFxuK1xcdFxcdG90eDJfc2V0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX01DQU1fRU5UUklFU19BTExPQyk7XFxuK1xcdFxcdG90eDJfc2V0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX05UVVBMRV9TVVBQT1JUKTtcXG4rXFx0XFx0b3R4Ml9zZXRfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfVENfRkxPV0VSX1NVUFBPUlQpO1xcbiBcXHR9XFxuIFxcbiBcXHRpZiAoYWxsb2NhdGVkICE9IGNvdW50KVxcbkBAIC0zNzYsNyArMzc2LDcgQEAgaW50IG90eDJfbWNhbV9lbnRyeV9pbml0KHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4gXFx0Zmxvd19jZmctXFx1MDAzZXVuaWNhc3Rfb2Zmc2V0ID0gdmZfdmxhbl9tYXhfZmxvd3M7XFxuIFxcdGZsb3dfY2ZnLVxcdTAwM2VyeF92bGFuX29mZnNldCA9IGZsb3dfY2ZnLVxcdTAwM2V1bmljYXN0X29mZnNldCArXFxuIFxcdFxcdFxcdFxcdFxcdGZsb3dfY2ZnLVxcdTAwM2V1Y2FzdF9mbHRfY250O1xcbi1cXHRwZnZmLVxcdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfVUNBU1RfRkxUUl9TVVBQT1JUO1xcbitcXHRvdHgyX3NldF9mbGFnKHBmdmYsIE9UWDJfRkxBR19VQ0FTVF9GTFRSX1NVUFBPUlQpO1xcbiBcXG4gXFx0LyogQ2hlY2sgaWYgTlBDX0RNQUMgZmllbGQgaXMgc3VwcG9ydGVkXFxuIFxcdCAqIGJ5IHRoZSBta2V4IHByb2ZpbGUgYmVmb3JlIHNldHRpbmcgVkxBTiBzdXBwb3J0IGZsYWcuXFxuQEAgLTQwMSwxMSArNDAxLDExIEBAIGludCBvdHgyX21jYW1fZW50cnlfaW5pdChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXFxuIFxcdH1cXG4gXFxuIFxcdGlmIChmcnNwLVxcdTAwM2VlbmFibGUpIHtcXG4tXFx0XFx0cGZ2Zi1cXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX1JYX1ZMQU5fU1VQUE9SVDtcXG4tXFx0XFx0cGZ2Zi1cXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX1ZGX1ZMQU5fU1VQUE9SVDtcXG4rXFx0XFx0b3R4Ml9zZXRfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfUlhfVkxBTl9TVVBQT1JUKTtcXG4rXFx0XFx0b3R4Ml9zZXRfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfVkZfVkxBTl9TVVBQT1JUKTtcXG4gXFx0fVxcbiBcXG4tXFx0cGZ2Zi1cXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX01DQU1fRU5UUklFU19BTExPQztcXG4rXFx0b3R4Ml9zZXRfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfTUNBTV9FTlRSSUVTX0FMTE9DKTtcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwZnZmLVxcdTAwM2VtYm94LmxvY2spO1xcbiBcXG4gXFx0LyogQWxsb2NhdGUgZW50cmllcyBmb3IgTnR1cGxlIGZpbHRlcnMgKi9cXG5AQCAtNDE1LDcgKzQxNSw3IEBAIGludCBvdHgyX21jYW1fZW50cnlfaW5pdChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuIFxcbi1cXHRwZnZmLVxcdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfVENfRkxPV0VSX1NVUFBPUlQ7XFxuK1xcdG90eDJfc2V0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1RDX0ZMT1dFUl9TVVBQT1JUKTtcXG4gXFxuIFxcdHJlZmNvdW50X3NldChcXHUwMDI2Zmxvd19jZmctXFx1MDAzZW1hcmtfZmxvd3MsIDEpO1xcbiBcXHRyZXR1cm4gMDtcXG5AQCAtNDc5LDcgKzQ3OSw3IEBAIGludCBvdHgyX21jYW1fZmxvd19pbml0KHN0cnVjdCBvdHgyX25pYyAqcGYpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbiBcXHQvKiBDaGVjayBpZiBNQ0FNIGVudHJpZXMgYXJlIGFsbG9jYXRlIG9yIG5vdCAqL1xcbi1cXHRpZiAoIShwZi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBPVFgyX0ZMQUdfVUNBU1RfRkxUUl9TVVBQT1JUKSlcXG4rXFx0aWYgKCFvdHgyX3Rlc3RfZmxhZyhwZiwgT1RYMl9GTEFHX1VDQVNUX0ZMVFJfU1VQUE9SVCkpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4gXFx0cGYtXFx1MDAzZW1hY190YWJsZSA9IGRldm1fa3phbGxvYyhwZi1cXHUwMDNlZGV2LCBzaXplb2Yoc3RydWN0IG90eDJfbWFjX3RhYmxlKVxcbkBAIC01MDEsNyArNTAxLDcgQEAgaW50IG90eDJfbWNhbV9mbG93X2luaXQoc3RydWN0IG90eDJfbmljICpwZilcXG4gXFx0aWYgKCFwZi1cXHUwMDNlZmxvd19jZmctXFx1MDAzZWJtYXBfdG9fZG1hY2luZGV4KVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuLVxcdHBmLVxcdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfRE1BQ0ZMVFJfU1VQUE9SVDtcXG4rXFx0b3R4Ml9zZXRfZmxhZyhwZiwgT1RYMl9GTEFHX0RNQUNGTFRSX1NVUFBPUlQpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtNTIxLDcgKzUyMSw3IEBAIHN0YXRpYyBpbnQgb3R4Ml9kb19hZGRfbWFjZmlsdGVyKHN0cnVjdCBvdHgyX25pYyAqcGYsIGNvbnN0IHU4ICptYWMpXFxuIFxcdHN0cnVjdCBucGNfaW5zdGFsbF9mbG93X3JlcSAqcmVxO1xcbiBcXHRpbnQgZXJyLCBpO1xcbiBcXG4tXFx0aWYgKCEocGYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgT1RYMl9GTEFHX1VDQVNUX0ZMVFJfU1VQUE9SVCkpXFxuK1xcdGlmICghb3R4Ml90ZXN0X2ZsYWcocGYsIE9UWDJfRkxBR19VQ0FTVF9GTFRSX1NVUFBPUlQpKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuIFxcdC8qIGRvbnQgaGF2ZSBmcmVlIG1jYW0gZW50cmllcyBvciB1YyBsaXN0IGlzIGdyZWF0ZXIgdGhhbiBhbGxvdGVkICovXFxuQEAgLTExNjcsNyArMTE2Nyw3IEBAIHN0YXRpYyBpbnQgb3R4Ml9pc19mbG93X3J1bGVfZG1hY2ZpbHRlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXFxuIFxcdHU2NCByaW5nX2Nvb2tpZSA9IGZzcC1cXHUwMDNlcmluZ19jb29raWU7XFxuIFxcdHUzMiBmbG93X3R5cGU7XFxuIFxcbi1cXHRpZiAoIShwZnZmLVxcdTAwM2VmbGFncyBcXHUwMDI2IE9UWDJfRkxBR19ETUFDRkxUUl9TVVBQT1JUKSlcXG4rXFx0aWYgKCFvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfRE1BQ0ZMVFJfU1VQUE9SVCkpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuIFxcdGZsb3dfdHlwZSA9IGZzcC1cXHUwMDNlZmxvd190eXBlIFxcdTAwMjYgfihGTE9XX0VYVCB8IEZMT1dfTUFDX0VYVCB8IEZMT1dfUlNTKTtcXG5AQCAtMTM2NCw3ICsxMzY0LDcgQEAgaW50IG90eDJfYWRkX2Zsb3coc3RydWN0IG90eDJfbmljICpwZnZmLCBzdHJ1Y3QgZXRodG9vbF9yeG5mYyAqbmZjKVxcbiBcXHR9XFxuIFxcbiBcXHRyaW5nID0gZXRodG9vbF9nZXRfZmxvd19zcGVjX3JpbmcoZnNwLVxcdTAwM2VyaW5nX2Nvb2tpZSk7XFxuLVxcdGlmICghKHBmdmYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgT1RYMl9GTEFHX05UVVBMRV9TVVBQT1JUKSlcXG4rXFx0aWYgKCFvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfTlRVUExFX1NVUFBPUlQpKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuIFxcdC8qIE51bWJlciBvZiBxdWV1ZXMgb24gYSBWRiBjYW4gYmUgZ3JlYXRlciBvciBsZXNzIHRoYW5cXG5AQCAtMTU5Niw3ICsxNTk2LDcgQEAgaW50IG90eDJfZGVzdHJveV9udHVwbGVfZmxvd3Moc3RydWN0IG90eDJfbmljICpwZnZmKVxcbiBcXHRzdHJ1Y3Qgb3R4Ml9mbG93ICppdGVyLCAqdG1wO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4tXFx0aWYgKCEocGZ2Zi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBPVFgyX0ZMQUdfTlRVUExFX1NVUFBPUlQpKVxcbitcXHRpZiAoIW90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19OVFVQTEVfU1VQUE9SVCkpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4gXFx0aWYgKCFmbG93X2NmZy1cXHUwMDNlbWF4X2Zsb3dzKVxcbkBAIC0xNjI5LDcgKzE2MjksNyBAQCBpbnQgb3R4Ml9kZXN0cm95X21jYW1fZmxvd3Moc3RydWN0IG90eDJfbmljICpwZnZmKVxcbiBcXHRzdHJ1Y3Qgb3R4Ml9mbG93ICppdGVyLCAqdG1wO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4tXFx0aWYgKCEocGZ2Zi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBPVFgyX0ZMQUdfTUNBTV9FTlRSSUVTX0FMTE9DKSlcXG4rXFx0aWYgKCFvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfTUNBTV9FTlRSSUVTX0FMTE9DKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBcXHQvKiByZW1vdmUgYWxsIGZsb3dzICovXFxuQEAgLTE2NTgsNyArMTY1OCw3IEBAIGludCBvdHgyX2Rlc3Ryb3lfbWNhbV9mbG93cyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdH1cXG4gXFxuLVxcdHBmdmYtXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5PVFgyX0ZMQUdfTUNBTV9FTlRSSUVTX0FMTE9DO1xcbitcXHRvdHgyX2NsZWFyX2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX01DQU1fRU5UUklFU19BTExPQyk7XFxuIFxcdGZsb3dfY2ZnLVxcdTAwM2VtYXhfZmxvd3MgPSAwO1xcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNnBmdmYtXFx1MDAzZW1ib3gubG9jayk7XFxuIFxcbkBAIC0xNzIxLDcgKzE3MjEsNyBAQCBpbnQgb3R4Ml9lbmFibGVfcnh2bGFuKHN0cnVjdCBvdHgyX25pYyAqcGYsIGJvb2wgZW5hYmxlKVxcbiBcXHRpbnQgZXJyO1xcbiBcXG4gXFx0LyogRG9udCBoYXZlIGVub3VnaCBtY2FtIGVudHJpZXMgKi9cXG4tXFx0aWYgKCEocGYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgT1RYMl9GTEFHX1JYX1ZMQU5fU1VQUE9SVCkpXFxuK1xcdGlmICghb3R4Ml90ZXN0X2ZsYWcocGYsIE9UWDJfRkxBR19SWF9WTEFOX1NVUFBPUlQpKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuIFxcdGlmIChlbmFibGUpIHtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNcXG5pbmRleCBjMGUyMTAwZGUxZDkzLi4xZTE3ZjhkNDlmZDQ0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXFxuQEAgLTg3OSw3ICs4NzksNyBAQCBzdGF0aWMgdm9pZCBvdHgyX2hhbmRsZV9saW5rX2V2ZW50KHN0cnVjdCBvdHgyX25pYyAqcGYpXFxuIFxcdHN0cnVjdCBjZ3hfbGlua191c2VyX2luZm8gKmxpbmZvID0gXFx1MDAyNnBmLVxcdTAwM2VsaW5mbztcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmLVxcdTAwM2VuZXRkZXY7XFxuIFxcbi1cXHRpZiAocGYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgT1RYMl9GTEFHX1BPUlRfVVApXFxuK1xcdGlmIChvdHgyX3Rlc3RfZmxhZyhwZiwgT1RYMl9GTEFHX1BPUlRfVVApKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRwcl9pbmZvKFxcXCIlcyBOSUMgTGluayBpcyAlcyAlZCBNYnBzICVzIGR1cGxleFxcXFxuXFxcIiwgbmV0ZGV2LVxcdTAwM2VuYW1lLFxcbkBAIC05MDcsMTEgKzkwNywxMSBAQCBzdGF0aWMgaW50IG90eDJfbWJveF91cF9oYW5kbGVyX3JlcF9ldmVudF91cF9ub3RpZnkoc3RydWN0IG90eDJfbmljICpwZixcXG4gXFxuIFxcdGlmIChpbmZvLVxcdTAwM2VldmVudCA9PSBSVlVfRVZFTlRfUE9SVF9TVEFURSkge1xcbiBcXHRcXHRpZiAoaW5mby1cXHUwMDNlZXZ0X2RhdGEucG9ydF9zdGF0ZSkge1xcbi1cXHRcXHRcXHRwZi1cXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX1BPUlRfVVA7XFxuK1xcdFxcdFxcdG90eDJfc2V0X2ZsYWcocGYsIE9UWDJfRkxBR19QT1JUX1VQKTtcXG4gXFx0XFx0XFx0bmV0aWZfY2Fycmllcl9vbihuZXRkZXYpO1xcbiBcXHRcXHRcXHRuZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKG5ldGRldik7XFxuIFxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdHBmLVxcdTAwM2VmbGFncyBcXHUwMDI2PSB+T1RYMl9GTEFHX1BPUlRfVVA7XFxuK1xcdFxcdFxcdG90eDJfY2xlYXJfZmxhZyhwZiwgT1RYMl9GTEFHX1BPUlRfVVApO1xcbiBcXHRcXHRcXHRuZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTtcXG4gXFx0XFx0XFx0bmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTtcXG4gXFx0XFx0fVxcbkBAIC05NTMsNyArOTUzLDcgQEAgaW50IG90eDJfbWJveF91cF9oYW5kbGVyX2NneF9saW5rX2V2ZW50KHN0cnVjdCBvdHgyX25pYyAqcGYsXFxuIFxcdH1cXG4gXFxuIFxcdC8qIGludGVyZmFjZSBoYXMgbm90IGJlZW4gZnVsbHkgY29uZmlndXJlZCB5ZXQgKi9cXG4tXFx0aWYgKHBmLVxcdTAwM2VmbGFncyBcXHUwMDI2IE9UWDJfRkxBR19JTlRGX0RPV04pXFxuK1xcdGlmIChvdHgyX3Rlc3RfZmxhZyhwZiwgT1RYMl9GTEFHX0lOVEZfRE9XTikpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4gXFx0b3R4Ml9oYW5kbGVfbGlua19ldmVudChwZik7XFxuQEAgLTE4MjgsNyArMTgyOCw3IEBAIHZvaWQgb3R4Ml9mcmVlX2h3X3Jlc291cmNlcyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmKVxcbiBcXHRmcmVlX3JlcSA9IG90eDJfbWJveF9hbGxvY19tc2dfbml4X2xmX2ZyZWUobWJveCk7XFxuIFxcdGlmIChmcmVlX3JlcSkge1xcbiBcXHRcXHRmcmVlX3JlcS1cXHUwMDNlZmxhZ3MgPSBOSVhfTEZfRElTQUJMRV9GTE9XUyB8IE5JWF9MRl9ET05UX0ZSRUVfREZUX0lEWFM7XFxuLVxcdFxcdGlmICghKHBmLVxcdTAwM2VmbGFncyBcXHUwMDI2IE9UWDJfRkxBR19QRl9TSFVURE9XTikpXFxuK1xcdFxcdGlmICghb3R4Ml90ZXN0X2ZsYWcocGYsIE9UWDJfRkxBR19QRl9TSFVURE9XTikpXFxuIFxcdFxcdFxcdGZyZWVfcmVxLVxcdTAwM2VmbGFncyB8PSBOSVhfTEZfRE9OVF9GUkVFX1RYX1ZUQUc7XFxuIFxcdFxcdGlmIChvdHgyX3N5bmNfbWJveF9tc2cobWJveCkpXFxuIFxcdFxcdFxcdGRldl9lcnIocGYtXFx1MDAzZWRldiwgXFxcIiVzIGZhaWxlZCB0byBmcmVlIG5peGxmXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuQEAgLTIwMDcsNiArMjAwNywxNCBAQCBpbnQgb3R4Ml9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdGdvdG8gZXJyX2ZyZWVfbWVtO1xcbiBcXG4rXFx0ZXJyID0gb3R4Ml9tcXByaW9fdXAocGYpO1xcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIocGYtXFx1MDAzZW5ldGRldixcXG4rXFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogZmFpbGVkIHRvIHJlc3RvcmUgc2hhcGVycyBkdXJpbmcgb3BlbjogJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgIGVycik7XFxuK1xcdFxcdGdvdG8gZXJyX2ZyZWVfaHc7XFxuK1xcdH1cXG4rXFxuIFxcdC8qIFJlZ2lzdGVyIE5BUEkgaGFuZGxlciAqL1xcbiBcXHRmb3IgKHFpZHggPSAwOyBxaWR4IFxcdTAwM2MgcGYtXFx1MDAzZWh3LmNpbnRfY250OyBxaWR4KyspIHtcXG4gXFx0XFx0Y3FfcG9sbCA9IFxcdTAwMjZxc2V0LVxcdTAwM2VuYXBpW3FpZHhdO1xcbkBAIC0yMTM1LDIxICsyMTQzLDIxIEBAIGludCBvdHgyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4gXFx0fVxcbiBcXHRvdHgyX3dyaXRlNjQocGYsIE5JWF9MRl9SQVNfRU5BX1cxUywgTklYX0xGX1JBU19NQVNLKTtcXG4gXFxuLVxcdGlmIChwZi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBPVFgyX0ZMQUdfUlhfVkxBTl9TVVBQT1JUKVxcbitcXHRpZiAob3R4Ml90ZXN0X2ZsYWcocGYsIE9UWDJfRkxBR19SWF9WTEFOX1NVUFBPUlQpKVxcbiBcXHRcXHRvdHgyX2VuYWJsZV9yeHZsYW4ocGYsIHRydWUpO1xcbiBcXG4gXFx0LyogV2hlbiByZWluaXRpYWxpemluZyBlbmFibGUgdGltZSBzdGFtcGluZyBpZiBpdCBpcyBlbmFibGVkIGJlZm9yZSAqL1xcbi1cXHRpZiAocGYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgT1RYMl9GTEFHX1RYX1RTVEFNUF9FTkFCTEVEKSB7XFxuLVxcdFxcdHBmLVxcdTAwM2VmbGFncyBcXHUwMDI2PSB+T1RYMl9GTEFHX1RYX1RTVEFNUF9FTkFCTEVEO1xcbitcXHRpZiAob3R4Ml90ZXN0X2ZsYWcocGYsIE9UWDJfRkxBR19UWF9UU1RBTVBfRU5BQkxFRCkpIHtcXG4rXFx0XFx0b3R4Ml9jbGVhcl9mbGFnKHBmLCBPVFgyX0ZMQUdfVFhfVFNUQU1QX0VOQUJMRUQpO1xcbiBcXHRcXHRvdHgyX2NvbmZpZ19od190eF90c3RhbXAocGYsIHRydWUpO1xcbiBcXHR9XFxuLVxcdGlmIChwZi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBPVFgyX0ZMQUdfUlhfVFNUQU1QX0VOQUJMRUQpIHtcXG4tXFx0XFx0cGYtXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5PVFgyX0ZMQUdfUlhfVFNUQU1QX0VOQUJMRUQ7XFxuK1xcdGlmIChvdHgyX3Rlc3RfZmxhZyhwZiwgT1RYMl9GTEFHX1JYX1RTVEFNUF9FTkFCTEVEKSkge1xcbitcXHRcXHRvdHgyX2NsZWFyX2ZsYWcocGYsIE9UWDJfRkxBR19SWF9UU1RBTVBfRU5BQkxFRCk7XFxuIFxcdFxcdG90eDJfY29uZmlnX2h3X3J4X3RzdGFtcChwZiwgdHJ1ZSk7XFxuIFxcdH1cXG4gXFxuLVxcdHBmLVxcdTAwM2VmbGFncyBcXHUwMDI2PSB+T1RYMl9GTEFHX0lOVEZfRE9XTjtcXG4tXFx0cGYtXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5PVFgyX0ZMQUdfUE9SVF9VUDtcXG4rXFx0b3R4Ml9jbGVhcl9mbGFnKHBmLCBPVFgyX0ZMQUdfSU5URl9ET1dOKTtcXG4rXFx0b3R4Ml9jbGVhcl9mbGFnKHBmLCBPVFgyX0ZMQUdfUE9SVF9VUCk7XFxuIFxcdC8qICdpbnRmX2Rvd24nIG1heSBiZSBjaGVja2VkIG9uIGFueSBjcHUgKi9cXG4gXFx0c21wX3dtYigpO1xcbiBcXG5AQCAtMjE2MSw3ICsyMTY5LDcgQEAgaW50IG90eDJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiBcXHRcXHRvdHgyX2hhbmRsZV9saW5rX2V2ZW50KHBmKTtcXG4gXFxuIFxcdC8qIEluc3RhbGwgRE1BQyBGaWx0ZXJzICovXFxuLVxcdGlmIChwZi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBPVFgyX0ZMQUdfRE1BQ0ZMVFJfU1VQUE9SVClcXG4rXFx0aWYgKG90eDJfdGVzdF9mbGFnKHBmLCBPVFgyX0ZMQUdfRE1BQ0ZMVFJfU1VQUE9SVCkpXFxuIFxcdFxcdG90eDJfZG1hY2ZsdF9yZWluc3RhbGxfZmxvd3MocGYpO1xcbiBcXG4gXFx0b3R4Ml90Y19hcHBseV9pbmdyZXNzX3BvbGljZV9ydWxlcyhwZik7XFxuQEAgLTIxODYsNyArMjE5NCw3IEBAIGludCBvdHgyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4gZXJyX3R4X3N0b3BfcXVldWVzOlxcbiBcXHRuZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTtcXG4gXFx0bmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTtcXG4tXFx0cGYtXFx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19JTlRGX0RPV047XFxuK1xcdG90eDJfc2V0X2ZsYWcocGYsIE9UWDJfRkxBR19JTlRGX0RPV04pO1xcbiBcXHQvKiBmcmVlIE5JWExGIFBPSVNPTiBpcnEgKi9cXG4gXFx0dmVjID0gcGNpX2lycV92ZWN0b3IocGYtXFx1MDAzZXBkZXYsXFxuIFxcdFxcdFxcdCAgICAgcGYtXFx1MDAzZWh3Lm5peF9tc2l4b2ZmICsgTklYX0xGX1BPSVNPTl9WRUMpO1xcbkBAIC0yMjA1LDYgKzIyMTMsNyBAQCBpbnQgb3R4Ml9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIFxcdGZyZWVfaXJxKHZlYywgcGYpO1xcbiBlcnJfZGlzYWJsZV9uYXBpOlxcbiBcXHRvdHgyX2Rpc2FibGVfbmFwaShwZik7XFxuK2Vycl9mcmVlX2h3OlxcbiBcXHRvdHgyX2ZyZWVfaHdfcmVzb3VyY2VzKHBmKTtcXG4gZXJyX2ZyZWVfbWVtOlxcbiBcXHRvdHgyX2ZyZWVfcXVldWVfbWVtKHFzZXQpO1xcbkBAIC0yMjIwLDEzICsyMjI5LDEzIEBAIGludCBvdHgyX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4gXFx0aW50IHFpZHgsIHZlYywgd3JrO1xcbiBcXG4gXFx0LyogSWYgdGhlIERPV04gZmxhZyBpcyBzZXQgcmVzb3VyY2VzIGFyZSBhbHJlYWR5IGZyZWVkICovXFxuLVxcdGlmIChwZi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBPVFgyX0ZMQUdfSU5URl9ET1dOKVxcbitcXHRpZiAob3R4Ml90ZXN0X2ZsYWcocGYsIE9UWDJfRkxBR19JTlRGX0RPV04pKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdG5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7XFxuIFxcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpO1xcbiBcXG4tXFx0cGYtXFx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19JTlRGX0RPV047XFxuK1xcdG90eDJfc2V0X2ZsYWcocGYsIE9UWDJfRkxBR19JTlRGX0RPV04pO1xcbiBcXHQvKiAnaW50Zl9kb3duJyBtYXkgYmUgY2hlY2tlZCBvbiBhbnkgY3B1ICovXFxuIFxcdHNtcF93bWIoKTtcXG4gXFxuQEAgLTIyODAsNiArMjI4OSw3IEBAIGludCBvdHgyX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4gXFx0Zm9yIChxaWR4ID0gMDsgcWlkeCBcXHUwMDNjIG5ldGRldi1cXHUwMDNlbnVtX3R4X3F1ZXVlczsgcWlkeCsrKVxcbiBcXHRcXHRuZXRkZXZfdHhfcmVzZXRfcXVldWUobmV0ZGV2X2dldF90eF9xdWV1ZShuZXRkZXYsIHFpZHgpKTtcXG4gXFxuK1xcdHN5bmNocm9uaXplX25ldCgpO1xcbiBcXHRvdHgyX2ZyZWVfcXVldWVfbWVtKHFzZXQpO1xcbiBcXHQvKiBEbyBub3QgY2xlYXIgUlEvU1EgcmluZ3NpemUgc2V0dGluZ3MgKi9cXG4gXFx0bWVtc2V0X3N0YXJ0YXQocXNldCwgMCwgc3FlX2NudCk7XFxuQEAgLTI0NTcsNyArMjQ2Nyw3IEBAIHN0YXRpYyBpbnQgb3R4Ml9jb25maWdfaHdfcnhfdHN0YW1wKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgYm9vbCBlbmFibGUpXFxuIFxcdHN0cnVjdCBtc2dfcmVxICpyZXE7XFxuIFxcdGludCBlcnI7XFxuIFxcbi1cXHRpZiAocGZ2Zi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBPVFgyX0ZMQUdfUlhfVFNUQU1QX0VOQUJMRUQgXFx1MDAyNlxcdTAwMjYgZW5hYmxlKVxcbitcXHRpZiAob3R4Ml90ZXN0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1JYX1RTVEFNUF9FTkFCTEVEKSBcXHUwMDI2XFx1MDAyNiBlbmFibGUpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2cGZ2Zi1cXHUwMDNlbWJveC5sb2NrKTtcXG5AQCAtMjQ3OCw5ICsyNDg4LDkgQEAgc3RhdGljIGludCBvdHgyX2NvbmZpZ19od19yeF90c3RhbXAoc3RydWN0IG90eDJfbmljICpwZnZmLCBib29sIGVuYWJsZSlcXG4gXFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2cGZ2Zi1cXHUwMDNlbWJveC5sb2NrKTtcXG4gXFx0aWYgKGVuYWJsZSlcXG4tXFx0XFx0cGZ2Zi1cXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX1JYX1RTVEFNUF9FTkFCTEVEO1xcbitcXHRcXHRvdHgyX3NldF9mbGFnKHBmdmYsIE9UWDJfRkxBR19SWF9UU1RBTVBfRU5BQkxFRCk7XFxuIFxcdGVsc2VcXG4tXFx0XFx0cGZ2Zi1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gfk9UWDJfRkxBR19SWF9UU1RBTVBfRU5BQkxFRDtcXG4rXFx0XFx0b3R4Ml9jbGVhcl9mbGFnKHBmdmYsIE9UWDJfRkxBR19SWF9UU1RBTVBfRU5BQkxFRCk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC0yNDg5LDcgKzI0OTksNyBAQCBzdGF0aWMgaW50IG90eDJfY29uZmlnX2h3X3R4X3RzdGFtcChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGJvb2wgZW5hYmxlKVxcbiBcXHRzdHJ1Y3QgbXNnX3JlcSAqcmVxO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4tXFx0aWYgKHBmdmYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgT1RYMl9GTEFHX1RYX1RTVEFNUF9FTkFCTEVEIFxcdTAwMjZcXHUwMDI2IGVuYWJsZSlcXG4rXFx0aWYgKG90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19UWF9UU1RBTVBfRU5BQkxFRCkgXFx1MDAyNlxcdTAwMjYgZW5hYmxlKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNnBmdmYtXFx1MDAzZW1ib3gubG9jayk7XFxuQEAgLTI1MTAsOSArMjUyMCw5IEBAIHN0YXRpYyBpbnQgb3R4Ml9jb25maWdfaHdfdHhfdHN0YW1wKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgYm9vbCBlbmFibGUpXFxuIFxcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNnBmdmYtXFx1MDAzZW1ib3gubG9jayk7XFxuIFxcdGlmIChlbmFibGUpXFxuLVxcdFxcdHBmdmYtXFx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19UWF9UU1RBTVBfRU5BQkxFRDtcXG4rXFx0XFx0b3R4Ml9zZXRfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfVFhfVFNUQU1QX0VOQUJMRUQpO1xcbiBcXHRlbHNlXFxuLVxcdFxcdHBmdmYtXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5PVFgyX0ZMQUdfVFhfVFNUQU1QX0VOQUJMRUQ7XFxuK1xcdFxcdG90eDJfY2xlYXJfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfVFhfVFNUQU1QX0VOQUJMRUQpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtMjUzNyw4ICsyNTQ3LDggQEAgaW50IG90eDJfY29uZmlnX2h3dHN0YW1wX3NldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXG4gXFx0c3dpdGNoIChjb25maWctXFx1MDAzZXR4X3R5cGUpIHtcXG4gXFx0Y2FzZSBIV1RTVEFNUF9UWF9PRkY6XFxuLVxcdFxcdGlmIChwZnZmLVxcdTAwM2VmbGFncyBcXHUwMDI2IE9UWDJfRkxBR19QVFBfT05FU1RFUF9TWU5DKVxcbi1cXHRcXHRcXHRwZnZmLVxcdTAwM2VmbGFncyBcXHUwMDI2PSB+T1RYMl9GTEFHX1BUUF9PTkVTVEVQX1NZTkM7XFxuK1xcdFxcdGlmIChvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfUFRQX09ORVNURVBfU1lOQykpXFxuK1xcdFxcdFxcdG90eDJfY2xlYXJfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfUFRQX09ORVNURVBfU1lOQyk7XFxuIFxcbiBcXHRcXHRjYW5jZWxfZGVsYXllZF93b3JrKFxcdTAwMjZwZnZmLVxcdTAwM2VwdHAtXFx1MDAzZXN5bmN0c3RhbXBfd29yayk7XFxuIFxcdFxcdG90eDJfY29uZmlnX2h3X3R4X3RzdGFtcChwZnZmLCBmYWxzZSk7XFxuQEAgLTI1NDksNyArMjU1OSw3IEBAIGludCBvdHgyX2NvbmZpZ19od3RzdGFtcF9zZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgXFxcIk9uZS1zdGVwIHRpbWUgc3RhbXBpbmcgaXMgbm90IHN1cHBvcnRlZFxcXCIpO1xcbiBcXHRcXHRcXHRyZXR1cm4gLUVSQU5HRTtcXG4gXFx0XFx0fVxcbi1cXHRcXHRwZnZmLVxcdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfUFRQX09ORVNURVBfU1lOQztcXG4rXFx0XFx0b3R4Ml9zZXRfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfUFRQX09ORVNURVBfU1lOQyk7XFxuIFxcdFxcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcXHUwMDI2cGZ2Zi1cXHUwMDNlcHRwLVxcdTAwM2VzeW5jdHN0YW1wX3dvcmssXFxuIFxcdFxcdFxcdFxcdCAgICAgIG1zZWNzX3RvX2ppZmZpZXMoNTAwKSk7XFxuIFxcdFxcdGZhbGx0aHJvdWdoO1xcbkBAIC0yODM1LDcgKzI4NDUsNyBAQCBzdGF0aWMgaW50IG90eDJfc2V0X3ZmX3ZsYW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHZmLCB1MTYgdmxhbiwgdTggcW9zLFxcbiBcXHRpZiAocHJvdG8gIT0gaHRvbnMoRVRIX1BfODAyMVEpKVxcbiBcXHRcXHRyZXR1cm4gLUVQUk9UT05PU1VQUE9SVDtcXG4gXFxuLVxcdGlmICghKHBmLVxcdTAwM2VmbGFncyBcXHUwMDI2IE9UWDJfRkxBR19WRl9WTEFOX1NVUFBPUlQpKVxcbitcXHRpZiAoIW90eDJfdGVzdF9mbGFnKHBmLCBPVFgyX0ZMQUdfVkZfVkxBTl9TVVBQT1JUKSlcXG4gXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiBcXG4gXFx0cmV0dXJuIG90eDJfZG9fc2V0X3ZmX3ZsYW4ocGYsIHZmLCB2bGFuLCBxb3MsIHByb3RvKTtcXG5AQCAtMjkyMyw2ICsyOTMzLDEyIEBAIHN0YXRpYyBpbnQgb3R4Ml94ZHBfc2V0dXAoc3RydWN0IG90eDJfbmljICpwZiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbiBcXHRib29sIGlmX3VwID0gbmV0aWZfcnVubmluZyhwZi1cXHUwMDNlbmV0ZGV2KTtcXG4gXFx0c3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZztcXG4gXFxuK1xcdGlmIChwcm9nIFxcdTAwMjZcXHUwMDI2IHBmLVxcdTAwM2VtcXByaW8ucmF0ZV9saW1pdCkge1xcbitcXHRcXHRuZXRkZXZfZXJyKGRldixcXG4rXFx0XFx0XFx0ICAgXFxcIlhEUDogY2Fubm90IGF0dGFjaCB3aGlsZSBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgaXMgYWN0aXZlXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbiBcXHRpZiAocHJvZyBcXHUwMDI2XFx1MDAyNiBkZXYtXFx1MDAzZW10dSBcXHUwMDNlIE1BWF9YRFBfTVRVKSB7XFxuIFxcdFxcdG5ldGRldl93YXJuKGRldiwgXFxcIkp1bWJvIGZyYW1lcyBub3QgeWV0IHN1cHBvcnRlZCB3aXRoIFhEUFxcXFxuXFxcIik7XFxuIFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG5AQCAtMzA4Niw3ICszMTAyLDcgQEAgaW50IG90eDJfcmVhbGxvY19tc2l4X3ZlY3RvcnMoc3RydWN0IG90eDJfbmljICpwZilcXG4gXFx0ICogaW50ZXJydXB0IHJhbmdlIChRSU5ULCBDSU5ULCBHSU5ULCBFUlIgYW5kIFBPSVNPTiB2ZWN0b3JzKS5cXG4gXFx0ICovXFxuIFxcdG51bV92ZWMgPSBody1cXHUwMDNlbml4X21zaXhvZmY7XFxuLVxcdGlmIChwZi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBPVFgyX0ZMQUdfUkVQX01PREVfRU5BQkxFRClcXG4rXFx0aWYgKG90eDJfdGVzdF9mbGFnKHBmLCBPVFgyX0ZMQUdfUkVQX01PREVfRU5BQkxFRCkpXFxuIFxcdFxcdG51bV92ZWMgKz0gTklYX0xGX0NJTlRfVkVDX1NUQVJUICsgaHctXFx1MDAzZW1heF9xdWV1ZXM7XFxuIFxcdGVsc2VcXG4gXFx0XFx0bnVtX3ZlYyArPSBOSVhfTEZfUE9JU09OX1ZFQyArIDE7XFxuQEAgLTMyNzMsNyArMzI4OSw3IEBAIHN0YXRpYyBpbnQgb3R4Ml9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxcbiBcXHRwZi1cXHUwMDNlcGRldiA9IHBkZXY7XFxuIFxcdHBmLVxcdTAwM2VkZXYgPSBkZXY7XFxuIFxcdHBmLVxcdTAwM2V0b3RhbF92ZnMgPSBwY2lfc3Jpb3ZfZ2V0X3RvdGFsdmZzKHBkZXYpO1xcbi1cXHRwZi1cXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX0lOVEZfRE9XTjtcXG4rXFx0b3R4Ml9zZXRfZmxhZyhwZiwgT1RYMl9GTEFHX0lOVEZfRE9XTik7XFxuIFxcbiBcXHRodyA9IFxcdTAwMjZwZi1cXHUwMDNlaHc7XFxuIFxcdGh3LVxcdTAwM2VwZGV2ID0gcGRldjtcXG5AQCAtMzMyOCwyMyArMzM0NCwyMyBAQCBzdGF0aWMgaW50IG90eDJfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBlcnJfZGVsX21jYW1fZW50cmllcztcXG4gXFxuLVxcdGlmIChwZi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBPVFgyX0ZMQUdfTlRVUExFX1NVUFBPUlQpXFxuK1xcdGlmIChvdHgyX3Rlc3RfZmxhZyhwZiwgT1RYMl9GTEFHX05UVVBMRV9TVVBQT1JUKSlcXG4gXFx0XFx0bmV0ZGV2LVxcdTAwM2Vod19mZWF0dXJlcyB8PSBORVRJRl9GX05UVVBMRTtcXG4gXFxuLVxcdGlmIChwZi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBPVFgyX0ZMQUdfVUNBU1RfRkxUUl9TVVBQT1JUKVxcbitcXHRpZiAob3R4Ml90ZXN0X2ZsYWcocGYsIE9UWDJfRkxBR19VQ0FTVF9GTFRSX1NVUFBPUlQpKVxcbiBcXHRcXHRuZXRkZXYtXFx1MDAzZXByaXZfZmxhZ3MgfD0gSUZGX1VOSUNBU1RfRkxUO1xcbiBcXG4gXFx0LyogU3VwcG9ydCBUU08gb24gdGFnIGludGVyZmFjZSAqL1xcbiBcXHRuZXRkZXYtXFx1MDAzZXZsYW5fZmVhdHVyZXMgfD0gbmV0ZGV2LVxcdTAwM2VmZWF0dXJlcztcXG4gXFx0bmV0ZGV2LVxcdTAwM2Vod19mZWF0dXJlcyAgfD0gTkVUSUZfRl9IV19WTEFOX0NUQUdfVFggfFxcbiBcXHRcXHRcXHRcXHRORVRJRl9GX0hXX1ZMQU5fU1RBR19UWDtcXG4tXFx0aWYgKHBmLVxcdTAwM2VmbGFncyBcXHUwMDI2IE9UWDJfRkxBR19SWF9WTEFOX1NVUFBPUlQpXFxuK1xcdGlmIChvdHgyX3Rlc3RfZmxhZyhwZiwgT1RYMl9GTEFHX1JYX1ZMQU5fU1VQUE9SVCkpXFxuIFxcdFxcdG5ldGRldi1cXHUwMDNlaHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX0NUQUdfUlggfFxcbiBcXHRcXHRcXHRcXHQgICAgICAgTkVUSUZfRl9IV19WTEFOX1NUQUdfUlg7XFxuIFxcdG5ldGRldi1cXHUwMDNlZmVhdHVyZXMgfD0gbmV0ZGV2LVxcdTAwM2Vod19mZWF0dXJlcztcXG4gXFxuIFxcdC8qIEhXIHN1cHBvcnRzIHRjIG9mZmxvYWQgYnV0IG11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIG4tdHVwbGUgZmlsdGVycyAqL1xcbi1cXHRpZiAocGYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgT1RYMl9GTEFHX1RDX0ZMT1dFUl9TVVBQT1JUKVxcbitcXHRpZiAob3R4Ml90ZXN0X2ZsYWcocGYsIE9UWDJfRkxBR19UQ19GTE9XRVJfU1VQUE9SVCkpXFxuIFxcdFxcdG5ldGRldi1cXHUwMDNlaHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19UQztcXG4gXFxuIFxcdG5ldGRldi1cXHUwMDNlaHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9MT09QQkFDSyB8IE5FVElGX0ZfUlhBTEw7XFxuQEAgLTM1OTUsMTggKzM2MTEsMTggQEAgc3RhdGljIHZvaWQgb3R4Ml9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIFxcbiBcXHRwZiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuIFxcbi1cXHRwZi1cXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX1BGX1NIVVRET1dOO1xcbitcXHRvdHgyX3NldF9mbGFnKHBmLCBPVFgyX0ZMQUdfUEZfU0hVVERPV04pO1xcbiBcXG4tXFx0aWYgKHBmLVxcdTAwM2VmbGFncyBcXHUwMDI2IE9UWDJfRkxBR19UWF9UU1RBTVBfRU5BQkxFRClcXG4rXFx0aWYgKG90eDJfdGVzdF9mbGFnKHBmLCBPVFgyX0ZMQUdfVFhfVFNUQU1QX0VOQUJMRUQpKVxcbiBcXHRcXHRvdHgyX2NvbmZpZ19od190eF90c3RhbXAocGYsIGZhbHNlKTtcXG4tXFx0aWYgKHBmLVxcdTAwM2VmbGFncyBcXHUwMDI2IE9UWDJfRkxBR19SWF9UU1RBTVBfRU5BQkxFRClcXG4rXFx0aWYgKG90eDJfdGVzdF9mbGFnKHBmLCBPVFgyX0ZMQUdfUlhfVFNUQU1QX0VOQUJMRUQpKVxcbiBcXHRcXHRvdHgyX2NvbmZpZ19od19yeF90c3RhbXAocGYsIGZhbHNlKTtcXG4gXFxuIFxcdC8qIERpc2FibGUgODAyLjN4IHBhdXNlIGZyYW1lcyAqL1xcbi1cXHRpZiAocGYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgT1RYMl9GTEFHX1JYX1BBVVNFX0VOQUJMRUQgfHxcXG4tXFx0ICAgIChwZi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBPVFgyX0ZMQUdfVFhfUEFVU0VfRU5BQkxFRCkpIHtcXG4tXFx0XFx0cGYtXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5PVFgyX0ZMQUdfUlhfUEFVU0VfRU5BQkxFRDtcXG4tXFx0XFx0cGYtXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5PVFgyX0ZMQUdfVFhfUEFVU0VfRU5BQkxFRDtcXG4rXFx0aWYgKG90eDJfdGVzdF9mbGFnKHBmLCBPVFgyX0ZMQUdfUlhfUEFVU0VfRU5BQkxFRCkgfHxcXG4rXFx0ICAgIG90eDJfdGVzdF9mbGFnKHBmLCBPVFgyX0ZMQUdfVFhfUEFVU0VfRU5BQkxFRCkpIHtcXG4rXFx0XFx0b3R4Ml9jbGVhcl9mbGFnKHBmLCBPVFgyX0ZMQUdfUlhfUEFVU0VfRU5BQkxFRCk7XFxuK1xcdFxcdG90eDJfY2xlYXJfZmxhZyhwZiwgT1RYMl9GTEFHX1RYX1BBVVNFX0VOQUJMRUQpO1xcbiBcXHRcXHRvdHgyX2NvbmZpZ19wYXVzZV9mcm0ocGYpO1xcbiBcXHR9XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuY1xcbmluZGV4IDAzOWZkNDdlYmY1MjIuLjcwZDk5YWUzZGVmYjUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmNcXG5AQCAtMTYsNiArMTYsOCBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3RjX2FjdC90Y19taXJyZWQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC90Y19hY3QvdGNfdmxhbi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2lwdjYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9wa3Rfc2NoZWQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9zY2hfZ2VuZXJpYy5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcImNuMTBrLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJvdHgyX2NvbW1vbi5oXFxcIlxcbkBAIC0zMSw2ICszMywxMCBAQFxcbiBcXG4gI2RlZmluZSBNQ0FTVF9JTlZBTElEX0dSUFxcdFxcdCgtMVUpXFxuICNkZWZpbmUgUkFURV9NQU5USVNTQV9CSVRTXFx0XFx0OFxcbisvKiBNaW4gcGVyLXF1ZXVlIGVncmVzcyBzaGFwaW5nIHJhdGUgdGhlIE5JWCBUTFggZW5jb2RlciBzdXBwb3J0cyAoMiBNYnBzKS4gKi9cXG4rI2RlZmluZSBPVFgyX01RUFJJT19NSU5fUkFURV9CWVRFU19QU1xcdDI1MDAwMFVMTFxcbisvKiBNYXggZWdyZXNzIHNoYXBpbmcgcmF0ZSB0aGUgTklYIFRMWCBlbmNvZGVyIHN1cHBvcnRzICgxMzA4MTYgTWJwcykuICovXFxuKyNkZWZpbmUgT1RYMl9NUVBSSU9fTUFYX1JBVEVfQllURVNfUFNcXHQoKE1BWF9CVVJTVF9TSVpFICogMTAwMDAwMFVMTCkgLyA4VUxMKVxcbiBcXG4gc3RhdGljIHZvaWQgb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTMyIGJ1cnN0LFxcbiBcXHRcXHRcXHRcXHQgICAgICB1MzIgKmJ1cnN0X2V4cCwgdTMyICpidXJzdF9tYW50aXNzYSlcXG5AQCAtNjEsNiArNjcsOSBAQCBzdGF0aWMgdm9pZCBvdHgyX2dldF9lZ3Jlc3NfYnVyc3RfY2ZnKHN0cnVjdCBvdHgyX25pYyAqbmljLCB1MzIgYnVyc3QsXFxuIFxcdFxcdFxcdCpidXJzdF9tYW50aXNzYSA9IHRtcCAvICgxVUxMIFxcdTAwM2NcXHUwMDNjICgqYnVyc3RfZXhwIC0gNykpO1xcbiBcXHRcXHR9XFxuIFxcdH0gZWxzZSB7XFxuK1xcdFxcdC8qIGJ1cnN0IDA6IGxhcmdlc3QgZW5jb2RhYmxlIGJ1cnN0IChDTjEwS19NQVhfQlVSU1RfU0laRSBvblxcbitcXHRcXHQgKiBDTjEwSyksIG5vdCBhIG1pbmltYWwgYnVyc3QuXFxuK1xcdFxcdCAqL1xcbiBcXHRcXHQqYnVyc3RfZXhwID0gTUFYX0JVUlNUX0VYUE9ORU5UO1xcbiBcXHRcXHQqYnVyc3RfbWFudGlzc2EgPSBtYXhfbWFudGlzc2E7XFxuIFxcdH1cXG5AQCAtMTU5LDcgKzE2OCw3IEBAIHN0YXRpYyBpbnQgb3R4Ml90Y192YWxpZGF0ZV9mbG93KHN0cnVjdCBvdHgyX25pYyAqbmljLFxcbiBcXHRcXHRcXHRcXHQgc3RydWN0IGZsb3dfYWN0aW9uICphY3Rpb25zLFxcbiBcXHRcXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiB7XFxuLVxcdGlmIChuaWMtXFx1MDAzZWZsYWdzIFxcdTAwMjYgT1RYMl9GTEFHX0lOVEZfRE9XTikge1xcbitcXHRpZiAob3R4Ml90ZXN0X2ZsYWcobmljLCBPVFgyX0ZMQUdfSU5URl9ET1dOKSkge1xcbiBcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiSW50ZXJmYWNlIG5vdCBpbml0aWFsaXplZFxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbkBAIC0yMjMsNyArMjMyLDcgQEAgc3RhdGljIGludCBvdHgyX3RjX2VncmVzc19tYXRjaGFsbF9pbnN0YWxsKHN0cnVjdCBvdHgyX25pYyAqbmljLFxcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXG4tXFx0aWYgKG5pYy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBPVFgyX0ZMQUdfVENfTUFUQ0hBTExfRUdSRVNTX0VOQUJMRUQpIHtcXG4rXFx0aWYgKG90eDJfdGVzdF9mbGFnKG5pYywgT1RYMl9GTEFHX1RDX01BVENIQUxMX0VHUkVTU19FTkFCTEVEKSkge1xcbiBcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxcbiBcXHRcXHRcXHRcXHQgICBcXFwiT25seSBvbmUgRWdyZXNzIE1BVENIQUxMIHJhdGVsaW1pdGVyIGNhbiBiZSBvZmZsb2FkZWRcXFwiKTtcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuQEAgLTI0NCw3ICsyNTMsNyBAQCBzdGF0aWMgaW50IG90eDJfdGNfZWdyZXNzX21hdGNoYWxsX2luc3RhbGwoc3RydWN0IG90eDJfbmljICpuaWMsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICBvdHgyX2NvbnZlcnRfcmF0ZShlbnRyeS1cXHUwMDNlcG9saWNlLnJhdGVfYnl0ZXNfcHMpKTtcXG4gXFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4tXFx0XFx0bmljLVxcdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfVENfTUFUQ0hBTExfRUdSRVNTX0VOQUJMRUQ7XFxuK1xcdFxcdG90eDJfc2V0X2ZsYWcobmljLCBPVFgyX0ZMQUdfVENfTUFUQ0hBTExfRUdSRVNTX0VOQUJMRUQpO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcXG5AQCAtMjYxLDEzICsyNzAsMTMgQEAgc3RhdGljIGludCBvdHgyX3RjX2VncmVzc19tYXRjaGFsbF9kZWxldGUoc3RydWN0IG90eDJfbmljICpuaWMsXFxuIFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayA9IGNscy1cXHUwMDNlY29tbW9uLmV4dGFjaztcXG4gXFx0aW50IGVycjtcXG4gXFxuLVxcdGlmIChuaWMtXFx1MDAzZWZsYWdzIFxcdTAwMjYgT1RYMl9GTEFHX0lOVEZfRE9XTikge1xcbitcXHRpZiAob3R4Ml90ZXN0X2ZsYWcobmljLCBPVFgyX0ZMQUdfSU5URl9ET1dOKSkge1xcbiBcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiSW50ZXJmYWNlIG5vdCBpbml0aWFsaXplZFxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXG4gXFx0ZXJyID0gb3R4Ml9zZXRfbWF0Y2hhbGxfZWdyZXNzX3JhdGUobmljLCAwLCAwKTtcXG4tXFx0bmljLVxcdTAwM2VmbGFncyBcXHUwMDI2PSB+T1RYMl9GTEFHX1RDX01BVENIQUxMX0VHUkVTU19FTkFCTEVEO1xcbitcXHRvdHgyX2NsZWFyX2ZsYWcobmljLCBPVFgyX0ZMQUdfVENfTUFUQ0hBTExfRUdSRVNTX0VOQUJMRUQpO1xcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbkBAIC01MDUsNyArNTE0LDcgQEAgc3RhdGljIGludCBvdHgyX3RjX3BhcnNlX2FjdGlvbnMoc3RydWN0IG90eDJfbmljICpuaWMsXFxuIFxcdFxcdFxcdG1hcmsgPSBhY3QtXFx1MDAzZW1hcms7XFxuIFxcdFxcdFxcdHJlcS1cXHUwMDNlbWF0Y2hfaWQgPSBtYXJrIFxcdTAwMjYgT1RYMl9SWF9NQVRDSF9JRF9NQVNLO1xcbiBcXHRcXHRcXHRyZXEtXFx1MDAzZW9wID0gTklYX1JYX0FDVElPTl9ERUZBVUxUO1xcbi1cXHRcXHRcXHRuaWMtXFx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19UQ19NQVJLX0VOQUJMRUQ7XFxuK1xcdFxcdFxcdG90eDJfc2V0X2ZsYWcobmljLCBPVFgyX0ZMQUdfVENfTUFSS19FTkFCTEVEKTtcXG4gXFx0XFx0XFx0cmVmY291bnRfaW5jKFxcdTAwMjZuaWMtXFx1MDAzZWZsb3dfY2ZnLVxcdTAwM2VtYXJrX2Zsb3dzKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcbkBAIC05NDIsNyArOTUxLDcgQEAgc3RhdGljIHZvaWQgb3R4Ml9kZXN0cm95X3RjX2Zsb3dfbGlzdChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXFxuIFxcdHN0cnVjdCBvdHgyX2Zsb3dfY29uZmlnICpmbG93X2NmZyA9IHBmdmYtXFx1MDAzZWZsb3dfY2ZnO1xcbiBcXHRzdHJ1Y3Qgb3R4Ml90Y19mbG93ICppdGVyLCAqdG1wO1xcbiBcXG4tXFx0aWYgKCEocGZ2Zi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBPVFgyX0ZMQUdfTUNBTV9FTlRSSUVTX0FMTE9DKSlcXG4rXFx0aWYgKCFvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfTUNBTV9FTlRSSUVTX0FMTE9DKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGl0ZXIsIHRtcCwgXFx1MDAyNmZsb3dfY2ZnLVxcdTAwM2VmbG93X2xpc3RfdGMsIGxpc3QpIHtcXG5AQCAtMTE5NSwxMiArMTIwNCwxMiBAQCBzdGF0aWMgaW50IG90eDJfdGNfZGVsX2Zsb3coc3RydWN0IG90eDJfbmljICpuaWMsXFxuIFxcdC8qIERpc2FibGUgVEMgTUFSSyBmbGFnIGlmIHRoZXkgYXJlIG5vIHJ1bGVzIHdpdGggc2tiZWRpdCBtYXJrIGFjdGlvbiAqL1xcbiBcXHRpZiAoZmxvd19ub2RlLVxcdTAwM2VyZXEubWF0Y2hfaWQpXFxuIFxcdFxcdGlmICghcmVmY291bnRfZGVjX2FuZF90ZXN0KFxcdTAwMjZmbG93X2NmZy1cXHUwMDNlbWFya19mbG93cykpXFxuLVxcdFxcdFxcdG5pYy1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gfk9UWDJfRkxBR19UQ19NQVJLX0VOQUJMRUQ7XFxuK1xcdFxcdFxcdG90eDJfY2xlYXJfZmxhZyhuaWMsIE9UWDJfRkxBR19UQ19NQVJLX0VOQUJMRUQpO1xcbiBcXG4gXFx0aWYgKGZsb3dfbm9kZS1cXHUwMDNlaXNfYWN0X3BvbGljZSkge1xcbiBcXHRcXHRfX2NsZWFyX2JpdChmbG93X25vZGUtXFx1MDAzZXJxLCBcXHUwMDI2bmljLVxcdTAwM2VycV9ibWFwKTtcXG4gXFxuLVxcdFxcdGlmIChuaWMtXFx1MDAzZWZsYWdzIFxcdTAwMjYgT1RYMl9GTEFHX0lOVEZfRE9XTilcXG4rXFx0XFx0aWYgKG90eDJfdGVzdF9mbGFnKG5pYywgT1RYMl9GTEFHX0lOVEZfRE9XTikpXFxuIFxcdFxcdFxcdGdvdG8gZnJlZV9tY2FtX2Zsb3c7XFxuIFxcbiBcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZuaWMtXFx1MDAzZW1ib3gubG9jayk7XFxuQEAgLTEyNDYsMTAgKzEyNTUsMTAgQEAgc3RhdGljIGludCBvdHgyX3RjX2FkZF9mbG93KHN0cnVjdCBvdHgyX25pYyAqbmljLFxcbiBcXHRzdHJ1Y3QgbnBjX2luc3RhbGxfZmxvd19yZXEgKnJlcSwgZHVtbXk7XFxuIFxcdGludCByYywgZXJyLCBlbnRyeTtcXG4gXFxuLVxcdGlmICghKG5pYy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBPVFgyX0ZMQUdfVENfRkxPV0VSX1NVUFBPUlQpKVxcbitcXHRpZiAoIW90eDJfdGVzdF9mbGFnKG5pYywgT1RYMl9GTEFHX1RDX0ZMT1dFUl9TVVBQT1JUKSlcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbi1cXHRpZiAobmljLVxcdTAwM2VmbGFncyBcXHUwMDI2IE9UWDJfRkxBR19JTlRGX0RPV04pIHtcXG4rXFx0aWYgKG90eDJfdGVzdF9mbGFnKG5pYywgT1RYMl9GTEFHX0lOVEZfRE9XTikpIHtcXG4gXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcIkludGVyZmFjZSBub3QgaW5pdGlhbGl6ZWRcXFwiKTtcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG5AQCAtMTQ0NCw3ICsxNDUzLDcgQEAgc3RhdGljIGludCBvdHgyX3RjX2luZ3Jlc3NfbWF0Y2hhbGxfaW5zdGFsbChzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYyxcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuLVxcdGlmIChuaWMtXFx1MDAzZWZsYWdzIFxcdTAwMjYgT1RYMl9GTEFHX1RDX01BVENIQUxMX0lOR1JFU1NfRU5BQkxFRCkge1xcbitcXHRpZiAob3R4Ml90ZXN0X2ZsYWcobmljLCBPVFgyX0ZMQUdfVENfTUFUQ0hBTExfSU5HUkVTU19FTkFCTEVEKSkge1xcbiBcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxcbiBcXHRcXHRcXHRcXHQgICBcXFwiT25seSBvbmUgaW5ncmVzcyBNQVRDSEFMTCByYXRlbGltaXR0ZXIgY2FuIGJlIG9mZmxvYWRlZFxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5AQCAtMTQ2OSw3ICsxNDc4LDcgQEAgc3RhdGljIGludCBvdHgyX3RjX2luZ3Jlc3NfbWF0Y2hhbGxfaW5zdGFsbChzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYyxcXG4gXFx0XFx0ZXJyID0gY24xMGtfc2V0X21hdGNoYWxsX2lwb2xpY2VyX3JhdGUobmljLCBlbnRyeS1cXHUwMDNlcG9saWNlLmJ1cnN0LCByYXRlKTtcXG4gXFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4tXFx0XFx0bmljLVxcdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfVENfTUFUQ0hBTExfSU5HUkVTU19FTkFCTEVEO1xcbitcXHRcXHRvdHgyX3NldF9mbGFnKG5pYywgT1RYMl9GTEFHX1RDX01BVENIQUxMX0lOR1JFU1NfRU5BQkxFRCk7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxcbkBAIC0xNDg2LDEzICsxNDk1LDEzIEBAIHN0YXRpYyBpbnQgb3R4Ml90Y19pbmdyZXNzX21hdGNoYWxsX2RlbGV0ZShzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYyxcXG4gXFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrID0gY2xzLVxcdTAwM2Vjb21tb24uZXh0YWNrO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4tXFx0aWYgKG5pYy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBPVFgyX0ZMQUdfSU5URl9ET1dOKSB7XFxuK1xcdGlmIChvdHgyX3Rlc3RfZmxhZyhuaWMsIE9UWDJfRkxBR19JTlRGX0RPV04pKSB7XFxuIFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFxcXCJJbnRlcmZhY2Ugbm90IGluaXRpYWxpemVkXFxcIik7XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuIFxcbiBcXHRlcnIgPSBjbjEwa19mcmVlX21hdGNoYWxsX2lwb2xpY2VyKG5pYyk7XFxuLVxcdG5pYy1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gfk9UWDJfRkxBR19UQ19NQVRDSEFMTF9JTkdSRVNTX0VOQUJMRUQ7XFxuK1xcdG90eDJfY2xlYXJfZmxhZyhuaWMsIE9UWDJfRkxBR19UQ19NQVRDSEFMTF9JTkdSRVNTX0VOQUJMRUQpO1xcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbkBAIC0xNjAwLDE0ICsxNjA5LDc1MCBAQCBzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfYmxvY2soc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFx0XFx0XFx0XFx0XFx0ICBuaWMsIG5pYywgaW5ncmVzcyk7XFxuIH1cXG4gXFxuKy8qIEZyZWUgdGhlIHBlci1xdWV1ZSBtaW4vbWF4IHJhdGUgY2FjaGVzLiAqL1xcbitzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19mcmVlX2NhY2hlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4re1xcbitcXHRkZXZtX2tmcmVlKHBmdmYtXFx1MDAzZWRldiwgcGZ2Zi1cXHUwMDNlbXFwcmlvLm1pbl9yYXRlKTtcXG4rXFx0ZGV2bV9rZnJlZShwZnZmLVxcdTAwM2VkZXYsIHBmdmYtXFx1MDAzZW1xcHJpby5tYXhfcmF0ZSk7XFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpby5taW5fcmF0ZSA9IE5VTEw7XFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpby5tYXhfcmF0ZSA9IE5VTEw7XFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpby5mbGFncyA9IDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fYWxsb2NfY2FjaGUoc3RydWN0IG90eDJfbmljICpwZnZmLCBib29sIHJlcGxhY2luZylcXG4re1xcbitcXHR1MTYgbnVtX3R4cSA9IHBmdmYtXFx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzO1xcbitcXG4rXFx0aWYgKHJlcGxhY2luZyBcXHUwMDI2XFx1MDAyNiBwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGUgXFx1MDAyNlxcdTAwMjYgcGZ2Zi1cXHUwMDNlbXFwcmlvLm1heF9yYXRlKSB7XFxuK1xcdFxcdG1lbXNldChwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGUsIDAsXFxuK1xcdFxcdCAgICAgICBudW1fdHhxICogc2l6ZW9mKCpwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGUpKTtcXG4rXFx0XFx0bWVtc2V0KHBmdmYtXFx1MDAzZW1xcHJpby5tYXhfcmF0ZSwgMCxcXG4rXFx0XFx0ICAgICAgIG51bV90eHEgKiBzaXplb2YoKnBmdmYtXFx1MDAzZW1xcHJpby5tYXhfcmF0ZSkpO1xcbitcXHRcXHRwZnZmLVxcdTAwM2VtcXByaW8uZmxhZ3MgPSAwO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0b3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTtcXG4rXFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpby5taW5fcmF0ZSA9IGRldm1fa2NhbGxvYyhwZnZmLVxcdTAwM2VkZXYsIG51bV90eHEsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgc2l6ZW9mKCpwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGUpLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIEdGUF9LRVJORUwpO1xcbitcXHRwZnZmLVxcdTAwM2VtcXByaW8ubWF4X3JhdGUgPSBkZXZtX2tjYWxsb2MocGZ2Zi1cXHUwMDNlZGV2LCBudW1fdHhxLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHNpemVvZigqcGZ2Zi1cXHUwMDNlbXFwcmlvLm1heF9yYXRlKSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGUgfHwgIXBmdmYtXFx1MDAzZW1xcHJpby5tYXhfcmF0ZSkge1xcbitcXHRcXHRvdHgyX21xcHJpb19mcmVlX2NhY2hlKHBmdmYpO1xcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX3NuYXBfZnJlZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXFxuK1xcdFxcdFxcdFxcdCAgc3RydWN0IG1xX29mZmxvYWRfc25hcCAqKnNuYXApXFxuK3tcXG4rXFx0aWYgKCEqc25hcClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0ZGV2bV9rZnJlZShwZnZmLVxcdTAwM2VkZXYsICpzbmFwKTtcXG4rXFx0KnNuYXAgPSBOVUxMO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG90eDJfbXFwcmlvX3NuYXBfY29weShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwICoqZHN0LFxcbitcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbylcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcXHUwMDI2bXFwcmlvLVxcdTAwM2Vxb3B0O1xcbitcXHRzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwICpzbmFwO1xcbitcXHRpbnQgdGM7XFxuK1xcbitcXHRpZiAoISpkc3QpIHtcXG4rXFx0XFx0c25hcCA9IGRldm1fa3phbGxvYyhwZnZmLVxcdTAwM2VkZXYsIHNpemVvZigqc25hcCksIEdGUF9LRVJORUwpO1xcbitcXHRcXHRpZiAoIXNuYXApXFxuK1xcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHRcXHQqZHN0ID0gc25hcDtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0c25hcCA9ICpkc3Q7XFxuK1xcdH1cXG4rXFxuK1xcdHNuYXAtXFx1MDAzZW51bV90YyA9IHFvcHQtXFx1MDAzZW51bV90YztcXG4rXFx0Zm9yICh0YyA9IDA7IHRjIFxcdTAwM2MgVENfUU9QVF9NQVhfUVVFVUU7IHRjKyspIHtcXG4rXFx0XFx0c25hcC1cXHUwMDNlY291bnRbdGNdID0gcW9wdC1cXHUwMDNlY291bnRbdGNdO1xcbitcXHRcXHRzbmFwLVxcdTAwM2VvZmZzZXRbdGNdID0gcW9wdC1cXHUwMDNlb2Zmc2V0W3RjXTtcXG4rXFx0XFx0c25hcC1cXHUwMDNlbWluX3JhdGVbdGNdID0gMDtcXG4rXFx0XFx0c25hcC1cXHUwMDNlbWF4X3JhdGVbdGNdID0gMDtcXG4rXFx0fVxcbitcXG4rXFx0Zm9yICh0YyA9IDA7IHRjIFxcdTAwM2MgcW9wdC1cXHUwMDNlbnVtX3RjOyB0YysrKSB7XFxuK1xcdFxcdGlmIChtcXByaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpXFxuK1xcdFxcdFxcdHNuYXAtXFx1MDAzZW1pbl9yYXRlW3RjXSA9IG1xcHJpby1cXHUwMDNlbWluX3JhdGVbdGNdO1xcbitcXHRcXHRpZiAobXFwcmlvLVxcdTAwM2VmbGFncyBcXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKVxcbitcXHRcXHRcXHRzbmFwLVxcdTAwM2VtYXhfcmF0ZVt0Y10gPSBtcXByaW8tXFx1MDAzZW1heF9yYXRlW3RjXTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fc3RhZ2VfY3VyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcXG4rXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXFxuK3tcXG4rXFx0cmV0dXJuIG90eDJfbXFwcmlvX3NuYXBfY29weShwZnZmLCBcXHUwMDI2cGZ2Zi1cXHUwMDNlY3VyX21xX3NuYXAsIG1xcHJpbyk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX3NuYXBfY29tbWl0KHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4re1xcbitcXHRvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgXFx1MDAyNnBmdmYtXFx1MDAzZW9sZF9tcV9zbmFwKTtcXG4rXFx0cGZ2Zi1cXHUwMDNlb2xkX21xX3NuYXAgPSBwZnZmLVxcdTAwM2VjdXJfbXFfc25hcDtcXG4rXFx0cGZ2Zi1cXHUwMDNlY3VyX21xX3NuYXAgPSBOVUxMO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19jbGVhcl9yZXBsYWNlX3N0YXRlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4re1xcbitcXHRwZnZmLVxcdTAwM2VtcXByaW8ucmVwbGFjZV9zZXR1cF9kb25lID0gZmFsc2U7XFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpby5yZXBsYWNlX2dyYWZ0X2RvbmUgPSBmYWxzZTtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgb3R4Ml9tcXByaW9fbWRxX2FsbG9jYXRlZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXFxuK3tcXG4rXFx0cmV0dXJuIHBmdmYtXFx1MDAzZWh3LnR4c2NocV9jbnRbTklYX1RYU0NIX0xWTF9NRFFdICE9IDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByYXRlX2xpbWl0KTtcXG4rXFxuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fcmVzdG9yZV9vbGQoc3RydWN0IG90eDJfbmljICpwZnZmKVxcbit7XFxuK1xcdHN0cnVjdCBtcV9vZmZsb2FkX3NuYXAgKnNuYXAgPSBwZnZmLVxcdTAwM2VvbGRfbXFfc25hcDtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtXFx1MDAzZW5ldGRldjtcXG4rXFx0dTE2IG51bV90eHEgPSBwZnZmLVxcdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcXG4rXFx0aW50IHRjLCB0eHEsIGVycjtcXG4rXFxuK1xcdGlmICghc25hcClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRlcnIgPSBvdHgyX21xcHJpb19hbGxvY19jYWNoZShwZnZmLCBmYWxzZSk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHRtZW1zZXQocGZ2Zi1cXHUwMDNlbXFwcmlvLm1pbl9yYXRlLCAwLCBudW1fdHhxICogc2l6ZW9mKCpwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGUpKTtcXG4rXFx0bWVtc2V0KHBmdmYtXFx1MDAzZW1xcHJpby5tYXhfcmF0ZSwgMCwgbnVtX3R4cSAqIHNpemVvZigqcGZ2Zi1cXHUwMDNlbXFwcmlvLm1heF9yYXRlKSk7XFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpby5mbGFncyA9IDA7XFxuK1xcbitcXHRmb3IgKHRjID0gMDsgdGMgXFx1MDAzYyBzbmFwLVxcdTAwM2VudW1fdGM7IHRjKyspIHtcXG4rXFx0XFx0dTY0IG1pbl9yYXRlID0gc25hcC1cXHUwMDNlbWluX3JhdGVbdGNdO1xcbitcXHRcXHR1NjQgbWF4X3JhdGUgPSBzbmFwLVxcdTAwM2VtYXhfcmF0ZVt0Y107XFxuK1xcbitcXHRcXHRpZiAobWluX3JhdGUpXFxuK1xcdFxcdFxcdHBmdmYtXFx1MDAzZW1xcHJpby5mbGFncyB8PSBUQ19NUVBSSU9fRl9NSU5fUkFURTtcXG4rXFx0XFx0aWYgKG1heF9yYXRlKVxcbitcXHRcXHRcXHRwZnZmLVxcdTAwM2VtcXByaW8uZmxhZ3MgfD0gVENfTVFQUklPX0ZfTUFYX1JBVEU7XFxuK1xcbitcXHRcXHRmb3IgKHR4cSA9IHNuYXAtXFx1MDAzZW9mZnNldFt0Y107XFxuK1xcdFxcdCAgICAgdHhxIFxcdTAwM2Mgc25hcC1cXHUwMDNlb2Zmc2V0W3RjXSArIHNuYXAtXFx1MDAzZWNvdW50W3RjXTsgdHhxKyspIHtcXG4rXFx0XFx0XFx0cGZ2Zi1cXHUwMDNlbXFwcmlvLm1pbl9yYXRlW3R4cV0gPSBtaW5fcmF0ZTtcXG4rXFx0XFx0XFx0cGZ2Zi1cXHUwMDNlbXFwcmlvLm1heF9yYXRlW3R4cV0gPSBtYXhfcmF0ZTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRuZXRkZXZfc2V0X251bV90YyhuZXRkZXYsIHNuYXAtXFx1MDAzZW51bV90Yyk7XFxuK1xcdGZvciAodGMgPSAwOyB0YyBcXHUwMDNjIHNuYXAtXFx1MDAzZW51bV90YzsgdGMrKylcXG4rXFx0XFx0bmV0ZGV2X3NldF90Y19xdWV1ZShuZXRkZXYsIHRjLCBzbmFwLVxcdTAwM2Vjb3VudFt0Y10sXFxuK1xcdFxcdFxcdFxcdCAgICBzbmFwLVxcdTAwM2VvZmZzZXRbdGNdKTtcXG4rXFxuK1xcdGlmIChvdHgyX21xcHJpb19tZHFfYWxsb2NhdGVkKHBmdmYpKSB7XFxuK1xcdFxcdGVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4rXFx0LyogUmVidWlsZCB0aGUgVFggc2NoZWR1bGVyIHZpYSBuZXRkZXYgcmVzdGFydCB3aGVuIHJ1bm5pbmc7IG90eDJfbXFwcmlvX3VwKClcXG4rXFx0ICogYWxvbmUgaXMgaW5zdWZmaWNpZW50IGFmdGVyIGEgZmFpbGVkIHJlcGxhY2UgdGhhdCBhbHJlYWR5IGJvdW5jZWQgdGhlXFxuK1xcdCAqIGludGVyZmFjZS4gSWYgb3BlbiBmYWlsZWQsIFRYIHNjaGVkdWxlcnMgd2VyZSBmcmVlZDsgZGVmZXIgc2hhcGVyIHJlc3RvcmVcXG4rXFx0ICogdG8gdGhlIG5leHQgc3VjY2Vzc2Z1bCBuZG9fb3BlbigpIHZpYSBvdHgyX21xcHJpb191cCgpLlxcbitcXHQgKi9cXG4rXFx0cGZ2Zi1cXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQgPSB0cnVlO1xcbitcXG4rXFx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkge1xcbitcXHRcXHRlcnIgPSBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihuZXRkZXYsIHRydWUpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHR9IGVsc2UgaWYgKHBmdmYtXFx1MDAzZWh3LnR4c2NocV9jbnRbTklYX1RYU0NIX0xWTF9TTVFdKSB7XFxuK1xcdFxcdGVyciA9IG90eDJfbXFwcmlvX3VwKHBmdmYpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHR9XFxuK1xcbitcXHRvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgXFx1MDAyNnBmdmYtXFx1MDAzZWN1cl9tcV9zbmFwKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19zbmFwX2Rlc3Ryb3koc3RydWN0IG90eDJfbmljICpwZnZmKVxcbit7XFxuK1xcdG90eDJfbXFwcmlvX3NuYXBfZnJlZShwZnZmLCBcXHUwMDI2cGZ2Zi1cXHUwMDNlY3VyX21xX3NuYXApO1xcbitcXHRvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgXFx1MDAyNnBmdmYtXFx1MDAzZW9sZF9tcV9zbmFwKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fY2xlYXJfc3coc3RydWN0IG90eDJfbmljICpwZnZmKVxcbit7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVxcdTAwM2VuZXRkZXY7XFxuK1xcbitcXHRwZnZmLVxcdTAwM2VtcXByaW8ucmF0ZV9saW1pdCA9IGZhbHNlO1xcbitcXHRvdHgyX21xcHJpb19jbGVhcl9yZXBsYWNlX3N0YXRlKHBmdmYpO1xcbitcXHRuZXRkZXZfc2V0X251bV90YyhuZXRkZXYsIDApO1xcbitcXHRvdHgyX21xcHJpb19mcmVlX2NhY2hlKHBmdmYpO1xcbit9XFxuK1xcbisvKiBUZWFyIGRvd24gbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkOiBjbGVhciBwZXItcXVldWUgc2hhcGVycyxcXG4rICogbXFwcmlvX3JhdGVfbGltaXQsIG5ldGRldiBUQyBtYXBwaW5ncywgYW5kIHRoZSBjYWNoZWQgcmF0ZXMuICBDYWxsZWQgb25cXG4rICogZXhwbGljaXQgbXFwcmlvIHRlYXJkb3duICh0YyBxZGlzYyBkZWwpIGFuZCBlcnJvciBjbGVhbnVwLCBub3Qgb25cXG4rICogcm91dGluZSBuZXRkZXYgc3RvcC9vcGVuIGN5Y2xlcyB3aGVyZSB0aGUgb2ZmbG9hZCBzdGF5cyBhY3RpdmUuXFxuKyAqL1xcbitpbnQgb3R4Ml9tcXByaW9fZG93bihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXFxuK3tcXG4rXFx0aW50IGVyciA9IDA7XFxuK1xcbitcXHRpZiAoIXBmdmYtXFx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmIChuZXRpZl9ydW5uaW5nKHBmdmYtXFx1MDAzZW5ldGRldikgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIG90eDJfbXFwcmlvX21kcV9hbGxvY2F0ZWQocGZ2ZikpXFxuK1xcdFxcdGVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTtcXG4rXFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0bmV0ZGV2X3dhcm4ocGZ2Zi1cXHUwMDNlbmV0ZGV2LFxcbitcXHRcXHRcXHQgICAgXFxcIm1xcHJpbzogZmFpbGVkIHRvIGNsZWFyIGhhcmR3YXJlIHNoYXBlcnM6ICVkOyBjbGVhcmluZyBzb2Z0d2FyZSBzdGF0ZVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgIGVycik7XFxuK1xcdFxcdG90eDJfbXFwcmlvX2NsZWFyX3N3KHBmdmYpO1xcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHR9XFxuK1xcbitcXHRvdHgyX21xcHJpb19jbGVhcl9zdyhwZnZmKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKVxcbit7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVxcdTAwM2VuZXRkZXY7XFxuK1xcdGludCB0eHEsIGVycjtcXG4rXFxuK1xcdGlmICghcGZ2Zi1cXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKCFwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGUgfHwgIXBmdmYtXFx1MDAzZW1xcHJpby5tYXhfcmF0ZSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRmb3IgKHR4cSA9IDA7IHR4cSBcXHUwMDNjIHBmdmYtXFx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzOyB0eHErKykge1xcbitcXHRcXHR1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7XFxuK1xcbitcXHRcXHRpZiAocGZ2Zi1cXHUwMDNlbXFwcmlvLmZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpXFxuK1xcdFxcdFxcdG1pbl9yYXRlID0gcGZ2Zi1cXHUwMDNlbXFwcmlvLm1pbl9yYXRlW3R4cV07XFxuK1xcdFxcdGlmIChwZnZmLVxcdTAwM2VtcXByaW8uZmxhZ3MgXFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSlcXG4rXFx0XFx0XFx0bWF4X3JhdGUgPSBwZnZmLVxcdTAwM2VtcXByaW8ubWF4X3JhdGVbdHhxXTtcXG4rXFxuK1xcdFxcdGlmICghbWluX3JhdGUgXFx1MDAyNlxcdTAwMjYgIW1heF9yYXRlKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGVyciA9IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIocGZ2ZiwgdHhxLCBtaW5fcmF0ZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgbWF4X3JhdGUpO1xcbitcXHRcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiBmYWlsZWQgdG8gcmVzdG9yZSBzaGFwZXIgZm9yIHR4cSAlZDogJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgIHR4cSwgZXJyKTtcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyogUmVzdGFydCB0aGUgbmV0ZGV2IHRvIHJlcHJvZ3JhbSB0aGUgVFggc2NoZWR1bGVyIGhpZXJhcmNoeSBmb3IgbXFwcmlvXFxuKyAqIGJhbmR3aWR0aCBvZmZsb2FkLiAgQm90aCBtcXByaW8gYWRkIGFuZCBkZWxldGUgKHdoZW4gb2ZmbG9hZCB3YXMgYWN0aXZlKVxcbisgKiB0YWtlIHRoaXMgcGF0aCB2aWEgbmRvX3N0b3AoKS9uZG9fb3BlbigpIHNvIFZGLXNwZWNpZmljIG9wZW4gbG9naWMgKGUuZy5cXG4rICogTEJLIGNhcnJpZXIgb24pIHJ1bnMgY29ycmVjdGx5LlxcbisgKlxcbisgKiBJbnRlbnRpb25hbCBiZWhhdmlvdXI6IHRoaXMgZnVsbCBzdG9wL29wZW4gY3ljbGUgZHJvcHMgaW4tZmxpZ2h0IHRyYWZmaWNcXG4rICogKGNhcnJpZXIgb2ZmLCBJUlEvTkFQSSB0ZWFyZG93biwgcXVldWUgZHJhaW4pLiAgVGhlIE5JWCBUWCBzY2hlZHVsZXIgbXVzdFxcbisgKiBiZSByZWFsbG9jYXRlZCAoZS5nLiBvbmUgU01RIHBlciBub24tUW9TIHF1ZXVlKSBhbmQgY2Fubm90IGJlIHJlcHJvZ3JhbW1lZFxcbisgKiBsaXZlIHRvZGF5LCBzbyBhIG5ldGRldiBib3VuY2UgaXMgcmVxdWlyZWQgb24gZXZlcnkgbXFwcmlvIGFkZCwgcmVwbGFjZSxcXG4rICogZGVsZXRlLCBhbmQgcm9sbGJhY2suICBVc2VycyBzZWUgYSBicmllZiBjb25uZWN0aXZpdHkgYmxpcDsgdGhpcyBpcyBub3QgYVxcbisgKiBidWcgdG8gXFxcImZpeFxcXCIgd2l0aG91dCBpbXBsZW1lbnRpbmcgdGhlIGxpdmUtcmVwcm9ncmFtbWluZyBwYXRoIG5vdGVkIGJlbG93LlxcbisgKiBJZiBvcGVuIGZhaWxzLCB0aGUgaW50ZXJmYWNlIGlzIGxlZnQgYWRtaW5pc3RyYXRpdmVseSBkb3duIHdpdGhvdXQgY2FsbGluZ1xcbisgKiBuZG9fc3RvcCgpIGFnYWluIG9uIHJlc291cmNlcyBhbHJlYWR5IHRvcm4gZG93biBieSB0aGUgb3BlbiBlcnJvciBwYXRoLlxcbisgKlxcbisgKiBRdWllc2NlIHRoZSB0cmFuc21pdCBwYXRoIGxpa2UgX19kZXZfY2xvc2VfbWFueSgpIGJlZm9yZSBuZG9fc3RvcCgpIHNvXFxuKyAqIG90eDJfeG1pdCgpIGNhbm5vdCByYWNlIG90eDJfZnJlZV9xdWV1ZV9tZW0oKS5cXG4rICovXFxuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByYXRlX2xpbWl0KVxcbit7XFxuK1xcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuK1xcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyAqb3BzID0gbmV0ZGV2LVxcdTAwM2VuZXRkZXZfb3BzO1xcbitcXHRib29sIHJ1bm5pbmcgPSBuZXRpZl9ydW5uaW5nKG5ldGRldik7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHQvKiBUT0RPOiBFeHBsb3JlIGxpdmUgVFggc2NoZWR1bGVyIHJlcHJvZ3JhbW1pbmcgdG8gYXZvaWQgYSBmdWxsXFxuK1xcdCAqIG5kb19zdG9wKCkvbmRvX29wZW4oKSBib3VuY2Ugb24gZXZlcnkgbXFwcmlvIGNoYW5nZS5cXG4rXFx0ICovXFxuK1xcdG5ldGRldl9pbmZvKG5ldGRldixcXG4rXFx0XFx0ICAgIFxcXCJtcXByaW86IHJlc3RhcnRpbmcgaW50ZXJmYWNlIHRvIHJlcHJvZ3JhbSBUWCBzY2hlZHVsZXI7IGluLWZsaWdodCB0cmFmZmljIHdpbGwgYmUgZHJvcHBlZFxcXFxuXFxcIik7XFxuK1xcbitcXHRpZiAocnVubmluZykge1xcbitcXHRcXHRjbGVhcl9iaXQoX19MSU5LX1NUQVRFX1NUQVJULCBcXHUwMDI2bmV0ZGV2LVxcdTAwM2VzdGF0ZSk7XFxuK1xcdFxcdHNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7IC8qIENvbW1pdCBuZXRpZl9ydW5uaW5nKCkuICovXFxuK1xcdH1cXG4rXFx0ZGV2X2RlYWN0aXZhdGUobmV0ZGV2LCB0cnVlKTtcXG4rXFxuK1xcdGVyciA9IG9wcy1cXHUwMDNlbmRvX3N0b3AobmV0ZGV2KTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRpZiAocnVubmluZykge1xcbitcXHRcXHRcXHRzZXRfYml0KF9fTElOS19TVEFURV9TVEFSVCwgXFx1MDAyNm5ldGRldi1cXHUwMDNlc3RhdGUpO1xcbitcXHRcXHRcXHRkZXZfYWN0aXZhdGUobmV0ZGV2KTtcXG4rXFx0XFx0fVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHR9XFxuK1xcbitcXHQvKiBTZXQgYmVmb3JlIG5kb19vcGVuKCkgc28gb3R4Ml90eHNjaF9hbGxvYygpIHdpZGVucyBTTVEgYWxsb2NhdGlvbi5cXG4rXFx0ICogT24gdGVhcmRvd24sIGRyb3AgbXFwcmlvIHNvZnR3YXJlIHN0YXRlIHNvIG5kb19vcGVuKCkgZG9lcyBub3RcXG4rXFx0ICogcmUtYXBwbHkgYmFuZHdpZHRoIGxpbWl0cyB2aWEgb3R4Ml9tcXByaW9fdXAoKSBhZnRlciB0aGUga2VybmVsXFxuK1xcdCAqIHJlbW92ZWQgdGhlIHFkaXNjLlxcbitcXHQgKi9cXG4rXFx0aWYgKHJhdGVfbGltaXQpXFxuK1xcdFxcdHBmdmYtXFx1MDAzZW1xcHJpby5yYXRlX2xpbWl0ID0gdHJ1ZTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRvdHgyX21xcHJpb19jbGVhcl9zdyhwZnZmKTtcXG4rXFxuK1xcdGVyciA9IG9wcy1cXHUwMDNlbmRvX29wZW4obmV0ZGV2KTtcXG4rXFx0aWYgKCFlcnIgXFx1MDAyNlxcdTAwMjYgcnVubmluZykge1xcbitcXHRcXHRzZXRfYml0KF9fTElOS19TVEFURV9TVEFSVCwgXFx1MDAyNm5ldGRldi1cXHUwMDNlc3RhdGUpO1xcbitcXHRcXHRkZXZfYWN0aXZhdGUobmV0ZGV2KTtcXG4rXFx0fSBlbHNlIGlmIChlcnIpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsXFxuK1xcdFxcdFxcdCAgIFxcXCJGYWlsZWQgdG8gcmVzdGFydCBkZXZpY2UgYWZ0ZXIgbXFwcmlvIGNoYW5nZTogJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgIGVycik7XFxuK1xcdFxcdC8qIG5kb19vcGVuKCkgYWxyZWFkeSBmcmVlZCB0aGUgVFggc2NoZWR1bGVycyBvbiBmYWlsdXJlIHdoaWxlXFxuK1xcdFxcdCAqIG5ldGlmX3J1bm5pbmcoKSBtYXkgc3RpbGwgYmUgdHJ1ZTsgZHJvcCBtcXByaW8gc29mdHdhcmUgc3RhdGVcXG4rXFx0XFx0ICogb25seSBpbnN0ZWFkIG9mIHNlbmRpbmcgc2hhcGVyIGNsZWFycyB0byBmcmVlZCBxdWV1ZXMuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRvdHgyX21xcHJpb19jbGVhcl9zdyhwZnZmKTtcXG4rXFx0XFx0LyogbmRvX29wZW4oKSByb2xscyBiYWNrIG9uIGZhaWx1cmU7IG1hcmsgdGhlIGludGVyZmFjZSBkb3duIHNvXFxuK1xcdFxcdCAqIG5ldGlmX2Nsb3NlKCkgZG9lcyBub3QgaW52b2tlIG5kb19zdG9wKCkgb24gZnJlZWQgTkFQSS9xdWV1ZVxcbitcXHRcXHQgKiBzdGF0ZS4gQ2FsbGVyIGhvbGRzIFJUTkw7IGRldl9jbG9zZSgpIHdvdWxkIGRlYWRsb2NrLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0b3R4Ml9zZXRfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfSU5URl9ET1dOKTtcXG4rXFx0XFx0LyogdmlzaWJsZSB0byBvdHgyX3N0b3AoKSBvbiBvdGhlciBjcHVzICovXFxuK1xcdFxcdHNtcF93bWIoKTtcXG4rXFx0XFx0bmV0aWZfY2xvc2UobmV0ZGV2KTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rc3RhdGljIGludCBvdHgyX21xcHJpb192YWxpZGF0ZV90Y19yYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcXG4rXFx0XFx0XFx0XFx0XFx0dTY0IHJhdGUsIHUzMiBxY291bnQsIGludCB0YyxcXG4rXFx0XFx0XFx0XFx0XFx0Y29uc3QgY2hhciAqbmFtZSlcXG4re1xcbitcXHRpZiAoIXJhdGUpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKHFjb3VudCBcXHUwMDNjPSAxKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdC8qIFRPRE86IG1xcHJpbyBtaW5fcmF0ZS9tYXhfcmF0ZSBhcmUgcGVyIHRyYWZmaWMgY2xhc3MsIGJ1dCBiYW5kd2lkdGhcXG4rXFx0ICogb2ZmbG9hZCBzaGFwZXMgb24gcGVyLXF1ZXVlIE1EUSBub2RlcyBwYXJlbnRlZCB1bmRlciBhIHNpbmdsZSBUTDQuXFxuK1xcdCAqIFdpdGhvdXQgcGVyLVRDIFRMNCBzaGFwZXJzIHRoZSBkcml2ZXIgY2Fubm90IGhvbm9yIFRDLWxldmVsIGxpbWl0c1xcbitcXHQgKiBmb3IgYSB0cmFmZmljIGNsYXNzIHRoYXQgc3BhbnMgbXVsdGlwbGUgcXVldWVzIHdpdGhvdXQgZWl0aGVyXFxuK1xcdCAqIGRpdmlkaW5nIHRoZSByYXRlIGFjcm9zcyBxdWV1ZXMgKHVBUEkgbWlzbWF0Y2gpIG9yIGV4Y2VlZGluZyB0aGUgVENcXG4rXFx0ICogY2FwIHdoZW4gZXZlcnkgbWVtYmVyIHF1ZXVlIGlzIGFjdGl2ZS4gUmVqZWN0IHVudGlsIHBlci1UQyBUTDRcXG4rXFx0ICogc2hhcGluZyBjYW4gYmUgaW1wbGVtZW50ZWQgd2l0aG91dCBhbGxvY2F0aW5nIGFkZGl0aW9uYWwgVEw0IG5vZGVzXFxuK1xcdCAqIGJleW9uZCB0aGUgZXhpc3RpbmcgaGllcmFyY2h5LlxcbitcXHQgKi9cXG4rXFx0bmV0ZGV2X2VycihuZXRkZXYsXFxuK1xcdFxcdCAgIFxcXCJtcXByaW86ICVzIHJhdGUgZm9yIHRjICVkIG5vdCBzdXBwb3J0ZWQgd2l0aCAldSBxdWV1ZXNcXFxcblxcXCIsXFxuK1xcdFxcdCAgIG5hbWUsIHRjLCBxY291bnQpO1xcbitcXHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcXG4rXFx0XFx0XFx0ICAgICAgIFxcXCJtcXByaW86ICVzIHJhdGUgZm9yIHRjICVkIG5vdCBzdXBwb3J0ZWQgd2l0aCAldSBxdWV1ZXNcXFwiLFxcbitcXHRcXHRcXHQgICAgICAgbmFtZSwgdGMsIHFjb3VudCk7XFxuK1xcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBvdHgyX21xcHJpb192YWxpZGF0ZV90eHFzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdClcXG4re1xcbitcXHRzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbitcXHR1MTYgbnVtX3R4cSA9IHBmdmYtXFx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzO1xcbitcXHRpbnQgdGMsIHR4cTtcXG4rXFxuK1xcdGlmIChxb3B0LVxcdTAwM2VudW1fdGMgXFx1MDAzZSBudW1fdHhxKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LCBcXFwiTnVtYmVyIG9mIFRDcyAoJXUpIGV4Y2VlZHMgaHcgcXVldWVzICV1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICBxb3B0LVxcdTAwM2VudW1fdGMsIG51bV90eHEpO1xcbitcXHRcXHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIFxcXCJOdW1iZXIgb2YgVENzICgldSkgZXhjZWVkcyBodyBxdWV1ZXMgJXVcXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgICAgcW9wdC1cXHUwMDNlbnVtX3RjLCBudW1fdHhxKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChudW1fdHhxIFxcdTAwM2UgTUFYX1RYU0NIUV9QRVJfRlVOQykge1xcbitcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0ICAgXFxcIk51bWJlciBvZiBxdWV1ZXMgKCV1KSBleGNlZWRzIG1heCBzY2hlZHVsZXIgcXVldWVzICV1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICBudW1fdHhxLCBNQVhfVFhTQ0hRX1BFUl9GVU5DKTtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdCAgICAgICBcXFwiTnVtYmVyIG9mIHF1ZXVlcyAoJXUpIGV4Y2VlZHMgbWF4IHNjaGVkdWxlciBxdWV1ZXMgJXVcXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgICAgbnVtX3R4cSwgTUFYX1RYU0NIUV9QRVJfRlVOQyk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRmb3IgKHRjID0gMDsgdGMgXFx1MDAzYyBxb3B0LVxcdTAwM2VudW1fdGM7IHRjKyspIHtcXG4rXFx0XFx0dTMyIHFjb3VudCA9IHFvcHQtXFx1MDAzZWNvdW50W3RjXTtcXG4rXFxuK1xcdFxcdGZvciAodHhxID0gcW9wdC1cXHUwMDNlb2Zmc2V0W3RjXTtcXG4rXFx0XFx0ICAgICB0eHEgXFx1MDAzYyBxb3B0LVxcdTAwM2VvZmZzZXRbdGNdICsgcWNvdW50OyB0eHErKykge1xcbitcXHRcXHRcXHRpZiAodHhxIFxcdTAwM2U9IG51bV90eHEpIHtcXG4rXFx0XFx0XFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIFxcXCJtcXByaW86IHR4cSAlZCBleGNlZWRzIG9mZmxvYWQgcXVldWUgY291bnQgJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHR4cSwgbnVtX3R4cSk7XFxuK1xcdFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcIm1xcHJpbzogdHhxICVkIGV4Y2VlZHMgb2ZmbG9hZCBxdWV1ZSBjb3VudCAldVxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICB0eHEsIG51bV90eHEpO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBvdHgyX21xcHJpb19yYXRlX3ZhbGlkKHU2NCByYXRlX2J5dGVzX3BzKVxcbit7XFxuK1xcdHU2NCBtYnBzO1xcbitcXG4rXFx0aWYgKCFyYXRlX2J5dGVzX3BzKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdGlmIChyYXRlX2J5dGVzX3BzIFxcdTAwM2MgT1RYMl9NUVBSSU9fTUlOX1JBVEVfQllURVNfUFMpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlmIChyYXRlX2J5dGVzX3BzIFxcdTAwM2UgT1RYMl9NUVBSSU9fTUFYX1JBVEVfQllURVNfUFMpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlmIChyYXRlX2J5dGVzX3BzIFxcdTAwM2UgZGl2X3U2NChVNjRfTUFYLCA4KSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0bWJwcyA9IG90eDJfY29udmVydF9yYXRlKHJhdGVfYnl0ZXNfcHMpO1xcbitcXHRyZXR1cm4gaWxvZzIobWJwcyAvIDIpIFxcdTAwM2M9IE1BWF9SQVRFX0VYUE9ORU5UO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcXG4rXFx0XFx0XFx0XFx0ICAgc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbylcXG4re1xcbitcXHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcXHUwMDI2bXFwcmlvLVxcdTAwM2Vxb3B0O1xcbitcXHRib29sIGhhZF9tcXByaW8gPSBwZnZmLVxcdTAwM2VtcXByaW8ucmF0ZV9saW1pdDtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtXFx1MDAzZW5ldGRldjtcXG4rXFx0Ym9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcobmV0ZGV2KTtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdHFvcHQtXFx1MDAzZWh3ID0gMDtcXG4rXFxuK1xcdC8qIHRjIHFkaXNjIHJlcGxhY2UgcnVucyBzZXR1cCBvbiB0aGUgbmV3IG1xcHJpbyBiZWZvcmUgZGVzdHJveWluZyB0aGVcXG4rXFx0ICogb2xkIG9uZS4gcmVwbGFjZV9zZXR1cF9kb25lIGFuZCBUQ19ST09UX0dSQUZUIGRpc3Rpbmd1aXNoIHN0YWxlXFxuK1xcdCAqIG9sZC1pbnN0YW5jZSB0ZWFyZG93biBmcm9tIGdyYWZ0IGZhaWx1cmUgYWZ0ZXIgc2V0dXAuXFxuK1xcdCAqL1xcbitcXHRpZiAocGZ2Zi1cXHUwMDNlbXFwcmlvLnJlcGxhY2Vfc2V0dXBfZG9uZSBcXHUwMDI2XFx1MDAyNiBwZnZmLVxcdTAwM2VjdXJfbXFfc25hcCkge1xcbitcXHRcXHRlcnIgPSAwO1xcbitcXHRcXHRpZiAocGZ2Zi1cXHUwMDNlbXFwcmlvLnJlcGxhY2VfZ3JhZnRfZG9uZSlcXG4rXFx0XFx0XFx0b3R4Ml9tcXByaW9fc25hcF9jb21taXQocGZ2Zik7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0ZXJyID0gb3R4Ml9tcXByaW9fcmVzdG9yZV9vbGQocGZ2Zik7XFxuK1xcdFxcdG90eDJfbXFwcmlvX2NsZWFyX3JlcGxhY2Vfc3RhdGUocGZ2Zik7XFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFNraXAgdGhlIG5ldGRldiByZXN0YXJ0IHdoZW4gbXFwcmlvIG9mZmxvYWQgd2FzIG5vdCBhY3RpdmUuICovXFxuK1xcdGlmICghaGFkX21xcHJpbylcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAoaWZfdXApIHtcXG4rXFx0XFx0aW50IGRvd25fZXJyLCBlcnI7XFxuK1xcbitcXHRcXHRkb3duX2VyciA9IG90eDJfbXFwcmlvX2Rvd24ocGZ2Zik7XFxuK1xcdFxcdGVyciA9IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KG5ldGRldiwgZmFsc2UpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHRyZXR1cm4gZG93bl9lcnI7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIG5kb19zdG9wKCkgYWxyZWFkeSBmcmVlZCB0aGUgVFggc2NoZWR1bGVyIFRMIG5vZGVzOyBkcm9wIHNvZnR3YXJlXFxuK1xcdCAqIHN0YXRlIG9ubHkuXFxuK1xcdCAqL1xcbitcXHRvdHgyX21xcHJpb19jbGVhcl9zdyhwZnZmKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19tcXByaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4rXFx0XFx0XFx0XFx0c3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbylcXG4re1xcbitcXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2sgPSBtcXByaW8tXFx1MDAzZWV4dGFjaztcXG4rXFx0c3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFx0c3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0ID0gXFx1MDAyNm1xcHJpby1cXHUwMDNlcW9wdDtcXG4rXFx0Ym9vbCByZXBsYWNpbmcgPSBwZnZmLVxcdTAwM2VtcXByaW8ucmF0ZV9saW1pdDtcXG4rXFx0Ym9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcobmV0ZGV2KTtcXG4rXFx0aW50IHRjLCB0eHEsIGVyciwgaTtcXG4rXFxuK1xcdGlmICghcW9wdC1cXHUwMDNlaHcpXFxuK1xcdFxcdHJldHVybiBvdHgyX3RlYXJkb3duX3RjX21xcHJpbyhwZnZmLCBtcXByaW8pO1xcbitcXG4rXFx0aWYgKCFpZl91cCkge1xcbitcXHRcXHRuZXRkZXZfZXJyKG5ldGRldiwgXFxcIm1xcHJpbzogc2V0dXAgcmVxdWlyZXMgaW50ZXJmYWNlIFVQXFxcXG5cXFwiKTtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcIm1xcHJpbzogc2V0dXAgcmVxdWlyZXMgaW50ZXJmYWNlIFVQXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKG1xcHJpby1cXHUwMDNlc2hhcGVyICE9IFRDX01RUFJJT19TSEFQRVJfQldfUkFURSkge1xcbitcXHRcXHRuZXRkZXZfZXJyKG5ldGRldiwgXFxcIlVuc3VwcG9ydGVkIG1xcHJpbyBzaGFwZXIgJSN4XFxcXG5cXFwiLCBtcXByaW8tXFx1MDAzZXNoYXBlcik7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLCBcXFwiVW5zdXBwb3J0ZWQgbXFwcmlvIHNoYXBlciAlI3hcXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgICAgbXFwcmlvLVxcdTAwM2VzaGFwZXIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghdGVzdF9iaXQoUU9TX0NJUl9QSVJfU1VQUE9SVCwgXFx1MDAyNnBmdmYtXFx1MDAzZWh3LmNhcF9mbGFnKSkge1xcbitcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgcmVxdWlyZXMgQ0lSK1BJUiBzdXBwb3J0XFxcXG5cXFwiKTtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgcmVxdWlyZXMgQ0lSK1BJUiBzdXBwb3J0XFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGlzX290eDJfc2RwX3JlcChwZnZmLVxcdTAwM2VwZGV2KSkge1xcbitcXHRcXHRuZXRkZXZfZXJyKG5ldGRldiwgXFxcIm1xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgbm90IHN1cHBvcnRlZCBvbiBTRFAgcmVwXFxcXG5cXFwiKTtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgbm90IHN1cHBvcnRlZCBvbiBTRFAgcmVwXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHBmdmYtXFx1MDAzZXBmY19lbikge1xcbitcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFBGQyBpcyBlbmFibGVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFBGQyBpcyBlbmFibGVkXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHBmdmYtXFx1MDAzZXhkcF9wcm9nKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHQgICBcXFwibXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgWERQIGlzIGFjdGl2ZVxcXFxuXFxcIik7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJtcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBYRFAgaXMgYWN0aXZlXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZwZnZmLVxcdTAwM2Vxb3MucW9zX3RyZWUpKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHQgICBcXFwibXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgSFRCIGlzIGFjdGl2ZVxcXFxuXFxcIik7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJtcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBIVEIgaXMgYWN0aXZlXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0Zm9yICh0YyA9IDA7IHRjIFxcdTAwM2MgcW9wdC1cXHUwMDNlbnVtX3RjOyB0YysrKSB7XFxuK1xcdFxcdHU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDtcXG4rXFx0XFx0dTMyIHFjb3VudCA9IHFvcHQtXFx1MDAzZWNvdW50W3RjXTtcXG4rXFxuK1xcdFxcdGlmIChtcXByaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpXFxuK1xcdFxcdFxcdG1pbl9yYXRlID0gbXFwcmlvLVxcdTAwM2VtaW5fcmF0ZVt0Y107XFxuK1xcdFxcdGlmIChtcXByaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUpXFxuK1xcdFxcdFxcdG1heF9yYXRlID0gbXFwcmlvLVxcdTAwM2VtYXhfcmF0ZVt0Y107XFxuK1xcbitcXHRcXHRpZiAobWluX3JhdGUgXFx1MDAyNlxcdTAwMjYgbWF4X3JhdGUgXFx1MDAyNlxcdTAwMjYgbWluX3JhdGUgXFx1MDAzZSBtYXhfcmF0ZSkge1xcbitcXHRcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIm1pbl9yYXRlICVsbHUgZXhjZWVkcyBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgbWluX3JhdGUsIG1heF9yYXRlLCB0Yyk7XFxuK1xcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcIm1pbl9yYXRlICVsbHUgZXhjZWVkcyBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZFxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBtaW5fcmF0ZSwgbWF4X3JhdGUsIHRjKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChtcXByaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpIHtcXG4rXFx0XFx0XFx0ZXJyID0gb3R4Ml9tcXByaW9fdmFsaWRhdGVfdGNfcmF0ZShuZXRkZXYsIGV4dGFjaywgbWluX3JhdGUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIHFjb3VudCwgdGMsIFxcXCJtaW5cXFwiKTtcXG4rXFx0XFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKG1xcHJpby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSkge1xcbitcXHRcXHRcXHRlcnIgPSBvdHgyX21xcHJpb192YWxpZGF0ZV90Y19yYXRlKG5ldGRldiwgZXh0YWNrLCBtYXhfcmF0ZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgcWNvdW50LCB0YywgXFxcIm1heFxcXCIpO1xcbitcXHRcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAobXFwcmlvLVxcdTAwM2VmbGFncyBcXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAhb3R4Ml9tcXByaW9fcmF0ZV92YWxpZChtaW5fcmF0ZSkpIHtcXG4rXFx0XFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJtcXByaW86IG1pbl9yYXRlICVsbHUgZm9yIHRjICVkIGlzIG91dHNpZGUgaGFyZHdhcmUgbGltaXRzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICBtaW5fcmF0ZSwgdGMpO1xcbitcXHRcXHRcXHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXCJtcXByaW86IG1pbl9yYXRlICVsbHUgZm9yIHRjICVkIGlzIG91dHNpZGUgaGFyZHdhcmUgbGltaXRzXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIG1pbl9yYXRlLCB0Yyk7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAobXFwcmlvLVxcdTAwM2VmbGFncyBcXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAhb3R4Ml9tcXByaW9fcmF0ZV92YWxpZChtYXhfcmF0ZSkpIHtcXG4rXFx0XFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJtcXByaW86IG1heF9yYXRlICVsbHUgZm9yIHRjICVkIGlzIG91dHNpZGUgaGFyZHdhcmUgbGltaXRzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICBtYXhfcmF0ZSwgdGMpO1xcbitcXHRcXHRcXHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXCJtcXByaW86IG1heF9yYXRlICVsbHUgZm9yIHRjICVkIGlzIG91dHNpZGUgaGFyZHdhcmUgbGltaXRzXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIG1heF9yYXRlLCB0Yyk7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdGVyciA9IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3R4cXMobmV0ZGV2LCBleHRhY2ssIHFvcHQpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0ZXJyID0gb3R4Ml9tcXByaW9fc3RhZ2VfY3VyKHBmdmYsIG1xcHJpbyk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHRlcnIgPSBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihwZnZmLVxcdTAwM2VuZXRkZXYsIHRydWUpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHRlcnIgPSBvdHgyX21xcHJpb19hbGxvY19jYWNoZShwZnZmLCByZXBsYWNpbmcpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHQvKiBvdHgyX21xcHJpb191cCgpIG1heSBoYXZlIHJlc3RvcmVkIHRoZSBwcmV2aW91cyBjb25maWd1cmF0aW9uIGR1cmluZ1xcbitcXHQgKiB0aGUgcmVzdGFydCBhYm92ZS4gQ2xlYXIgZXZlcnkgTURRIHNoYXBlciBiZWZvcmUgYXBwbHlpbmcgdGhlIG5ld1xcbitcXHQgKiBtYXBwaW5nIHNvIHF1ZXVlcyBkcm9wcGVkIGZyb20gdGhlIFRDIGxheW91dCBkbyBub3Qga2VlcCBzdGFsZVxcbitcXHQgKiBsaW1pdHMgaW4gaGFyZHdhcmUuXFxuK1xcdCAqL1xcbitcXHRpZiAob3R4Ml9tcXByaW9fbWRxX2FsbG9jYXRlZChwZnZmKSkge1xcbitcXHRcXHRlcnIgPSBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIocGZ2Zik7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0fVxcbitcXG4rXFx0cGZ2Zi1cXHUwMDNlbXFwcmlvLmZsYWdzID0gbXFwcmlvLVxcdTAwM2VmbGFncztcXG4rXFxuK1xcdGZvciAodGMgPSAwOyB0YyBcXHUwMDNjIHFvcHQtXFx1MDAzZW51bV90YzsgdGMrKykge1xcbitcXHRcXHR1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7XFxuK1xcdFxcdHUzMiBxY291bnQgPSBxb3B0LVxcdTAwM2Vjb3VudFt0Y107XFxuK1xcbitcXHRcXHQvKiBSYXRlcyBvbWl0dGVkIGZyb20gdGMgbXFwcmlvIGFyZSBwYXNzZWQgYXMgemVybyBhbmQgYm90aCBNRFFcXG4rXFx0XFx0ICogc2hhcGVyIHJlZ2lzdGVycyBhcmUgcHJvZ3JhbW1lZDsgc2VlXFxuK1xcdFxcdCAqIG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoKS4gTXVsdGktcXVldWUgVENzIHdpdGggcmF0ZXNcXG4rXFx0XFx0ICogYXJlIHJlamVjdGVkIGFib3ZlLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKG1xcHJpby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcXG4rXFx0XFx0XFx0bWluX3JhdGUgPSBtcXByaW8tXFx1MDAzZW1pbl9yYXRlW3RjXTtcXG4rXFx0XFx0aWYgKG1xcHJpby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSlcXG4rXFx0XFx0XFx0bWF4X3JhdGUgPSBtcXByaW8tXFx1MDAzZW1heF9yYXRlW3RjXTtcXG4rXFxuK1xcdFxcdGZvciAodHhxID0gcW9wdC1cXHUwMDNlb2Zmc2V0W3RjXTtcXG4rXFx0XFx0ICAgICB0eHEgXFx1MDAzYyBxb3B0LVxcdTAwM2VvZmZzZXRbdGNdICsgcWNvdW50OyB0eHErKykge1xcbitcXHRcXHRcXHRuZXRkZXZfZGJnKG5ldGRldixcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogdGMgJWQgdHhxICVkIG1pbl9yYXRlICVsbHUgbWF4X3JhdGUgJWxsdVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgdGMsIHR4cSwgbWluX3JhdGUsIG1heF9yYXRlKTtcXG4rXFxuK1xcdFxcdFxcdHBmdmYtXFx1MDAzZW1xcHJpby5taW5fcmF0ZVt0eHFdID0gbWluX3JhdGU7XFxuK1xcdFxcdFxcdHBmdmYtXFx1MDAzZW1xcHJpby5tYXhfcmF0ZVt0eHFdID0gbWF4X3JhdGU7XFxuK1xcbitcXHRcXHRcXHRlcnIgPSBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHBmdmYsIHR4cSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgbWluX3JhdGUsIG1heF9yYXRlKTtcXG4rXFx0XFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0XFx0Z290byBjbGVhbnVwO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdG5ldGRldl9zZXRfbnVtX3RjKG5ldGRldiwgcGZ2Zi1cXHUwMDNlY3VyX21xX3NuYXAtXFx1MDAzZW51bV90Yyk7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwZnZmLVxcdTAwM2VjdXJfbXFfc25hcC1cXHUwMDNlbnVtX3RjOyBpKyspXFxuK1xcdFxcdG5ldGRldl9zZXRfdGNfcXVldWUobmV0ZGV2LCBpLCBwZnZmLVxcdTAwM2VjdXJfbXFfc25hcC1cXHUwMDNlY291bnRbaV0sXFxuK1xcdFxcdFxcdFxcdCAgICBxb3B0LVxcdTAwM2VvZmZzZXRbaV0pO1xcbitcXG4rXFx0cW9wdC1cXHUwMDNlaHcgPSBUQ19NUVBSSU9fSFdfT0ZGTE9BRF9UQ1M7XFxuK1xcbitcXHRpZiAocmVwbGFjaW5nKSB7XFxuK1xcdFxcdHBmdmYtXFx1MDAzZW1xcHJpby5yZXBsYWNlX3NldHVwX2RvbmUgPSB0cnVlO1xcbitcXHRcXHRwZnZmLVxcdTAwM2VtcXByaW8ucmVwbGFjZV9ncmFmdF9kb25lID0gZmFsc2U7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdG90eDJfbXFwcmlvX3NuYXBfY29tbWl0KHBmdmYpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2NsZWFudXA6XFxuK1xcdHFvcHQtXFx1MDAzZWh3ID0gMDtcXG4rXFx0aWYgKHJlcGxhY2luZykge1xcbitcXHRcXHRpbnQgcmVzdG9yZV9lcnIgPSBvdHgyX21xcHJpb19yZXN0b3JlX29sZChwZnZmKTtcXG4rXFxuK1xcdFxcdG90eDJfbXFwcmlvX2NsZWFyX3JlcGxhY2Vfc3RhdGUocGZ2Zik7XFxuK1xcdFxcdGlmIChyZXN0b3JlX2Vycikge1xcbitcXHRcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogcmVwbGFjZSBmYWlsZWQgYW5kIHByaW9yIGNvbmZpZ3VyYXRpb24gcm9sbGJhY2sgZmFpbGVkOiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgcmVzdG9yZV9lcnIpO1xcbitcXHRcXHRcXHRpZiAoZXh0YWNrKVxcbitcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXCJtcXByaW86IHJlcGxhY2UgZmFpbGVkIGFuZCBwcmlvciBjb25maWd1cmF0aW9uIHJvbGxiYWNrIGZhaWxlZDogJWRcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgcmVzdG9yZV9lcnIpO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogcmVwbGFjZSBmYWlsZWQ7IHByaW9yIGNvbmZpZ3VyYXRpb24gcmVzdG9yZWRcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRpZiAoZXh0YWNrKVxcbitcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiByZXBsYWNlIGZhaWxlZDsgcHJpb3IgY29uZmlndXJhdGlvbiByZXN0b3JlZFxcXCIpO1xcbitcXHRcXHR9XFxuK1xcdFxcdHJldHVybiBlcnIgPyBlcnIgOiAtRUlPO1xcbitcXHR9XFxuK1xcdG90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHBmdmYsIG1xcHJpbyk7XFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19yb290KHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IHRjX3Jvb3RfcW9wdF9vZmZsb2FkICpyb290KVxcbit7XFxuK1xcdHN3aXRjaCAocm9vdC1cXHUwMDNlY29tbWFuZCkge1xcbitcXHRjYXNlIFRDX1JPT1RfR1JBRlQ6XFxuK1xcdFxcdGlmIChwZnZmLVxcdTAwM2VtcXByaW8ucmVwbGFjZV9zZXR1cF9kb25lKVxcbitcXHRcXHRcXHRwZnZmLVxcdTAwM2VtcXByaW8ucmVwbGFjZV9ncmFmdF9kb25lID0gdHJ1ZTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfcXVlcnlfY2Fwcyh2b2lkICp0eXBlX2RhdGEpXFxuK3tcXG4rXFx0c3RydWN0IHRjX3F1ZXJ5X2NhcHNfYmFzZSAqYmFzZSA9IHR5cGVfZGF0YTtcXG4rXFx0c3RydWN0IHRjX21xcHJpb19jYXBzICpjYXBzO1xcbitcXG4rXFx0aWYgKGJhc2UtXFx1MDAzZXR5cGUgIT0gVENfU0VUVVBfUURJU0NfTVFQUklPKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRjYXBzID0gYmFzZS1cXHUwMDNlY2FwcztcXG4rXFx0Y2Fwcy1cXHUwMDNldmFsaWRhdGVfcXVldWVfY291bnRzID0gdHJ1ZTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBpbnQgb3R4Ml9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSxcXG4gXFx0XFx0ICB2b2lkICp0eXBlX2RhdGEpXFxuIHtcXG4gXFx0c3dpdGNoICh0eXBlKSB7XFxuK1xcdGNhc2UgVENfUVVFUllfQ0FQUzpcXG4rXFx0XFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfcXVlcnlfY2Fwcyh0eXBlX2RhdGEpO1xcbiBcXHRjYXNlIFRDX1NFVFVQX0JMT0NLOlxcbiBcXHRcXHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19ibG9jayhuZXRkZXYsIHR5cGVfZGF0YSk7XFxuIFxcdGNhc2UgVENfU0VUVVBfUURJU0NfSFRCOlxcbiBcXHRcXHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19odGIobmV0ZGV2LCB0eXBlX2RhdGEpO1xcbitcXHRjYXNlIFRDX1NFVFVQX1FESVNDX01RUFJJTzpcXG4rXFx0XFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfbXFwcmlvKG5ldGRldiwgdHlwZV9kYXRhKTtcXG4rXFx0Y2FzZSBUQ19TRVRVUF9ST09UX1FESVNDOlxcbitcXHRcXHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19yb290KG5ldGRldl9wcml2KG5ldGRldiksIHR5cGVfZGF0YSk7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gXFx0fVxcbkBAIC0xNjMyLDYgKzIzNzcsNyBAQCBFWFBPUlRfU1lNQk9MKG90eDJfaW5pdF90Yyk7XFxuIHZvaWQgb3R4Ml9zaHV0ZG93bl90YyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYylcXG4ge1xcbiBcXHRvdHgyX2Rlc3Ryb3lfdGNfZmxvd19saXN0KG5pYyk7XFxuK1xcdG90eDJfbXFwcmlvX3NuYXBfZGVzdHJveShuaWMpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0wob3R4Ml9zaHV0ZG93bl90Yyk7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90eHJ4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90eHJ4LmNcXG5pbmRleCA4ZDJkNjA3YmM5MmY5Li5mNjViYTQ0ZGI2MGI2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3R4cnguY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3R4cnguY1xcbkBAIC0xNzEsNyArMTcxLDcgQEAgc3RhdGljIHZvaWQgb3R4Ml9zZXRfcnh0c3RhbXAoc3RydWN0IG90eDJfbmljICpwZnZmLFxcbiBcXHR1NjQgdGltZXN0YW1wLCB0c25zO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4tXFx0aWYgKCEocGZ2Zi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBPVFgyX0ZMQUdfUlhfVFNUQU1QX0VOQUJMRUQpKVxcbitcXHRpZiAoIW90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19SWF9UU1RBTVBfRU5BQkxFRCkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdHRpbWVzdGFtcCA9IHBmdmYtXFx1MDAzZXB0cC1cXHUwMDNlY29udmVydF9yeF9wdHBfdHN0bXAoKih1NjQgKilkYXRhKTtcXG5AQCAtMzc0LDEzICszNzQsMTMgQEAgc3RhdGljIHZvaWQgb3R4Ml9yY3ZfcGt0X2hhbmRsZXIoc3RydWN0IG90eDJfbmljICpwZnZmLFxcbiBcXHR9XFxuIFxcdG90eDJfc2V0X3J4aGFzaChwZnZmLCBjcWUsIHNrYik7XFxuIFxcbi1cXHRpZiAoIShwZnZmLVxcdTAwM2VmbGFncyBcXHUwMDI2IE9UWDJfRkxBR19SRVBfTU9ERV9FTkFCTEVEKSkge1xcbitcXHRpZiAoIW90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19SRVBfTU9ERV9FTkFCTEVEKSkge1xcbiBcXHRcXHRza2JfcmVjb3JkX3J4X3F1ZXVlKHNrYiwgY3EtXFx1MDAzZWNxX2lkeCk7XFxuIFxcdFxcdGlmIChwZnZmLVxcdTAwM2VuZXRkZXYtXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjYgTkVUSUZfRl9SWENTVU0pXFxuIFxcdFxcdFxcdHNrYi1cXHUwMDNlaXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChwZnZmLVxcdTAwM2VmbGFncyBcXHUwMDI2IE9UWDJfRkxBR19UQ19NQVJLX0VOQUJMRUQpXFxuK1xcdGlmIChvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfVENfTUFSS19FTkFCTEVEKSlcXG4gXFx0XFx0c2tiLVxcdTAwM2VtYXJrID0gcGFyc2UtXFx1MDAzZW1hdGNoX2lkO1xcbiBcXG4gXFx0c2tiX21hcmtfZm9yX3JlY3ljbGUoc2tiKTtcXG5AQCAtNTEzLDcgKzUxMyw3IEBAIHN0YXRpYyBpbnQgb3R4Ml90eF9uYXBpX2hhbmRsZXIoc3RydWN0IG90eDJfbmljICpwZnZmLFxcbiBcXHRcXHQgICAgICgodTY0KWNxLVxcdTAwM2VjcV9pZHggXFx1MDAzY1xcdTAwM2MgMzIpIHwgcHJvY2Vzc2VkX2NxZSk7XFxuIFxcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfUlZVX0VTV0lUQ0gpXFxuLVxcdGlmIChwZnZmLVxcdTAwM2VmbGFncyBcXHUwMDI2IE9UWDJfRkxBR19SRVBfTU9ERV9FTkFCTEVEKVxcbitcXHRpZiAob3R4Ml90ZXN0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1JFUF9NT0RFX0VOQUJMRUQpKVxcbiBcXHRcXHRuZGV2ID0gcGZ2Zi1cXHUwMDNlcmVwc1txaWR4XS1cXHUwMDNlbmV0ZGV2O1xcbiBcXHRlbHNlXFxuICNlbmRpZlxcbkBAIC01MjYsNyArNTI2LDcgQEAgc3RhdGljIGludCBvdHgyX3R4X25hcGlfaGFuZGxlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXFxuIFxcbiBcXHRcXHRpZiAocWlkeCBcXHUwMDNlPSBwZnZmLVxcdTAwM2Vody50eF9xdWV1ZXMpXFxuIFxcdFxcdFxcdHFpZHggLT0gcGZ2Zi1cXHUwMDNlaHcueGRwX3F1ZXVlcztcXG4tXFx0XFx0aWYgKHBmdmYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgT1RYMl9GTEFHX1JFUF9NT0RFX0VOQUJMRUQpXFxuK1xcdFxcdGlmIChvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfUkVQX01PREVfRU5BQkxFRCkpXFxuIFxcdFxcdFxcdHFpZHggPSAwO1xcbiBcXHRcXHR0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKG5kZXYsIHFpZHgpO1xcbiBcXHRcXHRuZXRkZXZfdHhfY29tcGxldGVkX3F1ZXVlKHR4cSwgdHhfcGt0cywgdHhfYnl0ZXMpO1xcbkBAIC01OTksMTEgKzU5OSwxMSBAQCBpbnQgb3R4Ml9uYXBpX2hhbmRsZXIoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KVxcbiBcXG4gXFx0aWYgKHdvcmtkb25lIFxcdTAwM2MgYnVkZ2V0IFxcdTAwMjZcXHUwMDI2IG5hcGlfY29tcGxldGVfZG9uZShuYXBpLCB3b3JrZG9uZSkpIHtcXG4gXFx0XFx0LyogSWYgaW50ZXJmYWNlIGlzIGdvaW5nIGRvd24sIGRvbid0IHJlLWVuYWJsZSBJUlEgKi9cXG4tXFx0XFx0aWYgKHBmdmYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgT1RYMl9GTEFHX0lOVEZfRE9XTilcXG4rXFx0XFx0aWYgKG90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19JTlRGX0RPV04pKVxcbiBcXHRcXHRcXHRyZXR1cm4gd29ya2RvbmU7XFxuIFxcbiBcXHRcXHQvKiBBZGp1c3QgaXJxIGNvYWxlc2UgdXNpbmcgbmV0X2RpbSAqL1xcbi1cXHRcXHRpZiAocGZ2Zi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBPVFgyX0ZMQUdfQURQVFZfSU5UX0NPQUxfRU5BQkxFRClcXG4rXFx0XFx0aWYgKG90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19BRFBUVl9JTlRfQ09BTF9FTkFCTEVEKSlcXG4gXFx0XFx0XFx0b3R4Ml9hZGp1c3RfYWRhcHRpdmVfY29hbGVzZShwZnZmLCBjcV9wb2xsKTtcXG4gXFxuIFxcdFxcdGlmIChsaWtlbHkoY3EpKVxcbkBAIC0xMTM3LDcgKzExMzcsNyBAQCBzdGF0aWMgdm9pZCBvdHgyX3NldF90eHRzdGFtcChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcbiBcXHRpZiAodW5saWtlbHkoIXNrYl9zaGluZm8oc2tiKS1cXHUwMDNlZ3NvX3NpemUgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgICAoc2tiX3NoaW5mbyhza2IpLVxcdTAwM2V0eF9mbGFncyBcXHUwMDI2IFNLQlRYX0hXX1RTVEFNUCkpKSB7XFxuLVxcdFxcdGlmICh1bmxpa2VseShwZnZmLVxcdTAwM2VmbGFncyBcXHUwMDI2IE9UWDJfRkxBR19QVFBfT05FU1RFUF9TWU5DIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdGlmICh1bmxpa2VseShvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfUFRQX09ORVNURVBfU1lOQykgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0XFx0ICAgICBvdHgyX3B0cF9pc19zeW5jKHNrYiwgXFx1MDAyNnB0cF9vZmZzZXQsIFxcdTAwMjZ1ZHBfY3N1bV9jcnQpKSkge1xcbiBcXHRcXHRcXHRvcmlnaW5fdHN0YW1wID0gKHN0cnVjdCBwdHB2Ml90c3RhbXAgKilcXG4gXFx0XFx0XFx0XFx0XFx0KCh1OCAqKXNrYi1cXHUwMDNlZGF0YSArIHB0cF9vZmZzZXQgK1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml92Zi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdmYuY1xcbmluZGV4IGY3NzY1ZTE5ZDc4YTkuLjVmNzkxNTIzMWNhM2EgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdmYuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmNcXG5AQCAtNjEwLDcgKzYxMCw3IEBAIHN0YXRpYyBpbnQgb3R4MnZmX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXFxuIFxcdHZmLVxcdTAwM2VkZXYgPSBkZXY7XFxuIFxcdHZmLVxcdTAwM2Vpb21tdV9kb21haW4gPSBpb21tdV9nZXRfZG9tYWluX2Zvcl9kZXYoZGV2KTtcXG4gXFxuLVxcdHZmLVxcdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfSU5URl9ET1dOO1xcbitcXHRvdHgyX3NldF9mbGFnKHZmLCBPVFgyX0ZMQUdfSU5URl9ET1dOKTtcXG4gXFx0aHcgPSBcXHUwMDI2dmYtXFx1MDAzZWh3O1xcbiBcXHRody1cXHUwMDNlcGRldiA9IHZmLVxcdTAwM2VwZGV2O1xcbiBcXHRody1cXHUwMDNlcnhfcXVldWVzID0gcWNvdW50O1xcbkBAIC04MjQsMTAgKzgyNCwxMCBAQCBzdGF0aWMgdm9pZCBvdHgydmZfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiBcXHR2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuIFxcbiBcXHQvKiBEaXNhYmxlIDgwMi4zeCBwYXVzZSBmcmFtZXMgKi9cXG4tXFx0aWYgKHZmLVxcdTAwM2VmbGFncyBcXHUwMDI2IE9UWDJfRkxBR19SWF9QQVVTRV9FTkFCTEVEIHx8XFxuLVxcdCAgICAodmYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgT1RYMl9GTEFHX1RYX1BBVVNFX0VOQUJMRUQpKSB7XFxuLVxcdFxcdHZmLVxcdTAwM2VmbGFncyBcXHUwMDI2PSB+T1RYMl9GTEFHX1JYX1BBVVNFX0VOQUJMRUQ7XFxuLVxcdFxcdHZmLVxcdTAwM2VmbGFncyBcXHUwMDI2PSB+T1RYMl9GTEFHX1RYX1BBVVNFX0VOQUJMRUQ7XFxuK1xcdGlmIChvdHgyX3Rlc3RfZmxhZyh2ZiwgT1RYMl9GTEFHX1JYX1BBVVNFX0VOQUJMRUQpIHx8XFxuK1xcdCAgICBvdHgyX3Rlc3RfZmxhZyh2ZiwgT1RYMl9GTEFHX1RYX1BBVVNFX0VOQUJMRUQpKSB7XFxuK1xcdFxcdG90eDJfY2xlYXJfZmxhZyh2ZiwgT1RYMl9GTEFHX1JYX1BBVVNFX0VOQUJMRUQpO1xcbitcXHRcXHRvdHgyX2NsZWFyX2ZsYWcodmYsIE9UWDJfRkxBR19UWF9QQVVTRV9FTkFCTEVEKTtcXG4gXFx0XFx0b3R4Ml9jb25maWdfcGF1c2VfZnJtKHZmKTtcXG4gXFx0fVxcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfeHNrLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml94c2suY1xcbmluZGV4IDBlOGE2YTY0ODZjNGEuLjc4MDg1ODhhMDIzNGEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfeHNrLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml94c2suY1xcbkBAIC05Niw3ICs5Niw3IEBAIHN0YXRpYyB2b2lkIG90eDJfY2xlYW5fdXBfcnEoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgcWlkeClcXG4gXFx0dTY0IGlvdmE7XFxuIFxcbiBcXHQvKiBJZiB0aGUgRE9XTiBmbGFnIGlzIHNldCBTUXMgYXJlIGFscmVhZHkgZnJlZWQgKi9cXG4tXFx0aWYgKHBmdmYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgT1RYMl9GTEFHX0lOVEZfRE9XTilcXG4rXFx0aWYgKG90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19JTlRGX0RPV04pKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRjcSA9IFxcdTAwMjZxc2V0LVxcdTAwM2VjcVtxaWR4XTtcXG5AQCAtMTcyLDcgKzE3Miw3IEBAIGludCBvdHgyX3hza193YWtldXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHF1ZXVlX2lkLCB1MzIgZmxhZ3MpXFxuIFxcdHN0cnVjdCBvdHgyX2NxX3BvbGwgKmNxX3BvbGwgPSBOVUxMO1xcbiBcXHRzdHJ1Y3Qgb3R4Ml9xc2V0ICpxc2V0ID0gXFx1MDAyNnBmLVxcdTAwM2Vxc2V0O1xcbiBcXG4tXFx0aWYgKHBmLVxcdTAwM2VmbGFncyBcXHUwMDI2IE9UWDJfRkxBR19JTlRGX0RPV04pXFxuK1xcdGlmIChvdHgyX3Rlc3RfZmxhZyhwZiwgT1RYMl9GTEFHX0lOVEZfRE9XTikpXFxuIFxcdFxcdHJldHVybiAtRU5FVERPV047XFxuIFxcbiBcXHRpZiAocXVldWVfaWQgXFx1MDAzZT0gcGYtXFx1MDAzZWh3LnJ4X3F1ZXVlcyB8fCBxdWV1ZV9pZCBcXHUwMDNlPSBwZi1cXHUwMDNlaHcudHhfcXVldWVzKVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmNcXG5pbmRleCBmMTYwYjE2MThlZmEyLi45ZWY1NWE2ZGI1MGI3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuY1xcbkBAIC0xMTgsNiArMTE4LDkgQEAgc3RhdGljIHZvaWQgb3R4Ml9jb25maWdfc2NoZWRfc2hhcGluZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXFxuIFxcdC8qIGNvbmZpZ3VyZSBQSVIgKi9cXG4gXFx0bWF4cmF0ZSA9IChub2RlLVxcdTAwM2VyYXRlIFxcdTAwM2Ugbm9kZS1cXHUwMDNlY2VpbCkgPyBub2RlLVxcdTAwM2VyYXRlIDogbm9kZS1cXHUwMDNlY2VpbDtcXG4gXFxuK1xcdC8qIDY1NTM2IGlzIHRoZSBrZXJuZWwtc2lkZSBkZWZhdWx0IGJ1cnN0IHdoZW4gSFRCIGRvZXMgbm90IHN1cHBseSBhblxcbitcXHQgKiBleHBsaWNpdCB2YWx1ZSwgbm90IHRoZSBOSVggaGFyZHdhcmUgbWF4aW11bSAoQ04xMEtfTUFYX0JVUlNUX1NJWkUpLlxcbitcXHQgKi9cXG4gXFx0Y2ZnLVxcdTAwM2VyZWd2YWxbKm51bV9yZWdzXSA9XFxuIFxcdFxcdG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCBtYXhyYXRlLCA2NTUzNik7XFxuIFxcdCgqbnVtX3JlZ3MpKys7XFxuQEAgLTEwODgsNiArMTA5MSwxNCBAQCBzdGF0aWMgaW50IG90eDJfcW9zX3Jvb3RfYWRkKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgdTE2IGh0Yl9tYWpfaWQsIHUxNiBodGJfZGVmY1xcbiBcXHRcXHQgICBcXFwiVENfSFRCX0NSRUFURTogaGFuZGxlPTB4JXggZGVmY2xzPTB4JXhcXFxcblxcXCIsXFxuIFxcdFxcdCAgIGh0Yl9tYWpfaWQsIGh0Yl9kZWZjbHMpO1xcbiBcXG4rXFx0aWYgKHBmdmYtXFx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KSB7XFxuK1xcdFxcdG5ldGRldl9lcnIocGZ2Zi1cXHUwMDNlbmV0ZGV2LFxcbitcXHRcXHRcXHQgICBcXFwiSFRCOiBjYW5ub3QgZW5hYmxlIHdoaWxlIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBpcyBhY3RpdmVcXFxcblxcXCIpO1xcbitcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICBcXFwiSFRCOiBjYW5ub3QgZW5hYmxlIHdoaWxlIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBpcyBhY3RpdmVcXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbiBcXHRyb290ID0gb3R4Ml9xb3NfYWxsb2Nfcm9vdChwZnZmKTtcXG4gXFx0aWYgKElTX0VSUihyb290KSkge1xcbiBcXHRcXHRlcnIgPSBQVFJfRVJSKHJvb3QpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zX3NxLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zX3NxLmNcXG5pbmRleCAyODcyYWRhYmM4MzA1Li41ZjA5ZTI5NjAxNDQxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3Nfc3EuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3Nfc3EuY1xcbkBAIC0yMzgsNyArMjM4LDcgQEAgaW50IG90eDJfcW9zX2VuYWJsZV9zcShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBxaWR4KVxcbiBcXHRzdHJ1Y3Qgb3R4Ml9odyAqaHcgPSBcXHUwMDI2cGZ2Zi1cXHUwMDNlaHc7XFxuIFxcdGludCBwb29sX2lkLCBzcV9pZHgsIGVycjtcXG4gXFxuLVxcdGlmIChwZnZmLVxcdTAwM2VmbGFncyBcXHUwMDI2IE9UWDJfRkxBR19JTlRGX0RPV04pXFxuK1xcdGlmIChvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfSU5URl9ET1dOKSlcXG4gXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4gXFxuIFxcdHNxX2lkeCA9IGh3LVxcdTAwM2Vub25fcW9zX3F1ZXVlcyArIHFpZHg7XFxuQEAgLTI4OCw3ICsyODgsNyBAQCB2b2lkIG90eDJfcW9zX2Rpc2FibGVfc3Eoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgcWlkeClcXG4gXFx0c3FfaWR4ID0gaHctXFx1MDAzZW5vbl9xb3NfcXVldWVzICsgcWlkeDtcXG4gXFxuIFxcdC8qIElmIHRoZSBET1dOIGZsYWcgaXMgc2V0IFNRcyBhcmUgYWxyZWFkeSBmcmVlZCAqL1xcbi1cXHRpZiAocGZ2Zi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBPVFgyX0ZMQUdfSU5URl9ET1dOKVxcbitcXHRpZiAob3R4Ml90ZXN0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX0lOVEZfRE9XTikpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdHNxID0gXFx1MDAyNnBmdmYtXFx1MDAzZXFzZXQuc3Fbc3FfaWR4XTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3JlcC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3JlcC5jXFxuaW5kZXggMGY1ZDU2NDJkM2Y3YS4uOGE4YzAwODhmZDIwNCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmNcXG5AQCAtOTMsOSArOTMsOSBAQCBzdGF0aWMgaW50IHJ2dV9yZXBfbWNhbV9mbG93X2luaXQoc3RydWN0IHJlcF9kZXYgKnJlcClcXG4gXFx0cmVwLVxcdTAwM2VmbG93X2NmZy1cXHUwMDNlbWF4X2Zsb3dzID0gYWxsb2NhdGVkO1xcbiBcXG4gXFx0aWYgKGFsbG9jYXRlZCkge1xcbi1cXHRcXHRyZXAtXFx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19NQ0FNX0VOVFJJRVNfQUxMT0M7XFxuLVxcdFxcdHJlcC1cXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX05UVVBMRV9TVVBQT1JUO1xcbi1cXHRcXHRyZXAtXFx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19UQ19GTE9XRVJfU1VQUE9SVDtcXG4rXFx0XFx0c2V0X2JpdChPVFgyX0ZMQUdfTUNBTV9FTlRSSUVTX0FMTE9DLCBcXHUwMDI2cmVwLVxcdTAwM2VmbGFncyk7XFxuK1xcdFxcdHNldF9iaXQoT1RYMl9GTEFHX05UVVBMRV9TVVBQT1JULCBcXHUwMDI2cmVwLVxcdTAwM2VmbGFncyk7XFxuK1xcdFxcdHNldF9iaXQoT1RYMl9GTEFHX1RDX0ZMT1dFUl9TVVBQT1JULCBcXHUwMDI2cmVwLVxcdTAwM2VmbGFncyk7XFxuIFxcdH1cXG4gXFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZyZXAtXFx1MDAzZWZsb3dfY2ZnLVxcdTAwM2VmbG93X2xpc3QpO1xcbkBAIC0xMDksMTQgKzEwOSwxNCBAQCBzdGF0aWMgaW50IHJ2dV9yZXBfc2V0dXBfdGNfY2IoZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsXFxuIFxcdHN0cnVjdCByZXBfZGV2ICpyZXAgPSBjYl9wcml2O1xcbiBcXHRzdHJ1Y3Qgb3R4Ml9uaWMgKnByaXYgPSByZXAtXFx1MDAzZW1kZXY7XFxuIFxcbi1cXHRpZiAoIShyZXAtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUlZVX1JFUF9WRl9JTklUSUFMSVpFRCkpXFxuK1xcdGlmICghdGVzdF9iaXQoT1RYMl9SRVBfVkZfSU5JVElBTElaRUQsIFxcdTAwMjZyZXAtXFx1MDAzZWZsYWdzKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbi1cXHRpZiAoIShyZXAtXFx1MDAzZWZsYWdzIFxcdTAwMjYgT1RYMl9GTEFHX1RDX0ZMT1dFUl9TVVBQT1JUKSlcXG4rXFx0aWYgKCF0ZXN0X2JpdChPVFgyX0ZMQUdfVENfRkxPV0VSX1NVUFBPUlQsIFxcdTAwMjZyZXAtXFx1MDAzZWZsYWdzKSlcXG4gXFx0XFx0cnZ1X3JlcF9tY2FtX2Zsb3dfaW5pdChyZXApO1xcbiBcXG4gXFx0cHJpdi1cXHUwMDNlbmV0ZGV2ID0gcmVwLVxcdTAwM2VuZXRkZXY7XFxuLVxcdHByaXYtXFx1MDAzZWZsYWdzID0gcmVwLVxcdTAwM2VmbGFncztcXG4rXFx0b3R4Ml9zeW5jX2ZsYWdzX2Zyb21fcmVwKHByaXYsIFxcdTAwMjZyZXAtXFx1MDAzZWZsYWdzKTtcXG4gXFx0cHJpdi1cXHUwMDNlcGNpZnVuYyA9IHJlcC1cXHUwMDNlcGNpZnVuYztcXG4gXFx0cHJpdi1cXHUwMDNlZmxvd19jZmcgPSByZXAtXFx1MDAzZWZsb3dfY2ZnO1xcbiBcXG5AQCAtMzAzLDkgKzMwMyw5IEBAIHN0YXRpYyB2b2lkIHJ2dV9yZXBfc3RhdGVfZXZ0X2hhbmRsZXIoc3RydWN0IG90eDJfbmljICpwcml2LFxcbiBcXHRyZXBfaWQgPSBydnVfcmVwX2dldF9yZXBpZChwcml2LCBpbmZvLVxcdTAwM2VwY2lmdW5jKTtcXG4gXFx0cmVwID0gcHJpdi1cXHUwMDNlcmVwc1tyZXBfaWRdO1xcbiBcXHRpZiAoaW5mby1cXHUwMDNlZXZ0X2RhdGEudmZfc3RhdGUpXFxuLVxcdFxcdHJlcC1cXHUwMDNlZmxhZ3MgfD0gUlZVX1JFUF9WRl9JTklUSUFMSVpFRDtcXG4rXFx0XFx0c2V0X2JpdChPVFgyX1JFUF9WRl9JTklUSUFMSVpFRCwgXFx1MDAyNnJlcC1cXHUwMDNlZmxhZ3MpO1xcbiBcXHRlbHNlXFxuLVxcdFxcdHJlcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gflJWVV9SRVBfVkZfSU5JVElBTElaRUQ7XFxuK1xcdFxcdGNsZWFyX2JpdChPVFgyX1JFUF9WRl9JTklUSUFMSVpFRCwgXFx1MDAyNnJlcC1cXHUwMDNlZmxhZ3MpO1xcbiB9XFxuIFxcbiBpbnQgcnZ1X2V2ZW50X3VwX25vdGlmeShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmLCBzdHJ1Y3QgcmVwX2V2ZW50ICppbmZvKVxcbkBAIC0zODIsNyArMzgyLDcgQEAgc3RhdGljIHZvaWQgcnZ1X3JlcF9nZXRfc3RhdHM2NChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiB7XFxuIFxcdHN0cnVjdCByZXBfZGV2ICpyZXAgPSBuZXRkZXZfcHJpdihkZXYpO1xcbiBcXG4tXFx0aWYgKCEocmVwLVxcdTAwM2VmbGFncyBcXHUwMDI2IFJWVV9SRVBfVkZfSU5JVElBTElaRUQpKVxcbitcXHRpZiAoIXRlc3RfYml0KE9UWDJfUkVQX1ZGX0lOSVRJQUxJWkVELCBcXHUwMDI2cmVwLVxcdTAwM2VmbGFncykpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdHN0YXRzLVxcdTAwM2VyeF9wYWNrZXRzID0gcmVwLVxcdTAwM2VzdGF0cy5yeF9mcmFtZXM7XFxuQEAgLTQ1Myw3ICs0NTMsNyBAQCBzdGF0aWMgaW50IHJ2dV9yZXBfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBcXHRzdHJ1Y3Qgb3R4Ml9uaWMgKnByaXYgPSByZXAtXFx1MDAzZW1kZXY7XFxuIFxcdHN0cnVjdCByZXBfZXZlbnQgZXZ0ID0gezB9O1xcbiBcXG4tXFx0aWYgKCEocmVwLVxcdTAwM2VmbGFncyBcXHUwMDI2IFJWVV9SRVBfVkZfSU5JVElBTElaRUQpKVxcbitcXHRpZiAoIXRlc3RfYml0KE9UWDJfUkVQX1ZGX0lOSVRJQUxJWkVELCBcXHUwMDI2cmVwLVxcdTAwM2VmbGFncykpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4gXFx0bmV0aWZfY2Fycmllcl9vbihkZXYpO1xcbkBAIC00NzIsNyArNDcyLDcgQEAgc3RhdGljIGludCBydnVfcmVwX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0c3RydWN0IG90eDJfbmljICpwcml2ID0gcmVwLVxcdTAwM2VtZGV2O1xcbiBcXHRzdHJ1Y3QgcmVwX2V2ZW50IGV2dCA9IHswfTtcXG4gXFxuLVxcdGlmICghKHJlcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBSVlVfUkVQX1ZGX0lOSVRJQUxJWkVEKSlcXG4rXFx0aWYgKCF0ZXN0X2JpdChPVFgyX1JFUF9WRl9JTklUSUFMSVpFRCwgXFx1MDAyNnJlcC1cXHUwMDNlZmxhZ3MpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdG5ldGlmX2NhcnJpZXJfb2ZmKGRldik7XFxuQEAgLTU0Nyw3ICs1NDcsNyBAQCBzdGF0aWMgaW50IHJ2dV9yZXBfbmFwaV9pbml0KHN0cnVjdCBvdHgyX25pYyAqcHJpdixcXG4gXFx0XFx0b3R4Ml93cml0ZTY0KHByaXYsIE5JWF9MRl9DSU5UWF9JTlQocWlkeCksIEJJVF9VTEwoMCkpO1xcbiBcXHRcXHRvdHgyX3dyaXRlNjQocHJpdiwgTklYX0xGX0NJTlRYX0VOQV9XMVMocWlkeCksIEJJVF9VTEwoMCkpO1xcbiBcXHR9XFxuLVxcdHByaXYtXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5PVFgyX0ZMQUdfSU5URl9ET1dOO1xcbitcXHRvdHgyX2NsZWFyX2ZsYWcocHJpdiwgT1RYMl9GTEFHX0lOVEZfRE9XTik7XFxuIFxcdHJldHVybiAwO1xcbiBcXG4gZXJyX2ZyZWVfY2ludHM6XFxuQEAgLTYzMiw3ICs2MzIsNyBAQCB2b2lkIHJ2dV9yZXBfZGVzdHJveShzdHJ1Y3Qgb3R4Ml9uaWMgKnByaXYpXFxuIFxcdGludCByZXBfaWQ7XFxuIFxcbiBcXHRydnVfZXN3aXRjaF9jb25maWcocHJpdiwgZmFsc2UpO1xcbi1cXHRwcml2LVxcdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfSU5URl9ET1dOO1xcbitcXHRvdHgyX3NldF9mbGFnKHByaXYsIE9UWDJfRkxBR19JTlRGX0RPV04pO1xcbiBcXHRydnVfcmVwX2ZyZWVfY3FfcnNyYyhwcml2KTtcXG4gXFx0Zm9yIChyZXBfaWQgPSAwOyByZXBfaWQgXFx1MDAzYyBwcml2LVxcdTAwM2VyZXBfY250OyByZXBfaWQrKykge1xcbiBcXHRcXHRyZXAgPSBwcml2LVxcdTAwM2VyZXBzW3JlcF9pZF07XFxuQEAgLTgwMSw4ICs4MDEsOCBAQCBzdGF0aWMgaW50IHJ2dV9yZXBfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG4gXFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIHByaXYpO1xcbiBcXHRwcml2LVxcdTAwM2VwZGV2ID0gcGRldjtcXG4gXFx0cHJpdi1cXHUwMDNlZGV2ID0gZGV2O1xcbi1cXHRwcml2LVxcdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfSU5URl9ET1dOO1xcbi1cXHRwcml2LVxcdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfUkVQX01PREVfRU5BQkxFRDtcXG4rXFx0b3R4Ml9zZXRfZmxhZyhwcml2LCBPVFgyX0ZMQUdfSU5URl9ET1dOKTtcXG4rXFx0b3R4Ml9zZXRfZmxhZyhwcml2LCBPVFgyX0ZMQUdfUkVQX01PREVfRU5BQkxFRCk7XFxuIFxcbiBcXHRodyA9IFxcdTAwMjZwcml2LVxcdTAwM2VodztcXG4gXFx0aHctXFx1MDAzZXBkZXYgPSBwZGV2O1xcbkBAIC04NDUsNyArODQ1LDcgQEAgc3RhdGljIHZvaWQgcnZ1X3JlcF9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIFxcdHN0cnVjdCBvdHgyX25pYyAqcHJpdiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcXG4gXFxuIFxcdG90eDJfdW5yZWdpc3Rlcl9kbChwcml2KTtcXG4tXFx0aWYgKCEocHJpdi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBPVFgyX0ZMQUdfSU5URl9ET1dOKSlcXG4rXFx0aWYgKCFvdHgyX3Rlc3RfZmxhZyhwcml2LCBPVFgyX0ZMQUdfSU5URl9ET1dOKSlcXG4gXFx0XFx0cnZ1X3JlcF9kZXN0cm95KHByaXYpO1xcbiBcXHRvdHgyX2RldGFjaF9yZXNvdXJjZXMoXFx1MDAyNnByaXYtXFx1MDAzZW1ib3gpO1xcbiBcXHRpZiAocHJpdi1cXHUwMDNlaHcubG10X2luZm8pXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuaFxcbmluZGV4IDViYzllMmM3ZDgwMGIuLjQ1NzA3YzQzNGQ4OWYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3JlcC5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3JlcC5oXFxuQEAgLTM3LDggKzM3LDcgQEAgc3RydWN0IHJlcF9kZXYge1xcbiBcXHRzdHJ1Y3QgZGVsYXllZF93b3JrIHN0YXRzX3dyaztcXG4gXFx0c3RydWN0IGRldmxpbmtfcG9ydCBkbF9wb3J0O1xcbiBcXHRzdHJ1Y3Qgb3R4Ml9mbG93X2NvbmZpZ1xcdCpmbG93X2NmZztcXG4tI2RlZmluZSBSVlVfUkVQX1ZGX0lOSVRJQUxJWkVEXFx0XFx0QklUX1VMTCgwKVxcbi1cXHR1NjQgZmxhZ3M7XFxuK1xcdHVuc2lnbmVkIGxvbmdcXHRcXHRmbGFncztcXG4gXFx0dTE2IHJlcF9pZDtcXG4gXFx0dTE2IHBjaWZ1bmM7XFxuIFxcdHU4IG1hY1tFVEhfQUxFTl07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjQ2OjUzLjY2MDI1MTcxN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTU3OTUxMDgzNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBleGNsdXNpdmVseSBtb2RpZmllcyB0aGUgTWFydmVsbCBPY3Rlb25UWDIgUlZVL05JQyBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyLyksIGFkZGluZyBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgc3VwcG9ydCBhbmQgcmVmYWN0b3JpbmcgZmxhZyBiaXRtYXNrIG9wZXJhdGlvbnMuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsIE1hcnZlbGwgT2N0ZW9uVFgyIC8gQ04xMEsgaGFyZHdhcmUvQVNJQ3MgYW5kIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSB2aXJ0dWFsaXphdGlvbiBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIHN5emthbGxlciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5MmMxMzM0Y2Q5ZTUwNDhlM2M2NTFmMTczNWFkMDIwMThhYmMwZDg0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMTI6NDY6NTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcbmluZGV4IGQ4MGQyYzAwYmQ4NDMuLjJkMWFiOGM3NjFjNDAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguY1xuQEAgLTMzMSw4ICszMzEsMTIgQEAgc3RhdGljIGJvb2wgaXNfdmFsaWRfdHhzY2hxKHN0cnVjdCBydnUgKnJ2dSwgaW50IGJsa2FkZHIsXG4gXHRcdFx0cmV0dXJuIHRydWU7XG4gXHR9XG4gXG4tXHRpZiAobWFwX2Z1bmMgIT0gcGNpZnVuYylcbitcdGlmIChtYXBfZnVuYyAhPSBwY2lmdW5jKSB7XG4rXHRcdGRldl9lcnJfcmF0ZWxpbWl0ZWQocnZ1LVx1MDAzZWRldixcbitcdFx0XHRcdCAgICBcInBjaWZ1bmMgJXggbWFwIHBjaWZ1bmMgJXggbm90IGVxdWFsLCBsdmw9JXUgc2NocT0ldVxcblwiLFxuK1x0XHRcdFx0ICAgIHBjaWZ1bmMsIG1hcF9mdW5jLCBsdmwsIHNjaHEpO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4rXHR9XG4gXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL2NuMTBrX2lwc2VjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvY24xMGtfaXBzZWMuY1xuaW5kZXggNzc1NDNkNDcyMzQ1ZS4uNTBlYzQ1NDJjNDE4MyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9jbjEwa19pcHNlYy5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvY24xMGtfaXBzZWMuY1xuQEAgLTMzNCw3ICszMzQsNyBAQCBzdGF0aWMgaW50IGNuMTBrX291dGJfY3B0X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdFx0XHRcdFx0XHRDTjEwS19DUFRfTEZfTlFYKDApKTtcbiBcbiBcdC8qIFNldCBpcHNlYyBvZmZsb2FkIGVuYWJsZWQgZm9yIHRoaXMgZGV2aWNlICovXG4tXHRwZi1cdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfSVBTRUNfT0ZGTE9BRF9FTkFCTEVEO1xuK1x0b3R4Ml9zZXRfZmxhZyhwZiwgT1RYMl9GTEFHX0lQU0VDX09GRkxPQURfRU5BQkxFRCk7XG4gXG4gXHRjbjEwa19jcHRfZGV2aWNlX3NldF9hdmFpbGFibGUocGYpO1xuIFx0cmV0dXJuIDA7XG5AQCAtMzU2LDcgKzM1Niw3IEBAIHN0YXRpYyBpbnQgY24xMGtfb3V0Yl9jcHRfY2xlYW4oc3RydWN0IG90eDJfbmljICpwZilcbiBcdH1cbiBcbiBcdC8qIFNldCBpcHNlYyBvZmZsb2FkIGRpc2FibGVkIGZvciB0aGlzIGRldmljZSAqL1xuLVx0cGYtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+T1RYMl9GTEFHX0lQU0VDX09GRkxPQURfRU5BQkxFRDtcbitcdG90eDJfY2xlYXJfZmxhZyhwZiwgT1RYMl9GTEFHX0lQU0VDX09GRkxPQURfRU5BQkxFRCk7XG4gXG4gXHQvKiBEaXNhYmxlIENQVExGIEluc3RydWN0aW9uIFF1ZXVlIChJUSkgKi9cbiBcdGNuMTBrX291dGJfY3B0bGZfaXFfZGlzYWJsZShwZik7XG5AQCAtODIwLDcgKzgyMCw3IEBAIHZvaWQgY24xMGtfaXBzZWNfY2xlYW4oc3RydWN0IG90eDJfbmljICpwZilcbiBcdGlmICghaXNfZGV2X3N1cHBvcnRfaXBzZWNfb2ZmbG9hZChwZi1cdTAwM2VwZGV2KSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0aWYgKCEocGYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19JUFNFQ19PRkZMT0FEX0VOQUJMRUQpKVxuK1x0aWYgKCFvdHgyX3Rlc3RfZmxhZyhwZiwgT1RYMl9GTEFHX0lQU0VDX09GRkxPQURfRU5BQkxFRCkpXG4gXHRcdHJldHVybjtcbiBcbiBcdGlmIChwZi1cdTAwM2VpcHNlYy5zYV93b3JrcSkge1xuQEAgLTk0NSw3ICs5NDUsNyBAQCBib29sIGNuMTBrX2lwc2VjX3RyYW5zbWl0KHN0cnVjdCBvdHgyX25pYyAqcGYsIHN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cSxcbiBcdHUxNiBkbGVuO1xuIFxuIFx0LyogQ2hlY2sgZm9yIElQU0VDIG9mZmxvYWQgZW5hYmxlZCAqL1xuLVx0aWYgKCEocGYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19JUFNFQ19PRkZMT0FEX0VOQUJMRUQpKVxuK1x0aWYgKCFvdHgyX3Rlc3RfZmxhZyhwZiwgT1RYMl9GTEFHX0lQU0VDX09GRkxPQURfRU5BQkxFRCkpXG4gXHRcdGdvdG8gZHJvcDtcbiBcbiBcdHNwID0gc2tiX3NlY19wYXRoKHNrYik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uY1xuaW5kZXggMTc1OTkyMTg4YzE4YS4uNWJhZDI0NjZkYTBjNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uY1xuQEAgLTIyMCwxMCArMjIwLDEwIEBAIGludCBvdHgyX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB2b2lkICpwKVxuIFx0XHRldGhfaHdfYWRkcl9zZXQobmV0ZGV2LCBhZGRyLVx1MDAzZXNhX2RhdGEpO1xuIFx0XHQvKiB1cGRhdGUgZG1hYyBmaWVsZCBpbiB2bGFuIG9mZmxvYWQgcnVsZSAqL1xuIFx0XHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgcGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1JYX1ZMQU5fU1VQUE9SVClcbitcdFx0ICAgIG90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19SWF9WTEFOX1NVUFBPUlQpKVxuIFx0XHRcdG90eDJfaW5zdGFsbF9yeHZsYW5fb2ZmbG9hZF9mbG93KHBmdmYpO1xuIFx0XHQvKiB1cGRhdGUgZG1hYyBhZGRyZXNzIGluIG50dXBsZSBhbmQgRE1BQyBmaWx0ZXIgbGlzdCAqL1xuLVx0XHRpZiAocGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX0RNQUNGTFRSX1NVUFBPUlQpXG4rXHRcdGlmIChvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfRE1BQ0ZMVFJfU1VQUE9SVCkpXG4gXHRcdFx0b3R4Ml9kbWFjZmx0X3VwZGF0ZV9wZm1hY19mbG93KHBmdmYpO1xuIFx0fSBlbHNlIHtcbiBcdFx0cmV0dXJuIC1FUEVSTTtcbkBAIC0yNzUsOCArMjc1LDggQEAgaW50IG90eDJfY29uZmlnX3BhdXNlX2ZybShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4gXHRcdGdvdG8gdW5sb2NrO1xuIFx0fVxuIFxuLVx0cmVxLVx1MDAzZXJ4X3BhdXNlID0gISEocGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1JYX1BBVVNFX0VOQUJMRUQpO1xuLVx0cmVxLVx1MDAzZXR4X3BhdXNlID0gISEocGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1RYX1BBVVNFX0VOQUJMRUQpO1xuK1x0cmVxLVx1MDAzZXJ4X3BhdXNlID0gb3R4Ml90ZXN0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1JYX1BBVVNFX0VOQUJMRUQpO1xuK1x0cmVxLVx1MDAzZXR4X3BhdXNlID0gb3R4Ml90ZXN0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1RYX1BBVVNFX0VOQUJMRUQpO1xuIFx0cmVxLVx1MDAzZXNldCA9IDE7XG4gXG4gXHRlcnIgPSBvdHgyX3N5bmNfbWJveF9tc2coXHUwMDI2cGZ2Zi1cdTAwM2VtYm94KTtcbkBAIC02MTUsNiArNjE1LDE0MiBAQCB2b2lkIG90eDJfZ2V0X21hY19mcm9tX2FmKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gfVxuIEVYUE9SVF9TWU1CT0wob3R4Ml9nZXRfbWFjX2Zyb21fYWYpO1xuIFxuK3N0YXRpYyBpbnRcbitvdHgyX25peF90bXFfcmVnX3dyaXRlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGNudCxcbitcdFx0ICAgICAgIHU2NCByZWdfYWRkcltNQVhfUkVHU19QRVJfTUJPWF9NU0ddLFxuK1x0XHQgICAgICAgdTY0IHJlZ192YWxbTUFYX1JFR1NfUEVSX01CT1hfTVNHXSlcbit7XG4rXHRzdHJ1Y3QgbWJveCAqbWJveCA9IFx1MDAyNnBmdmYtXHUwMDNlbWJveDtcbitcdHN0cnVjdCBuaXhfdHhzY2hxX2NvbmZpZyAqcmVxO1xuK1x0aW50IGksIGVycjtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbitcdHJlcSA9IG90eDJfbWJveF9hbGxvY19tc2dfbml4X3R4c2NocV9jZmcobWJveCk7XG4rXHRpZiAoIXJlcSkge1xuK1x0XHRtdXRleF91bmxvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4rXHRyZXEtXHUwMDNlbHZsID0gTklYX1RYU0NIX0xWTF9NRFE7XG4rXHRyZXEtXHUwMDNlbnVtX3JlZ3MgPSBjbnQ7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjbnQ7IGkrKykge1xuK1x0XHRyZXEtXHUwMDNlcmVnW2ldID0gcmVnX2FkZHJbaV07XG4rXHRcdHJlcS1cdTAwM2VyZWd2YWxbaV0gPSByZWdfdmFsW2ldO1xuK1x0fVxuK1xuK1x0ZXJyID0gb3R4Ml9zeW5jX21ib3hfbXNnKG1ib3gpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4rXG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbitpbnQgb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zilcbit7XG4rXHR1NjQgcmVnX2FkZHJbTUFYX1JFR1NfUEVSX01CT1hfTVNHXTtcbitcdHU2NCByZWdfdmFsW01BWF9SRUdTX1BFUl9NQk9YX01TR107XG4rXHRpbnQgZXJyLCBzbXEsIGksIGNudCA9IDA7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwZnZmLVx1MDAzZWh3LnR4c2NocV9jbnRbTklYX1RYU0NIX0xWTF9TTVFdOyBpKyspIHtcbitcdFx0c21xID0gcGZ2Zi1cdTAwM2Vody50eHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1NNUV1baV07XG4rXG4rXHRcdHJlZ19hZGRyW2NudF0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTtcbitcdFx0cmVnX3ZhbFtjbnRdID0gMDtcbitcdFx0Y250Kys7XG4rXG4rXHRcdHJlZ19hZGRyW2NudF0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTtcbitcdFx0cmVnX3ZhbFtjbnRdID0gMDtcbitcdFx0Y250Kys7XG4rXG4rXHRcdGlmIChjbnQgXHUwMDNjIE1BWF9SRUdTX1BFUl9NQk9YX01TRyAtIDEpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdGVyciA9IG90eDJfbml4X3RtcV9yZWdfd3JpdGUocGZ2ZiwgY250LFxuK1x0XHRcdFx0XHQgICAgIHJlZ19hZGRyLCByZWdfdmFsKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRnb3RvIGZhaWw7XG4rXHRcdGNudCA9IDA7XG4rXHR9XG4rXG4rXHRpZiAoY250KSB7XG4rXHRcdGVyciA9IG90eDJfbml4X3RtcV9yZWdfd3JpdGUocGZ2ZiwgY250LFxuK1x0XHRcdFx0XHQgICAgIHJlZ19hZGRyLCByZWdfdmFsKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRnb3RvIGZhaWw7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbitmYWlsOlxuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4raW50IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmLFxuK1x0XHRcdFx0IGludCB0eHEsIHU2NCBtaW5yYXRlLCB1NjQgbWF4cmF0ZSlcbit7XG4rXHRzdHJ1Y3QgbWJveCAqbWJveCA9IFx1MDAyNnBmdmYtXHUwMDNlbWJveDtcbitcdHN0cnVjdCBuaXhfdHhzY2hxX2NvbmZpZyAqcmVxO1xuK1x0aW50IGVyciwgc21xLCBuID0gMDtcbitcdHU2NCByZWdfYWRkclsyXTtcbitcdHU2NCByZWdfdmFsWzJdO1xuK1x0dTY0IHJhdGU7XG4rXG4rXHRpZiAoIW1heHJhdGUgXHUwMDI2XHUwMDI2ICFtaW5yYXRlKSB7XG4rXHRcdHNtcSA9IG90eDJfZ2V0X3NtcV9pZHgocGZ2ZiwgdHhxKTtcbitcdFx0cmVnX2FkZHJbMF0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTtcbitcdFx0cmVnX3ZhbFswXSA9IDA7XG4rXHRcdHJlZ19hZGRyWzFdID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7XG4rXHRcdHJlZ192YWxbMV0gPSAwO1xuK1x0XHRyZXR1cm4gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCAyLCByZWdfYWRkciwgcmVnX3ZhbCk7XG4rXHR9XG4rXG4rXHRzbXEgPSBvdHgyX2dldF9zbXFfaWR4KHBmdmYsIHR4cSk7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4rXHRyZXEgPSBvdHgyX21ib3hfYWxsb2NfbXNnX25peF90eHNjaHFfY2ZnKG1ib3gpO1xuK1x0aWYgKCFyZXEpIHtcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuK1xuK1x0cmVxLVx1MDAzZWx2bCA9IE5JWF9UWFNDSF9MVkxfTURRO1xuK1xuK1x0LyogTVFQUklPIGV4cG9zZXMgb25seSBtaW4vbWF4IHJhdGUsIG5vdCBidXJzdC4gIFBhc3MgYnVyc3QgMCBzb1xuK1x0ICogb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZygpIHByb2dyYW1tZXMgdGhlIGxhcmdlc3QgYnVyc3QgdGhlIE5JWFxuK1x0ICogZW5jb2Rpbmcgc3VwcG9ydHMgKENOMTBLX01BWF9CVVJTVF9TSVpFIG9uIENOMTBLKS4gIFRoaXMgZGlmZmVyc1xuK1x0ICogZnJvbSB0aGUgNjU1MzYgYnl0ZSBkZWZhdWx0IHVzZWQgaW4gdGhlIEhUQiBwYXRoLCB3aGljaCBpcyBhXG4rXHQgKiBrZXJuZWwtc2lkZSBkZWZhdWx0IHdoZW4gbm8gZXhwbGljaXQgYnVyc3QgaXMgY29uZmlndXJlZCwgbm90IGFcbitcdCAqIGhhcmR3YXJlIGNhcC5cbitcdCAqXG4rXHQgKiBtcXByaW8gc2V0dXAgcmVzdGFydHMgdGhlIG5ldGRldiAob3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYpLFxuK1x0ICogd2hpY2ggcmVzZXRzIE1EUSBzaGFwZXJzIHRvIHplcm8uICBQcm9ncmFtIGJvdGggUElSIGFuZCBDSVIgb25cbitcdCAqIGV2ZXJ5IHVwZGF0ZSBzbyBvbWl0dGVkIHJhdGVzIGFyZSBhcHBsaWVkIGV4cGxpY2l0bHkgcmF0aGVyIHRoYW5cbitcdCAqIHJlbHlpbmcgb24gc3RhbGUgaGFyZHdhcmUgc3RhdGUuXG4rXHQgKi9cbitcdHJlcS1cdTAwM2VyZWdbbl0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTtcbitcdGlmIChtYXhyYXRlKSB7XG4rXHRcdHJhdGUgPSBvdHgyX2NvbnZlcnRfcmF0ZShtYXhyYXRlKTtcbitcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtuXSA9IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCByYXRlLCAwKTtcbitcdH0gZWxzZSB7XG4rXHRcdHJlcS1cdTAwM2VyZWd2YWxbbl0gPSAwO1xuK1x0fVxuK1x0bisrO1xuK1xuK1x0LyogQ0lSK1BJUiBzdXBwb3J0IGlzIHJlcXVpcmVkIGFuZCBjaGVja2VkIGF0IG1xcHJpbyBzZXR1cC4gKi9cbitcdHJlcS1cdTAwM2VyZWdbbl0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTtcbitcdGlmIChtaW5yYXRlKSB7XG4rXHRcdHJhdGUgPSBvdHgyX2NvbnZlcnRfcmF0ZShtaW5yYXRlKTtcbitcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtuXSA9IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCByYXRlLCAwKTtcbitcdH0gZWxzZSB7XG4rXHRcdHJlcS1cdTAwM2VyZWd2YWxbbl0gPSAwO1xuK1x0fVxuK1x0bisrO1xuK1x0cmVxLVx1MDAzZW51bV9yZWdzID0gbjtcbitcbitcdGVyciA9IG90eDJfc3luY19tYm94X21zZyhtYm94KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZtYm94LVx1MDAzZWxvY2spO1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4gaW50IG90eDJfdHhzY2hxX2NvbmZpZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBsdmwsIGludCBwcmlvLCBib29sIHR4c2NocV9mb3JfcGZjKVxuIHtcbiBcdHUxNiAoKnNjaHFfbGlzdClbTUFYX1RYU0NIUV9QRVJfRlVOQ107XG5AQCAtNjUxLDcgKzc4NywxMSBAQCBpbnQgb3R4Ml90eHNjaHFfY29uZmlnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGx2bCwgaW50IHByaW8sIGJvb2wgdHhzY2hxX2ZvclxuIFx0XHRcdFx0XHRcdCh1NjQpaHctXHUwMDNlc21xX2xpbmtfdHlwZSk7XG4gXHRcdHJlcS1cdTAwM2VudW1fcmVncysrO1xuIFx0XHQvKiBNRFEgY29uZmlnICovXG4tXHRcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bcHJpb107XG4rXHRcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KVxuK1x0XHRcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bMF07XG4rXHRcdGVsc2VcbitcdFx0XHRwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdW3ByaW9dO1xuK1xuIFx0XHRyZXEtXHUwMDNlcmVnWzFdID0gTklYX0FGX01EUVhfUEFSRU5UKHNjaHEpO1xuIFx0XHRyZXEtXHUwMDNlcmVndmFsWzFdID0gcGFyZW50IFx1MDAzY1x1MDAzYyAxNjtcbiBcdFx0cmVxLVx1MDAzZW51bV9yZWdzKys7XG5AQCAtNzc5LDYgKzkxOSw5IEBAIGludCBvdHgyX3R4c2NoX2FsbG9jKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiBcdFx0cmVxLVx1MDAzZXNjaHFbTklYX1RYU0NIX0xWTF9UTDRdID0gY2hhbl9jbnQ7XG4gXHR9XG4gXG4rXHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdClcbitcdFx0cmVxLVx1MDAzZXNjaHFbTklYX1RYU0NIX0xWTF9TTVFdID0gcGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcbitcbiBcdHJjID0gb3R4Ml9zeW5jX21ib3hfbXNnKFx1MDAyNnBmdmYtXHUwMDNlbWJveCk7XG4gXHRpZiAocmMpXG4gXHRcdHJldHVybiByYztcbkBAIC04NDQsNiArOTg3LDcgQEAgdm9pZCBvdHgyX3R4c2NocV9zdG9wKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiBcbiBcdC8qIENsZWFyIHRoZSB0eHNjaHEgbGlzdCAqL1xuIFx0Zm9yIChsdmwgPSAwOyBsdmwgXHUwMDNjIE5JWF9UWFNDSF9MVkxfQ05UOyBsdmwrKykge1xuK1x0XHRwZnZmLVx1MDAzZWh3LnR4c2NocV9jbnRbbHZsXSA9IDA7XG4gXHRcdGZvciAoc2NocSA9IDA7IHNjaHEgXHUwMDNjIE1BWF9UWFNDSFFfUEVSX0ZVTkM7IHNjaHErKylcbiBcdFx0XHRwZnZmLVx1MDAzZWh3LnR4c2NocV9saXN0W2x2bF1bc2NocV0gPSAwO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmhcbmluZGV4IGVlY2VlNjEyYjdiMmMuLjZlNzEzMmYyN2I2MjEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmhcbkBAIC0xNyw2ICsxNyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc29jL21hcnZlbGwvc2lsaWNvbnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NvYy9tYXJ2ZWxsL29jdGVvbnR4Mi9hc20uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9tYWNzZWMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvcGt0X3NjaGVkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvcGt0X2Nscy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2RldmxpbmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3RpbWU2NC5oXHUwMDNlXG5AQCAtNDgzLDYgKzQ4NCwyMyBAQCBzdHJ1Y3QgcGZfaXJxX2RhdGEge1xuIFx0aW50IG1kZXZzO1xuIH07XG4gXG4rc3RydWN0IG1xX29mZmxvYWRfc25hcCB7XG4rXHR1NjQgbWluX3JhdGVbVENfUU9QVF9NQVhfUVVFVUVdO1xuK1x0dTY0IG1heF9yYXRlW1RDX1FPUFRfTUFYX1FVRVVFXTtcbitcdF9fdTggbnVtX3RjO1xuK1x0X191MTYgY291bnRbVENfUU9QVF9NQVhfUVVFVUVdO1xuK1x0X191MTYgb2Zmc2V0W1RDX1FPUFRfTUFYX1FVRVVFXTtcbit9O1xuK1xuK3N0cnVjdCBvdHgyX21xcHJpbyB7XG4rXHR1MzJcdGZsYWdzO1xuK1x0dTY0XHQqbWluX3JhdGU7XG4rXHR1NjRcdCptYXhfcmF0ZTtcbitcdGJvb2xcdHJhdGVfbGltaXQ7XG4rXHRib29sXHRyZXBsYWNlX3NldHVwX2RvbmU7XG4rXHRib29sXHRyZXBsYWNlX2dyYWZ0X2RvbmU7XG4rfTtcbitcbiBzdHJ1Y3Qgb3R4Ml9uaWMge1xuIFx0dm9pZCBfX2lvbWVtXHRcdCpyZWdfYmFzZTtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlXHQqbmV0ZGV2O1xuQEAgLTQ5MSwzMCArNTA5LDM1IEBAIHN0cnVjdCBvdHgyX25pYyB7XG4gXHR1MTZcdFx0XHR0eF9tYXhfcGt0bGVuO1xuIFx0dTE2XHRcdFx0cmJzaXplOyAvKiBSZWNlaXZlIGJ1ZmZlciBzaXplICovXG4gXG4tI2RlZmluZSBPVFgyX0ZMQUdfUlhfVFNUQU1QX0VOQUJMRURcdFx0QklUX1VMTCgwKVxuLSNkZWZpbmUgT1RYMl9GTEFHX1RYX1RTVEFNUF9FTkFCTEVEXHRcdEJJVF9VTEwoMSlcbi0jZGVmaW5lIE9UWDJfRkxBR19JTlRGX0RPV05cdFx0XHRCSVRfVUxMKDIpXG4tI2RlZmluZSBPVFgyX0ZMQUdfTUNBTV9FTlRSSUVTX0FMTE9DXHRcdEJJVF9VTEwoMylcbi0jZGVmaW5lIE9UWDJfRkxBR19OVFVQTEVfU1VQUE9SVFx0XHRCSVRfVUxMKDQpXG4tI2RlZmluZSBPVFgyX0ZMQUdfVUNBU1RfRkxUUl9TVVBQT1JUXHRcdEJJVF9VTEwoNSlcbi0jZGVmaW5lIE9UWDJfRkxBR19SWF9WTEFOX1NVUFBPUlRcdFx0QklUX1VMTCg2KVxuLSNkZWZpbmUgT1RYMl9GTEFHX1ZGX1ZMQU5fU1VQUE9SVFx0XHRCSVRfVUxMKDcpXG4tI2RlZmluZSBPVFgyX0ZMQUdfUEZfU0hVVERPV05cdFx0XHRCSVRfVUxMKDgpXG4tI2RlZmluZSBPVFgyX0ZMQUdfUlhfUEFVU0VfRU5BQkxFRFx0XHRCSVRfVUxMKDkpXG4tI2RlZmluZSBPVFgyX0ZMQUdfVFhfUEFVU0VfRU5BQkxFRFx0XHRCSVRfVUxMKDEwKVxuLSNkZWZpbmUgT1RYMl9GTEFHX1RDX0ZMT1dFUl9TVVBQT1JUXHRcdEJJVF9VTEwoMTEpXG4tI2RlZmluZSBPVFgyX0ZMQUdfVENfTUFUQ0hBTExfRUdSRVNTX0VOQUJMRURcdEJJVF9VTEwoMTIpXG4tI2RlZmluZSBPVFgyX0ZMQUdfVENfTUFUQ0hBTExfSU5HUkVTU19FTkFCTEVEXHRCSVRfVUxMKDEzKVxuLSNkZWZpbmUgT1RYMl9GTEFHX0RNQUNGTFRSX1NVUFBPUlRcdFx0QklUX1VMTCgxNClcbi0jZGVmaW5lIE9UWDJfRkxBR19QVFBfT05FU1RFUF9TWU5DXHRcdEJJVF9VTEwoMTUpXG4tI2RlZmluZSBPVFgyX0ZMQUdfQURQVFZfSU5UX0NPQUxfRU5BQkxFRCBCSVRfVUxMKDE2KVxuLSNkZWZpbmUgT1RYMl9GTEFHX1RDX01BUktfRU5BQkxFRFx0XHRCSVRfVUxMKDE3KVxuLSNkZWZpbmUgT1RYMl9GTEFHX1JFUF9NT0RFX0VOQUJMRURcdFx0IEJJVF9VTEwoMTgpXG4tI2RlZmluZSBPVFgyX0ZMQUdfUE9SVF9VUFx0XHRcdEJJVF9VTEwoMTkpXG4tI2RlZmluZSBPVFgyX0ZMQUdfSVBTRUNfT0ZGTE9BRF9FTkFCTEVEXHRcdEJJVF9VTEwoMjApXG4tXHR1NjRcdFx0XHRmbGFncztcbisjZGVmaW5lIE9UWDJfRkxBR19SWF9UU1RBTVBfRU5BQkxFRFx0XHQwXG4rI2RlZmluZSBPVFgyX0ZMQUdfVFhfVFNUQU1QX0VOQUJMRURcdFx0MVxuKyNkZWZpbmUgT1RYMl9GTEFHX0lOVEZfRE9XTlx0XHRcdDJcbisjZGVmaW5lIE9UWDJfRkxBR19NQ0FNX0VOVFJJRVNfQUxMT0NcdFx0M1xuKyNkZWZpbmUgT1RYMl9GTEFHX05UVVBMRV9TVVBQT1JUXHRcdDRcbisjZGVmaW5lIE9UWDJfRkxBR19VQ0FTVF9GTFRSX1NVUFBPUlRcdFx0NVxuKyNkZWZpbmUgT1RYMl9GTEFHX1JYX1ZMQU5fU1VQUE9SVFx0XHQ2XG4rI2RlZmluZSBPVFgyX0ZMQUdfVkZfVkxBTl9TVVBQT1JUXHRcdDdcbisjZGVmaW5lIE9UWDJfRkxBR19QRl9TSFVURE9XTlx0XHRcdDhcbisjZGVmaW5lIE9UWDJfRkxBR19SWF9QQVVTRV9FTkFCTEVEXHRcdDlcbisjZGVmaW5lIE9UWDJfRkxBR19UWF9QQVVTRV9FTkFCTEVEXHRcdDEwXG4rI2RlZmluZSBPVFgyX0ZMQUdfVENfRkxPV0VSX1NVUFBPUlRcdFx0MTFcbisjZGVmaW5lIE9UWDJfRkxBR19UQ19NQVRDSEFMTF9FR1JFU1NfRU5BQkxFRFx0MTJcbisjZGVmaW5lIE9UWDJfRkxBR19UQ19NQVRDSEFMTF9JTkdSRVNTX0VOQUJMRURcdDEzXG4rI2RlZmluZSBPVFgyX0ZMQUdfRE1BQ0ZMVFJfU1VQUE9SVFx0XHQxNFxuKyNkZWZpbmUgT1RYMl9GTEFHX1BUUF9PTkVTVEVQX1NZTkNcdFx0MTVcbisjZGVmaW5lIE9UWDJfRkxBR19BRFBUVl9JTlRfQ09BTF9FTkFCTEVEXHQxNlxuKyNkZWZpbmUgT1RYMl9GTEFHX1RDX01BUktfRU5BQkxFRFx0XHQxN1xuKyNkZWZpbmUgT1RYMl9GTEFHX1JFUF9NT0RFX0VOQUJMRURcdFx0MThcbisjZGVmaW5lIE9UWDJfRkxBR19QT1JUX1VQXHRcdFx0MTlcbisjZGVmaW5lIE9UWDJfRkxBR19JUFNFQ19PRkZMT0FEX0VOQUJMRURcdFx0MjBcbisjZGVmaW5lIE9UWDJfUkVQX1ZGX0lOSVRJQUxJWkVEXHRcdFx0MjFcbitcdHVuc2lnbmVkIGxvbmdcdFx0ZmxhZ3M7XG4gXHR1NjRcdFx0XHQqY3Ffb3BfYWRkcjtcbiBcbitcdHN0cnVjdCBvdHgyX21xcHJpb1x0bXFwcmlvO1xuK1x0c3RydWN0IG1xX29mZmxvYWRfc25hcFx0KmN1cl9tcV9zbmFwO1xuK1x0c3RydWN0IG1xX29mZmxvYWRfc25hcFx0Km9sZF9tcV9zbmFwO1xuK1xuIFx0c3RydWN0IGJwZl9wcm9nXHRcdCp4ZHBfcHJvZztcbiBcdHN0cnVjdCBvdHgyX3FzZXRcdHFzZXQ7XG4gXHRzdHJ1Y3Qgb3R4Ml9od1x0XHRodztcbkBAIC01OTQsNiArNjE3LDM0IEBAIHN0cnVjdCBvdHgyX25pYyB7XG4gXHR1bnNpZ25lZCBsb25nXHRcdCphZl94ZHBfemNfcWlkeDtcbiB9O1xuIFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBvdHgyX3NldF9mbGFnKHN0cnVjdCBvdHgyX25pYyAqbmljLCB1bnNpZ25lZCBpbnQgZmxhZylcbit7XG4rXHRzZXRfYml0KGZsYWcsIFx1MDAyNm5pYy1cdTAwM2VmbGFncyk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBvdHgyX2NsZWFyX2ZsYWcoc3RydWN0IG90eDJfbmljICpuaWMsIHVuc2lnbmVkIGludCBmbGFnKVxuK3tcbitcdGNsZWFyX2JpdChmbGFnLCBcdTAwMjZuaWMtXHUwMDNlZmxhZ3MpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGJvb2wgb3R4Ml90ZXN0X2ZsYWcoc3RydWN0IG90eDJfbmljICpuaWMsIHVuc2lnbmVkIGludCBmbGFnKVxuK3tcbitcdHJldHVybiB0ZXN0X2JpdChmbGFnLCBcdTAwMjZuaWMtXHUwMDNlZmxhZ3MpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgb3R4Ml9zeW5jX2ZsYWdzX2Zyb21fcmVwKHN0cnVjdCBvdHgyX25pYyAqZHN0LFxuK1x0XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyAqc3JjX2ZsYWdzKVxuK3tcbitcdHVuc2lnbmVkIGludCBmbGFnO1xuK1xuK1x0Zm9yIChmbGFnID0gMDsgZmxhZyBcdTAwM2M9IE9UWDJfUkVQX1ZGX0lOSVRJQUxJWkVEOyBmbGFnKyspIHtcbitcdFx0aWYgKHRlc3RfYml0KGZsYWcsIHNyY19mbGFncykpXG4rXHRcdFx0c2V0X2JpdChmbGFnLCBcdTAwMjZkc3QtXHUwMDNlZmxhZ3MpO1xuK1x0XHRlbHNlXG4rXHRcdFx0Y2xlYXJfYml0KGZsYWcsIFx1MDAyNmRzdC1cdTAwM2VmbGFncyk7XG4rXHR9XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19vdHgyX2xia3ZmKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIHtcbiBcdHJldHVybiAocGRldi1cdTAwM2VkZXZpY2UgPT0gUENJX0RFVklEX09DVEVPTlRYMl9SVlVfQUZWRikgfHxcbkBAIC0xMjQ2LDYgKzEyOTcsMTEgQEAgZG1hX2FkZHJfdCBvdHgyX2RtYV9tYXBfc2tiX2ZyYWcoc3RydWN0IG90eDJfbmljICpwZnZmLFxuIFx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IsIGludCBzZWcsIGludCAqbGVuKTtcbiB2b2lkIG90eDJfZG1hX3VubWFwX3NrYl9mcmFncyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHN0cnVjdCBzZ19saXN0ICpzZyk7XG4gaW50IG90eDJfcmVhZF9mcmVlX3NxZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHUxNiBxaWR4KTtcbitpbnQgb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCB0eHEsXG4rXHRcdFx0XHQgdTY0IG1pbnJhdGUsIHU2NCBtYXhyYXRlKTtcbitpbnQgb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XG4raW50IG90eDJfbXFwcmlvX2Rvd24oc3RydWN0IG90eDJfbmljICpwZnZmKTtcbitpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKTtcbiB2b2lkIG90eDJfcXVldWVfdmZfd29yayhzdHJ1Y3QgbWJveCAqbXcsIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICptYm94X3dxLFxuIFx0XHRcdGludCBmaXJzdCwgaW50IG1kZXZzLCB1NjQgaW50cik7XG4gaW50IG90eDJfZGVsX21jYW1fZmxvd19lbnRyeShzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTE2IGVudHJ5LFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jXG5pbmRleCA5MWQzNDZkMTE0YWY1Li5iN2JkMDgxMjlmYjY0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xuQEAgLTQxMyw2ICs0MTMsMTIgQEAgc3RhdGljIGludCBvdHgyX2RjYm5sX2llZWVfc2V0cGZjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZWVlX3BmYyAqcGZjKVxuIFx0dTggb2xkX3BmY19lbjtcbiBcdGludCBlcnI7XG4gXG4rXHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdCBcdTAwMjZcdTAwMjYgcGZjLVx1MDAzZXBmY19lbikge1xuK1x0XHRuZXRkZXZfZXJyKGRldixcbitcdFx0XHQgICBcIlBGQzogY2Fubm90IGVuYWJsZSB3aGlsZSBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgaXMgYWN0aXZlXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4gXHRvbGRfcGZjX2VuID0gcGZ2Zi1cdTAwM2VwZmNfZW47XG4gXHRwZnZmLVx1MDAzZXBmY19lbiA9IHBmYy1cdTAwM2VwZmNfZW47XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGV2bGluay5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGV2bGluay5jXG5pbmRleCA0YTVjZTBlNjdkZGE4Li44NjNhNWNlZDlhMjZiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGV2bGluay5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kZXZsaW5rLmNcbkBAIC0xMDQsNyArMTA0LDcgQEAgc3RhdGljIGludCBvdHgyX2RsX3VjYXN0X2ZsdF9jbnRfdmFsaWRhdGUoc3RydWN0IGRldmxpbmsgKmRldmxpbmssIHUzMiBpZCxcbiBcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG90eDJfZGwtXHUwMDNlcGZ2ZjtcbiBcbiBcdC8qIENoZWNrIGZvciBVTklDQVNUIGZpbHRlciBzdXBwb3J0Ki9cbi1cdGlmICghKHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19VQ0FTVF9GTFRSX1NVUFBPUlQpKSB7XG4rXHRpZiAoIW90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19VQ0FTVF9GTFRSX1NVUFBPUlQpKSB7XG4gXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4gXHRcdFx0XHQgICBcIlVuaWNhc3QgZmlsdGVyIG5vdCBlbmFibGVkXCIpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmNcbmluZGV4IDliZWUxYjkxZWVhYTYuLmU2M2VhZDNiMTExM2UgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuY1xuQEAgLTI4Nyw2ICsyODcsMTQgQEAgc3RhdGljIGludCBvdHgyX3NldF9jaGFubmVscyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbitcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0IFx1MDAyNlx1MDAyNlxuK1x0ICAgIChjaGFubmVsLVx1MDAzZXR4X2NvdW50ICE9IHBmdmYtXHUwMDNlaHcudHhfcXVldWVzIHx8XG4rXHQgICAgIGNoYW5uZWwtXHUwMDNlcnhfY291bnQgIT0gcGZ2Zi1cdTAwM2Vody5yeF9xdWV1ZXMpKSB7XG4rXHRcdG5ldGRldl9pbmZvKGRldixcbitcdFx0XHQgICAgXCJOb3QgcGVybWl0dGVkIHRvIGNoYW5nZSBjaGFubmVsIGNvdW50IHdoaWxlIE1RIHByaW8gaXMgYWN0aXZlXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbiBcdGlmIChpZl91cClcbiBcdFx0ZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX3N0b3AoZGV2KTtcbiBcbkBAIC0zNTQsMTQgKzM2MiwxNCBAQCBzdGF0aWMgaW50IG90eDJfc2V0X3BhdXNlcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuIFx0aWYgKHBhdXNlLVx1MDAzZXJ4X3BhdXNlKVxuLVx0XHRwZnZmLVx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19SWF9QQVVTRV9FTkFCTEVEO1xuK1x0XHRvdHgyX3NldF9mbGFnKHBmdmYsIE9UWDJfRkxBR19SWF9QQVVTRV9FTkFCTEVEKTtcbiBcdGVsc2Vcbi1cdFx0cGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjY9IH5PVFgyX0ZMQUdfUlhfUEFVU0VfRU5BQkxFRDtcbitcdFx0b3R4Ml9jbGVhcl9mbGFnKHBmdmYsIE9UWDJfRkxBR19SWF9QQVVTRV9FTkFCTEVEKTtcbiBcbiBcdGlmIChwYXVzZS1cdTAwM2V0eF9wYXVzZSlcbi1cdFx0cGZ2Zi1cdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfVFhfUEFVU0VfRU5BQkxFRDtcbitcdFx0b3R4Ml9zZXRfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfVFhfUEFVU0VfRU5BQkxFRCk7XG4gXHRlbHNlXG4tXHRcdHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+T1RYMl9GTEFHX1RYX1BBVVNFX0VOQUJMRUQ7XG4rXHRcdG90eDJfY2xlYXJfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfVFhfUEFVU0VfRU5BQkxFRCk7XG4gXG4gXHRyZXR1cm4gb3R4Ml9jb25maWdfcGF1c2VfZnJtKHBmdmYpO1xuIH1cbkBAIC00NzAsOCArNDc4LDcgQEAgc3RhdGljIGludCBvdHgyX2dldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0Y21kLVx1MDAzZXJ4X21heF9jb2FsZXNjZWRfZnJhbWVzID0gaHctXHUwMDNlY3FfZWNvdW50X3dhaXQ7XG4gXHRjbWQtXHUwMDNldHhfY29hbGVzY2VfdXNlY3MgPSBody1cdTAwM2VjcV90aW1lX3dhaXQ7XG4gXHRjbWQtXHUwMDNldHhfbWF4X2NvYWxlc2NlZF9mcmFtZXMgPSBody1cdTAwM2VjcV9lY291bnRfd2FpdDtcbi1cdGlmICgocGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX0FEUFRWX0lOVF9DT0FMX0VOQUJMRUQpID09XG4tXHRcdFx0T1RYMl9GTEFHX0FEUFRWX0lOVF9DT0FMX0VOQUJMRUQpIHtcbitcdGlmIChvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfQURQVFZfSU5UX0NPQUxfRU5BQkxFRCkpIHtcbiBcdFx0Y21kLVx1MDAzZXVzZV9hZGFwdGl2ZV9yeF9jb2FsZXNjZSA9IDE7XG4gXHRcdGNtZC1cdTAwM2V1c2VfYWRhcHRpdmVfdHhfY29hbGVzY2UgPSAxO1xuIFx0fSBlbHNlIHtcbkBAIC01MDIsMTUgKzUwOSwxNCBAQCBzdGF0aWMgaW50IG90eDJfc2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHR9XG4gXG4gXHQvKiBDaGVjayBhbmQgdXBkYXRlIGNvYWxlc2NlIHN0YXR1cyAqL1xuLVx0aWYgKChwZnZmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfQURQVFZfSU5UX0NPQUxfRU5BQkxFRCkgPT1cbi1cdFx0XHRPVFgyX0ZMQUdfQURQVFZfSU5UX0NPQUxfRU5BQkxFRCkge1xuK1x0aWYgKG90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19BRFBUVl9JTlRfQ09BTF9FTkFCTEVEKSkge1xuIFx0XHRwcml2X2NvYWxlc2NlX3N0YXR1cyA9IDE7XG4gXHRcdGlmICghZWMtXHUwMDNldXNlX2FkYXB0aXZlX3J4X2NvYWxlc2NlKVxuLVx0XHRcdHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+T1RYMl9GTEFHX0FEUFRWX0lOVF9DT0FMX0VOQUJMRUQ7XG4rXHRcdFx0b3R4Ml9jbGVhcl9mbGFnKHBmdmYsIE9UWDJfRkxBR19BRFBUVl9JTlRfQ09BTF9FTkFCTEVEKTtcbiBcdH0gZWxzZSB7XG4gXHRcdHByaXZfY29hbGVzY2Vfc3RhdHVzID0gMDtcbiBcdFx0aWYgKGVjLVx1MDAzZXVzZV9hZGFwdGl2ZV9yeF9jb2FsZXNjZSlcbi1cdFx0XHRwZnZmLVx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19BRFBUVl9JTlRfQ09BTF9FTkFCTEVEO1xuK1x0XHRcdG90eDJfc2V0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX0FEUFRWX0lOVF9DT0FMX0VOQUJMRUQpO1xuIFx0fVxuIFxuIFx0LyogJ2NxX3RpbWVfd2FpdCcgaXMgOGJpdCBhbmQgaXMgaW4gbXVsdGlwbGUgb2YgMTAwbnMsXG5AQCAtNTU2LDggKzU2Miw3IEBAIHN0YXRpYyBpbnQgb3R4Ml9zZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdCAqICdvbicgdG8gJ29mZicuXG4gXHQgKi9cbiBcdGlmIChwcml2X2NvYWxlc2NlX3N0YXR1cyBcdTAwMjZcdTAwMjZcbi1cdCAgICAoKHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19BRFBUVl9JTlRfQ09BTF9FTkFCTEVEKSAhPVxuLVx0ICAgICBPVFgyX0ZMQUdfQURQVFZfSU5UX0NPQUxfRU5BQkxFRCkpIHtcbitcdCAgICAoIW90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19BRFBUVl9JTlRfQ09BTF9FTkFCTEVEKSkpIHtcbiBcdFx0aHctXHUwMDNlY3FfdGltZV93YWl0ID0gQ1FfVElNRVJfVEhSRVNIX0RFRkFVTFQ7XG4gXHRcdGh3LVx1MDAzZWNxX2Vjb3VudF93YWl0ID0gQ1FfQ1FFX1RIUkVTSF9ERUZBVUxUO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2Zsb3dzLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9mbG93cy5jXG5pbmRleCA5OWQ3OGZjNWEyYzRhLi5iOGZmNDlmMGY2ZTNiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZmxvd3MuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZmxvd3MuY1xuQEAgLTI3MCw5ICsyNzAsOSBAQCBpbnQgb3R4Ml9hbGxvY19tY2FtX2VudHJpZXMoc3RydWN0IG90eDJfbmljICpwZnZmLCB1MTYgY291bnQpXG4gXHRmbG93X2NmZy1cdTAwM2VtYXhfZmxvd3MgPSBhbGxvY2F0ZWQ7XG4gXG4gXHRpZiAoYWxsb2NhdGVkKSB7XG4tXHRcdHBmdmYtXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX01DQU1fRU5UUklFU19BTExPQztcbi1cdFx0cGZ2Zi1cdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfTlRVUExFX1NVUFBPUlQ7XG4tXHRcdHBmdmYtXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX1RDX0ZMT1dFUl9TVVBQT1JUO1xuK1x0XHRvdHgyX3NldF9mbGFnKHBmdmYsIE9UWDJfRkxBR19NQ0FNX0VOVFJJRVNfQUxMT0MpO1xuK1x0XHRvdHgyX3NldF9mbGFnKHBmdmYsIE9UWDJfRkxBR19OVFVQTEVfU1VQUE9SVCk7XG4rXHRcdG90eDJfc2V0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1RDX0ZMT1dFUl9TVVBQT1JUKTtcbiBcdH1cbiBcbiBcdGlmIChhbGxvY2F0ZWQgIT0gY291bnQpXG5AQCAtMzc2LDcgKzM3Niw3IEBAIGludCBvdHgyX21jYW1fZW50cnlfaW5pdChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4gXHRmbG93X2NmZy1cdTAwM2V1bmljYXN0X29mZnNldCA9IHZmX3ZsYW5fbWF4X2Zsb3dzO1xuIFx0Zmxvd19jZmctXHUwMDNlcnhfdmxhbl9vZmZzZXQgPSBmbG93X2NmZy1cdTAwM2V1bmljYXN0X29mZnNldCArXG4gXHRcdFx0XHRcdGZsb3dfY2ZnLVx1MDAzZXVjYXN0X2ZsdF9jbnQ7XG4tXHRwZnZmLVx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19VQ0FTVF9GTFRSX1NVUFBPUlQ7XG4rXHRvdHgyX3NldF9mbGFnKHBmdmYsIE9UWDJfRkxBR19VQ0FTVF9GTFRSX1NVUFBPUlQpO1xuIFxuIFx0LyogQ2hlY2sgaWYgTlBDX0RNQUMgZmllbGQgaXMgc3VwcG9ydGVkXG4gXHQgKiBieSB0aGUgbWtleCBwcm9maWxlIGJlZm9yZSBzZXR0aW5nIFZMQU4gc3VwcG9ydCBmbGFnLlxuQEAgLTQwMSwxMSArNDAxLDExIEBAIGludCBvdHgyX21jYW1fZW50cnlfaW5pdChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4gXHR9XG4gXG4gXHRpZiAoZnJzcC1cdTAwM2VlbmFibGUpIHtcbi1cdFx0cGZ2Zi1cdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfUlhfVkxBTl9TVVBQT1JUO1xuLVx0XHRwZnZmLVx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19WRl9WTEFOX1NVUFBPUlQ7XG4rXHRcdG90eDJfc2V0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1JYX1ZMQU5fU1VQUE9SVCk7XG4rXHRcdG90eDJfc2V0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1ZGX1ZMQU5fU1VQUE9SVCk7XG4gXHR9XG4gXG4tXHRwZnZmLVx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19NQ0FNX0VOVFJJRVNfQUxMT0M7XG4rXHRvdHgyX3NldF9mbGFnKHBmdmYsIE9UWDJfRkxBR19NQ0FNX0VOVFJJRVNfQUxMT0MpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBmdmYtXHUwMDNlbWJveC5sb2NrKTtcbiBcbiBcdC8qIEFsbG9jYXRlIGVudHJpZXMgZm9yIE50dXBsZSBmaWx0ZXJzICovXG5AQCAtNDE1LDcgKzQxNSw3IEBAIGludCBvdHgyX21jYW1fZW50cnlfaW5pdChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuLVx0cGZ2Zi1cdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfVENfRkxPV0VSX1NVUFBPUlQ7XG4rXHRvdHgyX3NldF9mbGFnKHBmdmYsIE9UWDJfRkxBR19UQ19GTE9XRVJfU1VQUE9SVCk7XG4gXG4gXHRyZWZjb3VudF9zZXQoXHUwMDI2Zmxvd19jZmctXHUwMDNlbWFya19mbG93cywgMSk7XG4gXHRyZXR1cm4gMDtcbkBAIC00NzksNyArNDc5LDcgQEAgaW50IG90eDJfbWNhbV9mbG93X2luaXQoc3RydWN0IG90eDJfbmljICpwZilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbiBcdC8qIENoZWNrIGlmIE1DQU0gZW50cmllcyBhcmUgYWxsb2NhdGUgb3Igbm90ICovXG4tXHRpZiAoIShwZi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1VDQVNUX0ZMVFJfU1VQUE9SVCkpXG4rXHRpZiAoIW90eDJfdGVzdF9mbGFnKHBmLCBPVFgyX0ZMQUdfVUNBU1RfRkxUUl9TVVBQT1JUKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRwZi1cdTAwM2VtYWNfdGFibGUgPSBkZXZtX2t6YWxsb2MocGYtXHUwMDNlZGV2LCBzaXplb2Yoc3RydWN0IG90eDJfbWFjX3RhYmxlKVxuQEAgLTUwMSw3ICs1MDEsNyBAQCBpbnQgb3R4Ml9tY2FtX2Zsb3dfaW5pdChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmKVxuIFx0aWYgKCFwZi1cdTAwM2VmbG93X2NmZy1cdTAwM2VibWFwX3RvX2RtYWNpbmRleClcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4tXHRwZi1cdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfRE1BQ0ZMVFJfU1VQUE9SVDtcbitcdG90eDJfc2V0X2ZsYWcocGYsIE9UWDJfRkxBR19ETUFDRkxUUl9TVVBQT1JUKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC01MjEsNyArNTIxLDcgQEAgc3RhdGljIGludCBvdHgyX2RvX2FkZF9tYWNmaWx0ZXIoc3RydWN0IG90eDJfbmljICpwZiwgY29uc3QgdTggKm1hYylcbiBcdHN0cnVjdCBucGNfaW5zdGFsbF9mbG93X3JlcSAqcmVxO1xuIFx0aW50IGVyciwgaTtcbiBcbi1cdGlmICghKHBmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfVUNBU1RfRkxUUl9TVVBQT1JUKSlcbitcdGlmICghb3R4Ml90ZXN0X2ZsYWcocGYsIE9UWDJfRkxBR19VQ0FTVF9GTFRSX1NVUFBPUlQpKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiBcdC8qIGRvbnQgaGF2ZSBmcmVlIG1jYW0gZW50cmllcyBvciB1YyBsaXN0IGlzIGdyZWF0ZXIgdGhhbiBhbGxvdGVkICovXG5AQCAtMTE2Nyw3ICsxMTY3LDcgQEAgc3RhdGljIGludCBvdHgyX2lzX2Zsb3dfcnVsZV9kbWFjZmlsdGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbiBcdHU2NCByaW5nX2Nvb2tpZSA9IGZzcC1cdTAwM2VyaW5nX2Nvb2tpZTtcbiBcdHUzMiBmbG93X3R5cGU7XG4gXG4tXHRpZiAoIShwZnZmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfRE1BQ0ZMVFJfU1VQUE9SVCkpXG4rXHRpZiAoIW90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19ETUFDRkxUUl9TVVBQT1JUKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0Zmxvd190eXBlID0gZnNwLVx1MDAzZWZsb3dfdHlwZSBcdTAwMjYgfihGTE9XX0VYVCB8IEZMT1dfTUFDX0VYVCB8IEZMT1dfUlNTKTtcbkBAIC0xMzY0LDcgKzEzNjQsNyBAQCBpbnQgb3R4Ml9hZGRfZmxvdyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHN0cnVjdCBldGh0b29sX3J4bmZjICpuZmMpXG4gXHR9XG4gXG4gXHRyaW5nID0gZXRodG9vbF9nZXRfZmxvd19zcGVjX3JpbmcoZnNwLVx1MDAzZXJpbmdfY29va2llKTtcbi1cdGlmICghKHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19OVFVQTEVfU1VQUE9SVCkpXG4rXHRpZiAoIW90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19OVFVQTEVfU1VQUE9SVCkpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIFx0LyogTnVtYmVyIG9mIHF1ZXVlcyBvbiBhIFZGIGNhbiBiZSBncmVhdGVyIG9yIGxlc3MgdGhhblxuQEAgLTE1OTYsNyArMTU5Niw3IEBAIGludCBvdHgyX2Rlc3Ryb3lfbnR1cGxlX2Zsb3dzKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiBcdHN0cnVjdCBvdHgyX2Zsb3cgKml0ZXIsICp0bXA7XG4gXHRpbnQgZXJyO1xuIFxuLVx0aWYgKCEocGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX05UVVBMRV9TVVBQT1JUKSlcbitcdGlmICghb3R4Ml90ZXN0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX05UVVBMRV9TVVBQT1JUKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRpZiAoIWZsb3dfY2ZnLVx1MDAzZW1heF9mbG93cylcbkBAIC0xNjI5LDcgKzE2MjksNyBAQCBpbnQgb3R4Ml9kZXN0cm95X21jYW1fZmxvd3Moc3RydWN0IG90eDJfbmljICpwZnZmKVxuIFx0c3RydWN0IG90eDJfZmxvdyAqaXRlciwgKnRtcDtcbiBcdGludCBlcnI7XG4gXG4tXHRpZiAoIShwZnZmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfTUNBTV9FTlRSSUVTX0FMTE9DKSlcbitcdGlmICghb3R4Ml90ZXN0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX01DQU1fRU5UUklFU19BTExPQykpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0LyogcmVtb3ZlIGFsbCBmbG93cyAqL1xuQEAgLTE2NTgsNyArMTY1OCw3IEBAIGludCBvdHgyX2Rlc3Ryb3lfbWNhbV9mbG93cyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4gXHRcdHJldHVybiBlcnI7XG4gXHR9XG4gXG4tXHRwZnZmLVx1MDAzZWZsYWdzIFx1MDAyNj0gfk9UWDJfRkxBR19NQ0FNX0VOVFJJRVNfQUxMT0M7XG4rXHRvdHgyX2NsZWFyX2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX01DQU1fRU5UUklFU19BTExPQyk7XG4gXHRmbG93X2NmZy1cdTAwM2VtYXhfZmxvd3MgPSAwO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBmdmYtXHUwMDNlbWJveC5sb2NrKTtcbiBcbkBAIC0xNzIxLDcgKzE3MjEsNyBAQCBpbnQgb3R4Ml9lbmFibGVfcnh2bGFuKHN0cnVjdCBvdHgyX25pYyAqcGYsIGJvb2wgZW5hYmxlKVxuIFx0aW50IGVycjtcbiBcbiBcdC8qIERvbnQgaGF2ZSBlbm91Z2ggbWNhbSBlbnRyaWVzICovXG4tXHRpZiAoIShwZi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1JYX1ZMQU5fU1VQUE9SVCkpXG4rXHRpZiAoIW90eDJfdGVzdF9mbGFnKHBmLCBPVFgyX0ZMQUdfUlhfVkxBTl9TVVBQT1JUKSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4gXHRpZiAoZW5hYmxlKSB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNcbmluZGV4IGMwZTIxMDBkZTFkOTMuLjFlMTdmOGQ0OWZkNDQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXG5AQCAtODc5LDcgKzg3OSw3IEBAIHN0YXRpYyB2b2lkIG90eDJfaGFuZGxlX2xpbmtfZXZlbnQoc3RydWN0IG90eDJfbmljICpwZilcbiBcdHN0cnVjdCBjZ3hfbGlua191c2VyX2luZm8gKmxpbmZvID0gXHUwMDI2cGYtXHUwMDNlbGluZm87XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGYtXHUwMDNlbmV0ZGV2O1xuIFxuLVx0aWYgKHBmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfUE9SVF9VUClcbitcdGlmIChvdHgyX3Rlc3RfZmxhZyhwZiwgT1RYMl9GTEFHX1BPUlRfVVApKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRwcl9pbmZvKFwiJXMgTklDIExpbmsgaXMgJXMgJWQgTWJwcyAlcyBkdXBsZXhcXG5cIiwgbmV0ZGV2LVx1MDAzZW5hbWUsXG5AQCAtOTA3LDExICs5MDcsMTEgQEAgc3RhdGljIGludCBvdHgyX21ib3hfdXBfaGFuZGxlcl9yZXBfZXZlbnRfdXBfbm90aWZ5KHN0cnVjdCBvdHgyX25pYyAqcGYsXG4gXG4gXHRpZiAoaW5mby1cdTAwM2VldmVudCA9PSBSVlVfRVZFTlRfUE9SVF9TVEFURSkge1xuIFx0XHRpZiAoaW5mby1cdTAwM2VldnRfZGF0YS5wb3J0X3N0YXRlKSB7XG4tXHRcdFx0cGYtXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX1BPUlRfVVA7XG4rXHRcdFx0b3R4Ml9zZXRfZmxhZyhwZiwgT1RYMl9GTEFHX1BPUlRfVVApO1xuIFx0XHRcdG5ldGlmX2NhcnJpZXJfb24obmV0ZGV2KTtcbiBcdFx0XHRuZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKG5ldGRldik7XG4gXHRcdH0gZWxzZSB7XG4tXHRcdFx0cGYtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+T1RYMl9GTEFHX1BPUlRfVVA7XG4rXHRcdFx0b3R4Ml9jbGVhcl9mbGFnKHBmLCBPVFgyX0ZMQUdfUE9SVF9VUCk7XG4gXHRcdFx0bmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5ldGRldik7XG4gXHRcdFx0bmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTtcbiBcdFx0fVxuQEAgLTk1Myw3ICs5NTMsNyBAQCBpbnQgb3R4Ml9tYm94X3VwX2hhbmRsZXJfY2d4X2xpbmtfZXZlbnQoc3RydWN0IG90eDJfbmljICpwZixcbiBcdH1cbiBcbiBcdC8qIGludGVyZmFjZSBoYXMgbm90IGJlZW4gZnVsbHkgY29uZmlndXJlZCB5ZXQgKi9cbi1cdGlmIChwZi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX0lOVEZfRE9XTilcbitcdGlmIChvdHgyX3Rlc3RfZmxhZyhwZiwgT1RYMl9GTEFHX0lOVEZfRE9XTikpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0b3R4Ml9oYW5kbGVfbGlua19ldmVudChwZik7XG5AQCAtMTgyOCw3ICsxODI4LDcgQEAgdm9pZCBvdHgyX2ZyZWVfaHdfcmVzb3VyY2VzKHN0cnVjdCBvdHgyX25pYyAqcGYpXG4gXHRmcmVlX3JlcSA9IG90eDJfbWJveF9hbGxvY19tc2dfbml4X2xmX2ZyZWUobWJveCk7XG4gXHRpZiAoZnJlZV9yZXEpIHtcbiBcdFx0ZnJlZV9yZXEtXHUwMDNlZmxhZ3MgPSBOSVhfTEZfRElTQUJMRV9GTE9XUyB8IE5JWF9MRl9ET05UX0ZSRUVfREZUX0lEWFM7XG4tXHRcdGlmICghKHBmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfUEZfU0hVVERPV04pKVxuK1x0XHRpZiAoIW90eDJfdGVzdF9mbGFnKHBmLCBPVFgyX0ZMQUdfUEZfU0hVVERPV04pKVxuIFx0XHRcdGZyZWVfcmVxLVx1MDAzZWZsYWdzIHw9IE5JWF9MRl9ET05UX0ZSRUVfVFhfVlRBRztcbiBcdFx0aWYgKG90eDJfc3luY19tYm94X21zZyhtYm94KSlcbiBcdFx0XHRkZXZfZXJyKHBmLVx1MDAzZWRldiwgXCIlcyBmYWlsZWQgdG8gZnJlZSBuaXhsZlxcblwiLCBfX2Z1bmNfXyk7XG5AQCAtMjAwNyw2ICsyMDA3LDE0IEBAIGludCBvdHgyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXJyX2ZyZWVfbWVtO1xuIFxuK1x0ZXJyID0gb3R4Ml9tcXByaW9fdXAocGYpO1xuK1x0aWYgKGVycikge1xuK1x0XHRuZXRkZXZfZXJyKHBmLVx1MDAzZW5ldGRldixcbitcdFx0XHQgICBcIm1xcHJpbzogZmFpbGVkIHRvIHJlc3RvcmUgc2hhcGVycyBkdXJpbmcgb3BlbjogJWRcXG5cIixcbitcdFx0XHQgICBlcnIpO1xuK1x0XHRnb3RvIGVycl9mcmVlX2h3O1xuK1x0fVxuK1xuIFx0LyogUmVnaXN0ZXIgTkFQSSBoYW5kbGVyICovXG4gXHRmb3IgKHFpZHggPSAwOyBxaWR4IFx1MDAzYyBwZi1cdTAwM2Vody5jaW50X2NudDsgcWlkeCsrKSB7XG4gXHRcdGNxX3BvbGwgPSBcdTAwMjZxc2V0LVx1MDAzZW5hcGlbcWlkeF07XG5AQCAtMjEzNSwyMSArMjE0MywyMSBAQCBpbnQgb3R4Ml9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHR9XG4gXHRvdHgyX3dyaXRlNjQocGYsIE5JWF9MRl9SQVNfRU5BX1cxUywgTklYX0xGX1JBU19NQVNLKTtcbiBcbi1cdGlmIChwZi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1JYX1ZMQU5fU1VQUE9SVClcbitcdGlmIChvdHgyX3Rlc3RfZmxhZyhwZiwgT1RYMl9GTEFHX1JYX1ZMQU5fU1VQUE9SVCkpXG4gXHRcdG90eDJfZW5hYmxlX3J4dmxhbihwZiwgdHJ1ZSk7XG4gXG4gXHQvKiBXaGVuIHJlaW5pdGlhbGl6aW5nIGVuYWJsZSB0aW1lIHN0YW1waW5nIGlmIGl0IGlzIGVuYWJsZWQgYmVmb3JlICovXG4tXHRpZiAocGYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19UWF9UU1RBTVBfRU5BQkxFRCkge1xuLVx0XHRwZi1cdTAwM2VmbGFncyBcdTAwMjY9IH5PVFgyX0ZMQUdfVFhfVFNUQU1QX0VOQUJMRUQ7XG4rXHRpZiAob3R4Ml90ZXN0X2ZsYWcocGYsIE9UWDJfRkxBR19UWF9UU1RBTVBfRU5BQkxFRCkpIHtcbitcdFx0b3R4Ml9jbGVhcl9mbGFnKHBmLCBPVFgyX0ZMQUdfVFhfVFNUQU1QX0VOQUJMRUQpO1xuIFx0XHRvdHgyX2NvbmZpZ19od190eF90c3RhbXAocGYsIHRydWUpO1xuIFx0fVxuLVx0aWYgKHBmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfUlhfVFNUQU1QX0VOQUJMRUQpIHtcbi1cdFx0cGYtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+T1RYMl9GTEFHX1JYX1RTVEFNUF9FTkFCTEVEO1xuK1x0aWYgKG90eDJfdGVzdF9mbGFnKHBmLCBPVFgyX0ZMQUdfUlhfVFNUQU1QX0VOQUJMRUQpKSB7XG4rXHRcdG90eDJfY2xlYXJfZmxhZyhwZiwgT1RYMl9GTEFHX1JYX1RTVEFNUF9FTkFCTEVEKTtcbiBcdFx0b3R4Ml9jb25maWdfaHdfcnhfdHN0YW1wKHBmLCB0cnVlKTtcbiBcdH1cbiBcbi1cdHBmLVx1MDAzZWZsYWdzIFx1MDAyNj0gfk9UWDJfRkxBR19JTlRGX0RPV047XG4tXHRwZi1cdTAwM2VmbGFncyBcdTAwMjY9IH5PVFgyX0ZMQUdfUE9SVF9VUDtcbitcdG90eDJfY2xlYXJfZmxhZyhwZiwgT1RYMl9GTEFHX0lOVEZfRE9XTik7XG4rXHRvdHgyX2NsZWFyX2ZsYWcocGYsIE9UWDJfRkxBR19QT1JUX1VQKTtcbiBcdC8qICdpbnRmX2Rvd24nIG1heSBiZSBjaGVja2VkIG9uIGFueSBjcHUgKi9cbiBcdHNtcF93bWIoKTtcbiBcbkBAIC0yMTYxLDcgKzIxNjksNyBAQCBpbnQgb3R4Ml9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRcdG90eDJfaGFuZGxlX2xpbmtfZXZlbnQocGYpO1xuIFxuIFx0LyogSW5zdGFsbCBETUFDIEZpbHRlcnMgKi9cbi1cdGlmIChwZi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX0RNQUNGTFRSX1NVUFBPUlQpXG4rXHRpZiAob3R4Ml90ZXN0X2ZsYWcocGYsIE9UWDJfRkxBR19ETUFDRkxUUl9TVVBQT1JUKSlcbiBcdFx0b3R4Ml9kbWFjZmx0X3JlaW5zdGFsbF9mbG93cyhwZik7XG4gXG4gXHRvdHgyX3RjX2FwcGx5X2luZ3Jlc3NfcG9saWNlX3J1bGVzKHBmKTtcbkBAIC0yMTg2LDcgKzIxOTQsNyBAQCBpbnQgb3R4Ml9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gZXJyX3R4X3N0b3BfcXVldWVzOlxuIFx0bmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5ldGRldik7XG4gXHRuZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpO1xuLVx0cGYtXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX0lOVEZfRE9XTjtcbitcdG90eDJfc2V0X2ZsYWcocGYsIE9UWDJfRkxBR19JTlRGX0RPV04pO1xuIFx0LyogZnJlZSBOSVhMRiBQT0lTT04gaXJxICovXG4gXHR2ZWMgPSBwY2lfaXJxX3ZlY3RvcihwZi1cdTAwM2VwZGV2LFxuIFx0XHRcdCAgICAgcGYtXHUwMDNlaHcubml4X21zaXhvZmYgKyBOSVhfTEZfUE9JU09OX1ZFQyk7XG5AQCAtMjIwNSw2ICsyMjEzLDcgQEAgaW50IG90eDJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0ZnJlZV9pcnEodmVjLCBwZik7XG4gZXJyX2Rpc2FibGVfbmFwaTpcbiBcdG90eDJfZGlzYWJsZV9uYXBpKHBmKTtcbitlcnJfZnJlZV9odzpcbiBcdG90eDJfZnJlZV9od19yZXNvdXJjZXMocGYpO1xuIGVycl9mcmVlX21lbTpcbiBcdG90eDJfZnJlZV9xdWV1ZV9tZW0ocXNldCk7XG5AQCAtMjIyMCwxMyArMjIyOSwxMyBAQCBpbnQgb3R4Ml9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRpbnQgcWlkeCwgdmVjLCB3cms7XG4gXG4gXHQvKiBJZiB0aGUgRE9XTiBmbGFnIGlzIHNldCByZXNvdXJjZXMgYXJlIGFscmVhZHkgZnJlZWQgKi9cbi1cdGlmIChwZi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX0lOVEZfRE9XTilcbitcdGlmIChvdHgyX3Rlc3RfZmxhZyhwZiwgT1RYMl9GTEFHX0lOVEZfRE9XTikpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0bmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTtcbiBcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpO1xuIFxuLVx0cGYtXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX0lOVEZfRE9XTjtcbitcdG90eDJfc2V0X2ZsYWcocGYsIE9UWDJfRkxBR19JTlRGX0RPV04pO1xuIFx0LyogJ2ludGZfZG93bicgbWF5IGJlIGNoZWNrZWQgb24gYW55IGNwdSAqL1xuIFx0c21wX3dtYigpO1xuIFxuQEAgLTIyODAsNiArMjI4OSw3IEBAIGludCBvdHgyX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdGZvciAocWlkeCA9IDA7IHFpZHggXHUwMDNjIG5ldGRldi1cdTAwM2VudW1fdHhfcXVldWVzOyBxaWR4KyspXG4gXHRcdG5ldGRldl90eF9yZXNldF9xdWV1ZShuZXRkZXZfZ2V0X3R4X3F1ZXVlKG5ldGRldiwgcWlkeCkpO1xuIFxuK1x0c3luY2hyb25pemVfbmV0KCk7XG4gXHRvdHgyX2ZyZWVfcXVldWVfbWVtKHFzZXQpO1xuIFx0LyogRG8gbm90IGNsZWFyIFJRL1NRIHJpbmdzaXplIHNldHRpbmdzICovXG4gXHRtZW1zZXRfc3RhcnRhdChxc2V0LCAwLCBzcWVfY250KTtcbkBAIC0yNDU3LDcgKzI0NjcsNyBAQCBzdGF0aWMgaW50IG90eDJfY29uZmlnX2h3X3J4X3RzdGFtcChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGJvb2wgZW5hYmxlKVxuIFx0c3RydWN0IG1zZ19yZXEgKnJlcTtcbiBcdGludCBlcnI7XG4gXG4tXHRpZiAocGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1JYX1RTVEFNUF9FTkFCTEVEIFx1MDAyNlx1MDAyNiBlbmFibGUpXG4rXHRpZiAob3R4Ml90ZXN0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1JYX1RTVEFNUF9FTkFCTEVEKSBcdTAwMjZcdTAwMjYgZW5hYmxlKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdG11dGV4X2xvY2soXHUwMDI2cGZ2Zi1cdTAwM2VtYm94LmxvY2spO1xuQEAgLTI0NzgsOSArMjQ4OCw5IEBAIHN0YXRpYyBpbnQgb3R4Ml9jb25maWdfaHdfcnhfdHN0YW1wKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgYm9vbCBlbmFibGUpXG4gXG4gXHRtdXRleF91bmxvY2soXHUwMDI2cGZ2Zi1cdTAwM2VtYm94LmxvY2spO1xuIFx0aWYgKGVuYWJsZSlcbi1cdFx0cGZ2Zi1cdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfUlhfVFNUQU1QX0VOQUJMRUQ7XG4rXHRcdG90eDJfc2V0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1JYX1RTVEFNUF9FTkFCTEVEKTtcbiBcdGVsc2Vcbi1cdFx0cGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjY9IH5PVFgyX0ZMQUdfUlhfVFNUQU1QX0VOQUJMRUQ7XG4rXHRcdG90eDJfY2xlYXJfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfUlhfVFNUQU1QX0VOQUJMRUQpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTI0ODksNyArMjQ5OSw3IEBAIHN0YXRpYyBpbnQgb3R4Ml9jb25maWdfaHdfdHhfdHN0YW1wKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgYm9vbCBlbmFibGUpXG4gXHRzdHJ1Y3QgbXNnX3JlcSAqcmVxO1xuIFx0aW50IGVycjtcbiBcbi1cdGlmIChwZnZmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfVFhfVFNUQU1QX0VOQUJMRUQgXHUwMDI2XHUwMDI2IGVuYWJsZSlcbitcdGlmIChvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfVFhfVFNUQU1QX0VOQUJMRUQpIFx1MDAyNlx1MDAyNiBlbmFibGUpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZwZnZmLVx1MDAzZW1ib3gubG9jayk7XG5AQCAtMjUxMCw5ICsyNTIwLDkgQEAgc3RhdGljIGludCBvdHgyX2NvbmZpZ19od190eF90c3RhbXAoc3RydWN0IG90eDJfbmljICpwZnZmLCBib29sIGVuYWJsZSlcbiBcbiBcdG11dGV4X3VubG9jayhcdTAwMjZwZnZmLVx1MDAzZW1ib3gubG9jayk7XG4gXHRpZiAoZW5hYmxlKVxuLVx0XHRwZnZmLVx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19UWF9UU1RBTVBfRU5BQkxFRDtcbitcdFx0b3R4Ml9zZXRfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfVFhfVFNUQU1QX0VOQUJMRUQpO1xuIFx0ZWxzZVxuLVx0XHRwZnZmLVx1MDAzZWZsYWdzIFx1MDAyNj0gfk9UWDJfRkxBR19UWF9UU1RBTVBfRU5BQkxFRDtcbitcdFx0b3R4Ml9jbGVhcl9mbGFnKHBmdmYsIE9UWDJfRkxBR19UWF9UU1RBTVBfRU5BQkxFRCk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMjUzNyw4ICsyNTQ3LDggQEAgaW50IG90eDJfY29uZmlnX2h3dHN0YW1wX3NldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFxuIFx0c3dpdGNoIChjb25maWctXHUwMDNldHhfdHlwZSkge1xuIFx0Y2FzZSBIV1RTVEFNUF9UWF9PRkY6XG4tXHRcdGlmIChwZnZmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfUFRQX09ORVNURVBfU1lOQylcbi1cdFx0XHRwZnZmLVx1MDAzZWZsYWdzIFx1MDAyNj0gfk9UWDJfRkxBR19QVFBfT05FU1RFUF9TWU5DO1xuK1x0XHRpZiAob3R4Ml90ZXN0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1BUUF9PTkVTVEVQX1NZTkMpKVxuK1x0XHRcdG90eDJfY2xlYXJfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfUFRQX09ORVNURVBfU1lOQyk7XG4gXG4gXHRcdGNhbmNlbF9kZWxheWVkX3dvcmsoXHUwMDI2cGZ2Zi1cdTAwM2VwdHAtXHUwMDNlc3luY3RzdGFtcF93b3JrKTtcbiBcdFx0b3R4Ml9jb25maWdfaHdfdHhfdHN0YW1wKHBmdmYsIGZhbHNlKTtcbkBAIC0yNTQ5LDcgKzI1NTksNyBAQCBpbnQgb3R4Ml9jb25maWdfaHd0c3RhbXBfc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdFx0XHRcdCAgIFwiT25lLXN0ZXAgdGltZSBzdGFtcGluZyBpcyBub3Qgc3VwcG9ydGVkXCIpO1xuIFx0XHRcdHJldHVybiAtRVJBTkdFO1xuIFx0XHR9XG4tXHRcdHBmdmYtXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX1BUUF9PTkVTVEVQX1NZTkM7XG4rXHRcdG90eDJfc2V0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1BUUF9PTkVTVEVQX1NZTkMpO1xuIFx0XHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2cGZ2Zi1cdTAwM2VwdHAtXHUwMDNlc3luY3RzdGFtcF93b3JrLFxuIFx0XHRcdFx0ICAgICAgbXNlY3NfdG9famlmZmllcyg1MDApKTtcbiBcdFx0ZmFsbHRocm91Z2g7XG5AQCAtMjgzNSw3ICsyODQ1LDcgQEAgc3RhdGljIGludCBvdHgyX3NldF92Zl92bGFuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCB2ZiwgdTE2IHZsYW4sIHU4IHFvcyxcbiBcdGlmIChwcm90byAhPSBodG9ucyhFVEhfUF84MDIxUSkpXG4gXHRcdHJldHVybiAtRVBST1RPTk9TVVBQT1JUO1xuIFxuLVx0aWYgKCEocGYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19WRl9WTEFOX1NVUFBPUlQpKVxuK1x0aWYgKCFvdHgyX3Rlc3RfZmxhZyhwZiwgT1RYMl9GTEFHX1ZGX1ZMQU5fU1VQUE9SVCkpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbiBcdHJldHVybiBvdHgyX2RvX3NldF92Zl92bGFuKHBmLCB2ZiwgdmxhbiwgcW9zLCBwcm90byk7XG5AQCAtMjkyMyw2ICsyOTMzLDEyIEBAIHN0YXRpYyBpbnQgb3R4Ml94ZHBfc2V0dXAoc3RydWN0IG90eDJfbmljICpwZiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuIFx0Ym9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcocGYtXHUwMDNlbmV0ZGV2KTtcbiBcdHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2c7XG4gXG4rXHRpZiAocHJvZyBcdTAwMjZcdTAwMjYgcGYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpIHtcbitcdFx0bmV0ZGV2X2VycihkZXYsXG4rXHRcdFx0ICAgXCJYRFA6IGNhbm5vdCBhdHRhY2ggd2hpbGUgbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGlzIGFjdGl2ZVxcblwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuIFx0aWYgKHByb2cgXHUwMDI2XHUwMDI2IGRldi1cdTAwM2VtdHUgXHUwMDNlIE1BWF9YRFBfTVRVKSB7XG4gXHRcdG5ldGRldl93YXJuKGRldiwgXCJKdW1ibyBmcmFtZXMgbm90IHlldCBzdXBwb3J0ZWQgd2l0aCBYRFBcXG5cIik7XG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbkBAIC0zMDg2LDcgKzMxMDIsNyBAQCBpbnQgb3R4Ml9yZWFsbG9jX21zaXhfdmVjdG9ycyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmKVxuIFx0ICogaW50ZXJydXB0IHJhbmdlIChRSU5ULCBDSU5ULCBHSU5ULCBFUlIgYW5kIFBPSVNPTiB2ZWN0b3JzKS5cbiBcdCAqL1xuIFx0bnVtX3ZlYyA9IGh3LVx1MDAzZW5peF9tc2l4b2ZmO1xuLVx0aWYgKHBmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfUkVQX01PREVfRU5BQkxFRClcbitcdGlmIChvdHgyX3Rlc3RfZmxhZyhwZiwgT1RYMl9GTEFHX1JFUF9NT0RFX0VOQUJMRUQpKVxuIFx0XHRudW1fdmVjICs9IE5JWF9MRl9DSU5UX1ZFQ19TVEFSVCArIGh3LVx1MDAzZW1heF9xdWV1ZXM7XG4gXHRlbHNlXG4gXHRcdG51bV92ZWMgKz0gTklYX0xGX1BPSVNPTl9WRUMgKyAxO1xuQEAgLTMyNzMsNyArMzI4OSw3IEBAIHN0YXRpYyBpbnQgb3R4Ml9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuIFx0cGYtXHUwMDNlcGRldiA9IHBkZXY7XG4gXHRwZi1cdTAwM2VkZXYgPSBkZXY7XG4gXHRwZi1cdTAwM2V0b3RhbF92ZnMgPSBwY2lfc3Jpb3ZfZ2V0X3RvdGFsdmZzKHBkZXYpO1xuLVx0cGYtXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX0lOVEZfRE9XTjtcbitcdG90eDJfc2V0X2ZsYWcocGYsIE9UWDJfRkxBR19JTlRGX0RPV04pO1xuIFxuIFx0aHcgPSBcdTAwMjZwZi1cdTAwM2VodztcbiBcdGh3LVx1MDAzZXBkZXYgPSBwZGV2O1xuQEAgLTMzMjgsMjMgKzMzNDQsMjMgQEAgc3RhdGljIGludCBvdHgyX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9kZWxfbWNhbV9lbnRyaWVzO1xuIFxuLVx0aWYgKHBmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfTlRVUExFX1NVUFBPUlQpXG4rXHRpZiAob3R4Ml90ZXN0X2ZsYWcocGYsIE9UWDJfRkxBR19OVFVQTEVfU1VQUE9SVCkpXG4gXHRcdG5ldGRldi1cdTAwM2Vod19mZWF0dXJlcyB8PSBORVRJRl9GX05UVVBMRTtcbiBcbi1cdGlmIChwZi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1VDQVNUX0ZMVFJfU1VQUE9SVClcbitcdGlmIChvdHgyX3Rlc3RfZmxhZyhwZiwgT1RYMl9GTEFHX1VDQVNUX0ZMVFJfU1VQUE9SVCkpXG4gXHRcdG5ldGRldi1cdTAwM2Vwcml2X2ZsYWdzIHw9IElGRl9VTklDQVNUX0ZMVDtcbiBcbiBcdC8qIFN1cHBvcnQgVFNPIG9uIHRhZyBpbnRlcmZhY2UgKi9cbiBcdG5ldGRldi1cdTAwM2V2bGFuX2ZlYXR1cmVzIHw9IG5ldGRldi1cdTAwM2VmZWF0dXJlcztcbiBcdG5ldGRldi1cdTAwM2Vod19mZWF0dXJlcyAgfD0gTkVUSUZfRl9IV19WTEFOX0NUQUdfVFggfFxuIFx0XHRcdFx0TkVUSUZfRl9IV19WTEFOX1NUQUdfVFg7XG4tXHRpZiAocGYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19SWF9WTEFOX1NVUFBPUlQpXG4rXHRpZiAob3R4Ml90ZXN0X2ZsYWcocGYsIE9UWDJfRkxBR19SWF9WTEFOX1NVUFBPUlQpKVxuIFx0XHRuZXRkZXYtXHUwMDNlaHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX0NUQUdfUlggfFxuIFx0XHRcdFx0ICAgICAgIE5FVElGX0ZfSFdfVkxBTl9TVEFHX1JYO1xuIFx0bmV0ZGV2LVx1MDAzZWZlYXR1cmVzIHw9IG5ldGRldi1cdTAwM2Vod19mZWF0dXJlcztcbiBcbiBcdC8qIEhXIHN1cHBvcnRzIHRjIG9mZmxvYWQgYnV0IG11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIG4tdHVwbGUgZmlsdGVycyAqL1xuLVx0aWYgKHBmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfVENfRkxPV0VSX1NVUFBPUlQpXG4rXHRpZiAob3R4Ml90ZXN0X2ZsYWcocGYsIE9UWDJfRkxBR19UQ19GTE9XRVJfU1VQUE9SVCkpXG4gXHRcdG5ldGRldi1cdTAwM2Vod19mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1RDO1xuIFxuIFx0bmV0ZGV2LVx1MDAzZWh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfTE9PUEJBQ0sgfCBORVRJRl9GX1JYQUxMO1xuQEAgLTM1OTUsMTggKzM2MTEsMTggQEAgc3RhdGljIHZvaWQgb3R4Ml9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXG4gXHRwZiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4gXG4tXHRwZi1cdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfUEZfU0hVVERPV047XG4rXHRvdHgyX3NldF9mbGFnKHBmLCBPVFgyX0ZMQUdfUEZfU0hVVERPV04pO1xuIFxuLVx0aWYgKHBmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfVFhfVFNUQU1QX0VOQUJMRUQpXG4rXHRpZiAob3R4Ml90ZXN0X2ZsYWcocGYsIE9UWDJfRkxBR19UWF9UU1RBTVBfRU5BQkxFRCkpXG4gXHRcdG90eDJfY29uZmlnX2h3X3R4X3RzdGFtcChwZiwgZmFsc2UpO1xuLVx0aWYgKHBmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfUlhfVFNUQU1QX0VOQUJMRUQpXG4rXHRpZiAob3R4Ml90ZXN0X2ZsYWcocGYsIE9UWDJfRkxBR19SWF9UU1RBTVBfRU5BQkxFRCkpXG4gXHRcdG90eDJfY29uZmlnX2h3X3J4X3RzdGFtcChwZiwgZmFsc2UpO1xuIFxuIFx0LyogRGlzYWJsZSA4MDIuM3ggcGF1c2UgZnJhbWVzICovXG4tXHRpZiAocGYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19SWF9QQVVTRV9FTkFCTEVEIHx8XG4tXHQgICAgKHBmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfVFhfUEFVU0VfRU5BQkxFRCkpIHtcbi1cdFx0cGYtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+T1RYMl9GTEFHX1JYX1BBVVNFX0VOQUJMRUQ7XG4tXHRcdHBmLVx1MDAzZWZsYWdzIFx1MDAyNj0gfk9UWDJfRkxBR19UWF9QQVVTRV9FTkFCTEVEO1xuK1x0aWYgKG90eDJfdGVzdF9mbGFnKHBmLCBPVFgyX0ZMQUdfUlhfUEFVU0VfRU5BQkxFRCkgfHxcbitcdCAgICBvdHgyX3Rlc3RfZmxhZyhwZiwgT1RYMl9GTEFHX1RYX1BBVVNFX0VOQUJMRUQpKSB7XG4rXHRcdG90eDJfY2xlYXJfZmxhZyhwZiwgT1RYMl9GTEFHX1JYX1BBVVNFX0VOQUJMRUQpO1xuK1x0XHRvdHgyX2NsZWFyX2ZsYWcocGYsIE9UWDJfRkxBR19UWF9QQVVTRV9FTkFCTEVEKTtcbiBcdFx0b3R4Ml9jb25maWdfcGF1c2VfZnJtKHBmKTtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuY1xuaW5kZXggMDM5ZmQ0N2ViZjUyMi4uNzBkOTlhZTNkZWZiNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmNcbkBAIC0xNiw2ICsxNiw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3RjX2FjdC90Y19taXJyZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC90Y19hY3QvdGNfdmxhbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2lwdjYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9wa3Rfc2NoZWQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9zY2hfZ2VuZXJpYy5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJjbjEway5oXCJcbiAjaW5jbHVkZSBcIm90eDJfY29tbW9uLmhcIlxuQEAgLTMxLDYgKzMzLDEwIEBAXG4gXG4gI2RlZmluZSBNQ0FTVF9JTlZBTElEX0dSUFx0XHQoLTFVKVxuICNkZWZpbmUgUkFURV9NQU5USVNTQV9CSVRTXHRcdDhcbisvKiBNaW4gcGVyLXF1ZXVlIGVncmVzcyBzaGFwaW5nIHJhdGUgdGhlIE5JWCBUTFggZW5jb2RlciBzdXBwb3J0cyAoMiBNYnBzKS4gKi9cbisjZGVmaW5lIE9UWDJfTVFQUklPX01JTl9SQVRFX0JZVEVTX1BTXHQyNTAwMDBVTExcbisvKiBNYXggZWdyZXNzIHNoYXBpbmcgcmF0ZSB0aGUgTklYIFRMWCBlbmNvZGVyIHN1cHBvcnRzICgxMzA4MTYgTWJwcykuICovXG4rI2RlZmluZSBPVFgyX01RUFJJT19NQVhfUkFURV9CWVRFU19QU1x0KChNQVhfQlVSU1RfU0laRSAqIDEwMDAwMDBVTEwpIC8gOFVMTClcbiBcbiBzdGF0aWMgdm9pZCBvdHgyX2dldF9lZ3Jlc3NfYnVyc3RfY2ZnKHN0cnVjdCBvdHgyX25pYyAqbmljLCB1MzIgYnVyc3QsXG4gXHRcdFx0XHQgICAgICB1MzIgKmJ1cnN0X2V4cCwgdTMyICpidXJzdF9tYW50aXNzYSlcbkBAIC02MSw2ICs2Nyw5IEBAIHN0YXRpYyB2b2lkIG90eDJfZ2V0X2VncmVzc19idXJzdF9jZmcoc3RydWN0IG90eDJfbmljICpuaWMsIHUzMiBidXJzdCxcbiBcdFx0XHQqYnVyc3RfbWFudGlzc2EgPSB0bXAgLyAoMVVMTCBcdTAwM2NcdTAwM2MgKCpidXJzdF9leHAgLSA3KSk7XG4gXHRcdH1cbiBcdH0gZWxzZSB7XG4rXHRcdC8qIGJ1cnN0IDA6IGxhcmdlc3QgZW5jb2RhYmxlIGJ1cnN0IChDTjEwS19NQVhfQlVSU1RfU0laRSBvblxuK1x0XHQgKiBDTjEwSyksIG5vdCBhIG1pbmltYWwgYnVyc3QuXG4rXHRcdCAqL1xuIFx0XHQqYnVyc3RfZXhwID0gTUFYX0JVUlNUX0VYUE9ORU5UO1xuIFx0XHQqYnVyc3RfbWFudGlzc2EgPSBtYXhfbWFudGlzc2E7XG4gXHR9XG5AQCAtMTU5LDcgKzE2OCw3IEBAIHN0YXRpYyBpbnQgb3R4Ml90Y192YWxpZGF0ZV9mbG93KHN0cnVjdCBvdHgyX25pYyAqbmljLFxuIFx0XHRcdFx0IHN0cnVjdCBmbG93X2FjdGlvbiAqYWN0aW9ucyxcbiBcdFx0XHRcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuLVx0aWYgKG5pYy1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX0lOVEZfRE9XTikge1xuK1x0aWYgKG90eDJfdGVzdF9mbGFnKG5pYywgT1RYMl9GTEFHX0lOVEZfRE9XTikpIHtcbiBcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCJJbnRlcmZhY2Ugbm90IGluaXRpYWxpemVkXCIpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbkBAIC0yMjMsNyArMjMyLDcgQEAgc3RhdGljIGludCBvdHgyX3RjX2VncmVzc19tYXRjaGFsbF9pbnN0YWxsKHN0cnVjdCBvdHgyX25pYyAqbmljLFxuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbi1cdGlmIChuaWMtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19UQ19NQVRDSEFMTF9FR1JFU1NfRU5BQkxFRCkge1xuK1x0aWYgKG90eDJfdGVzdF9mbGFnKG5pYywgT1RYMl9GTEFHX1RDX01BVENIQUxMX0VHUkVTU19FTkFCTEVEKSkge1xuIFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuIFx0XHRcdFx0ICAgXCJPbmx5IG9uZSBFZ3Jlc3MgTUFUQ0hBTEwgcmF0ZWxpbWl0ZXIgY2FuIGJlIG9mZmxvYWRlZFwiKTtcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG5AQCAtMjQ0LDcgKzI1Myw3IEBAIHN0YXRpYyBpbnQgb3R4Ml90Y19lZ3Jlc3NfbWF0Y2hhbGxfaW5zdGFsbChzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYyxcbiBcdFx0XHRcdFx0XHQgICAgb3R4Ml9jb252ZXJ0X3JhdGUoZW50cnktXHUwMDNlcG9saWNlLnJhdGVfYnl0ZXNfcHMpKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRyZXR1cm4gZXJyO1xuLVx0XHRuaWMtXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX1RDX01BVENIQUxMX0VHUkVTU19FTkFCTEVEO1xuK1x0XHRvdHgyX3NldF9mbGFnKG5pYywgT1RYMl9GTEFHX1RDX01BVENIQUxMX0VHUkVTU19FTkFCTEVEKTtcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuQEAgLTI2MSwxMyArMjcwLDEzIEBAIHN0YXRpYyBpbnQgb3R4Ml90Y19lZ3Jlc3NfbWF0Y2hhbGxfZGVsZXRlKHN0cnVjdCBvdHgyX25pYyAqbmljLFxuIFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrID0gY2xzLVx1MDAzZWNvbW1vbi5leHRhY2s7XG4gXHRpbnQgZXJyO1xuIFxuLVx0aWYgKG5pYy1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX0lOVEZfRE9XTikge1xuK1x0aWYgKG90eDJfdGVzdF9mbGFnKG5pYywgT1RYMl9GTEFHX0lOVEZfRE9XTikpIHtcbiBcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCJJbnRlcmZhY2Ugbm90IGluaXRpYWxpemVkXCIpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbiBcdGVyciA9IG90eDJfc2V0X21hdGNoYWxsX2VncmVzc19yYXRlKG5pYywgMCwgMCk7XG4tXHRuaWMtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+T1RYMl9GTEFHX1RDX01BVENIQUxMX0VHUkVTU19FTkFCTEVEO1xuK1x0b3R4Ml9jbGVhcl9mbGFnKG5pYywgT1RYMl9GTEFHX1RDX01BVENIQUxMX0VHUkVTU19FTkFCTEVEKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuQEAgLTUwNSw3ICs1MTQsNyBAQCBzdGF0aWMgaW50IG90eDJfdGNfcGFyc2VfYWN0aW9ucyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYyxcbiBcdFx0XHRtYXJrID0gYWN0LVx1MDAzZW1hcms7XG4gXHRcdFx0cmVxLVx1MDAzZW1hdGNoX2lkID0gbWFyayBcdTAwMjYgT1RYMl9SWF9NQVRDSF9JRF9NQVNLO1xuIFx0XHRcdHJlcS1cdTAwM2VvcCA9IE5JWF9SWF9BQ1RJT05fREVGQVVMVDtcbi1cdFx0XHRuaWMtXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX1RDX01BUktfRU5BQkxFRDtcbitcdFx0XHRvdHgyX3NldF9mbGFnKG5pYywgT1RYMl9GTEFHX1RDX01BUktfRU5BQkxFRCk7XG4gXHRcdFx0cmVmY291bnRfaW5jKFx1MDAyNm5pYy1cdTAwM2VmbG93X2NmZy1cdTAwM2VtYXJrX2Zsb3dzKTtcbiBcdFx0XHRicmVhaztcbiBcbkBAIC05NDIsNyArOTUxLDcgQEAgc3RhdGljIHZvaWQgb3R4Ml9kZXN0cm95X3RjX2Zsb3dfbGlzdChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4gXHRzdHJ1Y3Qgb3R4Ml9mbG93X2NvbmZpZyAqZmxvd19jZmcgPSBwZnZmLVx1MDAzZWZsb3dfY2ZnO1xuIFx0c3RydWN0IG90eDJfdGNfZmxvdyAqaXRlciwgKnRtcDtcbiBcbi1cdGlmICghKHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19NQ0FNX0VOVFJJRVNfQUxMT0MpKVxuK1x0aWYgKCFvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfTUNBTV9FTlRSSUVTX0FMTE9DKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGl0ZXIsIHRtcCwgXHUwMDI2Zmxvd19jZmctXHUwMDNlZmxvd19saXN0X3RjLCBsaXN0KSB7XG5AQCAtMTE5NSwxMiArMTIwNCwxMiBAQCBzdGF0aWMgaW50IG90eDJfdGNfZGVsX2Zsb3coc3RydWN0IG90eDJfbmljICpuaWMsXG4gXHQvKiBEaXNhYmxlIFRDIE1BUksgZmxhZyBpZiB0aGV5IGFyZSBubyBydWxlcyB3aXRoIHNrYmVkaXQgbWFyayBhY3Rpb24gKi9cbiBcdGlmIChmbG93X25vZGUtXHUwMDNlcmVxLm1hdGNoX2lkKVxuIFx0XHRpZiAoIXJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZmbG93X2NmZy1cdTAwM2VtYXJrX2Zsb3dzKSlcbi1cdFx0XHRuaWMtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+T1RYMl9GTEFHX1RDX01BUktfRU5BQkxFRDtcbitcdFx0XHRvdHgyX2NsZWFyX2ZsYWcobmljLCBPVFgyX0ZMQUdfVENfTUFSS19FTkFCTEVEKTtcbiBcbiBcdGlmIChmbG93X25vZGUtXHUwMDNlaXNfYWN0X3BvbGljZSkge1xuIFx0XHRfX2NsZWFyX2JpdChmbG93X25vZGUtXHUwMDNlcnEsIFx1MDAyNm5pYy1cdTAwM2VycV9ibWFwKTtcbiBcbi1cdFx0aWYgKG5pYy1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX0lOVEZfRE9XTilcbitcdFx0aWYgKG90eDJfdGVzdF9mbGFnKG5pYywgT1RYMl9GTEFHX0lOVEZfRE9XTikpXG4gXHRcdFx0Z290byBmcmVlX21jYW1fZmxvdztcbiBcbiBcdFx0bXV0ZXhfbG9jayhcdTAwMjZuaWMtXHUwMDNlbWJveC5sb2NrKTtcbkBAIC0xMjQ2LDEwICsxMjU1LDEwIEBAIHN0YXRpYyBpbnQgb3R4Ml90Y19hZGRfZmxvdyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYyxcbiBcdHN0cnVjdCBucGNfaW5zdGFsbF9mbG93X3JlcSAqcmVxLCBkdW1teTtcbiBcdGludCByYywgZXJyLCBlbnRyeTtcbiBcbi1cdGlmICghKG5pYy1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1RDX0ZMT1dFUl9TVVBQT1JUKSlcbitcdGlmICghb3R4Ml90ZXN0X2ZsYWcobmljLCBPVFgyX0ZMQUdfVENfRkxPV0VSX1NVUFBPUlQpKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdGlmIChuaWMtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19JTlRGX0RPV04pIHtcbitcdGlmIChvdHgyX3Rlc3RfZmxhZyhuaWMsIE9UWDJfRkxBR19JTlRGX0RPV04pKSB7XG4gXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwiSW50ZXJmYWNlIG5vdCBpbml0aWFsaXplZFwiKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG5AQCAtMTQ0NCw3ICsxNDUzLDcgQEAgc3RhdGljIGludCBvdHgyX3RjX2luZ3Jlc3NfbWF0Y2hhbGxfaW5zdGFsbChzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYyxcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4tXHRpZiAobmljLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfVENfTUFUQ0hBTExfSU5HUkVTU19FTkFCTEVEKSB7XG4rXHRpZiAob3R4Ml90ZXN0X2ZsYWcobmljLCBPVFgyX0ZMQUdfVENfTUFUQ0hBTExfSU5HUkVTU19FTkFCTEVEKSkge1xuIFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuIFx0XHRcdFx0ICAgXCJPbmx5IG9uZSBpbmdyZXNzIE1BVENIQUxMIHJhdGVsaW1pdHRlciBjYW4gYmUgb2ZmbG9hZGVkXCIpO1xuIFx0XHRyZXR1cm4gLUVOT01FTTtcbkBAIC0xNDY5LDcgKzE0NzgsNyBAQCBzdGF0aWMgaW50IG90eDJfdGNfaW5ncmVzc19tYXRjaGFsbF9pbnN0YWxsKHN0cnVjdCBvdHgyX25pYyAqbmljLFxuIFx0XHRlcnIgPSBjbjEwa19zZXRfbWF0Y2hhbGxfaXBvbGljZXJfcmF0ZShuaWMsIGVudHJ5LVx1MDAzZXBvbGljZS5idXJzdCwgcmF0ZSk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIGVycjtcbi1cdFx0bmljLVx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19UQ19NQVRDSEFMTF9JTkdSRVNTX0VOQUJMRUQ7XG4rXHRcdG90eDJfc2V0X2ZsYWcobmljLCBPVFgyX0ZMQUdfVENfTUFUQ0hBTExfSU5HUkVTU19FTkFCTEVEKTtcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuQEAgLTE0ODYsMTMgKzE0OTUsMTMgQEAgc3RhdGljIGludCBvdHgyX3RjX2luZ3Jlc3NfbWF0Y2hhbGxfZGVsZXRlKHN0cnVjdCBvdHgyX25pYyAqbmljLFxuIFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrID0gY2xzLVx1MDAzZWNvbW1vbi5leHRhY2s7XG4gXHRpbnQgZXJyO1xuIFxuLVx0aWYgKG5pYy1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX0lOVEZfRE9XTikge1xuK1x0aWYgKG90eDJfdGVzdF9mbGFnKG5pYywgT1RYMl9GTEFHX0lOVEZfRE9XTikpIHtcbiBcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCJJbnRlcmZhY2Ugbm90IGluaXRpYWxpemVkXCIpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbiBcdGVyciA9IGNuMTBrX2ZyZWVfbWF0Y2hhbGxfaXBvbGljZXIobmljKTtcbi1cdG5pYy1cdTAwM2VmbGFncyBcdTAwMjY9IH5PVFgyX0ZMQUdfVENfTUFUQ0hBTExfSU5HUkVTU19FTkFCTEVEO1xuK1x0b3R4Ml9jbGVhcl9mbGFnKG5pYywgT1RYMl9GTEFHX1RDX01BVENIQUxMX0lOR1JFU1NfRU5BQkxFRCk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC0xNjAwLDE0ICsxNjA5LDc1MCBAQCBzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfYmxvY2soc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0XHRcdFx0ICBuaWMsIG5pYywgaW5ncmVzcyk7XG4gfVxuIFxuKy8qIEZyZWUgdGhlIHBlci1xdWV1ZSBtaW4vbWF4IHJhdGUgY2FjaGVzLiAqL1xuK3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUoc3RydWN0IG90eDJfbmljICpwZnZmKVxuK3tcbitcdGRldm1fa2ZyZWUocGZ2Zi1cdTAwM2VkZXYsIHBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlKTtcbitcdGRldm1fa2ZyZWUocGZ2Zi1cdTAwM2VkZXYsIHBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlKTtcbitcdHBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlID0gTlVMTDtcbitcdHBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlID0gTlVMTDtcbitcdHBmdmYtXHUwMDNlbXFwcmlvLmZsYWdzID0gMDtcbit9XG4rXG4rc3RhdGljIGludCBvdHgyX21xcHJpb19hbGxvY19jYWNoZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGJvb2wgcmVwbGFjaW5nKVxuK3tcbitcdHUxNiBudW1fdHhxID0gcGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcbitcbitcdGlmIChyZXBsYWNpbmcgXHUwMDI2XHUwMDI2IHBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlIFx1MDAyNlx1MDAyNiBwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSkge1xuK1x0XHRtZW1zZXQocGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUsIDAsXG4rXHRcdCAgICAgICBudW1fdHhxICogc2l6ZW9mKCpwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSkpO1xuK1x0XHRtZW1zZXQocGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUsIDAsXG4rXHRcdCAgICAgICBudW1fdHhxICogc2l6ZW9mKCpwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSkpO1xuK1x0XHRwZnZmLVx1MDAzZW1xcHJpby5mbGFncyA9IDA7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0b3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTtcbitcbitcdHBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlID0gZGV2bV9rY2FsbG9jKHBmdmYtXHUwMDNlZGV2LCBudW1fdHhxLFxuK1x0XHRcdFx0XHQgICAgIHNpemVvZigqcGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUpLFxuK1x0XHRcdFx0XHQgICAgIEdGUF9LRVJORUwpO1xuK1x0cGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUgPSBkZXZtX2tjYWxsb2MocGZ2Zi1cdTAwM2VkZXYsIG51bV90eHEsXG4rXHRcdFx0XHRcdCAgICAgc2l6ZW9mKCpwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSksXG4rXHRcdFx0XHRcdCAgICAgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIXBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlIHx8ICFwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSkge1xuK1x0XHRvdHgyX21xcHJpb19mcmVlX2NhY2hlKHBmdmYpO1xuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19zbmFwX2ZyZWUoc3RydWN0IG90eDJfbmljICpwZnZmLFxuK1x0XHRcdFx0ICBzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwICoqc25hcClcbit7XG4rXHRpZiAoISpzbmFwKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRkZXZtX2tmcmVlKHBmdmYtXHUwMDNlZGV2LCAqc25hcCk7XG4rXHQqc25hcCA9IE5VTEw7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fc25hcF9jb3B5KHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbitcdFx0XHRcdCBzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwICoqZHN0LFxuK1x0XHRcdFx0IGNvbnN0IHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXG4re1xuK1x0Y29uc3Qgc3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0ID0gXHUwMDI2bXFwcmlvLVx1MDAzZXFvcHQ7XG4rXHRzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwICpzbmFwO1xuK1x0aW50IHRjO1xuK1xuK1x0aWYgKCEqZHN0KSB7XG4rXHRcdHNuYXAgPSBkZXZtX2t6YWxsb2MocGZ2Zi1cdTAwM2VkZXYsIHNpemVvZigqc25hcCksIEdGUF9LRVJORUwpO1xuK1x0XHRpZiAoIXNuYXApXG4rXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHRcdCpkc3QgPSBzbmFwO1xuK1x0fSBlbHNlIHtcbitcdFx0c25hcCA9ICpkc3Q7XG4rXHR9XG4rXG4rXHRzbmFwLVx1MDAzZW51bV90YyA9IHFvcHQtXHUwMDNlbnVtX3RjO1xuK1x0Zm9yICh0YyA9IDA7IHRjIFx1MDAzYyBUQ19RT1BUX01BWF9RVUVVRTsgdGMrKykge1xuK1x0XHRzbmFwLVx1MDAzZWNvdW50W3RjXSA9IHFvcHQtXHUwMDNlY291bnRbdGNdO1xuK1x0XHRzbmFwLVx1MDAzZW9mZnNldFt0Y10gPSBxb3B0LVx1MDAzZW9mZnNldFt0Y107XG4rXHRcdHNuYXAtXHUwMDNlbWluX3JhdGVbdGNdID0gMDtcbitcdFx0c25hcC1cdTAwM2VtYXhfcmF0ZVt0Y10gPSAwO1xuK1x0fVxuK1xuK1x0Zm9yICh0YyA9IDA7IHRjIFx1MDAzYyBxb3B0LVx1MDAzZW51bV90YzsgdGMrKykge1xuK1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcbitcdFx0XHRzbmFwLVx1MDAzZW1pbl9yYXRlW3RjXSA9IG1xcHJpby1cdTAwM2VtaW5fcmF0ZVt0Y107XG4rXHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKVxuK1x0XHRcdHNuYXAtXHUwMDNlbWF4X3JhdGVbdGNdID0gbXFwcmlvLVx1MDAzZW1heF9yYXRlW3RjXTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IG90eDJfbXFwcmlvX3N0YWdlX2N1cihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4rXHRcdFx0XHQgY29uc3Qgc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbylcbit7XG4rXHRyZXR1cm4gb3R4Ml9tcXByaW9fc25hcF9jb3B5KHBmdmYsIFx1MDAyNnBmdmYtXHUwMDNlY3VyX21xX3NuYXAsIG1xcHJpbyk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX3NuYXBfY29tbWl0KHN0cnVjdCBvdHgyX25pYyAqcGZ2Zilcbit7XG4rXHRvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgXHUwMDI2cGZ2Zi1cdTAwM2VvbGRfbXFfc25hcCk7XG4rXHRwZnZmLVx1MDAzZW9sZF9tcV9zbmFwID0gcGZ2Zi1cdTAwM2VjdXJfbXFfc25hcDtcbitcdHBmdmYtXHUwMDNlY3VyX21xX3NuYXAgPSBOVUxMO1xuK31cbitcbitzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19jbGVhcl9yZXBsYWNlX3N0YXRlKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zilcbit7XG4rXHRwZnZmLVx1MDAzZW1xcHJpby5yZXBsYWNlX3NldHVwX2RvbmUgPSBmYWxzZTtcbitcdHBmdmYtXHUwMDNlbXFwcmlvLnJlcGxhY2VfZ3JhZnRfZG9uZSA9IGZhbHNlO1xuK31cbitcbitzdGF0aWMgYm9vbCBvdHgyX21xcHJpb19tZHFfYWxsb2NhdGVkKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zilcbit7XG4rXHRyZXR1cm4gcGZ2Zi1cdTAwM2Vody50eHNjaHFfY250W05JWF9UWFNDSF9MVkxfTURRXSAhPSAwO1xuK31cbitcbitzdGF0aWMgaW50IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmF0ZV9saW1pdCk7XG4rXG4rc3RhdGljIGludCBvdHgyX21xcHJpb19yZXN0b3JlX29sZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4re1xuK1x0c3RydWN0IG1xX29mZmxvYWRfc25hcCAqc25hcCA9IHBmdmYtXHUwMDNlb2xkX21xX3NuYXA7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGZ2Zi1cdTAwM2VuZXRkZXY7XG4rXHR1MTYgbnVtX3R4cSA9IHBmdmYtXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXM7XG4rXHRpbnQgdGMsIHR4cSwgZXJyO1xuK1xuK1x0aWYgKCFzbmFwKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGVyciA9IG90eDJfbXFwcmlvX2FsbG9jX2NhY2hlKHBmdmYsIGZhbHNlKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRtZW1zZXQocGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUsIDAsIG51bV90eHEgKiBzaXplb2YoKnBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlKSk7XG4rXHRtZW1zZXQocGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUsIDAsIG51bV90eHEgKiBzaXplb2YoKnBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlKSk7XG4rXHRwZnZmLVx1MDAzZW1xcHJpby5mbGFncyA9IDA7XG4rXG4rXHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIHNuYXAtXHUwMDNlbnVtX3RjOyB0YysrKSB7XG4rXHRcdHU2NCBtaW5fcmF0ZSA9IHNuYXAtXHUwMDNlbWluX3JhdGVbdGNdO1xuK1x0XHR1NjQgbWF4X3JhdGUgPSBzbmFwLVx1MDAzZW1heF9yYXRlW3RjXTtcbitcbitcdFx0aWYgKG1pbl9yYXRlKVxuK1x0XHRcdHBmdmYtXHUwMDNlbXFwcmlvLmZsYWdzIHw9IFRDX01RUFJJT19GX01JTl9SQVRFO1xuK1x0XHRpZiAobWF4X3JhdGUpXG4rXHRcdFx0cGZ2Zi1cdTAwM2VtcXByaW8uZmxhZ3MgfD0gVENfTVFQUklPX0ZfTUFYX1JBVEU7XG4rXG4rXHRcdGZvciAodHhxID0gc25hcC1cdTAwM2VvZmZzZXRbdGNdO1xuK1x0XHQgICAgIHR4cSBcdTAwM2Mgc25hcC1cdTAwM2VvZmZzZXRbdGNdICsgc25hcC1cdTAwM2Vjb3VudFt0Y107IHR4cSsrKSB7XG4rXHRcdFx0cGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGVbdHhxXSA9IG1pbl9yYXRlO1xuK1x0XHRcdHBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlW3R4cV0gPSBtYXhfcmF0ZTtcbitcdFx0fVxuK1x0fVxuK1xuK1x0bmV0ZGV2X3NldF9udW1fdGMobmV0ZGV2LCBzbmFwLVx1MDAzZW51bV90Yyk7XG4rXHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIHNuYXAtXHUwMDNlbnVtX3RjOyB0YysrKVxuK1x0XHRuZXRkZXZfc2V0X3RjX3F1ZXVlKG5ldGRldiwgdGMsIHNuYXAtXHUwMDNlY291bnRbdGNdLFxuK1x0XHRcdFx0ICAgIHNuYXAtXHUwMDNlb2Zmc2V0W3RjXSk7XG4rXG4rXHRpZiAob3R4Ml9tcXByaW9fbWRxX2FsbG9jYXRlZChwZnZmKSkge1xuK1x0XHRlcnIgPSBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIocGZ2Zik7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdH1cbitcbitcdC8qIFJlYnVpbGQgdGhlIFRYIHNjaGVkdWxlciB2aWEgbmV0ZGV2IHJlc3RhcnQgd2hlbiBydW5uaW5nOyBvdHgyX21xcHJpb191cCgpXG4rXHQgKiBhbG9uZSBpcyBpbnN1ZmZpY2llbnQgYWZ0ZXIgYSBmYWlsZWQgcmVwbGFjZSB0aGF0IGFscmVhZHkgYm91bmNlZCB0aGVcbitcdCAqIGludGVyZmFjZS4gSWYgb3BlbiBmYWlsZWQsIFRYIHNjaGVkdWxlcnMgd2VyZSBmcmVlZDsgZGVmZXIgc2hhcGVyIHJlc3RvcmVcbitcdCAqIHRvIHRoZSBuZXh0IHN1Y2Nlc3NmdWwgbmRvX29wZW4oKSB2aWEgb3R4Ml9tcXByaW9fdXAoKS5cbitcdCAqL1xuK1x0cGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdCA9IHRydWU7XG4rXG4rXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7XG4rXHRcdGVyciA9IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KG5ldGRldiwgdHJ1ZSk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdH0gZWxzZSBpZiAocGZ2Zi1cdTAwM2Vody50eHNjaHFfY250W05JWF9UWFNDSF9MVkxfU01RXSkge1xuK1x0XHRlcnIgPSBvdHgyX21xcHJpb191cChwZnZmKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuK1x0b3R4Ml9tcXByaW9fc25hcF9mcmVlKHBmdmYsIFx1MDAyNnBmdmYtXHUwMDNlY3VyX21xX3NuYXApO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX3NuYXBfZGVzdHJveShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4re1xuK1x0b3R4Ml9tcXByaW9fc25hcF9mcmVlKHBmdmYsIFx1MDAyNnBmdmYtXHUwMDNlY3VyX21xX3NuYXApO1xuK1x0b3R4Ml9tcXByaW9fc25hcF9mcmVlKHBmdmYsIFx1MDAyNnBmdmYtXHUwMDNlb2xkX21xX3NuYXApO1xuK31cbitcbitzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19jbGVhcl9zdyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4re1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtXHUwMDNlbmV0ZGV2O1xuK1xuK1x0cGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdCA9IGZhbHNlO1xuK1x0b3R4Ml9tcXByaW9fY2xlYXJfcmVwbGFjZV9zdGF0ZShwZnZmKTtcbitcdG5ldGRldl9zZXRfbnVtX3RjKG5ldGRldiwgMCk7XG4rXHRvdHgyX21xcHJpb19mcmVlX2NhY2hlKHBmdmYpO1xuK31cbitcbisvKiBUZWFyIGRvd24gbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkOiBjbGVhciBwZXItcXVldWUgc2hhcGVycyxcbisgKiBtcXByaW9fcmF0ZV9saW1pdCwgbmV0ZGV2IFRDIG1hcHBpbmdzLCBhbmQgdGhlIGNhY2hlZCByYXRlcy4gIENhbGxlZCBvblxuKyAqIGV4cGxpY2l0IG1xcHJpbyB0ZWFyZG93biAodGMgcWRpc2MgZGVsKSBhbmQgZXJyb3IgY2xlYW51cCwgbm90IG9uXG4rICogcm91dGluZSBuZXRkZXYgc3RvcC9vcGVuIGN5Y2xlcyB3aGVyZSB0aGUgb2ZmbG9hZCBzdGF5cyBhY3RpdmUuXG4rICovXG4raW50IG90eDJfbXFwcmlvX2Rvd24oc3RydWN0IG90eDJfbmljICpwZnZmKVxuK3tcbitcdGludCBlcnIgPSAwO1xuK1xuK1x0aWYgKCFwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmIChuZXRpZl9ydW5uaW5nKHBmdmYtXHUwMDNlbmV0ZGV2KSBcdTAwMjZcdTAwMjZcbitcdCAgICBvdHgyX21xcHJpb19tZHFfYWxsb2NhdGVkKHBmdmYpKVxuK1x0XHRlcnIgPSBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIocGZ2Zik7XG4rXG4rXHRpZiAoZXJyKSB7XG4rXHRcdG5ldGRldl93YXJuKHBmdmYtXHUwMDNlbmV0ZGV2LFxuK1x0XHRcdCAgICBcIm1xcHJpbzogZmFpbGVkIHRvIGNsZWFyIGhhcmR3YXJlIHNoYXBlcnM6ICVkOyBjbGVhcmluZyBzb2Z0d2FyZSBzdGF0ZVxcblwiLFxuK1x0XHRcdCAgICBlcnIpO1xuK1x0XHRvdHgyX21xcHJpb19jbGVhcl9zdyhwZnZmKTtcbitcdFx0cmV0dXJuIGVycjtcbitcdH1cbitcbitcdG90eDJfbXFwcmlvX2NsZWFyX3N3KHBmdmYpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK2ludCBvdHgyX21xcHJpb191cChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4re1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtXHUwMDNlbmV0ZGV2O1xuK1x0aW50IHR4cSwgZXJyO1xuK1xuK1x0aWYgKCFwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmICghcGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUgfHwgIXBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGZvciAodHhxID0gMDsgdHhxIFx1MDAzYyBwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzOyB0eHErKykge1xuK1x0XHR1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7XG4rXG4rXHRcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5mbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpXG4rXHRcdFx0bWluX3JhdGUgPSBwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZVt0eHFdO1xuK1x0XHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8uZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKVxuK1x0XHRcdG1heF9yYXRlID0gcGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGVbdHhxXTtcbitcbitcdFx0aWYgKCFtaW5fcmF0ZSBcdTAwMjZcdTAwMjYgIW1heF9yYXRlKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRlcnIgPSBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHBmdmYsIHR4cSwgbWluX3JhdGUsXG4rXHRcdFx0XHRcdFx0ICAgbWF4X3JhdGUpO1xuK1x0XHRpZiAoZXJyKSB7XG4rXHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0XHQgICBcIm1xcHJpbzogZmFpbGVkIHRvIHJlc3RvcmUgc2hhcGVyIGZvciB0eHEgJWQ6ICVkXFxuXCIsXG4rXHRcdFx0XHQgICB0eHEsIGVycik7XG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdFx0fVxuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qIFJlc3RhcnQgdGhlIG5ldGRldiB0byByZXByb2dyYW0gdGhlIFRYIHNjaGVkdWxlciBoaWVyYXJjaHkgZm9yIG1xcHJpb1xuKyAqIGJhbmR3aWR0aCBvZmZsb2FkLiAgQm90aCBtcXByaW8gYWRkIGFuZCBkZWxldGUgKHdoZW4gb2ZmbG9hZCB3YXMgYWN0aXZlKVxuKyAqIHRha2UgdGhpcyBwYXRoIHZpYSBuZG9fc3RvcCgpL25kb19vcGVuKCkgc28gVkYtc3BlY2lmaWMgb3BlbiBsb2dpYyAoZS5nLlxuKyAqIExCSyBjYXJyaWVyIG9uKSBydW5zIGNvcnJlY3RseS5cbisgKlxuKyAqIEludGVudGlvbmFsIGJlaGF2aW91cjogdGhpcyBmdWxsIHN0b3Avb3BlbiBjeWNsZSBkcm9wcyBpbi1mbGlnaHQgdHJhZmZpY1xuKyAqIChjYXJyaWVyIG9mZiwgSVJRL05BUEkgdGVhcmRvd24sIHF1ZXVlIGRyYWluKS4gIFRoZSBOSVggVFggc2NoZWR1bGVyIG11c3RcbisgKiBiZSByZWFsbG9jYXRlZCAoZS5nLiBvbmUgU01RIHBlciBub24tUW9TIHF1ZXVlKSBhbmQgY2Fubm90IGJlIHJlcHJvZ3JhbW1lZFxuKyAqIGxpdmUgdG9kYXksIHNvIGEgbmV0ZGV2IGJvdW5jZSBpcyByZXF1aXJlZCBvbiBldmVyeSBtcXByaW8gYWRkLCByZXBsYWNlLFxuKyAqIGRlbGV0ZSwgYW5kIHJvbGxiYWNrLiAgVXNlcnMgc2VlIGEgYnJpZWYgY29ubmVjdGl2aXR5IGJsaXA7IHRoaXMgaXMgbm90IGFcbisgKiBidWcgdG8gXCJmaXhcIiB3aXRob3V0IGltcGxlbWVudGluZyB0aGUgbGl2ZS1yZXByb2dyYW1taW5nIHBhdGggbm90ZWQgYmVsb3cuXG4rICogSWYgb3BlbiBmYWlscywgdGhlIGludGVyZmFjZSBpcyBsZWZ0IGFkbWluaXN0cmF0aXZlbHkgZG93biB3aXRob3V0IGNhbGxpbmdcbisgKiBuZG9fc3RvcCgpIGFnYWluIG9uIHJlc291cmNlcyBhbHJlYWR5IHRvcm4gZG93biBieSB0aGUgb3BlbiBlcnJvciBwYXRoLlxuKyAqXG4rICogUXVpZXNjZSB0aGUgdHJhbnNtaXQgcGF0aCBsaWtlIF9fZGV2X2Nsb3NlX21hbnkoKSBiZWZvcmUgbmRvX3N0b3AoKSBzb1xuKyAqIG90eDJfeG1pdCgpIGNhbm5vdCByYWNlIG90eDJfZnJlZV9xdWV1ZV9tZW0oKS5cbisgKi9cbitzdGF0aWMgaW50IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmF0ZV9saW1pdClcbit7XG4rXHRzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuK1x0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHMgPSBuZXRkZXYtXHUwMDNlbmV0ZGV2X29wcztcbitcdGJvb2wgcnVubmluZyA9IG5ldGlmX3J1bm5pbmcobmV0ZGV2KTtcbitcdGludCBlcnI7XG4rXG4rXHQvKiBUT0RPOiBFeHBsb3JlIGxpdmUgVFggc2NoZWR1bGVyIHJlcHJvZ3JhbW1pbmcgdG8gYXZvaWQgYSBmdWxsXG4rXHQgKiBuZG9fc3RvcCgpL25kb19vcGVuKCkgYm91bmNlIG9uIGV2ZXJ5IG1xcHJpbyBjaGFuZ2UuXG4rXHQgKi9cbitcdG5ldGRldl9pbmZvKG5ldGRldixcbitcdFx0ICAgIFwibXFwcmlvOiByZXN0YXJ0aW5nIGludGVyZmFjZSB0byByZXByb2dyYW0gVFggc2NoZWR1bGVyOyBpbi1mbGlnaHQgdHJhZmZpYyB3aWxsIGJlIGRyb3BwZWRcXG5cIik7XG4rXG4rXHRpZiAocnVubmluZykge1xuK1x0XHRjbGVhcl9iaXQoX19MSU5LX1NUQVRFX1NUQVJULCBcdTAwMjZuZXRkZXYtXHUwMDNlc3RhdGUpO1xuK1x0XHRzbXBfbWJfX2FmdGVyX2F0b21pYygpOyAvKiBDb21taXQgbmV0aWZfcnVubmluZygpLiAqL1xuK1x0fVxuK1x0ZGV2X2RlYWN0aXZhdGUobmV0ZGV2LCB0cnVlKTtcbitcbitcdGVyciA9IG9wcy1cdTAwM2VuZG9fc3RvcChuZXRkZXYpO1xuK1x0aWYgKGVycikge1xuK1x0XHRpZiAocnVubmluZykge1xuK1x0XHRcdHNldF9iaXQoX19MSU5LX1NUQVRFX1NUQVJULCBcdTAwMjZuZXRkZXYtXHUwMDNlc3RhdGUpO1xuK1x0XHRcdGRldl9hY3RpdmF0ZShuZXRkZXYpO1xuK1x0XHR9XG4rXHRcdHJldHVybiBlcnI7XG4rXHR9XG4rXG4rXHQvKiBTZXQgYmVmb3JlIG5kb19vcGVuKCkgc28gb3R4Ml90eHNjaF9hbGxvYygpIHdpZGVucyBTTVEgYWxsb2NhdGlvbi5cbitcdCAqIE9uIHRlYXJkb3duLCBkcm9wIG1xcHJpbyBzb2Z0d2FyZSBzdGF0ZSBzbyBuZG9fb3BlbigpIGRvZXMgbm90XG4rXHQgKiByZS1hcHBseSBiYW5kd2lkdGggbGltaXRzIHZpYSBvdHgyX21xcHJpb191cCgpIGFmdGVyIHRoZSBrZXJuZWxcbitcdCAqIHJlbW92ZWQgdGhlIHFkaXNjLlxuK1x0ICovXG4rXHRpZiAocmF0ZV9saW1pdClcbitcdFx0cGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdCA9IHRydWU7XG4rXHRlbHNlXG4rXHRcdG90eDJfbXFwcmlvX2NsZWFyX3N3KHBmdmYpO1xuK1xuK1x0ZXJyID0gb3BzLVx1MDAzZW5kb19vcGVuKG5ldGRldik7XG4rXHRpZiAoIWVyciBcdTAwMjZcdTAwMjYgcnVubmluZykge1xuK1x0XHRzZXRfYml0KF9fTElOS19TVEFURV9TVEFSVCwgXHUwMDI2bmV0ZGV2LVx1MDAzZXN0YXRlKTtcbitcdFx0ZGV2X2FjdGl2YXRlKG5ldGRldik7XG4rXHR9IGVsc2UgaWYgKGVycikge1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHQgICBcIkZhaWxlZCB0byByZXN0YXJ0IGRldmljZSBhZnRlciBtcXByaW8gY2hhbmdlOiAlZFxcblwiLFxuK1x0XHRcdCAgIGVycik7XG4rXHRcdC8qIG5kb19vcGVuKCkgYWxyZWFkeSBmcmVlZCB0aGUgVFggc2NoZWR1bGVycyBvbiBmYWlsdXJlIHdoaWxlXG4rXHRcdCAqIG5ldGlmX3J1bm5pbmcoKSBtYXkgc3RpbGwgYmUgdHJ1ZTsgZHJvcCBtcXByaW8gc29mdHdhcmUgc3RhdGVcbitcdFx0ICogb25seSBpbnN0ZWFkIG9mIHNlbmRpbmcgc2hhcGVyIGNsZWFycyB0byBmcmVlZCBxdWV1ZXMuXG4rXHRcdCAqL1xuK1x0XHRvdHgyX21xcHJpb19jbGVhcl9zdyhwZnZmKTtcbitcdFx0LyogbmRvX29wZW4oKSByb2xscyBiYWNrIG9uIGZhaWx1cmU7IG1hcmsgdGhlIGludGVyZmFjZSBkb3duIHNvXG4rXHRcdCAqIG5ldGlmX2Nsb3NlKCkgZG9lcyBub3QgaW52b2tlIG5kb19zdG9wKCkgb24gZnJlZWQgTkFQSS9xdWV1ZVxuK1x0XHQgKiBzdGF0ZS4gQ2FsbGVyIGhvbGRzIFJUTkw7IGRldl9jbG9zZSgpIHdvdWxkIGRlYWRsb2NrLlxuK1x0XHQgKi9cbitcdFx0b3R4Ml9zZXRfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfSU5URl9ET1dOKTtcbitcdFx0LyogdmlzaWJsZSB0byBvdHgyX3N0b3AoKSBvbiBvdGhlciBjcHVzICovXG4rXHRcdHNtcF93bWIoKTtcbitcdFx0bmV0aWZfY2xvc2UobmV0ZGV2KTtcbitcdH1cbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fdmFsaWRhdGVfdGNfcmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuK1x0XHRcdFx0XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXG4rXHRcdFx0XHRcdHU2NCByYXRlLCB1MzIgcWNvdW50LCBpbnQgdGMsXG4rXHRcdFx0XHRcdGNvbnN0IGNoYXIgKm5hbWUpXG4re1xuK1x0aWYgKCFyYXRlKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmIChxY291bnQgXHUwMDNjPSAxKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdC8qIFRPRE86IG1xcHJpbyBtaW5fcmF0ZS9tYXhfcmF0ZSBhcmUgcGVyIHRyYWZmaWMgY2xhc3MsIGJ1dCBiYW5kd2lkdGhcbitcdCAqIG9mZmxvYWQgc2hhcGVzIG9uIHBlci1xdWV1ZSBNRFEgbm9kZXMgcGFyZW50ZWQgdW5kZXIgYSBzaW5nbGUgVEw0LlxuK1x0ICogV2l0aG91dCBwZXItVEMgVEw0IHNoYXBlcnMgdGhlIGRyaXZlciBjYW5ub3QgaG9ub3IgVEMtbGV2ZWwgbGltaXRzXG4rXHQgKiBmb3IgYSB0cmFmZmljIGNsYXNzIHRoYXQgc3BhbnMgbXVsdGlwbGUgcXVldWVzIHdpdGhvdXQgZWl0aGVyXG4rXHQgKiBkaXZpZGluZyB0aGUgcmF0ZSBhY3Jvc3MgcXVldWVzICh1QVBJIG1pc21hdGNoKSBvciBleGNlZWRpbmcgdGhlIFRDXG4rXHQgKiBjYXAgd2hlbiBldmVyeSBtZW1iZXIgcXVldWUgaXMgYWN0aXZlLiBSZWplY3QgdW50aWwgcGVyLVRDIFRMNFxuK1x0ICogc2hhcGluZyBjYW4gYmUgaW1wbGVtZW50ZWQgd2l0aG91dCBhbGxvY2F0aW5nIGFkZGl0aW9uYWwgVEw0IG5vZGVzXG4rXHQgKiBiZXlvbmQgdGhlIGV4aXN0aW5nIGhpZXJhcmNoeS5cbitcdCAqL1xuK1x0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdCAgIFwibXFwcmlvOiAlcyByYXRlIGZvciB0YyAlZCBub3Qgc3VwcG9ydGVkIHdpdGggJXUgcXVldWVzXFxuXCIsXG4rXHRcdCAgIG5hbWUsIHRjLCBxY291bnQpO1xuK1x0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4rXHRcdFx0ICAgICAgIFwibXFwcmlvOiAlcyByYXRlIGZvciB0YyAlZCBub3Qgc3VwcG9ydGVkIHdpdGggJXUgcXVldWVzXCIsXG4rXHRcdFx0ICAgICAgIG5hbWUsIHRjLCBxY291bnQpO1xuK1x0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK31cbitcbitzdGF0aWMgaW50IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3R4cXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbitcdFx0XHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQpXG4re1xuK1x0c3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcdHUxNiBudW1fdHhxID0gcGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcbitcdGludCB0YywgdHhxO1xuK1xuK1x0aWYgKHFvcHQtXHUwMDNlbnVtX3RjIFx1MDAzZSBudW1fdHhxKSB7XG4rXHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcIk51bWJlciBvZiBUQ3MgKCV1KSBleGNlZWRzIGh3IHF1ZXVlcyAldVxcblwiLFxuK1x0XHRcdCAgIHFvcHQtXHUwMDNlbnVtX3RjLCBudW1fdHhxKTtcbitcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4rXHRcdFx0XHQgICAgICAgXCJOdW1iZXIgb2YgVENzICgldSkgZXhjZWVkcyBodyBxdWV1ZXMgJXVcIixcbitcdFx0XHRcdCAgICAgICBxb3B0LVx1MDAzZW51bV90YywgbnVtX3R4cSk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0aWYgKG51bV90eHEgXHUwMDNlIE1BWF9UWFNDSFFfUEVSX0ZVTkMpIHtcbitcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0ICAgXCJOdW1iZXIgb2YgcXVldWVzICgldSkgZXhjZWVkcyBtYXggc2NoZWR1bGVyIHF1ZXVlcyAldVxcblwiLFxuK1x0XHRcdCAgIG51bV90eHEsIE1BWF9UWFNDSFFfUEVSX0ZVTkMpO1xuK1x0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcbitcdFx0XHRcdCAgICAgICBcIk51bWJlciBvZiBxdWV1ZXMgKCV1KSBleGNlZWRzIG1heCBzY2hlZHVsZXIgcXVldWVzICV1XCIsXG4rXHRcdFx0XHQgICAgICAgbnVtX3R4cSwgTUFYX1RYU0NIUV9QRVJfRlVOQyk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0Zm9yICh0YyA9IDA7IHRjIFx1MDAzYyBxb3B0LVx1MDAzZW51bV90YzsgdGMrKykge1xuK1x0XHR1MzIgcWNvdW50ID0gcW9wdC1cdTAwM2Vjb3VudFt0Y107XG4rXG4rXHRcdGZvciAodHhxID0gcW9wdC1cdTAwM2VvZmZzZXRbdGNdO1xuK1x0XHQgICAgIHR4cSBcdTAwM2MgcW9wdC1cdTAwM2VvZmZzZXRbdGNdICsgcWNvdW50OyB0eHErKykge1xuK1x0XHRcdGlmICh0eHEgXHUwMDNlPSBudW1fdHhxKSB7XG4rXHRcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHRcdFx0ICAgXCJtcXByaW86IHR4cSAlZCBleGNlZWRzIG9mZmxvYWQgcXVldWUgY291bnQgJXVcXG5cIixcbitcdFx0XHRcdFx0ICAgdHhxLCBudW1fdHhxKTtcbitcdFx0XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxuK1x0XHRcdFx0XHRcdCAgICAgICBcIm1xcHJpbzogdHhxICVkIGV4Y2VlZHMgb2ZmbG9hZCBxdWV1ZSBjb3VudCAldVwiLFxuK1x0XHRcdFx0XHRcdCAgICAgICB0eHEsIG51bV90eHEpO1xuK1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdFx0fVxuK1x0XHR9XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGJvb2wgb3R4Ml9tcXByaW9fcmF0ZV92YWxpZCh1NjQgcmF0ZV9ieXRlc19wcylcbit7XG4rXHR1NjQgbWJwcztcbitcbitcdGlmICghcmF0ZV9ieXRlc19wcylcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHRpZiAocmF0ZV9ieXRlc19wcyBcdTAwM2MgT1RYMl9NUVBSSU9fTUlOX1JBVEVfQllURVNfUFMpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmIChyYXRlX2J5dGVzX3BzIFx1MDAzZSBPVFgyX01RUFJJT19NQVhfUkFURV9CWVRFU19QUylcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0aWYgKHJhdGVfYnl0ZXNfcHMgXHUwMDNlIGRpdl91NjQoVTY0X01BWCwgOCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdG1icHMgPSBvdHgyX2NvbnZlcnRfcmF0ZShyYXRlX2J5dGVzX3BzKTtcbitcdHJldHVybiBpbG9nMihtYnBzIC8gMikgXHUwMDNjPSBNQVhfUkFURV9FWFBPTkVOVDtcbit9XG4rXG4rc3RhdGljIGludCBvdHgyX3RlYXJkb3duX3RjX21xcHJpbyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4rXHRcdFx0XHQgICBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKVxuK3tcbitcdHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9IFx1MDAyNm1xcHJpby1cdTAwM2Vxb3B0O1xuK1x0Ym9vbCBoYWRfbXFwcmlvID0gcGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdDtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVx1MDAzZW5ldGRldjtcbitcdGJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKG5ldGRldik7XG4rXHRpbnQgZXJyO1xuK1xuK1x0cW9wdC1cdTAwM2VodyA9IDA7XG4rXG4rXHQvKiB0YyBxZGlzYyByZXBsYWNlIHJ1bnMgc2V0dXAgb24gdGhlIG5ldyBtcXByaW8gYmVmb3JlIGRlc3Ryb3lpbmcgdGhlXG4rXHQgKiBvbGQgb25lLiByZXBsYWNlX3NldHVwX2RvbmUgYW5kIFRDX1JPT1RfR1JBRlQgZGlzdGluZ3Vpc2ggc3RhbGVcbitcdCAqIG9sZC1pbnN0YW5jZSB0ZWFyZG93biBmcm9tIGdyYWZ0IGZhaWx1cmUgYWZ0ZXIgc2V0dXAuXG4rXHQgKi9cbitcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5yZXBsYWNlX3NldHVwX2RvbmUgXHUwMDI2XHUwMDI2IHBmdmYtXHUwMDNlY3VyX21xX3NuYXApIHtcbitcdFx0ZXJyID0gMDtcbitcdFx0aWYgKHBmdmYtXHUwMDNlbXFwcmlvLnJlcGxhY2VfZ3JhZnRfZG9uZSlcbitcdFx0XHRvdHgyX21xcHJpb19zbmFwX2NvbW1pdChwZnZmKTtcbitcdFx0ZWxzZVxuK1x0XHRcdGVyciA9IG90eDJfbXFwcmlvX3Jlc3RvcmVfb2xkKHBmdmYpO1xuK1x0XHRvdHgyX21xcHJpb19jbGVhcl9yZXBsYWNlX3N0YXRlKHBmdmYpO1xuK1x0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuK1x0LyogU2tpcCB0aGUgbmV0ZGV2IHJlc3RhcnQgd2hlbiBtcXByaW8gb2ZmbG9hZCB3YXMgbm90IGFjdGl2ZS4gKi9cbitcdGlmICghaGFkX21xcHJpbylcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAoaWZfdXApIHtcbitcdFx0aW50IGRvd25fZXJyLCBlcnI7XG4rXG4rXHRcdGRvd25fZXJyID0gb3R4Ml9tcXByaW9fZG93bihwZnZmKTtcbitcdFx0ZXJyID0gb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYobmV0ZGV2LCBmYWxzZSk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdFx0cmV0dXJuIGRvd25fZXJyO1xuK1x0fVxuK1xuK1x0LyogbmRvX3N0b3AoKSBhbHJlYWR5IGZyZWVkIHRoZSBUWCBzY2hlZHVsZXIgVEwgbm9kZXM7IGRyb3Agc29mdHdhcmVcbitcdCAqIHN0YXRlIG9ubHkuXG4rXHQgKi9cbitcdG90eDJfbXFwcmlvX2NsZWFyX3N3KHBmdmYpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19tcXByaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbitcdFx0XHRcdHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXG4re1xuK1x0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrID0gbXFwcmlvLVx1MDAzZWV4dGFjaztcbitcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcdTAwMjZtcXByaW8tXHUwMDNlcW9wdDtcbitcdGJvb2wgcmVwbGFjaW5nID0gcGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdDtcbitcdGJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKG5ldGRldik7XG4rXHRpbnQgdGMsIHR4cSwgZXJyLCBpO1xuK1xuK1x0aWYgKCFxb3B0LVx1MDAzZWh3KVxuK1x0XHRyZXR1cm4gb3R4Ml90ZWFyZG93bl90Y19tcXByaW8ocGZ2ZiwgbXFwcmlvKTtcbitcbitcdGlmICghaWZfdXApIHtcbitcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwibXFwcmlvOiBzZXR1cCByZXF1aXJlcyBpbnRlcmZhY2UgVVBcXG5cIik7XG4rXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwibXFwcmlvOiBzZXR1cCByZXF1aXJlcyBpbnRlcmZhY2UgVVBcIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdGlmIChtcXByaW8tXHUwMDNlc2hhcGVyICE9IFRDX01RUFJJT19TSEFQRVJfQldfUkFURSkge1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCJVbnN1cHBvcnRlZCBtcXByaW8gc2hhcGVyICUjeFxcblwiLCBtcXByaW8tXHUwMDNlc2hhcGVyKTtcbitcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssIFwiVW5zdXBwb3J0ZWQgbXFwcmlvIHNoYXBlciAlI3hcIixcbitcdFx0XHRcdCAgICAgICBtcXByaW8tXHUwMDNlc2hhcGVyKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0aWYgKCF0ZXN0X2JpdChRT1NfQ0lSX1BJUl9TVVBQT1JULCBcdTAwMjZwZnZmLVx1MDAzZWh3LmNhcF9mbGFnKSkge1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHQgICBcIm1xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgcmVxdWlyZXMgQ0lSK1BJUiBzdXBwb3J0XFxuXCIpO1xuK1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuK1x0XHRcdFx0ICAgXCJtcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIHJlcXVpcmVzIENJUitQSVIgc3VwcG9ydFwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0aWYgKGlzX290eDJfc2RwX3JlcChwZnZmLVx1MDAzZXBkZXYpKSB7XG4rXHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcIm1xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgbm90IHN1cHBvcnRlZCBvbiBTRFAgcmVwXFxuXCIpO1xuK1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuK1x0XHRcdFx0ICAgXCJtcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIG5vdCBzdXBwb3J0ZWQgb24gU0RQIHJlcFwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0aWYgKHBmdmYtXHUwMDNlcGZjX2VuKSB7XG4rXHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuK1x0XHRcdCAgIFwibXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgUEZDIGlzIGVuYWJsZWRcXG5cIik7XG4rXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4rXHRcdFx0XHQgICBcIm1xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFBGQyBpcyBlbmFibGVkXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4rXHRpZiAocGZ2Zi1cdTAwM2V4ZHBfcHJvZykge1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHQgICBcIm1xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFhEUCBpcyBhY3RpdmVcXG5cIik7XG4rXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4rXHRcdFx0XHQgICBcIm1xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFhEUCBpcyBhY3RpdmVcIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdGlmICghbGlzdF9lbXB0eShcdTAwMjZwZnZmLVx1MDAzZXFvcy5xb3NfdHJlZSkpIHtcbitcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0ICAgXCJtcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBIVEIgaXMgYWN0aXZlXFxuXCIpO1xuK1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuK1x0XHRcdFx0ICAgXCJtcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBIVEIgaXMgYWN0aXZlXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4rXHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIHFvcHQtXHUwMDNlbnVtX3RjOyB0YysrKSB7XG4rXHRcdHU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDtcbitcdFx0dTMyIHFjb3VudCA9IHFvcHQtXHUwMDNlY291bnRbdGNdO1xuK1xuK1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcbitcdFx0XHRtaW5fcmF0ZSA9IG1xcHJpby1cdTAwM2VtaW5fcmF0ZVt0Y107XG4rXHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKVxuK1x0XHRcdG1heF9yYXRlID0gbXFwcmlvLVx1MDAzZW1heF9yYXRlW3RjXTtcbitcbitcdFx0aWYgKG1pbl9yYXRlIFx1MDAyNlx1MDAyNiBtYXhfcmF0ZSBcdTAwMjZcdTAwMjYgbWluX3JhdGUgXHUwMDNlIG1heF9yYXRlKSB7XG4rXHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0XHQgICBcIm1pbl9yYXRlICVsbHUgZXhjZWVkcyBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZFxcblwiLFxuK1x0XHRcdFx0ICAgbWluX3JhdGUsIG1heF9yYXRlLCB0Yyk7XG4rXHRcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4rXHRcdFx0XHRcdCAgICAgICBcIm1pbl9yYXRlICVsbHUgZXhjZWVkcyBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZFwiLFxuK1x0XHRcdFx0XHQgICAgICAgbWluX3JhdGUsIG1heF9yYXRlLCB0Yyk7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcbitcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpIHtcbitcdFx0XHRlcnIgPSBvdHgyX21xcHJpb192YWxpZGF0ZV90Y19yYXRlKG5ldGRldiwgZXh0YWNrLCBtaW5fcmF0ZSxcbitcdFx0XHRcdFx0XHRcdCAgIHFjb3VudCwgdGMsIFwibWluXCIpO1xuK1x0XHRcdGlmIChlcnIpXG4rXHRcdFx0XHRyZXR1cm4gZXJyO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKSB7XG4rXHRcdFx0ZXJyID0gb3R4Ml9tcXByaW9fdmFsaWRhdGVfdGNfcmF0ZShuZXRkZXYsIGV4dGFjaywgbWF4X3JhdGUsXG4rXHRcdFx0XHRcdFx0XHQgICBxY291bnQsIHRjLCBcIm1heFwiKTtcbitcdFx0XHRpZiAoZXJyKVxuK1x0XHRcdFx0cmV0dXJuIGVycjtcbitcdFx0fVxuK1xuK1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICFvdHgyX21xcHJpb19yYXRlX3ZhbGlkKG1pbl9yYXRlKSkge1xuK1x0XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuK1x0XHRcdFx0ICAgXCJtcXByaW86IG1pbl9yYXRlICVsbHUgZm9yIHRjICVkIGlzIG91dHNpZGUgaGFyZHdhcmUgbGltaXRzXFxuXCIsXG4rXHRcdFx0XHQgICBtaW5fcmF0ZSwgdGMpO1xuK1x0XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxuK1x0XHRcdFx0XHQgICAgICAgXCJtcXByaW86IG1pbl9yYXRlICVsbHUgZm9yIHRjICVkIGlzIG91dHNpZGUgaGFyZHdhcmUgbGltaXRzXCIsXG4rXHRcdFx0XHRcdCAgICAgICBtaW5fcmF0ZSwgdGMpO1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIW90eDJfbXFwcmlvX3JhdGVfdmFsaWQobWF4X3JhdGUpKSB7XG4rXHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0XHQgICBcIm1xcHJpbzogbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcXG5cIixcbitcdFx0XHRcdCAgIG1heF9yYXRlLCB0Yyk7XG4rXHRcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4rXHRcdFx0XHRcdCAgICAgICBcIm1xcHJpbzogbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcIixcbitcdFx0XHRcdFx0ICAgICAgIG1heF9yYXRlLCB0Yyk7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcdH1cbitcbitcdGVyciA9IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3R4cXMobmV0ZGV2LCBleHRhY2ssIHFvcHQpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdGVyciA9IG90eDJfbXFwcmlvX3N0YWdlX2N1cihwZnZmLCBtcXByaW8pO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdGVyciA9IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KHBmdmYtXHUwMDNlbmV0ZGV2LCB0cnVlKTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdGVyciA9IG90eDJfbXFwcmlvX2FsbG9jX2NhY2hlKHBmdmYsIHJlcGxhY2luZyk7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHQvKiBvdHgyX21xcHJpb191cCgpIG1heSBoYXZlIHJlc3RvcmVkIHRoZSBwcmV2aW91cyBjb25maWd1cmF0aW9uIGR1cmluZ1xuK1x0ICogdGhlIHJlc3RhcnQgYWJvdmUuIENsZWFyIGV2ZXJ5IE1EUSBzaGFwZXIgYmVmb3JlIGFwcGx5aW5nIHRoZSBuZXdcbitcdCAqIG1hcHBpbmcgc28gcXVldWVzIGRyb3BwZWQgZnJvbSB0aGUgVEMgbGF5b3V0IGRvIG5vdCBrZWVwIHN0YWxlXG4rXHQgKiBsaW1pdHMgaW4gaGFyZHdhcmUuXG4rXHQgKi9cbitcdGlmIChvdHgyX21xcHJpb19tZHFfYWxsb2NhdGVkKHBmdmYpKSB7XG4rXHRcdGVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRnb3RvIGNsZWFudXA7XG4rXHR9XG4rXG4rXHRwZnZmLVx1MDAzZW1xcHJpby5mbGFncyA9IG1xcHJpby1cdTAwM2VmbGFncztcbitcbitcdGZvciAodGMgPSAwOyB0YyBcdTAwM2MgcW9wdC1cdTAwM2VudW1fdGM7IHRjKyspIHtcbitcdFx0dTY0IG1pbl9yYXRlID0gMCwgbWF4X3JhdGUgPSAwO1xuK1x0XHR1MzIgcWNvdW50ID0gcW9wdC1cdTAwM2Vjb3VudFt0Y107XG4rXG4rXHRcdC8qIFJhdGVzIG9taXR0ZWQgZnJvbSB0YyBtcXByaW8gYXJlIHBhc3NlZCBhcyB6ZXJvIGFuZCBib3RoIE1EUVxuK1x0XHQgKiBzaGFwZXIgcmVnaXN0ZXJzIGFyZSBwcm9ncmFtbWVkOyBzZWVcbitcdFx0ICogb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcigpLiBNdWx0aS1xdWV1ZSBUQ3Mgd2l0aCByYXRlc1xuK1x0XHQgKiBhcmUgcmVqZWN0ZWQgYWJvdmUuXG4rXHRcdCAqL1xuK1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcbitcdFx0XHRtaW5fcmF0ZSA9IG1xcHJpby1cdTAwM2VtaW5fcmF0ZVt0Y107XG4rXHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKVxuK1x0XHRcdG1heF9yYXRlID0gbXFwcmlvLVx1MDAzZW1heF9yYXRlW3RjXTtcbitcbitcdFx0Zm9yICh0eHEgPSBxb3B0LVx1MDAzZW9mZnNldFt0Y107XG4rXHRcdCAgICAgdHhxIFx1MDAzYyBxb3B0LVx1MDAzZW9mZnNldFt0Y10gKyBxY291bnQ7IHR4cSsrKSB7XG4rXHRcdFx0bmV0ZGV2X2RiZyhuZXRkZXYsXG4rXHRcdFx0XHQgICBcIm1xcHJpbzogdGMgJWQgdHhxICVkIG1pbl9yYXRlICVsbHUgbWF4X3JhdGUgJWxsdVxcblwiLFxuK1x0XHRcdFx0ICAgdGMsIHR4cSwgbWluX3JhdGUsIG1heF9yYXRlKTtcbitcbitcdFx0XHRwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZVt0eHFdID0gbWluX3JhdGU7XG4rXHRcdFx0cGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGVbdHhxXSA9IG1heF9yYXRlO1xuK1xuK1x0XHRcdGVyciA9IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIocGZ2ZiwgdHhxLFxuK1x0XHRcdFx0XHRcdFx0ICAgbWluX3JhdGUsIG1heF9yYXRlKTtcbitcdFx0XHRpZiAoZXJyKVxuK1x0XHRcdFx0Z290byBjbGVhbnVwO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRuZXRkZXZfc2V0X251bV90YyhuZXRkZXYsIHBmdmYtXHUwMDNlY3VyX21xX3NuYXAtXHUwMDNlbnVtX3RjKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBmdmYtXHUwMDNlY3VyX21xX3NuYXAtXHUwMDNlbnVtX3RjOyBpKyspXG4rXHRcdG5ldGRldl9zZXRfdGNfcXVldWUobmV0ZGV2LCBpLCBwZnZmLVx1MDAzZWN1cl9tcV9zbmFwLVx1MDAzZWNvdW50W2ldLFxuK1x0XHRcdFx0ICAgIHFvcHQtXHUwMDNlb2Zmc2V0W2ldKTtcbitcbitcdHFvcHQtXHUwMDNlaHcgPSBUQ19NUVBSSU9fSFdfT0ZGTE9BRF9UQ1M7XG4rXG4rXHRpZiAocmVwbGFjaW5nKSB7XG4rXHRcdHBmdmYtXHUwMDNlbXFwcmlvLnJlcGxhY2Vfc2V0dXBfZG9uZSA9IHRydWU7XG4rXHRcdHBmdmYtXHUwMDNlbXFwcmlvLnJlcGxhY2VfZ3JhZnRfZG9uZSA9IGZhbHNlO1xuK1x0fSBlbHNlIHtcbitcdFx0b3R4Ml9tcXByaW9fc25hcF9jb21taXQocGZ2Zik7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbitcbitjbGVhbnVwOlxuK1x0cW9wdC1cdTAwM2VodyA9IDA7XG4rXHRpZiAocmVwbGFjaW5nKSB7XG4rXHRcdGludCByZXN0b3JlX2VyciA9IG90eDJfbXFwcmlvX3Jlc3RvcmVfb2xkKHBmdmYpO1xuK1xuK1x0XHRvdHgyX21xcHJpb19jbGVhcl9yZXBsYWNlX3N0YXRlKHBmdmYpO1xuK1x0XHRpZiAocmVzdG9yZV9lcnIpIHtcbitcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHRcdCAgIFwibXFwcmlvOiByZXBsYWNlIGZhaWxlZCBhbmQgcHJpb3IgY29uZmlndXJhdGlvbiByb2xsYmFjayBmYWlsZWQ6ICVkXFxuXCIsXG4rXHRcdFx0XHQgICByZXN0b3JlX2Vycik7XG4rXHRcdFx0aWYgKGV4dGFjaylcbitcdFx0XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxuK1x0XHRcdFx0XHRcdCAgICAgICBcIm1xcHJpbzogcmVwbGFjZSBmYWlsZWQgYW5kIHByaW9yIGNvbmZpZ3VyYXRpb24gcm9sbGJhY2sgZmFpbGVkOiAlZFwiLFxuK1x0XHRcdFx0XHRcdCAgICAgICByZXN0b3JlX2Vycik7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0XHQgICBcIm1xcHJpbzogcmVwbGFjZSBmYWlsZWQ7IHByaW9yIGNvbmZpZ3VyYXRpb24gcmVzdG9yZWRcXG5cIik7XG4rXHRcdFx0aWYgKGV4dGFjaylcbitcdFx0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4rXHRcdFx0XHRcdFx0ICAgXCJtcXByaW86IHJlcGxhY2UgZmFpbGVkOyBwcmlvciBjb25maWd1cmF0aW9uIHJlc3RvcmVkXCIpO1xuK1x0XHR9XG4rXHRcdHJldHVybiBlcnIgPyBlcnIgOiAtRUlPO1xuK1x0fVxuK1x0b3R4Ml90ZWFyZG93bl90Y19tcXByaW8ocGZ2ZiwgbXFwcmlvKTtcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19yb290KHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbitcdFx0XHQgICAgICBzdHJ1Y3QgdGNfcm9vdF9xb3B0X29mZmxvYWQgKnJvb3QpXG4re1xuK1x0c3dpdGNoIChyb290LVx1MDAzZWNvbW1hbmQpIHtcbitcdGNhc2UgVENfUk9PVF9HUkFGVDpcbitcdFx0aWYgKHBmdmYtXHUwMDNlbXFwcmlvLnJlcGxhY2Vfc2V0dXBfZG9uZSlcbitcdFx0XHRwZnZmLVx1MDAzZW1xcHJpby5yZXBsYWNlX2dyYWZ0X2RvbmUgPSB0cnVlO1xuK1x0XHRyZXR1cm4gMDtcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbit9XG4rXG4rc3RhdGljIGludCBvdHgyX3NldHVwX3RjX3F1ZXJ5X2NhcHModm9pZCAqdHlwZV9kYXRhKVxuK3tcbitcdHN0cnVjdCB0Y19xdWVyeV9jYXBzX2Jhc2UgKmJhc2UgPSB0eXBlX2RhdGE7XG4rXHRzdHJ1Y3QgdGNfbXFwcmlvX2NhcHMgKmNhcHM7XG4rXG4rXHRpZiAoYmFzZS1cdTAwM2V0eXBlICE9IFRDX1NFVFVQX1FESVNDX01RUFJJTylcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0Y2FwcyA9IGJhc2UtXHUwMDNlY2FwcztcbitcdGNhcHMtXHUwMDNldmFsaWRhdGVfcXVldWVfY291bnRzID0gdHJ1ZTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbiBpbnQgb3R4Ml9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSxcbiBcdFx0ICB2b2lkICp0eXBlX2RhdGEpXG4ge1xuIFx0c3dpdGNoICh0eXBlKSB7XG4rXHRjYXNlIFRDX1FVRVJZX0NBUFM6XG4rXHRcdHJldHVybiBvdHgyX3NldHVwX3RjX3F1ZXJ5X2NhcHModHlwZV9kYXRhKTtcbiBcdGNhc2UgVENfU0VUVVBfQkxPQ0s6XG4gXHRcdHJldHVybiBvdHgyX3NldHVwX3RjX2Jsb2NrKG5ldGRldiwgdHlwZV9kYXRhKTtcbiBcdGNhc2UgVENfU0VUVVBfUURJU0NfSFRCOlxuIFx0XHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19odGIobmV0ZGV2LCB0eXBlX2RhdGEpO1xuK1x0Y2FzZSBUQ19TRVRVUF9RRElTQ19NUVBSSU86XG4rXHRcdHJldHVybiBvdHgyX3NldHVwX3RjX21xcHJpbyhuZXRkZXYsIHR5cGVfZGF0YSk7XG4rXHRjYXNlIFRDX1NFVFVQX1JPT1RfUURJU0M6XG4rXHRcdHJldHVybiBvdHgyX3NldHVwX3RjX3Jvb3QobmV0ZGV2X3ByaXYobmV0ZGV2KSwgdHlwZV9kYXRhKTtcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcdH1cbkBAIC0xNjMyLDYgKzIzNzcsNyBAQCBFWFBPUlRfU1lNQk9MKG90eDJfaW5pdF90Yyk7XG4gdm9pZCBvdHgyX3NodXRkb3duX3RjKHN0cnVjdCBvdHgyX25pYyAqbmljKVxuIHtcbiBcdG90eDJfZGVzdHJveV90Y19mbG93X2xpc3QobmljKTtcbitcdG90eDJfbXFwcmlvX3NuYXBfZGVzdHJveShuaWMpO1xuIH1cbiBFWFBPUlRfU1lNQk9MKG90eDJfc2h1dGRvd25fdGMpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3R4cnguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3R4cnguY1xuaW5kZXggOGQyZDYwN2JjOTJmOS4uZjY1YmE0NGRiNjBiNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3R4cnguY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdHhyeC5jXG5AQCAtMTcxLDcgKzE3MSw3IEBAIHN0YXRpYyB2b2lkIG90eDJfc2V0X3J4dHN0YW1wKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbiBcdHU2NCB0aW1lc3RhbXAsIHRzbnM7XG4gXHRpbnQgZXJyO1xuIFxuLVx0aWYgKCEocGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1JYX1RTVEFNUF9FTkFCTEVEKSlcbitcdGlmICghb3R4Ml90ZXN0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1JYX1RTVEFNUF9FTkFCTEVEKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0dGltZXN0YW1wID0gcGZ2Zi1cdTAwM2VwdHAtXHUwMDNlY29udmVydF9yeF9wdHBfdHN0bXAoKih1NjQgKilkYXRhKTtcbkBAIC0zNzQsMTMgKzM3NCwxMyBAQCBzdGF0aWMgdm9pZCBvdHgyX3Jjdl9wa3RfaGFuZGxlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4gXHR9XG4gXHRvdHgyX3NldF9yeGhhc2gocGZ2ZiwgY3FlLCBza2IpO1xuIFxuLVx0aWYgKCEocGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1JFUF9NT0RFX0VOQUJMRUQpKSB7XG4rXHRpZiAoIW90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19SRVBfTU9ERV9FTkFCTEVEKSkge1xuIFx0XHRza2JfcmVjb3JkX3J4X3F1ZXVlKHNrYiwgY3EtXHUwMDNlY3FfaWR4KTtcbiBcdFx0aWYgKHBmdmYtXHUwMDNlbmV0ZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX1JYQ1NVTSlcbiBcdFx0XHRza2ItXHUwMDNlaXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7XG4gXHR9XG4gXG4tXHRpZiAocGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1RDX01BUktfRU5BQkxFRClcbitcdGlmIChvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfVENfTUFSS19FTkFCTEVEKSlcbiBcdFx0c2tiLVx1MDAzZW1hcmsgPSBwYXJzZS1cdTAwM2VtYXRjaF9pZDtcbiBcbiBcdHNrYl9tYXJrX2Zvcl9yZWN5Y2xlKHNrYik7XG5AQCAtNTEzLDcgKzUxMyw3IEBAIHN0YXRpYyBpbnQgb3R4Ml90eF9uYXBpX2hhbmRsZXIoc3RydWN0IG90eDJfbmljICpwZnZmLFxuIFx0XHQgICAgICgodTY0KWNxLVx1MDAzZWNxX2lkeCBcdTAwM2NcdTAwM2MgMzIpIHwgcHJvY2Vzc2VkX2NxZSk7XG4gXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX1JWVV9FU1dJVENIKVxuLVx0aWYgKHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19SRVBfTU9ERV9FTkFCTEVEKVxuK1x0aWYgKG90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19SRVBfTU9ERV9FTkFCTEVEKSlcbiBcdFx0bmRldiA9IHBmdmYtXHUwMDNlcmVwc1txaWR4XS1cdTAwM2VuZXRkZXY7XG4gXHRlbHNlXG4gI2VuZGlmXG5AQCAtNTI2LDcgKzUyNiw3IEBAIHN0YXRpYyBpbnQgb3R4Ml90eF9uYXBpX2hhbmRsZXIoc3RydWN0IG90eDJfbmljICpwZnZmLFxuIFxuIFx0XHRpZiAocWlkeCBcdTAwM2U9IHBmdmYtXHUwMDNlaHcudHhfcXVldWVzKVxuIFx0XHRcdHFpZHggLT0gcGZ2Zi1cdTAwM2Vody54ZHBfcXVldWVzO1xuLVx0XHRpZiAocGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1JFUF9NT0RFX0VOQUJMRUQpXG4rXHRcdGlmIChvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfUkVQX01PREVfRU5BQkxFRCkpXG4gXHRcdFx0cWlkeCA9IDA7XG4gXHRcdHR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUobmRldiwgcWlkeCk7XG4gXHRcdG5ldGRldl90eF9jb21wbGV0ZWRfcXVldWUodHhxLCB0eF9wa3RzLCB0eF9ieXRlcyk7XG5AQCAtNTk5LDExICs1OTksMTEgQEAgaW50IG90eDJfbmFwaV9oYW5kbGVyKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldClcbiBcbiBcdGlmICh3b3JrZG9uZSBcdTAwM2MgYnVkZ2V0IFx1MDAyNlx1MDAyNiBuYXBpX2NvbXBsZXRlX2RvbmUobmFwaSwgd29ya2RvbmUpKSB7XG4gXHRcdC8qIElmIGludGVyZmFjZSBpcyBnb2luZyBkb3duLCBkb24ndCByZS1lbmFibGUgSVJRICovXG4tXHRcdGlmIChwZnZmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfSU5URl9ET1dOKVxuK1x0XHRpZiAob3R4Ml90ZXN0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX0lOVEZfRE9XTikpXG4gXHRcdFx0cmV0dXJuIHdvcmtkb25lO1xuIFxuIFx0XHQvKiBBZGp1c3QgaXJxIGNvYWxlc2UgdXNpbmcgbmV0X2RpbSAqL1xuLVx0XHRpZiAocGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX0FEUFRWX0lOVF9DT0FMX0VOQUJMRUQpXG4rXHRcdGlmIChvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfQURQVFZfSU5UX0NPQUxfRU5BQkxFRCkpXG4gXHRcdFx0b3R4Ml9hZGp1c3RfYWRhcHRpdmVfY29hbGVzZShwZnZmLCBjcV9wb2xsKTtcbiBcbiBcdFx0aWYgKGxpa2VseShjcSkpXG5AQCAtMTEzNyw3ICsxMTM3LDcgQEAgc3RhdGljIHZvaWQgb3R4Ml9zZXRfdHh0c3RhbXAoc3RydWN0IG90eDJfbmljICpwZnZmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFxuIFx0aWYgKHVubGlrZWx5KCFza2Jfc2hpbmZvKHNrYiktXHUwMDNlZ3NvX3NpemUgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAgKHNrYl9zaGluZm8oc2tiKS1cdTAwM2V0eF9mbGFncyBcdTAwMjYgU0tCVFhfSFdfVFNUQU1QKSkpIHtcbi1cdFx0aWYgKHVubGlrZWx5KHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19QVFBfT05FU1RFUF9TWU5DIFx1MDAyNlx1MDAyNlxuK1x0XHRpZiAodW5saWtlbHkob3R4Ml90ZXN0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1BUUF9PTkVTVEVQX1NZTkMpIFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgICAgb3R4Ml9wdHBfaXNfc3luYyhza2IsIFx1MDAyNnB0cF9vZmZzZXQsIFx1MDAyNnVkcF9jc3VtX2NydCkpKSB7XG4gXHRcdFx0b3JpZ2luX3RzdGFtcCA9IChzdHJ1Y3QgcHRwdjJfdHN0YW1wICopXG4gXHRcdFx0XHRcdCgodTggKilza2ItXHUwMDNlZGF0YSArIHB0cF9vZmZzZXQgK1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml92Zi5jXG5pbmRleCBmNzc2NWUxOWQ3OGE5Li41Zjc5MTUyMzFjYTNhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdmYuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdmYuY1xuQEAgLTYxMCw3ICs2MTAsNyBAQCBzdGF0aWMgaW50IG90eDJ2Zl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuIFx0dmYtXHUwMDNlZGV2ID0gZGV2O1xuIFx0dmYtXHUwMDNlaW9tbXVfZG9tYWluID0gaW9tbXVfZ2V0X2RvbWFpbl9mb3JfZGV2KGRldik7XG4gXG4tXHR2Zi1cdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfSU5URl9ET1dOO1xuK1x0b3R4Ml9zZXRfZmxhZyh2ZiwgT1RYMl9GTEFHX0lOVEZfRE9XTik7XG4gXHRodyA9IFx1MDAyNnZmLVx1MDAzZWh3O1xuIFx0aHctXHUwMDNlcGRldiA9IHZmLVx1MDAzZXBkZXY7XG4gXHRody1cdTAwM2VyeF9xdWV1ZXMgPSBxY291bnQ7XG5AQCAtODI0LDEwICs4MjQsMTAgQEAgc3RhdGljIHZvaWQgb3R4MnZmX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdHZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiBcbiBcdC8qIERpc2FibGUgODAyLjN4IHBhdXNlIGZyYW1lcyAqL1xuLVx0aWYgKHZmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfUlhfUEFVU0VfRU5BQkxFRCB8fFxuLVx0ICAgICh2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1RYX1BBVVNFX0VOQUJMRUQpKSB7XG4tXHRcdHZmLVx1MDAzZWZsYWdzIFx1MDAyNj0gfk9UWDJfRkxBR19SWF9QQVVTRV9FTkFCTEVEO1xuLVx0XHR2Zi1cdTAwM2VmbGFncyBcdTAwMjY9IH5PVFgyX0ZMQUdfVFhfUEFVU0VfRU5BQkxFRDtcbitcdGlmIChvdHgyX3Rlc3RfZmxhZyh2ZiwgT1RYMl9GTEFHX1JYX1BBVVNFX0VOQUJMRUQpIHx8XG4rXHQgICAgb3R4Ml90ZXN0X2ZsYWcodmYsIE9UWDJfRkxBR19UWF9QQVVTRV9FTkFCTEVEKSkge1xuK1x0XHRvdHgyX2NsZWFyX2ZsYWcodmYsIE9UWDJfRkxBR19SWF9QQVVTRV9FTkFCTEVEKTtcbitcdFx0b3R4Ml9jbGVhcl9mbGFnKHZmLCBPVFgyX0ZMQUdfVFhfUEFVU0VfRU5BQkxFRCk7XG4gXHRcdG90eDJfY29uZmlnX3BhdXNlX2ZybSh2Zik7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfeHNrLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml94c2suY1xuaW5kZXggMGU4YTZhNjQ4NmM0YS4uNzgwODU4OGEwMjM0YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3hzay5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml94c2suY1xuQEAgLTk2LDcgKzk2LDcgQEAgc3RhdGljIHZvaWQgb3R4Ml9jbGVhbl91cF9ycShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBxaWR4KVxuIFx0dTY0IGlvdmE7XG4gXG4gXHQvKiBJZiB0aGUgRE9XTiBmbGFnIGlzIHNldCBTUXMgYXJlIGFscmVhZHkgZnJlZWQgKi9cbi1cdGlmIChwZnZmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfSU5URl9ET1dOKVxuK1x0aWYgKG90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19JTlRGX0RPV04pKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRjcSA9IFx1MDAyNnFzZXQtXHUwMDNlY3FbcWlkeF07XG5AQCAtMTcyLDcgKzE3Miw3IEBAIGludCBvdHgyX3hza193YWtldXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHF1ZXVlX2lkLCB1MzIgZmxhZ3MpXG4gXHRzdHJ1Y3Qgb3R4Ml9jcV9wb2xsICpjcV9wb2xsID0gTlVMTDtcbiBcdHN0cnVjdCBvdHgyX3FzZXQgKnFzZXQgPSBcdTAwMjZwZi1cdTAwM2Vxc2V0O1xuIFxuLVx0aWYgKHBmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfSU5URl9ET1dOKVxuK1x0aWYgKG90eDJfdGVzdF9mbGFnKHBmLCBPVFgyX0ZMQUdfSU5URl9ET1dOKSlcbiBcdFx0cmV0dXJuIC1FTkVURE9XTjtcbiBcbiBcdGlmIChxdWV1ZV9pZCBcdTAwM2U9IHBmLVx1MDAzZWh3LnJ4X3F1ZXVlcyB8fCBxdWV1ZV9pZCBcdTAwM2U9IHBmLVx1MDAzZWh3LnR4X3F1ZXVlcylcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmNcbmluZGV4IGYxNjBiMTYxOGVmYTIuLjllZjU1YTZkYjUwYjcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuY1xuQEAgLTExOCw2ICsxMTgsOSBAQCBzdGF0aWMgdm9pZCBvdHgyX2NvbmZpZ19zY2hlZF9zaGFwaW5nKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbiBcdC8qIGNvbmZpZ3VyZSBQSVIgKi9cbiBcdG1heHJhdGUgPSAobm9kZS1cdTAwM2VyYXRlIFx1MDAzZSBub2RlLVx1MDAzZWNlaWwpID8gbm9kZS1cdTAwM2VyYXRlIDogbm9kZS1cdTAwM2VjZWlsO1xuIFxuK1x0LyogNjU1MzYgaXMgdGhlIGtlcm5lbC1zaWRlIGRlZmF1bHQgYnVyc3Qgd2hlbiBIVEIgZG9lcyBub3Qgc3VwcGx5IGFuXG4rXHQgKiBleHBsaWNpdCB2YWx1ZSwgbm90IHRoZSBOSVggaGFyZHdhcmUgbWF4aW11bSAoQ04xMEtfTUFYX0JVUlNUX1NJWkUpLlxuK1x0ICovXG4gXHRjZmctXHUwMDNlcmVndmFsWypudW1fcmVnc10gPVxuIFx0XHRvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwocGZ2ZiwgbWF4cmF0ZSwgNjU1MzYpO1xuIFx0KCpudW1fcmVncykrKztcbkBAIC0xMDg4LDYgKzEwOTEsMTQgQEAgc3RhdGljIGludCBvdHgyX3Fvc19yb290X2FkZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHUxNiBodGJfbWFqX2lkLCB1MTYgaHRiX2RlZmNcbiBcdFx0ICAgXCJUQ19IVEJfQ1JFQVRFOiBoYW5kbGU9MHgleCBkZWZjbHM9MHgleFxcblwiLFxuIFx0XHQgICBodGJfbWFqX2lkLCBodGJfZGVmY2xzKTtcbiBcbitcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KSB7XG4rXHRcdG5ldGRldl9lcnIocGZ2Zi1cdTAwM2VuZXRkZXYsXG4rXHRcdFx0ICAgXCJIVEI6IGNhbm5vdCBlbmFibGUgd2hpbGUgbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGlzIGFjdGl2ZVxcblwiKTtcbitcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbitcdFx0XHRcdCAgIFwiSFRCOiBjYW5ub3QgZW5hYmxlIHdoaWxlIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBpcyBhY3RpdmVcIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbiBcdHJvb3QgPSBvdHgyX3Fvc19hbGxvY19yb290KHBmdmYpO1xuIFx0aWYgKElTX0VSUihyb290KSkge1xuIFx0XHRlcnIgPSBQVFJfRVJSKHJvb3QpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3Nfc3EuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3Nfc3EuY1xuaW5kZXggMjg3MmFkYWJjODMwNS4uNWYwOWUyOTYwMTQ0MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3Nfc3EuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvc19zcS5jXG5AQCAtMjM4LDcgKzIzOCw3IEBAIGludCBvdHgyX3Fvc19lbmFibGVfc3Eoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgcWlkeClcbiBcdHN0cnVjdCBvdHgyX2h3ICpodyA9IFx1MDAyNnBmdmYtXHUwMDNlaHc7XG4gXHRpbnQgcG9vbF9pZCwgc3FfaWR4LCBlcnI7XG4gXG4tXHRpZiAocGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX0lOVEZfRE9XTilcbitcdGlmIChvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfSU5URl9ET1dOKSlcbiBcdFx0cmV0dXJuIC1FUEVSTTtcbiBcbiBcdHNxX2lkeCA9IGh3LVx1MDAzZW5vbl9xb3NfcXVldWVzICsgcWlkeDtcbkBAIC0yODgsNyArMjg4LDcgQEAgdm9pZCBvdHgyX3Fvc19kaXNhYmxlX3NxKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IHFpZHgpXG4gXHRzcV9pZHggPSBody1cdTAwM2Vub25fcW9zX3F1ZXVlcyArIHFpZHg7XG4gXG4gXHQvKiBJZiB0aGUgRE9XTiBmbGFnIGlzIHNldCBTUXMgYXJlIGFscmVhZHkgZnJlZWQgKi9cbi1cdGlmIChwZnZmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfSU5URl9ET1dOKVxuK1x0aWYgKG90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19JTlRGX0RPV04pKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRzcSA9IFx1MDAyNnBmdmYtXHUwMDNlcXNldC5zcVtzcV9pZHhdO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuY1xuaW5kZXggMGY1ZDU2NDJkM2Y3YS4uOGE4YzAwODhmZDIwNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3JlcC5jXG5AQCAtOTMsOSArOTMsOSBAQCBzdGF0aWMgaW50IHJ2dV9yZXBfbWNhbV9mbG93X2luaXQoc3RydWN0IHJlcF9kZXYgKnJlcClcbiBcdHJlcC1cdTAwM2VmbG93X2NmZy1cdTAwM2VtYXhfZmxvd3MgPSBhbGxvY2F0ZWQ7XG4gXG4gXHRpZiAoYWxsb2NhdGVkKSB7XG4tXHRcdHJlcC1cdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfTUNBTV9FTlRSSUVTX0FMTE9DO1xuLVx0XHRyZXAtXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX05UVVBMRV9TVVBQT1JUO1xuLVx0XHRyZXAtXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX1RDX0ZMT1dFUl9TVVBQT1JUO1xuK1x0XHRzZXRfYml0KE9UWDJfRkxBR19NQ0FNX0VOVFJJRVNfQUxMT0MsIFx1MDAyNnJlcC1cdTAwM2VmbGFncyk7XG4rXHRcdHNldF9iaXQoT1RYMl9GTEFHX05UVVBMRV9TVVBQT1JULCBcdTAwMjZyZXAtXHUwMDNlZmxhZ3MpO1xuK1x0XHRzZXRfYml0KE9UWDJfRkxBR19UQ19GTE9XRVJfU1VQUE9SVCwgXHUwMDI2cmVwLVx1MDAzZWZsYWdzKTtcbiBcdH1cbiBcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNnJlcC1cdTAwM2VmbG93X2NmZy1cdTAwM2VmbG93X2xpc3QpO1xuQEAgLTEwOSwxNCArMTA5LDE0IEBAIHN0YXRpYyBpbnQgcnZ1X3JlcF9zZXR1cF90Y19jYihlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSxcbiBcdHN0cnVjdCByZXBfZGV2ICpyZXAgPSBjYl9wcml2O1xuIFx0c3RydWN0IG90eDJfbmljICpwcml2ID0gcmVwLVx1MDAzZW1kZXY7XG4gXG4tXHRpZiAoIShyZXAtXHUwMDNlZmxhZ3MgXHUwMDI2IFJWVV9SRVBfVkZfSU5JVElBTElaRUQpKVxuK1x0aWYgKCF0ZXN0X2JpdChPVFgyX1JFUF9WRl9JTklUSUFMSVpFRCwgXHUwMDI2cmVwLVx1MDAzZWZsYWdzKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRpZiAoIShyZXAtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19UQ19GTE9XRVJfU1VQUE9SVCkpXG4rXHRpZiAoIXRlc3RfYml0KE9UWDJfRkxBR19UQ19GTE9XRVJfU1VQUE9SVCwgXHUwMDI2cmVwLVx1MDAzZWZsYWdzKSlcbiBcdFx0cnZ1X3JlcF9tY2FtX2Zsb3dfaW5pdChyZXApO1xuIFxuIFx0cHJpdi1cdTAwM2VuZXRkZXYgPSByZXAtXHUwMDNlbmV0ZGV2O1xuLVx0cHJpdi1cdTAwM2VmbGFncyA9IHJlcC1cdTAwM2VmbGFncztcbitcdG90eDJfc3luY19mbGFnc19mcm9tX3JlcChwcml2LCBcdTAwMjZyZXAtXHUwMDNlZmxhZ3MpO1xuIFx0cHJpdi1cdTAwM2VwY2lmdW5jID0gcmVwLVx1MDAzZXBjaWZ1bmM7XG4gXHRwcml2LVx1MDAzZWZsb3dfY2ZnID0gcmVwLVx1MDAzZWZsb3dfY2ZnO1xuIFxuQEAgLTMwMyw5ICszMDMsOSBAQCBzdGF0aWMgdm9pZCBydnVfcmVwX3N0YXRlX2V2dF9oYW5kbGVyKHN0cnVjdCBvdHgyX25pYyAqcHJpdixcbiBcdHJlcF9pZCA9IHJ2dV9yZXBfZ2V0X3JlcGlkKHByaXYsIGluZm8tXHUwMDNlcGNpZnVuYyk7XG4gXHRyZXAgPSBwcml2LVx1MDAzZXJlcHNbcmVwX2lkXTtcbiBcdGlmIChpbmZvLVx1MDAzZWV2dF9kYXRhLnZmX3N0YXRlKVxuLVx0XHRyZXAtXHUwMDNlZmxhZ3MgfD0gUlZVX1JFUF9WRl9JTklUSUFMSVpFRDtcbitcdFx0c2V0X2JpdChPVFgyX1JFUF9WRl9JTklUSUFMSVpFRCwgXHUwMDI2cmVwLVx1MDAzZWZsYWdzKTtcbiBcdGVsc2Vcbi1cdFx0cmVwLVx1MDAzZWZsYWdzIFx1MDAyNj0gflJWVV9SRVBfVkZfSU5JVElBTElaRUQ7XG4rXHRcdGNsZWFyX2JpdChPVFgyX1JFUF9WRl9JTklUSUFMSVpFRCwgXHUwMDI2cmVwLVx1MDAzZWZsYWdzKTtcbiB9XG4gXG4gaW50IHJ2dV9ldmVudF91cF9ub3RpZnkoc3RydWN0IG90eDJfbmljICpwZiwgc3RydWN0IHJlcF9ldmVudCAqaW5mbylcbkBAIC0zODIsNyArMzgyLDcgQEAgc3RhdGljIHZvaWQgcnZ1X3JlcF9nZXRfc3RhdHM2NChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIHtcbiBcdHN0cnVjdCByZXBfZGV2ICpyZXAgPSBuZXRkZXZfcHJpdihkZXYpO1xuIFxuLVx0aWYgKCEocmVwLVx1MDAzZWZsYWdzIFx1MDAyNiBSVlVfUkVQX1ZGX0lOSVRJQUxJWkVEKSlcbitcdGlmICghdGVzdF9iaXQoT1RYMl9SRVBfVkZfSU5JVElBTElaRUQsIFx1MDAyNnJlcC1cdTAwM2VmbGFncykpXG4gXHRcdHJldHVybjtcbiBcbiBcdHN0YXRzLVx1MDAzZXJ4X3BhY2tldHMgPSByZXAtXHUwMDNlc3RhdHMucnhfZnJhbWVzO1xuQEAgLTQ1Myw3ICs0NTMsNyBAQCBzdGF0aWMgaW50IHJ2dV9yZXBfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0c3RydWN0IG90eDJfbmljICpwcml2ID0gcmVwLVx1MDAzZW1kZXY7XG4gXHRzdHJ1Y3QgcmVwX2V2ZW50IGV2dCA9IHswfTtcbiBcbi1cdGlmICghKHJlcC1cdTAwM2VmbGFncyBcdTAwMjYgUlZVX1JFUF9WRl9JTklUSUFMSVpFRCkpXG4rXHRpZiAoIXRlc3RfYml0KE9UWDJfUkVQX1ZGX0lOSVRJQUxJWkVELCBcdTAwMjZyZXAtXHUwMDNlZmxhZ3MpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdG5ldGlmX2NhcnJpZXJfb24oZGV2KTtcbkBAIC00NzIsNyArNDcyLDcgQEAgc3RhdGljIGludCBydnVfcmVwX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdHN0cnVjdCBvdHgyX25pYyAqcHJpdiA9IHJlcC1cdTAwM2VtZGV2O1xuIFx0c3RydWN0IHJlcF9ldmVudCBldnQgPSB7MH07XG4gXG4tXHRpZiAoIShyZXAtXHUwMDNlZmxhZ3MgXHUwMDI2IFJWVV9SRVBfVkZfSU5JVElBTElaRUQpKVxuK1x0aWYgKCF0ZXN0X2JpdChPVFgyX1JFUF9WRl9JTklUSUFMSVpFRCwgXHUwMDI2cmVwLVx1MDAzZWZsYWdzKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRuZXRpZl9jYXJyaWVyX29mZihkZXYpO1xuQEAgLTU0Nyw3ICs1NDcsNyBAQCBzdGF0aWMgaW50IHJ2dV9yZXBfbmFwaV9pbml0KHN0cnVjdCBvdHgyX25pYyAqcHJpdixcbiBcdFx0b3R4Ml93cml0ZTY0KHByaXYsIE5JWF9MRl9DSU5UWF9JTlQocWlkeCksIEJJVF9VTEwoMCkpO1xuIFx0XHRvdHgyX3dyaXRlNjQocHJpdiwgTklYX0xGX0NJTlRYX0VOQV9XMVMocWlkeCksIEJJVF9VTEwoMCkpO1xuIFx0fVxuLVx0cHJpdi1cdTAwM2VmbGFncyBcdTAwMjY9IH5PVFgyX0ZMQUdfSU5URl9ET1dOO1xuK1x0b3R4Ml9jbGVhcl9mbGFnKHByaXYsIE9UWDJfRkxBR19JTlRGX0RPV04pO1xuIFx0cmV0dXJuIDA7XG4gXG4gZXJyX2ZyZWVfY2ludHM6XG5AQCAtNjMyLDcgKzYzMiw3IEBAIHZvaWQgcnZ1X3JlcF9kZXN0cm95KHN0cnVjdCBvdHgyX25pYyAqcHJpdilcbiBcdGludCByZXBfaWQ7XG4gXG4gXHRydnVfZXN3aXRjaF9jb25maWcocHJpdiwgZmFsc2UpO1xuLVx0cHJpdi1cdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfSU5URl9ET1dOO1xuK1x0b3R4Ml9zZXRfZmxhZyhwcml2LCBPVFgyX0ZMQUdfSU5URl9ET1dOKTtcbiBcdHJ2dV9yZXBfZnJlZV9jcV9yc3JjKHByaXYpO1xuIFx0Zm9yIChyZXBfaWQgPSAwOyByZXBfaWQgXHUwMDNjIHByaXYtXHUwMDNlcmVwX2NudDsgcmVwX2lkKyspIHtcbiBcdFx0cmVwID0gcHJpdi1cdTAwM2VyZXBzW3JlcF9pZF07XG5AQCAtODAxLDggKzgwMSw4IEBAIHN0YXRpYyBpbnQgcnZ1X3JlcF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuIFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIHByaXYpO1xuIFx0cHJpdi1cdTAwM2VwZGV2ID0gcGRldjtcbiBcdHByaXYtXHUwMDNlZGV2ID0gZGV2O1xuLVx0cHJpdi1cdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfSU5URl9ET1dOO1xuLVx0cHJpdi1cdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfUkVQX01PREVfRU5BQkxFRDtcbitcdG90eDJfc2V0X2ZsYWcocHJpdiwgT1RYMl9GTEFHX0lOVEZfRE9XTik7XG4rXHRvdHgyX3NldF9mbGFnKHByaXYsIE9UWDJfRkxBR19SRVBfTU9ERV9FTkFCTEVEKTtcbiBcbiBcdGh3ID0gXHUwMDI2cHJpdi1cdTAwM2VodztcbiBcdGh3LVx1MDAzZXBkZXYgPSBwZGV2O1xuQEAgLTg0NSw3ICs4NDUsNyBAQCBzdGF0aWMgdm9pZCBydnVfcmVwX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdHN0cnVjdCBvdHgyX25pYyAqcHJpdiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbiBcbiBcdG90eDJfdW5yZWdpc3Rlcl9kbChwcml2KTtcbi1cdGlmICghKHByaXYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19JTlRGX0RPV04pKVxuK1x0aWYgKCFvdHgyX3Rlc3RfZmxhZyhwcml2LCBPVFgyX0ZMQUdfSU5URl9ET1dOKSlcbiBcdFx0cnZ1X3JlcF9kZXN0cm95KHByaXYpO1xuIFx0b3R4Ml9kZXRhY2hfcmVzb3VyY2VzKFx1MDAyNnByaXYtXHUwMDNlbWJveCk7XG4gXHRpZiAocHJpdi1cdTAwM2Vody5sbXRfaW5mbylcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmhcbmluZGV4IDViYzllMmM3ZDgwMGIuLjQ1NzA3YzQzNGQ4OWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuaFxuQEAgLTM3LDggKzM3LDcgQEAgc3RydWN0IHJlcF9kZXYge1xuIFx0c3RydWN0IGRlbGF5ZWRfd29yayBzdGF0c193cms7XG4gXHRzdHJ1Y3QgZGV2bGlua19wb3J0IGRsX3BvcnQ7XG4gXHRzdHJ1Y3Qgb3R4Ml9mbG93X2NvbmZpZ1x0KmZsb3dfY2ZnO1xuLSNkZWZpbmUgUlZVX1JFUF9WRl9JTklUSUFMSVpFRFx0XHRCSVRfVUxMKDApXG4tXHR1NjQgZmxhZ3M7XG4rXHR1bnNpZ25lZCBsb25nXHRcdGZsYWdzO1xuIFx0dTE2IHJlcF9pZDtcbiBcdHUxNiBwY2lmdW5jO1xuIFx0dTggbWFjW0VUSF9BTEVOXTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjQ2OjUzLjY2MDI1MzIwN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU2Mjg4ODIxMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBEZWNpc2lvbiBmb3IgdGhlIE9jdGVvblRYMiBOSUMgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyBmb2N1c2VkIG9uIHdoZXRoZXIgdGhpcyBwYXRjaCBpcyBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLCBhbmQgSSBuZWVkIHRvIGFwcGx5IHRoZSBlc3RhYmxpc2hlZCBndWlkZWxpbmVzLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzLiBUaGUgcGF0Y2ggdG91Y2hlcyBhIGxvdCBvZiBmaWxlcyB3aXRoaW4gdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIG5ldHdvcmtpbmcgZHJpdmVyLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIG1vZGlmeSBjb2RlIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyYCBkaXJlY3RvcnkuIFRoaXMgaXMgaW50ZXJlc3RpbmcsIGFzIHRoaXMgbGlrZWx5IGlzIGEgZHJpdmVyIGZvciBhIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSwgYSBTbWFydE5JQyBvciBwb3RlbnRpYWxseSBhIFNvQy5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgaGFyZHdhcmUgaXMgcmVhbGlzdGljYWxseSByZWFjaGFibGUgZm9yIGZ1enppbmcsIHdoaWNoIG1lYW5zIHRoZSBoYXJkd2FyZSBtdXN0IGJlIGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgZGlyZWN0bHkgYWNjZXNzaWJsZS4gVGhlIGd1aWRlbGluZXMsIHNwZWNpZmljYWxseSBTZWN0aW9uIDIsIGFyZSB2ZXJ5IGNsZWFyIG9uIHRoaXMuIFRoZSBcInN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZVwiIGNsYXVzZSBqdW1wcyBvdXQsIGFuZCBJJ20gbG9va2luZyB0byBjaGVjayB0byBjb25maXJtIHdoZXRoZXIgT2N0ZW9uVFgyIGZhbGxzIGludG8gdGhhdCBjYXRlZ29yeS4gVGhlIHJ1bGUgc3BlY2lmaWNhbGx5IGNhbGxzIG91dCBTbWFydE5JQ3MgYW5kIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzIGFzIHBvdGVudGlhbCBleGNsdXNpb25zLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgbmF0dXJlIG9mIHRoZSBPY3Rlb25UWDIuIElzIGl0IGEgcHJvcHJpZXRhcnkgQVNJQywgYSBOSUMgdGhhdCByZXF1aXJlcyBhIHNwZWNpZmljIGhhcmR3YXJlIHNldHVwLCBvciBjYW4gaXQgYmUgc2ltdWxhdGVkIG9yIGFjY2Vzc2VkIGluIGEgd2F5IHRoYXQgYWxpZ25zIHdpdGggdGhlIGZ1enppbmcgaW5mcmFzdHJ1Y3R1cmU/IFRoaXMgaXMgY3JpdGljYWwuXG5cbkknbGwgbmVlZCB0byByZXNlYXJjaCB3aGF0IHRoZSBgb2N0ZW9udHgyYCByZWZlcnMgdG8sIGFuZCB3aGF0IHRoZSBoYXJkd2FyZSBlbnRhaWxzLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcsIG9yIHNlYXJjaCBmb3IgaW5mb3JtYXRpb24gdG8gdW5kZXJzdGFuZCB3aGF0IGl0IGlzIGFuZCBob3cgYWNjZXNzaWJsZSBpdCBpcy4gSWYgaXQncyBzb21ldGhpbmcgbGlrZSBhbiBtbHhzdywgb3IgaW9uaWMsIEknbGwgbmVlZCB0byBzdHJvbmdseSBjb25zaWRlciB3aGV0aGVyIHRoaXMgaXMgd29ydGggcHVyc3VpbmcsIG9yIGlmIGl0IGlzIHVuZmVhc2libGUgZ2l2ZW4gdGhhdCBJIGRvbid0IGhhdmUgZGlyZWN0IGFjY2VzcyB0byB0aGF0IGhhcmR3YXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTk5NCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjQ2OjU5LjI4OTEzNzg2MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjIyMDQ4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgT0NURU9OVFgyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctNS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjY6Y29uZmlnIE9DVEVPTlRYMl9NQk9YXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy03LVxcdHRyaXN0YXRlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy04LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc6OTpjb25maWcgT0NURU9OVFgyX0FGXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0xMC1cXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCBPY3Rlb25UWDIgUlZVIEFkbWluIEZ1bmN0aW9uIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc9MjI9Y29uZmlnIE5EQ19ESVNfRFlOQU1JQ19DQUNISU5HXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTMwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc6MzE6Y29uZmlnIE9DVEVPTlRYMl9QRlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMzItXFx0dHJpc3RhdGUgXFxcIk1hcnZlbGwgT2N0ZW9uVFgyIE5JQyBQaHlzaWNhbCBGdW5jdGlvbiBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTQ0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc6NDU6Y29uZmlnIE9DVEVPTlRYMl9WRlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctNDYtXFx0dHJpc3RhdGUgXFxcIk1hcnZlbGwgT2N0ZW9uVFgyIE5JQyBWaXJ0dWFsIEZ1bmN0aW9uIGRyaXZlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTI6NDY6NTkuMzc1MzYyOTkxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjk4MjcwOTM2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBLY29uZmlnIGZpbGU6XG5cbioqRGl2aW5nIGludG8gdGhlIE1hcnZlbGwgT2N0ZW9uIFRYMiBFdGhlcm5ldCBEcml2ZXIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBhYm91dCB0byBkaXNzZWN0IGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBNYXJ2ZWxsIE9jdGVvbiBUWDIgRXRoZXJuZXQgZHJpdmVyIGFyZSBkZWZpbmVkLCB3aGljaCBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBpdCBjYW4gYmUgdGFpbG9yZWQgZm9yIGRpZmZlcmVudCBzeXN0ZW1zIGFuZCB1c2UgY2FzZXMuIEkgZXhwZWN0IHRvIGZpbmQgZGVwZW5kZW5jaWVzIG9uIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwsIGhhcmR3YXJlLXNwZWNpZmljIHNldHRpbmdzLCBhbmQgdGhlIHVzdWFsIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGxvZ2ljLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9ja3MgLSB0aGUgZmVhdHVyZXMgdGhhdCBjYW4gYmUgZW5hYmxlZCBvciBkaXNhYmxlZCwgYW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhvc2UgY2hvaWNlcy4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRlcGVuZGVuY2llcyDigJMgd2hhdCBvdGhlciBkcml2ZXJzIG9yIGtlcm5lbCBmZWF0dXJlcyBhcmUgcmVxdWlyZWQgZm9yIHZhcmlvdXMgT2N0ZW9uIFRYMiBFdGhlcm5ldCBmdW5jdGlvbmFsaXRpZXMuIEFyZSB0aGVyZSBzcGVjaWZpYyBib2FyZCBjb25maWd1cmF0aW9ucyBvciBQSFkgb3B0aW9ucyBJIG5lZWQgdG8gY29uc2lkZXI/IEknbGwgYWxzbyBiZSBzY2FubmluZyBmb3IgYW55IHVudXN1YWwgb3IgdmVuZG9yLXNwZWNpZmljIG9wdGlvbnMgdGhhdCBtaWdodCBpbmRpY2F0ZSB1bmlxdWUgTWFydmVsbCBvcHRpbWl6YXRpb25zIG9yIGhhcmR3YXJlIGZlYXR1cmVzLiBNeSBnb2FsIGlzIHRvIGdyYXNwIHRoZSBjb25maWd1cmFiaWxpdHkgb2YgdGhpcyBkcml2ZXIgYW5kIGhvdyBpdCBpbnRlcmZhY2VzIHdpdGggdGhlIG92ZXJhbGwgbmV0d29ya2luZyBzdGFjay4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCB0aGUga2V5IGNvbmZpZ3VyYWJsZSBlbGVtZW50cyBhcmUgYW5kIHRoZWlyIHBvdGVudGlhbCBpbXBhY3RzIG9uIHBlcmZvcm1hbmNlLCBwb3dlciBjb25zdW1wdGlvbiwgYW5kIHN1cHBvcnRlZCBoYXJkd2FyZS4gRmluYWxseSwgSSdsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgYWJvdXQgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb24gcGl0ZmFsbHMgb3IgY29tbW9uIGlzc3VlcyB0aGF0IG1pZ2h0IGFyaXNlIGR1cmluZyBkZXBsb3ltZW50LiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZCFcblxuXG4iLCJJbnB1dFRva2VucyI6Mzc1ODIsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjo0NzowMi4zNTgwNzQ4MDZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDY5ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBNYXJ2ZWxsIFJWVSBOZXR3b3JrIGRyaXZlcnMgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgT0NURU9OVFgyX01CT1hcXG4gICA3OlxcdFxcdHRyaXN0YXRlXFxuICAgODpcXHRcXG4gICA5OlxcdGNvbmZpZyBPQ1RFT05UWDJfQUZcXG4gIDEwOlxcdFxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIE9jdGVvblRYMiBSVlUgQWRtaW4gRnVuY3Rpb24gZHJpdmVyXFxcIlxcbiAgMTE6XFx0XFx0c2VsZWN0IE9DVEVPTlRYMl9NQk9YXFxuICAxMjpcXHRcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG4gIDEzOlxcdFxcdGRlcGVuZHMgb24gKDY0QklUIFxcdTAwMjZcXHUwMDI2IENPTVBJTEVfVEVTVCkgfHwgQVJNNjRcXG4gIDE0OlxcdFxcdGRlcGVuZHMgb24gUENJXFxuICAxNTpcXHRcXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXFxuICAxNjpcXHRcXHRoZWxwXFxuICAxNzpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIE1hcnZlbGwncyBPY3Rlb25UWDIgUmVzb3VyY2UgVmlydHVhbGl6YXRpb25cXG4gIDE4OlxcdFxcdCAgVW5pdCdzIGFkbWluIGZ1bmN0aW9uIG1hbmFnZXIgd2hpY2ggbWFuYWdlcyBhbGwgUlZVIEhXIHJlc291cmNlc1xcbiAgMTk6XFx0XFx0ICBhbmQgcHJvdmlkZXMgYSBtZWRpdW0gdG8gb3RoZXIgUEYvVkZzIHRvIGNvbmZpZ3VyZSBIVy4gU2hvdWxkIGJlXFxuICAyMDpcXHRcXHQgIGVuYWJsZWQgZm9yIG90aGVyIFJWVSBkZXZpY2UgZHJpdmVycyB0byB3b3JrLlxcbiAgMjE6XFx0XFxuICAyMjpcXHRjb25maWcgTkRDX0RJU19EWU5BTUlDX0NBQ0hJTkdcXG4gIDIzOlxcdFxcdGJvb2wgXFxcIkRpc2FibGUgY2FjaGluZyBvZiBkeW5hbWljIGVudHJpZXMgaW4gTkRDXFxcIlxcbiAgMjQ6XFx0XFx0ZGVwZW5kcyBvbiBPQ1RFT05UWDJfQUZcXG4gIDI1OlxcdFxcdGRlZmF1bHQgblxcbiAgMjY6XFx0XFx0aGVscFxcbiAgMjc6XFx0XFx0ICBUaGlzIGNvbmZpZyBvcHRpb24gZGlzYWJsZXMgY2FjaGluZyBvZiBkeW5hbWljIGVudHJpZXMgc3VjaCBhcyBOSVggU1FFc1xcbiAgMjg6XFx0XFx0ICAsIE5QQSBzdGFjayBwYWdlcyBldGMgaW4gTkRDLiBBbHNvIGxvY2tzIGRvd24gTklYIFNRL0NRL1JRL1JTUyBhbmRcXG4gIDI5OlxcdFxcdCAgTlBBIEF1cmEvUG9vbCBjb250ZXh0cy5cXG4gIDMwOlxcdFxcbiAgMzE6XFx0Y29uZmlnIE9DVEVPTlRYMl9QRlxcbiAgMzI6XFx0XFx0dHJpc3RhdGUgXFxcIk1hcnZlbGwgT2N0ZW9uVFgyIE5JQyBQaHlzaWNhbCBGdW5jdGlvbiBkcml2ZXJcXFwiXFxuICAzMzpcXHRcXHRzZWxlY3QgT0NURU9OVFgyX01CT1hcXG4gIDM0OlxcdFxcdHNlbGVjdCBORVRfREVWTElOS1xcbiAgMzU6XFx0XFx0c2VsZWN0IFBBR0VfUE9PTFxcbiAgMzY6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfQUVTIGlmIE1BQ1NFQ1xcbiAgMzc6XFx0XFx0ZGVwZW5kcyBvbiAoNjRCSVQgXFx1MDAyNlxcdTAwMjYgQ09NUElMRV9URVNUKSB8fCBBUk02NFxcbiAgMzg6XFx0XFx0c2VsZWN0IERJTUxJQlxcbiAgMzk6XFx0XFx0ZGVwZW5kcyBvbiBQQ0lcXG4gIDQwOlxcdFxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcXG4gIDQxOlxcdFxcdGRlcGVuZHMgb24gTUFDU0VDIHx8ICFNQUNTRUNcXG4gIDQyOlxcdFxcdGhlbHBcXG4gIDQzOlxcdFxcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgTWFydmVsbCdzIE9jdGVvblRYMiBOSUMgcGh5c2ljYWwgZnVuY3Rpb24uXFxuICA0NDpcXHRcXG4gIDQ1OlxcdGNvbmZpZyBPQ1RFT05UWDJfVkZcXG4gIDQ2OlxcdFxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgVmlydHVhbCBGdW5jdGlvbiBkcml2ZXJcXFwiXFxuICA0NzpcXHRcXHRkZXBlbmRzIG9uIE9DVEVPTlRYMl9QRlxcbiAgNDg6XFx0XFx0aGVscFxcbiAgNDk6XFx0XFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBNYXJ2ZWxsJ3MgT2N0ZW9uVFgyIE5JQyB2aXJ0dWFsIGZ1bmN0aW9uLlxcbiAgNTA6XFx0XFxuICA1MTpcXHRjb25maWcgUlZVX0VTV0lUQ0hcXG4gIDUyOlxcdFxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIFJWVSBFLVN3aXRjaCBzdXBwb3J0XFxcIlxcbiAgNTM6XFx0XFx0ZGVwZW5kcyBvbiBPQ1RFT05UWDJfUEZcXG4gIDU0OlxcdFxcdGRlZmF1bHQgbVxcbiAgNTU6XFx0XFx0aGVscFxcbiAgNTY6XFx0XFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBNYXJ2ZWxsJ3MgUlZVIEUtU3dpdGNoIHRoYXRcXG4gIDU3OlxcdFxcdCAgcHJvdmlkZXMgaW50ZXJuYWwgU1JJT1YgcGFja2V0IHN0ZWVyaW5nIGFuZCBzd2l0Y2hpbmcuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjQ3OjAyLjM1ODE4NDIyNloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjcwOTcxMzI1OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIE9jdGVvblRYMiBEcml2ZXIgZm9yIEZ1enppbmcgRWxpZ2liaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZXNlIGBPQ1RFT05UWDJgIGRyaXZlcnMgYXJlLCBhcyBJIHVuZGVyc3RhbmQsIHNwZWNpZmljIHRvIE1hcnZlbGwncyBPY3Rlb25UWDIgUlZVL1NtYXJ0TklDL1NvQyBoYXJkd2FyZS4gVGhleSdyZSBwaHlzaWNhbCBkcml2ZXJzIGZvciBBUk02NCBvciwgaW4gc29tZSBjYXNlcywgNjQtYml0IGNvbXBpbGF0aW9uIHRlc3RzLiBUaGUga2V5IGhlcmUgaXMgKnBoeXNpY2FsKiBoYXJkd2FyZTsgdGhlc2UgZHJpdmVycyBhcmUgdGllZCB0byBNYXJ2ZWxsJ3MgUENJZSBkZXZpY2VzLiBTdGFuZGFyZCBRRU1VIG9yIEdDRSBWTXMgc2ltcGx5IHdvbid0IGN1dCBpdC4gVGhleSBjYW4ndCBlbXVsYXRlIHRoaXMgaGFyZHdhcmUuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHZlcmlmeSB0aGUgc2NvcGUgb2YgdGhlIG1vZGlmaWNhdGlvbnMuIEEgcXVpY2sgc2NhbiBvZiB0aGUgY2hhbmdlZCBmaWxlcyBjb25maXJtcyB0aGlzLiBJdCBsb29rcyBsaWtlIHRoZSBwYXRjaCB0b3VjaGVzIGEgY29tcHJlaGVuc2l2ZSBzZXQgb2YgZmlsZXMgd2l0aGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9gLiBJdCBpbmNsdWRlcyB0aGluZ3MgbGlrZSBgYWYvcnZ1X25peC5jYCwgYG5pYy9jbjEwa19pcHNlYy5jYCwgYG5pYy9vdHgyX2NvbW1vbi5jYCwgYW5kIHNvIG9uLiBObyBjb3JlIG5ldHdvcmtpbmcsIHNvY2tldCBjb2RlLCBvciBOZXRsaW5rIGNvcmUgaGF2ZSBiZWVuIG1vZGlmaWVkLCBzbyB0aGF0J3MgYSBnb29kIHNpZ24uIFRoZSBjaGFuZ2VzIGFyZSBhbGwgc2VsZi1jb250YWluZWQgd2l0aGluIHRoaXMgZHJpdmVyJ3Mgc3BlY2lmaWMgZGlyZWN0b3J5LlxuXG5Ob3csIGxldCdzIGFwcGx5IHRoZSBjcml0ZXJpYS4gV2UncmUgbG9va2luZyBmb3Igc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLiBMb29raW5nIGF0IHNlY3Rpb24gMiwgdGhlIGV4YW1wbGVzIHByb3ZpZGVkIHRoZXJlLCBgbWx4c3dgLCBgcGRzX2NvcmVgLCBgcWVkYCwgZXRjLiwgYXJlIGFsbCB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcyBvciBTbWFydE5JQyBkcml2ZXJzLiAgVGhlc2UgcmVxdWlyZSBwaHlzaWNhbCBBU0lDcyBvciBQQ0llIGNhcmRzIHRoYXQgYXJlbid0IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoYXQgaXMgZXhhY3RseSB3aGF0IHdlIGhhdmUgaGVyZS4gVGhlIE9jdGVvblRYMiBpcyBhIHZlbmRvci1zcGVjaWZpYyBTbWFydE5JQy9Tb0MgbmV0d29yayBkcml2ZXIsIGFuZCBpdCBuZWVkcyBwaHlzaWNhbCBNYXJ2ZWxsIGhhcmR3YXJlIC8gQVNJQ3MgdG8gd29yay4gIFRoaXMgaXMgY3JpdGljYWwuXG5cblRoaXMgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIGNvZGUgdGhhdCBpcyBpbmhlcmVudGx5IHVucmVhY2hhYmxlIGluIGFueSB0eXBpY2FsIGZ1enppbmcgc2V0dXAgbGlrZSB0aGUgb25lIGluIHN5emthbGxlci4gVGhlIGhhcmR3YXJlIGRlcGVuZGVuY3kgcmVuZGVycyBpdCBtb290LlxuXG5UaGVyZWZvcmUsIHRoZSBgV29ydGhGdXp6aW5nYCBmbGFnIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYC4gVGhlcmUncyBubyBwb2ludCBpbiB0cnlpbmcgdG8gZnV6eiBjb2RlIHRoYXQgd29uJ3QgZXZlciBleGVjdXRlIGluIHRoZSBmdXp6aW5nIGVudmlyb25tZW50LlxuXG5GaW5hbGx5LCBsZXQncyBwcmVwYXJlIHRoZSB0b29sIGNhbGw6XG5cbiogICBgV29ydGhGdXp6aW5nOiBmYWxzZWBcbiogICBgRm9jdXNTeW1ib2xzOiBbXWAgKFdlIGRvbid0IG5lZWQgYW55IGZvY3VzZWQgc3ltYm9scylcbiogICBgRW5hYmxlQ29uZmlnczogW11gIChXZSBkb24ndCBuZWVkIHRvIGVuYWJsZSBhbnl0aGluZylcbiogICBgUmVhc29uaW5nOiBUaGUgbW9kaWZpY2F0aW9ucyBhcmUgZXhjbHVzaXZlbHkgd2l0aGluIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgZHJpdmVyLCByZXF1aXJpbmcgcGh5c2ljYWwgTWFydmVsbCBPY3Rlb25UWDIgLyBDTjEwSyBBU0lDL1BDSWUgaGFyZHdhcmUsIHdoaWNoIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5gXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4NzY3LCJPdXRwdXRUb2tlbnMiOjEzMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk0OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjQ3OjA5LjQ1NTMyMDYxOVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzc5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGV4Y2x1c2l2ZWx5IG1vZGlmaWVzIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBSVlUvTklDIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvKSwgYWRkaW5nIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBzdXBwb3J0IGFuZCByZWZhY3RvcmluZyBmbGFnIGJpdG1hc2sgb3BlcmF0aW9ucy4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgc3BlY2lmaWMgcGh5c2ljYWwgTWFydmVsbCBPY3Rlb25UWDIgLyBDTjEwSyBoYXJkd2FyZS9BU0lDcyBhbmQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIHZpcnR1YWxpemF0aW9uIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3Igc3l6a2FsbGVyIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgZXhjbHVzaXZlbHkgbW9kaWZpZXMgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIFJWVS9OSUMgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi8pLCBhZGRpbmcgbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIHN1cHBvcnQgYW5kIHJlZmFjdG9yaW5nIGZsYWcgYml0bWFzayBvcGVyYXRpb25zLiBUaGlzIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbCBNYXJ2ZWxsIE9jdGVvblRYMiAvIENOMTBLIGhhcmR3YXJlL0FTSUNzIGFuZCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBzeXprYWxsZXIgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjQ3OjA5LjQ1NTM2MjYyOVoiLCJTZXEiOjksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow5wppw[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-11 12:23:37 +0000 UTC FinishedAt: 2026-09-11 12:47:11 +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+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjQ2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGV4Y2x1c2l2ZWx5IG1vZGlmaWVzIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBSVlUvTklDIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvKSwgYWRkaW5nIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBzdXBwb3J0IGFuZCByZWZhY3RvcmluZyBmbGFnIGJpdG1hc2sgb3BlcmF0aW9ucy4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgc3BlY2lmaWMgcGh5c2ljYWwgTWFydmVsbCBPY3Rlb25UWDIgLyBDTjEwSyBoYXJkd2FyZS9BU0lDcyBhbmQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIHZpcnR1YWxpemF0aW9uIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3Igc3l6a2FsbGVyIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjQ2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOTJjMTMzNGNkOWU1MDQ4ZTNjNjUxZjE3MzVhZDAyMDE4YWJjMGQ4NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDEyOjQ2OjUxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguY1xuaW5kZXggZDgwZDJjMDBiZDg0My4uMmQxYWI4Yzc2MWM0MCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jXG5AQCAtMzMxLDggJiM0MzszMzEsMTIgQEAgc3RhdGljIGJvb2wgaXNfdmFsaWRfdHhzY2hxKHN0cnVjdCBydnUgKnJ2dSwgaW50IGJsa2FkZHIsXG4gXHRcdFx0cmV0dXJuIHRydWU7XG4gXHR9XG4gXG4tXHRpZiAobWFwX2Z1bmMgIT0gcGNpZnVuYylcbiYjNDM7XHRpZiAobWFwX2Z1bmMgIT0gcGNpZnVuYykge1xuJiM0MztcdFx0ZGV2X2Vycl9yYXRlbGltaXRlZChydnUtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdCAgICBcJiMzNDtwY2lmdW5jICV4IG1hcCBwY2lmdW5jICV4IG5vdCBlcXVhbCwgbHZsPSV1IHNjaHE9JXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgIHBjaWZ1bmMsIG1hcF9mdW5jLCBsdmwsIHNjaHEpO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0fVxuIFxuIFx0cmV0dXJuIHRydWU7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9jbjEwa19pcHNlYy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL2NuMTBrX2lwc2VjLmNcbmluZGV4IDc3NTQzZDQ3MjM0NWUuLjUwZWM0NTQyYzQxODMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvY24xMGtfaXBzZWMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL2NuMTBrX2lwc2VjLmNcbkBAIC0zMzQsNyAmIzQzOzMzNCw3IEBAIHN0YXRpYyBpbnQgY24xMGtfb3V0Yl9jcHRfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0XHRcdFx0XHRcdENOMTBLX0NQVF9MRl9OUVgoMCkpO1xuIFxuIFx0LyogU2V0IGlwc2VjIG9mZmxvYWQgZW5hYmxlZCBmb3IgdGhpcyBkZXZpY2UgKi9cbi1cdHBmLVx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19JUFNFQ19PRkZMT0FEX0VOQUJMRUQ7XG4mIzQzO1x0b3R4Ml9zZXRfZmxhZyhwZiwgT1RYMl9GTEFHX0lQU0VDX09GRkxPQURfRU5BQkxFRCk7XG4gXG4gXHRjbjEwa19jcHRfZGV2aWNlX3NldF9hdmFpbGFibGUocGYpO1xuIFx0cmV0dXJuIDA7XG5AQCAtMzU2LDcgJiM0MzszNTYsNyBAQCBzdGF0aWMgaW50IGNuMTBrX291dGJfY3B0X2NsZWFuKHN0cnVjdCBvdHgyX25pYyAqcGYpXG4gXHR9XG4gXG4gXHQvKiBTZXQgaXBzZWMgb2ZmbG9hZCBkaXNhYmxlZCBmb3IgdGhpcyBkZXZpY2UgKi9cbi1cdHBmLVx1MDAzZWZsYWdzIFx1MDAyNj0gfk9UWDJfRkxBR19JUFNFQ19PRkZMT0FEX0VOQUJMRUQ7XG4mIzQzO1x0b3R4Ml9jbGVhcl9mbGFnKHBmLCBPVFgyX0ZMQUdfSVBTRUNfT0ZGTE9BRF9FTkFCTEVEKTtcbiBcbiBcdC8qIERpc2FibGUgQ1BUTEYgSW5zdHJ1Y3Rpb24gUXVldWUgKElRKSAqL1xuIFx0Y24xMGtfb3V0Yl9jcHRsZl9pcV9kaXNhYmxlKHBmKTtcbkBAIC04MjAsNyAmIzQzOzgyMCw3IEBAIHZvaWQgY24xMGtfaXBzZWNfY2xlYW4oc3RydWN0IG90eDJfbmljICpwZilcbiBcdGlmICghaXNfZGV2X3N1cHBvcnRfaXBzZWNfb2ZmbG9hZChwZi1cdTAwM2VwZGV2KSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0aWYgKCEocGYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19JUFNFQ19PRkZMT0FEX0VOQUJMRUQpKVxuJiM0MztcdGlmICghb3R4Ml90ZXN0X2ZsYWcocGYsIE9UWDJfRkxBR19JUFNFQ19PRkZMT0FEX0VOQUJMRUQpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRpZiAocGYtXHUwMDNlaXBzZWMuc2Ffd29ya3EpIHtcbkBAIC05NDUsNyAmIzQzOzk0NSw3IEBAIGJvb2wgY24xMGtfaXBzZWNfdHJhbnNtaXQoc3RydWN0IG90eDJfbmljICpwZiwgc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxLFxuIFx0dTE2IGRsZW47XG4gXG4gXHQvKiBDaGVjayBmb3IgSVBTRUMgb2ZmbG9hZCBlbmFibGVkICovXG4tXHRpZiAoIShwZi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX0lQU0VDX09GRkxPQURfRU5BQkxFRCkpXG4mIzQzO1x0aWYgKCFvdHgyX3Rlc3RfZmxhZyhwZiwgT1RYMl9GTEFHX0lQU0VDX09GRkxPQURfRU5BQkxFRCkpXG4gXHRcdGdvdG8gZHJvcDtcbiBcbiBcdHNwID0gc2tiX3NlY19wYXRoKHNrYik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uY1xuaW5kZXggMTc1OTkyMTg4YzE4YS4uNWJhZDI0NjZkYTBjNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uY1xuQEAgLTIyMCwxMCAmIzQzOzIyMCwxMCBAQCBpbnQgb3R4Ml9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdm9pZCAqcClcbiBcdFx0ZXRoX2h3X2FkZHJfc2V0KG5ldGRldiwgYWRkci1cdTAwM2VzYV9kYXRhKTtcbiBcdFx0LyogdXBkYXRlIGRtYWMgZmllbGQgaW4gdmxhbiBvZmZsb2FkIHJ1bGUgKi9cbiBcdFx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19SWF9WTEFOX1NVUFBPUlQpXG4mIzQzO1x0XHQgICAgb3R4Ml90ZXN0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1JYX1ZMQU5fU1VQUE9SVCkpXG4gXHRcdFx0b3R4Ml9pbnN0YWxsX3J4dmxhbl9vZmZsb2FkX2Zsb3cocGZ2Zik7XG4gXHRcdC8qIHVwZGF0ZSBkbWFjIGFkZHJlc3MgaW4gbnR1cGxlIGFuZCBETUFDIGZpbHRlciBsaXN0ICovXG4tXHRcdGlmIChwZnZmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfRE1BQ0ZMVFJfU1VQUE9SVClcbiYjNDM7XHRcdGlmIChvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfRE1BQ0ZMVFJfU1VQUE9SVCkpXG4gXHRcdFx0b3R4Ml9kbWFjZmx0X3VwZGF0ZV9wZm1hY19mbG93KHBmdmYpO1xuIFx0fSBlbHNlIHtcbiBcdFx0cmV0dXJuIC1FUEVSTTtcbkBAIC0yNzUsOCAmIzQzOzI3NSw4IEBAIGludCBvdHgyX2NvbmZpZ19wYXVzZV9mcm0oc3RydWN0IG90eDJfbmljICpwZnZmKVxuIFx0XHRnb3RvIHVubG9jaztcbiBcdH1cbiBcbi1cdHJlcS1cdTAwM2VyeF9wYXVzZSA9ICEhKHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19SWF9QQVVTRV9FTkFCTEVEKTtcbi1cdHJlcS1cdTAwM2V0eF9wYXVzZSA9ICEhKHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19UWF9QQVVTRV9FTkFCTEVEKTtcbiYjNDM7XHRyZXEtXHUwMDNlcnhfcGF1c2UgPSBvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfUlhfUEFVU0VfRU5BQkxFRCk7XG4mIzQzO1x0cmVxLVx1MDAzZXR4X3BhdXNlID0gb3R4Ml90ZXN0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1RYX1BBVVNFX0VOQUJMRUQpO1xuIFx0cmVxLVx1MDAzZXNldCA9IDE7XG4gXG4gXHRlcnIgPSBvdHgyX3N5bmNfbWJveF9tc2coXHUwMDI2cGZ2Zi1cdTAwM2VtYm94KTtcbkBAIC02MTUsNiAmIzQzOzYxNSwxNDIgQEAgdm9pZCBvdHgyX2dldF9tYWNfZnJvbV9hZihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIH1cbiBFWFBPUlRfU1lNQk9MKG90eDJfZ2V0X21hY19mcm9tX2FmKTtcbiBcbiYjNDM7c3RhdGljIGludFxuJiM0MztvdHgyX25peF90bXFfcmVnX3dyaXRlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGNudCxcbiYjNDM7XHRcdCAgICAgICB1NjQgcmVnX2FkZHJbTUFYX1JFR1NfUEVSX01CT1hfTVNHXSxcbiYjNDM7XHRcdCAgICAgICB1NjQgcmVnX3ZhbFtNQVhfUkVHU19QRVJfTUJPWF9NU0ddKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1ib3ggKm1ib3ggPSBcdTAwMjZwZnZmLVx1MDAzZW1ib3g7XG4mIzQzO1x0c3RydWN0IG5peF90eHNjaHFfY29uZmlnICpyZXE7XG4mIzQzO1x0aW50IGksIGVycjtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZtYm94LVx1MDAzZWxvY2spO1xuJiM0MztcdHJlcSA9IG90eDJfbWJveF9hbGxvY19tc2dfbml4X3R4c2NocV9jZmcobWJveCk7XG4mIzQzO1x0aWYgKCFyZXEpIHtcbiYjNDM7XHRcdG11dGV4X3VubG9jayhcdTAwMjZtYm94LVx1MDAzZWxvY2spO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXEtXHUwMDNlbHZsID0gTklYX1RYU0NIX0xWTF9NRFE7XG4mIzQzO1x0cmVxLVx1MDAzZW51bV9yZWdzID0gY250O1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjbnQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRyZXEtXHUwMDNlcmVnW2ldID0gcmVnX2FkZHJbaV07XG4mIzQzO1x0XHRyZXEtXHUwMDNlcmVndmFsW2ldID0gcmVnX3ZhbFtpXTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVyciA9IG90eDJfc3luY19tYm94X21zZyhtYm94KTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4mIzQzO3tcbiYjNDM7XHR1NjQgcmVnX2FkZHJbTUFYX1JFR1NfUEVSX01CT1hfTVNHXTtcbiYjNDM7XHR1NjQgcmVnX3ZhbFtNQVhfUkVHU19QRVJfTUJPWF9NU0ddO1xuJiM0MztcdGludCBlcnIsIHNtcSwgaSwgY250ID0gMDtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcGZ2Zi1cdTAwM2Vody50eHNjaHFfY250W05JWF9UWFNDSF9MVkxfU01RXTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHNtcSA9IHBmdmYtXHUwMDNlaHcudHhzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9TTVFdW2ldO1xuJiM0MztcbiYjNDM7XHRcdHJlZ19hZGRyW2NudF0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTtcbiYjNDM7XHRcdHJlZ192YWxbY250XSA9IDA7XG4mIzQzO1x0XHRjbnQmIzQzOyYjNDM7O1xuJiM0MztcbiYjNDM7XHRcdHJlZ19hZGRyW2NudF0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTtcbiYjNDM7XHRcdHJlZ192YWxbY250XSA9IDA7XG4mIzQzO1x0XHRjbnQmIzQzOyYjNDM7O1xuJiM0MztcbiYjNDM7XHRcdGlmIChjbnQgXHUwMDNjIE1BWF9SRUdTX1BFUl9NQk9YX01TRyAtIDEpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdGVyciA9IG90eDJfbml4X3RtcV9yZWdfd3JpdGUocGZ2ZiwgY250LFxuJiM0MztcdFx0XHRcdFx0ICAgICByZWdfYWRkciwgcmVnX3ZhbCk7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRnb3RvIGZhaWw7XG4mIzQzO1x0XHRjbnQgPSAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGNudCkge1xuJiM0MztcdFx0ZXJyID0gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCBjbnQsXG4mIzQzO1x0XHRcdFx0XHQgICAgIHJlZ19hZGRyLCByZWdfdmFsKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdGdvdG8gZmFpbDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztmYWlsOlxuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbiYjNDM7XHRcdFx0XHQgaW50IHR4cSwgdTY0IG1pbnJhdGUsIHU2NCBtYXhyYXRlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1ib3ggKm1ib3ggPSBcdTAwMjZwZnZmLVx1MDAzZW1ib3g7XG4mIzQzO1x0c3RydWN0IG5peF90eHNjaHFfY29uZmlnICpyZXE7XG4mIzQzO1x0aW50IGVyciwgc21xLCBuID0gMDtcbiYjNDM7XHR1NjQgcmVnX2FkZHJbMl07XG4mIzQzO1x0dTY0IHJlZ192YWxbMl07XG4mIzQzO1x0dTY0IHJhdGU7XG4mIzQzO1xuJiM0MztcdGlmICghbWF4cmF0ZSBcdTAwMjZcdTAwMjYgIW1pbnJhdGUpIHtcbiYjNDM7XHRcdHNtcSA9IG90eDJfZ2V0X3NtcV9pZHgocGZ2ZiwgdHhxKTtcbiYjNDM7XHRcdHJlZ19hZGRyWzBdID0gTklYX0FGX01EUVhfUElSKHNtcSk7XG4mIzQzO1x0XHRyZWdfdmFsWzBdID0gMDtcbiYjNDM7XHRcdHJlZ19hZGRyWzFdID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7XG4mIzQzO1x0XHRyZWdfdmFsWzFdID0gMDtcbiYjNDM7XHRcdHJldHVybiBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIDIsIHJlZ19hZGRyLCByZWdfdmFsKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNtcSA9IG90eDJfZ2V0X3NtcV9pZHgocGZ2ZiwgdHhxKTtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZtYm94LVx1MDAzZWxvY2spO1xuJiM0MztcdHJlcSA9IG90eDJfbWJveF9hbGxvY19tc2dfbml4X3R4c2NocV9jZmcobWJveCk7XG4mIzQzO1x0aWYgKCFyZXEpIHtcbiYjNDM7XHRcdG11dGV4X3VubG9jayhcdTAwMjZtYm94LVx1MDAzZWxvY2spO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXEtXHUwMDNlbHZsID0gTklYX1RYU0NIX0xWTF9NRFE7XG4mIzQzO1xuJiM0MztcdC8qIE1RUFJJTyBleHBvc2VzIG9ubHkgbWluL21heCByYXRlLCBub3QgYnVyc3QuICBQYXNzIGJ1cnN0IDAgc29cbiYjNDM7XHQgKiBvdHgyX2dldF9lZ3Jlc3NfYnVyc3RfY2ZnKCkgcHJvZ3JhbW1lcyB0aGUgbGFyZ2VzdCBidXJzdCB0aGUgTklYXG4mIzQzO1x0ICogZW5jb2Rpbmcgc3VwcG9ydHMgKENOMTBLX01BWF9CVVJTVF9TSVpFIG9uIENOMTBLKS4gIFRoaXMgZGlmZmVyc1xuJiM0MztcdCAqIGZyb20gdGhlIDY1NTM2IGJ5dGUgZGVmYXVsdCB1c2VkIGluIHRoZSBIVEIgcGF0aCwgd2hpY2ggaXMgYVxuJiM0MztcdCAqIGtlcm5lbC1zaWRlIGRlZmF1bHQgd2hlbiBubyBleHBsaWNpdCBidXJzdCBpcyBjb25maWd1cmVkLCBub3QgYVxuJiM0MztcdCAqIGhhcmR3YXJlIGNhcC5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIG1xcHJpbyBzZXR1cCByZXN0YXJ0cyB0aGUgbmV0ZGV2IChvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldiksXG4mIzQzO1x0ICogd2hpY2ggcmVzZXRzIE1EUSBzaGFwZXJzIHRvIHplcm8uICBQcm9ncmFtIGJvdGggUElSIGFuZCBDSVIgb25cbiYjNDM7XHQgKiBldmVyeSB1cGRhdGUgc28gb21pdHRlZCByYXRlcyBhcmUgYXBwbGllZCBleHBsaWNpdGx5IHJhdGhlciB0aGFuXG4mIzQzO1x0ICogcmVseWluZyBvbiBzdGFsZSBoYXJkd2FyZSBzdGF0ZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXEtXHUwMDNlcmVnW25dID0gTklYX0FGX01EUVhfUElSKHNtcSk7XG4mIzQzO1x0aWYgKG1heHJhdGUpIHtcbiYjNDM7XHRcdHJhdGUgPSBvdHgyX2NvbnZlcnRfcmF0ZShtYXhyYXRlKTtcbiYjNDM7XHRcdHJlcS1cdTAwM2VyZWd2YWxbbl0gPSBvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwocGZ2ZiwgcmF0ZSwgMCk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHJlcS1cdTAwM2VyZWd2YWxbbl0gPSAwO1xuJiM0MztcdH1cbiYjNDM7XHRuJiM0MzsmIzQzOztcbiYjNDM7XG4mIzQzO1x0LyogQ0lSJiM0MztQSVIgc3VwcG9ydCBpcyByZXF1aXJlZCBhbmQgY2hlY2tlZCBhdCBtcXByaW8gc2V0dXAuICovXG4mIzQzO1x0cmVxLVx1MDAzZXJlZ1tuXSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpO1xuJiM0MztcdGlmIChtaW5yYXRlKSB7XG4mIzQzO1x0XHRyYXRlID0gb3R4Ml9jb252ZXJ0X3JhdGUobWlucmF0ZSk7XG4mIzQzO1x0XHRyZXEtXHUwMDNlcmVndmFsW25dID0gb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIHJhdGUsIDApO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRyZXEtXHUwMDNlcmVndmFsW25dID0gMDtcbiYjNDM7XHR9XG4mIzQzO1x0biYjNDM7JiM0Mzs7XG4mIzQzO1x0cmVxLVx1MDAzZW51bV9yZWdzID0gbjtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gb3R4Ml9zeW5jX21ib3hfbXNnKG1ib3gpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZtYm94LVx1MDAzZWxvY2spO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4gaW50IG90eDJfdHhzY2hxX2NvbmZpZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBsdmwsIGludCBwcmlvLCBib29sIHR4c2NocV9mb3JfcGZjKVxuIHtcbiBcdHUxNiAoKnNjaHFfbGlzdClbTUFYX1RYU0NIUV9QRVJfRlVOQ107XG5AQCAtNjUxLDcgJiM0Mzs3ODcsMTEgQEAgaW50IG90eDJfdHhzY2hxX2NvbmZpZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBsdmwsIGludCBwcmlvLCBib29sIHR4c2NocV9mb3JcbiBcdFx0XHRcdFx0XHQodTY0KWh3LVx1MDAzZXNtcV9saW5rX3R5cGUpO1xuIFx0XHRyZXEtXHUwMDNlbnVtX3JlZ3MmIzQzOyYjNDM7O1xuIFx0XHQvKiBNRFEgY29uZmlnICovXG4tXHRcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bcHJpb107XG4mIzQzO1x0XHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdClcbiYjNDM7XHRcdFx0cGFyZW50ID0gc2NocV9saXN0W05JWF9UWFNDSF9MVkxfVEw0XVswXTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0cGFyZW50ID0gc2NocV9saXN0W05JWF9UWFNDSF9MVkxfVEw0XVtwcmlvXTtcbiYjNDM7XG4gXHRcdHJlcS1cdTAwM2VyZWdbMV0gPSBOSVhfQUZfTURRWF9QQVJFTlQoc2NocSk7XG4gXHRcdHJlcS1cdTAwM2VyZWd2YWxbMV0gPSBwYXJlbnQgXHUwMDNjXHUwMDNjIDE2O1xuIFx0XHRyZXEtXHUwMDNlbnVtX3JlZ3MmIzQzOyYjNDM7O1xuQEAgLTc3OSw2ICYjNDM7OTE5LDkgQEAgaW50IG90eDJfdHhzY2hfYWxsb2Moc3RydWN0IG90eDJfbmljICpwZnZmKVxuIFx0XHRyZXEtXHUwMDNlc2NocVtOSVhfVFhTQ0hfTFZMX1RMNF0gPSBjaGFuX2NudDtcbiBcdH1cbiBcbiYjNDM7XHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdClcbiYjNDM7XHRcdHJlcS1cdTAwM2VzY2hxW05JWF9UWFNDSF9MVkxfU01RXSA9IHBmdmYtXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXM7XG4mIzQzO1xuIFx0cmMgPSBvdHgyX3N5bmNfbWJveF9tc2coXHUwMDI2cGZ2Zi1cdTAwM2VtYm94KTtcbiBcdGlmIChyYylcbiBcdFx0cmV0dXJuIHJjO1xuQEAgLTg0NCw2ICYjNDM7OTg3LDcgQEAgdm9pZCBvdHgyX3R4c2NocV9zdG9wKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiBcbiBcdC8qIENsZWFyIHRoZSB0eHNjaHEgbGlzdCAqL1xuIFx0Zm9yIChsdmwgPSAwOyBsdmwgXHUwMDNjIE5JWF9UWFNDSF9MVkxfQ05UOyBsdmwmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRwZnZmLVx1MDAzZWh3LnR4c2NocV9jbnRbbHZsXSA9IDA7XG4gXHRcdGZvciAoc2NocSA9IDA7IHNjaHEgXHUwMDNjIE1BWF9UWFNDSFFfUEVSX0ZVTkM7IHNjaHEmIzQzOyYjNDM7KVxuIFx0XHRcdHBmdmYtXHUwMDNlaHcudHhzY2hxX2xpc3RbbHZsXVtzY2hxXSA9IDA7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaFxuaW5kZXggZWVjZWU2MTJiN2IyYy4uNmU3MTMyZjI3YjYyMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaFxuQEAgLTE3LDYgJiM0MzsxNyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc29jL21hcnZlbGwvc2lsaWNvbnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NvYy9tYXJ2ZWxsL29jdGVvbnR4Mi9hc20uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9tYWNzZWMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L3BrdF9zY2hlZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3BrdF9jbHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9kZXZsaW5rLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90aW1lNjQuaFx1MDAzZVxuQEAgLTQ4Myw2ICYjNDM7NDg0LDIzIEBAIHN0cnVjdCBwZl9pcnFfZGF0YSB7XG4gXHRpbnQgbWRldnM7XG4gfTtcbiBcbiYjNDM7c3RydWN0IG1xX29mZmxvYWRfc25hcCB7XG4mIzQzO1x0dTY0IG1pbl9yYXRlW1RDX1FPUFRfTUFYX1FVRVVFXTtcbiYjNDM7XHR1NjQgbWF4X3JhdGVbVENfUU9QVF9NQVhfUVVFVUVdO1xuJiM0MztcdF9fdTggbnVtX3RjO1xuJiM0MztcdF9fdTE2IGNvdW50W1RDX1FPUFRfTUFYX1FVRVVFXTtcbiYjNDM7XHRfX3UxNiBvZmZzZXRbVENfUU9QVF9NQVhfUVVFVUVdO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IG90eDJfbXFwcmlvIHtcbiYjNDM7XHR1MzJcdGZsYWdzO1xuJiM0MztcdHU2NFx0Km1pbl9yYXRlO1xuJiM0MztcdHU2NFx0Km1heF9yYXRlO1xuJiM0MztcdGJvb2xcdHJhdGVfbGltaXQ7XG4mIzQzO1x0Ym9vbFx0cmVwbGFjZV9zZXR1cF9kb25lO1xuJiM0MztcdGJvb2xcdHJlcGxhY2VfZ3JhZnRfZG9uZTtcbiYjNDM7fTtcbiYjNDM7XG4gc3RydWN0IG90eDJfbmljIHtcbiBcdHZvaWQgX19pb21lbVx0XHQqcmVnX2Jhc2U7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZVx0Km5ldGRldjtcbkBAIC00OTEsMzAgJiM0Mzs1MDksMzUgQEAgc3RydWN0IG90eDJfbmljIHtcbiBcdHUxNlx0XHRcdHR4X21heF9wa3RsZW47XG4gXHR1MTZcdFx0XHRyYnNpemU7IC8qIFJlY2VpdmUgYnVmZmVyIHNpemUgKi9cbiBcbi0jZGVmaW5lIE9UWDJfRkxBR19SWF9UU1RBTVBfRU5BQkxFRFx0XHRCSVRfVUxMKDApXG4tI2RlZmluZSBPVFgyX0ZMQUdfVFhfVFNUQU1QX0VOQUJMRURcdFx0QklUX1VMTCgxKVxuLSNkZWZpbmUgT1RYMl9GTEFHX0lOVEZfRE9XTlx0XHRcdEJJVF9VTEwoMilcbi0jZGVmaW5lIE9UWDJfRkxBR19NQ0FNX0VOVFJJRVNfQUxMT0NcdFx0QklUX1VMTCgzKVxuLSNkZWZpbmUgT1RYMl9GTEFHX05UVVBMRV9TVVBQT1JUXHRcdEJJVF9VTEwoNClcbi0jZGVmaW5lIE9UWDJfRkxBR19VQ0FTVF9GTFRSX1NVUFBPUlRcdFx0QklUX1VMTCg1KVxuLSNkZWZpbmUgT1RYMl9GTEFHX1JYX1ZMQU5fU1VQUE9SVFx0XHRCSVRfVUxMKDYpXG4tI2RlZmluZSBPVFgyX0ZMQUdfVkZfVkxBTl9TVVBQT1JUXHRcdEJJVF9VTEwoNylcbi0jZGVmaW5lIE9UWDJfRkxBR19QRl9TSFVURE9XTlx0XHRcdEJJVF9VTEwoOClcbi0jZGVmaW5lIE9UWDJfRkxBR19SWF9QQVVTRV9FTkFCTEVEXHRcdEJJVF9VTEwoOSlcbi0jZGVmaW5lIE9UWDJfRkxBR19UWF9QQVVTRV9FTkFCTEVEXHRcdEJJVF9VTEwoMTApXG4tI2RlZmluZSBPVFgyX0ZMQUdfVENfRkxPV0VSX1NVUFBPUlRcdFx0QklUX1VMTCgxMSlcbi0jZGVmaW5lIE9UWDJfRkxBR19UQ19NQVRDSEFMTF9FR1JFU1NfRU5BQkxFRFx0QklUX1VMTCgxMilcbi0jZGVmaW5lIE9UWDJfRkxBR19UQ19NQVRDSEFMTF9JTkdSRVNTX0VOQUJMRURcdEJJVF9VTEwoMTMpXG4tI2RlZmluZSBPVFgyX0ZMQUdfRE1BQ0ZMVFJfU1VQUE9SVFx0XHRCSVRfVUxMKDE0KVxuLSNkZWZpbmUgT1RYMl9GTEFHX1BUUF9PTkVTVEVQX1NZTkNcdFx0QklUX1VMTCgxNSlcbi0jZGVmaW5lIE9UWDJfRkxBR19BRFBUVl9JTlRfQ09BTF9FTkFCTEVEIEJJVF9VTEwoMTYpXG4tI2RlZmluZSBPVFgyX0ZMQUdfVENfTUFSS19FTkFCTEVEXHRcdEJJVF9VTEwoMTcpXG4tI2RlZmluZSBPVFgyX0ZMQUdfUkVQX01PREVfRU5BQkxFRFx0XHQgQklUX1VMTCgxOClcbi0jZGVmaW5lIE9UWDJfRkxBR19QT1JUX1VQXHRcdFx0QklUX1VMTCgxOSlcbi0jZGVmaW5lIE9UWDJfRkxBR19JUFNFQ19PRkZMT0FEX0VOQUJMRURcdFx0QklUX1VMTCgyMClcbi1cdHU2NFx0XHRcdGZsYWdzO1xuJiM0MzsjZGVmaW5lIE9UWDJfRkxBR19SWF9UU1RBTVBfRU5BQkxFRFx0XHQwXG4mIzQzOyNkZWZpbmUgT1RYMl9GTEFHX1RYX1RTVEFNUF9FTkFCTEVEXHRcdDFcbiYjNDM7I2RlZmluZSBPVFgyX0ZMQUdfSU5URl9ET1dOXHRcdFx0MlxuJiM0MzsjZGVmaW5lIE9UWDJfRkxBR19NQ0FNX0VOVFJJRVNfQUxMT0NcdFx0M1xuJiM0MzsjZGVmaW5lIE9UWDJfRkxBR19OVFVQTEVfU1VQUE9SVFx0XHQ0XG4mIzQzOyNkZWZpbmUgT1RYMl9GTEFHX1VDQVNUX0ZMVFJfU1VQUE9SVFx0XHQ1XG4mIzQzOyNkZWZpbmUgT1RYMl9GTEFHX1JYX1ZMQU5fU1VQUE9SVFx0XHQ2XG4mIzQzOyNkZWZpbmUgT1RYMl9GTEFHX1ZGX1ZMQU5fU1VQUE9SVFx0XHQ3XG4mIzQzOyNkZWZpbmUgT1RYMl9GTEFHX1BGX1NIVVRET1dOXHRcdFx0OFxuJiM0MzsjZGVmaW5lIE9UWDJfRkxBR19SWF9QQVVTRV9FTkFCTEVEXHRcdDlcbiYjNDM7I2RlZmluZSBPVFgyX0ZMQUdfVFhfUEFVU0VfRU5BQkxFRFx0XHQxMFxuJiM0MzsjZGVmaW5lIE9UWDJfRkxBR19UQ19GTE9XRVJfU1VQUE9SVFx0XHQxMVxuJiM0MzsjZGVmaW5lIE9UWDJfRkxBR19UQ19NQVRDSEFMTF9FR1JFU1NfRU5BQkxFRFx0MTJcbiYjNDM7I2RlZmluZSBPVFgyX0ZMQUdfVENfTUFUQ0hBTExfSU5HUkVTU19FTkFCTEVEXHQxM1xuJiM0MzsjZGVmaW5lIE9UWDJfRkxBR19ETUFDRkxUUl9TVVBQT1JUXHRcdDE0XG4mIzQzOyNkZWZpbmUgT1RYMl9GTEFHX1BUUF9PTkVTVEVQX1NZTkNcdFx0MTVcbiYjNDM7I2RlZmluZSBPVFgyX0ZMQUdfQURQVFZfSU5UX0NPQUxfRU5BQkxFRFx0MTZcbiYjNDM7I2RlZmluZSBPVFgyX0ZMQUdfVENfTUFSS19FTkFCTEVEXHRcdDE3XG4mIzQzOyNkZWZpbmUgT1RYMl9GTEFHX1JFUF9NT0RFX0VOQUJMRURcdFx0MThcbiYjNDM7I2RlZmluZSBPVFgyX0ZMQUdfUE9SVF9VUFx0XHRcdDE5XG4mIzQzOyNkZWZpbmUgT1RYMl9GTEFHX0lQU0VDX09GRkxPQURfRU5BQkxFRFx0XHQyMFxuJiM0MzsjZGVmaW5lIE9UWDJfUkVQX1ZGX0lOSVRJQUxJWkVEXHRcdFx0MjFcbiYjNDM7XHR1bnNpZ25lZCBsb25nXHRcdGZsYWdzO1xuIFx0dTY0XHRcdFx0KmNxX29wX2FkZHI7XG4gXG4mIzQzO1x0c3RydWN0IG90eDJfbXFwcmlvXHRtcXByaW87XG4mIzQzO1x0c3RydWN0IG1xX29mZmxvYWRfc25hcFx0KmN1cl9tcV9zbmFwO1xuJiM0MztcdHN0cnVjdCBtcV9vZmZsb2FkX3NuYXBcdCpvbGRfbXFfc25hcDtcbiYjNDM7XG4gXHRzdHJ1Y3QgYnBmX3Byb2dcdFx0KnhkcF9wcm9nO1xuIFx0c3RydWN0IG90eDJfcXNldFx0cXNldDtcbiBcdHN0cnVjdCBvdHgyX2h3XHRcdGh3O1xuQEAgLTU5NCw2ICYjNDM7NjE3LDM0IEBAIHN0cnVjdCBvdHgyX25pYyB7XG4gXHR1bnNpZ25lZCBsb25nXHRcdCphZl94ZHBfemNfcWlkeDtcbiB9O1xuIFxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgb3R4Ml9zZXRfZmxhZyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdW5zaWduZWQgaW50IGZsYWcpXG4mIzQzO3tcbiYjNDM7XHRzZXRfYml0KGZsYWcsIFx1MDAyNm5pYy1cdTAwM2VmbGFncyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBvdHgyX2NsZWFyX2ZsYWcoc3RydWN0IG90eDJfbmljICpuaWMsIHVuc2lnbmVkIGludCBmbGFnKVxuJiM0Mzt7XG4mIzQzO1x0Y2xlYXJfYml0KGZsYWcsIFx1MDAyNm5pYy1cdTAwM2VmbGFncyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBvdHgyX3Rlc3RfZmxhZyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdW5zaWduZWQgaW50IGZsYWcpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gdGVzdF9iaXQoZmxhZywgXHUwMDI2bmljLVx1MDAzZWZsYWdzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG90eDJfc3luY19mbGFnc19mcm9tX3JlcChzdHJ1Y3Qgb3R4Ml9uaWMgKmRzdCxcbiYjNDM7XHRcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nICpzcmNfZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgZmxhZztcbiYjNDM7XG4mIzQzO1x0Zm9yIChmbGFnID0gMDsgZmxhZyBcdTAwM2M9IE9UWDJfUkVQX1ZGX0lOSVRJQUxJWkVEOyBmbGFnJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKHRlc3RfYml0KGZsYWcsIHNyY19mbGFncykpXG4mIzQzO1x0XHRcdHNldF9iaXQoZmxhZywgXHUwMDI2ZHN0LVx1MDAzZWZsYWdzKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0Y2xlYXJfYml0KGZsYWcsIFx1MDAyNmRzdC1cdTAwM2VmbGFncyk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19vdHgyX2xia3ZmKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIHtcbiBcdHJldHVybiAocGRldi1cdTAwM2VkZXZpY2UgPT0gUENJX0RFVklEX09DVEVPTlRYMl9SVlVfQUZWRikgfHxcbkBAIC0xMjQ2LDYgJiM0MzsxMjk3LDExIEBAIGRtYV9hZGRyX3Qgb3R4Ml9kbWFfbWFwX3NrYl9mcmFnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbiBcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgc2VnLCBpbnQgKmxlbik7XG4gdm9pZCBvdHgyX2RtYV91bm1hcF9za2JfZnJhZ3Moc3RydWN0IG90eDJfbmljICpwZnZmLCBzdHJ1Y3Qgc2dfbGlzdCAqc2cpO1xuIGludCBvdHgyX3JlYWRfZnJlZV9zcWUoc3RydWN0IG90eDJfbmljICpwZnZmLCB1MTYgcWlkeCk7XG4mIzQzO2ludCBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IHR4cSxcbiYjNDM7XHRcdFx0XHQgdTY0IG1pbnJhdGUsIHU2NCBtYXhyYXRlKTtcbiYjNDM7aW50IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xuJiM0MztpbnQgb3R4Ml9tcXByaW9fZG93bihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xuJiM0MztpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKTtcbiB2b2lkIG90eDJfcXVldWVfdmZfd29yayhzdHJ1Y3QgbWJveCAqbXcsIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICptYm94X3dxLFxuIFx0XHRcdGludCBmaXJzdCwgaW50IG1kZXZzLCB1NjQgaW50cik7XG4gaW50IG90eDJfZGVsX21jYW1fZmxvd19lbnRyeShzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTE2IGVudHJ5LFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jXG5pbmRleCA5MWQzNDZkMTE0YWY1Li5iN2JkMDgxMjlmYjY0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xuQEAgLTQxMyw2ICYjNDM7NDEzLDEyIEBAIHN0YXRpYyBpbnQgb3R4Ml9kY2JubF9pZWVlX3NldHBmYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWVlZV9wZmMgKnBmYylcbiBcdHU4IG9sZF9wZmNfZW47XG4gXHRpbnQgZXJyO1xuIFxuJiM0MztcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0IFx1MDAyNlx1MDAyNiBwZmMtXHUwMDNlcGZjX2VuKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKGRldixcbiYjNDM7XHRcdFx0ICAgXCYjMzQ7UEZDOiBjYW5ub3QgZW5hYmxlIHdoaWxlIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBpcyBhY3RpdmVcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRvbGRfcGZjX2VuID0gcGZ2Zi1cdTAwM2VwZmNfZW47XG4gXHRwZnZmLVx1MDAzZXBmY19lbiA9IHBmYy1cdTAwM2VwZmNfZW47XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGV2bGluay5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGV2bGluay5jXG5pbmRleCA0YTVjZTBlNjdkZGE4Li44NjNhNWNlZDlhMjZiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGV2bGluay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kZXZsaW5rLmNcbkBAIC0xMDQsNyAmIzQzOzEwNCw3IEBAIHN0YXRpYyBpbnQgb3R4Ml9kbF91Y2FzdF9mbHRfY250X3ZhbGlkYXRlKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLCB1MzIgaWQsXG4gXHRzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBvdHgyX2RsLVx1MDAzZXBmdmY7XG4gXG4gXHQvKiBDaGVjayBmb3IgVU5JQ0FTVCBmaWx0ZXIgc3VwcG9ydCovXG4tXHRpZiAoIShwZnZmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfVUNBU1RfRkxUUl9TVVBQT1JUKSkge1xuJiM0MztcdGlmICghb3R4Ml90ZXN0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1VDQVNUX0ZMVFJfU1VQUE9SVCkpIHtcbiBcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbiBcdFx0XHRcdCAgIFwmIzM0O1VuaWNhc3QgZmlsdGVyIG5vdCBlbmFibGVkXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jXG5pbmRleCA5YmVlMWI5MWVlYWE2Li5lNjNlYWQzYjExMTNlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmNcbkBAIC0yODcsNiAmIzQzOzI4NywxNCBAQCBzdGF0aWMgaW50IG90eDJfc2V0X2NoYW5uZWxzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuJiM0MztcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0IFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAoY2hhbm5lbC1cdTAwM2V0eF9jb3VudCAhPSBwZnZmLVx1MDAzZWh3LnR4X3F1ZXVlcyB8fFxuJiM0MztcdCAgICAgY2hhbm5lbC1cdTAwM2VyeF9jb3VudCAhPSBwZnZmLVx1MDAzZWh3LnJ4X3F1ZXVlcykpIHtcbiYjNDM7XHRcdG5ldGRldl9pbmZvKGRldixcbiYjNDM7XHRcdFx0ICAgIFwmIzM0O05vdCBwZXJtaXR0ZWQgdG8gY2hhbmdlIGNoYW5uZWwgY291bnQgd2hpbGUgTVEgcHJpbyBpcyBhY3RpdmVcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmIChpZl91cClcbiBcdFx0ZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX3N0b3AoZGV2KTtcbiBcbkBAIC0zNTQsMTQgJiM0MzszNjIsMTQgQEAgc3RhdGljIGludCBvdHgyX3NldF9wYXVzZXBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbiBcdGlmIChwYXVzZS1cdTAwM2VyeF9wYXVzZSlcbi1cdFx0cGZ2Zi1cdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfUlhfUEFVU0VfRU5BQkxFRDtcbiYjNDM7XHRcdG90eDJfc2V0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1JYX1BBVVNFX0VOQUJMRUQpO1xuIFx0ZWxzZVxuLVx0XHRwZnZmLVx1MDAzZWZsYWdzIFx1MDAyNj0gfk9UWDJfRkxBR19SWF9QQVVTRV9FTkFCTEVEO1xuJiM0MztcdFx0b3R4Ml9jbGVhcl9mbGFnKHBmdmYsIE9UWDJfRkxBR19SWF9QQVVTRV9FTkFCTEVEKTtcbiBcbiBcdGlmIChwYXVzZS1cdTAwM2V0eF9wYXVzZSlcbi1cdFx0cGZ2Zi1cdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfVFhfUEFVU0VfRU5BQkxFRDtcbiYjNDM7XHRcdG90eDJfc2V0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1RYX1BBVVNFX0VOQUJMRUQpO1xuIFx0ZWxzZVxuLVx0XHRwZnZmLVx1MDAzZWZsYWdzIFx1MDAyNj0gfk9UWDJfRkxBR19UWF9QQVVTRV9FTkFCTEVEO1xuJiM0MztcdFx0b3R4Ml9jbGVhcl9mbGFnKHBmdmYsIE9UWDJfRkxBR19UWF9QQVVTRV9FTkFCTEVEKTtcbiBcbiBcdHJldHVybiBvdHgyX2NvbmZpZ19wYXVzZV9mcm0ocGZ2Zik7XG4gfVxuQEAgLTQ3MCw4ICYjNDM7NDc4LDcgQEAgc3RhdGljIGludCBvdHgyX2dldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0Y21kLVx1MDAzZXJ4X21heF9jb2FsZXNjZWRfZnJhbWVzID0gaHctXHUwMDNlY3FfZWNvdW50X3dhaXQ7XG4gXHRjbWQtXHUwMDNldHhfY29hbGVzY2VfdXNlY3MgPSBody1cdTAwM2VjcV90aW1lX3dhaXQ7XG4gXHRjbWQtXHUwMDNldHhfbWF4X2NvYWxlc2NlZF9mcmFtZXMgPSBody1cdTAwM2VjcV9lY291bnRfd2FpdDtcbi1cdGlmICgocGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX0FEUFRWX0lOVF9DT0FMX0VOQUJMRUQpID09XG4tXHRcdFx0T1RYMl9GTEFHX0FEUFRWX0lOVF9DT0FMX0VOQUJMRUQpIHtcbiYjNDM7XHRpZiAob3R4Ml90ZXN0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX0FEUFRWX0lOVF9DT0FMX0VOQUJMRUQpKSB7XG4gXHRcdGNtZC1cdTAwM2V1c2VfYWRhcHRpdmVfcnhfY29hbGVzY2UgPSAxO1xuIFx0XHRjbWQtXHUwMDNldXNlX2FkYXB0aXZlX3R4X2NvYWxlc2NlID0gMTtcbiBcdH0gZWxzZSB7XG5AQCAtNTAyLDE1ICYjNDM7NTA5LDE0IEBAIHN0YXRpYyBpbnQgb3R4Ml9zZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdH1cbiBcbiBcdC8qIENoZWNrIGFuZCB1cGRhdGUgY29hbGVzY2Ugc3RhdHVzICovXG4tXHRpZiAoKHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19BRFBUVl9JTlRfQ09BTF9FTkFCTEVEKSA9PVxuLVx0XHRcdE9UWDJfRkxBR19BRFBUVl9JTlRfQ09BTF9FTkFCTEVEKSB7XG4mIzQzO1x0aWYgKG90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19BRFBUVl9JTlRfQ09BTF9FTkFCTEVEKSkge1xuIFx0XHRwcml2X2NvYWxlc2NlX3N0YXR1cyA9IDE7XG4gXHRcdGlmICghZWMtXHUwMDNldXNlX2FkYXB0aXZlX3J4X2NvYWxlc2NlKVxuLVx0XHRcdHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+T1RYMl9GTEFHX0FEUFRWX0lOVF9DT0FMX0VOQUJMRUQ7XG4mIzQzO1x0XHRcdG90eDJfY2xlYXJfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfQURQVFZfSU5UX0NPQUxfRU5BQkxFRCk7XG4gXHR9IGVsc2Uge1xuIFx0XHRwcml2X2NvYWxlc2NlX3N0YXR1cyA9IDA7XG4gXHRcdGlmIChlYy1cdTAwM2V1c2VfYWRhcHRpdmVfcnhfY29hbGVzY2UpXG4tXHRcdFx0cGZ2Zi1cdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfQURQVFZfSU5UX0NPQUxfRU5BQkxFRDtcbiYjNDM7XHRcdFx0b3R4Ml9zZXRfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfQURQVFZfSU5UX0NPQUxfRU5BQkxFRCk7XG4gXHR9XG4gXG4gXHQvKiAmIzM5O2NxX3RpbWVfd2FpdCYjMzk7IGlzIDhiaXQgYW5kIGlzIGluIG11bHRpcGxlIG9mIDEwMG5zLFxuQEAgLTU1Niw4ICYjNDM7NTYyLDcgQEAgc3RhdGljIGludCBvdHgyX3NldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0ICogJiMzOTtvbiYjMzk7IHRvICYjMzk7b2ZmJiMzOTsuXG4gXHQgKi9cbiBcdGlmIChwcml2X2NvYWxlc2NlX3N0YXR1cyBcdTAwMjZcdTAwMjZcbi1cdCAgICAoKHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19BRFBUVl9JTlRfQ09BTF9FTkFCTEVEKSAhPVxuLVx0ICAgICBPVFgyX0ZMQUdfQURQVFZfSU5UX0NPQUxfRU5BQkxFRCkpIHtcbiYjNDM7XHQgICAgKCFvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfQURQVFZfSU5UX0NPQUxfRU5BQkxFRCkpKSB7XG4gXHRcdGh3LVx1MDAzZWNxX3RpbWVfd2FpdCA9IENRX1RJTUVSX1RIUkVTSF9ERUZBVUxUO1xuIFx0XHRody1cdTAwM2VjcV9lY291bnRfd2FpdCA9IENRX0NRRV9USFJFU0hfREVGQVVMVDtcbiBcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9mbG93cy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZmxvd3MuY1xuaW5kZXggOTlkNzhmYzVhMmM0YS4uYjhmZjQ5ZjBmNmUzYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2Zsb3dzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2Zsb3dzLmNcbkBAIC0yNzAsOSAmIzQzOzI3MCw5IEBAIGludCBvdHgyX2FsbG9jX21jYW1fZW50cmllcyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHUxNiBjb3VudClcbiBcdGZsb3dfY2ZnLVx1MDAzZW1heF9mbG93cyA9IGFsbG9jYXRlZDtcbiBcbiBcdGlmIChhbGxvY2F0ZWQpIHtcbi1cdFx0cGZ2Zi1cdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfTUNBTV9FTlRSSUVTX0FMTE9DO1xuLVx0XHRwZnZmLVx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19OVFVQTEVfU1VQUE9SVDtcbi1cdFx0cGZ2Zi1cdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfVENfRkxPV0VSX1NVUFBPUlQ7XG4mIzQzO1x0XHRvdHgyX3NldF9mbGFnKHBmdmYsIE9UWDJfRkxBR19NQ0FNX0VOVFJJRVNfQUxMT0MpO1xuJiM0MztcdFx0b3R4Ml9zZXRfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfTlRVUExFX1NVUFBPUlQpO1xuJiM0MztcdFx0b3R4Ml9zZXRfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfVENfRkxPV0VSX1NVUFBPUlQpO1xuIFx0fVxuIFxuIFx0aWYgKGFsbG9jYXRlZCAhPSBjb3VudClcbkBAIC0zNzYsNyAmIzQzOzM3Niw3IEBAIGludCBvdHgyX21jYW1fZW50cnlfaW5pdChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4gXHRmbG93X2NmZy1cdTAwM2V1bmljYXN0X29mZnNldCA9IHZmX3ZsYW5fbWF4X2Zsb3dzO1xuIFx0Zmxvd19jZmctXHUwMDNlcnhfdmxhbl9vZmZzZXQgPSBmbG93X2NmZy1cdTAwM2V1bmljYXN0X29mZnNldCAmIzQzO1xuIFx0XHRcdFx0XHRmbG93X2NmZy1cdTAwM2V1Y2FzdF9mbHRfY250O1xuLVx0cGZ2Zi1cdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfVUNBU1RfRkxUUl9TVVBQT1JUO1xuJiM0MztcdG90eDJfc2V0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1VDQVNUX0ZMVFJfU1VQUE9SVCk7XG4gXG4gXHQvKiBDaGVjayBpZiBOUENfRE1BQyBmaWVsZCBpcyBzdXBwb3J0ZWRcbiBcdCAqIGJ5IHRoZSBta2V4IHByb2ZpbGUgYmVmb3JlIHNldHRpbmcgVkxBTiBzdXBwb3J0IGZsYWcuXG5AQCAtNDAxLDExICYjNDM7NDAxLDExIEBAIGludCBvdHgyX21jYW1fZW50cnlfaW5pdChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4gXHR9XG4gXG4gXHRpZiAoZnJzcC1cdTAwM2VlbmFibGUpIHtcbi1cdFx0cGZ2Zi1cdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfUlhfVkxBTl9TVVBQT1JUO1xuLVx0XHRwZnZmLVx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19WRl9WTEFOX1NVUFBPUlQ7XG4mIzQzO1x0XHRvdHgyX3NldF9mbGFnKHBmdmYsIE9UWDJfRkxBR19SWF9WTEFOX1NVUFBPUlQpO1xuJiM0MztcdFx0b3R4Ml9zZXRfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfVkZfVkxBTl9TVVBQT1JUKTtcbiBcdH1cbiBcbi1cdHBmdmYtXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX01DQU1fRU5UUklFU19BTExPQztcbiYjNDM7XHRvdHgyX3NldF9mbGFnKHBmdmYsIE9UWDJfRkxBR19NQ0FNX0VOVFJJRVNfQUxMT0MpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBmdmYtXHUwMDNlbWJveC5sb2NrKTtcbiBcbiBcdC8qIEFsbG9jYXRlIGVudHJpZXMgZm9yIE50dXBsZSBmaWx0ZXJzICovXG5AQCAtNDE1LDcgJiM0Mzs0MTUsNyBAQCBpbnQgb3R4Ml9tY2FtX2VudHJ5X2luaXQoc3RydWN0IG90eDJfbmljICpwZnZmKVxuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbi1cdHBmdmYtXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX1RDX0ZMT1dFUl9TVVBQT1JUO1xuJiM0MztcdG90eDJfc2V0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1RDX0ZMT1dFUl9TVVBQT1JUKTtcbiBcbiBcdHJlZmNvdW50X3NldChcdTAwMjZmbG93X2NmZy1cdTAwM2VtYXJrX2Zsb3dzLCAxKTtcbiBcdHJldHVybiAwO1xuQEAgLTQ3OSw3ICYjNDM7NDc5LDcgQEAgaW50IG90eDJfbWNhbV9mbG93X2luaXQoc3RydWN0IG90eDJfbmljICpwZilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbiBcdC8qIENoZWNrIGlmIE1DQU0gZW50cmllcyBhcmUgYWxsb2NhdGUgb3Igbm90ICovXG4tXHRpZiAoIShwZi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1VDQVNUX0ZMVFJfU1VQUE9SVCkpXG4mIzQzO1x0aWYgKCFvdHgyX3Rlc3RfZmxhZyhwZiwgT1RYMl9GTEFHX1VDQVNUX0ZMVFJfU1VQUE9SVCkpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0cGYtXHUwMDNlbWFjX3RhYmxlID0gZGV2bV9remFsbG9jKHBmLVx1MDAzZWRldiwgc2l6ZW9mKHN0cnVjdCBvdHgyX21hY190YWJsZSlcbkBAIC01MDEsNyAmIzQzOzUwMSw3IEBAIGludCBvdHgyX21jYW1fZmxvd19pbml0KHN0cnVjdCBvdHgyX25pYyAqcGYpXG4gXHRpZiAoIXBmLVx1MDAzZWZsb3dfY2ZnLVx1MDAzZWJtYXBfdG9fZG1hY2luZGV4KVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdHBmLVx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19ETUFDRkxUUl9TVVBQT1JUO1xuJiM0MztcdG90eDJfc2V0X2ZsYWcocGYsIE9UWDJfRkxBR19ETUFDRkxUUl9TVVBQT1JUKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC01MjEsNyAmIzQzOzUyMSw3IEBAIHN0YXRpYyBpbnQgb3R4Ml9kb19hZGRfbWFjZmlsdGVyKHN0cnVjdCBvdHgyX25pYyAqcGYsIGNvbnN0IHU4ICptYWMpXG4gXHRzdHJ1Y3QgbnBjX2luc3RhbGxfZmxvd19yZXEgKnJlcTtcbiBcdGludCBlcnIsIGk7XG4gXG4tXHRpZiAoIShwZi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1VDQVNUX0ZMVFJfU1VQUE9SVCkpXG4mIzQzO1x0aWYgKCFvdHgyX3Rlc3RfZmxhZyhwZiwgT1RYMl9GTEFHX1VDQVNUX0ZMVFJfU1VQUE9SVCkpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIFx0LyogZG9udCBoYXZlIGZyZWUgbWNhbSBlbnRyaWVzIG9yIHVjIGxpc3QgaXMgZ3JlYXRlciB0aGFuIGFsbG90ZWQgKi9cbkBAIC0xMTY3LDcgJiM0MzsxMTY3LDcgQEAgc3RhdGljIGludCBvdHgyX2lzX2Zsb3dfcnVsZV9kbWFjZmlsdGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbiBcdHU2NCByaW5nX2Nvb2tpZSA9IGZzcC1cdTAwM2VyaW5nX2Nvb2tpZTtcbiBcdHUzMiBmbG93X3R5cGU7XG4gXG4tXHRpZiAoIShwZnZmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfRE1BQ0ZMVFJfU1VQUE9SVCkpXG4mIzQzO1x0aWYgKCFvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfRE1BQ0ZMVFJfU1VQUE9SVCkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdGZsb3dfdHlwZSA9IGZzcC1cdTAwM2VmbG93X3R5cGUgXHUwMDI2IH4oRkxPV19FWFQgfCBGTE9XX01BQ19FWFQgfCBGTE9XX1JTUyk7XG5AQCAtMTM2NCw3ICYjNDM7MTM2NCw3IEBAIGludCBvdHgyX2FkZF9mbG93KHN0cnVjdCBvdHgyX25pYyAqcGZ2Ziwgc3RydWN0IGV0aHRvb2xfcnhuZmMgKm5mYylcbiBcdH1cbiBcbiBcdHJpbmcgPSBldGh0b29sX2dldF9mbG93X3NwZWNfcmluZyhmc3AtXHUwMDNlcmluZ19jb29raWUpO1xuLVx0aWYgKCEocGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX05UVVBMRV9TVVBQT1JUKSlcbiYjNDM7XHRpZiAoIW90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19OVFVQTEVfU1VQUE9SVCkpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIFx0LyogTnVtYmVyIG9mIHF1ZXVlcyBvbiBhIFZGIGNhbiBiZSBncmVhdGVyIG9yIGxlc3MgdGhhblxuQEAgLTE1OTYsNyAmIzQzOzE1OTYsNyBAQCBpbnQgb3R4Ml9kZXN0cm95X250dXBsZV9mbG93cyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4gXHRzdHJ1Y3Qgb3R4Ml9mbG93ICppdGVyLCAqdG1wO1xuIFx0aW50IGVycjtcbiBcbi1cdGlmICghKHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19OVFVQTEVfU1VQUE9SVCkpXG4mIzQzO1x0aWYgKCFvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfTlRVUExFX1NVUFBPUlQpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdGlmICghZmxvd19jZmctXHUwMDNlbWF4X2Zsb3dzKVxuQEAgLTE2MjksNyAmIzQzOzE2MjksNyBAQCBpbnQgb3R4Ml9kZXN0cm95X21jYW1fZmxvd3Moc3RydWN0IG90eDJfbmljICpwZnZmKVxuIFx0c3RydWN0IG90eDJfZmxvdyAqaXRlciwgKnRtcDtcbiBcdGludCBlcnI7XG4gXG4tXHRpZiAoIShwZnZmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfTUNBTV9FTlRSSUVTX0FMTE9DKSlcbiYjNDM7XHRpZiAoIW90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19NQ0FNX0VOVFJJRVNfQUxMT0MpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdC8qIHJlbW92ZSBhbGwgZmxvd3MgKi9cbkBAIC0xNjU4LDcgJiM0MzsxNjU4LDcgQEAgaW50IG90eDJfZGVzdHJveV9tY2FtX2Zsb3dzKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiBcdFx0cmV0dXJuIGVycjtcbiBcdH1cbiBcbi1cdHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+T1RYMl9GTEFHX01DQU1fRU5UUklFU19BTExPQztcbiYjNDM7XHRvdHgyX2NsZWFyX2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX01DQU1fRU5UUklFU19BTExPQyk7XG4gXHRmbG93X2NmZy1cdTAwM2VtYXhfZmxvd3MgPSAwO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBmdmYtXHUwMDNlbWJveC5sb2NrKTtcbiBcbkBAIC0xNzIxLDcgJiM0MzsxNzIxLDcgQEAgaW50IG90eDJfZW5hYmxlX3J4dmxhbihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmLCBib29sIGVuYWJsZSlcbiBcdGludCBlcnI7XG4gXG4gXHQvKiBEb250IGhhdmUgZW5vdWdoIG1jYW0gZW50cmllcyAqL1xuLVx0aWYgKCEocGYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19SWF9WTEFOX1NVUFBPUlQpKVxuJiM0MztcdGlmICghb3R4Ml90ZXN0X2ZsYWcocGYsIE9UWDJfRkxBR19SWF9WTEFOX1NVUFBPUlQpKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiBcdGlmIChlbmFibGUpIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuY1xuaW5kZXggYzBlMjEwMGRlMWQ5My4uMWUxN2Y4ZDQ5ZmQ0NCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNcbkBAIC04NzksNyAmIzQzOzg3OSw3IEBAIHN0YXRpYyB2b2lkIG90eDJfaGFuZGxlX2xpbmtfZXZlbnQoc3RydWN0IG90eDJfbmljICpwZilcbiBcdHN0cnVjdCBjZ3hfbGlua191c2VyX2luZm8gKmxpbmZvID0gXHUwMDI2cGYtXHUwMDNlbGluZm87XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGYtXHUwMDNlbmV0ZGV2O1xuIFxuLVx0aWYgKHBmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfUE9SVF9VUClcbiYjNDM7XHRpZiAob3R4Ml90ZXN0X2ZsYWcocGYsIE9UWDJfRkxBR19QT1JUX1VQKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0cHJfaW5mbyhcJiMzNDslcyBOSUMgTGluayBpcyAlcyAlZCBNYnBzICVzIGR1cGxleFxcblwmIzM0OywgbmV0ZGV2LVx1MDAzZW5hbWUsXG5AQCAtOTA3LDExICYjNDM7OTA3LDExIEBAIHN0YXRpYyBpbnQgb3R4Ml9tYm94X3VwX2hhbmRsZXJfcmVwX2V2ZW50X3VwX25vdGlmeShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmLFxuIFxuIFx0aWYgKGluZm8tXHUwMDNlZXZlbnQgPT0gUlZVX0VWRU5UX1BPUlRfU1RBVEUpIHtcbiBcdFx0aWYgKGluZm8tXHUwMDNlZXZ0X2RhdGEucG9ydF9zdGF0ZSkge1xuLVx0XHRcdHBmLVx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19QT1JUX1VQO1xuJiM0MztcdFx0XHRvdHgyX3NldF9mbGFnKHBmLCBPVFgyX0ZMQUdfUE9SVF9VUCk7XG4gXHRcdFx0bmV0aWZfY2Fycmllcl9vbihuZXRkZXYpO1xuIFx0XHRcdG5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMobmV0ZGV2KTtcbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHRwZi1cdTAwM2VmbGFncyBcdTAwMjY9IH5PVFgyX0ZMQUdfUE9SVF9VUDtcbiYjNDM7XHRcdFx0b3R4Ml9jbGVhcl9mbGFnKHBmLCBPVFgyX0ZMQUdfUE9SVF9VUCk7XG4gXHRcdFx0bmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5ldGRldik7XG4gXHRcdFx0bmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTtcbiBcdFx0fVxuQEAgLTk1Myw3ICYjNDM7OTUzLDcgQEAgaW50IG90eDJfbWJveF91cF9oYW5kbGVyX2NneF9saW5rX2V2ZW50KHN0cnVjdCBvdHgyX25pYyAqcGYsXG4gXHR9XG4gXG4gXHQvKiBpbnRlcmZhY2UgaGFzIG5vdCBiZWVuIGZ1bGx5IGNvbmZpZ3VyZWQgeWV0ICovXG4tXHRpZiAocGYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19JTlRGX0RPV04pXG4mIzQzO1x0aWYgKG90eDJfdGVzdF9mbGFnKHBmLCBPVFgyX0ZMQUdfSU5URl9ET1dOKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRvdHgyX2hhbmRsZV9saW5rX2V2ZW50KHBmKTtcbkBAIC0xODI4LDcgJiM0MzsxODI4LDcgQEAgdm9pZCBvdHgyX2ZyZWVfaHdfcmVzb3VyY2VzKHN0cnVjdCBvdHgyX25pYyAqcGYpXG4gXHRmcmVlX3JlcSA9IG90eDJfbWJveF9hbGxvY19tc2dfbml4X2xmX2ZyZWUobWJveCk7XG4gXHRpZiAoZnJlZV9yZXEpIHtcbiBcdFx0ZnJlZV9yZXEtXHUwMDNlZmxhZ3MgPSBOSVhfTEZfRElTQUJMRV9GTE9XUyB8IE5JWF9MRl9ET05UX0ZSRUVfREZUX0lEWFM7XG4tXHRcdGlmICghKHBmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfUEZfU0hVVERPV04pKVxuJiM0MztcdFx0aWYgKCFvdHgyX3Rlc3RfZmxhZyhwZiwgT1RYMl9GTEFHX1BGX1NIVVRET1dOKSlcbiBcdFx0XHRmcmVlX3JlcS1cdTAwM2VmbGFncyB8PSBOSVhfTEZfRE9OVF9GUkVFX1RYX1ZUQUc7XG4gXHRcdGlmIChvdHgyX3N5bmNfbWJveF9tc2cobWJveCkpXG4gXHRcdFx0ZGV2X2VycihwZi1cdTAwM2VkZXYsIFwmIzM0OyVzIGZhaWxlZCB0byBmcmVlIG5peGxmXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG5AQCAtMjAwNyw2ICYjNDM7MjAwNywxNCBAQCBpbnQgb3R4Ml9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9mcmVlX21lbTtcbiBcbiYjNDM7XHRlcnIgPSBvdHgyX21xcHJpb191cChwZik7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0bmV0ZGV2X2VycihwZi1cdTAwM2VuZXRkZXYsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O21xcHJpbzogZmFpbGVkIHRvIHJlc3RvcmUgc2hhcGVycyBkdXJpbmcgb3BlbjogJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgIGVycik7XG4mIzQzO1x0XHRnb3RvIGVycl9mcmVlX2h3O1xuJiM0MztcdH1cbiYjNDM7XG4gXHQvKiBSZWdpc3RlciBOQVBJIGhhbmRsZXIgKi9cbiBcdGZvciAocWlkeCA9IDA7IHFpZHggXHUwMDNjIHBmLVx1MDAzZWh3LmNpbnRfY250OyBxaWR4JiM0MzsmIzQzOykge1xuIFx0XHRjcV9wb2xsID0gXHUwMDI2cXNldC1cdTAwM2VuYXBpW3FpZHhdO1xuQEAgLTIxMzUsMjEgJiM0MzsyMTQzLDIxIEBAIGludCBvdHgyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdH1cbiBcdG90eDJfd3JpdGU2NChwZiwgTklYX0xGX1JBU19FTkFfVzFTLCBOSVhfTEZfUkFTX01BU0spO1xuIFxuLVx0aWYgKHBmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfUlhfVkxBTl9TVVBQT1JUKVxuJiM0MztcdGlmIChvdHgyX3Rlc3RfZmxhZyhwZiwgT1RYMl9GTEFHX1JYX1ZMQU5fU1VQUE9SVCkpXG4gXHRcdG90eDJfZW5hYmxlX3J4dmxhbihwZiwgdHJ1ZSk7XG4gXG4gXHQvKiBXaGVuIHJlaW5pdGlhbGl6aW5nIGVuYWJsZSB0aW1lIHN0YW1waW5nIGlmIGl0IGlzIGVuYWJsZWQgYmVmb3JlICovXG4tXHRpZiAocGYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19UWF9UU1RBTVBfRU5BQkxFRCkge1xuLVx0XHRwZi1cdTAwM2VmbGFncyBcdTAwMjY9IH5PVFgyX0ZMQUdfVFhfVFNUQU1QX0VOQUJMRUQ7XG4mIzQzO1x0aWYgKG90eDJfdGVzdF9mbGFnKHBmLCBPVFgyX0ZMQUdfVFhfVFNUQU1QX0VOQUJMRUQpKSB7XG4mIzQzO1x0XHRvdHgyX2NsZWFyX2ZsYWcocGYsIE9UWDJfRkxBR19UWF9UU1RBTVBfRU5BQkxFRCk7XG4gXHRcdG90eDJfY29uZmlnX2h3X3R4X3RzdGFtcChwZiwgdHJ1ZSk7XG4gXHR9XG4tXHRpZiAocGYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19SWF9UU1RBTVBfRU5BQkxFRCkge1xuLVx0XHRwZi1cdTAwM2VmbGFncyBcdTAwMjY9IH5PVFgyX0ZMQUdfUlhfVFNUQU1QX0VOQUJMRUQ7XG4mIzQzO1x0aWYgKG90eDJfdGVzdF9mbGFnKHBmLCBPVFgyX0ZMQUdfUlhfVFNUQU1QX0VOQUJMRUQpKSB7XG4mIzQzO1x0XHRvdHgyX2NsZWFyX2ZsYWcocGYsIE9UWDJfRkxBR19SWF9UU1RBTVBfRU5BQkxFRCk7XG4gXHRcdG90eDJfY29uZmlnX2h3X3J4X3RzdGFtcChwZiwgdHJ1ZSk7XG4gXHR9XG4gXG4tXHRwZi1cdTAwM2VmbGFncyBcdTAwMjY9IH5PVFgyX0ZMQUdfSU5URl9ET1dOO1xuLVx0cGYtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+T1RYMl9GTEFHX1BPUlRfVVA7XG4mIzQzO1x0b3R4Ml9jbGVhcl9mbGFnKHBmLCBPVFgyX0ZMQUdfSU5URl9ET1dOKTtcbiYjNDM7XHRvdHgyX2NsZWFyX2ZsYWcocGYsIE9UWDJfRkxBR19QT1JUX1VQKTtcbiBcdC8qICYjMzk7aW50Zl9kb3duJiMzOTsgbWF5IGJlIGNoZWNrZWQgb24gYW55IGNwdSAqL1xuIFx0c21wX3dtYigpO1xuIFxuQEAgLTIxNjEsNyAmIzQzOzIxNjksNyBAQCBpbnQgb3R4Ml9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRcdG90eDJfaGFuZGxlX2xpbmtfZXZlbnQocGYpO1xuIFxuIFx0LyogSW5zdGFsbCBETUFDIEZpbHRlcnMgKi9cbi1cdGlmIChwZi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX0RNQUNGTFRSX1NVUFBPUlQpXG4mIzQzO1x0aWYgKG90eDJfdGVzdF9mbGFnKHBmLCBPVFgyX0ZMQUdfRE1BQ0ZMVFJfU1VQUE9SVCkpXG4gXHRcdG90eDJfZG1hY2ZsdF9yZWluc3RhbGxfZmxvd3MocGYpO1xuIFxuIFx0b3R4Ml90Y19hcHBseV9pbmdyZXNzX3BvbGljZV9ydWxlcyhwZik7XG5AQCAtMjE4Niw3ICYjNDM7MjE5NCw3IEBAIGludCBvdHgyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBlcnJfdHhfc3RvcF9xdWV1ZXM6XG4gXHRuZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTtcbiBcdG5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7XG4tXHRwZi1cdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfSU5URl9ET1dOO1xuJiM0MztcdG90eDJfc2V0X2ZsYWcocGYsIE9UWDJfRkxBR19JTlRGX0RPV04pO1xuIFx0LyogZnJlZSBOSVhMRiBQT0lTT04gaXJxICovXG4gXHR2ZWMgPSBwY2lfaXJxX3ZlY3RvcihwZi1cdTAwM2VwZGV2LFxuIFx0XHRcdCAgICAgcGYtXHUwMDNlaHcubml4X21zaXhvZmYgJiM0MzsgTklYX0xGX1BPSVNPTl9WRUMpO1xuQEAgLTIyMDUsNiAmIzQzOzIyMTMsNyBAQCBpbnQgb3R4Ml9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRmcmVlX2lycSh2ZWMsIHBmKTtcbiBlcnJfZGlzYWJsZV9uYXBpOlxuIFx0b3R4Ml9kaXNhYmxlX25hcGkocGYpO1xuJiM0MztlcnJfZnJlZV9odzpcbiBcdG90eDJfZnJlZV9od19yZXNvdXJjZXMocGYpO1xuIGVycl9mcmVlX21lbTpcbiBcdG90eDJfZnJlZV9xdWV1ZV9tZW0ocXNldCk7XG5AQCAtMjIyMCwxMyAmIzQzOzIyMjksMTMgQEAgaW50IG90eDJfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0aW50IHFpZHgsIHZlYywgd3JrO1xuIFxuIFx0LyogSWYgdGhlIERPV04gZmxhZyBpcyBzZXQgcmVzb3VyY2VzIGFyZSBhbHJlYWR5IGZyZWVkICovXG4tXHRpZiAocGYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19JTlRGX0RPV04pXG4mIzQzO1x0aWYgKG90eDJfdGVzdF9mbGFnKHBmLCBPVFgyX0ZMQUdfSU5URl9ET1dOKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRuZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpO1xuIFx0bmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5ldGRldik7XG4gXG4tXHRwZi1cdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfSU5URl9ET1dOO1xuJiM0MztcdG90eDJfc2V0X2ZsYWcocGYsIE9UWDJfRkxBR19JTlRGX0RPV04pO1xuIFx0LyogJiMzOTtpbnRmX2Rvd24mIzM5OyBtYXkgYmUgY2hlY2tlZCBvbiBhbnkgY3B1ICovXG4gXHRzbXBfd21iKCk7XG4gXG5AQCAtMjI4MCw2ICYjNDM7MjI4OSw3IEBAIGludCBvdHgyX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdGZvciAocWlkeCA9IDA7IHFpZHggXHUwMDNjIG5ldGRldi1cdTAwM2VudW1fdHhfcXVldWVzOyBxaWR4JiM0MzsmIzQzOylcbiBcdFx0bmV0ZGV2X3R4X3Jlc2V0X3F1ZXVlKG5ldGRldl9nZXRfdHhfcXVldWUobmV0ZGV2LCBxaWR4KSk7XG4gXG4mIzQzO1x0c3luY2hyb25pemVfbmV0KCk7XG4gXHRvdHgyX2ZyZWVfcXVldWVfbWVtKHFzZXQpO1xuIFx0LyogRG8gbm90IGNsZWFyIFJRL1NRIHJpbmdzaXplIHNldHRpbmdzICovXG4gXHRtZW1zZXRfc3RhcnRhdChxc2V0LCAwLCBzcWVfY250KTtcbkBAIC0yNDU3LDcgJiM0MzsyNDY3LDcgQEAgc3RhdGljIGludCBvdHgyX2NvbmZpZ19od19yeF90c3RhbXAoc3RydWN0IG90eDJfbmljICpwZnZmLCBib29sIGVuYWJsZSlcbiBcdHN0cnVjdCBtc2dfcmVxICpyZXE7XG4gXHRpbnQgZXJyO1xuIFxuLVx0aWYgKHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19SWF9UU1RBTVBfRU5BQkxFRCBcdTAwMjZcdTAwMjYgZW5hYmxlKVxuJiM0MztcdGlmIChvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfUlhfVFNUQU1QX0VOQUJMRUQpIFx1MDAyNlx1MDAyNiBlbmFibGUpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZwZnZmLVx1MDAzZW1ib3gubG9jayk7XG5AQCAtMjQ3OCw5ICYjNDM7MjQ4OCw5IEBAIHN0YXRpYyBpbnQgb3R4Ml9jb25maWdfaHdfcnhfdHN0YW1wKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgYm9vbCBlbmFibGUpXG4gXG4gXHRtdXRleF91bmxvY2soXHUwMDI2cGZ2Zi1cdTAwM2VtYm94LmxvY2spO1xuIFx0aWYgKGVuYWJsZSlcbi1cdFx0cGZ2Zi1cdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfUlhfVFNUQU1QX0VOQUJMRUQ7XG4mIzQzO1x0XHRvdHgyX3NldF9mbGFnKHBmdmYsIE9UWDJfRkxBR19SWF9UU1RBTVBfRU5BQkxFRCk7XG4gXHRlbHNlXG4tXHRcdHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+T1RYMl9GTEFHX1JYX1RTVEFNUF9FTkFCTEVEO1xuJiM0MztcdFx0b3R4Ml9jbGVhcl9mbGFnKHBmdmYsIE9UWDJfRkxBR19SWF9UU1RBTVBfRU5BQkxFRCk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMjQ4OSw3ICYjNDM7MjQ5OSw3IEBAIHN0YXRpYyBpbnQgb3R4Ml9jb25maWdfaHdfdHhfdHN0YW1wKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgYm9vbCBlbmFibGUpXG4gXHRzdHJ1Y3QgbXNnX3JlcSAqcmVxO1xuIFx0aW50IGVycjtcbiBcbi1cdGlmIChwZnZmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfVFhfVFNUQU1QX0VOQUJMRUQgXHUwMDI2XHUwMDI2IGVuYWJsZSlcbiYjNDM7XHRpZiAob3R4Ml90ZXN0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1RYX1RTVEFNUF9FTkFCTEVEKSBcdTAwMjZcdTAwMjYgZW5hYmxlKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdG11dGV4X2xvY2soXHUwMDI2cGZ2Zi1cdTAwM2VtYm94LmxvY2spO1xuQEAgLTI1MTAsOSAmIzQzOzI1MjAsOSBAQCBzdGF0aWMgaW50IG90eDJfY29uZmlnX2h3X3R4X3RzdGFtcChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGJvb2wgZW5hYmxlKVxuIFxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBmdmYtXHUwMDNlbWJveC5sb2NrKTtcbiBcdGlmIChlbmFibGUpXG4tXHRcdHBmdmYtXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX1RYX1RTVEFNUF9FTkFCTEVEO1xuJiM0MztcdFx0b3R4Ml9zZXRfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfVFhfVFNUQU1QX0VOQUJMRUQpO1xuIFx0ZWxzZVxuLVx0XHRwZnZmLVx1MDAzZWZsYWdzIFx1MDAyNj0gfk9UWDJfRkxBR19UWF9UU1RBTVBfRU5BQkxFRDtcbiYjNDM7XHRcdG90eDJfY2xlYXJfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfVFhfVFNUQU1QX0VOQUJMRUQpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTI1MzcsOCAmIzQzOzI1NDcsOCBAQCBpbnQgb3R4Ml9jb25maWdfaHd0c3RhbXBfc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXG4gXHRzd2l0Y2ggKGNvbmZpZy1cdTAwM2V0eF90eXBlKSB7XG4gXHRjYXNlIEhXVFNUQU1QX1RYX09GRjpcbi1cdFx0aWYgKHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19QVFBfT05FU1RFUF9TWU5DKVxuLVx0XHRcdHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+T1RYMl9GTEFHX1BUUF9PTkVTVEVQX1NZTkM7XG4mIzQzO1x0XHRpZiAob3R4Ml90ZXN0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1BUUF9PTkVTVEVQX1NZTkMpKVxuJiM0MztcdFx0XHRvdHgyX2NsZWFyX2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1BUUF9PTkVTVEVQX1NZTkMpO1xuIFxuIFx0XHRjYW5jZWxfZGVsYXllZF93b3JrKFx1MDAyNnBmdmYtXHUwMDNlcHRwLVx1MDAzZXN5bmN0c3RhbXBfd29yayk7XG4gXHRcdG90eDJfY29uZmlnX2h3X3R4X3RzdGFtcChwZnZmLCBmYWxzZSk7XG5AQCAtMjU0OSw3ICYjNDM7MjU1OSw3IEBAIGludCBvdHgyX2NvbmZpZ19od3RzdGFtcF9zZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0XHRcdFx0ICAgXCYjMzQ7T25lLXN0ZXAgdGltZSBzdGFtcGluZyBpcyBub3Qgc3VwcG9ydGVkXCYjMzQ7KTtcbiBcdFx0XHRyZXR1cm4gLUVSQU5HRTtcbiBcdFx0fVxuLVx0XHRwZnZmLVx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19QVFBfT05FU1RFUF9TWU5DO1xuJiM0MztcdFx0b3R4Ml9zZXRfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfUFRQX09ORVNURVBfU1lOQyk7XG4gXHRcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZwZnZmLVx1MDAzZXB0cC1cdTAwM2VzeW5jdHN0YW1wX3dvcmssXG4gXHRcdFx0XHQgICAgICBtc2Vjc190b19qaWZmaWVzKDUwMCkpO1xuIFx0XHRmYWxsdGhyb3VnaDtcbkBAIC0yODM1LDcgJiM0MzsyODQ1LDcgQEAgc3RhdGljIGludCBvdHgyX3NldF92Zl92bGFuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCB2ZiwgdTE2IHZsYW4sIHU4IHFvcyxcbiBcdGlmIChwcm90byAhPSBodG9ucyhFVEhfUF84MDIxUSkpXG4gXHRcdHJldHVybiAtRVBST1RPTk9TVVBQT1JUO1xuIFxuLVx0aWYgKCEocGYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19WRl9WTEFOX1NVUFBPUlQpKVxuJiM0MztcdGlmICghb3R4Ml90ZXN0X2ZsYWcocGYsIE9UWDJfRkxBR19WRl9WTEFOX1NVUFBPUlQpKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4gXHRyZXR1cm4gb3R4Ml9kb19zZXRfdmZfdmxhbihwZiwgdmYsIHZsYW4sIHFvcywgcHJvdG8pO1xuQEAgLTI5MjMsNiAmIzQzOzI5MzMsMTIgQEAgc3RhdGljIGludCBvdHgyX3hkcF9zZXR1cChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4gXHRib29sIGlmX3VwID0gbmV0aWZfcnVubmluZyhwZi1cdTAwM2VuZXRkZXYpO1xuIFx0c3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZztcbiBcbiYjNDM7XHRpZiAocHJvZyBcdTAwMjZcdTAwMjYgcGYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIoZGV2LFxuJiM0MztcdFx0XHQgICBcJiMzNDtYRFA6IGNhbm5vdCBhdHRhY2ggd2hpbGUgbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGlzIGFjdGl2ZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmIChwcm9nIFx1MDAyNlx1MDAyNiBkZXYtXHUwMDNlbXR1IFx1MDAzZSBNQVhfWERQX01UVSkge1xuIFx0XHRuZXRkZXZfd2FybihkZXYsIFwmIzM0O0p1bWJvIGZyYW1lcyBub3QgeWV0IHN1cHBvcnRlZCB3aXRoIFhEUFxcblwmIzM0Oyk7XG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbkBAIC0zMDg2LDcgJiM0MzszMTAyLDcgQEAgaW50IG90eDJfcmVhbGxvY19tc2l4X3ZlY3RvcnMoc3RydWN0IG90eDJfbmljICpwZilcbiBcdCAqIGludGVycnVwdCByYW5nZSAoUUlOVCwgQ0lOVCwgR0lOVCwgRVJSIGFuZCBQT0lTT04gdmVjdG9ycykuXG4gXHQgKi9cbiBcdG51bV92ZWMgPSBody1cdTAwM2VuaXhfbXNpeG9mZjtcbi1cdGlmIChwZi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1JFUF9NT0RFX0VOQUJMRUQpXG4mIzQzO1x0aWYgKG90eDJfdGVzdF9mbGFnKHBmLCBPVFgyX0ZMQUdfUkVQX01PREVfRU5BQkxFRCkpXG4gXHRcdG51bV92ZWMgJiM0Mzs9IE5JWF9MRl9DSU5UX1ZFQ19TVEFSVCAmIzQzOyBody1cdTAwM2VtYXhfcXVldWVzO1xuIFx0ZWxzZVxuIFx0XHRudW1fdmVjICYjNDM7PSBOSVhfTEZfUE9JU09OX1ZFQyAmIzQzOyAxO1xuQEAgLTMyNzMsNyAmIzQzOzMyODksNyBAQCBzdGF0aWMgaW50IG90eDJfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbiBcdHBmLVx1MDAzZXBkZXYgPSBwZGV2O1xuIFx0cGYtXHUwMDNlZGV2ID0gZGV2O1xuIFx0cGYtXHUwMDNldG90YWxfdmZzID0gcGNpX3NyaW92X2dldF90b3RhbHZmcyhwZGV2KTtcbi1cdHBmLVx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19JTlRGX0RPV047XG4mIzQzO1x0b3R4Ml9zZXRfZmxhZyhwZiwgT1RYMl9GTEFHX0lOVEZfRE9XTik7XG4gXG4gXHRodyA9IFx1MDAyNnBmLVx1MDAzZWh3O1xuIFx0aHctXHUwMDNlcGRldiA9IHBkZXY7XG5AQCAtMzMyOCwyMyAmIzQzOzMzNDQsMjMgQEAgc3RhdGljIGludCBvdHgyX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9kZWxfbWNhbV9lbnRyaWVzO1xuIFxuLVx0aWYgKHBmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfTlRVUExFX1NVUFBPUlQpXG4mIzQzO1x0aWYgKG90eDJfdGVzdF9mbGFnKHBmLCBPVFgyX0ZMQUdfTlRVUExFX1NVUFBPUlQpKVxuIFx0XHRuZXRkZXYtXHUwMDNlaHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9OVFVQTEU7XG4gXG4tXHRpZiAocGYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19VQ0FTVF9GTFRSX1NVUFBPUlQpXG4mIzQzO1x0aWYgKG90eDJfdGVzdF9mbGFnKHBmLCBPVFgyX0ZMQUdfVUNBU1RfRkxUUl9TVVBQT1JUKSlcbiBcdFx0bmV0ZGV2LVx1MDAzZXByaXZfZmxhZ3MgfD0gSUZGX1VOSUNBU1RfRkxUO1xuIFxuIFx0LyogU3VwcG9ydCBUU08gb24gdGFnIGludGVyZmFjZSAqL1xuIFx0bmV0ZGV2LVx1MDAzZXZsYW5fZmVhdHVyZXMgfD0gbmV0ZGV2LVx1MDAzZWZlYXR1cmVzO1xuIFx0bmV0ZGV2LVx1MDAzZWh3X2ZlYXR1cmVzICB8PSBORVRJRl9GX0hXX1ZMQU5fQ1RBR19UWCB8XG4gXHRcdFx0XHRORVRJRl9GX0hXX1ZMQU5fU1RBR19UWDtcbi1cdGlmIChwZi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1JYX1ZMQU5fU1VQUE9SVClcbiYjNDM7XHRpZiAob3R4Ml90ZXN0X2ZsYWcocGYsIE9UWDJfRkxBR19SWF9WTEFOX1NVUFBPUlQpKVxuIFx0XHRuZXRkZXYtXHUwMDNlaHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX0NUQUdfUlggfFxuIFx0XHRcdFx0ICAgICAgIE5FVElGX0ZfSFdfVkxBTl9TVEFHX1JYO1xuIFx0bmV0ZGV2LVx1MDAzZWZlYXR1cmVzIHw9IG5ldGRldi1cdTAwM2Vod19mZWF0dXJlcztcbiBcbiBcdC8qIEhXIHN1cHBvcnRzIHRjIG9mZmxvYWQgYnV0IG11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIG4tdHVwbGUgZmlsdGVycyAqL1xuLVx0aWYgKHBmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfVENfRkxPV0VSX1NVUFBPUlQpXG4mIzQzO1x0aWYgKG90eDJfdGVzdF9mbGFnKHBmLCBPVFgyX0ZMQUdfVENfRkxPV0VSX1NVUFBPUlQpKVxuIFx0XHRuZXRkZXYtXHUwMDNlaHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19UQztcbiBcbiBcdG5ldGRldi1cdTAwM2Vod19mZWF0dXJlcyB8PSBORVRJRl9GX0xPT1BCQUNLIHwgTkVUSUZfRl9SWEFMTDtcbkBAIC0zNTk1LDE4ICYjNDM7MzYxMSwxOCBAQCBzdGF0aWMgdm9pZCBvdHgyX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcbiBcdHBmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiBcbi1cdHBmLVx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19QRl9TSFVURE9XTjtcbiYjNDM7XHRvdHgyX3NldF9mbGFnKHBmLCBPVFgyX0ZMQUdfUEZfU0hVVERPV04pO1xuIFxuLVx0aWYgKHBmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfVFhfVFNUQU1QX0VOQUJMRUQpXG4mIzQzO1x0aWYgKG90eDJfdGVzdF9mbGFnKHBmLCBPVFgyX0ZMQUdfVFhfVFNUQU1QX0VOQUJMRUQpKVxuIFx0XHRvdHgyX2NvbmZpZ19od190eF90c3RhbXAocGYsIGZhbHNlKTtcbi1cdGlmIChwZi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1JYX1RTVEFNUF9FTkFCTEVEKVxuJiM0MztcdGlmIChvdHgyX3Rlc3RfZmxhZyhwZiwgT1RYMl9GTEFHX1JYX1RTVEFNUF9FTkFCTEVEKSlcbiBcdFx0b3R4Ml9jb25maWdfaHdfcnhfdHN0YW1wKHBmLCBmYWxzZSk7XG4gXG4gXHQvKiBEaXNhYmxlIDgwMi4zeCBwYXVzZSBmcmFtZXMgKi9cbi1cdGlmIChwZi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1JYX1BBVVNFX0VOQUJMRUQgfHxcbi1cdCAgICAocGYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19UWF9QQVVTRV9FTkFCTEVEKSkge1xuLVx0XHRwZi1cdTAwM2VmbGFncyBcdTAwMjY9IH5PVFgyX0ZMQUdfUlhfUEFVU0VfRU5BQkxFRDtcbi1cdFx0cGYtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+T1RYMl9GTEFHX1RYX1BBVVNFX0VOQUJMRUQ7XG4mIzQzO1x0aWYgKG90eDJfdGVzdF9mbGFnKHBmLCBPVFgyX0ZMQUdfUlhfUEFVU0VfRU5BQkxFRCkgfHxcbiYjNDM7XHQgICAgb3R4Ml90ZXN0X2ZsYWcocGYsIE9UWDJfRkxBR19UWF9QQVVTRV9FTkFCTEVEKSkge1xuJiM0MztcdFx0b3R4Ml9jbGVhcl9mbGFnKHBmLCBPVFgyX0ZMQUdfUlhfUEFVU0VfRU5BQkxFRCk7XG4mIzQzO1x0XHRvdHgyX2NsZWFyX2ZsYWcocGYsIE9UWDJfRkxBR19UWF9QQVVTRV9FTkFCTEVEKTtcbiBcdFx0b3R4Ml9jb25maWdfcGF1c2VfZnJtKHBmKTtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuY1xuaW5kZXggMDM5ZmQ0N2ViZjUyMi4uNzBkOTlhZTNkZWZiNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmNcbkBAIC0xNiw2ICYjNDM7MTYsOCBAQFxuICNpbmNsdWRlIFx1MDAzY25ldC90Y19hY3QvdGNfbWlycmVkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvdGNfYWN0L3RjX3ZsYW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9pcHY2LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L3BrdF9zY2hlZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC9zY2hfZ2VuZXJpYy5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7Y24xMGsuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O290eDJfY29tbW9uLmhcJiMzNDtcbkBAIC0zMSw2ICYjNDM7MzMsMTAgQEBcbiBcbiAjZGVmaW5lIE1DQVNUX0lOVkFMSURfR1JQXHRcdCgtMVUpXG4gI2RlZmluZSBSQVRFX01BTlRJU1NBX0JJVFNcdFx0OFxuJiM0MzsvKiBNaW4gcGVyLXF1ZXVlIGVncmVzcyBzaGFwaW5nIHJhdGUgdGhlIE5JWCBUTFggZW5jb2RlciBzdXBwb3J0cyAoMiBNYnBzKS4gKi9cbiYjNDM7I2RlZmluZSBPVFgyX01RUFJJT19NSU5fUkFURV9CWVRFU19QU1x0MjUwMDAwVUxMXG4mIzQzOy8qIE1heCBlZ3Jlc3Mgc2hhcGluZyByYXRlIHRoZSBOSVggVExYIGVuY29kZXIgc3VwcG9ydHMgKDEzMDgxNiBNYnBzKS4gKi9cbiYjNDM7I2RlZmluZSBPVFgyX01RUFJJT19NQVhfUkFURV9CWVRFU19QU1x0KChNQVhfQlVSU1RfU0laRSAqIDEwMDAwMDBVTEwpIC8gOFVMTClcbiBcbiBzdGF0aWMgdm9pZCBvdHgyX2dldF9lZ3Jlc3NfYnVyc3RfY2ZnKHN0cnVjdCBvdHgyX25pYyAqbmljLCB1MzIgYnVyc3QsXG4gXHRcdFx0XHQgICAgICB1MzIgKmJ1cnN0X2V4cCwgdTMyICpidXJzdF9tYW50aXNzYSlcbkBAIC02MSw2ICYjNDM7NjcsOSBAQCBzdGF0aWMgdm9pZCBvdHgyX2dldF9lZ3Jlc3NfYnVyc3RfY2ZnKHN0cnVjdCBvdHgyX25pYyAqbmljLCB1MzIgYnVyc3QsXG4gXHRcdFx0KmJ1cnN0X21hbnRpc3NhID0gdG1wIC8gKDFVTEwgXHUwMDNjXHUwMDNjICgqYnVyc3RfZXhwIC0gNykpO1xuIFx0XHR9XG4gXHR9IGVsc2Uge1xuJiM0MztcdFx0LyogYnVyc3QgMDogbGFyZ2VzdCBlbmNvZGFibGUgYnVyc3QgKENOMTBLX01BWF9CVVJTVF9TSVpFIG9uXG4mIzQzO1x0XHQgKiBDTjEwSyksIG5vdCBhIG1pbmltYWwgYnVyc3QuXG4mIzQzO1x0XHQgKi9cbiBcdFx0KmJ1cnN0X2V4cCA9IE1BWF9CVVJTVF9FWFBPTkVOVDtcbiBcdFx0KmJ1cnN0X21hbnRpc3NhID0gbWF4X21hbnRpc3NhO1xuIFx0fVxuQEAgLTE1OSw3ICYjNDM7MTY4LDcgQEAgc3RhdGljIGludCBvdHgyX3RjX3ZhbGlkYXRlX2Zsb3coc3RydWN0IG90eDJfbmljICpuaWMsXG4gXHRcdFx0XHQgc3RydWN0IGZsb3dfYWN0aW9uICphY3Rpb25zLFxuIFx0XHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4tXHRpZiAobmljLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfSU5URl9ET1dOKSB7XG4mIzQzO1x0aWYgKG90eDJfdGVzdF9mbGFnKG5pYywgT1RYMl9GTEFHX0lOVEZfRE9XTikpIHtcbiBcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7SW50ZXJmYWNlIG5vdCBpbml0aWFsaXplZFwmIzM0Oyk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuQEAgLTIyMyw3ICYjNDM7MjMyLDcgQEAgc3RhdGljIGludCBvdHgyX3RjX2VncmVzc19tYXRjaGFsbF9pbnN0YWxsKHN0cnVjdCBvdHgyX25pYyAqbmljLFxuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbi1cdGlmIChuaWMtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19UQ19NQVRDSEFMTF9FR1JFU1NfRU5BQkxFRCkge1xuJiM0MztcdGlmIChvdHgyX3Rlc3RfZmxhZyhuaWMsIE9UWDJfRkxBR19UQ19NQVRDSEFMTF9FR1JFU1NfRU5BQkxFRCkpIHtcbiBcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbiBcdFx0XHRcdCAgIFwmIzM0O09ubHkgb25lIEVncmVzcyBNQVRDSEFMTCByYXRlbGltaXRlciBjYW4gYmUgb2ZmbG9hZGVkXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG5AQCAtMjQ0LDcgJiM0MzsyNTMsNyBAQCBzdGF0aWMgaW50IG90eDJfdGNfZWdyZXNzX21hdGNoYWxsX2luc3RhbGwoc3RydWN0IG90eDJfbmljICpuaWMsXG4gXHRcdFx0XHRcdFx0ICAgIG90eDJfY29udmVydF9yYXRlKGVudHJ5LVx1MDAzZXBvbGljZS5yYXRlX2J5dGVzX3BzKSk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIGVycjtcbi1cdFx0bmljLVx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19UQ19NQVRDSEFMTF9FR1JFU1NfRU5BQkxFRDtcbiYjNDM7XHRcdG90eDJfc2V0X2ZsYWcobmljLCBPVFgyX0ZMQUdfVENfTUFUQ0hBTExfRUdSRVNTX0VOQUJMRUQpO1xuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG5AQCAtMjYxLDEzICYjNDM7MjcwLDEzIEBAIHN0YXRpYyBpbnQgb3R4Ml90Y19lZ3Jlc3NfbWF0Y2hhbGxfZGVsZXRlKHN0cnVjdCBvdHgyX25pYyAqbmljLFxuIFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrID0gY2xzLVx1MDAzZWNvbW1vbi5leHRhY2s7XG4gXHRpbnQgZXJyO1xuIFxuLVx0aWYgKG5pYy1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX0lOVEZfRE9XTikge1xuJiM0MztcdGlmIChvdHgyX3Rlc3RfZmxhZyhuaWMsIE9UWDJfRkxBR19JTlRGX0RPV04pKSB7XG4gXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwmIzM0O0ludGVyZmFjZSBub3QgaW5pdGlhbGl6ZWRcJiMzNDspO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbiBcdGVyciA9IG90eDJfc2V0X21hdGNoYWxsX2VncmVzc19yYXRlKG5pYywgMCwgMCk7XG4tXHRuaWMtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+T1RYMl9GTEFHX1RDX01BVENIQUxMX0VHUkVTU19FTkFCTEVEO1xuJiM0MztcdG90eDJfY2xlYXJfZmxhZyhuaWMsIE9UWDJfRkxBR19UQ19NQVRDSEFMTF9FR1JFU1NfRU5BQkxFRCk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC01MDUsNyAmIzQzOzUxNCw3IEBAIHN0YXRpYyBpbnQgb3R4Ml90Y19wYXJzZV9hY3Rpb25zKHN0cnVjdCBvdHgyX25pYyAqbmljLFxuIFx0XHRcdG1hcmsgPSBhY3QtXHUwMDNlbWFyaztcbiBcdFx0XHRyZXEtXHUwMDNlbWF0Y2hfaWQgPSBtYXJrIFx1MDAyNiBPVFgyX1JYX01BVENIX0lEX01BU0s7XG4gXHRcdFx0cmVxLVx1MDAzZW9wID0gTklYX1JYX0FDVElPTl9ERUZBVUxUO1xuLVx0XHRcdG5pYy1cdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfVENfTUFSS19FTkFCTEVEO1xuJiM0MztcdFx0XHRvdHgyX3NldF9mbGFnKG5pYywgT1RYMl9GTEFHX1RDX01BUktfRU5BQkxFRCk7XG4gXHRcdFx0cmVmY291bnRfaW5jKFx1MDAyNm5pYy1cdTAwM2VmbG93X2NmZy1cdTAwM2VtYXJrX2Zsb3dzKTtcbiBcdFx0XHRicmVhaztcbiBcbkBAIC05NDIsNyAmIzQzOzk1MSw3IEBAIHN0YXRpYyB2b2lkIG90eDJfZGVzdHJveV90Y19mbG93X2xpc3Qoc3RydWN0IG90eDJfbmljICpwZnZmKVxuIFx0c3RydWN0IG90eDJfZmxvd19jb25maWcgKmZsb3dfY2ZnID0gcGZ2Zi1cdTAwM2VmbG93X2NmZztcbiBcdHN0cnVjdCBvdHgyX3RjX2Zsb3cgKml0ZXIsICp0bXA7XG4gXG4tXHRpZiAoIShwZnZmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfTUNBTV9FTlRSSUVTX0FMTE9DKSlcbiYjNDM7XHRpZiAoIW90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19NQ0FNX0VOVFJJRVNfQUxMT0MpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaXRlciwgdG1wLCBcdTAwMjZmbG93X2NmZy1cdTAwM2VmbG93X2xpc3RfdGMsIGxpc3QpIHtcbkBAIC0xMTk1LDEyICYjNDM7MTIwNCwxMiBAQCBzdGF0aWMgaW50IG90eDJfdGNfZGVsX2Zsb3coc3RydWN0IG90eDJfbmljICpuaWMsXG4gXHQvKiBEaXNhYmxlIFRDIE1BUksgZmxhZyBpZiB0aGV5IGFyZSBubyBydWxlcyB3aXRoIHNrYmVkaXQgbWFyayBhY3Rpb24gKi9cbiBcdGlmIChmbG93X25vZGUtXHUwMDNlcmVxLm1hdGNoX2lkKVxuIFx0XHRpZiAoIXJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZmbG93X2NmZy1cdTAwM2VtYXJrX2Zsb3dzKSlcbi1cdFx0XHRuaWMtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+T1RYMl9GTEFHX1RDX01BUktfRU5BQkxFRDtcbiYjNDM7XHRcdFx0b3R4Ml9jbGVhcl9mbGFnKG5pYywgT1RYMl9GTEFHX1RDX01BUktfRU5BQkxFRCk7XG4gXG4gXHRpZiAoZmxvd19ub2RlLVx1MDAzZWlzX2FjdF9wb2xpY2UpIHtcbiBcdFx0X19jbGVhcl9iaXQoZmxvd19ub2RlLVx1MDAzZXJxLCBcdTAwMjZuaWMtXHUwMDNlcnFfYm1hcCk7XG4gXG4tXHRcdGlmIChuaWMtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19JTlRGX0RPV04pXG4mIzQzO1x0XHRpZiAob3R4Ml90ZXN0X2ZsYWcobmljLCBPVFgyX0ZMQUdfSU5URl9ET1dOKSlcbiBcdFx0XHRnb3RvIGZyZWVfbWNhbV9mbG93O1xuIFxuIFx0XHRtdXRleF9sb2NrKFx1MDAyNm5pYy1cdTAwM2VtYm94LmxvY2spO1xuQEAgLTEyNDYsMTAgJiM0MzsxMjU1LDEwIEBAIHN0YXRpYyBpbnQgb3R4Ml90Y19hZGRfZmxvdyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYyxcbiBcdHN0cnVjdCBucGNfaW5zdGFsbF9mbG93X3JlcSAqcmVxLCBkdW1teTtcbiBcdGludCByYywgZXJyLCBlbnRyeTtcbiBcbi1cdGlmICghKG5pYy1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1RDX0ZMT1dFUl9TVVBQT1JUKSlcbiYjNDM7XHRpZiAoIW90eDJfdGVzdF9mbGFnKG5pYywgT1RYMl9GTEFHX1RDX0ZMT1dFUl9TVVBQT1JUKSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4tXHRpZiAobmljLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfSU5URl9ET1dOKSB7XG4mIzQzO1x0aWYgKG90eDJfdGVzdF9mbGFnKG5pYywgT1RYMl9GTEFHX0lOVEZfRE9XTikpIHtcbiBcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7SW50ZXJmYWNlIG5vdCBpbml0aWFsaXplZFwmIzM0Oyk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuQEAgLTE0NDQsNyAmIzQzOzE0NTMsNyBAQCBzdGF0aWMgaW50IG90eDJfdGNfaW5ncmVzc19tYXRjaGFsbF9pbnN0YWxsKHN0cnVjdCBvdHgyX25pYyAqbmljLFxuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbi1cdGlmIChuaWMtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19UQ19NQVRDSEFMTF9JTkdSRVNTX0VOQUJMRUQpIHtcbiYjNDM7XHRpZiAob3R4Ml90ZXN0X2ZsYWcobmljLCBPVFgyX0ZMQUdfVENfTUFUQ0hBTExfSU5HUkVTU19FTkFCTEVEKSkge1xuIFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuIFx0XHRcdFx0ICAgXCYjMzQ7T25seSBvbmUgaW5ncmVzcyBNQVRDSEFMTCByYXRlbGltaXR0ZXIgY2FuIGJlIG9mZmxvYWRlZFwmIzM0Oyk7XG4gXHRcdHJldHVybiAtRU5PTUVNO1xuQEAgLTE0NjksNyAmIzQzOzE0NzgsNyBAQCBzdGF0aWMgaW50IG90eDJfdGNfaW5ncmVzc19tYXRjaGFsbF9pbnN0YWxsKHN0cnVjdCBvdHgyX25pYyAqbmljLFxuIFx0XHRlcnIgPSBjbjEwa19zZXRfbWF0Y2hhbGxfaXBvbGljZXJfcmF0ZShuaWMsIGVudHJ5LVx1MDAzZXBvbGljZS5idXJzdCwgcmF0ZSk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIGVycjtcbi1cdFx0bmljLVx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19UQ19NQVRDSEFMTF9JTkdSRVNTX0VOQUJMRUQ7XG4mIzQzO1x0XHRvdHgyX3NldF9mbGFnKG5pYywgT1RYMl9GTEFHX1RDX01BVENIQUxMX0lOR1JFU1NfRU5BQkxFRCk7XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbkBAIC0xNDg2LDEzICYjNDM7MTQ5NSwxMyBAQCBzdGF0aWMgaW50IG90eDJfdGNfaW5ncmVzc19tYXRjaGFsbF9kZWxldGUoc3RydWN0IG90eDJfbmljICpuaWMsXG4gXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2sgPSBjbHMtXHUwMDNlY29tbW9uLmV4dGFjaztcbiBcdGludCBlcnI7XG4gXG4tXHRpZiAobmljLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfSU5URl9ET1dOKSB7XG4mIzQzO1x0aWYgKG90eDJfdGVzdF9mbGFnKG5pYywgT1RYMl9GTEFHX0lOVEZfRE9XTikpIHtcbiBcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7SW50ZXJmYWNlIG5vdCBpbml0aWFsaXplZFwmIzM0Oyk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuIFx0ZXJyID0gY24xMGtfZnJlZV9tYXRjaGFsbF9pcG9saWNlcihuaWMpO1xuLVx0bmljLVx1MDAzZWZsYWdzIFx1MDAyNj0gfk9UWDJfRkxBR19UQ19NQVRDSEFMTF9JTkdSRVNTX0VOQUJMRUQ7XG4mIzQzO1x0b3R4Ml9jbGVhcl9mbGFnKG5pYywgT1RYMl9GTEFHX1RDX01BVENIQUxMX0lOR1JFU1NfRU5BQkxFRCk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC0xNjAwLDE0ICYjNDM7MTYwOSw3NTAgQEAgc3RhdGljIGludCBvdHgyX3NldHVwX3RjX2Jsb2NrKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdFx0XHRcdCAgbmljLCBuaWMsIGluZ3Jlc3MpO1xuIH1cbiBcbiYjNDM7LyogRnJlZSB0aGUgcGVyLXF1ZXVlIG1pbi9tYXggcmF0ZSBjYWNoZXMuICovXG4mIzQzO3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUoc3RydWN0IG90eDJfbmljICpwZnZmKVxuJiM0Mzt7XG4mIzQzO1x0ZGV2bV9rZnJlZShwZnZmLVx1MDAzZWRldiwgcGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUpO1xuJiM0MztcdGRldm1fa2ZyZWUocGZ2Zi1cdTAwM2VkZXYsIHBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlKTtcbiYjNDM7XHRwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSA9IE5VTEw7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUgPSBOVUxMO1xuJiM0MztcdHBmdmYtXHUwMDNlbXFwcmlvLmZsYWdzID0gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHgyX21xcHJpb19hbGxvY19jYWNoZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGJvb2wgcmVwbGFjaW5nKVxuJiM0Mzt7XG4mIzQzO1x0dTE2IG51bV90eHEgPSBwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzO1xuJiM0MztcbiYjNDM7XHRpZiAocmVwbGFjaW5nIFx1MDAyNlx1MDAyNiBwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSBcdTAwMjZcdTAwMjYgcGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUpIHtcbiYjNDM7XHRcdG1lbXNldChwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSwgMCxcbiYjNDM7XHRcdCAgICAgICBudW1fdHhxICogc2l6ZW9mKCpwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSkpO1xuJiM0MztcdFx0bWVtc2V0KHBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlLCAwLFxuJiM0MztcdFx0ICAgICAgIG51bV90eHEgKiBzaXplb2YoKnBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlKSk7XG4mIzQzO1x0XHRwZnZmLVx1MDAzZW1xcHJpby5mbGFncyA9IDA7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7XG4mIzQzO1xuJiM0MztcdHBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlID0gZGV2bV9rY2FsbG9jKHBmdmYtXHUwMDNlZGV2LCBudW1fdHhxLFxuJiM0MztcdFx0XHRcdFx0ICAgICBzaXplb2YoKnBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlKSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUgPSBkZXZtX2tjYWxsb2MocGZ2Zi1cdTAwM2VkZXYsIG51bV90eHEsXG4mIzQzO1x0XHRcdFx0XHQgICAgIHNpemVvZigqcGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUpLFxuJiM0MztcdFx0XHRcdFx0ICAgICBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIXBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlIHx8ICFwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSkge1xuJiM0MztcdFx0b3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTtcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX3NuYXBfZnJlZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4mIzQzO1x0XHRcdFx0ICBzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwICoqc25hcClcbiYjNDM7e1xuJiM0MztcdGlmICghKnNuYXApXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGRldm1fa2ZyZWUocGZ2Zi1cdTAwM2VkZXYsICpzbmFwKTtcbiYjNDM7XHQqc25hcCA9IE5VTEw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fc25hcF9jb3B5KHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbiYjNDM7XHRcdFx0XHQgc3RydWN0IG1xX29mZmxvYWRfc25hcCAqKmRzdCxcbiYjNDM7XHRcdFx0XHQgY29uc3Qgc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbylcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9IFx1MDAyNm1xcHJpby1cdTAwM2Vxb3B0O1xuJiM0MztcdHN0cnVjdCBtcV9vZmZsb2FkX3NuYXAgKnNuYXA7XG4mIzQzO1x0aW50IHRjO1xuJiM0MztcbiYjNDM7XHRpZiAoISpkc3QpIHtcbiYjNDM7XHRcdHNuYXAgPSBkZXZtX2t6YWxsb2MocGZ2Zi1cdTAwM2VkZXYsIHNpemVvZigqc25hcCksIEdGUF9LRVJORUwpO1xuJiM0MztcdFx0aWYgKCFzbmFwKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHRcdCpkc3QgPSBzbmFwO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRzbmFwID0gKmRzdDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNuYXAtXHUwMDNlbnVtX3RjID0gcW9wdC1cdTAwM2VudW1fdGM7XG4mIzQzO1x0Zm9yICh0YyA9IDA7IHRjIFx1MDAzYyBUQ19RT1BUX01BWF9RVUVVRTsgdGMmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzbmFwLVx1MDAzZWNvdW50W3RjXSA9IHFvcHQtXHUwMDNlY291bnRbdGNdO1xuJiM0MztcdFx0c25hcC1cdTAwM2VvZmZzZXRbdGNdID0gcW9wdC1cdTAwM2VvZmZzZXRbdGNdO1xuJiM0MztcdFx0c25hcC1cdTAwM2VtaW5fcmF0ZVt0Y10gPSAwO1xuJiM0MztcdFx0c25hcC1cdTAwM2VtYXhfcmF0ZVt0Y10gPSAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Zm9yICh0YyA9IDA7IHRjIFx1MDAzYyBxb3B0LVx1MDAzZW51bV90YzsgdGMmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcbiYjNDM7XHRcdFx0c25hcC1cdTAwM2VtaW5fcmF0ZVt0Y10gPSBtcXByaW8tXHUwMDNlbWluX3JhdGVbdGNdO1xuJiM0MztcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUpXG4mIzQzO1x0XHRcdHNuYXAtXHUwMDNlbWF4X3JhdGVbdGNdID0gbXFwcmlvLVx1MDAzZW1heF9yYXRlW3RjXTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90eDJfbXFwcmlvX3N0YWdlX2N1cihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4mIzQzO1x0XHRcdFx0IGNvbnN0IHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gb3R4Ml9tcXByaW9fc25hcF9jb3B5KHBmdmYsIFx1MDAyNnBmdmYtXHUwMDNlY3VyX21xX3NuYXAsIG1xcHJpbyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX3NuYXBfY29tbWl0KHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiYjNDM7e1xuJiM0MztcdG90eDJfbXFwcmlvX3NuYXBfZnJlZShwZnZmLCBcdTAwMjZwZnZmLVx1MDAzZW9sZF9tcV9zbmFwKTtcbiYjNDM7XHRwZnZmLVx1MDAzZW9sZF9tcV9zbmFwID0gcGZ2Zi1cdTAwM2VjdXJfbXFfc25hcDtcbiYjNDM7XHRwZnZmLVx1MDAzZWN1cl9tcV9zbmFwID0gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fY2xlYXJfcmVwbGFjZV9zdGF0ZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4mIzQzO3tcbiYjNDM7XHRwZnZmLVx1MDAzZW1xcHJpby5yZXBsYWNlX3NldHVwX2RvbmUgPSBmYWxzZTtcbiYjNDM7XHRwZnZmLVx1MDAzZW1xcHJpby5yZXBsYWNlX2dyYWZ0X2RvbmUgPSBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgb3R4Ml9tcXByaW9fbWRxX2FsbG9jYXRlZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcGZ2Zi1cdTAwM2Vody50eHNjaHFfY250W05JWF9UWFNDSF9MVkxfTURRXSAhPSAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmF0ZV9saW1pdCk7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90eDJfbXFwcmlvX3Jlc3RvcmVfb2xkKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtcV9vZmZsb2FkX3NuYXAgKnNuYXAgPSBwZnZmLVx1MDAzZW9sZF9tcV9zbmFwO1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVx1MDAzZW5ldGRldjtcbiYjNDM7XHR1MTYgbnVtX3R4cSA9IHBmdmYtXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXM7XG4mIzQzO1x0aW50IHRjLCB0eHEsIGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFzbmFwKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGVyciA9IG90eDJfbXFwcmlvX2FsbG9jX2NhY2hlKHBmdmYsIGZhbHNlKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4mIzQzO1x0bWVtc2V0KHBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlLCAwLCBudW1fdHhxICogc2l6ZW9mKCpwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSkpO1xuJiM0MztcdG1lbXNldChwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSwgMCwgbnVtX3R4cSAqIHNpemVvZigqcGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUpKTtcbiYjNDM7XHRwZnZmLVx1MDAzZW1xcHJpby5mbGFncyA9IDA7XG4mIzQzO1xuJiM0MztcdGZvciAodGMgPSAwOyB0YyBcdTAwM2Mgc25hcC1cdTAwM2VudW1fdGM7IHRjJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dTY0IG1pbl9yYXRlID0gc25hcC1cdTAwM2VtaW5fcmF0ZVt0Y107XG4mIzQzO1x0XHR1NjQgbWF4X3JhdGUgPSBzbmFwLVx1MDAzZW1heF9yYXRlW3RjXTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAobWluX3JhdGUpXG4mIzQzO1x0XHRcdHBmdmYtXHUwMDNlbXFwcmlvLmZsYWdzIHw9IFRDX01RUFJJT19GX01JTl9SQVRFO1xuJiM0MztcdFx0aWYgKG1heF9yYXRlKVxuJiM0MztcdFx0XHRwZnZmLVx1MDAzZW1xcHJpby5mbGFncyB8PSBUQ19NUVBSSU9fRl9NQVhfUkFURTtcbiYjNDM7XG4mIzQzO1x0XHRmb3IgKHR4cSA9IHNuYXAtXHUwMDNlb2Zmc2V0W3RjXTtcbiYjNDM7XHRcdCAgICAgdHhxIFx1MDAzYyBzbmFwLVx1MDAzZW9mZnNldFt0Y10gJiM0Mzsgc25hcC1cdTAwM2Vjb3VudFt0Y107IHR4cSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0cGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGVbdHhxXSA9IG1pbl9yYXRlO1xuJiM0MztcdFx0XHRwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZVt0eHFdID0gbWF4X3JhdGU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRuZXRkZXZfc2V0X251bV90YyhuZXRkZXYsIHNuYXAtXHUwMDNlbnVtX3RjKTtcbiYjNDM7XHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIHNuYXAtXHUwMDNlbnVtX3RjOyB0YyYjNDM7JiM0MzspXG4mIzQzO1x0XHRuZXRkZXZfc2V0X3RjX3F1ZXVlKG5ldGRldiwgdGMsIHNuYXAtXHUwMDNlY291bnRbdGNdLFxuJiM0MztcdFx0XHRcdCAgICBzbmFwLVx1MDAzZW9mZnNldFt0Y10pO1xuJiM0MztcbiYjNDM7XHRpZiAob3R4Ml9tcXByaW9fbWRxX2FsbG9jYXRlZChwZnZmKSkge1xuJiM0MztcdFx0ZXJyID0gb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHBmdmYpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFJlYnVpbGQgdGhlIFRYIHNjaGVkdWxlciB2aWEgbmV0ZGV2IHJlc3RhcnQgd2hlbiBydW5uaW5nOyBvdHgyX21xcHJpb191cCgpXG4mIzQzO1x0ICogYWxvbmUgaXMgaW5zdWZmaWNpZW50IGFmdGVyIGEgZmFpbGVkIHJlcGxhY2UgdGhhdCBhbHJlYWR5IGJvdW5jZWQgdGhlXG4mIzQzO1x0ICogaW50ZXJmYWNlLiBJZiBvcGVuIGZhaWxlZCwgVFggc2NoZWR1bGVycyB3ZXJlIGZyZWVkOyBkZWZlciBzaGFwZXIgcmVzdG9yZVxuJiM0MztcdCAqIHRvIHRoZSBuZXh0IHN1Y2Nlc3NmdWwgbmRvX29wZW4oKSB2aWEgb3R4Ml9tcXByaW9fdXAoKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0ID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkge1xuJiM0MztcdFx0ZXJyID0gb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYobmV0ZGV2LCB0cnVlKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0fSBlbHNlIGlmIChwZnZmLVx1MDAzZWh3LnR4c2NocV9jbnRbTklYX1RYU0NIX0xWTF9TTVFdKSB7XG4mIzQzO1x0XHRlcnIgPSBvdHgyX21xcHJpb191cChwZnZmKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgXHUwMDI2cGZ2Zi1cdTAwM2VjdXJfbXFfc25hcCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19zbmFwX2Rlc3Ryb3koc3RydWN0IG90eDJfbmljICpwZnZmKVxuJiM0Mzt7XG4mIzQzO1x0b3R4Ml9tcXByaW9fc25hcF9mcmVlKHBmdmYsIFx1MDAyNnBmdmYtXHUwMDNlY3VyX21xX3NuYXApO1xuJiM0MztcdG90eDJfbXFwcmlvX3NuYXBfZnJlZShwZnZmLCBcdTAwMjZwZnZmLVx1MDAzZW9sZF9tcV9zbmFwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fY2xlYXJfc3coc3RydWN0IG90eDJfbmljICpwZnZmKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtXHUwMDNlbmV0ZGV2O1xuJiM0MztcbiYjNDM7XHRwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0ID0gZmFsc2U7XG4mIzQzO1x0b3R4Ml9tcXByaW9fY2xlYXJfcmVwbGFjZV9zdGF0ZShwZnZmKTtcbiYjNDM7XHRuZXRkZXZfc2V0X251bV90YyhuZXRkZXYsIDApO1xuJiM0MztcdG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFRlYXIgZG93biBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQ6IGNsZWFyIHBlci1xdWV1ZSBzaGFwZXJzLFxuJiM0MzsgKiBtcXByaW9fcmF0ZV9saW1pdCwgbmV0ZGV2IFRDIG1hcHBpbmdzLCBhbmQgdGhlIGNhY2hlZCByYXRlcy4gIENhbGxlZCBvblxuJiM0MzsgKiBleHBsaWNpdCBtcXByaW8gdGVhcmRvd24gKHRjIHFkaXNjIGRlbCkgYW5kIGVycm9yIGNsZWFudXAsIG5vdCBvblxuJiM0MzsgKiByb3V0aW5lIG5ldGRldiBzdG9wL29wZW4gY3ljbGVzIHdoZXJlIHRoZSBvZmZsb2FkIHN0YXlzIGFjdGl2ZS5cbiYjNDM7ICovXG4mIzQzO2ludCBvdHgyX21xcHJpb19kb3duKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiYjNDM7e1xuJiM0MztcdGludCBlcnIgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoIXBmdmYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKG5ldGlmX3J1bm5pbmcocGZ2Zi1cdTAwM2VuZXRkZXYpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBvdHgyX21xcHJpb19tZHFfYWxsb2NhdGVkKHBmdmYpKVxuJiM0MztcdFx0ZXJyID0gb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHBmdmYpO1xuJiM0MztcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRuZXRkZXZfd2FybihwZnZmLVx1MDAzZW5ldGRldixcbiYjNDM7XHRcdFx0ICAgIFwmIzM0O21xcHJpbzogZmFpbGVkIHRvIGNsZWFyIGhhcmR3YXJlIHNoYXBlcnM6ICVkOyBjbGVhcmluZyBzb2Z0d2FyZSBzdGF0ZVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgIGVycik7XG4mIzQzO1x0XHRvdHgyX21xcHJpb19jbGVhcl9zdyhwZnZmKTtcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRvdHgyX21xcHJpb19jbGVhcl9zdyhwZnZmKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBvdHgyX21xcHJpb191cChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGZ2Zi1cdTAwM2VuZXRkZXY7XG4mIzQzO1x0aW50IHR4cSwgZXJyO1xuJiM0MztcbiYjNDM7XHRpZiAoIXBmdmYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSB8fCAhcGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0Zm9yICh0eHEgPSAwOyB0eHEgXHUwMDNjIHBmdmYtXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXM7IHR4cSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8uZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFKVxuJiM0MztcdFx0XHRtaW5fcmF0ZSA9IHBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlW3R4cV07XG4mIzQzO1x0XHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8uZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKVxuJiM0MztcdFx0XHRtYXhfcmF0ZSA9IHBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlW3R4cV07XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFtaW5fcmF0ZSBcdTAwMjZcdTAwMjYgIW1heF9yYXRlKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRlcnIgPSBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHBmdmYsIHR4cSwgbWluX3JhdGUsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIG1heF9yYXRlKTtcbiYjNDM7XHRcdGlmIChlcnIpIHtcbiYjNDM7XHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiBmYWlsZWQgdG8gcmVzdG9yZSBzaGFwZXIgZm9yIHR4cSAlZDogJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgdHhxLCBlcnIpO1xuJiM0MztcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFJlc3RhcnQgdGhlIG5ldGRldiB0byByZXByb2dyYW0gdGhlIFRYIHNjaGVkdWxlciBoaWVyYXJjaHkgZm9yIG1xcHJpb1xuJiM0MzsgKiBiYW5kd2lkdGggb2ZmbG9hZC4gIEJvdGggbXFwcmlvIGFkZCBhbmQgZGVsZXRlICh3aGVuIG9mZmxvYWQgd2FzIGFjdGl2ZSlcbiYjNDM7ICogdGFrZSB0aGlzIHBhdGggdmlhIG5kb19zdG9wKCkvbmRvX29wZW4oKSBzbyBWRi1zcGVjaWZpYyBvcGVuIGxvZ2ljIChlLmcuXG4mIzQzOyAqIExCSyBjYXJyaWVyIG9uKSBydW5zIGNvcnJlY3RseS5cbiYjNDM7ICpcbiYjNDM7ICogSW50ZW50aW9uYWwgYmVoYXZpb3VyOiB0aGlzIGZ1bGwgc3RvcC9vcGVuIGN5Y2xlIGRyb3BzIGluLWZsaWdodCB0cmFmZmljXG4mIzQzOyAqIChjYXJyaWVyIG9mZiwgSVJRL05BUEkgdGVhcmRvd24sIHF1ZXVlIGRyYWluKS4gIFRoZSBOSVggVFggc2NoZWR1bGVyIG11c3RcbiYjNDM7ICogYmUgcmVhbGxvY2F0ZWQgKGUuZy4gb25lIFNNUSBwZXIgbm9uLVFvUyBxdWV1ZSkgYW5kIGNhbm5vdCBiZSByZXByb2dyYW1tZWRcbiYjNDM7ICogbGl2ZSB0b2RheSwgc28gYSBuZXRkZXYgYm91bmNlIGlzIHJlcXVpcmVkIG9uIGV2ZXJ5IG1xcHJpbyBhZGQsIHJlcGxhY2UsXG4mIzQzOyAqIGRlbGV0ZSwgYW5kIHJvbGxiYWNrLiAgVXNlcnMgc2VlIGEgYnJpZWYgY29ubmVjdGl2aXR5IGJsaXA7IHRoaXMgaXMgbm90IGFcbiYjNDM7ICogYnVnIHRvIFwmIzM0O2ZpeFwmIzM0OyB3aXRob3V0IGltcGxlbWVudGluZyB0aGUgbGl2ZS1yZXByb2dyYW1taW5nIHBhdGggbm90ZWQgYmVsb3cuXG4mIzQzOyAqIElmIG9wZW4gZmFpbHMsIHRoZSBpbnRlcmZhY2UgaXMgbGVmdCBhZG1pbmlzdHJhdGl2ZWx5IGRvd24gd2l0aG91dCBjYWxsaW5nXG4mIzQzOyAqIG5kb19zdG9wKCkgYWdhaW4gb24gcmVzb3VyY2VzIGFscmVhZHkgdG9ybiBkb3duIGJ5IHRoZSBvcGVuIGVycm9yIHBhdGguXG4mIzQzOyAqXG4mIzQzOyAqIFF1aWVzY2UgdGhlIHRyYW5zbWl0IHBhdGggbGlrZSBfX2Rldl9jbG9zZV9tYW55KCkgYmVmb3JlIG5kb19zdG9wKCkgc29cbiYjNDM7ICogb3R4Ml94bWl0KCkgY2Fubm90IHJhY2Ugb3R4Ml9mcmVlX3F1ZXVlX21lbSgpLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJhdGVfbGltaXQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyAqb3BzID0gbmV0ZGV2LVx1MDAzZW5ldGRldl9vcHM7XG4mIzQzO1x0Ym9vbCBydW5uaW5nID0gbmV0aWZfcnVubmluZyhuZXRkZXYpO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdC8qIFRPRE86IEV4cGxvcmUgbGl2ZSBUWCBzY2hlZHVsZXIgcmVwcm9ncmFtbWluZyB0byBhdm9pZCBhIGZ1bGxcbiYjNDM7XHQgKiBuZG9fc3RvcCgpL25kb19vcGVuKCkgYm91bmNlIG9uIGV2ZXJ5IG1xcHJpbyBjaGFuZ2UuXG4mIzQzO1x0ICovXG4mIzQzO1x0bmV0ZGV2X2luZm8obmV0ZGV2LFxuJiM0MztcdFx0ICAgIFwmIzM0O21xcHJpbzogcmVzdGFydGluZyBpbnRlcmZhY2UgdG8gcmVwcm9ncmFtIFRYIHNjaGVkdWxlcjsgaW4tZmxpZ2h0IHRyYWZmaWMgd2lsbCBiZSBkcm9wcGVkXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJ1bm5pbmcpIHtcbiYjNDM7XHRcdGNsZWFyX2JpdChfX0xJTktfU1RBVEVfU1RBUlQsIFx1MDAyNm5ldGRldi1cdTAwM2VzdGF0ZSk7XG4mIzQzO1x0XHRzbXBfbWJfX2FmdGVyX2F0b21pYygpOyAvKiBDb21taXQgbmV0aWZfcnVubmluZygpLiAqL1xuJiM0MztcdH1cbiYjNDM7XHRkZXZfZGVhY3RpdmF0ZShuZXRkZXYsIHRydWUpO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBvcHMtXHUwMDNlbmRvX3N0b3AobmV0ZGV2KTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRpZiAocnVubmluZykge1xuJiM0MztcdFx0XHRzZXRfYml0KF9fTElOS19TVEFURV9TVEFSVCwgXHUwMDI2bmV0ZGV2LVx1MDAzZXN0YXRlKTtcbiYjNDM7XHRcdFx0ZGV2X2FjdGl2YXRlKG5ldGRldik7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogU2V0IGJlZm9yZSBuZG9fb3BlbigpIHNvIG90eDJfdHhzY2hfYWxsb2MoKSB3aWRlbnMgU01RIGFsbG9jYXRpb24uXG4mIzQzO1x0ICogT24gdGVhcmRvd24sIGRyb3AgbXFwcmlvIHNvZnR3YXJlIHN0YXRlIHNvIG5kb19vcGVuKCkgZG9lcyBub3RcbiYjNDM7XHQgKiByZS1hcHBseSBiYW5kd2lkdGggbGltaXRzIHZpYSBvdHgyX21xcHJpb191cCgpIGFmdGVyIHRoZSBrZXJuZWxcbiYjNDM7XHQgKiByZW1vdmVkIHRoZSBxZGlzYy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocmF0ZV9saW1pdClcbiYjNDM7XHRcdHBmdmYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQgPSB0cnVlO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdG90eDJfbXFwcmlvX2NsZWFyX3N3KHBmdmYpO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBvcHMtXHUwMDNlbmRvX29wZW4obmV0ZGV2KTtcbiYjNDM7XHRpZiAoIWVyciBcdTAwMjZcdTAwMjYgcnVubmluZykge1xuJiM0MztcdFx0c2V0X2JpdChfX0xJTktfU1RBVEVfU1RBUlQsIFx1MDAyNm5ldGRldi1cdTAwM2VzdGF0ZSk7XG4mIzQzO1x0XHRkZXZfYWN0aXZhdGUobmV0ZGV2KTtcbiYjNDM7XHR9IGVsc2UgaWYgKGVycikge1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O0ZhaWxlZCB0byByZXN0YXJ0IGRldmljZSBhZnRlciBtcXByaW8gY2hhbmdlOiAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgZXJyKTtcbiYjNDM7XHRcdC8qIG5kb19vcGVuKCkgYWxyZWFkeSBmcmVlZCB0aGUgVFggc2NoZWR1bGVycyBvbiBmYWlsdXJlIHdoaWxlXG4mIzQzO1x0XHQgKiBuZXRpZl9ydW5uaW5nKCkgbWF5IHN0aWxsIGJlIHRydWU7IGRyb3AgbXFwcmlvIHNvZnR3YXJlIHN0YXRlXG4mIzQzO1x0XHQgKiBvbmx5IGluc3RlYWQgb2Ygc2VuZGluZyBzaGFwZXIgY2xlYXJzIHRvIGZyZWVkIHF1ZXVlcy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0b3R4Ml9tcXByaW9fY2xlYXJfc3cocGZ2Zik7XG4mIzQzO1x0XHQvKiBuZG9fb3BlbigpIHJvbGxzIGJhY2sgb24gZmFpbHVyZTsgbWFyayB0aGUgaW50ZXJmYWNlIGRvd24gc29cbiYjNDM7XHRcdCAqIG5ldGlmX2Nsb3NlKCkgZG9lcyBub3QgaW52b2tlIG5kb19zdG9wKCkgb24gZnJlZWQgTkFQSS9xdWV1ZVxuJiM0MztcdFx0ICogc3RhdGUuIENhbGxlciBob2xkcyBSVE5MOyBkZXZfY2xvc2UoKSB3b3VsZCBkZWFkbG9jay5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0b3R4Ml9zZXRfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfSU5URl9ET1dOKTtcbiYjNDM7XHRcdC8qIHZpc2libGUgdG8gb3R4Ml9zdG9wKCkgb24gb3RoZXIgY3B1cyAqL1xuJiM0MztcdFx0c21wX3dtYigpO1xuJiM0MztcdFx0bmV0aWZfY2xvc2UobmV0ZGV2KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fdmFsaWRhdGVfdGNfcmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuJiM0MztcdFx0XHRcdFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxuJiM0MztcdFx0XHRcdFx0dTY0IHJhdGUsIHUzMiBxY291bnQsIGludCB0YyxcbiYjNDM7XHRcdFx0XHRcdGNvbnN0IGNoYXIgKm5hbWUpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIXJhdGUpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKHFjb3VudCBcdTAwM2M9IDEpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0LyogVE9ETzogbXFwcmlvIG1pbl9yYXRlL21heF9yYXRlIGFyZSBwZXIgdHJhZmZpYyBjbGFzcywgYnV0IGJhbmR3aWR0aFxuJiM0MztcdCAqIG9mZmxvYWQgc2hhcGVzIG9uIHBlci1xdWV1ZSBNRFEgbm9kZXMgcGFyZW50ZWQgdW5kZXIgYSBzaW5nbGUgVEw0LlxuJiM0MztcdCAqIFdpdGhvdXQgcGVyLVRDIFRMNCBzaGFwZXJzIHRoZSBkcml2ZXIgY2Fubm90IGhvbm9yIFRDLWxldmVsIGxpbWl0c1xuJiM0MztcdCAqIGZvciBhIHRyYWZmaWMgY2xhc3MgdGhhdCBzcGFucyBtdWx0aXBsZSBxdWV1ZXMgd2l0aG91dCBlaXRoZXJcbiYjNDM7XHQgKiBkaXZpZGluZyB0aGUgcmF0ZSBhY3Jvc3MgcXVldWVzICh1QVBJIG1pc21hdGNoKSBvciBleGNlZWRpbmcgdGhlIFRDXG4mIzQzO1x0ICogY2FwIHdoZW4gZXZlcnkgbWVtYmVyIHF1ZXVlIGlzIGFjdGl2ZS4gUmVqZWN0IHVudGlsIHBlci1UQyBUTDRcbiYjNDM7XHQgKiBzaGFwaW5nIGNhbiBiZSBpbXBsZW1lbnRlZCB3aXRob3V0IGFsbG9jYXRpbmcgYWRkaXRpb25hbCBUTDQgbm9kZXNcbiYjNDM7XHQgKiBiZXlvbmQgdGhlIGV4aXN0aW5nIGhpZXJhcmNoeS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRuZXRkZXZfZXJyKG5ldGRldixcbiYjNDM7XHRcdCAgIFwmIzM0O21xcHJpbzogJXMgcmF0ZSBmb3IgdGMgJWQgbm90IHN1cHBvcnRlZCB3aXRoICV1IHF1ZXVlc1xcblwmIzM0OyxcbiYjNDM7XHRcdCAgIG5hbWUsIHRjLCBxY291bnQpO1xuJiM0MztcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHQgICAgICAgXCYjMzQ7bXFwcmlvOiAlcyByYXRlIGZvciB0YyAlZCBub3Qgc3VwcG9ydGVkIHdpdGggJXUgcXVldWVzXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgICAgbmFtZSwgdGMsIHFjb3VudCk7XG4mIzQzO1x0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3R4cXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiYjNDM7XHRcdFx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICAgIHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4mIzQzO1x0dTE2IG51bV90eHEgPSBwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzO1xuJiM0MztcdGludCB0YywgdHhxO1xuJiM0MztcbiYjNDM7XHRpZiAocW9wdC1cdTAwM2VudW1fdGMgXHUwMDNlIG51bV90eHEpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcJiMzNDtOdW1iZXIgb2YgVENzICgldSkgZXhjZWVkcyBodyBxdWV1ZXMgJXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgIHFvcHQtXHUwMDNlbnVtX3RjLCBudW1fdHhxKTtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHRcdCAgICAgICBcJiMzNDtOdW1iZXIgb2YgVENzICgldSkgZXhjZWVkcyBodyBxdWV1ZXMgJXVcJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICAgIHFvcHQtXHUwMDNlbnVtX3RjLCBudW1fdHhxKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKG51bV90eHEgXHUwMDNlIE1BWF9UWFNDSFFfUEVSX0ZVTkMpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0XHQgICBcJiMzNDtOdW1iZXIgb2YgcXVldWVzICgldSkgZXhjZWVkcyBtYXggc2NoZWR1bGVyIHF1ZXVlcyAldVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgbnVtX3R4cSwgTUFYX1RYU0NIUV9QRVJfRlVOQyk7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICAgICAgXCYjMzQ7TnVtYmVyIG9mIHF1ZXVlcyAoJXUpIGV4Y2VlZHMgbWF4IHNjaGVkdWxlciBxdWV1ZXMgJXVcJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICAgIG51bV90eHEsIE1BWF9UWFNDSFFfUEVSX0ZVTkMpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIHFvcHQtXHUwMDNlbnVtX3RjOyB0YyYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHUzMiBxY291bnQgPSBxb3B0LVx1MDAzZWNvdW50W3RjXTtcbiYjNDM7XG4mIzQzO1x0XHRmb3IgKHR4cSA9IHFvcHQtXHUwMDNlb2Zmc2V0W3RjXTtcbiYjNDM7XHRcdCAgICAgdHhxIFx1MDAzYyBxb3B0LVx1MDAzZW9mZnNldFt0Y10gJiM0MzsgcWNvdW50OyB0eHEmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdGlmICh0eHEgXHUwMDNlPSBudW1fdHhxKSB7XG4mIzQzO1x0XHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdFx0XHQgICBcJiMzNDttcXByaW86IHR4cSAlZCBleGNlZWRzIG9mZmxvYWQgcXVldWUgY291bnQgJXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICB0eHEsIG51bV90eHEpO1xuJiM0MztcdFx0XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgXCYjMzQ7bXFwcmlvOiB0eHEgJWQgZXhjZWVkcyBvZmZsb2FkIHF1ZXVlIGNvdW50ICV1XCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgdHhxLCBudW1fdHhxKTtcbiYjNDM7XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIG90eDJfbXFwcmlvX3JhdGVfdmFsaWQodTY0IHJhdGVfYnl0ZXNfcHMpXG4mIzQzO3tcbiYjNDM7XHR1NjQgbWJwcztcbiYjNDM7XG4mIzQzO1x0aWYgKCFyYXRlX2J5dGVzX3BzKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdGlmIChyYXRlX2J5dGVzX3BzIFx1MDAzYyBPVFgyX01RUFJJT19NSU5fUkFURV9CWVRFU19QUylcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJhdGVfYnl0ZXNfcHMgXHUwMDNlIE9UWDJfTVFQUklPX01BWF9SQVRFX0JZVEVTX1BTKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRpZiAocmF0ZV9ieXRlc19wcyBcdTAwM2UgZGl2X3U2NChVNjRfTUFYLCA4KSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0bWJwcyA9IG90eDJfY29udmVydF9yYXRlKHJhdGVfYnl0ZXNfcHMpO1xuJiM0MztcdHJldHVybiBpbG9nMihtYnBzIC8gMikgXHUwMDNjPSBNQVhfUkFURV9FWFBPTkVOVDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHgyX3RlYXJkb3duX3RjX21xcHJpbyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4mIzQzO1x0XHRcdFx0ICAgc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9IFx1MDAyNm1xcHJpby1cdTAwM2Vxb3B0O1xuJiM0MztcdGJvb2wgaGFkX21xcHJpbyA9IHBmdmYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQ7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtXHUwMDNlbmV0ZGV2O1xuJiM0MztcdGJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKG5ldGRldik7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0cW9wdC1cdTAwM2VodyA9IDA7XG4mIzQzO1xuJiM0MztcdC8qIHRjIHFkaXNjIHJlcGxhY2UgcnVucyBzZXR1cCBvbiB0aGUgbmV3IG1xcHJpbyBiZWZvcmUgZGVzdHJveWluZyB0aGVcbiYjNDM7XHQgKiBvbGQgb25lLiByZXBsYWNlX3NldHVwX2RvbmUgYW5kIFRDX1JPT1RfR1JBRlQgZGlzdGluZ3Vpc2ggc3RhbGVcbiYjNDM7XHQgKiBvbGQtaW5zdGFuY2UgdGVhcmRvd24gZnJvbSBncmFmdCBmYWlsdXJlIGFmdGVyIHNldHVwLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5yZXBsYWNlX3NldHVwX2RvbmUgXHUwMDI2XHUwMDI2IHBmdmYtXHUwMDNlY3VyX21xX3NuYXApIHtcbiYjNDM7XHRcdGVyciA9IDA7XG4mIzQzO1x0XHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8ucmVwbGFjZV9ncmFmdF9kb25lKVxuJiM0MztcdFx0XHRvdHgyX21xcHJpb19zbmFwX2NvbW1pdChwZnZmKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0ZXJyID0gb3R4Ml9tcXByaW9fcmVzdG9yZV9vbGQocGZ2Zik7XG4mIzQzO1x0XHRvdHgyX21xcHJpb19jbGVhcl9yZXBsYWNlX3N0YXRlKHBmdmYpO1xuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFNraXAgdGhlIG5ldGRldiByZXN0YXJ0IHdoZW4gbXFwcmlvIG9mZmxvYWQgd2FzIG5vdCBhY3RpdmUuICovXG4mIzQzO1x0aWYgKCFoYWRfbXFwcmlvKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmIChpZl91cCkge1xuJiM0MztcdFx0aW50IGRvd25fZXJyLCBlcnI7XG4mIzQzO1xuJiM0MztcdFx0ZG93bl9lcnIgPSBvdHgyX21xcHJpb19kb3duKHBmdmYpO1xuJiM0MztcdFx0ZXJyID0gb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYobmV0ZGV2LCBmYWxzZSk7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0cmV0dXJuIGRvd25fZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogbmRvX3N0b3AoKSBhbHJlYWR5IGZyZWVkIHRoZSBUWCBzY2hlZHVsZXIgVEwgbm9kZXM7IGRyb3Agc29mdHdhcmVcbiYjNDM7XHQgKiBzdGF0ZSBvbmx5LlxuJiM0MztcdCAqL1xuJiM0MztcdG90eDJfbXFwcmlvX2NsZWFyX3N3KHBmdmYpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfbXFwcmlvKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4mIzQzO1x0XHRcdFx0c3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayA9IG1xcHJpby1cdTAwM2VleHRhY2s7XG4mIzQzO1x0c3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcdTAwMjZtcXByaW8tXHUwMDNlcW9wdDtcbiYjNDM7XHRib29sIHJlcGxhY2luZyA9IHBmdmYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQ7XG4mIzQzO1x0Ym9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcobmV0ZGV2KTtcbiYjNDM7XHRpbnQgdGMsIHR4cSwgZXJyLCBpO1xuJiM0MztcbiYjNDM7XHRpZiAoIXFvcHQtXHUwMDNlaHcpXG4mIzQzO1x0XHRyZXR1cm4gb3R4Ml90ZWFyZG93bl90Y19tcXByaW8ocGZ2ZiwgbXFwcmlvKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFpZl91cCkge1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwmIzM0O21xcHJpbzogc2V0dXAgcmVxdWlyZXMgaW50ZXJmYWNlIFVQXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwmIzM0O21xcHJpbzogc2V0dXAgcmVxdWlyZXMgaW50ZXJmYWNlIFVQXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChtcXByaW8tXHUwMDNlc2hhcGVyICE9IFRDX01RUFJJT19TSEFQRVJfQldfUkFURSkge1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwmIzM0O1Vuc3VwcG9ydGVkIG1xcHJpbyBzaGFwZXIgJSN4XFxuXCYjMzQ7LCBtcXByaW8tXHUwMDNlc2hhcGVyKTtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLCBcJiMzNDtVbnN1cHBvcnRlZCBtcXByaW8gc2hhcGVyICUjeFwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgICAgbXFwcmlvLVx1MDAzZXNoYXBlcik7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIXRlc3RfYml0KFFPU19DSVJfUElSX1NVUFBPUlQsIFx1MDAyNnBmdmYtXHUwMDNlaHcuY2FwX2ZsYWcpKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5ldGRldixcbiYjNDM7XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCByZXF1aXJlcyBDSVImIzQzO1BJUiBzdXBwb3J0XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCByZXF1aXJlcyBDSVImIzQzO1BJUiBzdXBwb3J0XCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChpc19vdHgyX3NkcF9yZXAocGZ2Zi1cdTAwM2VwZGV2KSkge1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwmIzM0O21xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgbm90IHN1cHBvcnRlZCBvbiBTRFAgcmVwXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCBub3Qgc3VwcG9ydGVkIG9uIFNEUCByZXBcJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHBmdmYtXHUwMDNlcGZjX2VuKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5ldGRldixcbiYjNDM7XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgUEZDIGlzIGVuYWJsZWRcXG5cJiMzNDspO1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDttcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBQRkMgaXMgZW5hYmxlZFwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAocGZ2Zi1cdTAwM2V4ZHBfcHJvZykge1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O21xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFhEUCBpcyBhY3RpdmVcXG5cJiMzNDspO1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDttcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBYRFAgaXMgYWN0aXZlXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghbGlzdF9lbXB0eShcdTAwMjZwZnZmLVx1MDAzZXFvcy5xb3NfdHJlZSkpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0XHQgICBcJiMzNDttcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBIVEIgaXMgYWN0aXZlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgSFRCIGlzIGFjdGl2ZVwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIHFvcHQtXHUwMDNlbnVtX3RjOyB0YyYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDtcbiYjNDM7XHRcdHUzMiBxY291bnQgPSBxb3B0LVx1MDAzZWNvdW50W3RjXTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcbiYjNDM7XHRcdFx0bWluX3JhdGUgPSBtcXByaW8tXHUwMDNlbWluX3JhdGVbdGNdO1xuJiM0MztcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUpXG4mIzQzO1x0XHRcdG1heF9yYXRlID0gbXFwcmlvLVx1MDAzZW1heF9yYXRlW3RjXTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAobWluX3JhdGUgXHUwMDI2XHUwMDI2IG1heF9yYXRlIFx1MDAyNlx1MDAyNiBtaW5fcmF0ZSBcdTAwM2UgbWF4X3JhdGUpIHtcbiYjNDM7XHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7bWluX3JhdGUgJWxsdSBleGNlZWRzIG1heF9yYXRlICVsbHUgZm9yIHRjICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIG1pbl9yYXRlLCBtYXhfcmF0ZSwgdGMpO1xuJiM0MztcdFx0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBcJiMzNDttaW5fcmF0ZSAlbGx1IGV4Y2VlZHMgbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWRcJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgbWluX3JhdGUsIG1heF9yYXRlLCB0Yyk7XG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFKSB7XG4mIzQzO1x0XHRcdGVyciA9IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3RjX3JhdGUobmV0ZGV2LCBleHRhY2ssIG1pbl9yYXRlLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgIHFjb3VudCwgdGMsIFwmIzM0O21pblwmIzM0Oyk7XG4mIzQzO1x0XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSkge1xuJiM0MztcdFx0XHRlcnIgPSBvdHgyX21xcHJpb192YWxpZGF0ZV90Y19yYXRlKG5ldGRldiwgZXh0YWNrLCBtYXhfcmF0ZSxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICBxY291bnQsIHRjLCBcJiMzNDttYXhcJiMzNDspO1xuJiM0MztcdFx0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIW90eDJfbXFwcmlvX3JhdGVfdmFsaWQobWluX3JhdGUpKSB7XG4mIzQzO1x0XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O21xcHJpbzogbWluX3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgbWluX3JhdGUsIHRjKTtcbiYjNDM7XHRcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgXCYjMzQ7bXFwcmlvOiBtaW5fcmF0ZSAlbGx1IGZvciB0YyAlZCBpcyBvdXRzaWRlIGhhcmR3YXJlIGxpbWl0c1wmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBtaW5fcmF0ZSwgdGMpO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAhb3R4Ml9tcXByaW9fcmF0ZV92YWxpZChtYXhfcmF0ZSkpIHtcbiYjNDM7XHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZCBpcyBvdXRzaWRlIGhhcmR3YXJlIGxpbWl0c1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICBtYXhfcmF0ZSwgdGMpO1xuJiM0MztcdFx0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBcJiMzNDttcXByaW86IG1heF9yYXRlICVsbHUgZm9yIHRjICVkIGlzIG91dHNpZGUgaGFyZHdhcmUgbGltaXRzXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIG1heF9yYXRlLCB0Yyk7XG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZXJyID0gb3R4Ml9tcXByaW9fdmFsaWRhdGVfdHhxcyhuZXRkZXYsIGV4dGFjaywgcW9wdCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdGVyciA9IG90eDJfbXFwcmlvX3N0YWdlX2N1cihwZnZmLCBtcXByaW8pO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihwZnZmLVx1MDAzZW5ldGRldiwgdHJ1ZSk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gb3R4Ml9tcXByaW9fYWxsb2NfY2FjaGUocGZ2ZiwgcmVwbGFjaW5nKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHQvKiBvdHgyX21xcHJpb191cCgpIG1heSBoYXZlIHJlc3RvcmVkIHRoZSBwcmV2aW91cyBjb25maWd1cmF0aW9uIGR1cmluZ1xuJiM0MztcdCAqIHRoZSByZXN0YXJ0IGFib3ZlLiBDbGVhciBldmVyeSBNRFEgc2hhcGVyIGJlZm9yZSBhcHBseWluZyB0aGUgbmV3XG4mIzQzO1x0ICogbWFwcGluZyBzbyBxdWV1ZXMgZHJvcHBlZCBmcm9tIHRoZSBUQyBsYXlvdXQgZG8gbm90IGtlZXAgc3RhbGVcbiYjNDM7XHQgKiBsaW1pdHMgaW4gaGFyZHdhcmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKG90eDJfbXFwcmlvX21kcV9hbGxvY2F0ZWQocGZ2ZikpIHtcbiYjNDM7XHRcdGVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHBmdmYtXHUwMDNlbXFwcmlvLmZsYWdzID0gbXFwcmlvLVx1MDAzZWZsYWdzO1xuJiM0MztcbiYjNDM7XHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIHFvcHQtXHUwMDNlbnVtX3RjOyB0YyYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDtcbiYjNDM7XHRcdHUzMiBxY291bnQgPSBxb3B0LVx1MDAzZWNvdW50W3RjXTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBSYXRlcyBvbWl0dGVkIGZyb20gdGMgbXFwcmlvIGFyZSBwYXNzZWQgYXMgemVybyBhbmQgYm90aCBNRFFcbiYjNDM7XHRcdCAqIHNoYXBlciByZWdpc3RlcnMgYXJlIHByb2dyYW1tZWQ7IHNlZVxuJiM0MztcdFx0ICogb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcigpLiBNdWx0aS1xdWV1ZSBUQ3Mgd2l0aCByYXRlc1xuJiM0MztcdFx0ICogYXJlIHJlamVjdGVkIGFib3ZlLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcbiYjNDM7XHRcdFx0bWluX3JhdGUgPSBtcXByaW8tXHUwMDNlbWluX3JhdGVbdGNdO1xuJiM0MztcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUpXG4mIzQzO1x0XHRcdG1heF9yYXRlID0gbXFwcmlvLVx1MDAzZW1heF9yYXRlW3RjXTtcbiYjNDM7XG4mIzQzO1x0XHRmb3IgKHR4cSA9IHFvcHQtXHUwMDNlb2Zmc2V0W3RjXTtcbiYjNDM7XHRcdCAgICAgdHhxIFx1MDAzYyBxb3B0LVx1MDAzZW9mZnNldFt0Y10gJiM0MzsgcWNvdW50OyB0eHEmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdG5ldGRldl9kYmcobmV0ZGV2LFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O21xcHJpbzogdGMgJWQgdHhxICVkIG1pbl9yYXRlICVsbHUgbWF4X3JhdGUgJWxsdVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICB0YywgdHhxLCBtaW5fcmF0ZSwgbWF4X3JhdGUpO1xuJiM0MztcbiYjNDM7XHRcdFx0cGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGVbdHhxXSA9IG1pbl9yYXRlO1xuJiM0MztcdFx0XHRwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZVt0eHFdID0gbWF4X3JhdGU7XG4mIzQzO1xuJiM0MztcdFx0XHRlcnIgPSBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHBmdmYsIHR4cSxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICBtaW5fcmF0ZSwgbWF4X3JhdGUpO1xuJiM0MztcdFx0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG5ldGRldl9zZXRfbnVtX3RjKG5ldGRldiwgcGZ2Zi1cdTAwM2VjdXJfbXFfc25hcC1cdTAwM2VudW1fdGMpO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBmdmYtXHUwMDNlY3VyX21xX3NuYXAtXHUwMDNlbnVtX3RjOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdG5ldGRldl9zZXRfdGNfcXVldWUobmV0ZGV2LCBpLCBwZnZmLVx1MDAzZWN1cl9tcV9zbmFwLVx1MDAzZWNvdW50W2ldLFxuJiM0MztcdFx0XHRcdCAgICBxb3B0LVx1MDAzZW9mZnNldFtpXSk7XG4mIzQzO1xuJiM0MztcdHFvcHQtXHUwMDNlaHcgPSBUQ19NUVBSSU9fSFdfT0ZGTE9BRF9UQ1M7XG4mIzQzO1xuJiM0MztcdGlmIChyZXBsYWNpbmcpIHtcbiYjNDM7XHRcdHBmdmYtXHUwMDNlbXFwcmlvLnJlcGxhY2Vfc2V0dXBfZG9uZSA9IHRydWU7XG4mIzQzO1x0XHRwZnZmLVx1MDAzZW1xcHJpby5yZXBsYWNlX2dyYWZ0X2RvbmUgPSBmYWxzZTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0b3R4Ml9tcXByaW9fc25hcF9jb21taXQocGZ2Zik7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2NsZWFudXA6XG4mIzQzO1x0cW9wdC1cdTAwM2VodyA9IDA7XG4mIzQzO1x0aWYgKHJlcGxhY2luZykge1xuJiM0MztcdFx0aW50IHJlc3RvcmVfZXJyID0gb3R4Ml9tcXByaW9fcmVzdG9yZV9vbGQocGZ2Zik7XG4mIzQzO1xuJiM0MztcdFx0b3R4Ml9tcXByaW9fY2xlYXJfcmVwbGFjZV9zdGF0ZShwZnZmKTtcbiYjNDM7XHRcdGlmIChyZXN0b3JlX2Vycikge1xuJiM0MztcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDttcXByaW86IHJlcGxhY2UgZmFpbGVkIGFuZCBwcmlvciBjb25maWd1cmF0aW9uIHJvbGxiYWNrIGZhaWxlZDogJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgcmVzdG9yZV9lcnIpO1xuJiM0MztcdFx0XHRpZiAoZXh0YWNrKVxuJiM0MztcdFx0XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgXCYjMzQ7bXFwcmlvOiByZXBsYWNlIGZhaWxlZCBhbmQgcHJpb3IgY29uZmlndXJhdGlvbiByb2xsYmFjayBmYWlsZWQ6ICVkXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgcmVzdG9yZV9lcnIpO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiByZXBsYWNlIGZhaWxlZDsgcHJpb3IgY29uZmlndXJhdGlvbiByZXN0b3JlZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdGlmIChleHRhY2spXG4mIzQzO1x0XHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiByZXBsYWNlIGZhaWxlZDsgcHJpb3IgY29uZmlndXJhdGlvbiByZXN0b3JlZFwmIzM0Oyk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRyZXR1cm4gZXJyID8gZXJyIDogLUVJTztcbiYjNDM7XHR9XG4mIzQzO1x0b3R4Ml90ZWFyZG93bl90Y19tcXByaW8ocGZ2ZiwgbXFwcmlvKTtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfcm9vdChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCB0Y19yb290X3FvcHRfb2ZmbG9hZCAqcm9vdClcbiYjNDM7e1xuJiM0MztcdHN3aXRjaCAocm9vdC1cdTAwM2Vjb21tYW5kKSB7XG4mIzQzO1x0Y2FzZSBUQ19ST09UX0dSQUZUOlxuJiM0MztcdFx0aWYgKHBmdmYtXHUwMDNlbXFwcmlvLnJlcGxhY2Vfc2V0dXBfZG9uZSlcbiYjNDM7XHRcdFx0cGZ2Zi1cdTAwM2VtcXByaW8ucmVwbGFjZV9ncmFmdF9kb25lID0gdHJ1ZTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfcXVlcnlfY2Fwcyh2b2lkICp0eXBlX2RhdGEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGNfcXVlcnlfY2Fwc19iYXNlICpiYXNlID0gdHlwZV9kYXRhO1xuJiM0MztcdHN0cnVjdCB0Y19tcXByaW9fY2FwcyAqY2FwcztcbiYjNDM7XG4mIzQzO1x0aWYgKGJhc2UtXHUwMDNldHlwZSAhPSBUQ19TRVRVUF9RRElTQ19NUVBSSU8pXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdGNhcHMgPSBiYXNlLVx1MDAzZWNhcHM7XG4mIzQzO1x0Y2Fwcy1cdTAwM2V2YWxpZGF0ZV9xdWV1ZV9jb3VudHMgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBpbnQgb3R4Ml9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSxcbiBcdFx0ICB2b2lkICp0eXBlX2RhdGEpXG4ge1xuIFx0c3dpdGNoICh0eXBlKSB7XG4mIzQzO1x0Y2FzZSBUQ19RVUVSWV9DQVBTOlxuJiM0MztcdFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfcXVlcnlfY2Fwcyh0eXBlX2RhdGEpO1xuIFx0Y2FzZSBUQ19TRVRVUF9CTE9DSzpcbiBcdFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfYmxvY2sobmV0ZGV2LCB0eXBlX2RhdGEpO1xuIFx0Y2FzZSBUQ19TRVRVUF9RRElTQ19IVEI6XG4gXHRcdHJldHVybiBvdHgyX3NldHVwX3RjX2h0YihuZXRkZXYsIHR5cGVfZGF0YSk7XG4mIzQzO1x0Y2FzZSBUQ19TRVRVUF9RRElTQ19NUVBSSU86XG4mIzQzO1x0XHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19tcXByaW8obmV0ZGV2LCB0eXBlX2RhdGEpO1xuJiM0MztcdGNhc2UgVENfU0VUVVBfUk9PVF9RRElTQzpcbiYjNDM7XHRcdHJldHVybiBvdHgyX3NldHVwX3RjX3Jvb3QobmV0ZGV2X3ByaXYobmV0ZGV2KSwgdHlwZV9kYXRhKTtcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcdH1cbkBAIC0xNjMyLDYgJiM0MzsyMzc3LDcgQEAgRVhQT1JUX1NZTUJPTChvdHgyX2luaXRfdGMpO1xuIHZvaWQgb3R4Ml9zaHV0ZG93bl90YyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYylcbiB7XG4gXHRvdHgyX2Rlc3Ryb3lfdGNfZmxvd19saXN0KG5pYyk7XG4mIzQzO1x0b3R4Ml9tcXByaW9fc25hcF9kZXN0cm95KG5pYyk7XG4gfVxuIEVYUE9SVF9TWU1CT0wob3R4Ml9zaHV0ZG93bl90Yyk7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdHhyeC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdHhyeC5jXG5pbmRleCA4ZDJkNjA3YmM5MmY5Li5mNjViYTQ0ZGI2MGI2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdHhyeC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90eHJ4LmNcbkBAIC0xNzEsNyAmIzQzOzE3MSw3IEBAIHN0YXRpYyB2b2lkIG90eDJfc2V0X3J4dHN0YW1wKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbiBcdHU2NCB0aW1lc3RhbXAsIHRzbnM7XG4gXHRpbnQgZXJyO1xuIFxuLVx0aWYgKCEocGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1JYX1RTVEFNUF9FTkFCTEVEKSlcbiYjNDM7XHRpZiAoIW90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19SWF9UU1RBTVBfRU5BQkxFRCkpXG4gXHRcdHJldHVybjtcbiBcbiBcdHRpbWVzdGFtcCA9IHBmdmYtXHUwMDNlcHRwLVx1MDAzZWNvbnZlcnRfcnhfcHRwX3RzdG1wKCoodTY0ICopZGF0YSk7XG5AQCAtMzc0LDEzICYjNDM7Mzc0LDEzIEBAIHN0YXRpYyB2b2lkIG90eDJfcmN2X3BrdF9oYW5kbGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbiBcdH1cbiBcdG90eDJfc2V0X3J4aGFzaChwZnZmLCBjcWUsIHNrYik7XG4gXG4tXHRpZiAoIShwZnZmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfUkVQX01PREVfRU5BQkxFRCkpIHtcbiYjNDM7XHRpZiAoIW90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19SRVBfTU9ERV9FTkFCTEVEKSkge1xuIFx0XHRza2JfcmVjb3JkX3J4X3F1ZXVlKHNrYiwgY3EtXHUwMDNlY3FfaWR4KTtcbiBcdFx0aWYgKHBmdmYtXHUwMDNlbmV0ZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX1JYQ1NVTSlcbiBcdFx0XHRza2ItXHUwMDNlaXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7XG4gXHR9XG4gXG4tXHRpZiAocGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1RDX01BUktfRU5BQkxFRClcbiYjNDM7XHRpZiAob3R4Ml90ZXN0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1RDX01BUktfRU5BQkxFRCkpXG4gXHRcdHNrYi1cdTAwM2VtYXJrID0gcGFyc2UtXHUwMDNlbWF0Y2hfaWQ7XG4gXG4gXHRza2JfbWFya19mb3JfcmVjeWNsZShza2IpO1xuQEAgLTUxMyw3ICYjNDM7NTEzLDcgQEAgc3RhdGljIGludCBvdHgyX3R4X25hcGlfaGFuZGxlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4gXHRcdCAgICAgKCh1NjQpY3EtXHUwMDNlY3FfaWR4IFx1MDAzY1x1MDAzYyAzMikgfCBwcm9jZXNzZWRfY3FlKTtcbiBcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfUlZVX0VTV0lUQ0gpXG4tXHRpZiAocGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1JFUF9NT0RFX0VOQUJMRUQpXG4mIzQzO1x0aWYgKG90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19SRVBfTU9ERV9FTkFCTEVEKSlcbiBcdFx0bmRldiA9IHBmdmYtXHUwMDNlcmVwc1txaWR4XS1cdTAwM2VuZXRkZXY7XG4gXHRlbHNlXG4gI2VuZGlmXG5AQCAtNTI2LDcgJiM0Mzs1MjYsNyBAQCBzdGF0aWMgaW50IG90eDJfdHhfbmFwaV9oYW5kbGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbiBcbiBcdFx0aWYgKHFpZHggXHUwMDNlPSBwZnZmLVx1MDAzZWh3LnR4X3F1ZXVlcylcbiBcdFx0XHRxaWR4IC09IHBmdmYtXHUwMDNlaHcueGRwX3F1ZXVlcztcbi1cdFx0aWYgKHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19SRVBfTU9ERV9FTkFCTEVEKVxuJiM0MztcdFx0aWYgKG90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19SRVBfTU9ERV9FTkFCTEVEKSlcbiBcdFx0XHRxaWR4ID0gMDtcbiBcdFx0dHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShuZGV2LCBxaWR4KTtcbiBcdFx0bmV0ZGV2X3R4X2NvbXBsZXRlZF9xdWV1ZSh0eHEsIHR4X3BrdHMsIHR4X2J5dGVzKTtcbkBAIC01OTksMTEgJiM0Mzs1OTksMTEgQEAgaW50IG90eDJfbmFwaV9oYW5kbGVyKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldClcbiBcbiBcdGlmICh3b3JrZG9uZSBcdTAwM2MgYnVkZ2V0IFx1MDAyNlx1MDAyNiBuYXBpX2NvbXBsZXRlX2RvbmUobmFwaSwgd29ya2RvbmUpKSB7XG4gXHRcdC8qIElmIGludGVyZmFjZSBpcyBnb2luZyBkb3duLCBkb24mIzM5O3QgcmUtZW5hYmxlIElSUSAqL1xuLVx0XHRpZiAocGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX0lOVEZfRE9XTilcbiYjNDM7XHRcdGlmIChvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfSU5URl9ET1dOKSlcbiBcdFx0XHRyZXR1cm4gd29ya2RvbmU7XG4gXG4gXHRcdC8qIEFkanVzdCBpcnEgY29hbGVzZSB1c2luZyBuZXRfZGltICovXG4tXHRcdGlmIChwZnZmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfQURQVFZfSU5UX0NPQUxfRU5BQkxFRClcbiYjNDM7XHRcdGlmIChvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfQURQVFZfSU5UX0NPQUxfRU5BQkxFRCkpXG4gXHRcdFx0b3R4Ml9hZGp1c3RfYWRhcHRpdmVfY29hbGVzZShwZnZmLCBjcV9wb2xsKTtcbiBcbiBcdFx0aWYgKGxpa2VseShjcSkpXG5AQCAtMTEzNyw3ICYjNDM7MTEzNyw3IEBAIHN0YXRpYyB2b2lkIG90eDJfc2V0X3R4dHN0YW1wKHN0cnVjdCBvdHgyX25pYyAqcGZ2Ziwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcbiBcdGlmICh1bmxpa2VseSghc2tiX3NoaW5mbyhza2IpLVx1MDAzZWdzb19zaXplIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgIChza2Jfc2hpbmZvKHNrYiktXHUwMDNldHhfZmxhZ3MgXHUwMDI2IFNLQlRYX0hXX1RTVEFNUCkpKSB7XG4tXHRcdGlmICh1bmxpa2VseShwZnZmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfUFRQX09ORVNURVBfU1lOQyBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdGlmICh1bmxpa2VseShvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfUFRQX09ORVNURVBfU1lOQykgXHUwMDI2XHUwMDI2XG4gXHRcdFx0ICAgICBvdHgyX3B0cF9pc19zeW5jKHNrYiwgXHUwMDI2cHRwX29mZnNldCwgXHUwMDI2dWRwX2NzdW1fY3J0KSkpIHtcbiBcdFx0XHRvcmlnaW5fdHN0YW1wID0gKHN0cnVjdCBwdHB2Ml90c3RhbXAgKilcbiBcdFx0XHRcdFx0KCh1OCAqKXNrYi1cdTAwM2VkYXRhICYjNDM7IHB0cF9vZmZzZXQgJiM0MztcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml92Zi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdmYuY1xuaW5kZXggZjc3NjVlMTlkNzhhOS4uNWY3OTE1MjMxY2EzYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmNcbkBAIC02MTAsNyAmIzQzOzYxMCw3IEBAIHN0YXRpYyBpbnQgb3R4MnZmX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG4gXHR2Zi1cdTAwM2VkZXYgPSBkZXY7XG4gXHR2Zi1cdTAwM2Vpb21tdV9kb21haW4gPSBpb21tdV9nZXRfZG9tYWluX2Zvcl9kZXYoZGV2KTtcbiBcbi1cdHZmLVx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19JTlRGX0RPV047XG4mIzQzO1x0b3R4Ml9zZXRfZmxhZyh2ZiwgT1RYMl9GTEFHX0lOVEZfRE9XTik7XG4gXHRodyA9IFx1MDAyNnZmLVx1MDAzZWh3O1xuIFx0aHctXHUwMDNlcGRldiA9IHZmLVx1MDAzZXBkZXY7XG4gXHRody1cdTAwM2VyeF9xdWV1ZXMgPSBxY291bnQ7XG5AQCAtODI0LDEwICYjNDM7ODI0LDEwIEBAIHN0YXRpYyB2b2lkIG90eDJ2Zl9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHR2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4gXG4gXHQvKiBEaXNhYmxlIDgwMi4zeCBwYXVzZSBmcmFtZXMgKi9cbi1cdGlmICh2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1JYX1BBVVNFX0VOQUJMRUQgfHxcbi1cdCAgICAodmYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19UWF9QQVVTRV9FTkFCTEVEKSkge1xuLVx0XHR2Zi1cdTAwM2VmbGFncyBcdTAwMjY9IH5PVFgyX0ZMQUdfUlhfUEFVU0VfRU5BQkxFRDtcbi1cdFx0dmYtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+T1RYMl9GTEFHX1RYX1BBVVNFX0VOQUJMRUQ7XG4mIzQzO1x0aWYgKG90eDJfdGVzdF9mbGFnKHZmLCBPVFgyX0ZMQUdfUlhfUEFVU0VfRU5BQkxFRCkgfHxcbiYjNDM7XHQgICAgb3R4Ml90ZXN0X2ZsYWcodmYsIE9UWDJfRkxBR19UWF9QQVVTRV9FTkFCTEVEKSkge1xuJiM0MztcdFx0b3R4Ml9jbGVhcl9mbGFnKHZmLCBPVFgyX0ZMQUdfUlhfUEFVU0VfRU5BQkxFRCk7XG4mIzQzO1x0XHRvdHgyX2NsZWFyX2ZsYWcodmYsIE9UWDJfRkxBR19UWF9QQVVTRV9FTkFCTEVEKTtcbiBcdFx0b3R4Ml9jb25maWdfcGF1c2VfZnJtKHZmKTtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml94c2suYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3hzay5jXG5pbmRleCAwZThhNmE2NDg2YzRhLi43ODA4NTg4YTAyMzRhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfeHNrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3hzay5jXG5AQCAtOTYsNyAmIzQzOzk2LDcgQEAgc3RhdGljIHZvaWQgb3R4Ml9jbGVhbl91cF9ycShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBxaWR4KVxuIFx0dTY0IGlvdmE7XG4gXG4gXHQvKiBJZiB0aGUgRE9XTiBmbGFnIGlzIHNldCBTUXMgYXJlIGFscmVhZHkgZnJlZWQgKi9cbi1cdGlmIChwZnZmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfSU5URl9ET1dOKVxuJiM0MztcdGlmIChvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfSU5URl9ET1dOKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0Y3EgPSBcdTAwMjZxc2V0LVx1MDAzZWNxW3FpZHhdO1xuQEAgLTE3Miw3ICYjNDM7MTcyLDcgQEAgaW50IG90eDJfeHNrX3dha2V1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgcXVldWVfaWQsIHUzMiBmbGFncylcbiBcdHN0cnVjdCBvdHgyX2NxX3BvbGwgKmNxX3BvbGwgPSBOVUxMO1xuIFx0c3RydWN0IG90eDJfcXNldCAqcXNldCA9IFx1MDAyNnBmLVx1MDAzZXFzZXQ7XG4gXG4tXHRpZiAocGYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19JTlRGX0RPV04pXG4mIzQzO1x0aWYgKG90eDJfdGVzdF9mbGFnKHBmLCBPVFgyX0ZMQUdfSU5URl9ET1dOKSlcbiBcdFx0cmV0dXJuIC1FTkVURE9XTjtcbiBcbiBcdGlmIChxdWV1ZV9pZCBcdTAwM2U9IHBmLVx1MDAzZWh3LnJ4X3F1ZXVlcyB8fCBxdWV1ZV9pZCBcdTAwM2U9IHBmLVx1MDAzZWh3LnR4X3F1ZXVlcylcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmNcbmluZGV4IGYxNjBiMTYxOGVmYTIuLjllZjU1YTZkYjUwYjcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuY1xuQEAgLTExOCw2ICYjNDM7MTE4LDkgQEAgc3RhdGljIHZvaWQgb3R4Ml9jb25maWdfc2NoZWRfc2hhcGluZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4gXHQvKiBjb25maWd1cmUgUElSICovXG4gXHRtYXhyYXRlID0gKG5vZGUtXHUwMDNlcmF0ZSBcdTAwM2Ugbm9kZS1cdTAwM2VjZWlsKSA/IG5vZGUtXHUwMDNlcmF0ZSA6IG5vZGUtXHUwMDNlY2VpbDtcbiBcbiYjNDM7XHQvKiA2NTUzNiBpcyB0aGUga2VybmVsLXNpZGUgZGVmYXVsdCBidXJzdCB3aGVuIEhUQiBkb2VzIG5vdCBzdXBwbHkgYW5cbiYjNDM7XHQgKiBleHBsaWNpdCB2YWx1ZSwgbm90IHRoZSBOSVggaGFyZHdhcmUgbWF4aW11bSAoQ04xMEtfTUFYX0JVUlNUX1NJWkUpLlxuJiM0MztcdCAqL1xuIFx0Y2ZnLVx1MDAzZXJlZ3ZhbFsqbnVtX3JlZ3NdID1cbiBcdFx0b3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIG1heHJhdGUsIDY1NTM2KTtcbiBcdCgqbnVtX3JlZ3MpJiM0MzsmIzQzOztcbkBAIC0xMDg4LDYgJiM0MzsxMDkxLDE0IEBAIHN0YXRpYyBpbnQgb3R4Ml9xb3Nfcm9vdF9hZGQoc3RydWN0IG90eDJfbmljICpwZnZmLCB1MTYgaHRiX21hal9pZCwgdTE2IGh0Yl9kZWZjXG4gXHRcdCAgIFwmIzM0O1RDX0hUQl9DUkVBVEU6IGhhbmRsZT0weCV4IGRlZmNscz0weCV4XFxuXCYjMzQ7LFxuIFx0XHQgICBodGJfbWFqX2lkLCBodGJfZGVmY2xzKTtcbiBcbiYjNDM7XHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdCkge1xuJiM0MztcdFx0bmV0ZGV2X2VycihwZnZmLVx1MDAzZW5ldGRldixcbiYjNDM7XHRcdFx0ICAgXCYjMzQ7SFRCOiBjYW5ub3QgZW5hYmxlIHdoaWxlIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBpcyBhY3RpdmVcXG5cJiMzNDspO1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDtIVEI6IGNhbm5vdCBlbmFibGUgd2hpbGUgbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGlzIGFjdGl2ZVwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHJvb3QgPSBvdHgyX3Fvc19hbGxvY19yb290KHBmdmYpO1xuIFx0aWYgKElTX0VSUihyb290KSkge1xuIFx0XHRlcnIgPSBQVFJfRVJSKHJvb3QpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3Nfc3EuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3Nfc3EuY1xuaW5kZXggMjg3MmFkYWJjODMwNS4uNWYwOWUyOTYwMTQ0MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3Nfc3EuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvc19zcS5jXG5AQCAtMjM4LDcgJiM0MzsyMzgsNyBAQCBpbnQgb3R4Ml9xb3NfZW5hYmxlX3NxKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IHFpZHgpXG4gXHRzdHJ1Y3Qgb3R4Ml9odyAqaHcgPSBcdTAwMjZwZnZmLVx1MDAzZWh3O1xuIFx0aW50IHBvb2xfaWQsIHNxX2lkeCwgZXJyO1xuIFxuLVx0aWYgKHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19JTlRGX0RPV04pXG4mIzQzO1x0aWYgKG90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19JTlRGX0RPV04pKVxuIFx0XHRyZXR1cm4gLUVQRVJNO1xuIFxuIFx0c3FfaWR4ID0gaHctXHUwMDNlbm9uX3Fvc19xdWV1ZXMgJiM0MzsgcWlkeDtcbkBAIC0yODgsNyAmIzQzOzI4OCw3IEBAIHZvaWQgb3R4Ml9xb3NfZGlzYWJsZV9zcShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBxaWR4KVxuIFx0c3FfaWR4ID0gaHctXHUwMDNlbm9uX3Fvc19xdWV1ZXMgJiM0MzsgcWlkeDtcbiBcbiBcdC8qIElmIHRoZSBET1dOIGZsYWcgaXMgc2V0IFNRcyBhcmUgYWxyZWFkeSBmcmVlZCAqL1xuLVx0aWYgKHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19JTlRGX0RPV04pXG4mIzQzO1x0aWYgKG90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19JTlRGX0RPV04pKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRzcSA9IFx1MDAyNnBmdmYtXHUwMDNlcXNldC5zcVtzcV9pZHhdO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuY1xuaW5kZXggMGY1ZDU2NDJkM2Y3YS4uOGE4YzAwODhmZDIwNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3JlcC5jXG5AQCAtOTMsOSAmIzQzOzkzLDkgQEAgc3RhdGljIGludCBydnVfcmVwX21jYW1fZmxvd19pbml0KHN0cnVjdCByZXBfZGV2ICpyZXApXG4gXHRyZXAtXHUwMDNlZmxvd19jZmctXHUwMDNlbWF4X2Zsb3dzID0gYWxsb2NhdGVkO1xuIFxuIFx0aWYgKGFsbG9jYXRlZCkge1xuLVx0XHRyZXAtXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX01DQU1fRU5UUklFU19BTExPQztcbi1cdFx0cmVwLVx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19OVFVQTEVfU1VQUE9SVDtcbi1cdFx0cmVwLVx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19UQ19GTE9XRVJfU1VQUE9SVDtcbiYjNDM7XHRcdHNldF9iaXQoT1RYMl9GTEFHX01DQU1fRU5UUklFU19BTExPQywgXHUwMDI2cmVwLVx1MDAzZWZsYWdzKTtcbiYjNDM7XHRcdHNldF9iaXQoT1RYMl9GTEFHX05UVVBMRV9TVVBQT1JULCBcdTAwMjZyZXAtXHUwMDNlZmxhZ3MpO1xuJiM0MztcdFx0c2V0X2JpdChPVFgyX0ZMQUdfVENfRkxPV0VSX1NVUFBPUlQsIFx1MDAyNnJlcC1cdTAwM2VmbGFncyk7XG4gXHR9XG4gXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZyZXAtXHUwMDNlZmxvd19jZmctXHUwMDNlZmxvd19saXN0KTtcbkBAIC0xMDksMTQgJiM0MzsxMDksMTQgQEAgc3RhdGljIGludCBydnVfcmVwX3NldHVwX3RjX2NiKGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLFxuIFx0c3RydWN0IHJlcF9kZXYgKnJlcCA9IGNiX3ByaXY7XG4gXHRzdHJ1Y3Qgb3R4Ml9uaWMgKnByaXYgPSByZXAtXHUwMDNlbWRldjtcbiBcbi1cdGlmICghKHJlcC1cdTAwM2VmbGFncyBcdTAwMjYgUlZVX1JFUF9WRl9JTklUSUFMSVpFRCkpXG4mIzQzO1x0aWYgKCF0ZXN0X2JpdChPVFgyX1JFUF9WRl9JTklUSUFMSVpFRCwgXHUwMDI2cmVwLVx1MDAzZWZsYWdzKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRpZiAoIShyZXAtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19UQ19GTE9XRVJfU1VQUE9SVCkpXG4mIzQzO1x0aWYgKCF0ZXN0X2JpdChPVFgyX0ZMQUdfVENfRkxPV0VSX1NVUFBPUlQsIFx1MDAyNnJlcC1cdTAwM2VmbGFncykpXG4gXHRcdHJ2dV9yZXBfbWNhbV9mbG93X2luaXQocmVwKTtcbiBcbiBcdHByaXYtXHUwMDNlbmV0ZGV2ID0gcmVwLVx1MDAzZW5ldGRldjtcbi1cdHByaXYtXHUwMDNlZmxhZ3MgPSByZXAtXHUwMDNlZmxhZ3M7XG4mIzQzO1x0b3R4Ml9zeW5jX2ZsYWdzX2Zyb21fcmVwKHByaXYsIFx1MDAyNnJlcC1cdTAwM2VmbGFncyk7XG4gXHRwcml2LVx1MDAzZXBjaWZ1bmMgPSByZXAtXHUwMDNlcGNpZnVuYztcbiBcdHByaXYtXHUwMDNlZmxvd19jZmcgPSByZXAtXHUwMDNlZmxvd19jZmc7XG4gXG5AQCAtMzAzLDkgJiM0MzszMDMsOSBAQCBzdGF0aWMgdm9pZCBydnVfcmVwX3N0YXRlX2V2dF9oYW5kbGVyKHN0cnVjdCBvdHgyX25pYyAqcHJpdixcbiBcdHJlcF9pZCA9IHJ2dV9yZXBfZ2V0X3JlcGlkKHByaXYsIGluZm8tXHUwMDNlcGNpZnVuYyk7XG4gXHRyZXAgPSBwcml2LVx1MDAzZXJlcHNbcmVwX2lkXTtcbiBcdGlmIChpbmZvLVx1MDAzZWV2dF9kYXRhLnZmX3N0YXRlKVxuLVx0XHRyZXAtXHUwMDNlZmxhZ3MgfD0gUlZVX1JFUF9WRl9JTklUSUFMSVpFRDtcbiYjNDM7XHRcdHNldF9iaXQoT1RYMl9SRVBfVkZfSU5JVElBTElaRUQsIFx1MDAyNnJlcC1cdTAwM2VmbGFncyk7XG4gXHRlbHNlXG4tXHRcdHJlcC1cdTAwM2VmbGFncyBcdTAwMjY9IH5SVlVfUkVQX1ZGX0lOSVRJQUxJWkVEO1xuJiM0MztcdFx0Y2xlYXJfYml0KE9UWDJfUkVQX1ZGX0lOSVRJQUxJWkVELCBcdTAwMjZyZXAtXHUwMDNlZmxhZ3MpO1xuIH1cbiBcbiBpbnQgcnZ1X2V2ZW50X3VwX25vdGlmeShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmLCBzdHJ1Y3QgcmVwX2V2ZW50ICppbmZvKVxuQEAgLTM4Miw3ICYjNDM7MzgyLDcgQEAgc3RhdGljIHZvaWQgcnZ1X3JlcF9nZXRfc3RhdHM2NChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIHtcbiBcdHN0cnVjdCByZXBfZGV2ICpyZXAgPSBuZXRkZXZfcHJpdihkZXYpO1xuIFxuLVx0aWYgKCEocmVwLVx1MDAzZWZsYWdzIFx1MDAyNiBSVlVfUkVQX1ZGX0lOSVRJQUxJWkVEKSlcbiYjNDM7XHRpZiAoIXRlc3RfYml0KE9UWDJfUkVQX1ZGX0lOSVRJQUxJWkVELCBcdTAwMjZyZXAtXHUwMDNlZmxhZ3MpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRzdGF0cy1cdTAwM2VyeF9wYWNrZXRzID0gcmVwLVx1MDAzZXN0YXRzLnJ4X2ZyYW1lcztcbkBAIC00NTMsNyAmIzQzOzQ1Myw3IEBAIHN0YXRpYyBpbnQgcnZ1X3JlcF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRzdHJ1Y3Qgb3R4Ml9uaWMgKnByaXYgPSByZXAtXHUwMDNlbWRldjtcbiBcdHN0cnVjdCByZXBfZXZlbnQgZXZ0ID0gezB9O1xuIFxuLVx0aWYgKCEocmVwLVx1MDAzZWZsYWdzIFx1MDAyNiBSVlVfUkVQX1ZGX0lOSVRJQUxJWkVEKSlcbiYjNDM7XHRpZiAoIXRlc3RfYml0KE9UWDJfUkVQX1ZGX0lOSVRJQUxJWkVELCBcdTAwMjZyZXAtXHUwMDNlZmxhZ3MpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdG5ldGlmX2NhcnJpZXJfb24oZGV2KTtcbkBAIC00NzIsNyAmIzQzOzQ3Miw3IEBAIHN0YXRpYyBpbnQgcnZ1X3JlcF9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRzdHJ1Y3Qgb3R4Ml9uaWMgKnByaXYgPSByZXAtXHUwMDNlbWRldjtcbiBcdHN0cnVjdCByZXBfZXZlbnQgZXZ0ID0gezB9O1xuIFxuLVx0aWYgKCEocmVwLVx1MDAzZWZsYWdzIFx1MDAyNiBSVlVfUkVQX1ZGX0lOSVRJQUxJWkVEKSlcbiYjNDM7XHRpZiAoIXRlc3RfYml0KE9UWDJfUkVQX1ZGX0lOSVRJQUxJWkVELCBcdTAwMjZyZXAtXHUwMDNlZmxhZ3MpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdG5ldGlmX2NhcnJpZXJfb2ZmKGRldik7XG5AQCAtNTQ3LDcgJiM0Mzs1NDcsNyBAQCBzdGF0aWMgaW50IHJ2dV9yZXBfbmFwaV9pbml0KHN0cnVjdCBvdHgyX25pYyAqcHJpdixcbiBcdFx0b3R4Ml93cml0ZTY0KHByaXYsIE5JWF9MRl9DSU5UWF9JTlQocWlkeCksIEJJVF9VTEwoMCkpO1xuIFx0XHRvdHgyX3dyaXRlNjQocHJpdiwgTklYX0xGX0NJTlRYX0VOQV9XMVMocWlkeCksIEJJVF9VTEwoMCkpO1xuIFx0fVxuLVx0cHJpdi1cdTAwM2VmbGFncyBcdTAwMjY9IH5PVFgyX0ZMQUdfSU5URl9ET1dOO1xuJiM0MztcdG90eDJfY2xlYXJfZmxhZyhwcml2LCBPVFgyX0ZMQUdfSU5URl9ET1dOKTtcbiBcdHJldHVybiAwO1xuIFxuIGVycl9mcmVlX2NpbnRzOlxuQEAgLTYzMiw3ICYjNDM7NjMyLDcgQEAgdm9pZCBydnVfcmVwX2Rlc3Ryb3koc3RydWN0IG90eDJfbmljICpwcml2KVxuIFx0aW50IHJlcF9pZDtcbiBcbiBcdHJ2dV9lc3dpdGNoX2NvbmZpZyhwcml2LCBmYWxzZSk7XG4tXHRwcml2LVx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19JTlRGX0RPV047XG4mIzQzO1x0b3R4Ml9zZXRfZmxhZyhwcml2LCBPVFgyX0ZMQUdfSU5URl9ET1dOKTtcbiBcdHJ2dV9yZXBfZnJlZV9jcV9yc3JjKHByaXYpO1xuIFx0Zm9yIChyZXBfaWQgPSAwOyByZXBfaWQgXHUwMDNjIHByaXYtXHUwMDNlcmVwX2NudDsgcmVwX2lkJiM0MzsmIzQzOykge1xuIFx0XHRyZXAgPSBwcml2LVx1MDAzZXJlcHNbcmVwX2lkXTtcbkBAIC04MDEsOCAmIzQzOzgwMSw4IEBAIHN0YXRpYyBpbnQgcnZ1X3JlcF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuIFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIHByaXYpO1xuIFx0cHJpdi1cdTAwM2VwZGV2ID0gcGRldjtcbiBcdHByaXYtXHUwMDNlZGV2ID0gZGV2O1xuLVx0cHJpdi1cdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfSU5URl9ET1dOO1xuLVx0cHJpdi1cdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfUkVQX01PREVfRU5BQkxFRDtcbiYjNDM7XHRvdHgyX3NldF9mbGFnKHByaXYsIE9UWDJfRkxBR19JTlRGX0RPV04pO1xuJiM0MztcdG90eDJfc2V0X2ZsYWcocHJpdiwgT1RYMl9GTEFHX1JFUF9NT0RFX0VOQUJMRUQpO1xuIFxuIFx0aHcgPSBcdTAwMjZwcml2LVx1MDAzZWh3O1xuIFx0aHctXHUwMDNlcGRldiA9IHBkZXY7XG5AQCAtODQ1LDcgJiM0Mzs4NDUsNyBAQCBzdGF0aWMgdm9pZCBydnVfcmVwX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdHN0cnVjdCBvdHgyX25pYyAqcHJpdiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbiBcbiBcdG90eDJfdW5yZWdpc3Rlcl9kbChwcml2KTtcbi1cdGlmICghKHByaXYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19JTlRGX0RPV04pKVxuJiM0MztcdGlmICghb3R4Ml90ZXN0X2ZsYWcocHJpdiwgT1RYMl9GTEFHX0lOVEZfRE9XTikpXG4gXHRcdHJ2dV9yZXBfZGVzdHJveShwcml2KTtcbiBcdG90eDJfZGV0YWNoX3Jlc291cmNlcyhcdTAwMjZwcml2LVx1MDAzZW1ib3gpO1xuIFx0aWYgKHByaXYtXHUwMDNlaHcubG10X2luZm8pXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3JlcC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3JlcC5oXG5pbmRleCA1YmM5ZTJjN2Q4MDBiLi40NTcwN2M0MzRkODlmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3JlcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmhcbkBAIC0zNyw4ICYjNDM7MzcsNyBAQCBzdHJ1Y3QgcmVwX2RldiB7XG4gXHRzdHJ1Y3QgZGVsYXllZF93b3JrIHN0YXRzX3dyaztcbiBcdHN0cnVjdCBkZXZsaW5rX3BvcnQgZGxfcG9ydDtcbiBcdHN0cnVjdCBvdHgyX2Zsb3dfY29uZmlnXHQqZmxvd19jZmc7XG4tI2RlZmluZSBSVlVfUkVQX1ZGX0lOSVRJQUxJWkVEXHRcdEJJVF9VTEwoMClcbi1cdHU2NCBmbGFncztcbiYjNDM7XHR1bnNpZ25lZCBsb25nXHRcdGZsYWdzO1xuIFx0dTE2IHJlcF9pZDtcbiBcdHUxNiBwY2lmdW5jO1xuIFx0dTggbWFjW0VUSF9BTEVOXTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjo0NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgZXhjbHVzaXZlbHkgbW9kaWZpZXMgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIFJWVS9OSUMgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi8pLCBhZGRpbmcgbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIHN1cHBvcnQgYW5kIHJlZmFjdG9yaW5nIGZsYWcgYml0bWFzayBvcGVyYXRpb25zLiBUaGlzIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbCBNYXJ2ZWxsIE9jdGVvblRYMiAvIENOMTBLIGhhcmR3YXJlL0FTSUNzIGFuZCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBzeXprYWxsZXIgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5MmMxMzM0Y2Q5ZTUwNDhlM2M2NTFmMTczNWFkMDIwMThhYmMwZDg0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgMTEgMTI6NDY6NTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmMKaW5kZXggZDgwZDJjMDBiZDg0My4uMmQxYWI4Yzc2MWM0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguYwpAQCAtMzMxLDggJiM0MzszMzEsMTIgQEAgc3RhdGljIGJvb2wgaXNfdmFsaWRfdHhzY2hxKHN0cnVjdCBydnUgKnJ2dSwgaW50IGJsa2FkZHIsCiAJCQlyZXR1cm4gdHJ1ZTsKIAl9CiAKLQlpZiAobWFwX2Z1bmMgIT0gcGNpZnVuYykKJiM0MzsJaWYgKG1hcF9mdW5jICE9IHBjaWZ1bmMpIHsKJiM0MzsJCWRldl9lcnJfcmF0ZWxpbWl0ZWQocnZ1LSZndDtkZXYsCiYjNDM7CQkJCSAgICAmIzM0O3BjaWZ1bmMgJXggbWFwIHBjaWZ1bmMgJXggbm90IGVxdWFsLCBsdmw9JXUgc2NocT0ldVxuJiMzNDssCiYjNDM7CQkJCSAgICBwY2lmdW5jLCBtYXBfZnVuYywgbHZsLCBzY2hxKTsKIAkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiAKIAlyZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9jbjEwa19pcHNlYy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL2NuMTBrX2lwc2VjLmMKaW5kZXggNzc1NDNkNDcyMzQ1ZS4uNTBlYzQ1NDJjNDE4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL2NuMTBrX2lwc2VjLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL2NuMTBrX2lwc2VjLmMKQEAgLTMzNCw3ICYjNDM7MzM0LDcgQEAgc3RhdGljIGludCBjbjEwa19vdXRiX2NwdF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiAJCQkJCQlDTjEwS19DUFRfTEZfTlFYKDApKTsKIAogCS8qIFNldCBpcHNlYyBvZmZsb2FkIGVuYWJsZWQgZm9yIHRoaXMgZGV2aWNlICovCi0JcGYtJmd0O2ZsYWdzIHw9IE9UWDJfRkxBR19JUFNFQ19PRkZMT0FEX0VOQUJMRUQ7CiYjNDM7CW90eDJfc2V0X2ZsYWcocGYsIE9UWDJfRkxBR19JUFNFQ19PRkZMT0FEX0VOQUJMRUQpOwogCiAJY24xMGtfY3B0X2RldmljZV9zZXRfYXZhaWxhYmxlKHBmKTsKIAlyZXR1cm4gMDsKQEAgLTM1Niw3ICYjNDM7MzU2LDcgQEAgc3RhdGljIGludCBjbjEwa19vdXRiX2NwdF9jbGVhbihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmKQogCX0KIAogCS8qIFNldCBpcHNlYyBvZmZsb2FkIGRpc2FibGVkIGZvciB0aGlzIGRldmljZSAqLwotCXBmLSZndDtmbGFncyAmYW1wOz0gfk9UWDJfRkxBR19JUFNFQ19PRkZMT0FEX0VOQUJMRUQ7CiYjNDM7CW90eDJfY2xlYXJfZmxhZyhwZiwgT1RYMl9GTEFHX0lQU0VDX09GRkxPQURfRU5BQkxFRCk7CiAKIAkvKiBEaXNhYmxlIENQVExGIEluc3RydWN0aW9uIFF1ZXVlIChJUSkgKi8KIAljbjEwa19vdXRiX2NwdGxmX2lxX2Rpc2FibGUocGYpOwpAQCAtODIwLDcgJiM0Mzs4MjAsNyBAQCB2b2lkIGNuMTBrX2lwc2VjX2NsZWFuKHN0cnVjdCBvdHgyX25pYyAqcGYpCiAJaWYgKCFpc19kZXZfc3VwcG9ydF9pcHNlY19vZmZsb2FkKHBmLSZndDtwZGV2KSkKIAkJcmV0dXJuOwogCi0JaWYgKCEocGYtJmd0O2ZsYWdzICZhbXA7IE9UWDJfRkxBR19JUFNFQ19PRkZMT0FEX0VOQUJMRUQpKQomIzQzOwlpZiAoIW90eDJfdGVzdF9mbGFnKHBmLCBPVFgyX0ZMQUdfSVBTRUNfT0ZGTE9BRF9FTkFCTEVEKSkKIAkJcmV0dXJuOwogCiAJaWYgKHBmLSZndDtpcHNlYy5zYV93b3JrcSkgewpAQCAtOTQ1LDcgJiM0Mzs5NDUsNyBAQCBib29sIGNuMTBrX2lwc2VjX3RyYW5zbWl0KHN0cnVjdCBvdHgyX25pYyAqcGYsIHN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cSwKIAl1MTYgZGxlbjsKIAogCS8qIENoZWNrIGZvciBJUFNFQyBvZmZsb2FkIGVuYWJsZWQgKi8KLQlpZiAoIShwZi0mZ3Q7ZmxhZ3MgJmFtcDsgT1RYMl9GTEFHX0lQU0VDX09GRkxPQURfRU5BQkxFRCkpCiYjNDM7CWlmICghb3R4Ml90ZXN0X2ZsYWcocGYsIE9UWDJfRkxBR19JUFNFQ19PRkZMT0FEX0VOQUJMRUQpKQogCQlnb3RvIGRyb3A7CiAKIAlzcCA9IHNrYl9zZWNfcGF0aChza2IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uYwppbmRleCAxNzU5OTIxODhjMThhLi41YmFkMjQ2NmRhMGM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uYwpAQCAtMjIwLDEwICYjNDM7MjIwLDEwIEBAIGludCBvdHgyX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB2b2lkICpwKQogCQlldGhfaHdfYWRkcl9zZXQobmV0ZGV2LCBhZGRyLSZndDtzYV9kYXRhKTsKIAkJLyogdXBkYXRlIGRtYWMgZmllbGQgaW4gdmxhbiBvZmZsb2FkIHJ1bGUgKi8KIAkJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSAmYW1wOyZhbXA7Ci0JCSAgICBwZnZmLSZndDtmbGFncyAmYW1wOyBPVFgyX0ZMQUdfUlhfVkxBTl9TVVBQT1JUKQomIzQzOwkJICAgIG90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19SWF9WTEFOX1NVUFBPUlQpKQogCQkJb3R4Ml9pbnN0YWxsX3J4dmxhbl9vZmZsb2FkX2Zsb3cocGZ2Zik7CiAJCS8qIHVwZGF0ZSBkbWFjIGFkZHJlc3MgaW4gbnR1cGxlIGFuZCBETUFDIGZpbHRlciBsaXN0ICovCi0JCWlmIChwZnZmLSZndDtmbGFncyAmYW1wOyBPVFgyX0ZMQUdfRE1BQ0ZMVFJfU1VQUE9SVCkKJiM0MzsJCWlmIChvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfRE1BQ0ZMVFJfU1VQUE9SVCkpCiAJCQlvdHgyX2RtYWNmbHRfdXBkYXRlX3BmbWFjX2Zsb3cocGZ2Zik7CiAJfSBlbHNlIHsKIAkJcmV0dXJuIC1FUEVSTTsKQEAgLTI3NSw4ICYjNDM7Mjc1LDggQEAgaW50IG90eDJfY29uZmlnX3BhdXNlX2ZybShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiAJCWdvdG8gdW5sb2NrOwogCX0KIAotCXJlcS0mZ3Q7cnhfcGF1c2UgPSAhIShwZnZmLSZndDtmbGFncyAmYW1wOyBPVFgyX0ZMQUdfUlhfUEFVU0VfRU5BQkxFRCk7Ci0JcmVxLSZndDt0eF9wYXVzZSA9ICEhKHBmdmYtJmd0O2ZsYWdzICZhbXA7IE9UWDJfRkxBR19UWF9QQVVTRV9FTkFCTEVEKTsKJiM0MzsJcmVxLSZndDtyeF9wYXVzZSA9IG90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19SWF9QQVVTRV9FTkFCTEVEKTsKJiM0MzsJcmVxLSZndDt0eF9wYXVzZSA9IG90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19UWF9QQVVTRV9FTkFCTEVEKTsKIAlyZXEtJmd0O3NldCA9IDE7CiAKIAllcnIgPSBvdHgyX3N5bmNfbWJveF9tc2coJmFtcDtwZnZmLSZndDttYm94KTsKQEAgLTYxNSw2ICYjNDM7NjE1LDE0MiBAQCB2b2lkIG90eDJfZ2V0X21hY19mcm9tX2FmKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB9CiBFWFBPUlRfU1lNQk9MKG90eDJfZ2V0X21hY19mcm9tX2FmKTsKIAomIzQzO3N0YXRpYyBpbnQKJiM0MztvdHgyX25peF90bXFfcmVnX3dyaXRlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGNudCwKJiM0MzsJCSAgICAgICB1NjQgcmVnX2FkZHJbTUFYX1JFR1NfUEVSX01CT1hfTVNHXSwKJiM0MzsJCSAgICAgICB1NjQgcmVnX3ZhbFtNQVhfUkVHU19QRVJfTUJPWF9NU0ddKQomIzQzO3sKJiM0MzsJc3RydWN0IG1ib3ggKm1ib3ggPSAmYW1wO3BmdmYtJmd0O21ib3g7CiYjNDM7CXN0cnVjdCBuaXhfdHhzY2hxX2NvbmZpZyAqcmVxOwomIzQzOwlpbnQgaSwgZXJyOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7bWJveC0mZ3Q7bG9jayk7CiYjNDM7CXJlcSA9IG90eDJfbWJveF9hbGxvY19tc2dfbml4X3R4c2NocV9jZmcobWJveCk7CiYjNDM7CWlmICghcmVxKSB7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDttYm94LSZndDtsb2NrKTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJlcS0mZ3Q7bHZsID0gTklYX1RYU0NIX0xWTF9NRFE7CiYjNDM7CXJlcS0mZ3Q7bnVtX3JlZ3MgPSBjbnQ7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBjbnQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlyZXEtJmd0O3JlZ1tpXSA9IHJlZ19hZGRyW2ldOwomIzQzOwkJcmVxLSZndDtyZWd2YWxbaV0gPSByZWdfdmFsW2ldOwomIzQzOwl9CiYjNDM7CiYjNDM7CWVyciA9IG90eDJfc3luY19tYm94X21zZyhtYm94KTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7bWJveC0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO2ludCBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmKQomIzQzO3sKJiM0MzsJdTY0IHJlZ19hZGRyW01BWF9SRUdTX1BFUl9NQk9YX01TR107CiYjNDM7CXU2NCByZWdfdmFsW01BWF9SRUdTX1BFUl9NQk9YX01TR107CiYjNDM7CWludCBlcnIsIHNtcSwgaSwgY250ID0gMDsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHBmdmYtJmd0O2h3LnR4c2NocV9jbnRbTklYX1RYU0NIX0xWTF9TTVFdOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc21xID0gcGZ2Zi0mZ3Q7aHcudHhzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9TTVFdW2ldOwomIzQzOwomIzQzOwkJcmVnX2FkZHJbY250XSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpOwomIzQzOwkJcmVnX3ZhbFtjbnRdID0gMDsKJiM0MzsJCWNudCYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CQlyZWdfYWRkcltjbnRdID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7CiYjNDM7CQlyZWdfdmFsW2NudF0gPSAwOwomIzQzOwkJY250JiM0MzsmIzQzOzsKJiM0MzsKJiM0MzsJCWlmIChjbnQgJmx0OyBNQVhfUkVHU19QRVJfTUJPWF9NU0cgLSAxKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJZXJyID0gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCBjbnQsCiYjNDM7CQkJCQkgICAgIHJlZ19hZGRyLCByZWdfdmFsKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJZ290byBmYWlsOwomIzQzOwkJY250ID0gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoY250KSB7CiYjNDM7CQllcnIgPSBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIGNudCwKJiM0MzsJCQkJCSAgICAgcmVnX2FkZHIsIHJlZ192YWwpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlnb3RvIGZhaWw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7ZmFpbDoKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmLAomIzQzOwkJCQkgaW50IHR4cSwgdTY0IG1pbnJhdGUsIHU2NCBtYXhyYXRlKQomIzQzO3sKJiM0MzsJc3RydWN0IG1ib3ggKm1ib3ggPSAmYW1wO3BmdmYtJmd0O21ib3g7CiYjNDM7CXN0cnVjdCBuaXhfdHhzY2hxX2NvbmZpZyAqcmVxOwomIzQzOwlpbnQgZXJyLCBzbXEsIG4gPSAwOwomIzQzOwl1NjQgcmVnX2FkZHJbMl07CiYjNDM7CXU2NCByZWdfdmFsWzJdOwomIzQzOwl1NjQgcmF0ZTsKJiM0MzsKJiM0MzsJaWYgKCFtYXhyYXRlICZhbXA7JmFtcDsgIW1pbnJhdGUpIHsKJiM0MzsJCXNtcSA9IG90eDJfZ2V0X3NtcV9pZHgocGZ2ZiwgdHhxKTsKJiM0MzsJCXJlZ19hZGRyWzBdID0gTklYX0FGX01EUVhfUElSKHNtcSk7CiYjNDM7CQlyZWdfdmFsWzBdID0gMDsKJiM0MzsJCXJlZ19hZGRyWzFdID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7CiYjNDM7CQlyZWdfdmFsWzFdID0gMDsKJiM0MzsJCXJldHVybiBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIDIsIHJlZ19hZGRyLCByZWdfdmFsKTsKJiM0MzsJfQomIzQzOwomIzQzOwlzbXEgPSBvdHgyX2dldF9zbXFfaWR4KHBmdmYsIHR4cSk7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDttYm94LSZndDtsb2NrKTsKJiM0MzsJcmVxID0gb3R4Ml9tYm94X2FsbG9jX21zZ19uaXhfdHhzY2hxX2NmZyhtYm94KTsKJiM0MzsJaWYgKCFyZXEpIHsKJiM0MzsJCW11dGV4X3VubG9jaygmYW1wO21ib3gtJmd0O2xvY2spOwomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmVxLSZndDtsdmwgPSBOSVhfVFhTQ0hfTFZMX01EUTsKJiM0MzsKJiM0MzsJLyogTVFQUklPIGV4cG9zZXMgb25seSBtaW4vbWF4IHJhdGUsIG5vdCBidXJzdC4gIFBhc3MgYnVyc3QgMCBzbwomIzQzOwkgKiBvdHgyX2dldF9lZ3Jlc3NfYnVyc3RfY2ZnKCkgcHJvZ3JhbW1lcyB0aGUgbGFyZ2VzdCBidXJzdCB0aGUgTklYCiYjNDM7CSAqIGVuY29kaW5nIHN1cHBvcnRzIChDTjEwS19NQVhfQlVSU1RfU0laRSBvbiBDTjEwSykuICBUaGlzIGRpZmZlcnMKJiM0MzsJICogZnJvbSB0aGUgNjU1MzYgYnl0ZSBkZWZhdWx0IHVzZWQgaW4gdGhlIEhUQiBwYXRoLCB3aGljaCBpcyBhCiYjNDM7CSAqIGtlcm5lbC1zaWRlIGRlZmF1bHQgd2hlbiBubyBleHBsaWNpdCBidXJzdCBpcyBjb25maWd1cmVkLCBub3QgYQomIzQzOwkgKiBoYXJkd2FyZSBjYXAuCiYjNDM7CSAqCiYjNDM7CSAqIG1xcHJpbyBzZXR1cCByZXN0YXJ0cyB0aGUgbmV0ZGV2IChvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldiksCiYjNDM7CSAqIHdoaWNoIHJlc2V0cyBNRFEgc2hhcGVycyB0byB6ZXJvLiAgUHJvZ3JhbSBib3RoIFBJUiBhbmQgQ0lSIG9uCiYjNDM7CSAqIGV2ZXJ5IHVwZGF0ZSBzbyBvbWl0dGVkIHJhdGVzIGFyZSBhcHBsaWVkIGV4cGxpY2l0bHkgcmF0aGVyIHRoYW4KJiM0MzsJICogcmVseWluZyBvbiBzdGFsZSBoYXJkd2FyZSBzdGF0ZS4KJiM0MzsJICovCiYjNDM7CXJlcS0mZ3Q7cmVnW25dID0gTklYX0FGX01EUVhfUElSKHNtcSk7CiYjNDM7CWlmIChtYXhyYXRlKSB7CiYjNDM7CQlyYXRlID0gb3R4Ml9jb252ZXJ0X3JhdGUobWF4cmF0ZSk7CiYjNDM7CQlyZXEtJmd0O3JlZ3ZhbFtuXSA9IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCByYXRlLCAwKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJlcS0mZ3Q7cmVndmFsW25dID0gMDsKJiM0MzsJfQomIzQzOwluJiM0MzsmIzQzOzsKJiM0MzsKJiM0MzsJLyogQ0lSJiM0MztQSVIgc3VwcG9ydCBpcyByZXF1aXJlZCBhbmQgY2hlY2tlZCBhdCBtcXByaW8gc2V0dXAuICovCiYjNDM7CXJlcS0mZ3Q7cmVnW25dID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7CiYjNDM7CWlmIChtaW5yYXRlKSB7CiYjNDM7CQlyYXRlID0gb3R4Ml9jb252ZXJ0X3JhdGUobWlucmF0ZSk7CiYjNDM7CQlyZXEtJmd0O3JlZ3ZhbFtuXSA9IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCByYXRlLCAwKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJlcS0mZ3Q7cmVndmFsW25dID0gMDsKJiM0MzsJfQomIzQzOwluJiM0MzsmIzQzOzsKJiM0MzsJcmVxLSZndDtudW1fcmVncyA9IG47CiYjNDM7CiYjNDM7CWVyciA9IG90eDJfc3luY19tYm94X21zZyhtYm94KTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7bWJveC0mZ3Q7bG9jayk7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwogaW50IG90eDJfdHhzY2hxX2NvbmZpZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBsdmwsIGludCBwcmlvLCBib29sIHR4c2NocV9mb3JfcGZjKQogewogCXUxNiAoKnNjaHFfbGlzdClbTUFYX1RYU0NIUV9QRVJfRlVOQ107CkBAIC02NTEsNyAmIzQzOzc4NywxMSBAQCBpbnQgb3R4Ml90eHNjaHFfY29uZmlnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGx2bCwgaW50IHByaW8sIGJvb2wgdHhzY2hxX2ZvcgogCQkJCQkJKHU2NClody0mZ3Q7c21xX2xpbmtfdHlwZSk7CiAJCXJlcS0mZ3Q7bnVtX3JlZ3MmIzQzOyYjNDM7OwogCQkvKiBNRFEgY29uZmlnICovCi0JCXBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bcHJpb107CiYjNDM7CQlpZiAocGZ2Zi0mZ3Q7bXFwcmlvLnJhdGVfbGltaXQpCiYjNDM7CQkJcGFyZW50ID0gc2NocV9saXN0W05JWF9UWFNDSF9MVkxfVEw0XVswXTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdW3ByaW9dOwomIzQzOwogCQlyZXEtJmd0O3JlZ1sxXSA9IE5JWF9BRl9NRFFYX1BBUkVOVChzY2hxKTsKIAkJcmVxLSZndDtyZWd2YWxbMV0gPSBwYXJlbnQgJmx0OyZsdDsgMTY7CiAJCXJlcS0mZ3Q7bnVtX3JlZ3MmIzQzOyYjNDM7OwpAQCAtNzc5LDYgJiM0Mzs5MTksOSBAQCBpbnQgb3R4Ml90eHNjaF9hbGxvYyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiAJCXJlcS0mZ3Q7c2NocVtOSVhfVFhTQ0hfTFZMX1RMNF0gPSBjaGFuX2NudDsKIAl9CiAKJiM0MzsJaWYgKHBmdmYtJmd0O21xcHJpby5yYXRlX2xpbWl0KQomIzQzOwkJcmVxLSZndDtzY2hxW05JWF9UWFNDSF9MVkxfU01RXSA9IHBmdmYtJmd0O2h3Lm5vbl9xb3NfcXVldWVzOwomIzQzOwogCXJjID0gb3R4Ml9zeW5jX21ib3hfbXNnKCZhbXA7cGZ2Zi0mZ3Q7bWJveCk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CkBAIC04NDQsNiAmIzQzOzk4Nyw3IEBAIHZvaWQgb3R4Ml90eHNjaHFfc3RvcChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiAKIAkvKiBDbGVhciB0aGUgdHhzY2hxIGxpc3QgKi8KIAlmb3IgKGx2bCA9IDA7IGx2bCAmbHQ7IE5JWF9UWFNDSF9MVkxfQ05UOyBsdmwmIzQzOyYjNDM7KSB7CiYjNDM7CQlwZnZmLSZndDtody50eHNjaHFfY250W2x2bF0gPSAwOwogCQlmb3IgKHNjaHEgPSAwOyBzY2hxICZsdDsgTUFYX1RYU0NIUV9QRVJfRlVOQzsgc2NocSYjNDM7JiM0MzspCiAJCQlwZnZmLSZndDtody50eHNjaHFfbGlzdFtsdmxdW3NjaHFdID0gMDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oCmluZGV4IGVlY2VlNjEyYjdiMmMuLjZlNzEzMmYyN2I2MjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oCkBAIC0xNyw2ICYjNDM7MTcsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3NvYy9tYXJ2ZWxsL3NpbGljb25zLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc29jL21hcnZlbGwvb2N0ZW9udHgyL2FzbS5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9tYWNzZWMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dWFwaS9saW51eC9wa3Rfc2NoZWQuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvcGt0X2Nscy5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9kZXZsaW5rLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdGltZTY0LmgmZ3Q7CkBAIC00ODMsNiAmIzQzOzQ4NCwyMyBAQCBzdHJ1Y3QgcGZfaXJxX2RhdGEgewogCWludCBtZGV2czsKIH07CiAKJiM0MztzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwIHsKJiM0MzsJdTY0IG1pbl9yYXRlW1RDX1FPUFRfTUFYX1FVRVVFXTsKJiM0MzsJdTY0IG1heF9yYXRlW1RDX1FPUFRfTUFYX1FVRVVFXTsKJiM0MzsJX191OCBudW1fdGM7CiYjNDM7CV9fdTE2IGNvdW50W1RDX1FPUFRfTUFYX1FVRVVFXTsKJiM0MzsJX191MTYgb2Zmc2V0W1RDX1FPUFRfTUFYX1FVRVVFXTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBvdHgyX21xcHJpbyB7CiYjNDM7CXUzMglmbGFnczsKJiM0MzsJdTY0CSptaW5fcmF0ZTsKJiM0MzsJdTY0CSptYXhfcmF0ZTsKJiM0MzsJYm9vbAlyYXRlX2xpbWl0OwomIzQzOwlib29sCXJlcGxhY2Vfc2V0dXBfZG9uZTsKJiM0MzsJYm9vbAlyZXBsYWNlX2dyYWZ0X2RvbmU7CiYjNDM7fTsKJiM0MzsKIHN0cnVjdCBvdHgyX25pYyB7CiAJdm9pZCBfX2lvbWVtCQkqcmVnX2Jhc2U7CiAJc3RydWN0IG5ldF9kZXZpY2UJKm5ldGRldjsKQEAgLTQ5MSwzMCAmIzQzOzUwOSwzNSBAQCBzdHJ1Y3Qgb3R4Ml9uaWMgewogCXUxNgkJCXR4X21heF9wa3RsZW47CiAJdTE2CQkJcmJzaXplOyAvKiBSZWNlaXZlIGJ1ZmZlciBzaXplICovCiAKLSNkZWZpbmUgT1RYMl9GTEFHX1JYX1RTVEFNUF9FTkFCTEVECQlCSVRfVUxMKDApCi0jZGVmaW5lIE9UWDJfRkxBR19UWF9UU1RBTVBfRU5BQkxFRAkJQklUX1VMTCgxKQotI2RlZmluZSBPVFgyX0ZMQUdfSU5URl9ET1dOCQkJQklUX1VMTCgyKQotI2RlZmluZSBPVFgyX0ZMQUdfTUNBTV9FTlRSSUVTX0FMTE9DCQlCSVRfVUxMKDMpCi0jZGVmaW5lIE9UWDJfRkxBR19OVFVQTEVfU1VQUE9SVAkJQklUX1VMTCg0KQotI2RlZmluZSBPVFgyX0ZMQUdfVUNBU1RfRkxUUl9TVVBQT1JUCQlCSVRfVUxMKDUpCi0jZGVmaW5lIE9UWDJfRkxBR19SWF9WTEFOX1NVUFBPUlQJCUJJVF9VTEwoNikKLSNkZWZpbmUgT1RYMl9GTEFHX1ZGX1ZMQU5fU1VQUE9SVAkJQklUX1VMTCg3KQotI2RlZmluZSBPVFgyX0ZMQUdfUEZfU0hVVERPV04JCQlCSVRfVUxMKDgpCi0jZGVmaW5lIE9UWDJfRkxBR19SWF9QQVVTRV9FTkFCTEVECQlCSVRfVUxMKDkpCi0jZGVmaW5lIE9UWDJfRkxBR19UWF9QQVVTRV9FTkFCTEVECQlCSVRfVUxMKDEwKQotI2RlZmluZSBPVFgyX0ZMQUdfVENfRkxPV0VSX1NVUFBPUlQJCUJJVF9VTEwoMTEpCi0jZGVmaW5lIE9UWDJfRkxBR19UQ19NQVRDSEFMTF9FR1JFU1NfRU5BQkxFRAlCSVRfVUxMKDEyKQotI2RlZmluZSBPVFgyX0ZMQUdfVENfTUFUQ0hBTExfSU5HUkVTU19FTkFCTEVECUJJVF9VTEwoMTMpCi0jZGVmaW5lIE9UWDJfRkxBR19ETUFDRkxUUl9TVVBQT1JUCQlCSVRfVUxMKDE0KQotI2RlZmluZSBPVFgyX0ZMQUdfUFRQX09ORVNURVBfU1lOQwkJQklUX1VMTCgxNSkKLSNkZWZpbmUgT1RYMl9GTEFHX0FEUFRWX0lOVF9DT0FMX0VOQUJMRUQgQklUX1VMTCgxNikKLSNkZWZpbmUgT1RYMl9GTEFHX1RDX01BUktfRU5BQkxFRAkJQklUX1VMTCgxNykKLSNkZWZpbmUgT1RYMl9GTEFHX1JFUF9NT0RFX0VOQUJMRUQJCSBCSVRfVUxMKDE4KQotI2RlZmluZSBPVFgyX0ZMQUdfUE9SVF9VUAkJCUJJVF9VTEwoMTkpCi0jZGVmaW5lIE9UWDJfRkxBR19JUFNFQ19PRkZMT0FEX0VOQUJMRUQJCUJJVF9VTEwoMjApCi0JdTY0CQkJZmxhZ3M7CiYjNDM7I2RlZmluZSBPVFgyX0ZMQUdfUlhfVFNUQU1QX0VOQUJMRUQJCTAKJiM0MzsjZGVmaW5lIE9UWDJfRkxBR19UWF9UU1RBTVBfRU5BQkxFRAkJMQomIzQzOyNkZWZpbmUgT1RYMl9GTEFHX0lOVEZfRE9XTgkJCTIKJiM0MzsjZGVmaW5lIE9UWDJfRkxBR19NQ0FNX0VOVFJJRVNfQUxMT0MJCTMKJiM0MzsjZGVmaW5lIE9UWDJfRkxBR19OVFVQTEVfU1VQUE9SVAkJNAomIzQzOyNkZWZpbmUgT1RYMl9GTEFHX1VDQVNUX0ZMVFJfU1VQUE9SVAkJNQomIzQzOyNkZWZpbmUgT1RYMl9GTEFHX1JYX1ZMQU5fU1VQUE9SVAkJNgomIzQzOyNkZWZpbmUgT1RYMl9GTEFHX1ZGX1ZMQU5fU1VQUE9SVAkJNwomIzQzOyNkZWZpbmUgT1RYMl9GTEFHX1BGX1NIVVRET1dOCQkJOAomIzQzOyNkZWZpbmUgT1RYMl9GTEFHX1JYX1BBVVNFX0VOQUJMRUQJCTkKJiM0MzsjZGVmaW5lIE9UWDJfRkxBR19UWF9QQVVTRV9FTkFCTEVECQkxMAomIzQzOyNkZWZpbmUgT1RYMl9GTEFHX1RDX0ZMT1dFUl9TVVBQT1JUCQkxMQomIzQzOyNkZWZpbmUgT1RYMl9GTEFHX1RDX01BVENIQUxMX0VHUkVTU19FTkFCTEVECTEyCiYjNDM7I2RlZmluZSBPVFgyX0ZMQUdfVENfTUFUQ0hBTExfSU5HUkVTU19FTkFCTEVECTEzCiYjNDM7I2RlZmluZSBPVFgyX0ZMQUdfRE1BQ0ZMVFJfU1VQUE9SVAkJMTQKJiM0MzsjZGVmaW5lIE9UWDJfRkxBR19QVFBfT05FU1RFUF9TWU5DCQkxNQomIzQzOyNkZWZpbmUgT1RYMl9GTEFHX0FEUFRWX0lOVF9DT0FMX0VOQUJMRUQJMTYKJiM0MzsjZGVmaW5lIE9UWDJfRkxBR19UQ19NQVJLX0VOQUJMRUQJCTE3CiYjNDM7I2RlZmluZSBPVFgyX0ZMQUdfUkVQX01PREVfRU5BQkxFRAkJMTgKJiM0MzsjZGVmaW5lIE9UWDJfRkxBR19QT1JUX1VQCQkJMTkKJiM0MzsjZGVmaW5lIE9UWDJfRkxBR19JUFNFQ19PRkZMT0FEX0VOQUJMRUQJCTIwCiYjNDM7I2RlZmluZSBPVFgyX1JFUF9WRl9JTklUSUFMSVpFRAkJCTIxCiYjNDM7CXVuc2lnbmVkIGxvbmcJCWZsYWdzOwogCXU2NAkJCSpjcV9vcF9hZGRyOwogCiYjNDM7CXN0cnVjdCBvdHgyX21xcHJpbwltcXByaW87CiYjNDM7CXN0cnVjdCBtcV9vZmZsb2FkX3NuYXAJKmN1cl9tcV9zbmFwOwomIzQzOwlzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwCSpvbGRfbXFfc25hcDsKJiM0MzsKIAlzdHJ1Y3QgYnBmX3Byb2cJCSp4ZHBfcHJvZzsKIAlzdHJ1Y3Qgb3R4Ml9xc2V0CXFzZXQ7CiAJc3RydWN0IG90eDJfaHcJCWh3OwpAQCAtNTk0LDYgJiM0Mzs2MTcsMzQgQEAgc3RydWN0IG90eDJfbmljIHsKIAl1bnNpZ25lZCBsb25nCQkqYWZfeGRwX3pjX3FpZHg7CiB9OwogCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG90eDJfc2V0X2ZsYWcoc3RydWN0IG90eDJfbmljICpuaWMsIHVuc2lnbmVkIGludCBmbGFnKQomIzQzO3sKJiM0MzsJc2V0X2JpdChmbGFnLCAmYW1wO25pYy0mZ3Q7ZmxhZ3MpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgb3R4Ml9jbGVhcl9mbGFnKHN0cnVjdCBvdHgyX25pYyAqbmljLCB1bnNpZ25lZCBpbnQgZmxhZykKJiM0Mzt7CiYjNDM7CWNsZWFyX2JpdChmbGFnLCAmYW1wO25pYy0mZ3Q7ZmxhZ3MpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgb3R4Ml90ZXN0X2ZsYWcoc3RydWN0IG90eDJfbmljICpuaWMsIHVuc2lnbmVkIGludCBmbGFnKQomIzQzO3sKJiM0MzsJcmV0dXJuIHRlc3RfYml0KGZsYWcsICZhbXA7bmljLSZndDtmbGFncyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBvdHgyX3N5bmNfZmxhZ3NfZnJvbV9yZXAoc3RydWN0IG90eDJfbmljICpkc3QsCiYjNDM7CQkJCQkgICAgdW5zaWduZWQgbG9uZyAqc3JjX2ZsYWdzKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IGZsYWc7CiYjNDM7CiYjNDM7CWZvciAoZmxhZyA9IDA7IGZsYWcgJmx0Oz0gT1RYMl9SRVBfVkZfSU5JVElBTElaRUQ7IGZsYWcmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAodGVzdF9iaXQoZmxhZywgc3JjX2ZsYWdzKSkKJiM0MzsJCQlzZXRfYml0KGZsYWcsICZhbXA7ZHN0LSZndDtmbGFncyk7CiYjNDM7CQllbHNlCiYjNDM7CQkJY2xlYXJfYml0KGZsYWcsICZhbXA7ZHN0LSZndDtmbGFncyk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIGJvb2wgaXNfb3R4Ml9sYmt2ZihzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKIAlyZXR1cm4gKHBkZXYtJmd0O2RldmljZSA9PSBQQ0lfREVWSURfT0NURU9OVFgyX1JWVV9BRlZGKSB8fApAQCAtMTI0Niw2ICYjNDM7MTI5NywxMSBAQCBkbWFfYWRkcl90IG90eDJfZG1hX21hcF9za2JfZnJhZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsCiAJCQkJIHN0cnVjdCBza19idWZmICpza2IsIGludCBzZWcsIGludCAqbGVuKTsKIHZvaWQgb3R4Ml9kbWFfdW5tYXBfc2tiX2ZyYWdzKHN0cnVjdCBvdHgyX25pYyAqcGZ2Ziwgc3RydWN0IHNnX2xpc3QgKnNnKTsKIGludCBvdHgyX3JlYWRfZnJlZV9zcWUoc3RydWN0IG90eDJfbmljICpwZnZmLCB1MTYgcWlkeCk7CiYjNDM7aW50IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgdHhxLAomIzQzOwkJCQkgdTY0IG1pbnJhdGUsIHU2NCBtYXhyYXRlKTsKJiM0MztpbnQgb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7CiYjNDM7aW50IG90eDJfbXFwcmlvX2Rvd24oc3RydWN0IG90eDJfbmljICpwZnZmKTsKJiM0MztpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKTsKIHZvaWQgb3R4Ml9xdWV1ZV92Zl93b3JrKHN0cnVjdCBtYm94ICptdywgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm1ib3hfd3EsCiAJCQlpbnQgZmlyc3QsIGludCBtZGV2cywgdTY0IGludHIpOwogaW50IG90eDJfZGVsX21jYW1fZmxvd19lbnRyeShzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTE2IGVudHJ5LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmMKaW5kZXggOTFkMzQ2ZDExNGFmNS4uYjdiZDA4MTI5ZmI2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jCkBAIC00MTMsNiAmIzQzOzQxMywxMiBAQCBzdGF0aWMgaW50IG90eDJfZGNibmxfaWVlZV9zZXRwZmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGllZWVfcGZjICpwZmMpCiAJdTggb2xkX3BmY19lbjsKIAlpbnQgZXJyOwogCiYjNDM7CWlmIChwZnZmLSZndDttcXByaW8ucmF0ZV9saW1pdCAmYW1wOyZhbXA7IHBmYy0mZ3Q7cGZjX2VuKSB7CiYjNDM7CQluZXRkZXZfZXJyKGRldiwKJiM0MzsJCQkgICAmIzM0O1BGQzogY2Fubm90IGVuYWJsZSB3aGlsZSBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgaXMgYWN0aXZlXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKIAlvbGRfcGZjX2VuID0gcGZ2Zi0mZ3Q7cGZjX2VuOwogCXBmdmYtJmd0O3BmY19lbiA9IHBmYy0mZ3Q7cGZjX2VuOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kZXZsaW5rLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kZXZsaW5rLmMKaW5kZXggNGE1Y2UwZTY3ZGRhOC4uODYzYTVjZWQ5YTI2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGV2bGluay5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RldmxpbmsuYwpAQCAtMTA0LDcgJiM0MzsxMDQsNyBAQCBzdGF0aWMgaW50IG90eDJfZGxfdWNhc3RfZmx0X2NudF92YWxpZGF0ZShzdHJ1Y3QgZGV2bGluayAqZGV2bGluaywgdTMyIGlkLAogCXN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG90eDJfZGwtJmd0O3BmdmY7CiAKIAkvKiBDaGVjayBmb3IgVU5JQ0FTVCBmaWx0ZXIgc3VwcG9ydCovCi0JaWYgKCEocGZ2Zi0mZ3Q7ZmxhZ3MgJmFtcDsgT1RYMl9GTEFHX1VDQVNUX0ZMVFJfU1VQUE9SVCkpIHsKJiM0MzsJaWYgKCFvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfVUNBU1RfRkxUUl9TVVBQT1JUKSkgewogCQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLAogCQkJCSAgICYjMzQ7VW5pY2FzdCBmaWx0ZXIgbm90IGVuYWJsZWQmIzM0Oyk7CiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jCmluZGV4IDliZWUxYjkxZWVhYTYuLmU2M2VhZDNiMTExM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmMKQEAgLTI4Nyw2ICYjNDM7Mjg3LDE0IEBAIHN0YXRpYyBpbnQgb3R4Ml9zZXRfY2hhbm5lbHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiYjNDM7CWlmIChwZnZmLSZndDttcXByaW8ucmF0ZV9saW1pdCAmYW1wOyZhbXA7CiYjNDM7CSAgICAoY2hhbm5lbC0mZ3Q7dHhfY291bnQgIT0gcGZ2Zi0mZ3Q7aHcudHhfcXVldWVzIHx8CiYjNDM7CSAgICAgY2hhbm5lbC0mZ3Q7cnhfY291bnQgIT0gcGZ2Zi0mZ3Q7aHcucnhfcXVldWVzKSkgewomIzQzOwkJbmV0ZGV2X2luZm8oZGV2LAomIzQzOwkJCSAgICAmIzM0O05vdCBwZXJtaXR0ZWQgdG8gY2hhbmdlIGNoYW5uZWwgY291bnQgd2hpbGUgTVEgcHJpbyBpcyBhY3RpdmVcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiAJaWYgKGlmX3VwKQogCQlkZXYtJmd0O25ldGRldl9vcHMtJmd0O25kb19zdG9wKGRldik7CiAKQEAgLTM1NCwxNCAmIzQzOzM2MiwxNCBAQCBzdGF0aWMgaW50IG90eDJfc2V0X3BhdXNlcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJaWYgKHBhdXNlLSZndDtyeF9wYXVzZSkKLQkJcGZ2Zi0mZ3Q7ZmxhZ3MgfD0gT1RYMl9GTEFHX1JYX1BBVVNFX0VOQUJMRUQ7CiYjNDM7CQlvdHgyX3NldF9mbGFnKHBmdmYsIE9UWDJfRkxBR19SWF9QQVVTRV9FTkFCTEVEKTsKIAllbHNlCi0JCXBmdmYtJmd0O2ZsYWdzICZhbXA7PSB+T1RYMl9GTEFHX1JYX1BBVVNFX0VOQUJMRUQ7CiYjNDM7CQlvdHgyX2NsZWFyX2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1JYX1BBVVNFX0VOQUJMRUQpOwogCiAJaWYgKHBhdXNlLSZndDt0eF9wYXVzZSkKLQkJcGZ2Zi0mZ3Q7ZmxhZ3MgfD0gT1RYMl9GTEFHX1RYX1BBVVNFX0VOQUJMRUQ7CiYjNDM7CQlvdHgyX3NldF9mbGFnKHBmdmYsIE9UWDJfRkxBR19UWF9QQVVTRV9FTkFCTEVEKTsKIAllbHNlCi0JCXBmdmYtJmd0O2ZsYWdzICZhbXA7PSB+T1RYMl9GTEFHX1RYX1BBVVNFX0VOQUJMRUQ7CiYjNDM7CQlvdHgyX2NsZWFyX2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1RYX1BBVVNFX0VOQUJMRUQpOwogCiAJcmV0dXJuIG90eDJfY29uZmlnX3BhdXNlX2ZybShwZnZmKTsKIH0KQEAgLTQ3MCw4ICYjNDM7NDc4LDcgQEAgc3RhdGljIGludCBvdHgyX2dldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCWNtZC0mZ3Q7cnhfbWF4X2NvYWxlc2NlZF9mcmFtZXMgPSBody0mZ3Q7Y3FfZWNvdW50X3dhaXQ7CiAJY21kLSZndDt0eF9jb2FsZXNjZV91c2VjcyA9IGh3LSZndDtjcV90aW1lX3dhaXQ7CiAJY21kLSZndDt0eF9tYXhfY29hbGVzY2VkX2ZyYW1lcyA9IGh3LSZndDtjcV9lY291bnRfd2FpdDsKLQlpZiAoKHBmdmYtJmd0O2ZsYWdzICZhbXA7IE9UWDJfRkxBR19BRFBUVl9JTlRfQ09BTF9FTkFCTEVEKSA9PQotCQkJT1RYMl9GTEFHX0FEUFRWX0lOVF9DT0FMX0VOQUJMRUQpIHsKJiM0MzsJaWYgKG90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19BRFBUVl9JTlRfQ09BTF9FTkFCTEVEKSkgewogCQljbWQtJmd0O3VzZV9hZGFwdGl2ZV9yeF9jb2FsZXNjZSA9IDE7CiAJCWNtZC0mZ3Q7dXNlX2FkYXB0aXZlX3R4X2NvYWxlc2NlID0gMTsKIAl9IGVsc2UgewpAQCAtNTAyLDE1ICYjNDM7NTA5LDE0IEBAIHN0YXRpYyBpbnQgb3R4Ml9zZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAl9CiAKIAkvKiBDaGVjayBhbmQgdXBkYXRlIGNvYWxlc2NlIHN0YXR1cyAqLwotCWlmICgocGZ2Zi0mZ3Q7ZmxhZ3MgJmFtcDsgT1RYMl9GTEFHX0FEUFRWX0lOVF9DT0FMX0VOQUJMRUQpID09Ci0JCQlPVFgyX0ZMQUdfQURQVFZfSU5UX0NPQUxfRU5BQkxFRCkgewomIzQzOwlpZiAob3R4Ml90ZXN0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX0FEUFRWX0lOVF9DT0FMX0VOQUJMRUQpKSB7CiAJCXByaXZfY29hbGVzY2Vfc3RhdHVzID0gMTsKIAkJaWYgKCFlYy0mZ3Q7dXNlX2FkYXB0aXZlX3J4X2NvYWxlc2NlKQotCQkJcGZ2Zi0mZ3Q7ZmxhZ3MgJmFtcDs9IH5PVFgyX0ZMQUdfQURQVFZfSU5UX0NPQUxfRU5BQkxFRDsKJiM0MzsJCQlvdHgyX2NsZWFyX2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX0FEUFRWX0lOVF9DT0FMX0VOQUJMRUQpOwogCX0gZWxzZSB7CiAJCXByaXZfY29hbGVzY2Vfc3RhdHVzID0gMDsKIAkJaWYgKGVjLSZndDt1c2VfYWRhcHRpdmVfcnhfY29hbGVzY2UpCi0JCQlwZnZmLSZndDtmbGFncyB8PSBPVFgyX0ZMQUdfQURQVFZfSU5UX0NPQUxfRU5BQkxFRDsKJiM0MzsJCQlvdHgyX3NldF9mbGFnKHBmdmYsIE9UWDJfRkxBR19BRFBUVl9JTlRfQ09BTF9FTkFCTEVEKTsKIAl9CiAKIAkvKiAmIzM5O2NxX3RpbWVfd2FpdCYjMzk7IGlzIDhiaXQgYW5kIGlzIGluIG11bHRpcGxlIG9mIDEwMG5zLApAQCAtNTU2LDggJiM0Mzs1NjIsNyBAQCBzdGF0aWMgaW50IG90eDJfc2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJICogJiMzOTtvbiYjMzk7IHRvICYjMzk7b2ZmJiMzOTsuCiAJICovCiAJaWYgKHByaXZfY29hbGVzY2Vfc3RhdHVzICZhbXA7JmFtcDsKLQkgICAgKChwZnZmLSZndDtmbGFncyAmYW1wOyBPVFgyX0ZMQUdfQURQVFZfSU5UX0NPQUxfRU5BQkxFRCkgIT0KLQkgICAgIE9UWDJfRkxBR19BRFBUVl9JTlRfQ09BTF9FTkFCTEVEKSkgewomIzQzOwkgICAgKCFvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfQURQVFZfSU5UX0NPQUxfRU5BQkxFRCkpKSB7CiAJCWh3LSZndDtjcV90aW1lX3dhaXQgPSBDUV9USU1FUl9USFJFU0hfREVGQVVMVDsKIAkJaHctJmd0O2NxX2Vjb3VudF93YWl0ID0gQ1FfQ1FFX1RIUkVTSF9ERUZBVUxUOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2Zsb3dzLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9mbG93cy5jCmluZGV4IDk5ZDc4ZmM1YTJjNGEuLmI4ZmY0OWYwZjZlM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2Zsb3dzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZmxvd3MuYwpAQCAtMjcwLDkgJiM0MzsyNzAsOSBAQCBpbnQgb3R4Ml9hbGxvY19tY2FtX2VudHJpZXMoc3RydWN0IG90eDJfbmljICpwZnZmLCB1MTYgY291bnQpCiAJZmxvd19jZmctJmd0O21heF9mbG93cyA9IGFsbG9jYXRlZDsKIAogCWlmIChhbGxvY2F0ZWQpIHsKLQkJcGZ2Zi0mZ3Q7ZmxhZ3MgfD0gT1RYMl9GTEFHX01DQU1fRU5UUklFU19BTExPQzsKLQkJcGZ2Zi0mZ3Q7ZmxhZ3MgfD0gT1RYMl9GTEFHX05UVVBMRV9TVVBQT1JUOwotCQlwZnZmLSZndDtmbGFncyB8PSBPVFgyX0ZMQUdfVENfRkxPV0VSX1NVUFBPUlQ7CiYjNDM7CQlvdHgyX3NldF9mbGFnKHBmdmYsIE9UWDJfRkxBR19NQ0FNX0VOVFJJRVNfQUxMT0MpOwomIzQzOwkJb3R4Ml9zZXRfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfTlRVUExFX1NVUFBPUlQpOwomIzQzOwkJb3R4Ml9zZXRfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfVENfRkxPV0VSX1NVUFBPUlQpOwogCX0KIAogCWlmIChhbGxvY2F0ZWQgIT0gY291bnQpCkBAIC0zNzYsNyAmIzQzOzM3Niw3IEBAIGludCBvdHgyX21jYW1fZW50cnlfaW5pdChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiAJZmxvd19jZmctJmd0O3VuaWNhc3Rfb2Zmc2V0ID0gdmZfdmxhbl9tYXhfZmxvd3M7CiAJZmxvd19jZmctJmd0O3J4X3ZsYW5fb2Zmc2V0ID0gZmxvd19jZmctJmd0O3VuaWNhc3Rfb2Zmc2V0ICYjNDM7CiAJCQkJCWZsb3dfY2ZnLSZndDt1Y2FzdF9mbHRfY250OwotCXBmdmYtJmd0O2ZsYWdzIHw9IE9UWDJfRkxBR19VQ0FTVF9GTFRSX1NVUFBPUlQ7CiYjNDM7CW90eDJfc2V0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1VDQVNUX0ZMVFJfU1VQUE9SVCk7CiAKIAkvKiBDaGVjayBpZiBOUENfRE1BQyBmaWVsZCBpcyBzdXBwb3J0ZWQKIAkgKiBieSB0aGUgbWtleCBwcm9maWxlIGJlZm9yZSBzZXR0aW5nIFZMQU4gc3VwcG9ydCBmbGFnLgpAQCAtNDAxLDExICYjNDM7NDAxLDExIEBAIGludCBvdHgyX21jYW1fZW50cnlfaW5pdChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiAJfQogCiAJaWYgKGZyc3AtJmd0O2VuYWJsZSkgewotCQlwZnZmLSZndDtmbGFncyB8PSBPVFgyX0ZMQUdfUlhfVkxBTl9TVVBQT1JUOwotCQlwZnZmLSZndDtmbGFncyB8PSBPVFgyX0ZMQUdfVkZfVkxBTl9TVVBQT1JUOwomIzQzOwkJb3R4Ml9zZXRfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfUlhfVkxBTl9TVVBQT1JUKTsKJiM0MzsJCW90eDJfc2V0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1ZGX1ZMQU5fU1VQUE9SVCk7CiAJfQogCi0JcGZ2Zi0mZ3Q7ZmxhZ3MgfD0gT1RYMl9GTEFHX01DQU1fRU5UUklFU19BTExPQzsKJiM0MzsJb3R4Ml9zZXRfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfTUNBTV9FTlRSSUVTX0FMTE9DKTsKIAltdXRleF91bmxvY2soJmFtcDtwZnZmLSZndDttYm94LmxvY2spOwogCiAJLyogQWxsb2NhdGUgZW50cmllcyBmb3IgTnR1cGxlIGZpbHRlcnMgKi8KQEAgLTQxNSw3ICYjNDM7NDE1LDcgQEAgaW50IG90eDJfbWNhbV9lbnRyeV9pbml0KHN0cnVjdCBvdHgyX25pYyAqcGZ2ZikKIAkJcmV0dXJuIDA7CiAJfQogCi0JcGZ2Zi0mZ3Q7ZmxhZ3MgfD0gT1RYMl9GTEFHX1RDX0ZMT1dFUl9TVVBQT1JUOwomIzQzOwlvdHgyX3NldF9mbGFnKHBmdmYsIE9UWDJfRkxBR19UQ19GTE9XRVJfU1VQUE9SVCk7CiAKIAlyZWZjb3VudF9zZXQoJmFtcDtmbG93X2NmZy0mZ3Q7bWFya19mbG93cywgMSk7CiAJcmV0dXJuIDA7CkBAIC00NzksNyAmIzQzOzQ3OSw3IEBAIGludCBvdHgyX21jYW1fZmxvd19pbml0KHN0cnVjdCBvdHgyX25pYyAqcGYpCiAJCXJldHVybiBlcnI7CiAKIAkvKiBDaGVjayBpZiBNQ0FNIGVudHJpZXMgYXJlIGFsbG9jYXRlIG9yIG5vdCAqLwotCWlmICghKHBmLSZndDtmbGFncyAmYW1wOyBPVFgyX0ZMQUdfVUNBU1RfRkxUUl9TVVBQT1JUKSkKJiM0MzsJaWYgKCFvdHgyX3Rlc3RfZmxhZyhwZiwgT1RYMl9GTEFHX1VDQVNUX0ZMVFJfU1VQUE9SVCkpCiAJCXJldHVybiAwOwogCiAJcGYtJmd0O21hY190YWJsZSA9IGRldm1fa3phbGxvYyhwZi0mZ3Q7ZGV2LCBzaXplb2Yoc3RydWN0IG90eDJfbWFjX3RhYmxlKQpAQCAtNTAxLDcgJiM0Mzs1MDEsNyBAQCBpbnQgb3R4Ml9tY2FtX2Zsb3dfaW5pdChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmKQogCWlmICghcGYtJmd0O2Zsb3dfY2ZnLSZndDtibWFwX3RvX2RtYWNpbmRleCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlwZi0mZ3Q7ZmxhZ3MgfD0gT1RYMl9GTEFHX0RNQUNGTFRSX1NVUFBPUlQ7CiYjNDM7CW90eDJfc2V0X2ZsYWcocGYsIE9UWDJfRkxBR19ETUFDRkxUUl9TVVBQT1JUKTsKIAogCXJldHVybiAwOwogfQpAQCAtNTIxLDcgJiM0Mzs1MjEsNyBAQCBzdGF0aWMgaW50IG90eDJfZG9fYWRkX21hY2ZpbHRlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmLCBjb25zdCB1OCAqbWFjKQogCXN0cnVjdCBucGNfaW5zdGFsbF9mbG93X3JlcSAqcmVxOwogCWludCBlcnIsIGk7CiAKLQlpZiAoIShwZi0mZ3Q7ZmxhZ3MgJmFtcDsgT1RYMl9GTEFHX1VDQVNUX0ZMVFJfU1VQUE9SVCkpCiYjNDM7CWlmICghb3R4Ml90ZXN0X2ZsYWcocGYsIE9UWDJfRkxBR19VQ0FTVF9GTFRSX1NVUFBPUlQpKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCS8qIGRvbnQgaGF2ZSBmcmVlIG1jYW0gZW50cmllcyBvciB1YyBsaXN0IGlzIGdyZWF0ZXIgdGhhbiBhbGxvdGVkICovCkBAIC0xMTY3LDcgJiM0MzsxMTY3LDcgQEAgc3RhdGljIGludCBvdHgyX2lzX2Zsb3dfcnVsZV9kbWFjZmlsdGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwKIAl1NjQgcmluZ19jb29raWUgPSBmc3AtJmd0O3JpbmdfY29va2llOwogCXUzMiBmbG93X3R5cGU7CiAKLQlpZiAoIShwZnZmLSZndDtmbGFncyAmYW1wOyBPVFgyX0ZMQUdfRE1BQ0ZMVFJfU1VQUE9SVCkpCiYjNDM7CWlmICghb3R4Ml90ZXN0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX0RNQUNGTFRSX1NVUFBPUlQpKQogCQlyZXR1cm4gZmFsc2U7CiAKIAlmbG93X3R5cGUgPSBmc3AtJmd0O2Zsb3dfdHlwZSAmYW1wOyB+KEZMT1dfRVhUIHwgRkxPV19NQUNfRVhUIHwgRkxPV19SU1MpOwpAQCAtMTM2NCw3ICYjNDM7MTM2NCw3IEBAIGludCBvdHgyX2FkZF9mbG93KHN0cnVjdCBvdHgyX25pYyAqcGZ2Ziwgc3RydWN0IGV0aHRvb2xfcnhuZmMgKm5mYykKIAl9CiAKIAlyaW5nID0gZXRodG9vbF9nZXRfZmxvd19zcGVjX3JpbmcoZnNwLSZndDtyaW5nX2Nvb2tpZSk7Ci0JaWYgKCEocGZ2Zi0mZ3Q7ZmxhZ3MgJmFtcDsgT1RYMl9GTEFHX05UVVBMRV9TVVBQT1JUKSkKJiM0MzsJaWYgKCFvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfTlRVUExFX1NVUFBPUlQpKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCS8qIE51bWJlciBvZiBxdWV1ZXMgb24gYSBWRiBjYW4gYmUgZ3JlYXRlciBvciBsZXNzIHRoYW4KQEAgLTE1OTYsNyAmIzQzOzE1OTYsNyBAQCBpbnQgb3R4Ml9kZXN0cm95X250dXBsZV9mbG93cyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiAJc3RydWN0IG90eDJfZmxvdyAqaXRlciwgKnRtcDsKIAlpbnQgZXJyOwogCi0JaWYgKCEocGZ2Zi0mZ3Q7ZmxhZ3MgJmFtcDsgT1RYMl9GTEFHX05UVVBMRV9TVVBQT1JUKSkKJiM0MzsJaWYgKCFvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfTlRVUExFX1NVUFBPUlQpKQogCQlyZXR1cm4gMDsKIAogCWlmICghZmxvd19jZmctJmd0O21heF9mbG93cykKQEAgLTE2MjksNyAmIzQzOzE2MjksNyBAQCBpbnQgb3R4Ml9kZXN0cm95X21jYW1fZmxvd3Moc3RydWN0IG90eDJfbmljICpwZnZmKQogCXN0cnVjdCBvdHgyX2Zsb3cgKml0ZXIsICp0bXA7CiAJaW50IGVycjsKIAotCWlmICghKHBmdmYtJmd0O2ZsYWdzICZhbXA7IE9UWDJfRkxBR19NQ0FNX0VOVFJJRVNfQUxMT0MpKQomIzQzOwlpZiAoIW90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19NQ0FNX0VOVFJJRVNfQUxMT0MpKQogCQlyZXR1cm4gMDsKIAogCS8qIHJlbW92ZSBhbGwgZmxvd3MgKi8KQEAgLTE2NTgsNyAmIzQzOzE2NTgsNyBAQCBpbnQgb3R4Ml9kZXN0cm95X21jYW1fZmxvd3Moc3RydWN0IG90eDJfbmljICpwZnZmKQogCQlyZXR1cm4gZXJyOwogCX0KIAotCXBmdmYtJmd0O2ZsYWdzICZhbXA7PSB+T1RYMl9GTEFHX01DQU1fRU5UUklFU19BTExPQzsKJiM0MzsJb3R4Ml9jbGVhcl9mbGFnKHBmdmYsIE9UWDJfRkxBR19NQ0FNX0VOVFJJRVNfQUxMT0MpOwogCWZsb3dfY2ZnLSZndDttYXhfZmxvd3MgPSAwOwogCW11dGV4X3VubG9jaygmYW1wO3BmdmYtJmd0O21ib3gubG9jayk7CiAKQEAgLTE3MjEsNyAmIzQzOzE3MjEsNyBAQCBpbnQgb3R4Ml9lbmFibGVfcnh2bGFuKHN0cnVjdCBvdHgyX25pYyAqcGYsIGJvb2wgZW5hYmxlKQogCWludCBlcnI7CiAKIAkvKiBEb250IGhhdmUgZW5vdWdoIG1jYW0gZW50cmllcyAqLwotCWlmICghKHBmLSZndDtmbGFncyAmYW1wOyBPVFgyX0ZMQUdfUlhfVkxBTl9TVVBQT1JUKSkKJiM0MzsJaWYgKCFvdHgyX3Rlc3RfZmxhZyhwZiwgT1RYMl9GTEFHX1JYX1ZMQU5fU1VQUE9SVCkpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJaWYgKGVuYWJsZSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMKaW5kZXggYzBlMjEwMGRlMWQ5My4uMWUxN2Y4ZDQ5ZmQ0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jCkBAIC04NzksNyAmIzQzOzg3OSw3IEBAIHN0YXRpYyB2b2lkIG90eDJfaGFuZGxlX2xpbmtfZXZlbnQoc3RydWN0IG90eDJfbmljICpwZikKIAlzdHJ1Y3QgY2d4X2xpbmtfdXNlcl9pbmZvICpsaW5mbyA9ICZhbXA7cGYtJmd0O2xpbmZvOwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZi0mZ3Q7bmV0ZGV2OwogCi0JaWYgKHBmLSZndDtmbGFncyAmYW1wOyBPVFgyX0ZMQUdfUE9SVF9VUCkKJiM0MzsJaWYgKG90eDJfdGVzdF9mbGFnKHBmLCBPVFgyX0ZMQUdfUE9SVF9VUCkpCiAJCXJldHVybjsKIAogCXByX2luZm8oJiMzNDslcyBOSUMgTGluayBpcyAlcyAlZCBNYnBzICVzIGR1cGxleFxuJiMzNDssIG5ldGRldi0mZ3Q7bmFtZSwKQEAgLTkwNywxMSAmIzQzOzkwNywxMSBAQCBzdGF0aWMgaW50IG90eDJfbWJveF91cF9oYW5kbGVyX3JlcF9ldmVudF91cF9ub3RpZnkoc3RydWN0IG90eDJfbmljICpwZiwKIAogCWlmIChpbmZvLSZndDtldmVudCA9PSBSVlVfRVZFTlRfUE9SVF9TVEFURSkgewogCQlpZiAoaW5mby0mZ3Q7ZXZ0X2RhdGEucG9ydF9zdGF0ZSkgewotCQkJcGYtJmd0O2ZsYWdzIHw9IE9UWDJfRkxBR19QT1JUX1VQOwomIzQzOwkJCW90eDJfc2V0X2ZsYWcocGYsIE9UWDJfRkxBR19QT1JUX1VQKTsKIAkJCW5ldGlmX2NhcnJpZXJfb24obmV0ZGV2KTsKIAkJCW5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMobmV0ZGV2KTsKIAkJfSBlbHNlIHsKLQkJCXBmLSZndDtmbGFncyAmYW1wOz0gfk9UWDJfRkxBR19QT1JUX1VQOwomIzQzOwkJCW90eDJfY2xlYXJfZmxhZyhwZiwgT1RYMl9GTEFHX1BPUlRfVVApOwogCQkJbmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5ldGRldik7CiAJCQluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOwogCQl9CkBAIC05NTMsNyAmIzQzOzk1Myw3IEBAIGludCBvdHgyX21ib3hfdXBfaGFuZGxlcl9jZ3hfbGlua19ldmVudChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmLAogCX0KIAogCS8qIGludGVyZmFjZSBoYXMgbm90IGJlZW4gZnVsbHkgY29uZmlndXJlZCB5ZXQgKi8KLQlpZiAocGYtJmd0O2ZsYWdzICZhbXA7IE9UWDJfRkxBR19JTlRGX0RPV04pCiYjNDM7CWlmIChvdHgyX3Rlc3RfZmxhZyhwZiwgT1RYMl9GTEFHX0lOVEZfRE9XTikpCiAJCXJldHVybiAwOwogCiAJb3R4Ml9oYW5kbGVfbGlua19ldmVudChwZik7CkBAIC0xODI4LDcgJiM0MzsxODI4LDcgQEAgdm9pZCBvdHgyX2ZyZWVfaHdfcmVzb3VyY2VzKHN0cnVjdCBvdHgyX25pYyAqcGYpCiAJZnJlZV9yZXEgPSBvdHgyX21ib3hfYWxsb2NfbXNnX25peF9sZl9mcmVlKG1ib3gpOwogCWlmIChmcmVlX3JlcSkgewogCQlmcmVlX3JlcS0mZ3Q7ZmxhZ3MgPSBOSVhfTEZfRElTQUJMRV9GTE9XUyB8IE5JWF9MRl9ET05UX0ZSRUVfREZUX0lEWFM7Ci0JCWlmICghKHBmLSZndDtmbGFncyAmYW1wOyBPVFgyX0ZMQUdfUEZfU0hVVERPV04pKQomIzQzOwkJaWYgKCFvdHgyX3Rlc3RfZmxhZyhwZiwgT1RYMl9GTEFHX1BGX1NIVVRET1dOKSkKIAkJCWZyZWVfcmVxLSZndDtmbGFncyB8PSBOSVhfTEZfRE9OVF9GUkVFX1RYX1ZUQUc7CiAJCWlmIChvdHgyX3N5bmNfbWJveF9tc2cobWJveCkpCiAJCQlkZXZfZXJyKHBmLSZndDtkZXYsICYjMzQ7JXMgZmFpbGVkIHRvIGZyZWUgbml4bGZcbiYjMzQ7LCBfX2Z1bmNfXyk7CkBAIC0yMDA3LDYgJiM0MzsyMDA3LDE0IEBAIGludCBvdHgyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9mcmVlX21lbTsKIAomIzQzOwllcnIgPSBvdHgyX21xcHJpb191cChwZik7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCW5ldGRldl9lcnIocGYtJmd0O25ldGRldiwKJiM0MzsJCQkgICAmIzM0O21xcHJpbzogZmFpbGVkIHRvIHJlc3RvcmUgc2hhcGVycyBkdXJpbmcgb3BlbjogJWRcbiYjMzQ7LAomIzQzOwkJCSAgIGVycik7CiYjNDM7CQlnb3RvIGVycl9mcmVlX2h3OwomIzQzOwl9CiYjNDM7CiAJLyogUmVnaXN0ZXIgTkFQSSBoYW5kbGVyICovCiAJZm9yIChxaWR4ID0gMDsgcWlkeCAmbHQ7IHBmLSZndDtody5jaW50X2NudDsgcWlkeCYjNDM7JiM0MzspIHsKIAkJY3FfcG9sbCA9ICZhbXA7cXNldC0mZ3Q7bmFwaVtxaWR4XTsKQEAgLTIxMzUsMjEgJiM0MzsyMTQzLDIxIEBAIGludCBvdHgyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIAl9CiAJb3R4Ml93cml0ZTY0KHBmLCBOSVhfTEZfUkFTX0VOQV9XMVMsIE5JWF9MRl9SQVNfTUFTSyk7CiAKLQlpZiAocGYtJmd0O2ZsYWdzICZhbXA7IE9UWDJfRkxBR19SWF9WTEFOX1NVUFBPUlQpCiYjNDM7CWlmIChvdHgyX3Rlc3RfZmxhZyhwZiwgT1RYMl9GTEFHX1JYX1ZMQU5fU1VQUE9SVCkpCiAJCW90eDJfZW5hYmxlX3J4dmxhbihwZiwgdHJ1ZSk7CiAKIAkvKiBXaGVuIHJlaW5pdGlhbGl6aW5nIGVuYWJsZSB0aW1lIHN0YW1waW5nIGlmIGl0IGlzIGVuYWJsZWQgYmVmb3JlICovCi0JaWYgKHBmLSZndDtmbGFncyAmYW1wOyBPVFgyX0ZMQUdfVFhfVFNUQU1QX0VOQUJMRUQpIHsKLQkJcGYtJmd0O2ZsYWdzICZhbXA7PSB+T1RYMl9GTEFHX1RYX1RTVEFNUF9FTkFCTEVEOwomIzQzOwlpZiAob3R4Ml90ZXN0X2ZsYWcocGYsIE9UWDJfRkxBR19UWF9UU1RBTVBfRU5BQkxFRCkpIHsKJiM0MzsJCW90eDJfY2xlYXJfZmxhZyhwZiwgT1RYMl9GTEFHX1RYX1RTVEFNUF9FTkFCTEVEKTsKIAkJb3R4Ml9jb25maWdfaHdfdHhfdHN0YW1wKHBmLCB0cnVlKTsKIAl9Ci0JaWYgKHBmLSZndDtmbGFncyAmYW1wOyBPVFgyX0ZMQUdfUlhfVFNUQU1QX0VOQUJMRUQpIHsKLQkJcGYtJmd0O2ZsYWdzICZhbXA7PSB+T1RYMl9GTEFHX1JYX1RTVEFNUF9FTkFCTEVEOwomIzQzOwlpZiAob3R4Ml90ZXN0X2ZsYWcocGYsIE9UWDJfRkxBR19SWF9UU1RBTVBfRU5BQkxFRCkpIHsKJiM0MzsJCW90eDJfY2xlYXJfZmxhZyhwZiwgT1RYMl9GTEFHX1JYX1RTVEFNUF9FTkFCTEVEKTsKIAkJb3R4Ml9jb25maWdfaHdfcnhfdHN0YW1wKHBmLCB0cnVlKTsKIAl9CiAKLQlwZi0mZ3Q7ZmxhZ3MgJmFtcDs9IH5PVFgyX0ZMQUdfSU5URl9ET1dOOwotCXBmLSZndDtmbGFncyAmYW1wOz0gfk9UWDJfRkxBR19QT1JUX1VQOwomIzQzOwlvdHgyX2NsZWFyX2ZsYWcocGYsIE9UWDJfRkxBR19JTlRGX0RPV04pOwomIzQzOwlvdHgyX2NsZWFyX2ZsYWcocGYsIE9UWDJfRkxBR19QT1JUX1VQKTsKIAkvKiAmIzM5O2ludGZfZG93biYjMzk7IG1heSBiZSBjaGVja2VkIG9uIGFueSBjcHUgKi8KIAlzbXBfd21iKCk7CiAKQEAgLTIxNjEsNyAmIzQzOzIxNjksNyBAQCBpbnQgb3R4Ml9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiAJCW90eDJfaGFuZGxlX2xpbmtfZXZlbnQocGYpOwogCiAJLyogSW5zdGFsbCBETUFDIEZpbHRlcnMgKi8KLQlpZiAocGYtJmd0O2ZsYWdzICZhbXA7IE9UWDJfRkxBR19ETUFDRkxUUl9TVVBQT1JUKQomIzQzOwlpZiAob3R4Ml90ZXN0X2ZsYWcocGYsIE9UWDJfRkxBR19ETUFDRkxUUl9TVVBQT1JUKSkKIAkJb3R4Ml9kbWFjZmx0X3JlaW5zdGFsbF9mbG93cyhwZik7CiAKIAlvdHgyX3RjX2FwcGx5X2luZ3Jlc3NfcG9saWNlX3J1bGVzKHBmKTsKQEAgLTIxODYsNyAmIzQzOzIxOTQsNyBAQCBpbnQgb3R4Ml9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiBlcnJfdHhfc3RvcF9xdWV1ZXM6CiAJbmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5ldGRldik7CiAJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKLQlwZi0mZ3Q7ZmxhZ3MgfD0gT1RYMl9GTEFHX0lOVEZfRE9XTjsKJiM0MzsJb3R4Ml9zZXRfZmxhZyhwZiwgT1RYMl9GTEFHX0lOVEZfRE9XTik7CiAJLyogZnJlZSBOSVhMRiBQT0lTT04gaXJxICovCiAJdmVjID0gcGNpX2lycV92ZWN0b3IocGYtJmd0O3BkZXYsCiAJCQkgICAgIHBmLSZndDtody5uaXhfbXNpeG9mZiAmIzQzOyBOSVhfTEZfUE9JU09OX1ZFQyk7CkBAIC0yMjA1LDYgJiM0MzsyMjEzLDcgQEAgaW50IG90eDJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCWZyZWVfaXJxKHZlYywgcGYpOwogZXJyX2Rpc2FibGVfbmFwaToKIAlvdHgyX2Rpc2FibGVfbmFwaShwZik7CiYjNDM7ZXJyX2ZyZWVfaHc6CiAJb3R4Ml9mcmVlX2h3X3Jlc291cmNlcyhwZik7CiBlcnJfZnJlZV9tZW06CiAJb3R4Ml9mcmVlX3F1ZXVlX21lbShxc2V0KTsKQEAgLTIyMjAsMTMgJiM0MzsyMjI5LDEzIEBAIGludCBvdHgyX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIAlpbnQgcWlkeCwgdmVjLCB3cms7CiAKIAkvKiBJZiB0aGUgRE9XTiBmbGFnIGlzIHNldCByZXNvdXJjZXMgYXJlIGFscmVhZHkgZnJlZWQgKi8KLQlpZiAocGYtJmd0O2ZsYWdzICZhbXA7IE9UWDJfRkxBR19JTlRGX0RPV04pCiYjNDM7CWlmIChvdHgyX3Rlc3RfZmxhZyhwZiwgT1RYMl9GTEFHX0lOVEZfRE9XTikpCiAJCXJldHVybiAwOwogCiAJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKIAluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTsKIAotCXBmLSZndDtmbGFncyB8PSBPVFgyX0ZMQUdfSU5URl9ET1dOOwomIzQzOwlvdHgyX3NldF9mbGFnKHBmLCBPVFgyX0ZMQUdfSU5URl9ET1dOKTsKIAkvKiAmIzM5O2ludGZfZG93biYjMzk7IG1heSBiZSBjaGVja2VkIG9uIGFueSBjcHUgKi8KIAlzbXBfd21iKCk7CiAKQEAgLTIyODAsNiAmIzQzOzIyODksNyBAQCBpbnQgb3R4Ml9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiAJZm9yIChxaWR4ID0gMDsgcWlkeCAmbHQ7IG5ldGRldi0mZ3Q7bnVtX3R4X3F1ZXVlczsgcWlkeCYjNDM7JiM0MzspCiAJCW5ldGRldl90eF9yZXNldF9xdWV1ZShuZXRkZXZfZ2V0X3R4X3F1ZXVlKG5ldGRldiwgcWlkeCkpOwogCiYjNDM7CXN5bmNocm9uaXplX25ldCgpOwogCW90eDJfZnJlZV9xdWV1ZV9tZW0ocXNldCk7CiAJLyogRG8gbm90IGNsZWFyIFJRL1NRIHJpbmdzaXplIHNldHRpbmdzICovCiAJbWVtc2V0X3N0YXJ0YXQocXNldCwgMCwgc3FlX2NudCk7CkBAIC0yNDU3LDcgJiM0MzsyNDY3LDcgQEAgc3RhdGljIGludCBvdHgyX2NvbmZpZ19od19yeF90c3RhbXAoc3RydWN0IG90eDJfbmljICpwZnZmLCBib29sIGVuYWJsZSkKIAlzdHJ1Y3QgbXNnX3JlcSAqcmVxOwogCWludCBlcnI7CiAKLQlpZiAocGZ2Zi0mZ3Q7ZmxhZ3MgJmFtcDsgT1RYMl9GTEFHX1JYX1RTVEFNUF9FTkFCTEVEICZhbXA7JmFtcDsgZW5hYmxlKQomIzQzOwlpZiAob3R4Ml90ZXN0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1JYX1RTVEFNUF9FTkFCTEVEKSAmYW1wOyZhbXA7IGVuYWJsZSkKIAkJcmV0dXJuIDA7CiAKIAltdXRleF9sb2NrKCZhbXA7cGZ2Zi0mZ3Q7bWJveC5sb2NrKTsKQEAgLTI0NzgsOSAmIzQzOzI0ODgsOSBAQCBzdGF0aWMgaW50IG90eDJfY29uZmlnX2h3X3J4X3RzdGFtcChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGJvb2wgZW5hYmxlKQogCiAJbXV0ZXhfdW5sb2NrKCZhbXA7cGZ2Zi0mZ3Q7bWJveC5sb2NrKTsKIAlpZiAoZW5hYmxlKQotCQlwZnZmLSZndDtmbGFncyB8PSBPVFgyX0ZMQUdfUlhfVFNUQU1QX0VOQUJMRUQ7CiYjNDM7CQlvdHgyX3NldF9mbGFnKHBmdmYsIE9UWDJfRkxBR19SWF9UU1RBTVBfRU5BQkxFRCk7CiAJZWxzZQotCQlwZnZmLSZndDtmbGFncyAmYW1wOz0gfk9UWDJfRkxBR19SWF9UU1RBTVBfRU5BQkxFRDsKJiM0MzsJCW90eDJfY2xlYXJfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfUlhfVFNUQU1QX0VOQUJMRUQpOwogCXJldHVybiAwOwogfQogCkBAIC0yNDg5LDcgJiM0MzsyNDk5LDcgQEAgc3RhdGljIGludCBvdHgyX2NvbmZpZ19od190eF90c3RhbXAoc3RydWN0IG90eDJfbmljICpwZnZmLCBib29sIGVuYWJsZSkKIAlzdHJ1Y3QgbXNnX3JlcSAqcmVxOwogCWludCBlcnI7CiAKLQlpZiAocGZ2Zi0mZ3Q7ZmxhZ3MgJmFtcDsgT1RYMl9GTEFHX1RYX1RTVEFNUF9FTkFCTEVEICZhbXA7JmFtcDsgZW5hYmxlKQomIzQzOwlpZiAob3R4Ml90ZXN0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1RYX1RTVEFNUF9FTkFCTEVEKSAmYW1wOyZhbXA7IGVuYWJsZSkKIAkJcmV0dXJuIDA7CiAKIAltdXRleF9sb2NrKCZhbXA7cGZ2Zi0mZ3Q7bWJveC5sb2NrKTsKQEAgLTI1MTAsOSAmIzQzOzI1MjAsOSBAQCBzdGF0aWMgaW50IG90eDJfY29uZmlnX2h3X3R4X3RzdGFtcChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGJvb2wgZW5hYmxlKQogCiAJbXV0ZXhfdW5sb2NrKCZhbXA7cGZ2Zi0mZ3Q7bWJveC5sb2NrKTsKIAlpZiAoZW5hYmxlKQotCQlwZnZmLSZndDtmbGFncyB8PSBPVFgyX0ZMQUdfVFhfVFNUQU1QX0VOQUJMRUQ7CiYjNDM7CQlvdHgyX3NldF9mbGFnKHBmdmYsIE9UWDJfRkxBR19UWF9UU1RBTVBfRU5BQkxFRCk7CiAJZWxzZQotCQlwZnZmLSZndDtmbGFncyAmYW1wOz0gfk9UWDJfRkxBR19UWF9UU1RBTVBfRU5BQkxFRDsKJiM0MzsJCW90eDJfY2xlYXJfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfVFhfVFNUQU1QX0VOQUJMRUQpOwogCXJldHVybiAwOwogfQogCkBAIC0yNTM3LDggJiM0MzsyNTQ3LDggQEAgaW50IG90eDJfY29uZmlnX2h3dHN0YW1wX3NldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCiAJc3dpdGNoIChjb25maWctJmd0O3R4X3R5cGUpIHsKIAljYXNlIEhXVFNUQU1QX1RYX09GRjoKLQkJaWYgKHBmdmYtJmd0O2ZsYWdzICZhbXA7IE9UWDJfRkxBR19QVFBfT05FU1RFUF9TWU5DKQotCQkJcGZ2Zi0mZ3Q7ZmxhZ3MgJmFtcDs9IH5PVFgyX0ZMQUdfUFRQX09ORVNURVBfU1lOQzsKJiM0MzsJCWlmIChvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfUFRQX09ORVNURVBfU1lOQykpCiYjNDM7CQkJb3R4Ml9jbGVhcl9mbGFnKHBmdmYsIE9UWDJfRkxBR19QVFBfT05FU1RFUF9TWU5DKTsKIAogCQljYW5jZWxfZGVsYXllZF93b3JrKCZhbXA7cGZ2Zi0mZ3Q7cHRwLSZndDtzeW5jdHN0YW1wX3dvcmspOwogCQlvdHgyX2NvbmZpZ19od190eF90c3RhbXAocGZ2ZiwgZmFsc2UpOwpAQCAtMjU0OSw3ICYjNDM7MjU1OSw3IEBAIGludCBvdHgyX2NvbmZpZ19od3RzdGFtcF9zZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkJCQkJICAgJiMzNDtPbmUtc3RlcCB0aW1lIHN0YW1waW5nIGlzIG5vdCBzdXBwb3J0ZWQmIzM0Oyk7CiAJCQlyZXR1cm4gLUVSQU5HRTsKIAkJfQotCQlwZnZmLSZndDtmbGFncyB8PSBPVFgyX0ZMQUdfUFRQX09ORVNURVBfU1lOQzsKJiM0MzsJCW90eDJfc2V0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1BUUF9PTkVTVEVQX1NZTkMpOwogCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmFtcDtwZnZmLSZndDtwdHAtJmd0O3N5bmN0c3RhbXBfd29yaywKIAkJCQkgICAgICBtc2Vjc190b19qaWZmaWVzKDUwMCkpOwogCQlmYWxsdGhyb3VnaDsKQEAgLTI4MzUsNyAmIzQzOzI4NDUsNyBAQCBzdGF0aWMgaW50IG90eDJfc2V0X3ZmX3ZsYW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHZmLCB1MTYgdmxhbiwgdTggcW9zLAogCWlmIChwcm90byAhPSBodG9ucyhFVEhfUF84MDIxUSkpCiAJCXJldHVybiAtRVBST1RPTk9TVVBQT1JUOwogCi0JaWYgKCEocGYtJmd0O2ZsYWdzICZhbXA7IE9UWDJfRkxBR19WRl9WTEFOX1NVUFBPUlQpKQomIzQzOwlpZiAoIW90eDJfdGVzdF9mbGFnKHBmLCBPVFgyX0ZMQUdfVkZfVkxBTl9TVVBQT1JUKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJcmV0dXJuIG90eDJfZG9fc2V0X3ZmX3ZsYW4ocGYsIHZmLCB2bGFuLCBxb3MsIHByb3RvKTsKQEAgLTI5MjMsNiAmIzQzOzI5MzMsMTIgQEAgc3RhdGljIGludCBvdHgyX3hkcF9zZXR1cChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpCiAJYm9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcocGYtJmd0O25ldGRldik7CiAJc3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZzsKIAomIzQzOwlpZiAocHJvZyAmYW1wOyZhbXA7IHBmLSZndDttcXByaW8ucmF0ZV9saW1pdCkgewomIzQzOwkJbmV0ZGV2X2VycihkZXYsCiYjNDM7CQkJICAgJiMzNDtYRFA6IGNhbm5vdCBhdHRhY2ggd2hpbGUgbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGlzIGFjdGl2ZVxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiAJaWYgKHByb2cgJmFtcDsmYW1wOyBkZXYtJmd0O210dSAmZ3Q7IE1BWF9YRFBfTVRVKSB7CiAJCW5ldGRldl93YXJuKGRldiwgJiMzNDtKdW1ibyBmcmFtZXMgbm90IHlldCBzdXBwb3J0ZWQgd2l0aCBYRFBcbiYjMzQ7KTsKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwpAQCAtMzA4Niw3ICYjNDM7MzEwMiw3IEBAIGludCBvdHgyX3JlYWxsb2NfbXNpeF92ZWN0b3JzKHN0cnVjdCBvdHgyX25pYyAqcGYpCiAJICogaW50ZXJydXB0IHJhbmdlIChRSU5ULCBDSU5ULCBHSU5ULCBFUlIgYW5kIFBPSVNPTiB2ZWN0b3JzKS4KIAkgKi8KIAludW1fdmVjID0gaHctJmd0O25peF9tc2l4b2ZmOwotCWlmIChwZi0mZ3Q7ZmxhZ3MgJmFtcDsgT1RYMl9GTEFHX1JFUF9NT0RFX0VOQUJMRUQpCiYjNDM7CWlmIChvdHgyX3Rlc3RfZmxhZyhwZiwgT1RYMl9GTEFHX1JFUF9NT0RFX0VOQUJMRUQpKQogCQludW1fdmVjICYjNDM7PSBOSVhfTEZfQ0lOVF9WRUNfU1RBUlQgJiM0MzsgaHctJmd0O21heF9xdWV1ZXM7CiAJZWxzZQogCQludW1fdmVjICYjNDM7PSBOSVhfTEZfUE9JU09OX1ZFQyAmIzQzOyAxOwpAQCAtMzI3Myw3ICYjNDM7MzI4OSw3IEBAIHN0YXRpYyBpbnQgb3R4Ml9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQogCXBmLSZndDtwZGV2ID0gcGRldjsKIAlwZi0mZ3Q7ZGV2ID0gZGV2OwogCXBmLSZndDt0b3RhbF92ZnMgPSBwY2lfc3Jpb3ZfZ2V0X3RvdGFsdmZzKHBkZXYpOwotCXBmLSZndDtmbGFncyB8PSBPVFgyX0ZMQUdfSU5URl9ET1dOOwomIzQzOwlvdHgyX3NldF9mbGFnKHBmLCBPVFgyX0ZMQUdfSU5URl9ET1dOKTsKIAogCWh3ID0gJmFtcDtwZi0mZ3Q7aHc7CiAJaHctJmd0O3BkZXYgPSBwZGV2OwpAQCAtMzMyOCwyMyAmIzQzOzMzNDQsMjMgQEAgc3RhdGljIGludCBvdHgyX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCiAJaWYgKGVycikKIAkJZ290byBlcnJfZGVsX21jYW1fZW50cmllczsKIAotCWlmIChwZi0mZ3Q7ZmxhZ3MgJmFtcDsgT1RYMl9GTEFHX05UVVBMRV9TVVBQT1JUKQomIzQzOwlpZiAob3R4Ml90ZXN0X2ZsYWcocGYsIE9UWDJfRkxBR19OVFVQTEVfU1VQUE9SVCkpCiAJCW5ldGRldi0mZ3Q7aHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9OVFVQTEU7CiAKLQlpZiAocGYtJmd0O2ZsYWdzICZhbXA7IE9UWDJfRkxBR19VQ0FTVF9GTFRSX1NVUFBPUlQpCiYjNDM7CWlmIChvdHgyX3Rlc3RfZmxhZyhwZiwgT1RYMl9GTEFHX1VDQVNUX0ZMVFJfU1VQUE9SVCkpCiAJCW5ldGRldi0mZ3Q7cHJpdl9mbGFncyB8PSBJRkZfVU5JQ0FTVF9GTFQ7CiAKIAkvKiBTdXBwb3J0IFRTTyBvbiB0YWcgaW50ZXJmYWNlICovCiAJbmV0ZGV2LSZndDt2bGFuX2ZlYXR1cmVzIHw9IG5ldGRldi0mZ3Q7ZmVhdHVyZXM7CiAJbmV0ZGV2LSZndDtod19mZWF0dXJlcyAgfD0gTkVUSUZfRl9IV19WTEFOX0NUQUdfVFggfAogCQkJCU5FVElGX0ZfSFdfVkxBTl9TVEFHX1RYOwotCWlmIChwZi0mZ3Q7ZmxhZ3MgJmFtcDsgT1RYMl9GTEFHX1JYX1ZMQU5fU1VQUE9SVCkKJiM0MzsJaWYgKG90eDJfdGVzdF9mbGFnKHBmLCBPVFgyX0ZMQUdfUlhfVkxBTl9TVVBQT1JUKSkKIAkJbmV0ZGV2LSZndDtod19mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1ZMQU5fQ1RBR19SWCB8CiAJCQkJICAgICAgIE5FVElGX0ZfSFdfVkxBTl9TVEFHX1JYOwogCW5ldGRldi0mZ3Q7ZmVhdHVyZXMgfD0gbmV0ZGV2LSZndDtod19mZWF0dXJlczsKIAogCS8qIEhXIHN1cHBvcnRzIHRjIG9mZmxvYWQgYnV0IG11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIG4tdHVwbGUgZmlsdGVycyAqLwotCWlmIChwZi0mZ3Q7ZmxhZ3MgJmFtcDsgT1RYMl9GTEFHX1RDX0ZMT1dFUl9TVVBQT1JUKQomIzQzOwlpZiAob3R4Ml90ZXN0X2ZsYWcocGYsIE9UWDJfRkxBR19UQ19GTE9XRVJfU1VQUE9SVCkpCiAJCW5ldGRldi0mZ3Q7aHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19UQzsKIAogCW5ldGRldi0mZ3Q7aHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9MT09QQkFDSyB8IE5FVElGX0ZfUlhBTEw7CkBAIC0zNTk1LDE4ICYjNDM7MzYxMSwxOCBAQCBzdGF0aWMgdm9pZCBvdHgyX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIAogCXBmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAotCXBmLSZndDtmbGFncyB8PSBPVFgyX0ZMQUdfUEZfU0hVVERPV047CiYjNDM7CW90eDJfc2V0X2ZsYWcocGYsIE9UWDJfRkxBR19QRl9TSFVURE9XTik7CiAKLQlpZiAocGYtJmd0O2ZsYWdzICZhbXA7IE9UWDJfRkxBR19UWF9UU1RBTVBfRU5BQkxFRCkKJiM0MzsJaWYgKG90eDJfdGVzdF9mbGFnKHBmLCBPVFgyX0ZMQUdfVFhfVFNUQU1QX0VOQUJMRUQpKQogCQlvdHgyX2NvbmZpZ19od190eF90c3RhbXAocGYsIGZhbHNlKTsKLQlpZiAocGYtJmd0O2ZsYWdzICZhbXA7IE9UWDJfRkxBR19SWF9UU1RBTVBfRU5BQkxFRCkKJiM0MzsJaWYgKG90eDJfdGVzdF9mbGFnKHBmLCBPVFgyX0ZMQUdfUlhfVFNUQU1QX0VOQUJMRUQpKQogCQlvdHgyX2NvbmZpZ19od19yeF90c3RhbXAocGYsIGZhbHNlKTsKIAogCS8qIERpc2FibGUgODAyLjN4IHBhdXNlIGZyYW1lcyAqLwotCWlmIChwZi0mZ3Q7ZmxhZ3MgJmFtcDsgT1RYMl9GTEFHX1JYX1BBVVNFX0VOQUJMRUQgfHwKLQkgICAgKHBmLSZndDtmbGFncyAmYW1wOyBPVFgyX0ZMQUdfVFhfUEFVU0VfRU5BQkxFRCkpIHsKLQkJcGYtJmd0O2ZsYWdzICZhbXA7PSB+T1RYMl9GTEFHX1JYX1BBVVNFX0VOQUJMRUQ7Ci0JCXBmLSZndDtmbGFncyAmYW1wOz0gfk9UWDJfRkxBR19UWF9QQVVTRV9FTkFCTEVEOwomIzQzOwlpZiAob3R4Ml90ZXN0X2ZsYWcocGYsIE9UWDJfRkxBR19SWF9QQVVTRV9FTkFCTEVEKSB8fAomIzQzOwkgICAgb3R4Ml90ZXN0X2ZsYWcocGYsIE9UWDJfRkxBR19UWF9QQVVTRV9FTkFCTEVEKSkgewomIzQzOwkJb3R4Ml9jbGVhcl9mbGFnKHBmLCBPVFgyX0ZMQUdfUlhfUEFVU0VfRU5BQkxFRCk7CiYjNDM7CQlvdHgyX2NsZWFyX2ZsYWcocGYsIE9UWDJfRkxBR19UWF9QQVVTRV9FTkFCTEVEKTsKIAkJb3R4Ml9jb25maWdfcGF1c2VfZnJtKHBmKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jCmluZGV4IDAzOWZkNDdlYmY1MjIuLjcwZDk5YWUzZGVmYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuYwpAQCAtMTYsNiAmIzQzOzE2LDggQEAKICNpbmNsdWRlICZsdDtuZXQvdGNfYWN0L3RjX21pcnJlZC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC90Y19hY3QvdGNfdmxhbi5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9pcHY2LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9wa3Rfc2NoZWQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L3NjaF9nZW5lcmljLmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7Y24xMGsuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O290eDJfY29tbW9uLmgmIzM0OwpAQCAtMzEsNiAmIzQzOzMzLDEwIEBACiAKICNkZWZpbmUgTUNBU1RfSU5WQUxJRF9HUlAJCSgtMVUpCiAjZGVmaW5lIFJBVEVfTUFOVElTU0FfQklUUwkJOAomIzQzOy8qIE1pbiBwZXItcXVldWUgZWdyZXNzIHNoYXBpbmcgcmF0ZSB0aGUgTklYIFRMWCBlbmNvZGVyIHN1cHBvcnRzICgyIE1icHMpLiAqLwomIzQzOyNkZWZpbmUgT1RYMl9NUVBSSU9fTUlOX1JBVEVfQllURVNfUFMJMjUwMDAwVUxMCiYjNDM7LyogTWF4IGVncmVzcyBzaGFwaW5nIHJhdGUgdGhlIE5JWCBUTFggZW5jb2RlciBzdXBwb3J0cyAoMTMwODE2IE1icHMpLiAqLwomIzQzOyNkZWZpbmUgT1RYMl9NUVBSSU9fTUFYX1JBVEVfQllURVNfUFMJKChNQVhfQlVSU1RfU0laRSAqIDEwMDAwMDBVTEwpIC8gOFVMTCkKIAogc3RhdGljIHZvaWQgb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTMyIGJ1cnN0LAogCQkJCSAgICAgIHUzMiAqYnVyc3RfZXhwLCB1MzIgKmJ1cnN0X21hbnRpc3NhKQpAQCAtNjEsNiAmIzQzOzY3LDkgQEAgc3RhdGljIHZvaWQgb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTMyIGJ1cnN0LAogCQkJKmJ1cnN0X21hbnRpc3NhID0gdG1wIC8gKDFVTEwgJmx0OyZsdDsgKCpidXJzdF9leHAgLSA3KSk7CiAJCX0KIAl9IGVsc2UgewomIzQzOwkJLyogYnVyc3QgMDogbGFyZ2VzdCBlbmNvZGFibGUgYnVyc3QgKENOMTBLX01BWF9CVVJTVF9TSVpFIG9uCiYjNDM7CQkgKiBDTjEwSyksIG5vdCBhIG1pbmltYWwgYnVyc3QuCiYjNDM7CQkgKi8KIAkJKmJ1cnN0X2V4cCA9IE1BWF9CVVJTVF9FWFBPTkVOVDsKIAkJKmJ1cnN0X21hbnRpc3NhID0gbWF4X21hbnRpc3NhOwogCX0KQEAgLTE1OSw3ICYjNDM7MTY4LDcgQEAgc3RhdGljIGludCBvdHgyX3RjX3ZhbGlkYXRlX2Zsb3coc3RydWN0IG90eDJfbmljICpuaWMsCiAJCQkJIHN0cnVjdCBmbG93X2FjdGlvbiAqYWN0aW9ucywKIAkJCQkgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQogewotCWlmIChuaWMtJmd0O2ZsYWdzICZhbXA7IE9UWDJfRkxBR19JTlRGX0RPV04pIHsKJiM0MzsJaWYgKG90eDJfdGVzdF9mbGFnKG5pYywgT1RYMl9GTEFHX0lOVEZfRE9XTikpIHsKIAkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgJiMzNDtJbnRlcmZhY2Ugbm90IGluaXRpYWxpemVkJiMzNDspOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0yMjMsNyAmIzQzOzIzMiw3IEBAIHN0YXRpYyBpbnQgb3R4Ml90Y19lZ3Jlc3NfbWF0Y2hhbGxfaW5zdGFsbChzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JaWYgKG5pYy0mZ3Q7ZmxhZ3MgJmFtcDsgT1RYMl9GTEFHX1RDX01BVENIQUxMX0VHUkVTU19FTkFCTEVEKSB7CiYjNDM7CWlmIChvdHgyX3Rlc3RfZmxhZyhuaWMsIE9UWDJfRkxBR19UQ19NQVRDSEFMTF9FR1JFU1NfRU5BQkxFRCkpIHsKIAkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywKIAkJCQkgICAmIzM0O09ubHkgb25lIEVncmVzcyBNQVRDSEFMTCByYXRlbGltaXRlciBjYW4gYmUgb2ZmbG9hZGVkJiMzNDspOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTI0NCw3ICYjNDM7MjUzLDcgQEAgc3RhdGljIGludCBvdHgyX3RjX2VncmVzc19tYXRjaGFsbF9pbnN0YWxsKHN0cnVjdCBvdHgyX25pYyAqbmljLAogCQkJCQkJICAgIG90eDJfY29udmVydF9yYXRlKGVudHJ5LSZndDtwb2xpY2UucmF0ZV9ieXRlc19wcykpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKLQkJbmljLSZndDtmbGFncyB8PSBPVFgyX0ZMQUdfVENfTUFUQ0hBTExfRUdSRVNTX0VOQUJMRUQ7CiYjNDM7CQlvdHgyX3NldF9mbGFnKG5pYywgT1RYMl9GTEFHX1RDX01BVENIQUxMX0VHUkVTU19FTkFCTEVEKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywKQEAgLTI2MSwxMyAmIzQzOzI3MCwxMyBAQCBzdGF0aWMgaW50IG90eDJfdGNfZWdyZXNzX21hdGNoYWxsX2RlbGV0ZShzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywKIAlzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2sgPSBjbHMtJmd0O2NvbW1vbi5leHRhY2s7CiAJaW50IGVycjsKIAotCWlmIChuaWMtJmd0O2ZsYWdzICZhbXA7IE9UWDJfRkxBR19JTlRGX0RPV04pIHsKJiM0MzsJaWYgKG90eDJfdGVzdF9mbGFnKG5pYywgT1RYMl9GTEFHX0lOVEZfRE9XTikpIHsKIAkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgJiMzNDtJbnRlcmZhY2Ugbm90IGluaXRpYWxpemVkJiMzNDspOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAllcnIgPSBvdHgyX3NldF9tYXRjaGFsbF9lZ3Jlc3NfcmF0ZShuaWMsIDAsIDApOwotCW5pYy0mZ3Q7ZmxhZ3MgJmFtcDs9IH5PVFgyX0ZMQUdfVENfTUFUQ0hBTExfRUdSRVNTX0VOQUJMRUQ7CiYjNDM7CW90eDJfY2xlYXJfZmxhZyhuaWMsIE9UWDJfRkxBR19UQ19NQVRDSEFMTF9FR1JFU1NfRU5BQkxFRCk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtNTA1LDcgJiM0Mzs1MTQsNyBAQCBzdGF0aWMgaW50IG90eDJfdGNfcGFyc2VfYWN0aW9ucyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywKIAkJCW1hcmsgPSBhY3QtJmd0O21hcms7CiAJCQlyZXEtJmd0O21hdGNoX2lkID0gbWFyayAmYW1wOyBPVFgyX1JYX01BVENIX0lEX01BU0s7CiAJCQlyZXEtJmd0O29wID0gTklYX1JYX0FDVElPTl9ERUZBVUxUOwotCQkJbmljLSZndDtmbGFncyB8PSBPVFgyX0ZMQUdfVENfTUFSS19FTkFCTEVEOwomIzQzOwkJCW90eDJfc2V0X2ZsYWcobmljLCBPVFgyX0ZMQUdfVENfTUFSS19FTkFCTEVEKTsKIAkJCXJlZmNvdW50X2luYygmYW1wO25pYy0mZ3Q7Zmxvd19jZmctJmd0O21hcmtfZmxvd3MpOwogCQkJYnJlYWs7CiAKQEAgLTk0Miw3ICYjNDM7OTUxLDcgQEAgc3RhdGljIHZvaWQgb3R4Ml9kZXN0cm95X3RjX2Zsb3dfbGlzdChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiAJc3RydWN0IG90eDJfZmxvd19jb25maWcgKmZsb3dfY2ZnID0gcGZ2Zi0mZ3Q7Zmxvd19jZmc7CiAJc3RydWN0IG90eDJfdGNfZmxvdyAqaXRlciwgKnRtcDsKIAotCWlmICghKHBmdmYtJmd0O2ZsYWdzICZhbXA7IE9UWDJfRkxBR19NQ0FNX0VOVFJJRVNfQUxMT0MpKQomIzQzOwlpZiAoIW90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19NQ0FNX0VOVFJJRVNfQUxMT0MpKQogCQlyZXR1cm47CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaXRlciwgdG1wLCAmYW1wO2Zsb3dfY2ZnLSZndDtmbG93X2xpc3RfdGMsIGxpc3QpIHsKQEAgLTExOTUsMTIgJiM0MzsxMjA0LDEyIEBAIHN0YXRpYyBpbnQgb3R4Ml90Y19kZWxfZmxvdyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywKIAkvKiBEaXNhYmxlIFRDIE1BUksgZmxhZyBpZiB0aGV5IGFyZSBubyBydWxlcyB3aXRoIHNrYmVkaXQgbWFyayBhY3Rpb24gKi8KIAlpZiAoZmxvd19ub2RlLSZndDtyZXEubWF0Y2hfaWQpCiAJCWlmICghcmVmY291bnRfZGVjX2FuZF90ZXN0KCZhbXA7Zmxvd19jZmctJmd0O21hcmtfZmxvd3MpKQotCQkJbmljLSZndDtmbGFncyAmYW1wOz0gfk9UWDJfRkxBR19UQ19NQVJLX0VOQUJMRUQ7CiYjNDM7CQkJb3R4Ml9jbGVhcl9mbGFnKG5pYywgT1RYMl9GTEFHX1RDX01BUktfRU5BQkxFRCk7CiAKIAlpZiAoZmxvd19ub2RlLSZndDtpc19hY3RfcG9saWNlKSB7CiAJCV9fY2xlYXJfYml0KGZsb3dfbm9kZS0mZ3Q7cnEsICZhbXA7bmljLSZndDtycV9ibWFwKTsKIAotCQlpZiAobmljLSZndDtmbGFncyAmYW1wOyBPVFgyX0ZMQUdfSU5URl9ET1dOKQomIzQzOwkJaWYgKG90eDJfdGVzdF9mbGFnKG5pYywgT1RYMl9GTEFHX0lOVEZfRE9XTikpCiAJCQlnb3RvIGZyZWVfbWNhbV9mbG93OwogCiAJCW11dGV4X2xvY2soJmFtcDtuaWMtJmd0O21ib3gubG9jayk7CkBAIC0xMjQ2LDEwICYjNDM7MTI1NSwxMCBAQCBzdGF0aWMgaW50IG90eDJfdGNfYWRkX2Zsb3coc3RydWN0IG90eDJfbmljICpuaWMsCiAJc3RydWN0IG5wY19pbnN0YWxsX2Zsb3dfcmVxICpyZXEsIGR1bW15OwogCWludCByYywgZXJyLCBlbnRyeTsKIAotCWlmICghKG5pYy0mZ3Q7ZmxhZ3MgJmFtcDsgT1RYMl9GTEFHX1RDX0ZMT1dFUl9TVVBQT1JUKSkKJiM0MzsJaWYgKCFvdHgyX3Rlc3RfZmxhZyhuaWMsIE9UWDJfRkxBR19UQ19GTE9XRVJfU1VQUE9SVCkpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JaWYgKG5pYy0mZ3Q7ZmxhZ3MgJmFtcDsgT1RYMl9GTEFHX0lOVEZfRE9XTikgewomIzQzOwlpZiAob3R4Ml90ZXN0X2ZsYWcobmljLCBPVFgyX0ZMQUdfSU5URl9ET1dOKSkgewogCQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCAmIzM0O0ludGVyZmFjZSBub3QgaW5pdGlhbGl6ZWQmIzM0Oyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTE0NDQsNyAmIzQzOzE0NTMsNyBAQCBzdGF0aWMgaW50IG90eDJfdGNfaW5ncmVzc19tYXRjaGFsbF9pbnN0YWxsKHN0cnVjdCBvdHgyX25pYyAqbmljLAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQlpZiAobmljLSZndDtmbGFncyAmYW1wOyBPVFgyX0ZMQUdfVENfTUFUQ0hBTExfSU5HUkVTU19FTkFCTEVEKSB7CiYjNDM7CWlmIChvdHgyX3Rlc3RfZmxhZyhuaWMsIE9UWDJfRkxBR19UQ19NQVRDSEFMTF9JTkdSRVNTX0VOQUJMRUQpKSB7CiAJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssCiAJCQkJICAgJiMzNDtPbmx5IG9uZSBpbmdyZXNzIE1BVENIQUxMIHJhdGVsaW1pdHRlciBjYW4gYmUgb2ZmbG9hZGVkJiMzNDspOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTE0NjksNyAmIzQzOzE0NzgsNyBAQCBzdGF0aWMgaW50IG90eDJfdGNfaW5ncmVzc19tYXRjaGFsbF9pbnN0YWxsKHN0cnVjdCBvdHgyX25pYyAqbmljLAogCQllcnIgPSBjbjEwa19zZXRfbWF0Y2hhbGxfaXBvbGljZXJfcmF0ZShuaWMsIGVudHJ5LSZndDtwb2xpY2UuYnVyc3QsIHJhdGUpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKLQkJbmljLSZndDtmbGFncyB8PSBPVFgyX0ZMQUdfVENfTUFUQ0hBTExfSU5HUkVTU19FTkFCTEVEOwomIzQzOwkJb3R4Ml9zZXRfZmxhZyhuaWMsIE9UWDJfRkxBR19UQ19NQVRDSEFMTF9JTkdSRVNTX0VOQUJMRUQpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLApAQCAtMTQ4NiwxMyAmIzQzOzE0OTUsMTMgQEAgc3RhdGljIGludCBvdHgyX3RjX2luZ3Jlc3NfbWF0Y2hhbGxfZGVsZXRlKHN0cnVjdCBvdHgyX25pYyAqbmljLAogCXN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayA9IGNscy0mZ3Q7Y29tbW9uLmV4dGFjazsKIAlpbnQgZXJyOwogCi0JaWYgKG5pYy0mZ3Q7ZmxhZ3MgJmFtcDsgT1RYMl9GTEFHX0lOVEZfRE9XTikgewomIzQzOwlpZiAob3R4Ml90ZXN0X2ZsYWcobmljLCBPVFgyX0ZMQUdfSU5URl9ET1dOKSkgewogCQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCAmIzM0O0ludGVyZmFjZSBub3QgaW5pdGlhbGl6ZWQmIzM0Oyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWVyciA9IGNuMTBrX2ZyZWVfbWF0Y2hhbGxfaXBvbGljZXIobmljKTsKLQluaWMtJmd0O2ZsYWdzICZhbXA7PSB+T1RYMl9GTEFHX1RDX01BVENIQUxMX0lOR1JFU1NfRU5BQkxFRDsKJiM0MzsJb3R4Ml9jbGVhcl9mbGFnKG5pYywgT1RYMl9GTEFHX1RDX01BVENIQUxMX0lOR1JFU1NfRU5BQkxFRCk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTYwMCwxNCAmIzQzOzE2MDksNzUwIEBAIHN0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19ibG9jayhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCQkJCQkgIG5pYywgbmljLCBpbmdyZXNzKTsKIH0KIAomIzQzOy8qIEZyZWUgdGhlIHBlci1xdWV1ZSBtaW4vbWF4IHJhdGUgY2FjaGVzLiAqLwomIzQzO3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUoc3RydWN0IG90eDJfbmljICpwZnZmKQomIzQzO3sKJiM0MzsJZGV2bV9rZnJlZShwZnZmLSZndDtkZXYsIHBmdmYtJmd0O21xcHJpby5taW5fcmF0ZSk7CiYjNDM7CWRldm1fa2ZyZWUocGZ2Zi0mZ3Q7ZGV2LCBwZnZmLSZndDttcXByaW8ubWF4X3JhdGUpOwomIzQzOwlwZnZmLSZndDttcXByaW8ubWluX3JhdGUgPSBOVUxMOwomIzQzOwlwZnZmLSZndDttcXByaW8ubWF4X3JhdGUgPSBOVUxMOwomIzQzOwlwZnZmLSZndDttcXByaW8uZmxhZ3MgPSAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG90eDJfbXFwcmlvX2FsbG9jX2NhY2hlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgYm9vbCByZXBsYWNpbmcpCiYjNDM7ewomIzQzOwl1MTYgbnVtX3R4cSA9IHBmdmYtJmd0O2h3Lm5vbl9xb3NfcXVldWVzOwomIzQzOwomIzQzOwlpZiAocmVwbGFjaW5nICZhbXA7JmFtcDsgcGZ2Zi0mZ3Q7bXFwcmlvLm1pbl9yYXRlICZhbXA7JmFtcDsgcGZ2Zi0mZ3Q7bXFwcmlvLm1heF9yYXRlKSB7CiYjNDM7CQltZW1zZXQocGZ2Zi0mZ3Q7bXFwcmlvLm1pbl9yYXRlLCAwLAomIzQzOwkJICAgICAgIG51bV90eHEgKiBzaXplb2YoKnBmdmYtJmd0O21xcHJpby5taW5fcmF0ZSkpOwomIzQzOwkJbWVtc2V0KHBmdmYtJmd0O21xcHJpby5tYXhfcmF0ZSwgMCwKJiM0MzsJCSAgICAgICBudW1fdHhxICogc2l6ZW9mKCpwZnZmLSZndDttcXByaW8ubWF4X3JhdGUpKTsKJiM0MzsJCXBmdmYtJmd0O21xcHJpby5mbGFncyA9IDA7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlvdHgyX21xcHJpb19mcmVlX2NhY2hlKHBmdmYpOwomIzQzOwomIzQzOwlwZnZmLSZndDttcXByaW8ubWluX3JhdGUgPSBkZXZtX2tjYWxsb2MocGZ2Zi0mZ3Q7ZGV2LCBudW1fdHhxLAomIzQzOwkJCQkJICAgICBzaXplb2YoKnBmdmYtJmd0O21xcHJpby5taW5fcmF0ZSksCiYjNDM7CQkJCQkgICAgIEdGUF9LRVJORUwpOwomIzQzOwlwZnZmLSZndDttcXByaW8ubWF4X3JhdGUgPSBkZXZtX2tjYWxsb2MocGZ2Zi0mZ3Q7ZGV2LCBudW1fdHhxLAomIzQzOwkJCQkJICAgICBzaXplb2YoKnBmdmYtJmd0O21xcHJpby5tYXhfcmF0ZSksCiYjNDM7CQkJCQkgICAgIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXBmdmYtJmd0O21xcHJpby5taW5fcmF0ZSB8fCAhcGZ2Zi0mZ3Q7bXFwcmlvLm1heF9yYXRlKSB7CiYjNDM7CQlvdHgyX21xcHJpb19mcmVlX2NhY2hlKHBmdmYpOwomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX3NuYXBfZnJlZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsCiYjNDM7CQkJCSAgc3RydWN0IG1xX29mZmxvYWRfc25hcCAqKnNuYXApCiYjNDM7ewomIzQzOwlpZiAoISpzbmFwKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlkZXZtX2tmcmVlKHBmdmYtJmd0O2RldiwgKnNuYXApOwomIzQzOwkqc25hcCA9IE5VTEw7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fc25hcF9jb3B5KHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwKJiM0MzsJCQkJIHN0cnVjdCBtcV9vZmZsb2FkX3NuYXAgKipkc3QsCiYjNDM7CQkJCSBjb25zdCBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0ID0gJmFtcDttcXByaW8tJmd0O3FvcHQ7CiYjNDM7CXN0cnVjdCBtcV9vZmZsb2FkX3NuYXAgKnNuYXA7CiYjNDM7CWludCB0YzsKJiM0MzsKJiM0MzsJaWYgKCEqZHN0KSB7CiYjNDM7CQlzbmFwID0gZGV2bV9remFsbG9jKHBmdmYtJmd0O2Rldiwgc2l6ZW9mKCpzbmFwKSwgR0ZQX0tFUk5FTCk7CiYjNDM7CQlpZiAoIXNuYXApCiYjNDM7CQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CQkqZHN0ID0gc25hcDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXNuYXAgPSAqZHN0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXNuYXAtJmd0O251bV90YyA9IHFvcHQtJmd0O251bV90YzsKJiM0MzsJZm9yICh0YyA9IDA7IHRjICZsdDsgVENfUU9QVF9NQVhfUVVFVUU7IHRjJiM0MzsmIzQzOykgewomIzQzOwkJc25hcC0mZ3Q7Y291bnRbdGNdID0gcW9wdC0mZ3Q7Y291bnRbdGNdOwomIzQzOwkJc25hcC0mZ3Q7b2Zmc2V0W3RjXSA9IHFvcHQtJmd0O29mZnNldFt0Y107CiYjNDM7CQlzbmFwLSZndDttaW5fcmF0ZVt0Y10gPSAwOwomIzQzOwkJc25hcC0mZ3Q7bWF4X3JhdGVbdGNdID0gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKHRjID0gMDsgdGMgJmx0OyBxb3B0LSZndDtudW1fdGM7IHRjJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKG1xcHJpby0mZ3Q7ZmxhZ3MgJmFtcDsgVENfTVFQUklPX0ZfTUlOX1JBVEUpCiYjNDM7CQkJc25hcC0mZ3Q7bWluX3JhdGVbdGNdID0gbXFwcmlvLSZndDttaW5fcmF0ZVt0Y107CiYjNDM7CQlpZiAobXFwcmlvLSZndDtmbGFncyAmYW1wOyBUQ19NUVBSSU9fRl9NQVhfUkFURSkKJiM0MzsJCQlzbmFwLSZndDttYXhfcmF0ZVt0Y10gPSBtcXByaW8tJmd0O21heF9yYXRlW3RjXTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBvdHgyX21xcHJpb19zdGFnZV9jdXIoc3RydWN0IG90eDJfbmljICpwZnZmLAomIzQzOwkJCQkgY29uc3Qgc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbykKJiM0Mzt7CiYjNDM7CXJldHVybiBvdHgyX21xcHJpb19zbmFwX2NvcHkocGZ2ZiwgJmFtcDtwZnZmLSZndDtjdXJfbXFfc25hcCwgbXFwcmlvKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fc25hcF9jb21taXQoc3RydWN0IG90eDJfbmljICpwZnZmKQomIzQzO3sKJiM0MzsJb3R4Ml9tcXByaW9fc25hcF9mcmVlKHBmdmYsICZhbXA7cGZ2Zi0mZ3Q7b2xkX21xX3NuYXApOwomIzQzOwlwZnZmLSZndDtvbGRfbXFfc25hcCA9IHBmdmYtJmd0O2N1cl9tcV9zbmFwOwomIzQzOwlwZnZmLSZndDtjdXJfbXFfc25hcCA9IE5VTEw7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX2NsZWFyX3JlcGxhY2Vfc3RhdGUoc3RydWN0IG90eDJfbmljICpwZnZmKQomIzQzO3sKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvLnJlcGxhY2Vfc2V0dXBfZG9uZSA9IGZhbHNlOwomIzQzOwlwZnZmLSZndDttcXByaW8ucmVwbGFjZV9ncmFmdF9kb25lID0gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIG90eDJfbXFwcmlvX21kcV9hbGxvY2F0ZWQoc3RydWN0IG90eDJfbmljICpwZnZmKQomIzQzO3sKJiM0MzsJcmV0dXJuIHBmdmYtJmd0O2h3LnR4c2NocV9jbnRbTklYX1RYU0NIX0xWTF9NRFFdICE9IDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByYXRlX2xpbWl0KTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IG90eDJfbXFwcmlvX3Jlc3RvcmVfb2xkKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtcV9vZmZsb2FkX3NuYXAgKnNuYXAgPSBwZnZmLSZndDtvbGRfbXFfc25hcDsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtJmd0O25ldGRldjsKJiM0MzsJdTE2IG51bV90eHEgPSBwZnZmLSZndDtody5ub25fcW9zX3F1ZXVlczsKJiM0MzsJaW50IHRjLCB0eHEsIGVycjsKJiM0MzsKJiM0MzsJaWYgKCFzbmFwKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWVyciA9IG90eDJfbXFwcmlvX2FsbG9jX2NhY2hlKHBmdmYsIGZhbHNlKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CW1lbXNldChwZnZmLSZndDttcXByaW8ubWluX3JhdGUsIDAsIG51bV90eHEgKiBzaXplb2YoKnBmdmYtJmd0O21xcHJpby5taW5fcmF0ZSkpOwomIzQzOwltZW1zZXQocGZ2Zi0mZ3Q7bXFwcmlvLm1heF9yYXRlLCAwLCBudW1fdHhxICogc2l6ZW9mKCpwZnZmLSZndDttcXByaW8ubWF4X3JhdGUpKTsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvLmZsYWdzID0gMDsKJiM0MzsKJiM0MzsJZm9yICh0YyA9IDA7IHRjICZsdDsgc25hcC0mZ3Q7bnVtX3RjOyB0YyYjNDM7JiM0MzspIHsKJiM0MzsJCXU2NCBtaW5fcmF0ZSA9IHNuYXAtJmd0O21pbl9yYXRlW3RjXTsKJiM0MzsJCXU2NCBtYXhfcmF0ZSA9IHNuYXAtJmd0O21heF9yYXRlW3RjXTsKJiM0MzsKJiM0MzsJCWlmIChtaW5fcmF0ZSkKJiM0MzsJCQlwZnZmLSZndDttcXByaW8uZmxhZ3MgfD0gVENfTVFQUklPX0ZfTUlOX1JBVEU7CiYjNDM7CQlpZiAobWF4X3JhdGUpCiYjNDM7CQkJcGZ2Zi0mZ3Q7bXFwcmlvLmZsYWdzIHw9IFRDX01RUFJJT19GX01BWF9SQVRFOwomIzQzOwomIzQzOwkJZm9yICh0eHEgPSBzbmFwLSZndDtvZmZzZXRbdGNdOwomIzQzOwkJICAgICB0eHEgJmx0OyBzbmFwLSZndDtvZmZzZXRbdGNdICYjNDM7IHNuYXAtJmd0O2NvdW50W3RjXTsgdHhxJiM0MzsmIzQzOykgewomIzQzOwkJCXBmdmYtJmd0O21xcHJpby5taW5fcmF0ZVt0eHFdID0gbWluX3JhdGU7CiYjNDM7CQkJcGZ2Zi0mZ3Q7bXFwcmlvLm1heF9yYXRlW3R4cV0gPSBtYXhfcmF0ZTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwluZXRkZXZfc2V0X251bV90YyhuZXRkZXYsIHNuYXAtJmd0O251bV90Yyk7CiYjNDM7CWZvciAodGMgPSAwOyB0YyAmbHQ7IHNuYXAtJmd0O251bV90YzsgdGMmIzQzOyYjNDM7KQomIzQzOwkJbmV0ZGV2X3NldF90Y19xdWV1ZShuZXRkZXYsIHRjLCBzbmFwLSZndDtjb3VudFt0Y10sCiYjNDM7CQkJCSAgICBzbmFwLSZndDtvZmZzZXRbdGNdKTsKJiM0MzsKJiM0MzsJaWYgKG90eDJfbXFwcmlvX21kcV9hbGxvY2F0ZWQocGZ2ZikpIHsKJiM0MzsJCWVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBSZWJ1aWxkIHRoZSBUWCBzY2hlZHVsZXIgdmlhIG5ldGRldiByZXN0YXJ0IHdoZW4gcnVubmluZzsgb3R4Ml9tcXByaW9fdXAoKQomIzQzOwkgKiBhbG9uZSBpcyBpbnN1ZmZpY2llbnQgYWZ0ZXIgYSBmYWlsZWQgcmVwbGFjZSB0aGF0IGFscmVhZHkgYm91bmNlZCB0aGUKJiM0MzsJICogaW50ZXJmYWNlLiBJZiBvcGVuIGZhaWxlZCwgVFggc2NoZWR1bGVycyB3ZXJlIGZyZWVkOyBkZWZlciBzaGFwZXIgcmVzdG9yZQomIzQzOwkgKiB0byB0aGUgbmV4dCBzdWNjZXNzZnVsIG5kb19vcGVuKCkgdmlhIG90eDJfbXFwcmlvX3VwKCkuCiYjNDM7CSAqLwomIzQzOwlwZnZmLSZndDttcXByaW8ucmF0ZV9saW1pdCA9IHRydWU7CiYjNDM7CiYjNDM7CWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKJiM0MzsJCWVyciA9IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KG5ldGRldiwgdHJ1ZSk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CX0gZWxzZSBpZiAocGZ2Zi0mZ3Q7aHcudHhzY2hxX2NudFtOSVhfVFhTQ0hfTFZMX1NNUV0pIHsKJiM0MzsJCWVyciA9IG90eDJfbXFwcmlvX3VwKHBmdmYpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CW90eDJfbXFwcmlvX3NuYXBfZnJlZShwZnZmLCAmYW1wO3BmdmYtJmd0O2N1cl9tcV9zbmFwKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX3NuYXBfZGVzdHJveShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiYjNDM7ewomIzQzOwlvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgJmFtcDtwZnZmLSZndDtjdXJfbXFfc25hcCk7CiYjNDM7CW90eDJfbXFwcmlvX3NuYXBfZnJlZShwZnZmLCAmYW1wO3BmdmYtJmd0O29sZF9tcV9zbmFwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fY2xlYXJfc3coc3RydWN0IG90eDJfbmljICpwZnZmKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtJmd0O25ldGRldjsKJiM0MzsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvLnJhdGVfbGltaXQgPSBmYWxzZTsKJiM0MzsJb3R4Ml9tcXByaW9fY2xlYXJfcmVwbGFjZV9zdGF0ZShwZnZmKTsKJiM0MzsJbmV0ZGV2X3NldF9udW1fdGMobmV0ZGV2LCAwKTsKJiM0MzsJb3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogVGVhciBkb3duIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZDogY2xlYXIgcGVyLXF1ZXVlIHNoYXBlcnMsCiYjNDM7ICogbXFwcmlvX3JhdGVfbGltaXQsIG5ldGRldiBUQyBtYXBwaW5ncywgYW5kIHRoZSBjYWNoZWQgcmF0ZXMuICBDYWxsZWQgb24KJiM0MzsgKiBleHBsaWNpdCBtcXByaW8gdGVhcmRvd24gKHRjIHFkaXNjIGRlbCkgYW5kIGVycm9yIGNsZWFudXAsIG5vdCBvbgomIzQzOyAqIHJvdXRpbmUgbmV0ZGV2IHN0b3Avb3BlbiBjeWNsZXMgd2hlcmUgdGhlIG9mZmxvYWQgc3RheXMgYWN0aXZlLgomIzQzOyAqLwomIzQzO2ludCBvdHgyX21xcHJpb19kb3duKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZikKJiM0Mzt7CiYjNDM7CWludCBlcnIgPSAwOwomIzQzOwomIzQzOwlpZiAoIXBmdmYtJmd0O21xcHJpby5yYXRlX2xpbWl0KQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmIChuZXRpZl9ydW5uaW5nKHBmdmYtJmd0O25ldGRldikgJmFtcDsmYW1wOwomIzQzOwkgICAgb3R4Ml9tcXByaW9fbWRxX2FsbG9jYXRlZChwZnZmKSkKJiM0MzsJCWVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTsKJiM0MzsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJbmV0ZGV2X3dhcm4ocGZ2Zi0mZ3Q7bmV0ZGV2LAomIzQzOwkJCSAgICAmIzM0O21xcHJpbzogZmFpbGVkIHRvIGNsZWFyIGhhcmR3YXJlIHNoYXBlcnM6ICVkOyBjbGVhcmluZyBzb2Z0d2FyZSBzdGF0ZVxuJiMzNDssCiYjNDM7CQkJICAgIGVycik7CiYjNDM7CQlvdHgyX21xcHJpb19jbGVhcl9zdyhwZnZmKTsKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJb3R4Ml9tcXByaW9fY2xlYXJfc3cocGZ2Zik7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtJmd0O25ldGRldjsKJiM0MzsJaW50IHR4cSwgZXJyOwomIzQzOwomIzQzOwlpZiAoIXBmdmYtJmd0O21xcHJpby5yYXRlX2xpbWl0KQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmICghcGZ2Zi0mZ3Q7bXFwcmlvLm1pbl9yYXRlIHx8ICFwZnZmLSZndDttcXByaW8ubWF4X3JhdGUpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJZm9yICh0eHEgPSAwOyB0eHEgJmx0OyBwZnZmLSZndDtody5ub25fcW9zX3F1ZXVlczsgdHhxJiM0MzsmIzQzOykgewomIzQzOwkJdTY0IG1pbl9yYXRlID0gMCwgbWF4X3JhdGUgPSAwOwomIzQzOwomIzQzOwkJaWYgKHBmdmYtJmd0O21xcHJpby5mbGFncyAmYW1wOyBUQ19NUVBSSU9fRl9NSU5fUkFURSkKJiM0MzsJCQltaW5fcmF0ZSA9IHBmdmYtJmd0O21xcHJpby5taW5fcmF0ZVt0eHFdOwomIzQzOwkJaWYgKHBmdmYtJmd0O21xcHJpby5mbGFncyAmYW1wOyBUQ19NUVBSSU9fRl9NQVhfUkFURSkKJiM0MzsJCQltYXhfcmF0ZSA9IHBmdmYtJmd0O21xcHJpby5tYXhfcmF0ZVt0eHFdOwomIzQzOwomIzQzOwkJaWYgKCFtaW5fcmF0ZSAmYW1wOyZhbXA7ICFtYXhfcmF0ZSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWVyciA9IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIocGZ2ZiwgdHhxLCBtaW5fcmF0ZSwKJiM0MzsJCQkJCQkgICBtYXhfcmF0ZSk7CiYjNDM7CQlpZiAoZXJyKSB7CiYjNDM7CQkJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkJCSAgICYjMzQ7bXFwcmlvOiBmYWlsZWQgdG8gcmVzdG9yZSBzaGFwZXIgZm9yIHR4cSAlZDogJWRcbiYjMzQ7LAomIzQzOwkJCQkgICB0eHEsIGVycik7CiYjNDM7CQkJcmV0dXJuIGVycjsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogUmVzdGFydCB0aGUgbmV0ZGV2IHRvIHJlcHJvZ3JhbSB0aGUgVFggc2NoZWR1bGVyIGhpZXJhcmNoeSBmb3IgbXFwcmlvCiYjNDM7ICogYmFuZHdpZHRoIG9mZmxvYWQuICBCb3RoIG1xcHJpbyBhZGQgYW5kIGRlbGV0ZSAod2hlbiBvZmZsb2FkIHdhcyBhY3RpdmUpCiYjNDM7ICogdGFrZSB0aGlzIHBhdGggdmlhIG5kb19zdG9wKCkvbmRvX29wZW4oKSBzbyBWRi1zcGVjaWZpYyBvcGVuIGxvZ2ljIChlLmcuCiYjNDM7ICogTEJLIGNhcnJpZXIgb24pIHJ1bnMgY29ycmVjdGx5LgomIzQzOyAqCiYjNDM7ICogSW50ZW50aW9uYWwgYmVoYXZpb3VyOiB0aGlzIGZ1bGwgc3RvcC9vcGVuIGN5Y2xlIGRyb3BzIGluLWZsaWdodCB0cmFmZmljCiYjNDM7ICogKGNhcnJpZXIgb2ZmLCBJUlEvTkFQSSB0ZWFyZG93biwgcXVldWUgZHJhaW4pLiAgVGhlIE5JWCBUWCBzY2hlZHVsZXIgbXVzdAomIzQzOyAqIGJlIHJlYWxsb2NhdGVkIChlLmcuIG9uZSBTTVEgcGVyIG5vbi1Rb1MgcXVldWUpIGFuZCBjYW5ub3QgYmUgcmVwcm9ncmFtbWVkCiYjNDM7ICogbGl2ZSB0b2RheSwgc28gYSBuZXRkZXYgYm91bmNlIGlzIHJlcXVpcmVkIG9uIGV2ZXJ5IG1xcHJpbyBhZGQsIHJlcGxhY2UsCiYjNDM7ICogZGVsZXRlLCBhbmQgcm9sbGJhY2suICBVc2VycyBzZWUgYSBicmllZiBjb25uZWN0aXZpdHkgYmxpcDsgdGhpcyBpcyBub3QgYQomIzQzOyAqIGJ1ZyB0byAmIzM0O2ZpeCYjMzQ7IHdpdGhvdXQgaW1wbGVtZW50aW5nIHRoZSBsaXZlLXJlcHJvZ3JhbW1pbmcgcGF0aCBub3RlZCBiZWxvdy4KJiM0MzsgKiBJZiBvcGVuIGZhaWxzLCB0aGUgaW50ZXJmYWNlIGlzIGxlZnQgYWRtaW5pc3RyYXRpdmVseSBkb3duIHdpdGhvdXQgY2FsbGluZwomIzQzOyAqIG5kb19zdG9wKCkgYWdhaW4gb24gcmVzb3VyY2VzIGFscmVhZHkgdG9ybiBkb3duIGJ5IHRoZSBvcGVuIGVycm9yIHBhdGguCiYjNDM7ICoKJiM0MzsgKiBRdWllc2NlIHRoZSB0cmFuc21pdCBwYXRoIGxpa2UgX19kZXZfY2xvc2VfbWFueSgpIGJlZm9yZSBuZG9fc3RvcCgpIHNvCiYjNDM7ICogb3R4Ml94bWl0KCkgY2Fubm90IHJhY2Ugb3R4Ml9mcmVlX3F1ZXVlX21lbSgpLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByYXRlX2xpbWl0KQomIzQzO3sKJiM0MzsJc3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHMgPSBuZXRkZXYtJmd0O25ldGRldl9vcHM7CiYjNDM7CWJvb2wgcnVubmluZyA9IG5ldGlmX3J1bm5pbmcobmV0ZGV2KTsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJLyogVE9ETzogRXhwbG9yZSBsaXZlIFRYIHNjaGVkdWxlciByZXByb2dyYW1taW5nIHRvIGF2b2lkIGEgZnVsbAomIzQzOwkgKiBuZG9fc3RvcCgpL25kb19vcGVuKCkgYm91bmNlIG9uIGV2ZXJ5IG1xcHJpbyBjaGFuZ2UuCiYjNDM7CSAqLwomIzQzOwluZXRkZXZfaW5mbyhuZXRkZXYsCiYjNDM7CQkgICAgJiMzNDttcXByaW86IHJlc3RhcnRpbmcgaW50ZXJmYWNlIHRvIHJlcHJvZ3JhbSBUWCBzY2hlZHVsZXI7IGluLWZsaWdodCB0cmFmZmljIHdpbGwgYmUgZHJvcHBlZFxuJiMzNDspOwomIzQzOwomIzQzOwlpZiAocnVubmluZykgewomIzQzOwkJY2xlYXJfYml0KF9fTElOS19TVEFURV9TVEFSVCwgJmFtcDtuZXRkZXYtJmd0O3N0YXRlKTsKJiM0MzsJCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7IC8qIENvbW1pdCBuZXRpZl9ydW5uaW5nKCkuICovCiYjNDM7CX0KJiM0MzsJZGV2X2RlYWN0aXZhdGUobmV0ZGV2LCB0cnVlKTsKJiM0MzsKJiM0MzsJZXJyID0gb3BzLSZndDtuZG9fc3RvcChuZXRkZXYpOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQlpZiAocnVubmluZykgewomIzQzOwkJCXNldF9iaXQoX19MSU5LX1NUQVRFX1NUQVJULCAmYW1wO25ldGRldi0mZ3Q7c3RhdGUpOwomIzQzOwkJCWRldl9hY3RpdmF0ZShuZXRkZXYpOwomIzQzOwkJfQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBTZXQgYmVmb3JlIG5kb19vcGVuKCkgc28gb3R4Ml90eHNjaF9hbGxvYygpIHdpZGVucyBTTVEgYWxsb2NhdGlvbi4KJiM0MzsJICogT24gdGVhcmRvd24sIGRyb3AgbXFwcmlvIHNvZnR3YXJlIHN0YXRlIHNvIG5kb19vcGVuKCkgZG9lcyBub3QKJiM0MzsJICogcmUtYXBwbHkgYmFuZHdpZHRoIGxpbWl0cyB2aWEgb3R4Ml9tcXByaW9fdXAoKSBhZnRlciB0aGUga2VybmVsCiYjNDM7CSAqIHJlbW92ZWQgdGhlIHFkaXNjLgomIzQzOwkgKi8KJiM0MzsJaWYgKHJhdGVfbGltaXQpCiYjNDM7CQlwZnZmLSZndDttcXByaW8ucmF0ZV9saW1pdCA9IHRydWU7CiYjNDM7CWVsc2UKJiM0MzsJCW90eDJfbXFwcmlvX2NsZWFyX3N3KHBmdmYpOwomIzQzOwomIzQzOwllcnIgPSBvcHMtJmd0O25kb19vcGVuKG5ldGRldik7CiYjNDM7CWlmICghZXJyICZhbXA7JmFtcDsgcnVubmluZykgewomIzQzOwkJc2V0X2JpdChfX0xJTktfU1RBVEVfU1RBUlQsICZhbXA7bmV0ZGV2LSZndDtzdGF0ZSk7CiYjNDM7CQlkZXZfYWN0aXZhdGUobmV0ZGV2KTsKJiM0MzsJfSBlbHNlIGlmIChlcnIpIHsKJiM0MzsJCW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJCSAgICYjMzQ7RmFpbGVkIHRvIHJlc3RhcnQgZGV2aWNlIGFmdGVyIG1xcHJpbyBjaGFuZ2U6ICVkXG4mIzM0OywKJiM0MzsJCQkgICBlcnIpOwomIzQzOwkJLyogbmRvX29wZW4oKSBhbHJlYWR5IGZyZWVkIHRoZSBUWCBzY2hlZHVsZXJzIG9uIGZhaWx1cmUgd2hpbGUKJiM0MzsJCSAqIG5ldGlmX3J1bm5pbmcoKSBtYXkgc3RpbGwgYmUgdHJ1ZTsgZHJvcCBtcXByaW8gc29mdHdhcmUgc3RhdGUKJiM0MzsJCSAqIG9ubHkgaW5zdGVhZCBvZiBzZW5kaW5nIHNoYXBlciBjbGVhcnMgdG8gZnJlZWQgcXVldWVzLgomIzQzOwkJICovCiYjNDM7CQlvdHgyX21xcHJpb19jbGVhcl9zdyhwZnZmKTsKJiM0MzsJCS8qIG5kb19vcGVuKCkgcm9sbHMgYmFjayBvbiBmYWlsdXJlOyBtYXJrIHRoZSBpbnRlcmZhY2UgZG93biBzbwomIzQzOwkJICogbmV0aWZfY2xvc2UoKSBkb2VzIG5vdCBpbnZva2UgbmRvX3N0b3AoKSBvbiBmcmVlZCBOQVBJL3F1ZXVlCiYjNDM7CQkgKiBzdGF0ZS4gQ2FsbGVyIGhvbGRzIFJUTkw7IGRldl9jbG9zZSgpIHdvdWxkIGRlYWRsb2NrLgomIzQzOwkJICovCiYjNDM7CQlvdHgyX3NldF9mbGFnKHBmdmYsIE9UWDJfRkxBR19JTlRGX0RPV04pOwomIzQzOwkJLyogdmlzaWJsZSB0byBvdHgyX3N0b3AoKSBvbiBvdGhlciBjcHVzICovCiYjNDM7CQlzbXBfd21iKCk7CiYjNDM7CQluZXRpZl9jbG9zZShuZXRkZXYpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fdmFsaWRhdGVfdGNfcmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAomIzQzOwkJCQkJc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLAomIzQzOwkJCQkJdTY0IHJhdGUsIHUzMiBxY291bnQsIGludCB0YywKJiM0MzsJCQkJCWNvbnN0IGNoYXIgKm5hbWUpCiYjNDM7ewomIzQzOwlpZiAoIXJhdGUpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKHFjb3VudCAmbHQ7PSAxKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CS8qIFRPRE86IG1xcHJpbyBtaW5fcmF0ZS9tYXhfcmF0ZSBhcmUgcGVyIHRyYWZmaWMgY2xhc3MsIGJ1dCBiYW5kd2lkdGgKJiM0MzsJICogb2ZmbG9hZCBzaGFwZXMgb24gcGVyLXF1ZXVlIE1EUSBub2RlcyBwYXJlbnRlZCB1bmRlciBhIHNpbmdsZSBUTDQuCiYjNDM7CSAqIFdpdGhvdXQgcGVyLVRDIFRMNCBzaGFwZXJzIHRoZSBkcml2ZXIgY2Fubm90IGhvbm9yIFRDLWxldmVsIGxpbWl0cwomIzQzOwkgKiBmb3IgYSB0cmFmZmljIGNsYXNzIHRoYXQgc3BhbnMgbXVsdGlwbGUgcXVldWVzIHdpdGhvdXQgZWl0aGVyCiYjNDM7CSAqIGRpdmlkaW5nIHRoZSByYXRlIGFjcm9zcyBxdWV1ZXMgKHVBUEkgbWlzbWF0Y2gpIG9yIGV4Y2VlZGluZyB0aGUgVEMKJiM0MzsJICogY2FwIHdoZW4gZXZlcnkgbWVtYmVyIHF1ZXVlIGlzIGFjdGl2ZS4gUmVqZWN0IHVudGlsIHBlci1UQyBUTDQKJiM0MzsJICogc2hhcGluZyBjYW4gYmUgaW1wbGVtZW50ZWQgd2l0aG91dCBhbGxvY2F0aW5nIGFkZGl0aW9uYWwgVEw0IG5vZGVzCiYjNDM7CSAqIGJleW9uZCB0aGUgZXhpc3RpbmcgaGllcmFyY2h5LgomIzQzOwkgKi8KJiM0MzsJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkgICAmIzM0O21xcHJpbzogJXMgcmF0ZSBmb3IgdGMgJWQgbm90IHN1cHBvcnRlZCB3aXRoICV1IHF1ZXVlc1xuJiMzNDssCiYjNDM7CQkgICBuYW1lLCB0YywgcWNvdW50KTsKJiM0MzsJTkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssCiYjNDM7CQkJICAgICAgICYjMzQ7bXFwcmlvOiAlcyByYXRlIGZvciB0YyAlZCBub3Qgc3VwcG9ydGVkIHdpdGggJXUgcXVldWVzJiMzNDssCiYjNDM7CQkJICAgICAgIG5hbWUsIHRjLCBxY291bnQpOwomIzQzOwlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fdmFsaWRhdGVfdHhxcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAomIzQzOwkJCQkgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaywKJiM0MzsJCQkJICAgICBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwomIzQzOwl1MTYgbnVtX3R4cSA9IHBmdmYtJmd0O2h3Lm5vbl9xb3NfcXVldWVzOwomIzQzOwlpbnQgdGMsIHR4cTsKJiM0MzsKJiM0MzsJaWYgKHFvcHQtJmd0O251bV90YyAmZ3Q7IG51bV90eHEpIHsKJiM0MzsJCW5ldGRldl9lcnIobmV0ZGV2LCAmIzM0O051bWJlciBvZiBUQ3MgKCV1KSBleGNlZWRzIGh3IHF1ZXVlcyAldVxuJiMzNDssCiYjNDM7CQkJICAgcW9wdC0mZ3Q7bnVtX3RjLCBudW1fdHhxKTsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLAomIzQzOwkJCQkgICAgICAgJiMzNDtOdW1iZXIgb2YgVENzICgldSkgZXhjZWVkcyBodyBxdWV1ZXMgJXUmIzM0OywKJiM0MzsJCQkJICAgICAgIHFvcHQtJmd0O251bV90YywgbnVtX3R4cSk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAobnVtX3R4cSAmZ3Q7IE1BWF9UWFNDSFFfUEVSX0ZVTkMpIHsKJiM0MzsJCW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJCSAgICYjMzQ7TnVtYmVyIG9mIHF1ZXVlcyAoJXUpIGV4Y2VlZHMgbWF4IHNjaGVkdWxlciBxdWV1ZXMgJXVcbiYjMzQ7LAomIzQzOwkJCSAgIG51bV90eHEsIE1BWF9UWFNDSFFfUEVSX0ZVTkMpOwomIzQzOwkJTkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssCiYjNDM7CQkJCSAgICAgICAmIzM0O051bWJlciBvZiBxdWV1ZXMgKCV1KSBleGNlZWRzIG1heCBzY2hlZHVsZXIgcXVldWVzICV1JiMzNDssCiYjNDM7CQkJCSAgICAgICBudW1fdHhxLCBNQVhfVFhTQ0hRX1BFUl9GVU5DKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWZvciAodGMgPSAwOyB0YyAmbHQ7IHFvcHQtJmd0O251bV90YzsgdGMmIzQzOyYjNDM7KSB7CiYjNDM7CQl1MzIgcWNvdW50ID0gcW9wdC0mZ3Q7Y291bnRbdGNdOwomIzQzOwomIzQzOwkJZm9yICh0eHEgPSBxb3B0LSZndDtvZmZzZXRbdGNdOwomIzQzOwkJICAgICB0eHEgJmx0OyBxb3B0LSZndDtvZmZzZXRbdGNdICYjNDM7IHFjb3VudDsgdHhxJiM0MzsmIzQzOykgewomIzQzOwkJCWlmICh0eHEgJmd0Oz0gbnVtX3R4cSkgewomIzQzOwkJCQluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCQkJCSAgICYjMzQ7bXFwcmlvOiB0eHEgJWQgZXhjZWVkcyBvZmZsb2FkIHF1ZXVlIGNvdW50ICV1XG4mIzM0OywKJiM0MzsJCQkJCSAgIHR4cSwgbnVtX3R4cSk7CiYjNDM7CQkJCU5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLAomIzQzOwkJCQkJCSAgICAgICAmIzM0O21xcHJpbzogdHhxICVkIGV4Y2VlZHMgb2ZmbG9hZCBxdWV1ZSBjb3VudCAldSYjMzQ7LAomIzQzOwkJCQkJCSAgICAgICB0eHEsIG51bV90eHEpOwomIzQzOwkJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCQl9CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIG90eDJfbXFwcmlvX3JhdGVfdmFsaWQodTY0IHJhdGVfYnl0ZXNfcHMpCiYjNDM7ewomIzQzOwl1NjQgbWJwczsKJiM0MzsKJiM0MzsJaWYgKCFyYXRlX2J5dGVzX3BzKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CWlmIChyYXRlX2J5dGVzX3BzICZsdDsgT1RYMl9NUVBSSU9fTUlOX1JBVEVfQllURVNfUFMpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlmIChyYXRlX2J5dGVzX3BzICZndDsgT1RYMl9NUVBSSU9fTUFYX1JBVEVfQllURVNfUFMpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlmIChyYXRlX2J5dGVzX3BzICZndDsgZGl2X3U2NChVNjRfTUFYLCA4KSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJbWJwcyA9IG90eDJfY29udmVydF9yYXRlKHJhdGVfYnl0ZXNfcHMpOwomIzQzOwlyZXR1cm4gaWxvZzIobWJwcyAvIDIpICZsdDs9IE1BWF9SQVRFX0VYUE9ORU5UOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwKJiM0MzsJCQkJICAgc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9ICZhbXA7bXFwcmlvLSZndDtxb3B0OwomIzQzOwlib29sIGhhZF9tcXByaW8gPSBwZnZmLSZndDttcXByaW8ucmF0ZV9saW1pdDsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtJmd0O25ldGRldjsKJiM0MzsJYm9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcobmV0ZGV2KTsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJcW9wdC0mZ3Q7aHcgPSAwOwomIzQzOwomIzQzOwkvKiB0YyBxZGlzYyByZXBsYWNlIHJ1bnMgc2V0dXAgb24gdGhlIG5ldyBtcXByaW8gYmVmb3JlIGRlc3Ryb3lpbmcgdGhlCiYjNDM7CSAqIG9sZCBvbmUuIHJlcGxhY2Vfc2V0dXBfZG9uZSBhbmQgVENfUk9PVF9HUkFGVCBkaXN0aW5ndWlzaCBzdGFsZQomIzQzOwkgKiBvbGQtaW5zdGFuY2UgdGVhcmRvd24gZnJvbSBncmFmdCBmYWlsdXJlIGFmdGVyIHNldHVwLgomIzQzOwkgKi8KJiM0MzsJaWYgKHBmdmYtJmd0O21xcHJpby5yZXBsYWNlX3NldHVwX2RvbmUgJmFtcDsmYW1wOyBwZnZmLSZndDtjdXJfbXFfc25hcCkgewomIzQzOwkJZXJyID0gMDsKJiM0MzsJCWlmIChwZnZmLSZndDttcXByaW8ucmVwbGFjZV9ncmFmdF9kb25lKQomIzQzOwkJCW90eDJfbXFwcmlvX3NuYXBfY29tbWl0KHBmdmYpOwomIzQzOwkJZWxzZQomIzQzOwkJCWVyciA9IG90eDJfbXFwcmlvX3Jlc3RvcmVfb2xkKHBmdmYpOwomIzQzOwkJb3R4Ml9tcXByaW9fY2xlYXJfcmVwbGFjZV9zdGF0ZShwZnZmKTsKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogU2tpcCB0aGUgbmV0ZGV2IHJlc3RhcnQgd2hlbiBtcXByaW8gb2ZmbG9hZCB3YXMgbm90IGFjdGl2ZS4gKi8KJiM0MzsJaWYgKCFoYWRfbXFwcmlvKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmIChpZl91cCkgewomIzQzOwkJaW50IGRvd25fZXJyLCBlcnI7CiYjNDM7CiYjNDM7CQlkb3duX2VyciA9IG90eDJfbXFwcmlvX2Rvd24ocGZ2Zik7CiYjNDM7CQllcnIgPSBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihuZXRkZXYsIGZhbHNlKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJcmV0dXJuIGVycjsKJiM0MzsJCXJldHVybiBkb3duX2VycjsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBuZG9fc3RvcCgpIGFscmVhZHkgZnJlZWQgdGhlIFRYIHNjaGVkdWxlciBUTCBub2RlczsgZHJvcCBzb2Z0d2FyZQomIzQzOwkgKiBzdGF0ZSBvbmx5LgomIzQzOwkgKi8KJiM0MzsJb3R4Ml9tcXByaW9fY2xlYXJfc3cocGZ2Zik7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfbXFwcmlvKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiYjNDM7CQkJCXN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2sgPSBtcXByaW8tJmd0O2V4dGFjazsKJiM0MzsJc3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJc3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0ID0gJmFtcDttcXByaW8tJmd0O3FvcHQ7CiYjNDM7CWJvb2wgcmVwbGFjaW5nID0gcGZ2Zi0mZ3Q7bXFwcmlvLnJhdGVfbGltaXQ7CiYjNDM7CWJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKG5ldGRldik7CiYjNDM7CWludCB0YywgdHhxLCBlcnIsIGk7CiYjNDM7CiYjNDM7CWlmICghcW9wdC0mZ3Q7aHcpCiYjNDM7CQlyZXR1cm4gb3R4Ml90ZWFyZG93bl90Y19tcXByaW8ocGZ2ZiwgbXFwcmlvKTsKJiM0MzsKJiM0MzsJaWYgKCFpZl91cCkgewomIzQzOwkJbmV0ZGV2X2VycihuZXRkZXYsICYjMzQ7bXFwcmlvOiBzZXR1cCByZXF1aXJlcyBpbnRlcmZhY2UgVVBcbiYjMzQ7KTsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssICYjMzQ7bXFwcmlvOiBzZXR1cCByZXF1aXJlcyBpbnRlcmZhY2UgVVAmIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKG1xcHJpby0mZ3Q7c2hhcGVyICE9IFRDX01RUFJJT19TSEFQRVJfQldfUkFURSkgewomIzQzOwkJbmV0ZGV2X2VycihuZXRkZXYsICYjMzQ7VW5zdXBwb3J0ZWQgbXFwcmlvIHNoYXBlciAlI3hcbiYjMzQ7LCBtcXByaW8tJmd0O3NoYXBlcik7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjaywgJiMzNDtVbnN1cHBvcnRlZCBtcXByaW8gc2hhcGVyICUjeCYjMzQ7LAomIzQzOwkJCQkgICAgICAgbXFwcmlvLSZndDtzaGFwZXIpOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghdGVzdF9iaXQoUU9TX0NJUl9QSVJfU1VQUE9SVCwgJmFtcDtwZnZmLSZndDtody5jYXBfZmxhZykpIHsKJiM0MzsJCW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJCSAgICYjMzQ7bXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCByZXF1aXJlcyBDSVImIzQzO1BJUiBzdXBwb3J0XG4mIzM0Oyk7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLAomIzQzOwkJCQkgICAmIzM0O21xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgcmVxdWlyZXMgQ0lSJiM0MztQSVIgc3VwcG9ydCYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoaXNfb3R4Ml9zZHBfcmVwKHBmdmYtJmd0O3BkZXYpKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwgJiMzNDttcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIG5vdCBzdXBwb3J0ZWQgb24gU0RQIHJlcFxuJiMzNDspOwomIzQzOwkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywKJiM0MzsJCQkJICAgJiMzNDttcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIG5vdCBzdXBwb3J0ZWQgb24gU0RQIHJlcCYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAocGZ2Zi0mZ3Q7cGZjX2VuKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCQkgICAmIzM0O21xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFBGQyBpcyBlbmFibGVkXG4mIzM0Oyk7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLAomIzQzOwkJCQkgICAmIzM0O21xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFBGQyBpcyBlbmFibGVkJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChwZnZmLSZndDt4ZHBfcHJvZykgewomIzQzOwkJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkJICAgJiMzNDttcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBYRFAgaXMgYWN0aXZlXG4mIzM0Oyk7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLAomIzQzOwkJCQkgICAmIzM0O21xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFhEUCBpcyBhY3RpdmUmIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFsaXN0X2VtcHR5KCZhbXA7cGZ2Zi0mZ3Q7cW9zLnFvc190cmVlKSkgewomIzQzOwkJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkJICAgJiMzNDttcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBIVEIgaXMgYWN0aXZlXG4mIzM0Oyk7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLAomIzQzOwkJCQkgICAmIzM0O21xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIEhUQiBpcyBhY3RpdmUmIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZm9yICh0YyA9IDA7IHRjICZsdDsgcW9wdC0mZ3Q7bnVtX3RjOyB0YyYjNDM7JiM0MzspIHsKJiM0MzsJCXU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDsKJiM0MzsJCXUzMiBxY291bnQgPSBxb3B0LSZndDtjb3VudFt0Y107CiYjNDM7CiYjNDM7CQlpZiAobXFwcmlvLSZndDtmbGFncyAmYW1wOyBUQ19NUVBSSU9fRl9NSU5fUkFURSkKJiM0MzsJCQltaW5fcmF0ZSA9IG1xcHJpby0mZ3Q7bWluX3JhdGVbdGNdOwomIzQzOwkJaWYgKG1xcHJpby0mZ3Q7ZmxhZ3MgJmFtcDsgVENfTVFQUklPX0ZfTUFYX1JBVEUpCiYjNDM7CQkJbWF4X3JhdGUgPSBtcXByaW8tJmd0O21heF9yYXRlW3RjXTsKJiM0MzsKJiM0MzsJCWlmIChtaW5fcmF0ZSAmYW1wOyZhbXA7IG1heF9yYXRlICZhbXA7JmFtcDsgbWluX3JhdGUgJmd0OyBtYXhfcmF0ZSkgewomIzQzOwkJCW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJCQkgICAmIzM0O21pbl9yYXRlICVsbHUgZXhjZWVkcyBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZFxuJiMzNDssCiYjNDM7CQkJCSAgIG1pbl9yYXRlLCBtYXhfcmF0ZSwgdGMpOwomIzQzOwkJCU5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLAomIzQzOwkJCQkJICAgICAgICYjMzQ7bWluX3JhdGUgJWxsdSBleGNlZWRzIG1heF9yYXRlICVsbHUgZm9yIHRjICVkJiMzNDssCiYjNDM7CQkJCQkgICAgICAgbWluX3JhdGUsIG1heF9yYXRlLCB0Yyk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAobXFwcmlvLSZndDtmbGFncyAmYW1wOyBUQ19NUVBSSU9fRl9NSU5fUkFURSkgewomIzQzOwkJCWVyciA9IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3RjX3JhdGUobmV0ZGV2LCBleHRhY2ssIG1pbl9yYXRlLAomIzQzOwkJCQkJCQkgICBxY291bnQsIHRjLCAmIzM0O21pbiYjMzQ7KTsKJiM0MzsJCQlpZiAoZXJyKQomIzQzOwkJCQlyZXR1cm4gZXJyOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKG1xcHJpby0mZ3Q7ZmxhZ3MgJmFtcDsgVENfTVFQUklPX0ZfTUFYX1JBVEUpIHsKJiM0MzsJCQllcnIgPSBvdHgyX21xcHJpb192YWxpZGF0ZV90Y19yYXRlKG5ldGRldiwgZXh0YWNrLCBtYXhfcmF0ZSwKJiM0MzsJCQkJCQkJICAgcWNvdW50LCB0YywgJiMzNDttYXgmIzM0Oyk7CiYjNDM7CQkJaWYgKGVycikKJiM0MzsJCQkJcmV0dXJuIGVycjsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmIChtcXByaW8tJmd0O2ZsYWdzICZhbXA7IFRDX01RUFJJT19GX01JTl9SQVRFICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhb3R4Ml9tcXByaW9fcmF0ZV92YWxpZChtaW5fcmF0ZSkpIHsKJiM0MzsJCQluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCQkJICAgJiMzNDttcXByaW86IG1pbl9yYXRlICVsbHUgZm9yIHRjICVkIGlzIG91dHNpZGUgaGFyZHdhcmUgbGltaXRzXG4mIzM0OywKJiM0MzsJCQkJICAgbWluX3JhdGUsIHRjKTsKJiM0MzsJCQlOTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjaywKJiM0MzsJCQkJCSAgICAgICAmIzM0O21xcHJpbzogbWluX3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHMmIzM0OywKJiM0MzsJCQkJCSAgICAgICBtaW5fcmF0ZSwgdGMpOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKG1xcHJpby0mZ3Q7ZmxhZ3MgJmFtcDsgVENfTVFQUklPX0ZfTUFYX1JBVEUgJmFtcDsmYW1wOwomIzQzOwkJICAgICFvdHgyX21xcHJpb19yYXRlX3ZhbGlkKG1heF9yYXRlKSkgewomIzQzOwkJCW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJCQkgICAmIzM0O21xcHJpbzogbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcbiYjMzQ7LAomIzQzOwkJCQkgICBtYXhfcmF0ZSwgdGMpOwomIzQzOwkJCU5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLAomIzQzOwkJCQkJICAgICAgICYjMzQ7bXFwcmlvOiBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZCBpcyBvdXRzaWRlIGhhcmR3YXJlIGxpbWl0cyYjMzQ7LAomIzQzOwkJCQkJICAgICAgIG1heF9yYXRlLCB0Yyk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJZXJyID0gb3R4Ml9tcXByaW9fdmFsaWRhdGVfdHhxcyhuZXRkZXYsIGV4dGFjaywgcW9wdCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwllcnIgPSBvdHgyX21xcHJpb19zdGFnZV9jdXIocGZ2ZiwgbXFwcmlvKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CWVyciA9IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KHBmdmYtJmd0O25ldGRldiwgdHJ1ZSk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CWVyciA9IG90eDJfbXFwcmlvX2FsbG9jX2NhY2hlKHBmdmYsIHJlcGxhY2luZyk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CS8qIG90eDJfbXFwcmlvX3VwKCkgbWF5IGhhdmUgcmVzdG9yZWQgdGhlIHByZXZpb3VzIGNvbmZpZ3VyYXRpb24gZHVyaW5nCiYjNDM7CSAqIHRoZSByZXN0YXJ0IGFib3ZlLiBDbGVhciBldmVyeSBNRFEgc2hhcGVyIGJlZm9yZSBhcHBseWluZyB0aGUgbmV3CiYjNDM7CSAqIG1hcHBpbmcgc28gcXVldWVzIGRyb3BwZWQgZnJvbSB0aGUgVEMgbGF5b3V0IGRvIG5vdCBrZWVwIHN0YWxlCiYjNDM7CSAqIGxpbWl0cyBpbiBoYXJkd2FyZS4KJiM0MzsJICovCiYjNDM7CWlmIChvdHgyX21xcHJpb19tZHFfYWxsb2NhdGVkKHBmdmYpKSB7CiYjNDM7CQllcnIgPSBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIocGZ2Zik7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCWdvdG8gY2xlYW51cDsKJiM0MzsJfQomIzQzOwomIzQzOwlwZnZmLSZndDttcXByaW8uZmxhZ3MgPSBtcXByaW8tJmd0O2ZsYWdzOwomIzQzOwomIzQzOwlmb3IgKHRjID0gMDsgdGMgJmx0OyBxb3B0LSZndDtudW1fdGM7IHRjJiM0MzsmIzQzOykgewomIzQzOwkJdTY0IG1pbl9yYXRlID0gMCwgbWF4X3JhdGUgPSAwOwomIzQzOwkJdTMyIHFjb3VudCA9IHFvcHQtJmd0O2NvdW50W3RjXTsKJiM0MzsKJiM0MzsJCS8qIFJhdGVzIG9taXR0ZWQgZnJvbSB0YyBtcXByaW8gYXJlIHBhc3NlZCBhcyB6ZXJvIGFuZCBib3RoIE1EUQomIzQzOwkJICogc2hhcGVyIHJlZ2lzdGVycyBhcmUgcHJvZ3JhbW1lZDsgc2VlCiYjNDM7CQkgKiBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKCkuIE11bHRpLXF1ZXVlIFRDcyB3aXRoIHJhdGVzCiYjNDM7CQkgKiBhcmUgcmVqZWN0ZWQgYWJvdmUuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChtcXByaW8tJmd0O2ZsYWdzICZhbXA7IFRDX01RUFJJT19GX01JTl9SQVRFKQomIzQzOwkJCW1pbl9yYXRlID0gbXFwcmlvLSZndDttaW5fcmF0ZVt0Y107CiYjNDM7CQlpZiAobXFwcmlvLSZndDtmbGFncyAmYW1wOyBUQ19NUVBSSU9fRl9NQVhfUkFURSkKJiM0MzsJCQltYXhfcmF0ZSA9IG1xcHJpby0mZ3Q7bWF4X3JhdGVbdGNdOwomIzQzOwomIzQzOwkJZm9yICh0eHEgPSBxb3B0LSZndDtvZmZzZXRbdGNdOwomIzQzOwkJICAgICB0eHEgJmx0OyBxb3B0LSZndDtvZmZzZXRbdGNdICYjNDM7IHFjb3VudDsgdHhxJiM0MzsmIzQzOykgewomIzQzOwkJCW5ldGRldl9kYmcobmV0ZGV2LAomIzQzOwkJCQkgICAmIzM0O21xcHJpbzogdGMgJWQgdHhxICVkIG1pbl9yYXRlICVsbHUgbWF4X3JhdGUgJWxsdVxuJiMzNDssCiYjNDM7CQkJCSAgIHRjLCB0eHEsIG1pbl9yYXRlLCBtYXhfcmF0ZSk7CiYjNDM7CiYjNDM7CQkJcGZ2Zi0mZ3Q7bXFwcmlvLm1pbl9yYXRlW3R4cV0gPSBtaW5fcmF0ZTsKJiM0MzsJCQlwZnZmLSZndDttcXByaW8ubWF4X3JhdGVbdHhxXSA9IG1heF9yYXRlOwomIzQzOwomIzQzOwkJCWVyciA9IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIocGZ2ZiwgdHhxLAomIzQzOwkJCQkJCQkgICBtaW5fcmF0ZSwgbWF4X3JhdGUpOwomIzQzOwkJCWlmIChlcnIpCiYjNDM7CQkJCWdvdG8gY2xlYW51cDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwluZXRkZXZfc2V0X251bV90YyhuZXRkZXYsIHBmdmYtJmd0O2N1cl9tcV9zbmFwLSZndDtudW1fdGMpOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgcGZ2Zi0mZ3Q7Y3VyX21xX3NuYXAtJmd0O251bV90YzsgaSYjNDM7JiM0MzspCiYjNDM7CQluZXRkZXZfc2V0X3RjX3F1ZXVlKG5ldGRldiwgaSwgcGZ2Zi0mZ3Q7Y3VyX21xX3NuYXAtJmd0O2NvdW50W2ldLAomIzQzOwkJCQkgICAgcW9wdC0mZ3Q7b2Zmc2V0W2ldKTsKJiM0MzsKJiM0MzsJcW9wdC0mZ3Q7aHcgPSBUQ19NUVBSSU9fSFdfT0ZGTE9BRF9UQ1M7CiYjNDM7CiYjNDM7CWlmIChyZXBsYWNpbmcpIHsKJiM0MzsJCXBmdmYtJmd0O21xcHJpby5yZXBsYWNlX3NldHVwX2RvbmUgPSB0cnVlOwomIzQzOwkJcGZ2Zi0mZ3Q7bXFwcmlvLnJlcGxhY2VfZ3JhZnRfZG9uZSA9IGZhbHNlOwomIzQzOwl9IGVsc2UgewomIzQzOwkJb3R4Ml9tcXByaW9fc25hcF9jb21taXQocGZ2Zik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7Y2xlYW51cDoKJiM0MzsJcW9wdC0mZ3Q7aHcgPSAwOwomIzQzOwlpZiAocmVwbGFjaW5nKSB7CiYjNDM7CQlpbnQgcmVzdG9yZV9lcnIgPSBvdHgyX21xcHJpb19yZXN0b3JlX29sZChwZnZmKTsKJiM0MzsKJiM0MzsJCW90eDJfbXFwcmlvX2NsZWFyX3JlcGxhY2Vfc3RhdGUocGZ2Zik7CiYjNDM7CQlpZiAocmVzdG9yZV9lcnIpIHsKJiM0MzsJCQluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCQkJICAgJiMzNDttcXByaW86IHJlcGxhY2UgZmFpbGVkIGFuZCBwcmlvciBjb25maWd1cmF0aW9uIHJvbGxiYWNrIGZhaWxlZDogJWRcbiYjMzQ7LAomIzQzOwkJCQkgICByZXN0b3JlX2Vycik7CiYjNDM7CQkJaWYgKGV4dGFjaykKJiM0MzsJCQkJTkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssCiYjNDM7CQkJCQkJICAgICAgICYjMzQ7bXFwcmlvOiByZXBsYWNlIGZhaWxlZCBhbmQgcHJpb3IgY29uZmlndXJhdGlvbiByb2xsYmFjayBmYWlsZWQ6ICVkJiMzNDssCiYjNDM7CQkJCQkJICAgICAgIHJlc3RvcmVfZXJyKTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkJCSAgICYjMzQ7bXFwcmlvOiByZXBsYWNlIGZhaWxlZDsgcHJpb3IgY29uZmlndXJhdGlvbiByZXN0b3JlZFxuJiMzNDspOwomIzQzOwkJCWlmIChleHRhY2spCiYjNDM7CQkJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssCiYjNDM7CQkJCQkJICAgJiMzNDttcXByaW86IHJlcGxhY2UgZmFpbGVkOyBwcmlvciBjb25maWd1cmF0aW9uIHJlc3RvcmVkJiMzNDspOwomIzQzOwkJfQomIzQzOwkJcmV0dXJuIGVyciA/IGVyciA6IC1FSU87CiYjNDM7CX0KJiM0MzsJb3R4Ml90ZWFyZG93bl90Y19tcXByaW8ocGZ2ZiwgbXFwcmlvKTsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBvdHgyX3NldHVwX3RjX3Jvb3Qoc3RydWN0IG90eDJfbmljICpwZnZmLAomIzQzOwkJCSAgICAgIHN0cnVjdCB0Y19yb290X3FvcHRfb2ZmbG9hZCAqcm9vdCkKJiM0Mzt7CiYjNDM7CXN3aXRjaCAocm9vdC0mZ3Q7Y29tbWFuZCkgewomIzQzOwljYXNlIFRDX1JPT1RfR1JBRlQ6CiYjNDM7CQlpZiAocGZ2Zi0mZ3Q7bXFwcmlvLnJlcGxhY2Vfc2V0dXBfZG9uZSkKJiM0MzsJCQlwZnZmLSZndDttcXByaW8ucmVwbGFjZV9ncmFmdF9kb25lID0gdHJ1ZTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19xdWVyeV9jYXBzKHZvaWQgKnR5cGVfZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0Y19xdWVyeV9jYXBzX2Jhc2UgKmJhc2UgPSB0eXBlX2RhdGE7CiYjNDM7CXN0cnVjdCB0Y19tcXByaW9fY2FwcyAqY2FwczsKJiM0MzsKJiM0MzsJaWYgKGJhc2UtJmd0O3R5cGUgIT0gVENfU0VUVVBfUURJU0NfTVFQUklPKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwljYXBzID0gYmFzZS0mZ3Q7Y2FwczsKJiM0MzsJY2Fwcy0mZ3Q7dmFsaWRhdGVfcXVldWVfY291bnRzID0gdHJ1ZTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogaW50IG90eDJfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsCiAJCSAgdm9pZCAqdHlwZV9kYXRhKQogewogCXN3aXRjaCAodHlwZSkgewomIzQzOwljYXNlIFRDX1FVRVJZX0NBUFM6CiYjNDM7CQlyZXR1cm4gb3R4Ml9zZXR1cF90Y19xdWVyeV9jYXBzKHR5cGVfZGF0YSk7CiAJY2FzZSBUQ19TRVRVUF9CTE9DSzoKIAkJcmV0dXJuIG90eDJfc2V0dXBfdGNfYmxvY2sobmV0ZGV2LCB0eXBlX2RhdGEpOwogCWNhc2UgVENfU0VUVVBfUURJU0NfSFRCOgogCQlyZXR1cm4gb3R4Ml9zZXR1cF90Y19odGIobmV0ZGV2LCB0eXBlX2RhdGEpOwomIzQzOwljYXNlIFRDX1NFVFVQX1FESVNDX01RUFJJTzoKJiM0MzsJCXJldHVybiBvdHgyX3NldHVwX3RjX21xcHJpbyhuZXRkZXYsIHR5cGVfZGF0YSk7CiYjNDM7CWNhc2UgVENfU0VUVVBfUk9PVF9RRElTQzoKJiM0MzsJCXJldHVybiBvdHgyX3NldHVwX3RjX3Jvb3QobmV0ZGV2X3ByaXYobmV0ZGV2KSwgdHlwZV9kYXRhKTsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQpAQCAtMTYzMiw2ICYjNDM7MjM3Nyw3IEBAIEVYUE9SVF9TWU1CT0wob3R4Ml9pbml0X3RjKTsKIHZvaWQgb3R4Ml9zaHV0ZG93bl90YyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYykKIHsKIAlvdHgyX2Rlc3Ryb3lfdGNfZmxvd19saXN0KG5pYyk7CiYjNDM7CW90eDJfbXFwcmlvX3NuYXBfZGVzdHJveShuaWMpOwogfQogRVhQT1JUX1NZTUJPTChvdHgyX3NodXRkb3duX3RjKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdHhyeC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdHhyeC5jCmluZGV4IDhkMmQ2MDdiYzkyZjkuLmY2NWJhNDRkYjYwYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3R4cnguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90eHJ4LmMKQEAgLTE3MSw3ICYjNDM7MTcxLDcgQEAgc3RhdGljIHZvaWQgb3R4Ml9zZXRfcnh0c3RhbXAoc3RydWN0IG90eDJfbmljICpwZnZmLAogCXU2NCB0aW1lc3RhbXAsIHRzbnM7CiAJaW50IGVycjsKIAotCWlmICghKHBmdmYtJmd0O2ZsYWdzICZhbXA7IE9UWDJfRkxBR19SWF9UU1RBTVBfRU5BQkxFRCkpCiYjNDM7CWlmICghb3R4Ml90ZXN0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1JYX1RTVEFNUF9FTkFCTEVEKSkKIAkJcmV0dXJuOwogCiAJdGltZXN0YW1wID0gcGZ2Zi0mZ3Q7cHRwLSZndDtjb252ZXJ0X3J4X3B0cF90c3RtcCgqKHU2NCAqKWRhdGEpOwpAQCAtMzc0LDEzICYjNDM7Mzc0LDEzIEBAIHN0YXRpYyB2b2lkIG90eDJfcmN2X3BrdF9oYW5kbGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwKIAl9CiAJb3R4Ml9zZXRfcnhoYXNoKHBmdmYsIGNxZSwgc2tiKTsKIAotCWlmICghKHBmdmYtJmd0O2ZsYWdzICZhbXA7IE9UWDJfRkxBR19SRVBfTU9ERV9FTkFCTEVEKSkgewomIzQzOwlpZiAoIW90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19SRVBfTU9ERV9FTkFCTEVEKSkgewogCQlza2JfcmVjb3JkX3J4X3F1ZXVlKHNrYiwgY3EtJmd0O2NxX2lkeCk7CiAJCWlmIChwZnZmLSZndDtuZXRkZXYtJmd0O2ZlYXR1cmVzICZhbXA7IE5FVElGX0ZfUlhDU1VNKQogCQkJc2tiLSZndDtpcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKIAl9CiAKLQlpZiAocGZ2Zi0mZ3Q7ZmxhZ3MgJmFtcDsgT1RYMl9GTEFHX1RDX01BUktfRU5BQkxFRCkKJiM0MzsJaWYgKG90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19UQ19NQVJLX0VOQUJMRUQpKQogCQlza2ItJmd0O21hcmsgPSBwYXJzZS0mZ3Q7bWF0Y2hfaWQ7CiAKIAlza2JfbWFya19mb3JfcmVjeWNsZShza2IpOwpAQCAtNTEzLDcgJiM0Mzs1MTMsNyBAQCBzdGF0aWMgaW50IG90eDJfdHhfbmFwaV9oYW5kbGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwKIAkJICAgICAoKHU2NCljcS0mZ3Q7Y3FfaWR4ICZsdDsmbHQ7IDMyKSB8IHByb2Nlc3NlZF9jcWUpOwogCiAjaWYgSVNfRU5BQkxFRChDT05GSUdfUlZVX0VTV0lUQ0gpCi0JaWYgKHBmdmYtJmd0O2ZsYWdzICZhbXA7IE9UWDJfRkxBR19SRVBfTU9ERV9FTkFCTEVEKQomIzQzOwlpZiAob3R4Ml90ZXN0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1JFUF9NT0RFX0VOQUJMRUQpKQogCQluZGV2ID0gcGZ2Zi0mZ3Q7cmVwc1txaWR4XS0mZ3Q7bmV0ZGV2OwogCWVsc2UKICNlbmRpZgpAQCAtNTI2LDcgJiM0Mzs1MjYsNyBAQCBzdGF0aWMgaW50IG90eDJfdHhfbmFwaV9oYW5kbGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwKIAogCQlpZiAocWlkeCAmZ3Q7PSBwZnZmLSZndDtody50eF9xdWV1ZXMpCiAJCQlxaWR4IC09IHBmdmYtJmd0O2h3LnhkcF9xdWV1ZXM7Ci0JCWlmIChwZnZmLSZndDtmbGFncyAmYW1wOyBPVFgyX0ZMQUdfUkVQX01PREVfRU5BQkxFRCkKJiM0MzsJCWlmIChvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfUkVQX01PREVfRU5BQkxFRCkpCiAJCQlxaWR4ID0gMDsKIAkJdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShuZGV2LCBxaWR4KTsKIAkJbmV0ZGV2X3R4X2NvbXBsZXRlZF9xdWV1ZSh0eHEsIHR4X3BrdHMsIHR4X2J5dGVzKTsKQEAgLTU5OSwxMSAmIzQzOzU5OSwxMSBAQCBpbnQgb3R4Ml9uYXBpX2hhbmRsZXIoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQogCiAJaWYgKHdvcmtkb25lICZsdDsgYnVkZ2V0ICZhbXA7JmFtcDsgbmFwaV9jb21wbGV0ZV9kb25lKG5hcGksIHdvcmtkb25lKSkgewogCQkvKiBJZiBpbnRlcmZhY2UgaXMgZ29pbmcgZG93biwgZG9uJiMzOTt0IHJlLWVuYWJsZSBJUlEgKi8KLQkJaWYgKHBmdmYtJmd0O2ZsYWdzICZhbXA7IE9UWDJfRkxBR19JTlRGX0RPV04pCiYjNDM7CQlpZiAob3R4Ml90ZXN0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX0lOVEZfRE9XTikpCiAJCQlyZXR1cm4gd29ya2RvbmU7CiAKIAkJLyogQWRqdXN0IGlycSBjb2FsZXNlIHVzaW5nIG5ldF9kaW0gKi8KLQkJaWYgKHBmdmYtJmd0O2ZsYWdzICZhbXA7IE9UWDJfRkxBR19BRFBUVl9JTlRfQ09BTF9FTkFCTEVEKQomIzQzOwkJaWYgKG90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19BRFBUVl9JTlRfQ09BTF9FTkFCTEVEKSkKIAkJCW90eDJfYWRqdXN0X2FkYXB0aXZlX2NvYWxlc2UocGZ2ZiwgY3FfcG9sbCk7CiAKIAkJaWYgKGxpa2VseShjcSkpCkBAIC0xMTM3LDcgJiM0MzsxMTM3LDcgQEAgc3RhdGljIHZvaWQgb3R4Ml9zZXRfdHh0c3RhbXAoc3RydWN0IG90eDJfbmljICpwZnZmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCiAJaWYgKHVubGlrZWx5KCFza2Jfc2hpbmZvKHNrYiktJmd0O2dzb19zaXplICZhbXA7JmFtcDsKIAkJICAgICAoc2tiX3NoaW5mbyhza2IpLSZndDt0eF9mbGFncyAmYW1wOyBTS0JUWF9IV19UU1RBTVApKSkgewotCQlpZiAodW5saWtlbHkocGZ2Zi0mZ3Q7ZmxhZ3MgJmFtcDsgT1RYMl9GTEFHX1BUUF9PTkVTVEVQX1NZTkMgJmFtcDsmYW1wOwomIzQzOwkJaWYgKHVubGlrZWx5KG90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19QVFBfT05FU1RFUF9TWU5DKSAmYW1wOyZhbXA7CiAJCQkgICAgIG90eDJfcHRwX2lzX3N5bmMoc2tiLCAmYW1wO3B0cF9vZmZzZXQsICZhbXA7dWRwX2NzdW1fY3J0KSkpIHsKIAkJCW9yaWdpbl90c3RhbXAgPSAoc3RydWN0IHB0cHYyX3RzdGFtcCAqKQogCQkJCQkoKHU4ICopc2tiLSZndDtkYXRhICYjNDM7IHB0cF9vZmZzZXQgJiM0MzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml92Zi5jCmluZGV4IGY3NzY1ZTE5ZDc4YTkuLjVmNzkxNTIzMWNhM2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdmYuYwpAQCAtNjEwLDcgJiM0Mzs2MTAsNyBAQCBzdGF0aWMgaW50IG90eDJ2Zl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQogCXZmLSZndDtkZXYgPSBkZXY7CiAJdmYtJmd0O2lvbW11X2RvbWFpbiA9IGlvbW11X2dldF9kb21haW5fZm9yX2RldihkZXYpOwogCi0JdmYtJmd0O2ZsYWdzIHw9IE9UWDJfRkxBR19JTlRGX0RPV047CiYjNDM7CW90eDJfc2V0X2ZsYWcodmYsIE9UWDJfRkxBR19JTlRGX0RPV04pOwogCWh3ID0gJmFtcDt2Zi0mZ3Q7aHc7CiAJaHctJmd0O3BkZXYgPSB2Zi0mZ3Q7cGRldjsKIAlody0mZ3Q7cnhfcXVldWVzID0gcWNvdW50OwpAQCAtODI0LDEwICYjNDM7ODI0LDEwIEBAIHN0YXRpYyB2b2lkIG90eDJ2Zl9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiAJdmYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCiAJLyogRGlzYWJsZSA4MDIuM3ggcGF1c2UgZnJhbWVzICovCi0JaWYgKHZmLSZndDtmbGFncyAmYW1wOyBPVFgyX0ZMQUdfUlhfUEFVU0VfRU5BQkxFRCB8fAotCSAgICAodmYtJmd0O2ZsYWdzICZhbXA7IE9UWDJfRkxBR19UWF9QQVVTRV9FTkFCTEVEKSkgewotCQl2Zi0mZ3Q7ZmxhZ3MgJmFtcDs9IH5PVFgyX0ZMQUdfUlhfUEFVU0VfRU5BQkxFRDsKLQkJdmYtJmd0O2ZsYWdzICZhbXA7PSB+T1RYMl9GTEFHX1RYX1BBVVNFX0VOQUJMRUQ7CiYjNDM7CWlmIChvdHgyX3Rlc3RfZmxhZyh2ZiwgT1RYMl9GTEFHX1JYX1BBVVNFX0VOQUJMRUQpIHx8CiYjNDM7CSAgICBvdHgyX3Rlc3RfZmxhZyh2ZiwgT1RYMl9GTEFHX1RYX1BBVVNFX0VOQUJMRUQpKSB7CiYjNDM7CQlvdHgyX2NsZWFyX2ZsYWcodmYsIE9UWDJfRkxBR19SWF9QQVVTRV9FTkFCTEVEKTsKJiM0MzsJCW90eDJfY2xlYXJfZmxhZyh2ZiwgT1RYMl9GTEFHX1RYX1BBVVNFX0VOQUJMRUQpOwogCQlvdHgyX2NvbmZpZ19wYXVzZV9mcm0odmYpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfeHNrLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml94c2suYwppbmRleCAwZThhNmE2NDg2YzRhLi43ODA4NTg4YTAyMzRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml94c2suYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml94c2suYwpAQCAtOTYsNyAmIzQzOzk2LDcgQEAgc3RhdGljIHZvaWQgb3R4Ml9jbGVhbl91cF9ycShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBxaWR4KQogCXU2NCBpb3ZhOwogCiAJLyogSWYgdGhlIERPV04gZmxhZyBpcyBzZXQgU1FzIGFyZSBhbHJlYWR5IGZyZWVkICovCi0JaWYgKHBmdmYtJmd0O2ZsYWdzICZhbXA7IE9UWDJfRkxBR19JTlRGX0RPV04pCiYjNDM7CWlmIChvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfSU5URl9ET1dOKSkKIAkJcmV0dXJuOwogCiAJY3EgPSAmYW1wO3FzZXQtJmd0O2NxW3FpZHhdOwpAQCAtMTcyLDcgJiM0MzsxNzIsNyBAQCBpbnQgb3R4Ml94c2tfd2FrZXVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBxdWV1ZV9pZCwgdTMyIGZsYWdzKQogCXN0cnVjdCBvdHgyX2NxX3BvbGwgKmNxX3BvbGwgPSBOVUxMOwogCXN0cnVjdCBvdHgyX3FzZXQgKnFzZXQgPSAmYW1wO3BmLSZndDtxc2V0OwogCi0JaWYgKHBmLSZndDtmbGFncyAmYW1wOyBPVFgyX0ZMQUdfSU5URl9ET1dOKQomIzQzOwlpZiAob3R4Ml90ZXN0X2ZsYWcocGYsIE9UWDJfRkxBR19JTlRGX0RPV04pKQogCQlyZXR1cm4gLUVORVRET1dOOwogCiAJaWYgKHF1ZXVlX2lkICZndDs9IHBmLSZndDtody5yeF9xdWV1ZXMgfHwgcXVldWVfaWQgJmd0Oz0gcGYtJmd0O2h3LnR4X3F1ZXVlcykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuYwppbmRleCBmMTYwYjE2MThlZmEyLi45ZWY1NWE2ZGI1MGI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jCkBAIC0xMTgsNiAmIzQzOzExOCw5IEBAIHN0YXRpYyB2b2lkIG90eDJfY29uZmlnX3NjaGVkX3NoYXBpbmcoc3RydWN0IG90eDJfbmljICpwZnZmLAogCS8qIGNvbmZpZ3VyZSBQSVIgKi8KIAltYXhyYXRlID0gKG5vZGUtJmd0O3JhdGUgJmd0OyBub2RlLSZndDtjZWlsKSA/IG5vZGUtJmd0O3JhdGUgOiBub2RlLSZndDtjZWlsOwogCiYjNDM7CS8qIDY1NTM2IGlzIHRoZSBrZXJuZWwtc2lkZSBkZWZhdWx0IGJ1cnN0IHdoZW4gSFRCIGRvZXMgbm90IHN1cHBseSBhbgomIzQzOwkgKiBleHBsaWNpdCB2YWx1ZSwgbm90IHRoZSBOSVggaGFyZHdhcmUgbWF4aW11bSAoQ04xMEtfTUFYX0JVUlNUX1NJWkUpLgomIzQzOwkgKi8KIAljZmctJmd0O3JlZ3ZhbFsqbnVtX3JlZ3NdID0KIAkJb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIG1heHJhdGUsIDY1NTM2KTsKIAkoKm51bV9yZWdzKSYjNDM7JiM0Mzs7CkBAIC0xMDg4LDYgJiM0MzsxMDkxLDE0IEBAIHN0YXRpYyBpbnQgb3R4Ml9xb3Nfcm9vdF9hZGQoc3RydWN0IG90eDJfbmljICpwZnZmLCB1MTYgaHRiX21hal9pZCwgdTE2IGh0Yl9kZWZjCiAJCSAgICYjMzQ7VENfSFRCX0NSRUFURTogaGFuZGxlPTB4JXggZGVmY2xzPTB4JXhcbiYjMzQ7LAogCQkgICBodGJfbWFqX2lkLCBodGJfZGVmY2xzKTsKIAomIzQzOwlpZiAocGZ2Zi0mZ3Q7bXFwcmlvLnJhdGVfbGltaXQpIHsKJiM0MzsJCW5ldGRldl9lcnIocGZ2Zi0mZ3Q7bmV0ZGV2LAomIzQzOwkJCSAgICYjMzQ7SFRCOiBjYW5ub3QgZW5hYmxlIHdoaWxlIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBpcyBhY3RpdmVcbiYjMzQ7KTsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssCiYjNDM7CQkJCSAgICYjMzQ7SFRCOiBjYW5ub3QgZW5hYmxlIHdoaWxlIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBpcyBhY3RpdmUmIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKIAlyb290ID0gb3R4Ml9xb3NfYWxsb2Nfcm9vdChwZnZmKTsKIAlpZiAoSVNfRVJSKHJvb3QpKSB7CiAJCWVyciA9IFBUUl9FUlIocm9vdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zX3NxLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zX3NxLmMKaW5kZXggMjg3MmFkYWJjODMwNS4uNWYwOWUyOTYwMTQ0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvc19zcS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3Nfc3EuYwpAQCAtMjM4LDcgJiM0MzsyMzgsNyBAQCBpbnQgb3R4Ml9xb3NfZW5hYmxlX3NxKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IHFpZHgpCiAJc3RydWN0IG90eDJfaHcgKmh3ID0gJmFtcDtwZnZmLSZndDtodzsKIAlpbnQgcG9vbF9pZCwgc3FfaWR4LCBlcnI7CiAKLQlpZiAocGZ2Zi0mZ3Q7ZmxhZ3MgJmFtcDsgT1RYMl9GTEFHX0lOVEZfRE9XTikKJiM0MzsJaWYgKG90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19JTlRGX0RPV04pKQogCQlyZXR1cm4gLUVQRVJNOwogCiAJc3FfaWR4ID0gaHctJmd0O25vbl9xb3NfcXVldWVzICYjNDM7IHFpZHg7CkBAIC0yODgsNyAmIzQzOzI4OCw3IEBAIHZvaWQgb3R4Ml9xb3NfZGlzYWJsZV9zcShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBxaWR4KQogCXNxX2lkeCA9IGh3LSZndDtub25fcW9zX3F1ZXVlcyAmIzQzOyBxaWR4OwogCiAJLyogSWYgdGhlIERPV04gZmxhZyBpcyBzZXQgU1FzIGFyZSBhbHJlYWR5IGZyZWVkICovCi0JaWYgKHBmdmYtJmd0O2ZsYWdzICZhbXA7IE9UWDJfRkxBR19JTlRGX0RPV04pCiYjNDM7CWlmIChvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfSU5URl9ET1dOKSkKIAkJcmV0dXJuOwogCiAJc3EgPSAmYW1wO3BmdmYtJmd0O3FzZXQuc3Fbc3FfaWR4XTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuYwppbmRleCAwZjVkNTY0MmQzZjdhLi44YThjMDA4OGZkMjA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3JlcC5jCkBAIC05Myw5ICYjNDM7OTMsOSBAQCBzdGF0aWMgaW50IHJ2dV9yZXBfbWNhbV9mbG93X2luaXQoc3RydWN0IHJlcF9kZXYgKnJlcCkKIAlyZXAtJmd0O2Zsb3dfY2ZnLSZndDttYXhfZmxvd3MgPSBhbGxvY2F0ZWQ7CiAKIAlpZiAoYWxsb2NhdGVkKSB7Ci0JCXJlcC0mZ3Q7ZmxhZ3MgfD0gT1RYMl9GTEFHX01DQU1fRU5UUklFU19BTExPQzsKLQkJcmVwLSZndDtmbGFncyB8PSBPVFgyX0ZMQUdfTlRVUExFX1NVUFBPUlQ7Ci0JCXJlcC0mZ3Q7ZmxhZ3MgfD0gT1RYMl9GTEFHX1RDX0ZMT1dFUl9TVVBQT1JUOwomIzQzOwkJc2V0X2JpdChPVFgyX0ZMQUdfTUNBTV9FTlRSSUVTX0FMTE9DLCAmYW1wO3JlcC0mZ3Q7ZmxhZ3MpOwomIzQzOwkJc2V0X2JpdChPVFgyX0ZMQUdfTlRVUExFX1NVUFBPUlQsICZhbXA7cmVwLSZndDtmbGFncyk7CiYjNDM7CQlzZXRfYml0KE9UWDJfRkxBR19UQ19GTE9XRVJfU1VQUE9SVCwgJmFtcDtyZXAtJmd0O2ZsYWdzKTsKIAl9CiAKIAlJTklUX0xJU1RfSEVBRCgmYW1wO3JlcC0mZ3Q7Zmxvd19jZmctJmd0O2Zsb3dfbGlzdCk7CkBAIC0xMDksMTQgJiM0MzsxMDksMTQgQEAgc3RhdGljIGludCBydnVfcmVwX3NldHVwX3RjX2NiKGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLAogCXN0cnVjdCByZXBfZGV2ICpyZXAgPSBjYl9wcml2OwogCXN0cnVjdCBvdHgyX25pYyAqcHJpdiA9IHJlcC0mZ3Q7bWRldjsKIAotCWlmICghKHJlcC0mZ3Q7ZmxhZ3MgJmFtcDsgUlZVX1JFUF9WRl9JTklUSUFMSVpFRCkpCiYjNDM7CWlmICghdGVzdF9iaXQoT1RYMl9SRVBfVkZfSU5JVElBTElaRUQsICZhbXA7cmVwLSZndDtmbGFncykpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKCEocmVwLSZndDtmbGFncyAmYW1wOyBPVFgyX0ZMQUdfVENfRkxPV0VSX1NVUFBPUlQpKQomIzQzOwlpZiAoIXRlc3RfYml0KE9UWDJfRkxBR19UQ19GTE9XRVJfU1VQUE9SVCwgJmFtcDtyZXAtJmd0O2ZsYWdzKSkKIAkJcnZ1X3JlcF9tY2FtX2Zsb3dfaW5pdChyZXApOwogCiAJcHJpdi0mZ3Q7bmV0ZGV2ID0gcmVwLSZndDtuZXRkZXY7Ci0JcHJpdi0mZ3Q7ZmxhZ3MgPSByZXAtJmd0O2ZsYWdzOwomIzQzOwlvdHgyX3N5bmNfZmxhZ3NfZnJvbV9yZXAocHJpdiwgJmFtcDtyZXAtJmd0O2ZsYWdzKTsKIAlwcml2LSZndDtwY2lmdW5jID0gcmVwLSZndDtwY2lmdW5jOwogCXByaXYtJmd0O2Zsb3dfY2ZnID0gcmVwLSZndDtmbG93X2NmZzsKIApAQCAtMzAzLDkgJiM0MzszMDMsOSBAQCBzdGF0aWMgdm9pZCBydnVfcmVwX3N0YXRlX2V2dF9oYW5kbGVyKHN0cnVjdCBvdHgyX25pYyAqcHJpdiwKIAlyZXBfaWQgPSBydnVfcmVwX2dldF9yZXBpZChwcml2LCBpbmZvLSZndDtwY2lmdW5jKTsKIAlyZXAgPSBwcml2LSZndDtyZXBzW3JlcF9pZF07CiAJaWYgKGluZm8tJmd0O2V2dF9kYXRhLnZmX3N0YXRlKQotCQlyZXAtJmd0O2ZsYWdzIHw9IFJWVV9SRVBfVkZfSU5JVElBTElaRUQ7CiYjNDM7CQlzZXRfYml0KE9UWDJfUkVQX1ZGX0lOSVRJQUxJWkVELCAmYW1wO3JlcC0mZ3Q7ZmxhZ3MpOwogCWVsc2UKLQkJcmVwLSZndDtmbGFncyAmYW1wOz0gflJWVV9SRVBfVkZfSU5JVElBTElaRUQ7CiYjNDM7CQljbGVhcl9iaXQoT1RYMl9SRVBfVkZfSU5JVElBTElaRUQsICZhbXA7cmVwLSZndDtmbGFncyk7CiB9CiAKIGludCBydnVfZXZlbnRfdXBfbm90aWZ5KHN0cnVjdCBvdHgyX25pYyAqcGYsIHN0cnVjdCByZXBfZXZlbnQgKmluZm8pCkBAIC0zODIsNyAmIzQzOzM4Miw3IEBAIHN0YXRpYyB2b2lkIHJ2dV9yZXBfZ2V0X3N0YXRzNjQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIHsKIAlzdHJ1Y3QgcmVwX2RldiAqcmVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCWlmICghKHJlcC0mZ3Q7ZmxhZ3MgJmFtcDsgUlZVX1JFUF9WRl9JTklUSUFMSVpFRCkpCiYjNDM7CWlmICghdGVzdF9iaXQoT1RYMl9SRVBfVkZfSU5JVElBTElaRUQsICZhbXA7cmVwLSZndDtmbGFncykpCiAJCXJldHVybjsKIAogCXN0YXRzLSZndDtyeF9wYWNrZXRzID0gcmVwLSZndDtzdGF0cy5yeF9mcmFtZXM7CkBAIC00NTMsNyAmIzQzOzQ1Myw3IEBAIHN0YXRpYyBpbnQgcnZ1X3JlcF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJc3RydWN0IG90eDJfbmljICpwcml2ID0gcmVwLSZndDttZGV2OwogCXN0cnVjdCByZXBfZXZlbnQgZXZ0ID0gezB9OwogCi0JaWYgKCEocmVwLSZndDtmbGFncyAmYW1wOyBSVlVfUkVQX1ZGX0lOSVRJQUxJWkVEKSkKJiM0MzsJaWYgKCF0ZXN0X2JpdChPVFgyX1JFUF9WRl9JTklUSUFMSVpFRCwgJmFtcDtyZXAtJmd0O2ZsYWdzKSkKIAkJcmV0dXJuIDA7CiAKIAluZXRpZl9jYXJyaWVyX29uKGRldik7CkBAIC00NzIsNyAmIzQzOzQ3Miw3IEBAIHN0YXRpYyBpbnQgcnZ1X3JlcF9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJc3RydWN0IG90eDJfbmljICpwcml2ID0gcmVwLSZndDttZGV2OwogCXN0cnVjdCByZXBfZXZlbnQgZXZ0ID0gezB9OwogCi0JaWYgKCEocmVwLSZndDtmbGFncyAmYW1wOyBSVlVfUkVQX1ZGX0lOSVRJQUxJWkVEKSkKJiM0MzsJaWYgKCF0ZXN0X2JpdChPVFgyX1JFUF9WRl9JTklUSUFMSVpFRCwgJmFtcDtyZXAtJmd0O2ZsYWdzKSkKIAkJcmV0dXJuIDA7CiAKIAluZXRpZl9jYXJyaWVyX29mZihkZXYpOwpAQCAtNTQ3LDcgJiM0Mzs1NDcsNyBAQCBzdGF0aWMgaW50IHJ2dV9yZXBfbmFwaV9pbml0KHN0cnVjdCBvdHgyX25pYyAqcHJpdiwKIAkJb3R4Ml93cml0ZTY0KHByaXYsIE5JWF9MRl9DSU5UWF9JTlQocWlkeCksIEJJVF9VTEwoMCkpOwogCQlvdHgyX3dyaXRlNjQocHJpdiwgTklYX0xGX0NJTlRYX0VOQV9XMVMocWlkeCksIEJJVF9VTEwoMCkpOwogCX0KLQlwcml2LSZndDtmbGFncyAmYW1wOz0gfk9UWDJfRkxBR19JTlRGX0RPV047CiYjNDM7CW90eDJfY2xlYXJfZmxhZyhwcml2LCBPVFgyX0ZMQUdfSU5URl9ET1dOKTsKIAlyZXR1cm4gMDsKIAogZXJyX2ZyZWVfY2ludHM6CkBAIC02MzIsNyAmIzQzOzYzMiw3IEBAIHZvaWQgcnZ1X3JlcF9kZXN0cm95KHN0cnVjdCBvdHgyX25pYyAqcHJpdikKIAlpbnQgcmVwX2lkOwogCiAJcnZ1X2Vzd2l0Y2hfY29uZmlnKHByaXYsIGZhbHNlKTsKLQlwcml2LSZndDtmbGFncyB8PSBPVFgyX0ZMQUdfSU5URl9ET1dOOwomIzQzOwlvdHgyX3NldF9mbGFnKHByaXYsIE9UWDJfRkxBR19JTlRGX0RPV04pOwogCXJ2dV9yZXBfZnJlZV9jcV9yc3JjKHByaXYpOwogCWZvciAocmVwX2lkID0gMDsgcmVwX2lkICZsdDsgcHJpdi0mZ3Q7cmVwX2NudDsgcmVwX2lkJiM0MzsmIzQzOykgewogCQlyZXAgPSBwcml2LSZndDtyZXBzW3JlcF9pZF07CkBAIC04MDEsOCAmIzQzOzgwMSw4IEBAIHN0YXRpYyBpbnQgcnZ1X3JlcF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBwcml2KTsKIAlwcml2LSZndDtwZGV2ID0gcGRldjsKIAlwcml2LSZndDtkZXYgPSBkZXY7Ci0JcHJpdi0mZ3Q7ZmxhZ3MgfD0gT1RYMl9GTEFHX0lOVEZfRE9XTjsKLQlwcml2LSZndDtmbGFncyB8PSBPVFgyX0ZMQUdfUkVQX01PREVfRU5BQkxFRDsKJiM0MzsJb3R4Ml9zZXRfZmxhZyhwcml2LCBPVFgyX0ZMQUdfSU5URl9ET1dOKTsKJiM0MzsJb3R4Ml9zZXRfZmxhZyhwcml2LCBPVFgyX0ZMQUdfUkVQX01PREVfRU5BQkxFRCk7CiAKIAlodyA9ICZhbXA7cHJpdi0mZ3Q7aHc7CiAJaHctJmd0O3BkZXYgPSBwZGV2OwpAQCAtODQ1LDcgJiM0Mzs4NDUsNyBAQCBzdGF0aWMgdm9pZCBydnVfcmVwX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIAlzdHJ1Y3Qgb3R4Ml9uaWMgKnByaXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAKIAlvdHgyX3VucmVnaXN0ZXJfZGwocHJpdik7Ci0JaWYgKCEocHJpdi0mZ3Q7ZmxhZ3MgJmFtcDsgT1RYMl9GTEFHX0lOVEZfRE9XTikpCiYjNDM7CWlmICghb3R4Ml90ZXN0X2ZsYWcocHJpdiwgT1RYMl9GTEFHX0lOVEZfRE9XTikpCiAJCXJ2dV9yZXBfZGVzdHJveShwcml2KTsKIAlvdHgyX2RldGFjaF9yZXNvdXJjZXMoJmFtcDtwcml2LSZndDttYm94KTsKIAlpZiAocHJpdi0mZ3Q7aHcubG10X2luZm8pCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmgKaW5kZXggNWJjOWUyYzdkODAwYi4uNDU3MDdjNDM0ZDg5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3JlcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuaApAQCAtMzcsOCAmIzQzOzM3LDcgQEAgc3RydWN0IHJlcF9kZXYgewogCXN0cnVjdCBkZWxheWVkX3dvcmsgc3RhdHNfd3JrOwogCXN0cnVjdCBkZXZsaW5rX3BvcnQgZGxfcG9ydDsKIAlzdHJ1Y3Qgb3R4Ml9mbG93X2NvbmZpZwkqZmxvd19jZmc7Ci0jZGVmaW5lIFJWVV9SRVBfVkZfSU5JVElBTElaRUQJCUJJVF9VTEwoMCkKLQl1NjQgZmxhZ3M7CiYjNDM7CXVuc2lnbmVkIGxvbmcJCWZsYWdzOwogCXUxNiByZXBfaWQ7CiAJdTE2IHBjaWZ1bmM7CiAJdTggbWFjW0VUSF9BTEVOXTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU5OTQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA3NjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBEZWNpc2lvbiBmb3IgdGhlIE9jdGVvblRYMiBOSUMgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGZvY3VzZWQgb24gd2hldGhlciB0aGlzIHBhdGNoIGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcsIGFuZCBJIG5lZWQgdG8gYXBwbHkgdGhlIGVzdGFibGlzaGVkIGd1aWRlbGluZXMuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZXMuIFRoZSBwYXRjaCB0b3VjaGVzIGEgbG90IG9mIGZpbGVzIHdpdGhpbiB0aGUgTWFydmVsbCBPY3Rlb25UWDIgbmV0d29ya2luZyBkcml2ZXIuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgdG8gbW9kaWZ5IGNvZGUgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDJgIGRpcmVjdG9yeS4gVGhpcyBpcyBpbnRlcmVzdGluZywgYXMgdGhpcyBsaWtlbHkgaXMgYSBkcml2ZXIgZm9yIGEgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlLCBhIFNtYXJ0TklDIG9yIHBvdGVudGlhbGx5IGEgU29DLgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgaGFyZHdhcmUgaXMgcmVhbGlzdGljYWxseSByZWFjaGFibGUgZm9yIGZ1enppbmcsIHdoaWNoIG1lYW5zIHRoZSBoYXJkd2FyZSBtdXN0IGJlIGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgZGlyZWN0bHkgYWNjZXNzaWJsZS4gVGhlIGd1aWRlbGluZXMsIHNwZWNpZmljYWxseSBTZWN0aW9uIDIsIGFyZSB2ZXJ5IGNsZWFyIG9uIHRoaXMuIFRoZSAmIzM0O3N0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSYjMzQ7IGNsYXVzZSBqdW1wcyBvdXQsIGFuZCBJJiMzOTttIGxvb2tpbmcgdG8gY2hlY2sgdG8gY29uZmlybSB3aGV0aGVyIE9jdGVvblRYMiBmYWxscyBpbnRvIHRoYXQgY2F0ZWdvcnkuIFRoZSBydWxlIHNwZWNpZmljYWxseSBjYWxscyBvdXQgU21hcnROSUNzIGFuZCB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcyBhcyBwb3RlbnRpYWwgZXhjbHVzaW9ucy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIG5hdHVyZSBvZiB0aGUgT2N0ZW9uVFgyLiBJcyBpdCBhIHByb3ByaWV0YXJ5IEFTSUMsIGEgTklDIHRoYXQgcmVxdWlyZXMgYSBzcGVjaWZpYyBoYXJkd2FyZSBzZXR1cCwgb3IgY2FuIGl0IGJlIHNpbXVsYXRlZCBvciBhY2Nlc3NlZCBpbiBhIHdheSB0aGF0IGFsaWducyB3aXRoIHRoZSBmdXp6aW5nIGluZnJhc3RydWN0dXJlPyBUaGlzIGlzIGNyaXRpY2FsLgoKSSYjMzk7bGwgbmVlZCB0byByZXNlYXJjaCB3aGF0IHRoZSBgb2N0ZW9udHgyYCByZWZlcnMgdG8sIGFuZCB3aGF0IHRoZSBoYXJkd2FyZSBlbnRhaWxzLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnLCBvciBzZWFyY2ggZm9yIGluZm9ybWF0aW9uIHRvIHVuZGVyc3RhbmQgd2hhdCBpdCBpcyBhbmQgaG93IGFjY2Vzc2libGUgaXQgaXMuIElmIGl0JiMzOTtzIHNvbWV0aGluZyBsaWtlIGFuIG1seHN3LCBvciBpb25pYywgSSYjMzk7bGwgbmVlZCB0byBzdHJvbmdseSBjb25zaWRlciB3aGV0aGVyIHRoaXMgaXMgd29ydGggcHVyc3VpbmcsIG9yIGlmIGl0IGlzIHVuZmVhc2libGUgZ2l2ZW4gdGhhdCBJIGRvbiYjMzk7dCBoYXZlIGRpcmVjdCBhY2Nlc3MgdG8gdGhhdCBoYXJkd2FyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgT0NURU9OVFgyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy01LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzo2OmNvbmZpZyBPQ1RFT05UWDJfTUJPWFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy03LVx0dHJpc3RhdGVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc6OTpjb25maWcgT0NURU9OVFgyX0FGXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTEwLVx0dHJpc3RhdGUgXCYjMzQ7TWFydmVsbCBPY3Rlb25UWDIgUlZVIEFkbWluIEZ1bmN0aW9uIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc9MjI9Y29uZmlnIE5EQ19ESVNfRFlOQU1JQ19DQUNISU5HXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0zMC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc6MzE6Y29uZmlnIE9DVEVPTlRYMl9QRlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0zMi1cdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgT2N0ZW9uVFgyIE5JQyBQaHlzaWNhbCBGdW5jdGlvbiBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTQ0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzo0NTpjb25maWcgT0NURU9OVFgyX1ZGXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTQ2LVx0dHJpc3RhdGUgXCYjMzQ7TWFydmVsbCBPY3Rlb25UWDIgTklDIFZpcnR1YWwgRnVuY3Rpb24gZHJpdmVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc1ODIKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgS2NvbmZpZyBmaWxlOgoKKipEaXZpbmcgaW50byB0aGUgTWFydmVsbCBPY3Rlb24gVFgyIEV0aGVybmV0IERyaXZlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gYWJvdXQgdG8gZGlzc2VjdCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgTWFydmVsbCBPY3Rlb24gVFgyIEV0aGVybmV0IGRyaXZlciBhcmUgZGVmaW5lZCwgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgaXQgY2FuIGJlIHRhaWxvcmVkIGZvciBkaWZmZXJlbnQgc3lzdGVtcyBhbmQgdXNlIGNhc2VzLiBJIGV4cGVjdCB0byBmaW5kIGRlcGVuZGVuY2llcyBvbiBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLCBoYXJkd2FyZS1zcGVjaWZpYyBzZXR0aW5ncywgYW5kIHRoZSB1c3VhbCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBsb2dpYy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrcyAtIHRoZSBmZWF0dXJlcyB0aGF0IGNhbiBiZSBlbmFibGVkIG9yIGRpc2FibGVkLCBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aG9zZSBjaG9pY2VzLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRlcGVuZGVuY2llcyDigJMgd2hhdCBvdGhlciBkcml2ZXJzIG9yIGtlcm5lbCBmZWF0dXJlcyBhcmUgcmVxdWlyZWQgZm9yIHZhcmlvdXMgT2N0ZW9uIFRYMiBFdGhlcm5ldCBmdW5jdGlvbmFsaXRpZXMuIEFyZSB0aGVyZSBzcGVjaWZpYyBib2FyZCBjb25maWd1cmF0aW9ucyBvciBQSFkgb3B0aW9ucyBJIG5lZWQgdG8gY29uc2lkZXI/IEkmIzM5O2xsIGFsc28gYmUgc2Nhbm5pbmcgZm9yIGFueSB1bnVzdWFsIG9yIHZlbmRvci1zcGVjaWZpYyBvcHRpb25zIHRoYXQgbWlnaHQgaW5kaWNhdGUgdW5pcXVlIE1hcnZlbGwgb3B0aW1pemF0aW9ucyBvciBoYXJkd2FyZSBmZWF0dXJlcy4gTXkgZ29hbCBpcyB0byBncmFzcCB0aGUgY29uZmlndXJhYmlsaXR5IG9mIHRoaXMgZHJpdmVyIGFuZCBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIHRoZSBvdmVyYWxsIG5ldHdvcmtpbmcgc3RhY2suIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgdGhlIGtleSBjb25maWd1cmFibGUgZWxlbWVudHMgYXJlIGFuZCB0aGVpciBwb3RlbnRpYWwgaW1wYWN0cyBvbiBwZXJmb3JtYW5jZSwgcG93ZXIgY29uc3VtcHRpb24sIGFuZCBzdXBwb3J0ZWQgaGFyZHdhcmUuIEZpbmFsbHksIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyBhYm91dCBwb3RlbnRpYWwgY29uZmlndXJhdGlvbiBwaXRmYWxscyBvciBjb21tb24gaXNzdWVzIHRoYXQgbWlnaHQgYXJpc2UgZHVyaW5nIGRlcGxveW1lbnQuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBNYXJ2ZWxsIFJWVSBOZXR3b3JrIGRyaXZlcnMgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRjb25maWcgT0NURU9OVFgyX01CT1hcbiAgIDc6XHRcdHRyaXN0YXRlXG4gICA4Olx0XG4gICA5Olx0Y29uZmlnIE9DVEVPTlRYMl9BRlxuICAxMDpcdFx0dHJpc3RhdGUgXCYjMzQ7TWFydmVsbCBPY3Rlb25UWDIgUlZVIEFkbWluIEZ1bmN0aW9uIGRyaXZlclwmIzM0O1xuICAxMTpcdFx0c2VsZWN0IE9DVEVPTlRYMl9NQk9YXG4gIDEyOlx0XHRzZWxlY3QgTkVUX0RFVkxJTktcbiAgMTM6XHRcdGRlcGVuZHMgb24gKDY0QklUIFx1MDAyNlx1MDAyNiBDT01QSUxFX1RFU1QpIHx8IEFSTTY0XG4gIDE0Olx0XHRkZXBlbmRzIG9uIFBDSVxuICAxNTpcdFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxuICAxNjpcdFx0aGVscFxuICAxNzpcdFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBNYXJ2ZWxsJiMzOTtzIE9jdGVvblRYMiBSZXNvdXJjZSBWaXJ0dWFsaXphdGlvblxuICAxODpcdFx0ICBVbml0JiMzOTtzIGFkbWluIGZ1bmN0aW9uIG1hbmFnZXIgd2hpY2ggbWFuYWdlcyBhbGwgUlZVIEhXIHJlc291cmNlc1xuICAxOTpcdFx0ICBhbmQgcHJvdmlkZXMgYSBtZWRpdW0gdG8gb3RoZXIgUEYvVkZzIHRvIGNvbmZpZ3VyZSBIVy4gU2hvdWxkIGJlXG4gIDIwOlx0XHQgIGVuYWJsZWQgZm9yIG90aGVyIFJWVSBkZXZpY2UgZHJpdmVycyB0byB3b3JrLlxuICAyMTpcdFxuICAyMjpcdGNvbmZpZyBORENfRElTX0RZTkFNSUNfQ0FDSElOR1xuICAyMzpcdFx0Ym9vbCBcJiMzNDtEaXNhYmxlIGNhY2hpbmcgb2YgZHluYW1pYyBlbnRyaWVzIGluIE5EQ1wmIzM0O1xuICAyNDpcdFx0ZGVwZW5kcyBvbiBPQ1RFT05UWDJfQUZcbiAgMjU6XHRcdGRlZmF1bHQgblxuICAyNjpcdFx0aGVscFxuICAyNzpcdFx0ICBUaGlzIGNvbmZpZyBvcHRpb24gZGlzYWJsZXMgY2FjaGluZyBvZiBkeW5hbWljIGVudHJpZXMgc3VjaCBhcyBOSVggU1FFc1xuICAyODpcdFx0ICAsIE5QQSBzdGFjayBwYWdlcyBldGMgaW4gTkRDLiBBbHNvIGxvY2tzIGRvd24gTklYIFNRL0NRL1JRL1JTUyBhbmRcbiAgMjk6XHRcdCAgTlBBIEF1cmEvUG9vbCBjb250ZXh0cy5cbiAgMzA6XHRcbiAgMzE6XHRjb25maWcgT0NURU9OVFgyX1BGXG4gIDMyOlx0XHR0cmlzdGF0ZSBcJiMzNDtNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgUGh5c2ljYWwgRnVuY3Rpb24gZHJpdmVyXCYjMzQ7XG4gIDMzOlx0XHRzZWxlY3QgT0NURU9OVFgyX01CT1hcbiAgMzQ6XHRcdHNlbGVjdCBORVRfREVWTElOS1xuICAzNTpcdFx0c2VsZWN0IFBBR0VfUE9PTFxuICAzNjpcdFx0c2VsZWN0IENSWVBUT19MSUJfQUVTIGlmIE1BQ1NFQ1xuICAzNzpcdFx0ZGVwZW5kcyBvbiAoNjRCSVQgXHUwMDI2XHUwMDI2IENPTVBJTEVfVEVTVCkgfHwgQVJNNjRcbiAgMzg6XHRcdHNlbGVjdCBESU1MSUJcbiAgMzk6XHRcdGRlcGVuZHMgb24gUENJXG4gIDQwOlx0XHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXG4gIDQxOlx0XHRkZXBlbmRzIG9uIE1BQ1NFQyB8fCAhTUFDU0VDXG4gIDQyOlx0XHRoZWxwXG4gIDQzOlx0XHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIE1hcnZlbGwmIzM5O3MgT2N0ZW9uVFgyIE5JQyBwaHlzaWNhbCBmdW5jdGlvbi5cbiAgNDQ6XHRcbiAgNDU6XHRjb25maWcgT0NURU9OVFgyX1ZGXG4gIDQ2Olx0XHR0cmlzdGF0ZSBcJiMzNDtNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgVmlydHVhbCBGdW5jdGlvbiBkcml2ZXJcJiMzNDtcbiAgNDc6XHRcdGRlcGVuZHMgb24gT0NURU9OVFgyX1BGXG4gIDQ4Olx0XHRoZWxwXG4gIDQ5Olx0XHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIE1hcnZlbGwmIzM5O3MgT2N0ZW9uVFgyIE5JQyB2aXJ0dWFsIGZ1bmN0aW9uLlxuICA1MDpcdFxuICA1MTpcdGNvbmZpZyBSVlVfRVNXSVRDSFxuICA1MjpcdFx0dHJpc3RhdGUgXCYjMzQ7TWFydmVsbCBSVlUgRS1Td2l0Y2ggc3VwcG9ydFwmIzM0O1xuICA1MzpcdFx0ZGVwZW5kcyBvbiBPQ1RFT05UWDJfUEZcbiAgNTQ6XHRcdGRlZmF1bHQgbVxuICA1NTpcdFx0aGVscFxuICA1NjpcdFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBNYXJ2ZWxsJiMzOTtzIFJWVSBFLVN3aXRjaCB0aGF0XG4gIDU3Olx0XHQgIHByb3ZpZGVzIGludGVybmFsIFNSSU9WIHBhY2tldCBzdGVlcmluZyBhbmQgc3dpdGNoaW5nLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4NzY3CgkJCQkJCQlvdXRwdXQ6IDEzMQoJCQkJCQkJdGhvdWdodHM6IDk0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgT2N0ZW9uVFgyIERyaXZlciBmb3IgRnV6emluZyBFbGlnaWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGVzZSBgT0NURU9OVFgyYCBkcml2ZXJzIGFyZSwgYXMgSSB1bmRlcnN0YW5kLCBzcGVjaWZpYyB0byBNYXJ2ZWxsJiMzOTtzIE9jdGVvblRYMiBSVlUvU21hcnROSUMvU29DIGhhcmR3YXJlLiBUaGV5JiMzOTtyZSBwaHlzaWNhbCBkcml2ZXJzIGZvciBBUk02NCBvciwgaW4gc29tZSBjYXNlcywgNjQtYml0IGNvbXBpbGF0aW9uIHRlc3RzLiBUaGUga2V5IGhlcmUgaXMgKnBoeXNpY2FsKiBoYXJkd2FyZTsgdGhlc2UgZHJpdmVycyBhcmUgdGllZCB0byBNYXJ2ZWxsJiMzOTtzIFBDSWUgZGV2aWNlcy4gU3RhbmRhcmQgUUVNVSBvciBHQ0UgVk1zIHNpbXBseSB3b24mIzM5O3QgY3V0IGl0LiBUaGV5IGNhbiYjMzk7dCBlbXVsYXRlIHRoaXMgaGFyZHdhcmUuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB2ZXJpZnkgdGhlIHNjb3BlIG9mIHRoZSBtb2RpZmljYXRpb25zLiBBIHF1aWNrIHNjYW4gb2YgdGhlIGNoYW5nZWQgZmlsZXMgY29uZmlybXMgdGhpcy4gSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggdG91Y2hlcyBhIGNvbXByZWhlbnNpdmUgc2V0IG9mIGZpbGVzIHdpdGhpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYC4gSXQgaW5jbHVkZXMgdGhpbmdzIGxpa2UgYGFmL3J2dV9uaXguY2AsIGBuaWMvY24xMGtfaXBzZWMuY2AsIGBuaWMvb3R4Ml9jb21tb24uY2AsIGFuZCBzbyBvbi4gTm8gY29yZSBuZXR3b3JraW5nLCBzb2NrZXQgY29kZSwgb3IgTmV0bGluayBjb3JlIGhhdmUgYmVlbiBtb2RpZmllZCwgc28gdGhhdCYjMzk7cyBhIGdvb2Qgc2lnbi4gVGhlIGNoYW5nZXMgYXJlIGFsbCBzZWxmLWNvbnRhaW5lZCB3aXRoaW4gdGhpcyBkcml2ZXImIzM5O3Mgc3BlY2lmaWMgZGlyZWN0b3J5LgoKTm93LCBsZXQmIzM5O3MgYXBwbHkgdGhlIGNyaXRlcmlhLiBXZSYjMzk7cmUgbG9va2luZyBmb3Igc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLiBMb29raW5nIGF0IHNlY3Rpb24gMiwgdGhlIGV4YW1wbGVzIHByb3ZpZGVkIHRoZXJlLCBgbWx4c3dgLCBgcGRzX2NvcmVgLCBgcWVkYCwgZXRjLiwgYXJlIGFsbCB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcyBvciBTbWFydE5JQyBkcml2ZXJzLiAgVGhlc2UgcmVxdWlyZSBwaHlzaWNhbCBBU0lDcyBvciBQQ0llIGNhcmRzIHRoYXQgYXJlbiYjMzk7dCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGF0IGlzIGV4YWN0bHkgd2hhdCB3ZSBoYXZlIGhlcmUuIFRoZSBPY3Rlb25UWDIgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgU21hcnROSUMvU29DIG5ldHdvcmsgZHJpdmVyLCBhbmQgaXQgbmVlZHMgcGh5c2ljYWwgTWFydmVsbCBoYXJkd2FyZSAvIEFTSUNzIHRvIHdvcmsuICBUaGlzIGlzIGNyaXRpY2FsLgoKVGhpcyBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgY29kZSB0aGF0IGlzIGluaGVyZW50bHkgdW5yZWFjaGFibGUgaW4gYW55IHR5cGljYWwgZnV6emluZyBzZXR1cCBsaWtlIHRoZSBvbmUgaW4gc3l6a2FsbGVyLiBUaGUgaGFyZHdhcmUgZGVwZW5kZW5jeSByZW5kZXJzIGl0IG1vb3QuCgpUaGVyZWZvcmUsIHRoZSBgV29ydGhGdXp6aW5nYCBmbGFnIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYC4gVGhlcmUmIzM5O3Mgbm8gcG9pbnQgaW4gdHJ5aW5nIHRvIGZ1enogY29kZSB0aGF0IHdvbiYjMzk7dCBldmVyIGV4ZWN1dGUgaW4gdGhlIGZ1enppbmcgZW52aXJvbm1lbnQuCgpGaW5hbGx5LCBsZXQmIzM5O3MgcHJlcGFyZSB0aGUgdG9vbCBjYWxsOgoKKiAgIGBXb3J0aEZ1enppbmc6IGZhbHNlYAoqICAgYEZvY3VzU3ltYm9sczogW11gIChXZSBkb24mIzM5O3QgbmVlZCBhbnkgZm9jdXNlZCBzeW1ib2xzKQoqICAgYEVuYWJsZUNvbmZpZ3M6IFtdYCAoV2UgZG9uJiMzOTt0IG5lZWQgdG8gZW5hYmxlIGFueXRoaW5nKQoqICAgYFJlYXNvbmluZzogVGhlIG1vZGlmaWNhdGlvbnMgYXJlIGV4Y2x1c2l2ZWx5IHdpdGhpbiB0aGUgTWFydmVsbCBPY3Rlb25UWDIgTklDIGRyaXZlciwgcmVxdWlyaW5nIHBoeXNpY2FsIE1hcnZlbGwgT2N0ZW9uVFgyIC8gQ04xMEsgQVNJQy9QQ0llIGhhcmR3YXJlLCB3aGljaCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuYAoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGV4Y2x1c2l2ZWx5IG1vZGlmaWVzIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBSVlUvTklDIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvKSwgYWRkaW5nIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBzdXBwb3J0IGFuZCByZWZhY3RvcmluZyBmbGFnIGJpdG1hc2sgb3BlcmF0aW9ucy4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgc3BlY2lmaWMgcGh5c2ljYWwgTWFydmVsbCBPY3Rlb25UWDIgLyBDTjEwSyBoYXJkd2FyZS9BU0lDcyBhbmQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIHZpcnR1YWxpemF0aW9uIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3Igc3l6a2FsbGVyIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgZXhjbHVzaXZlbHkgbW9kaWZpZXMgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIFJWVS9OSUMgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi8pLCBhZGRpbmcgbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIHN1cHBvcnQgYW5kIHJlZmFjdG9yaW5nIGZsYWcgYml0bWFzayBvcGVyYXRpb25zLiBUaGlzIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbCBNYXJ2ZWxsIE9jdGVvblRYMiAvIENOMTBLIGhhcmR3YXJlL0FTSUNzIGFuZCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBzeXprYWxsZXIgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6NDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjQ2OjUyLjk1MTU3Nzg1OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTAzODAwMDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGV4Y2x1c2l2ZWx5IG1vZGlmaWVzIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBSVlUvTklDIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvKSwgYWRkaW5nIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBzdXBwb3J0IGFuZCByZWZhY3RvcmluZyBmbGFnIGJpdG1hc2sgb3BlcmF0aW9ucy4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgc3BlY2lmaWMgcGh5c2ljYWwgTWFydmVsbCBPY3Rlb25UWDIgLyBDTjEwSyBoYXJkd2FyZS9BU0lDcyBhbmQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIHZpcnR1YWxpemF0aW9uIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3Igc3l6a2FsbGVyIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjo0Njo1Mi45NTE1ODQ3NzhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwODAwMzcyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDkyYzEzMzRjZDllNTA0OGUzYzY1MWYxNzM1YWQwMjAxOGFiYzBkODRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBTZXAgMTEgMTI6NDY6NTEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jXFxuaW5kZXggZDgwZDJjMDBiZDg0My4uMmQxYWI4Yzc2MWM0MCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcXG5AQCAtMzMxLDggKzMzMSwxMiBAQCBzdGF0aWMgYm9vbCBpc192YWxpZF90eHNjaHEoc3RydWN0IHJ2dSAqcnZ1LCBpbnQgYmxrYWRkcixcXG4gXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChtYXBfZnVuYyAhPSBwY2lmdW5jKVxcbitcXHRpZiAobWFwX2Z1bmMgIT0gcGNpZnVuYykge1xcbitcXHRcXHRkZXZfZXJyX3JhdGVsaW1pdGVkKHJ2dS1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgXFxcInBjaWZ1bmMgJXggbWFwIHBjaWZ1bmMgJXggbm90IGVxdWFsLCBsdmw9JXUgc2NocT0ldVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgIHBjaWZ1bmMsIG1hcF9mdW5jLCBsdmwsIHNjaHEpO1xcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdH1cXG4gXFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9jbjEwa19pcHNlYy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL2NuMTBrX2lwc2VjLmNcXG5pbmRleCA3NzU0M2Q0NzIzNDVlLi41MGVjNDU0MmM0MTgzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9jbjEwa19pcHNlYy5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL2NuMTBrX2lwc2VjLmNcXG5AQCAtMzM0LDcgKzMzNCw3IEBAIHN0YXRpYyBpbnQgY24xMGtfb3V0Yl9jcHRfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiBcXHRcXHRcXHRcXHRcXHRcXHRDTjEwS19DUFRfTEZfTlFYKDApKTtcXG4gXFxuIFxcdC8qIFNldCBpcHNlYyBvZmZsb2FkIGVuYWJsZWQgZm9yIHRoaXMgZGV2aWNlICovXFxuLVxcdHBmLVxcdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfSVBTRUNfT0ZGTE9BRF9FTkFCTEVEO1xcbitcXHRvdHgyX3NldF9mbGFnKHBmLCBPVFgyX0ZMQUdfSVBTRUNfT0ZGTE9BRF9FTkFCTEVEKTtcXG4gXFxuIFxcdGNuMTBrX2NwdF9kZXZpY2Vfc2V0X2F2YWlsYWJsZShwZik7XFxuIFxcdHJldHVybiAwO1xcbkBAIC0zNTYsNyArMzU2LDcgQEAgc3RhdGljIGludCBjbjEwa19vdXRiX2NwdF9jbGVhbihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmKVxcbiBcXHR9XFxuIFxcbiBcXHQvKiBTZXQgaXBzZWMgb2ZmbG9hZCBkaXNhYmxlZCBmb3IgdGhpcyBkZXZpY2UgKi9cXG4tXFx0cGYtXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5PVFgyX0ZMQUdfSVBTRUNfT0ZGTE9BRF9FTkFCTEVEO1xcbitcXHRvdHgyX2NsZWFyX2ZsYWcocGYsIE9UWDJfRkxBR19JUFNFQ19PRkZMT0FEX0VOQUJMRUQpO1xcbiBcXG4gXFx0LyogRGlzYWJsZSBDUFRMRiBJbnN0cnVjdGlvbiBRdWV1ZSAoSVEpICovXFxuIFxcdGNuMTBrX291dGJfY3B0bGZfaXFfZGlzYWJsZShwZik7XFxuQEAgLTgyMCw3ICs4MjAsNyBAQCB2b2lkIGNuMTBrX2lwc2VjX2NsZWFuKHN0cnVjdCBvdHgyX25pYyAqcGYpXFxuIFxcdGlmICghaXNfZGV2X3N1cHBvcnRfaXBzZWNfb2ZmbG9hZChwZi1cXHUwMDNlcGRldikpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdGlmICghKHBmLVxcdTAwM2VmbGFncyBcXHUwMDI2IE9UWDJfRkxBR19JUFNFQ19PRkZMT0FEX0VOQUJMRUQpKVxcbitcXHRpZiAoIW90eDJfdGVzdF9mbGFnKHBmLCBPVFgyX0ZMQUdfSVBTRUNfT0ZGTE9BRF9FTkFCTEVEKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0aWYgKHBmLVxcdTAwM2VpcHNlYy5zYV93b3JrcSkge1xcbkBAIC05NDUsNyArOTQ1LDcgQEAgYm9vbCBjbjEwa19pcHNlY190cmFuc21pdChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmLCBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHEsXFxuIFxcdHUxNiBkbGVuO1xcbiBcXG4gXFx0LyogQ2hlY2sgZm9yIElQU0VDIG9mZmxvYWQgZW5hYmxlZCAqL1xcbi1cXHRpZiAoIShwZi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBPVFgyX0ZMQUdfSVBTRUNfT0ZGTE9BRF9FTkFCTEVEKSlcXG4rXFx0aWYgKCFvdHgyX3Rlc3RfZmxhZyhwZiwgT1RYMl9GTEFHX0lQU0VDX09GRkxPQURfRU5BQkxFRCkpXFxuIFxcdFxcdGdvdG8gZHJvcDtcXG4gXFxuIFxcdHNwID0gc2tiX3NlY19wYXRoKHNrYik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmNcXG5pbmRleCAxNzU5OTIxODhjMThhLi41YmFkMjQ2NmRhMGM1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmNcXG5AQCAtMjIwLDEwICsyMjAsMTAgQEAgaW50IG90eDJfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHZvaWQgKnApXFxuIFxcdFxcdGV0aF9od19hZGRyX3NldChuZXRkZXYsIGFkZHItXFx1MDAzZXNhX2RhdGEpO1xcbiBcXHRcXHQvKiB1cGRhdGUgZG1hYyBmaWVsZCBpbiB2bGFuIG9mZmxvYWQgcnVsZSAqL1xcbiBcXHRcXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgICBwZnZmLVxcdTAwM2VmbGFncyBcXHUwMDI2IE9UWDJfRkxBR19SWF9WTEFOX1NVUFBPUlQpXFxuK1xcdFxcdCAgICBvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfUlhfVkxBTl9TVVBQT1JUKSlcXG4gXFx0XFx0XFx0b3R4Ml9pbnN0YWxsX3J4dmxhbl9vZmZsb2FkX2Zsb3cocGZ2Zik7XFxuIFxcdFxcdC8qIHVwZGF0ZSBkbWFjIGFkZHJlc3MgaW4gbnR1cGxlIGFuZCBETUFDIGZpbHRlciBsaXN0ICovXFxuLVxcdFxcdGlmIChwZnZmLVxcdTAwM2VmbGFncyBcXHUwMDI2IE9UWDJfRkxBR19ETUFDRkxUUl9TVVBQT1JUKVxcbitcXHRcXHRpZiAob3R4Ml90ZXN0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX0RNQUNGTFRSX1NVUFBPUlQpKVxcbiBcXHRcXHRcXHRvdHgyX2RtYWNmbHRfdXBkYXRlX3BmbWFjX2Zsb3cocGZ2Zik7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdHJldHVybiAtRVBFUk07XFxuQEAgLTI3NSw4ICsyNzUsOCBAQCBpbnQgb3R4Ml9jb25maWdfcGF1c2VfZnJtKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4gXFx0XFx0Z290byB1bmxvY2s7XFxuIFxcdH1cXG4gXFxuLVxcdHJlcS1cXHUwMDNlcnhfcGF1c2UgPSAhIShwZnZmLVxcdTAwM2VmbGFncyBcXHUwMDI2IE9UWDJfRkxBR19SWF9QQVVTRV9FTkFCTEVEKTtcXG4tXFx0cmVxLVxcdTAwM2V0eF9wYXVzZSA9ICEhKHBmdmYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgT1RYMl9GTEFHX1RYX1BBVVNFX0VOQUJMRUQpO1xcbitcXHRyZXEtXFx1MDAzZXJ4X3BhdXNlID0gb3R4Ml90ZXN0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1JYX1BBVVNFX0VOQUJMRUQpO1xcbitcXHRyZXEtXFx1MDAzZXR4X3BhdXNlID0gb3R4Ml90ZXN0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1RYX1BBVVNFX0VOQUJMRUQpO1xcbiBcXHRyZXEtXFx1MDAzZXNldCA9IDE7XFxuIFxcbiBcXHRlcnIgPSBvdHgyX3N5bmNfbWJveF9tc2coXFx1MDAyNnBmdmYtXFx1MDAzZW1ib3gpO1xcbkBAIC02MTUsNiArNjE1LDE0MiBAQCB2b2lkIG90eDJfZ2V0X21hY19mcm9tX2FmKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTChvdHgyX2dldF9tYWNfZnJvbV9hZik7XFxuIFxcbitzdGF0aWMgaW50XFxuK290eDJfbml4X3RtcV9yZWdfd3JpdGUoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgY250LFxcbitcXHRcXHQgICAgICAgdTY0IHJlZ19hZGRyW01BWF9SRUdTX1BFUl9NQk9YX01TR10sXFxuK1xcdFxcdCAgICAgICB1NjQgcmVnX3ZhbFtNQVhfUkVHU19QRVJfTUJPWF9NU0ddKVxcbit7XFxuK1xcdHN0cnVjdCBtYm94ICptYm94ID0gXFx1MDAyNnBmdmYtXFx1MDAzZW1ib3g7XFxuK1xcdHN0cnVjdCBuaXhfdHhzY2hxX2NvbmZpZyAqcmVxO1xcbitcXHRpbnQgaSwgZXJyO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2bWJveC1cXHUwMDNlbG9jayk7XFxuK1xcdHJlcSA9IG90eDJfbWJveF9hbGxvY19tc2dfbml4X3R4c2NocV9jZmcobWJveCk7XFxuK1xcdGlmICghcmVxKSB7XFxuK1xcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWJveC1cXHUwMDNlbG9jayk7XFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR9XFxuK1xcbitcXHRyZXEtXFx1MDAzZWx2bCA9IE5JWF9UWFNDSF9MVkxfTURRO1xcbitcXHRyZXEtXFx1MDAzZW51bV9yZWdzID0gY250O1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNudDsgaSsrKSB7XFxuK1xcdFxcdHJlcS1cXHUwMDNlcmVnW2ldID0gcmVnX2FkZHJbaV07XFxuK1xcdFxcdHJlcS1cXHUwMDNlcmVndmFsW2ldID0gcmVnX3ZhbFtpXTtcXG4rXFx0fVxcbitcXG4rXFx0ZXJyID0gb3R4Ml9zeW5jX21ib3hfbXNnKG1ib3gpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNm1ib3gtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4raW50IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXFxuK3tcXG4rXFx0dTY0IHJlZ19hZGRyW01BWF9SRUdTX1BFUl9NQk9YX01TR107XFxuK1xcdHU2NCByZWdfdmFsW01BWF9SRUdTX1BFUl9NQk9YX01TR107XFxuK1xcdGludCBlcnIsIHNtcSwgaSwgY250ID0gMDtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwZnZmLVxcdTAwM2Vody50eHNjaHFfY250W05JWF9UWFNDSF9MVkxfU01RXTsgaSsrKSB7XFxuK1xcdFxcdHNtcSA9IHBmdmYtXFx1MDAzZWh3LnR4c2NocV9saXN0W05JWF9UWFNDSF9MVkxfU01RXVtpXTtcXG4rXFxuK1xcdFxcdHJlZ19hZGRyW2NudF0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTtcXG4rXFx0XFx0cmVnX3ZhbFtjbnRdID0gMDtcXG4rXFx0XFx0Y250Kys7XFxuK1xcbitcXHRcXHRyZWdfYWRkcltjbnRdID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7XFxuK1xcdFxcdHJlZ192YWxbY250XSA9IDA7XFxuK1xcdFxcdGNudCsrO1xcbitcXG4rXFx0XFx0aWYgKGNudCBcXHUwMDNjIE1BWF9SRUdTX1BFUl9NQk9YX01TRyAtIDEpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0ZXJyID0gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCBjbnQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgcmVnX2FkZHIsIHJlZ192YWwpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRnb3RvIGZhaWw7XFxuK1xcdFxcdGNudCA9IDA7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChjbnQpIHtcXG4rXFx0XFx0ZXJyID0gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCBjbnQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgcmVnX2FkZHIsIHJlZ192YWwpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRnb3RvIGZhaWw7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbitmYWlsOlxcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitpbnQgb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXFxuK1xcdFxcdFxcdFxcdCBpbnQgdHhxLCB1NjQgbWlucmF0ZSwgdTY0IG1heHJhdGUpXFxuK3tcXG4rXFx0c3RydWN0IG1ib3ggKm1ib3ggPSBcXHUwMDI2cGZ2Zi1cXHUwMDNlbWJveDtcXG4rXFx0c3RydWN0IG5peF90eHNjaHFfY29uZmlnICpyZXE7XFxuK1xcdGludCBlcnIsIHNtcSwgbiA9IDA7XFxuK1xcdHU2NCByZWdfYWRkclsyXTtcXG4rXFx0dTY0IHJlZ192YWxbMl07XFxuK1xcdHU2NCByYXRlO1xcbitcXG4rXFx0aWYgKCFtYXhyYXRlIFxcdTAwMjZcXHUwMDI2ICFtaW5yYXRlKSB7XFxuK1xcdFxcdHNtcSA9IG90eDJfZ2V0X3NtcV9pZHgocGZ2ZiwgdHhxKTtcXG4rXFx0XFx0cmVnX2FkZHJbMF0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTtcXG4rXFx0XFx0cmVnX3ZhbFswXSA9IDA7XFxuK1xcdFxcdHJlZ19hZGRyWzFdID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7XFxuK1xcdFxcdHJlZ192YWxbMV0gPSAwO1xcbitcXHRcXHRyZXR1cm4gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCAyLCByZWdfYWRkciwgcmVnX3ZhbCk7XFxuK1xcdH1cXG4rXFxuK1xcdHNtcSA9IG90eDJfZ2V0X3NtcV9pZHgocGZ2ZiwgdHhxKTtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNm1ib3gtXFx1MDAzZWxvY2spO1xcbitcXHRyZXEgPSBvdHgyX21ib3hfYWxsb2NfbXNnX25peF90eHNjaHFfY2ZnKG1ib3gpO1xcbitcXHRpZiAoIXJlcSkge1xcbitcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm1ib3gtXFx1MDAzZWxvY2spO1xcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0fVxcbitcXG4rXFx0cmVxLVxcdTAwM2VsdmwgPSBOSVhfVFhTQ0hfTFZMX01EUTtcXG4rXFxuK1xcdC8qIE1RUFJJTyBleHBvc2VzIG9ubHkgbWluL21heCByYXRlLCBub3QgYnVyc3QuICBQYXNzIGJ1cnN0IDAgc29cXG4rXFx0ICogb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZygpIHByb2dyYW1tZXMgdGhlIGxhcmdlc3QgYnVyc3QgdGhlIE5JWFxcbitcXHQgKiBlbmNvZGluZyBzdXBwb3J0cyAoQ04xMEtfTUFYX0JVUlNUX1NJWkUgb24gQ04xMEspLiAgVGhpcyBkaWZmZXJzXFxuK1xcdCAqIGZyb20gdGhlIDY1NTM2IGJ5dGUgZGVmYXVsdCB1c2VkIGluIHRoZSBIVEIgcGF0aCwgd2hpY2ggaXMgYVxcbitcXHQgKiBrZXJuZWwtc2lkZSBkZWZhdWx0IHdoZW4gbm8gZXhwbGljaXQgYnVyc3QgaXMgY29uZmlndXJlZCwgbm90IGFcXG4rXFx0ICogaGFyZHdhcmUgY2FwLlxcbitcXHQgKlxcbitcXHQgKiBtcXByaW8gc2V0dXAgcmVzdGFydHMgdGhlIG5ldGRldiAob3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYpLFxcbitcXHQgKiB3aGljaCByZXNldHMgTURRIHNoYXBlcnMgdG8gemVyby4gIFByb2dyYW0gYm90aCBQSVIgYW5kIENJUiBvblxcbitcXHQgKiBldmVyeSB1cGRhdGUgc28gb21pdHRlZCByYXRlcyBhcmUgYXBwbGllZCBleHBsaWNpdGx5IHJhdGhlciB0aGFuXFxuK1xcdCAqIHJlbHlpbmcgb24gc3RhbGUgaGFyZHdhcmUgc3RhdGUuXFxuK1xcdCAqL1xcbitcXHRyZXEtXFx1MDAzZXJlZ1tuXSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpO1xcbitcXHRpZiAobWF4cmF0ZSkge1xcbitcXHRcXHRyYXRlID0gb3R4Ml9jb252ZXJ0X3JhdGUobWF4cmF0ZSk7XFxuK1xcdFxcdHJlcS1cXHUwMDNlcmVndmFsW25dID0gb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIHJhdGUsIDApO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRyZXEtXFx1MDAzZXJlZ3ZhbFtuXSA9IDA7XFxuK1xcdH1cXG4rXFx0bisrO1xcbitcXG4rXFx0LyogQ0lSK1BJUiBzdXBwb3J0IGlzIHJlcXVpcmVkIGFuZCBjaGVja2VkIGF0IG1xcHJpbyBzZXR1cC4gKi9cXG4rXFx0cmVxLVxcdTAwM2VyZWdbbl0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTtcXG4rXFx0aWYgKG1pbnJhdGUpIHtcXG4rXFx0XFx0cmF0ZSA9IG90eDJfY29udmVydF9yYXRlKG1pbnJhdGUpO1xcbitcXHRcXHRyZXEtXFx1MDAzZXJlZ3ZhbFtuXSA9IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCByYXRlLCAwKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmVxLVxcdTAwM2VyZWd2YWxbbl0gPSAwO1xcbitcXHR9XFxuK1xcdG4rKztcXG4rXFx0cmVxLVxcdTAwM2VudW1fcmVncyA9IG47XFxuK1xcbitcXHRlcnIgPSBvdHgyX3N5bmNfbWJveF9tc2cobWJveCk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2bWJveC1cXHUwMDNlbG9jayk7XFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuIGludCBvdHgyX3R4c2NocV9jb25maWcoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgbHZsLCBpbnQgcHJpbywgYm9vbCB0eHNjaHFfZm9yX3BmYylcXG4ge1xcbiBcXHR1MTYgKCpzY2hxX2xpc3QpW01BWF9UWFNDSFFfUEVSX0ZVTkNdO1xcbkBAIC02NTEsNyArNzg3LDExIEBAIGludCBvdHgyX3R4c2NocV9jb25maWcoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgbHZsLCBpbnQgcHJpbywgYm9vbCB0eHNjaHFfZm9yXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCh1NjQpaHctXFx1MDAzZXNtcV9saW5rX3R5cGUpO1xcbiBcXHRcXHRyZXEtXFx1MDAzZW51bV9yZWdzKys7XFxuIFxcdFxcdC8qIE1EUSBjb25maWcgKi9cXG4tXFx0XFx0cGFyZW50ID0gc2NocV9saXN0W05JWF9UWFNDSF9MVkxfVEw0XVtwcmlvXTtcXG4rXFx0XFx0aWYgKHBmdmYtXFx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KVxcbitcXHRcXHRcXHRwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdWzBdO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bcHJpb107XFxuK1xcbiBcXHRcXHRyZXEtXFx1MDAzZXJlZ1sxXSA9IE5JWF9BRl9NRFFYX1BBUkVOVChzY2hxKTtcXG4gXFx0XFx0cmVxLVxcdTAwM2VyZWd2YWxbMV0gPSBwYXJlbnQgXFx1MDAzY1xcdTAwM2MgMTY7XFxuIFxcdFxcdHJlcS1cXHUwMDNlbnVtX3JlZ3MrKztcXG5AQCAtNzc5LDYgKzkxOSw5IEBAIGludCBvdHgyX3R4c2NoX2FsbG9jKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4gXFx0XFx0cmVxLVxcdTAwM2VzY2hxW05JWF9UWFNDSF9MVkxfVEw0XSA9IGNoYW5fY250O1xcbiBcXHR9XFxuIFxcbitcXHRpZiAocGZ2Zi1cXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpXFxuK1xcdFxcdHJlcS1cXHUwMDNlc2NocVtOSVhfVFhTQ0hfTFZMX1NNUV0gPSBwZnZmLVxcdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcXG4rXFxuIFxcdHJjID0gb3R4Ml9zeW5jX21ib3hfbXNnKFxcdTAwMjZwZnZmLVxcdTAwM2VtYm94KTtcXG4gXFx0aWYgKHJjKVxcbiBcXHRcXHRyZXR1cm4gcmM7XFxuQEAgLTg0NCw2ICs5ODcsNyBAQCB2b2lkIG90eDJfdHhzY2hxX3N0b3Aoc3RydWN0IG90eDJfbmljICpwZnZmKVxcbiBcXG4gXFx0LyogQ2xlYXIgdGhlIHR4c2NocSBsaXN0ICovXFxuIFxcdGZvciAobHZsID0gMDsgbHZsIFxcdTAwM2MgTklYX1RYU0NIX0xWTF9DTlQ7IGx2bCsrKSB7XFxuK1xcdFxcdHBmdmYtXFx1MDAzZWh3LnR4c2NocV9jbnRbbHZsXSA9IDA7XFxuIFxcdFxcdGZvciAoc2NocSA9IDA7IHNjaHEgXFx1MDAzYyBNQVhfVFhTQ0hRX1BFUl9GVU5DOyBzY2hxKyspXFxuIFxcdFxcdFxcdHBmdmYtXFx1MDAzZWh3LnR4c2NocV9saXN0W2x2bF1bc2NocV0gPSAwO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmhcXG5pbmRleCBlZWNlZTYxMmI3YjJjLi42ZTcxMzJmMjdiNjIxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmhcXG5AQCAtMTcsNiArMTcsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc29jL21hcnZlbGwvc2lsaWNvbnMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NvYy9tYXJ2ZWxsL29jdGVvbnR4Mi9hc20uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9tYWNzZWMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3VhcGkvbGludXgvcGt0X3NjaGVkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvcGt0X2Nscy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2RldmxpbmsuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3RpbWU2NC5oXFx1MDAzZVxcbkBAIC00ODMsNiArNDg0LDIzIEBAIHN0cnVjdCBwZl9pcnFfZGF0YSB7XFxuIFxcdGludCBtZGV2cztcXG4gfTtcXG4gXFxuK3N0cnVjdCBtcV9vZmZsb2FkX3NuYXAge1xcbitcXHR1NjQgbWluX3JhdGVbVENfUU9QVF9NQVhfUVVFVUVdO1xcbitcXHR1NjQgbWF4X3JhdGVbVENfUU9QVF9NQVhfUVVFVUVdO1xcbitcXHRfX3U4IG51bV90YztcXG4rXFx0X191MTYgY291bnRbVENfUU9QVF9NQVhfUVVFVUVdO1xcbitcXHRfX3UxNiBvZmZzZXRbVENfUU9QVF9NQVhfUVVFVUVdO1xcbit9O1xcbitcXG4rc3RydWN0IG90eDJfbXFwcmlvIHtcXG4rXFx0dTMyXFx0ZmxhZ3M7XFxuK1xcdHU2NFxcdCptaW5fcmF0ZTtcXG4rXFx0dTY0XFx0Km1heF9yYXRlO1xcbitcXHRib29sXFx0cmF0ZV9saW1pdDtcXG4rXFx0Ym9vbFxcdHJlcGxhY2Vfc2V0dXBfZG9uZTtcXG4rXFx0Ym9vbFxcdHJlcGxhY2VfZ3JhZnRfZG9uZTtcXG4rfTtcXG4rXFxuIHN0cnVjdCBvdHgyX25pYyB7XFxuIFxcdHZvaWQgX19pb21lbVxcdFxcdCpyZWdfYmFzZTtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2VcXHQqbmV0ZGV2O1xcbkBAIC00OTEsMzAgKzUwOSwzNSBAQCBzdHJ1Y3Qgb3R4Ml9uaWMge1xcbiBcXHR1MTZcXHRcXHRcXHR0eF9tYXhfcGt0bGVuO1xcbiBcXHR1MTZcXHRcXHRcXHRyYnNpemU7IC8qIFJlY2VpdmUgYnVmZmVyIHNpemUgKi9cXG4gXFxuLSNkZWZpbmUgT1RYMl9GTEFHX1JYX1RTVEFNUF9FTkFCTEVEXFx0XFx0QklUX1VMTCgwKVxcbi0jZGVmaW5lIE9UWDJfRkxBR19UWF9UU1RBTVBfRU5BQkxFRFxcdFxcdEJJVF9VTEwoMSlcXG4tI2RlZmluZSBPVFgyX0ZMQUdfSU5URl9ET1dOXFx0XFx0XFx0QklUX1VMTCgyKVxcbi0jZGVmaW5lIE9UWDJfRkxBR19NQ0FNX0VOVFJJRVNfQUxMT0NcXHRcXHRCSVRfVUxMKDMpXFxuLSNkZWZpbmUgT1RYMl9GTEFHX05UVVBMRV9TVVBQT1JUXFx0XFx0QklUX1VMTCg0KVxcbi0jZGVmaW5lIE9UWDJfRkxBR19VQ0FTVF9GTFRSX1NVUFBPUlRcXHRcXHRCSVRfVUxMKDUpXFxuLSNkZWZpbmUgT1RYMl9GTEFHX1JYX1ZMQU5fU1VQUE9SVFxcdFxcdEJJVF9VTEwoNilcXG4tI2RlZmluZSBPVFgyX0ZMQUdfVkZfVkxBTl9TVVBQT1JUXFx0XFx0QklUX1VMTCg3KVxcbi0jZGVmaW5lIE9UWDJfRkxBR19QRl9TSFVURE9XTlxcdFxcdFxcdEJJVF9VTEwoOClcXG4tI2RlZmluZSBPVFgyX0ZMQUdfUlhfUEFVU0VfRU5BQkxFRFxcdFxcdEJJVF9VTEwoOSlcXG4tI2RlZmluZSBPVFgyX0ZMQUdfVFhfUEFVU0VfRU5BQkxFRFxcdFxcdEJJVF9VTEwoMTApXFxuLSNkZWZpbmUgT1RYMl9GTEFHX1RDX0ZMT1dFUl9TVVBQT1JUXFx0XFx0QklUX1VMTCgxMSlcXG4tI2RlZmluZSBPVFgyX0ZMQUdfVENfTUFUQ0hBTExfRUdSRVNTX0VOQUJMRURcXHRCSVRfVUxMKDEyKVxcbi0jZGVmaW5lIE9UWDJfRkxBR19UQ19NQVRDSEFMTF9JTkdSRVNTX0VOQUJMRURcXHRCSVRfVUxMKDEzKVxcbi0jZGVmaW5lIE9UWDJfRkxBR19ETUFDRkxUUl9TVVBQT1JUXFx0XFx0QklUX1VMTCgxNClcXG4tI2RlZmluZSBPVFgyX0ZMQUdfUFRQX09ORVNURVBfU1lOQ1xcdFxcdEJJVF9VTEwoMTUpXFxuLSNkZWZpbmUgT1RYMl9GTEFHX0FEUFRWX0lOVF9DT0FMX0VOQUJMRUQgQklUX1VMTCgxNilcXG4tI2RlZmluZSBPVFgyX0ZMQUdfVENfTUFSS19FTkFCTEVEXFx0XFx0QklUX1VMTCgxNylcXG4tI2RlZmluZSBPVFgyX0ZMQUdfUkVQX01PREVfRU5BQkxFRFxcdFxcdCBCSVRfVUxMKDE4KVxcbi0jZGVmaW5lIE9UWDJfRkxBR19QT1JUX1VQXFx0XFx0XFx0QklUX1VMTCgxOSlcXG4tI2RlZmluZSBPVFgyX0ZMQUdfSVBTRUNfT0ZGTE9BRF9FTkFCTEVEXFx0XFx0QklUX1VMTCgyMClcXG4tXFx0dTY0XFx0XFx0XFx0ZmxhZ3M7XFxuKyNkZWZpbmUgT1RYMl9GTEFHX1JYX1RTVEFNUF9FTkFCTEVEXFx0XFx0MFxcbisjZGVmaW5lIE9UWDJfRkxBR19UWF9UU1RBTVBfRU5BQkxFRFxcdFxcdDFcXG4rI2RlZmluZSBPVFgyX0ZMQUdfSU5URl9ET1dOXFx0XFx0XFx0MlxcbisjZGVmaW5lIE9UWDJfRkxBR19NQ0FNX0VOVFJJRVNfQUxMT0NcXHRcXHQzXFxuKyNkZWZpbmUgT1RYMl9GTEFHX05UVVBMRV9TVVBQT1JUXFx0XFx0NFxcbisjZGVmaW5lIE9UWDJfRkxBR19VQ0FTVF9GTFRSX1NVUFBPUlRcXHRcXHQ1XFxuKyNkZWZpbmUgT1RYMl9GTEFHX1JYX1ZMQU5fU1VQUE9SVFxcdFxcdDZcXG4rI2RlZmluZSBPVFgyX0ZMQUdfVkZfVkxBTl9TVVBQT1JUXFx0XFx0N1xcbisjZGVmaW5lIE9UWDJfRkxBR19QRl9TSFVURE9XTlxcdFxcdFxcdDhcXG4rI2RlZmluZSBPVFgyX0ZMQUdfUlhfUEFVU0VfRU5BQkxFRFxcdFxcdDlcXG4rI2RlZmluZSBPVFgyX0ZMQUdfVFhfUEFVU0VfRU5BQkxFRFxcdFxcdDEwXFxuKyNkZWZpbmUgT1RYMl9GTEFHX1RDX0ZMT1dFUl9TVVBQT1JUXFx0XFx0MTFcXG4rI2RlZmluZSBPVFgyX0ZMQUdfVENfTUFUQ0hBTExfRUdSRVNTX0VOQUJMRURcXHQxMlxcbisjZGVmaW5lIE9UWDJfRkxBR19UQ19NQVRDSEFMTF9JTkdSRVNTX0VOQUJMRURcXHQxM1xcbisjZGVmaW5lIE9UWDJfRkxBR19ETUFDRkxUUl9TVVBQT1JUXFx0XFx0MTRcXG4rI2RlZmluZSBPVFgyX0ZMQUdfUFRQX09ORVNURVBfU1lOQ1xcdFxcdDE1XFxuKyNkZWZpbmUgT1RYMl9GTEFHX0FEUFRWX0lOVF9DT0FMX0VOQUJMRURcXHQxNlxcbisjZGVmaW5lIE9UWDJfRkxBR19UQ19NQVJLX0VOQUJMRURcXHRcXHQxN1xcbisjZGVmaW5lIE9UWDJfRkxBR19SRVBfTU9ERV9FTkFCTEVEXFx0XFx0MThcXG4rI2RlZmluZSBPVFgyX0ZMQUdfUE9SVF9VUFxcdFxcdFxcdDE5XFxuKyNkZWZpbmUgT1RYMl9GTEFHX0lQU0VDX09GRkxPQURfRU5BQkxFRFxcdFxcdDIwXFxuKyNkZWZpbmUgT1RYMl9SRVBfVkZfSU5JVElBTElaRURcXHRcXHRcXHQyMVxcbitcXHR1bnNpZ25lZCBsb25nXFx0XFx0ZmxhZ3M7XFxuIFxcdHU2NFxcdFxcdFxcdCpjcV9vcF9hZGRyO1xcbiBcXG4rXFx0c3RydWN0IG90eDJfbXFwcmlvXFx0bXFwcmlvO1xcbitcXHRzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwXFx0KmN1cl9tcV9zbmFwO1xcbitcXHRzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwXFx0Km9sZF9tcV9zbmFwO1xcbitcXG4gXFx0c3RydWN0IGJwZl9wcm9nXFx0XFx0KnhkcF9wcm9nO1xcbiBcXHRzdHJ1Y3Qgb3R4Ml9xc2V0XFx0cXNldDtcXG4gXFx0c3RydWN0IG90eDJfaHdcXHRcXHRodztcXG5AQCAtNTk0LDYgKzYxNywzNCBAQCBzdHJ1Y3Qgb3R4Ml9uaWMge1xcbiBcXHR1bnNpZ25lZCBsb25nXFx0XFx0KmFmX3hkcF96Y19xaWR4O1xcbiB9O1xcbiBcXG4rc3RhdGljIGlubGluZSB2b2lkIG90eDJfc2V0X2ZsYWcoc3RydWN0IG90eDJfbmljICpuaWMsIHVuc2lnbmVkIGludCBmbGFnKVxcbit7XFxuK1xcdHNldF9iaXQoZmxhZywgXFx1MDAyNm5pYy1cXHUwMDNlZmxhZ3MpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgb3R4Ml9jbGVhcl9mbGFnKHN0cnVjdCBvdHgyX25pYyAqbmljLCB1bnNpZ25lZCBpbnQgZmxhZylcXG4re1xcbitcXHRjbGVhcl9iaXQoZmxhZywgXFx1MDAyNm5pYy1cXHUwMDNlZmxhZ3MpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGJvb2wgb3R4Ml90ZXN0X2ZsYWcoc3RydWN0IG90eDJfbmljICpuaWMsIHVuc2lnbmVkIGludCBmbGFnKVxcbit7XFxuK1xcdHJldHVybiB0ZXN0X2JpdChmbGFnLCBcXHUwMDI2bmljLVxcdTAwM2VmbGFncyk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBvdHgyX3N5bmNfZmxhZ3NfZnJvbV9yZXAoc3RydWN0IG90eDJfbmljICpkc3QsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nICpzcmNfZmxhZ3MpXFxuK3tcXG4rXFx0dW5zaWduZWQgaW50IGZsYWc7XFxuK1xcbitcXHRmb3IgKGZsYWcgPSAwOyBmbGFnIFxcdTAwM2M9IE9UWDJfUkVQX1ZGX0lOSVRJQUxJWkVEOyBmbGFnKyspIHtcXG4rXFx0XFx0aWYgKHRlc3RfYml0KGZsYWcsIHNyY19mbGFncykpXFxuK1xcdFxcdFxcdHNldF9iaXQoZmxhZywgXFx1MDAyNmRzdC1cXHUwMDNlZmxhZ3MpO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdGNsZWFyX2JpdChmbGFnLCBcXHUwMDI2ZHN0LVxcdTAwM2VmbGFncyk7XFxuK1xcdH1cXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSBib29sIGlzX290eDJfbGJrdmYoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIHtcXG4gXFx0cmV0dXJuIChwZGV2LVxcdTAwM2VkZXZpY2UgPT0gUENJX0RFVklEX09DVEVPTlRYMl9SVlVfQUZWRikgfHxcXG5AQCAtMTI0Niw2ICsxMjk3LDExIEBAIGRtYV9hZGRyX3Qgb3R4Ml9kbWFfbWFwX3NrYl9mcmFnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcXG4gXFx0XFx0XFx0XFx0IHN0cnVjdCBza19idWZmICpza2IsIGludCBzZWcsIGludCAqbGVuKTtcXG4gdm9pZCBvdHgyX2RtYV91bm1hcF9za2JfZnJhZ3Moc3RydWN0IG90eDJfbmljICpwZnZmLCBzdHJ1Y3Qgc2dfbGlzdCAqc2cpO1xcbiBpbnQgb3R4Ml9yZWFkX2ZyZWVfc3FlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgdTE2IHFpZHgpO1xcbitpbnQgb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCB0eHEsXFxuK1xcdFxcdFxcdFxcdCB1NjQgbWlucmF0ZSwgdTY0IG1heHJhdGUpO1xcbitpbnQgb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XFxuK2ludCBvdHgyX21xcHJpb19kb3duKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XFxuK2ludCBvdHgyX21xcHJpb191cChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xcbiB2b2lkIG90eDJfcXVldWVfdmZfd29yayhzdHJ1Y3QgbWJveCAqbXcsIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICptYm94X3dxLFxcbiBcXHRcXHRcXHRpbnQgZmlyc3QsIGludCBtZGV2cywgdTY0IGludHIpO1xcbiBpbnQgb3R4Ml9kZWxfbWNhbV9mbG93X2VudHJ5KHN0cnVjdCBvdHgyX25pYyAqbmljLCB1MTYgZW50cnksXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jXFxuaW5kZXggOTFkMzQ2ZDExNGFmNS4uYjdiZDA4MTI5ZmI2NCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xcbkBAIC00MTMsNiArNDEzLDEyIEBAIHN0YXRpYyBpbnQgb3R4Ml9kY2JubF9pZWVlX3NldHBmYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWVlZV9wZmMgKnBmYylcXG4gXFx0dTggb2xkX3BmY19lbjtcXG4gXFx0aW50IGVycjtcXG4gXFxuK1xcdGlmIChwZnZmLVxcdTAwM2VtcXByaW8ucmF0ZV9saW1pdCBcXHUwMDI2XFx1MDAyNiBwZmMtXFx1MDAzZXBmY19lbikge1xcbitcXHRcXHRuZXRkZXZfZXJyKGRldixcXG4rXFx0XFx0XFx0ICAgXFxcIlBGQzogY2Fubm90IGVuYWJsZSB3aGlsZSBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgaXMgYWN0aXZlXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbiBcXHRvbGRfcGZjX2VuID0gcGZ2Zi1cXHUwMDNlcGZjX2VuO1xcbiBcXHRwZnZmLVxcdTAwM2VwZmNfZW4gPSBwZmMtXFx1MDAzZXBmY19lbjtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RldmxpbmsuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RldmxpbmsuY1xcbmluZGV4IDRhNWNlMGU2N2RkYTguLjg2M2E1Y2VkOWEyNmIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGV2bGluay5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGV2bGluay5jXFxuQEAgLTEwNCw3ICsxMDQsNyBAQCBzdGF0aWMgaW50IG90eDJfZGxfdWNhc3RfZmx0X2NudF92YWxpZGF0ZShzdHJ1Y3QgZGV2bGluayAqZGV2bGluaywgdTMyIGlkLFxcbiBcXHRzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBvdHgyX2RsLVxcdTAwM2VwZnZmO1xcbiBcXG4gXFx0LyogQ2hlY2sgZm9yIFVOSUNBU1QgZmlsdGVyIHN1cHBvcnQqL1xcbi1cXHRpZiAoIShwZnZmLVxcdTAwM2VmbGFncyBcXHUwMDI2IE9UWDJfRkxBR19VQ0FTVF9GTFRSX1NVUFBPUlQpKSB7XFxuK1xcdGlmICghb3R4Ml90ZXN0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1VDQVNUX0ZMVFJfU1VQUE9SVCkpIHtcXG4gXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcXG4gXFx0XFx0XFx0XFx0ICAgXFxcIlVuaWNhc3QgZmlsdGVyIG5vdCBlbmFibGVkXFxcIik7XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmNcXG5pbmRleCA5YmVlMWI5MWVlYWE2Li5lNjNlYWQzYjExMTNlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuY1xcbkBAIC0yODcsNiArMjg3LDE0IEBAIHN0YXRpYyBpbnQgb3R4Ml9zZXRfY2hhbm5lbHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFxuK1xcdGlmIChwZnZmLVxcdTAwM2VtcXByaW8ucmF0ZV9saW1pdCBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgKGNoYW5uZWwtXFx1MDAzZXR4X2NvdW50ICE9IHBmdmYtXFx1MDAzZWh3LnR4X3F1ZXVlcyB8fFxcbitcXHQgICAgIGNoYW5uZWwtXFx1MDAzZXJ4X2NvdW50ICE9IHBmdmYtXFx1MDAzZWh3LnJ4X3F1ZXVlcykpIHtcXG4rXFx0XFx0bmV0ZGV2X2luZm8oZGV2LFxcbitcXHRcXHRcXHQgICAgXFxcIk5vdCBwZXJtaXR0ZWQgdG8gY2hhbmdlIGNoYW5uZWwgY291bnQgd2hpbGUgTVEgcHJpbyBpcyBhY3RpdmVcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKGlmX3VwKVxcbiBcXHRcXHRkZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19zdG9wKGRldik7XFxuIFxcbkBAIC0zNTQsMTQgKzM2MiwxNCBAQCBzdGF0aWMgaW50IG90eDJfc2V0X3BhdXNlcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiBcXG4gXFx0aWYgKHBhdXNlLVxcdTAwM2VyeF9wYXVzZSlcXG4tXFx0XFx0cGZ2Zi1cXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX1JYX1BBVVNFX0VOQUJMRUQ7XFxuK1xcdFxcdG90eDJfc2V0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1JYX1BBVVNFX0VOQUJMRUQpO1xcbiBcXHRlbHNlXFxuLVxcdFxcdHBmdmYtXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5PVFgyX0ZMQUdfUlhfUEFVU0VfRU5BQkxFRDtcXG4rXFx0XFx0b3R4Ml9jbGVhcl9mbGFnKHBmdmYsIE9UWDJfRkxBR19SWF9QQVVTRV9FTkFCTEVEKTtcXG4gXFxuIFxcdGlmIChwYXVzZS1cXHUwMDNldHhfcGF1c2UpXFxuLVxcdFxcdHBmdmYtXFx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19UWF9QQVVTRV9FTkFCTEVEO1xcbitcXHRcXHRvdHgyX3NldF9mbGFnKHBmdmYsIE9UWDJfRkxBR19UWF9QQVVTRV9FTkFCTEVEKTtcXG4gXFx0ZWxzZVxcbi1cXHRcXHRwZnZmLVxcdTAwM2VmbGFncyBcXHUwMDI2PSB+T1RYMl9GTEFHX1RYX1BBVVNFX0VOQUJMRUQ7XFxuK1xcdFxcdG90eDJfY2xlYXJfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfVFhfUEFVU0VfRU5BQkxFRCk7XFxuIFxcbiBcXHRyZXR1cm4gb3R4Ml9jb25maWdfcGF1c2VfZnJtKHBmdmYpO1xcbiB9XFxuQEAgLTQ3MCw4ICs0NzgsNyBAQCBzdGF0aWMgaW50IG90eDJfZ2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdGNtZC1cXHUwMDNlcnhfbWF4X2NvYWxlc2NlZF9mcmFtZXMgPSBody1cXHUwMDNlY3FfZWNvdW50X3dhaXQ7XFxuIFxcdGNtZC1cXHUwMDNldHhfY29hbGVzY2VfdXNlY3MgPSBody1cXHUwMDNlY3FfdGltZV93YWl0O1xcbiBcXHRjbWQtXFx1MDAzZXR4X21heF9jb2FsZXNjZWRfZnJhbWVzID0gaHctXFx1MDAzZWNxX2Vjb3VudF93YWl0O1xcbi1cXHRpZiAoKHBmdmYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgT1RYMl9GTEFHX0FEUFRWX0lOVF9DT0FMX0VOQUJMRUQpID09XFxuLVxcdFxcdFxcdE9UWDJfRkxBR19BRFBUVl9JTlRfQ09BTF9FTkFCTEVEKSB7XFxuK1xcdGlmIChvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfQURQVFZfSU5UX0NPQUxfRU5BQkxFRCkpIHtcXG4gXFx0XFx0Y21kLVxcdTAwM2V1c2VfYWRhcHRpdmVfcnhfY29hbGVzY2UgPSAxO1xcbiBcXHRcXHRjbWQtXFx1MDAzZXVzZV9hZGFwdGl2ZV90eF9jb2FsZXNjZSA9IDE7XFxuIFxcdH0gZWxzZSB7XFxuQEAgLTUwMiwxNSArNTA5LDE0IEBAIHN0YXRpYyBpbnQgb3R4Ml9zZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFx0fVxcbiBcXG4gXFx0LyogQ2hlY2sgYW5kIHVwZGF0ZSBjb2FsZXNjZSBzdGF0dXMgKi9cXG4tXFx0aWYgKChwZnZmLVxcdTAwM2VmbGFncyBcXHUwMDI2IE9UWDJfRkxBR19BRFBUVl9JTlRfQ09BTF9FTkFCTEVEKSA9PVxcbi1cXHRcXHRcXHRPVFgyX0ZMQUdfQURQVFZfSU5UX0NPQUxfRU5BQkxFRCkge1xcbitcXHRpZiAob3R4Ml90ZXN0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX0FEUFRWX0lOVF9DT0FMX0VOQUJMRUQpKSB7XFxuIFxcdFxcdHByaXZfY29hbGVzY2Vfc3RhdHVzID0gMTtcXG4gXFx0XFx0aWYgKCFlYy1cXHUwMDNldXNlX2FkYXB0aXZlX3J4X2NvYWxlc2NlKVxcbi1cXHRcXHRcXHRwZnZmLVxcdTAwM2VmbGFncyBcXHUwMDI2PSB+T1RYMl9GTEFHX0FEUFRWX0lOVF9DT0FMX0VOQUJMRUQ7XFxuK1xcdFxcdFxcdG90eDJfY2xlYXJfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfQURQVFZfSU5UX0NPQUxfRU5BQkxFRCk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdHByaXZfY29hbGVzY2Vfc3RhdHVzID0gMDtcXG4gXFx0XFx0aWYgKGVjLVxcdTAwM2V1c2VfYWRhcHRpdmVfcnhfY29hbGVzY2UpXFxuLVxcdFxcdFxcdHBmdmYtXFx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19BRFBUVl9JTlRfQ09BTF9FTkFCTEVEO1xcbitcXHRcXHRcXHRvdHgyX3NldF9mbGFnKHBmdmYsIE9UWDJfRkxBR19BRFBUVl9JTlRfQ09BTF9FTkFCTEVEKTtcXG4gXFx0fVxcbiBcXG4gXFx0LyogJ2NxX3RpbWVfd2FpdCcgaXMgOGJpdCBhbmQgaXMgaW4gbXVsdGlwbGUgb2YgMTAwbnMsXFxuQEAgLTU1Niw4ICs1NjIsNyBAQCBzdGF0aWMgaW50IG90eDJfc2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdCAqICdvbicgdG8gJ29mZicuXFxuIFxcdCAqL1xcbiBcXHRpZiAocHJpdl9jb2FsZXNjZV9zdGF0dXMgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgICgocGZ2Zi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBPVFgyX0ZMQUdfQURQVFZfSU5UX0NPQUxfRU5BQkxFRCkgIT1cXG4tXFx0ICAgICBPVFgyX0ZMQUdfQURQVFZfSU5UX0NPQUxfRU5BQkxFRCkpIHtcXG4rXFx0ICAgICghb3R4Ml90ZXN0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX0FEUFRWX0lOVF9DT0FMX0VOQUJMRUQpKSkge1xcbiBcXHRcXHRody1cXHUwMDNlY3FfdGltZV93YWl0ID0gQ1FfVElNRVJfVEhSRVNIX0RFRkFVTFQ7XFxuIFxcdFxcdGh3LVxcdTAwM2VjcV9lY291bnRfd2FpdCA9IENRX0NRRV9USFJFU0hfREVGQVVMVDtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9mbG93cy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZmxvd3MuY1xcbmluZGV4IDk5ZDc4ZmM1YTJjNGEuLmI4ZmY0OWYwZjZlM2IgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZmxvd3MuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2Zsb3dzLmNcXG5AQCAtMjcwLDkgKzI3MCw5IEBAIGludCBvdHgyX2FsbG9jX21jYW1fZW50cmllcyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHUxNiBjb3VudClcXG4gXFx0Zmxvd19jZmctXFx1MDAzZW1heF9mbG93cyA9IGFsbG9jYXRlZDtcXG4gXFxuIFxcdGlmIChhbGxvY2F0ZWQpIHtcXG4tXFx0XFx0cGZ2Zi1cXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX01DQU1fRU5UUklFU19BTExPQztcXG4tXFx0XFx0cGZ2Zi1cXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX05UVVBMRV9TVVBQT1JUO1xcbi1cXHRcXHRwZnZmLVxcdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfVENfRkxPV0VSX1NVUFBPUlQ7XFxuK1xcdFxcdG90eDJfc2V0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX01DQU1fRU5UUklFU19BTExPQyk7XFxuK1xcdFxcdG90eDJfc2V0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX05UVVBMRV9TVVBQT1JUKTtcXG4rXFx0XFx0b3R4Ml9zZXRfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfVENfRkxPV0VSX1NVUFBPUlQpO1xcbiBcXHR9XFxuIFxcbiBcXHRpZiAoYWxsb2NhdGVkICE9IGNvdW50KVxcbkBAIC0zNzYsNyArMzc2LDcgQEAgaW50IG90eDJfbWNhbV9lbnRyeV9pbml0KHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4gXFx0Zmxvd19jZmctXFx1MDAzZXVuaWNhc3Rfb2Zmc2V0ID0gdmZfdmxhbl9tYXhfZmxvd3M7XFxuIFxcdGZsb3dfY2ZnLVxcdTAwM2VyeF92bGFuX29mZnNldCA9IGZsb3dfY2ZnLVxcdTAwM2V1bmljYXN0X29mZnNldCArXFxuIFxcdFxcdFxcdFxcdFxcdGZsb3dfY2ZnLVxcdTAwM2V1Y2FzdF9mbHRfY250O1xcbi1cXHRwZnZmLVxcdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfVUNBU1RfRkxUUl9TVVBQT1JUO1xcbitcXHRvdHgyX3NldF9mbGFnKHBmdmYsIE9UWDJfRkxBR19VQ0FTVF9GTFRSX1NVUFBPUlQpO1xcbiBcXG4gXFx0LyogQ2hlY2sgaWYgTlBDX0RNQUMgZmllbGQgaXMgc3VwcG9ydGVkXFxuIFxcdCAqIGJ5IHRoZSBta2V4IHByb2ZpbGUgYmVmb3JlIHNldHRpbmcgVkxBTiBzdXBwb3J0IGZsYWcuXFxuQEAgLTQwMSwxMSArNDAxLDExIEBAIGludCBvdHgyX21jYW1fZW50cnlfaW5pdChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXFxuIFxcdH1cXG4gXFxuIFxcdGlmIChmcnNwLVxcdTAwM2VlbmFibGUpIHtcXG4tXFx0XFx0cGZ2Zi1cXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX1JYX1ZMQU5fU1VQUE9SVDtcXG4tXFx0XFx0cGZ2Zi1cXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX1ZGX1ZMQU5fU1VQUE9SVDtcXG4rXFx0XFx0b3R4Ml9zZXRfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfUlhfVkxBTl9TVVBQT1JUKTtcXG4rXFx0XFx0b3R4Ml9zZXRfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfVkZfVkxBTl9TVVBQT1JUKTtcXG4gXFx0fVxcbiBcXG4tXFx0cGZ2Zi1cXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX01DQU1fRU5UUklFU19BTExPQztcXG4rXFx0b3R4Ml9zZXRfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfTUNBTV9FTlRSSUVTX0FMTE9DKTtcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwZnZmLVxcdTAwM2VtYm94LmxvY2spO1xcbiBcXG4gXFx0LyogQWxsb2NhdGUgZW50cmllcyBmb3IgTnR1cGxlIGZpbHRlcnMgKi9cXG5AQCAtNDE1LDcgKzQxNSw3IEBAIGludCBvdHgyX21jYW1fZW50cnlfaW5pdChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuIFxcbi1cXHRwZnZmLVxcdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfVENfRkxPV0VSX1NVUFBPUlQ7XFxuK1xcdG90eDJfc2V0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1RDX0ZMT1dFUl9TVVBQT1JUKTtcXG4gXFxuIFxcdHJlZmNvdW50X3NldChcXHUwMDI2Zmxvd19jZmctXFx1MDAzZW1hcmtfZmxvd3MsIDEpO1xcbiBcXHRyZXR1cm4gMDtcXG5AQCAtNDc5LDcgKzQ3OSw3IEBAIGludCBvdHgyX21jYW1fZmxvd19pbml0KHN0cnVjdCBvdHgyX25pYyAqcGYpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbiBcXHQvKiBDaGVjayBpZiBNQ0FNIGVudHJpZXMgYXJlIGFsbG9jYXRlIG9yIG5vdCAqL1xcbi1cXHRpZiAoIShwZi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBPVFgyX0ZMQUdfVUNBU1RfRkxUUl9TVVBQT1JUKSlcXG4rXFx0aWYgKCFvdHgyX3Rlc3RfZmxhZyhwZiwgT1RYMl9GTEFHX1VDQVNUX0ZMVFJfU1VQUE9SVCkpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4gXFx0cGYtXFx1MDAzZW1hY190YWJsZSA9IGRldm1fa3phbGxvYyhwZi1cXHUwMDNlZGV2LCBzaXplb2Yoc3RydWN0IG90eDJfbWFjX3RhYmxlKVxcbkBAIC01MDEsNyArNTAxLDcgQEAgaW50IG90eDJfbWNhbV9mbG93X2luaXQoc3RydWN0IG90eDJfbmljICpwZilcXG4gXFx0aWYgKCFwZi1cXHUwMDNlZmxvd19jZmctXFx1MDAzZWJtYXBfdG9fZG1hY2luZGV4KVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuLVxcdHBmLVxcdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfRE1BQ0ZMVFJfU1VQUE9SVDtcXG4rXFx0b3R4Ml9zZXRfZmxhZyhwZiwgT1RYMl9GTEFHX0RNQUNGTFRSX1NVUFBPUlQpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtNTIxLDcgKzUyMSw3IEBAIHN0YXRpYyBpbnQgb3R4Ml9kb19hZGRfbWFjZmlsdGVyKHN0cnVjdCBvdHgyX25pYyAqcGYsIGNvbnN0IHU4ICptYWMpXFxuIFxcdHN0cnVjdCBucGNfaW5zdGFsbF9mbG93X3JlcSAqcmVxO1xcbiBcXHRpbnQgZXJyLCBpO1xcbiBcXG4tXFx0aWYgKCEocGYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgT1RYMl9GTEFHX1VDQVNUX0ZMVFJfU1VQUE9SVCkpXFxuK1xcdGlmICghb3R4Ml90ZXN0X2ZsYWcocGYsIE9UWDJfRkxBR19VQ0FTVF9GTFRSX1NVUFBPUlQpKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuIFxcdC8qIGRvbnQgaGF2ZSBmcmVlIG1jYW0gZW50cmllcyBvciB1YyBsaXN0IGlzIGdyZWF0ZXIgdGhhbiBhbGxvdGVkICovXFxuQEAgLTExNjcsNyArMTE2Nyw3IEBAIHN0YXRpYyBpbnQgb3R4Ml9pc19mbG93X3J1bGVfZG1hY2ZpbHRlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXFxuIFxcdHU2NCByaW5nX2Nvb2tpZSA9IGZzcC1cXHUwMDNlcmluZ19jb29raWU7XFxuIFxcdHUzMiBmbG93X3R5cGU7XFxuIFxcbi1cXHRpZiAoIShwZnZmLVxcdTAwM2VmbGFncyBcXHUwMDI2IE9UWDJfRkxBR19ETUFDRkxUUl9TVVBQT1JUKSlcXG4rXFx0aWYgKCFvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfRE1BQ0ZMVFJfU1VQUE9SVCkpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuIFxcdGZsb3dfdHlwZSA9IGZzcC1cXHUwMDNlZmxvd190eXBlIFxcdTAwMjYgfihGTE9XX0VYVCB8IEZMT1dfTUFDX0VYVCB8IEZMT1dfUlNTKTtcXG5AQCAtMTM2NCw3ICsxMzY0LDcgQEAgaW50IG90eDJfYWRkX2Zsb3coc3RydWN0IG90eDJfbmljICpwZnZmLCBzdHJ1Y3QgZXRodG9vbF9yeG5mYyAqbmZjKVxcbiBcXHR9XFxuIFxcbiBcXHRyaW5nID0gZXRodG9vbF9nZXRfZmxvd19zcGVjX3JpbmcoZnNwLVxcdTAwM2VyaW5nX2Nvb2tpZSk7XFxuLVxcdGlmICghKHBmdmYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgT1RYMl9GTEFHX05UVVBMRV9TVVBQT1JUKSlcXG4rXFx0aWYgKCFvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfTlRVUExFX1NVUFBPUlQpKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuIFxcdC8qIE51bWJlciBvZiBxdWV1ZXMgb24gYSBWRiBjYW4gYmUgZ3JlYXRlciBvciBsZXNzIHRoYW5cXG5AQCAtMTU5Niw3ICsxNTk2LDcgQEAgaW50IG90eDJfZGVzdHJveV9udHVwbGVfZmxvd3Moc3RydWN0IG90eDJfbmljICpwZnZmKVxcbiBcXHRzdHJ1Y3Qgb3R4Ml9mbG93ICppdGVyLCAqdG1wO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4tXFx0aWYgKCEocGZ2Zi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBPVFgyX0ZMQUdfTlRVUExFX1NVUFBPUlQpKVxcbitcXHRpZiAoIW90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19OVFVQTEVfU1VQUE9SVCkpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4gXFx0aWYgKCFmbG93X2NmZy1cXHUwMDNlbWF4X2Zsb3dzKVxcbkBAIC0xNjI5LDcgKzE2MjksNyBAQCBpbnQgb3R4Ml9kZXN0cm95X21jYW1fZmxvd3Moc3RydWN0IG90eDJfbmljICpwZnZmKVxcbiBcXHRzdHJ1Y3Qgb3R4Ml9mbG93ICppdGVyLCAqdG1wO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4tXFx0aWYgKCEocGZ2Zi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBPVFgyX0ZMQUdfTUNBTV9FTlRSSUVTX0FMTE9DKSlcXG4rXFx0aWYgKCFvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfTUNBTV9FTlRSSUVTX0FMTE9DKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBcXHQvKiByZW1vdmUgYWxsIGZsb3dzICovXFxuQEAgLTE2NTgsNyArMTY1OCw3IEBAIGludCBvdHgyX2Rlc3Ryb3lfbWNhbV9mbG93cyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdH1cXG4gXFxuLVxcdHBmdmYtXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5PVFgyX0ZMQUdfTUNBTV9FTlRSSUVTX0FMTE9DO1xcbitcXHRvdHgyX2NsZWFyX2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX01DQU1fRU5UUklFU19BTExPQyk7XFxuIFxcdGZsb3dfY2ZnLVxcdTAwM2VtYXhfZmxvd3MgPSAwO1xcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNnBmdmYtXFx1MDAzZW1ib3gubG9jayk7XFxuIFxcbkBAIC0xNzIxLDcgKzE3MjEsNyBAQCBpbnQgb3R4Ml9lbmFibGVfcnh2bGFuKHN0cnVjdCBvdHgyX25pYyAqcGYsIGJvb2wgZW5hYmxlKVxcbiBcXHRpbnQgZXJyO1xcbiBcXG4gXFx0LyogRG9udCBoYXZlIGVub3VnaCBtY2FtIGVudHJpZXMgKi9cXG4tXFx0aWYgKCEocGYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgT1RYMl9GTEFHX1JYX1ZMQU5fU1VQUE9SVCkpXFxuK1xcdGlmICghb3R4Ml90ZXN0X2ZsYWcocGYsIE9UWDJfRkxBR19SWF9WTEFOX1NVUFBPUlQpKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuIFxcdGlmIChlbmFibGUpIHtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNcXG5pbmRleCBjMGUyMTAwZGUxZDkzLi4xZTE3ZjhkNDlmZDQ0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXFxuQEAgLTg3OSw3ICs4NzksNyBAQCBzdGF0aWMgdm9pZCBvdHgyX2hhbmRsZV9saW5rX2V2ZW50KHN0cnVjdCBvdHgyX25pYyAqcGYpXFxuIFxcdHN0cnVjdCBjZ3hfbGlua191c2VyX2luZm8gKmxpbmZvID0gXFx1MDAyNnBmLVxcdTAwM2VsaW5mbztcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmLVxcdTAwM2VuZXRkZXY7XFxuIFxcbi1cXHRpZiAocGYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgT1RYMl9GTEFHX1BPUlRfVVApXFxuK1xcdGlmIChvdHgyX3Rlc3RfZmxhZyhwZiwgT1RYMl9GTEFHX1BPUlRfVVApKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRwcl9pbmZvKFxcXCIlcyBOSUMgTGluayBpcyAlcyAlZCBNYnBzICVzIGR1cGxleFxcXFxuXFxcIiwgbmV0ZGV2LVxcdTAwM2VuYW1lLFxcbkBAIC05MDcsMTEgKzkwNywxMSBAQCBzdGF0aWMgaW50IG90eDJfbWJveF91cF9oYW5kbGVyX3JlcF9ldmVudF91cF9ub3RpZnkoc3RydWN0IG90eDJfbmljICpwZixcXG4gXFxuIFxcdGlmIChpbmZvLVxcdTAwM2VldmVudCA9PSBSVlVfRVZFTlRfUE9SVF9TVEFURSkge1xcbiBcXHRcXHRpZiAoaW5mby1cXHUwMDNlZXZ0X2RhdGEucG9ydF9zdGF0ZSkge1xcbi1cXHRcXHRcXHRwZi1cXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX1BPUlRfVVA7XFxuK1xcdFxcdFxcdG90eDJfc2V0X2ZsYWcocGYsIE9UWDJfRkxBR19QT1JUX1VQKTtcXG4gXFx0XFx0XFx0bmV0aWZfY2Fycmllcl9vbihuZXRkZXYpO1xcbiBcXHRcXHRcXHRuZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKG5ldGRldik7XFxuIFxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdHBmLVxcdTAwM2VmbGFncyBcXHUwMDI2PSB+T1RYMl9GTEFHX1BPUlRfVVA7XFxuK1xcdFxcdFxcdG90eDJfY2xlYXJfZmxhZyhwZiwgT1RYMl9GTEFHX1BPUlRfVVApO1xcbiBcXHRcXHRcXHRuZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTtcXG4gXFx0XFx0XFx0bmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTtcXG4gXFx0XFx0fVxcbkBAIC05NTMsNyArOTUzLDcgQEAgaW50IG90eDJfbWJveF91cF9oYW5kbGVyX2NneF9saW5rX2V2ZW50KHN0cnVjdCBvdHgyX25pYyAqcGYsXFxuIFxcdH1cXG4gXFxuIFxcdC8qIGludGVyZmFjZSBoYXMgbm90IGJlZW4gZnVsbHkgY29uZmlndXJlZCB5ZXQgKi9cXG4tXFx0aWYgKHBmLVxcdTAwM2VmbGFncyBcXHUwMDI2IE9UWDJfRkxBR19JTlRGX0RPV04pXFxuK1xcdGlmIChvdHgyX3Rlc3RfZmxhZyhwZiwgT1RYMl9GTEFHX0lOVEZfRE9XTikpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4gXFx0b3R4Ml9oYW5kbGVfbGlua19ldmVudChwZik7XFxuQEAgLTE4MjgsNyArMTgyOCw3IEBAIHZvaWQgb3R4Ml9mcmVlX2h3X3Jlc291cmNlcyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmKVxcbiBcXHRmcmVlX3JlcSA9IG90eDJfbWJveF9hbGxvY19tc2dfbml4X2xmX2ZyZWUobWJveCk7XFxuIFxcdGlmIChmcmVlX3JlcSkge1xcbiBcXHRcXHRmcmVlX3JlcS1cXHUwMDNlZmxhZ3MgPSBOSVhfTEZfRElTQUJMRV9GTE9XUyB8IE5JWF9MRl9ET05UX0ZSRUVfREZUX0lEWFM7XFxuLVxcdFxcdGlmICghKHBmLVxcdTAwM2VmbGFncyBcXHUwMDI2IE9UWDJfRkxBR19QRl9TSFVURE9XTikpXFxuK1xcdFxcdGlmICghb3R4Ml90ZXN0X2ZsYWcocGYsIE9UWDJfRkxBR19QRl9TSFVURE9XTikpXFxuIFxcdFxcdFxcdGZyZWVfcmVxLVxcdTAwM2VmbGFncyB8PSBOSVhfTEZfRE9OVF9GUkVFX1RYX1ZUQUc7XFxuIFxcdFxcdGlmIChvdHgyX3N5bmNfbWJveF9tc2cobWJveCkpXFxuIFxcdFxcdFxcdGRldl9lcnIocGYtXFx1MDAzZWRldiwgXFxcIiVzIGZhaWxlZCB0byBmcmVlIG5peGxmXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuQEAgLTIwMDcsNiArMjAwNywxNCBAQCBpbnQgb3R4Ml9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdGdvdG8gZXJyX2ZyZWVfbWVtO1xcbiBcXG4rXFx0ZXJyID0gb3R4Ml9tcXByaW9fdXAocGYpO1xcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIocGYtXFx1MDAzZW5ldGRldixcXG4rXFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogZmFpbGVkIHRvIHJlc3RvcmUgc2hhcGVycyBkdXJpbmcgb3BlbjogJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgIGVycik7XFxuK1xcdFxcdGdvdG8gZXJyX2ZyZWVfaHc7XFxuK1xcdH1cXG4rXFxuIFxcdC8qIFJlZ2lzdGVyIE5BUEkgaGFuZGxlciAqL1xcbiBcXHRmb3IgKHFpZHggPSAwOyBxaWR4IFxcdTAwM2MgcGYtXFx1MDAzZWh3LmNpbnRfY250OyBxaWR4KyspIHtcXG4gXFx0XFx0Y3FfcG9sbCA9IFxcdTAwMjZxc2V0LVxcdTAwM2VuYXBpW3FpZHhdO1xcbkBAIC0yMTM1LDIxICsyMTQzLDIxIEBAIGludCBvdHgyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4gXFx0fVxcbiBcXHRvdHgyX3dyaXRlNjQocGYsIE5JWF9MRl9SQVNfRU5BX1cxUywgTklYX0xGX1JBU19NQVNLKTtcXG4gXFxuLVxcdGlmIChwZi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBPVFgyX0ZMQUdfUlhfVkxBTl9TVVBQT1JUKVxcbitcXHRpZiAob3R4Ml90ZXN0X2ZsYWcocGYsIE9UWDJfRkxBR19SWF9WTEFOX1NVUFBPUlQpKVxcbiBcXHRcXHRvdHgyX2VuYWJsZV9yeHZsYW4ocGYsIHRydWUpO1xcbiBcXG4gXFx0LyogV2hlbiByZWluaXRpYWxpemluZyBlbmFibGUgdGltZSBzdGFtcGluZyBpZiBpdCBpcyBlbmFibGVkIGJlZm9yZSAqL1xcbi1cXHRpZiAocGYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgT1RYMl9GTEFHX1RYX1RTVEFNUF9FTkFCTEVEKSB7XFxuLVxcdFxcdHBmLVxcdTAwM2VmbGFncyBcXHUwMDI2PSB+T1RYMl9GTEFHX1RYX1RTVEFNUF9FTkFCTEVEO1xcbitcXHRpZiAob3R4Ml90ZXN0X2ZsYWcocGYsIE9UWDJfRkxBR19UWF9UU1RBTVBfRU5BQkxFRCkpIHtcXG4rXFx0XFx0b3R4Ml9jbGVhcl9mbGFnKHBmLCBPVFgyX0ZMQUdfVFhfVFNUQU1QX0VOQUJMRUQpO1xcbiBcXHRcXHRvdHgyX2NvbmZpZ19od190eF90c3RhbXAocGYsIHRydWUpO1xcbiBcXHR9XFxuLVxcdGlmIChwZi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBPVFgyX0ZMQUdfUlhfVFNUQU1QX0VOQUJMRUQpIHtcXG4tXFx0XFx0cGYtXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5PVFgyX0ZMQUdfUlhfVFNUQU1QX0VOQUJMRUQ7XFxuK1xcdGlmIChvdHgyX3Rlc3RfZmxhZyhwZiwgT1RYMl9GTEFHX1JYX1RTVEFNUF9FTkFCTEVEKSkge1xcbitcXHRcXHRvdHgyX2NsZWFyX2ZsYWcocGYsIE9UWDJfRkxBR19SWF9UU1RBTVBfRU5BQkxFRCk7XFxuIFxcdFxcdG90eDJfY29uZmlnX2h3X3J4X3RzdGFtcChwZiwgdHJ1ZSk7XFxuIFxcdH1cXG4gXFxuLVxcdHBmLVxcdTAwM2VmbGFncyBcXHUwMDI2PSB+T1RYMl9GTEFHX0lOVEZfRE9XTjtcXG4tXFx0cGYtXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5PVFgyX0ZMQUdfUE9SVF9VUDtcXG4rXFx0b3R4Ml9jbGVhcl9mbGFnKHBmLCBPVFgyX0ZMQUdfSU5URl9ET1dOKTtcXG4rXFx0b3R4Ml9jbGVhcl9mbGFnKHBmLCBPVFgyX0ZMQUdfUE9SVF9VUCk7XFxuIFxcdC8qICdpbnRmX2Rvd24nIG1heSBiZSBjaGVja2VkIG9uIGFueSBjcHUgKi9cXG4gXFx0c21wX3dtYigpO1xcbiBcXG5AQCAtMjE2MSw3ICsyMTY5LDcgQEAgaW50IG90eDJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiBcXHRcXHRvdHgyX2hhbmRsZV9saW5rX2V2ZW50KHBmKTtcXG4gXFxuIFxcdC8qIEluc3RhbGwgRE1BQyBGaWx0ZXJzICovXFxuLVxcdGlmIChwZi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBPVFgyX0ZMQUdfRE1BQ0ZMVFJfU1VQUE9SVClcXG4rXFx0aWYgKG90eDJfdGVzdF9mbGFnKHBmLCBPVFgyX0ZMQUdfRE1BQ0ZMVFJfU1VQUE9SVCkpXFxuIFxcdFxcdG90eDJfZG1hY2ZsdF9yZWluc3RhbGxfZmxvd3MocGYpO1xcbiBcXG4gXFx0b3R4Ml90Y19hcHBseV9pbmdyZXNzX3BvbGljZV9ydWxlcyhwZik7XFxuQEAgLTIxODYsNyArMjE5NCw3IEBAIGludCBvdHgyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4gZXJyX3R4X3N0b3BfcXVldWVzOlxcbiBcXHRuZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTtcXG4gXFx0bmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTtcXG4tXFx0cGYtXFx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19JTlRGX0RPV047XFxuK1xcdG90eDJfc2V0X2ZsYWcocGYsIE9UWDJfRkxBR19JTlRGX0RPV04pO1xcbiBcXHQvKiBmcmVlIE5JWExGIFBPSVNPTiBpcnEgKi9cXG4gXFx0dmVjID0gcGNpX2lycV92ZWN0b3IocGYtXFx1MDAzZXBkZXYsXFxuIFxcdFxcdFxcdCAgICAgcGYtXFx1MDAzZWh3Lm5peF9tc2l4b2ZmICsgTklYX0xGX1BPSVNPTl9WRUMpO1xcbkBAIC0yMjA1LDYgKzIyMTMsNyBAQCBpbnQgb3R4Ml9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIFxcdGZyZWVfaXJxKHZlYywgcGYpO1xcbiBlcnJfZGlzYWJsZV9uYXBpOlxcbiBcXHRvdHgyX2Rpc2FibGVfbmFwaShwZik7XFxuK2Vycl9mcmVlX2h3OlxcbiBcXHRvdHgyX2ZyZWVfaHdfcmVzb3VyY2VzKHBmKTtcXG4gZXJyX2ZyZWVfbWVtOlxcbiBcXHRvdHgyX2ZyZWVfcXVldWVfbWVtKHFzZXQpO1xcbkBAIC0yMjIwLDEzICsyMjI5LDEzIEBAIGludCBvdHgyX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4gXFx0aW50IHFpZHgsIHZlYywgd3JrO1xcbiBcXG4gXFx0LyogSWYgdGhlIERPV04gZmxhZyBpcyBzZXQgcmVzb3VyY2VzIGFyZSBhbHJlYWR5IGZyZWVkICovXFxuLVxcdGlmIChwZi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBPVFgyX0ZMQUdfSU5URl9ET1dOKVxcbitcXHRpZiAob3R4Ml90ZXN0X2ZsYWcocGYsIE9UWDJfRkxBR19JTlRGX0RPV04pKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdG5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7XFxuIFxcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpO1xcbiBcXG4tXFx0cGYtXFx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19JTlRGX0RPV047XFxuK1xcdG90eDJfc2V0X2ZsYWcocGYsIE9UWDJfRkxBR19JTlRGX0RPV04pO1xcbiBcXHQvKiAnaW50Zl9kb3duJyBtYXkgYmUgY2hlY2tlZCBvbiBhbnkgY3B1ICovXFxuIFxcdHNtcF93bWIoKTtcXG4gXFxuQEAgLTIyODAsNiArMjI4OSw3IEBAIGludCBvdHgyX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4gXFx0Zm9yIChxaWR4ID0gMDsgcWlkeCBcXHUwMDNjIG5ldGRldi1cXHUwMDNlbnVtX3R4X3F1ZXVlczsgcWlkeCsrKVxcbiBcXHRcXHRuZXRkZXZfdHhfcmVzZXRfcXVldWUobmV0ZGV2X2dldF90eF9xdWV1ZShuZXRkZXYsIHFpZHgpKTtcXG4gXFxuK1xcdHN5bmNocm9uaXplX25ldCgpO1xcbiBcXHRvdHgyX2ZyZWVfcXVldWVfbWVtKHFzZXQpO1xcbiBcXHQvKiBEbyBub3QgY2xlYXIgUlEvU1EgcmluZ3NpemUgc2V0dGluZ3MgKi9cXG4gXFx0bWVtc2V0X3N0YXJ0YXQocXNldCwgMCwgc3FlX2NudCk7XFxuQEAgLTI0NTcsNyArMjQ2Nyw3IEBAIHN0YXRpYyBpbnQgb3R4Ml9jb25maWdfaHdfcnhfdHN0YW1wKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgYm9vbCBlbmFibGUpXFxuIFxcdHN0cnVjdCBtc2dfcmVxICpyZXE7XFxuIFxcdGludCBlcnI7XFxuIFxcbi1cXHRpZiAocGZ2Zi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBPVFgyX0ZMQUdfUlhfVFNUQU1QX0VOQUJMRUQgXFx1MDAyNlxcdTAwMjYgZW5hYmxlKVxcbitcXHRpZiAob3R4Ml90ZXN0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1JYX1RTVEFNUF9FTkFCTEVEKSBcXHUwMDI2XFx1MDAyNiBlbmFibGUpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2cGZ2Zi1cXHUwMDNlbWJveC5sb2NrKTtcXG5AQCAtMjQ3OCw5ICsyNDg4LDkgQEAgc3RhdGljIGludCBvdHgyX2NvbmZpZ19od19yeF90c3RhbXAoc3RydWN0IG90eDJfbmljICpwZnZmLCBib29sIGVuYWJsZSlcXG4gXFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2cGZ2Zi1cXHUwMDNlbWJveC5sb2NrKTtcXG4gXFx0aWYgKGVuYWJsZSlcXG4tXFx0XFx0cGZ2Zi1cXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX1JYX1RTVEFNUF9FTkFCTEVEO1xcbitcXHRcXHRvdHgyX3NldF9mbGFnKHBmdmYsIE9UWDJfRkxBR19SWF9UU1RBTVBfRU5BQkxFRCk7XFxuIFxcdGVsc2VcXG4tXFx0XFx0cGZ2Zi1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gfk9UWDJfRkxBR19SWF9UU1RBTVBfRU5BQkxFRDtcXG4rXFx0XFx0b3R4Ml9jbGVhcl9mbGFnKHBmdmYsIE9UWDJfRkxBR19SWF9UU1RBTVBfRU5BQkxFRCk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC0yNDg5LDcgKzI0OTksNyBAQCBzdGF0aWMgaW50IG90eDJfY29uZmlnX2h3X3R4X3RzdGFtcChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGJvb2wgZW5hYmxlKVxcbiBcXHRzdHJ1Y3QgbXNnX3JlcSAqcmVxO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4tXFx0aWYgKHBmdmYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgT1RYMl9GTEFHX1RYX1RTVEFNUF9FTkFCTEVEIFxcdTAwMjZcXHUwMDI2IGVuYWJsZSlcXG4rXFx0aWYgKG90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19UWF9UU1RBTVBfRU5BQkxFRCkgXFx1MDAyNlxcdTAwMjYgZW5hYmxlKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNnBmdmYtXFx1MDAzZW1ib3gubG9jayk7XFxuQEAgLTI1MTAsOSArMjUyMCw5IEBAIHN0YXRpYyBpbnQgb3R4Ml9jb25maWdfaHdfdHhfdHN0YW1wKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgYm9vbCBlbmFibGUpXFxuIFxcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNnBmdmYtXFx1MDAzZW1ib3gubG9jayk7XFxuIFxcdGlmIChlbmFibGUpXFxuLVxcdFxcdHBmdmYtXFx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19UWF9UU1RBTVBfRU5BQkxFRDtcXG4rXFx0XFx0b3R4Ml9zZXRfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfVFhfVFNUQU1QX0VOQUJMRUQpO1xcbiBcXHRlbHNlXFxuLVxcdFxcdHBmdmYtXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5PVFgyX0ZMQUdfVFhfVFNUQU1QX0VOQUJMRUQ7XFxuK1xcdFxcdG90eDJfY2xlYXJfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfVFhfVFNUQU1QX0VOQUJMRUQpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtMjUzNyw4ICsyNTQ3LDggQEAgaW50IG90eDJfY29uZmlnX2h3dHN0YW1wX3NldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXG4gXFx0c3dpdGNoIChjb25maWctXFx1MDAzZXR4X3R5cGUpIHtcXG4gXFx0Y2FzZSBIV1RTVEFNUF9UWF9PRkY6XFxuLVxcdFxcdGlmIChwZnZmLVxcdTAwM2VmbGFncyBcXHUwMDI2IE9UWDJfRkxBR19QVFBfT05FU1RFUF9TWU5DKVxcbi1cXHRcXHRcXHRwZnZmLVxcdTAwM2VmbGFncyBcXHUwMDI2PSB+T1RYMl9GTEFHX1BUUF9PTkVTVEVQX1NZTkM7XFxuK1xcdFxcdGlmIChvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfUFRQX09ORVNURVBfU1lOQykpXFxuK1xcdFxcdFxcdG90eDJfY2xlYXJfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfUFRQX09ORVNURVBfU1lOQyk7XFxuIFxcbiBcXHRcXHRjYW5jZWxfZGVsYXllZF93b3JrKFxcdTAwMjZwZnZmLVxcdTAwM2VwdHAtXFx1MDAzZXN5bmN0c3RhbXBfd29yayk7XFxuIFxcdFxcdG90eDJfY29uZmlnX2h3X3R4X3RzdGFtcChwZnZmLCBmYWxzZSk7XFxuQEAgLTI1NDksNyArMjU1OSw3IEBAIGludCBvdHgyX2NvbmZpZ19od3RzdGFtcF9zZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgXFxcIk9uZS1zdGVwIHRpbWUgc3RhbXBpbmcgaXMgbm90IHN1cHBvcnRlZFxcXCIpO1xcbiBcXHRcXHRcXHRyZXR1cm4gLUVSQU5HRTtcXG4gXFx0XFx0fVxcbi1cXHRcXHRwZnZmLVxcdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfUFRQX09ORVNURVBfU1lOQztcXG4rXFx0XFx0b3R4Ml9zZXRfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfUFRQX09ORVNURVBfU1lOQyk7XFxuIFxcdFxcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcXHUwMDI2cGZ2Zi1cXHUwMDNlcHRwLVxcdTAwM2VzeW5jdHN0YW1wX3dvcmssXFxuIFxcdFxcdFxcdFxcdCAgICAgIG1zZWNzX3RvX2ppZmZpZXMoNTAwKSk7XFxuIFxcdFxcdGZhbGx0aHJvdWdoO1xcbkBAIC0yODM1LDcgKzI4NDUsNyBAQCBzdGF0aWMgaW50IG90eDJfc2V0X3ZmX3ZsYW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHZmLCB1MTYgdmxhbiwgdTggcW9zLFxcbiBcXHRpZiAocHJvdG8gIT0gaHRvbnMoRVRIX1BfODAyMVEpKVxcbiBcXHRcXHRyZXR1cm4gLUVQUk9UT05PU1VQUE9SVDtcXG4gXFxuLVxcdGlmICghKHBmLVxcdTAwM2VmbGFncyBcXHUwMDI2IE9UWDJfRkxBR19WRl9WTEFOX1NVUFBPUlQpKVxcbitcXHRpZiAoIW90eDJfdGVzdF9mbGFnKHBmLCBPVFgyX0ZMQUdfVkZfVkxBTl9TVVBQT1JUKSlcXG4gXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiBcXG4gXFx0cmV0dXJuIG90eDJfZG9fc2V0X3ZmX3ZsYW4ocGYsIHZmLCB2bGFuLCBxb3MsIHByb3RvKTtcXG5AQCAtMjkyMyw2ICsyOTMzLDEyIEBAIHN0YXRpYyBpbnQgb3R4Ml94ZHBfc2V0dXAoc3RydWN0IG90eDJfbmljICpwZiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbiBcXHRib29sIGlmX3VwID0gbmV0aWZfcnVubmluZyhwZi1cXHUwMDNlbmV0ZGV2KTtcXG4gXFx0c3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZztcXG4gXFxuK1xcdGlmIChwcm9nIFxcdTAwMjZcXHUwMDI2IHBmLVxcdTAwM2VtcXByaW8ucmF0ZV9saW1pdCkge1xcbitcXHRcXHRuZXRkZXZfZXJyKGRldixcXG4rXFx0XFx0XFx0ICAgXFxcIlhEUDogY2Fubm90IGF0dGFjaCB3aGlsZSBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgaXMgYWN0aXZlXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbiBcXHRpZiAocHJvZyBcXHUwMDI2XFx1MDAyNiBkZXYtXFx1MDAzZW10dSBcXHUwMDNlIE1BWF9YRFBfTVRVKSB7XFxuIFxcdFxcdG5ldGRldl93YXJuKGRldiwgXFxcIkp1bWJvIGZyYW1lcyBub3QgeWV0IHN1cHBvcnRlZCB3aXRoIFhEUFxcXFxuXFxcIik7XFxuIFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG5AQCAtMzA4Niw3ICszMTAyLDcgQEAgaW50IG90eDJfcmVhbGxvY19tc2l4X3ZlY3RvcnMoc3RydWN0IG90eDJfbmljICpwZilcXG4gXFx0ICogaW50ZXJydXB0IHJhbmdlIChRSU5ULCBDSU5ULCBHSU5ULCBFUlIgYW5kIFBPSVNPTiB2ZWN0b3JzKS5cXG4gXFx0ICovXFxuIFxcdG51bV92ZWMgPSBody1cXHUwMDNlbml4X21zaXhvZmY7XFxuLVxcdGlmIChwZi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBPVFgyX0ZMQUdfUkVQX01PREVfRU5BQkxFRClcXG4rXFx0aWYgKG90eDJfdGVzdF9mbGFnKHBmLCBPVFgyX0ZMQUdfUkVQX01PREVfRU5BQkxFRCkpXFxuIFxcdFxcdG51bV92ZWMgKz0gTklYX0xGX0NJTlRfVkVDX1NUQVJUICsgaHctXFx1MDAzZW1heF9xdWV1ZXM7XFxuIFxcdGVsc2VcXG4gXFx0XFx0bnVtX3ZlYyArPSBOSVhfTEZfUE9JU09OX1ZFQyArIDE7XFxuQEAgLTMyNzMsNyArMzI4OSw3IEBAIHN0YXRpYyBpbnQgb3R4Ml9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxcbiBcXHRwZi1cXHUwMDNlcGRldiA9IHBkZXY7XFxuIFxcdHBmLVxcdTAwM2VkZXYgPSBkZXY7XFxuIFxcdHBmLVxcdTAwM2V0b3RhbF92ZnMgPSBwY2lfc3Jpb3ZfZ2V0X3RvdGFsdmZzKHBkZXYpO1xcbi1cXHRwZi1cXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX0lOVEZfRE9XTjtcXG4rXFx0b3R4Ml9zZXRfZmxhZyhwZiwgT1RYMl9GTEFHX0lOVEZfRE9XTik7XFxuIFxcbiBcXHRodyA9IFxcdTAwMjZwZi1cXHUwMDNlaHc7XFxuIFxcdGh3LVxcdTAwM2VwZGV2ID0gcGRldjtcXG5AQCAtMzMyOCwyMyArMzM0NCwyMyBAQCBzdGF0aWMgaW50IG90eDJfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBlcnJfZGVsX21jYW1fZW50cmllcztcXG4gXFxuLVxcdGlmIChwZi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBPVFgyX0ZMQUdfTlRVUExFX1NVUFBPUlQpXFxuK1xcdGlmIChvdHgyX3Rlc3RfZmxhZyhwZiwgT1RYMl9GTEFHX05UVVBMRV9TVVBQT1JUKSlcXG4gXFx0XFx0bmV0ZGV2LVxcdTAwM2Vod19mZWF0dXJlcyB8PSBORVRJRl9GX05UVVBMRTtcXG4gXFxuLVxcdGlmIChwZi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBPVFgyX0ZMQUdfVUNBU1RfRkxUUl9TVVBQT1JUKVxcbitcXHRpZiAob3R4Ml90ZXN0X2ZsYWcocGYsIE9UWDJfRkxBR19VQ0FTVF9GTFRSX1NVUFBPUlQpKVxcbiBcXHRcXHRuZXRkZXYtXFx1MDAzZXByaXZfZmxhZ3MgfD0gSUZGX1VOSUNBU1RfRkxUO1xcbiBcXG4gXFx0LyogU3VwcG9ydCBUU08gb24gdGFnIGludGVyZmFjZSAqL1xcbiBcXHRuZXRkZXYtXFx1MDAzZXZsYW5fZmVhdHVyZXMgfD0gbmV0ZGV2LVxcdTAwM2VmZWF0dXJlcztcXG4gXFx0bmV0ZGV2LVxcdTAwM2Vod19mZWF0dXJlcyAgfD0gTkVUSUZfRl9IV19WTEFOX0NUQUdfVFggfFxcbiBcXHRcXHRcXHRcXHRORVRJRl9GX0hXX1ZMQU5fU1RBR19UWDtcXG4tXFx0aWYgKHBmLVxcdTAwM2VmbGFncyBcXHUwMDI2IE9UWDJfRkxBR19SWF9WTEFOX1NVUFBPUlQpXFxuK1xcdGlmIChvdHgyX3Rlc3RfZmxhZyhwZiwgT1RYMl9GTEFHX1JYX1ZMQU5fU1VQUE9SVCkpXFxuIFxcdFxcdG5ldGRldi1cXHUwMDNlaHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX0NUQUdfUlggfFxcbiBcXHRcXHRcXHRcXHQgICAgICAgTkVUSUZfRl9IV19WTEFOX1NUQUdfUlg7XFxuIFxcdG5ldGRldi1cXHUwMDNlZmVhdHVyZXMgfD0gbmV0ZGV2LVxcdTAwM2Vod19mZWF0dXJlcztcXG4gXFxuIFxcdC8qIEhXIHN1cHBvcnRzIHRjIG9mZmxvYWQgYnV0IG11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIG4tdHVwbGUgZmlsdGVycyAqL1xcbi1cXHRpZiAocGYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgT1RYMl9GTEFHX1RDX0ZMT1dFUl9TVVBQT1JUKVxcbitcXHRpZiAob3R4Ml90ZXN0X2ZsYWcocGYsIE9UWDJfRkxBR19UQ19GTE9XRVJfU1VQUE9SVCkpXFxuIFxcdFxcdG5ldGRldi1cXHUwMDNlaHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19UQztcXG4gXFxuIFxcdG5ldGRldi1cXHUwMDNlaHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9MT09QQkFDSyB8IE5FVElGX0ZfUlhBTEw7XFxuQEAgLTM1OTUsMTggKzM2MTEsMTggQEAgc3RhdGljIHZvaWQgb3R4Ml9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIFxcbiBcXHRwZiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuIFxcbi1cXHRwZi1cXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX1BGX1NIVVRET1dOO1xcbitcXHRvdHgyX3NldF9mbGFnKHBmLCBPVFgyX0ZMQUdfUEZfU0hVVERPV04pO1xcbiBcXG4tXFx0aWYgKHBmLVxcdTAwM2VmbGFncyBcXHUwMDI2IE9UWDJfRkxBR19UWF9UU1RBTVBfRU5BQkxFRClcXG4rXFx0aWYgKG90eDJfdGVzdF9mbGFnKHBmLCBPVFgyX0ZMQUdfVFhfVFNUQU1QX0VOQUJMRUQpKVxcbiBcXHRcXHRvdHgyX2NvbmZpZ19od190eF90c3RhbXAocGYsIGZhbHNlKTtcXG4tXFx0aWYgKHBmLVxcdTAwM2VmbGFncyBcXHUwMDI2IE9UWDJfRkxBR19SWF9UU1RBTVBfRU5BQkxFRClcXG4rXFx0aWYgKG90eDJfdGVzdF9mbGFnKHBmLCBPVFgyX0ZMQUdfUlhfVFNUQU1QX0VOQUJMRUQpKVxcbiBcXHRcXHRvdHgyX2NvbmZpZ19od19yeF90c3RhbXAocGYsIGZhbHNlKTtcXG4gXFxuIFxcdC8qIERpc2FibGUgODAyLjN4IHBhdXNlIGZyYW1lcyAqL1xcbi1cXHRpZiAocGYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgT1RYMl9GTEFHX1JYX1BBVVNFX0VOQUJMRUQgfHxcXG4tXFx0ICAgIChwZi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBPVFgyX0ZMQUdfVFhfUEFVU0VfRU5BQkxFRCkpIHtcXG4tXFx0XFx0cGYtXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5PVFgyX0ZMQUdfUlhfUEFVU0VfRU5BQkxFRDtcXG4tXFx0XFx0cGYtXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5PVFgyX0ZMQUdfVFhfUEFVU0VfRU5BQkxFRDtcXG4rXFx0aWYgKG90eDJfdGVzdF9mbGFnKHBmLCBPVFgyX0ZMQUdfUlhfUEFVU0VfRU5BQkxFRCkgfHxcXG4rXFx0ICAgIG90eDJfdGVzdF9mbGFnKHBmLCBPVFgyX0ZMQUdfVFhfUEFVU0VfRU5BQkxFRCkpIHtcXG4rXFx0XFx0b3R4Ml9jbGVhcl9mbGFnKHBmLCBPVFgyX0ZMQUdfUlhfUEFVU0VfRU5BQkxFRCk7XFxuK1xcdFxcdG90eDJfY2xlYXJfZmxhZyhwZiwgT1RYMl9GTEFHX1RYX1BBVVNFX0VOQUJMRUQpO1xcbiBcXHRcXHRvdHgyX2NvbmZpZ19wYXVzZV9mcm0ocGYpO1xcbiBcXHR9XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuY1xcbmluZGV4IDAzOWZkNDdlYmY1MjIuLjcwZDk5YWUzZGVmYjUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmNcXG5AQCAtMTYsNiArMTYsOCBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3RjX2FjdC90Y19taXJyZWQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC90Y19hY3QvdGNfdmxhbi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2lwdjYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9wa3Rfc2NoZWQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9zY2hfZ2VuZXJpYy5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcImNuMTBrLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJvdHgyX2NvbW1vbi5oXFxcIlxcbkBAIC0zMSw2ICszMywxMCBAQFxcbiBcXG4gI2RlZmluZSBNQ0FTVF9JTlZBTElEX0dSUFxcdFxcdCgtMVUpXFxuICNkZWZpbmUgUkFURV9NQU5USVNTQV9CSVRTXFx0XFx0OFxcbisvKiBNaW4gcGVyLXF1ZXVlIGVncmVzcyBzaGFwaW5nIHJhdGUgdGhlIE5JWCBUTFggZW5jb2RlciBzdXBwb3J0cyAoMiBNYnBzKS4gKi9cXG4rI2RlZmluZSBPVFgyX01RUFJJT19NSU5fUkFURV9CWVRFU19QU1xcdDI1MDAwMFVMTFxcbisvKiBNYXggZWdyZXNzIHNoYXBpbmcgcmF0ZSB0aGUgTklYIFRMWCBlbmNvZGVyIHN1cHBvcnRzICgxMzA4MTYgTWJwcykuICovXFxuKyNkZWZpbmUgT1RYMl9NUVBSSU9fTUFYX1JBVEVfQllURVNfUFNcXHQoKE1BWF9CVVJTVF9TSVpFICogMTAwMDAwMFVMTCkgLyA4VUxMKVxcbiBcXG4gc3RhdGljIHZvaWQgb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTMyIGJ1cnN0LFxcbiBcXHRcXHRcXHRcXHQgICAgICB1MzIgKmJ1cnN0X2V4cCwgdTMyICpidXJzdF9tYW50aXNzYSlcXG5AQCAtNjEsNiArNjcsOSBAQCBzdGF0aWMgdm9pZCBvdHgyX2dldF9lZ3Jlc3NfYnVyc3RfY2ZnKHN0cnVjdCBvdHgyX25pYyAqbmljLCB1MzIgYnVyc3QsXFxuIFxcdFxcdFxcdCpidXJzdF9tYW50aXNzYSA9IHRtcCAvICgxVUxMIFxcdTAwM2NcXHUwMDNjICgqYnVyc3RfZXhwIC0gNykpO1xcbiBcXHRcXHR9XFxuIFxcdH0gZWxzZSB7XFxuK1xcdFxcdC8qIGJ1cnN0IDA6IGxhcmdlc3QgZW5jb2RhYmxlIGJ1cnN0IChDTjEwS19NQVhfQlVSU1RfU0laRSBvblxcbitcXHRcXHQgKiBDTjEwSyksIG5vdCBhIG1pbmltYWwgYnVyc3QuXFxuK1xcdFxcdCAqL1xcbiBcXHRcXHQqYnVyc3RfZXhwID0gTUFYX0JVUlNUX0VYUE9ORU5UO1xcbiBcXHRcXHQqYnVyc3RfbWFudGlzc2EgPSBtYXhfbWFudGlzc2E7XFxuIFxcdH1cXG5AQCAtMTU5LDcgKzE2OCw3IEBAIHN0YXRpYyBpbnQgb3R4Ml90Y192YWxpZGF0ZV9mbG93KHN0cnVjdCBvdHgyX25pYyAqbmljLFxcbiBcXHRcXHRcXHRcXHQgc3RydWN0IGZsb3dfYWN0aW9uICphY3Rpb25zLFxcbiBcXHRcXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiB7XFxuLVxcdGlmIChuaWMtXFx1MDAzZWZsYWdzIFxcdTAwMjYgT1RYMl9GTEFHX0lOVEZfRE9XTikge1xcbitcXHRpZiAob3R4Ml90ZXN0X2ZsYWcobmljLCBPVFgyX0ZMQUdfSU5URl9ET1dOKSkge1xcbiBcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiSW50ZXJmYWNlIG5vdCBpbml0aWFsaXplZFxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbkBAIC0yMjMsNyArMjMyLDcgQEAgc3RhdGljIGludCBvdHgyX3RjX2VncmVzc19tYXRjaGFsbF9pbnN0YWxsKHN0cnVjdCBvdHgyX25pYyAqbmljLFxcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXG4tXFx0aWYgKG5pYy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBPVFgyX0ZMQUdfVENfTUFUQ0hBTExfRUdSRVNTX0VOQUJMRUQpIHtcXG4rXFx0aWYgKG90eDJfdGVzdF9mbGFnKG5pYywgT1RYMl9GTEFHX1RDX01BVENIQUxMX0VHUkVTU19FTkFCTEVEKSkge1xcbiBcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxcbiBcXHRcXHRcXHRcXHQgICBcXFwiT25seSBvbmUgRWdyZXNzIE1BVENIQUxMIHJhdGVsaW1pdGVyIGNhbiBiZSBvZmZsb2FkZWRcXFwiKTtcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuQEAgLTI0NCw3ICsyNTMsNyBAQCBzdGF0aWMgaW50IG90eDJfdGNfZWdyZXNzX21hdGNoYWxsX2luc3RhbGwoc3RydWN0IG90eDJfbmljICpuaWMsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICBvdHgyX2NvbnZlcnRfcmF0ZShlbnRyeS1cXHUwMDNlcG9saWNlLnJhdGVfYnl0ZXNfcHMpKTtcXG4gXFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4tXFx0XFx0bmljLVxcdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfVENfTUFUQ0hBTExfRUdSRVNTX0VOQUJMRUQ7XFxuK1xcdFxcdG90eDJfc2V0X2ZsYWcobmljLCBPVFgyX0ZMQUdfVENfTUFUQ0hBTExfRUdSRVNTX0VOQUJMRUQpO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcXG5AQCAtMjYxLDEzICsyNzAsMTMgQEAgc3RhdGljIGludCBvdHgyX3RjX2VncmVzc19tYXRjaGFsbF9kZWxldGUoc3RydWN0IG90eDJfbmljICpuaWMsXFxuIFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayA9IGNscy1cXHUwMDNlY29tbW9uLmV4dGFjaztcXG4gXFx0aW50IGVycjtcXG4gXFxuLVxcdGlmIChuaWMtXFx1MDAzZWZsYWdzIFxcdTAwMjYgT1RYMl9GTEFHX0lOVEZfRE9XTikge1xcbitcXHRpZiAob3R4Ml90ZXN0X2ZsYWcobmljLCBPVFgyX0ZMQUdfSU5URl9ET1dOKSkge1xcbiBcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiSW50ZXJmYWNlIG5vdCBpbml0aWFsaXplZFxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXG4gXFx0ZXJyID0gb3R4Ml9zZXRfbWF0Y2hhbGxfZWdyZXNzX3JhdGUobmljLCAwLCAwKTtcXG4tXFx0bmljLVxcdTAwM2VmbGFncyBcXHUwMDI2PSB+T1RYMl9GTEFHX1RDX01BVENIQUxMX0VHUkVTU19FTkFCTEVEO1xcbitcXHRvdHgyX2NsZWFyX2ZsYWcobmljLCBPVFgyX0ZMQUdfVENfTUFUQ0hBTExfRUdSRVNTX0VOQUJMRUQpO1xcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbkBAIC01MDUsNyArNTE0LDcgQEAgc3RhdGljIGludCBvdHgyX3RjX3BhcnNlX2FjdGlvbnMoc3RydWN0IG90eDJfbmljICpuaWMsXFxuIFxcdFxcdFxcdG1hcmsgPSBhY3QtXFx1MDAzZW1hcms7XFxuIFxcdFxcdFxcdHJlcS1cXHUwMDNlbWF0Y2hfaWQgPSBtYXJrIFxcdTAwMjYgT1RYMl9SWF9NQVRDSF9JRF9NQVNLO1xcbiBcXHRcXHRcXHRyZXEtXFx1MDAzZW9wID0gTklYX1JYX0FDVElPTl9ERUZBVUxUO1xcbi1cXHRcXHRcXHRuaWMtXFx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19UQ19NQVJLX0VOQUJMRUQ7XFxuK1xcdFxcdFxcdG90eDJfc2V0X2ZsYWcobmljLCBPVFgyX0ZMQUdfVENfTUFSS19FTkFCTEVEKTtcXG4gXFx0XFx0XFx0cmVmY291bnRfaW5jKFxcdTAwMjZuaWMtXFx1MDAzZWZsb3dfY2ZnLVxcdTAwM2VtYXJrX2Zsb3dzKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcbkBAIC05NDIsNyArOTUxLDcgQEAgc3RhdGljIHZvaWQgb3R4Ml9kZXN0cm95X3RjX2Zsb3dfbGlzdChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXFxuIFxcdHN0cnVjdCBvdHgyX2Zsb3dfY29uZmlnICpmbG93X2NmZyA9IHBmdmYtXFx1MDAzZWZsb3dfY2ZnO1xcbiBcXHRzdHJ1Y3Qgb3R4Ml90Y19mbG93ICppdGVyLCAqdG1wO1xcbiBcXG4tXFx0aWYgKCEocGZ2Zi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBPVFgyX0ZMQUdfTUNBTV9FTlRSSUVTX0FMTE9DKSlcXG4rXFx0aWYgKCFvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfTUNBTV9FTlRSSUVTX0FMTE9DKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGl0ZXIsIHRtcCwgXFx1MDAyNmZsb3dfY2ZnLVxcdTAwM2VmbG93X2xpc3RfdGMsIGxpc3QpIHtcXG5AQCAtMTE5NSwxMiArMTIwNCwxMiBAQCBzdGF0aWMgaW50IG90eDJfdGNfZGVsX2Zsb3coc3RydWN0IG90eDJfbmljICpuaWMsXFxuIFxcdC8qIERpc2FibGUgVEMgTUFSSyBmbGFnIGlmIHRoZXkgYXJlIG5vIHJ1bGVzIHdpdGggc2tiZWRpdCBtYXJrIGFjdGlvbiAqL1xcbiBcXHRpZiAoZmxvd19ub2RlLVxcdTAwM2VyZXEubWF0Y2hfaWQpXFxuIFxcdFxcdGlmICghcmVmY291bnRfZGVjX2FuZF90ZXN0KFxcdTAwMjZmbG93X2NmZy1cXHUwMDNlbWFya19mbG93cykpXFxuLVxcdFxcdFxcdG5pYy1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gfk9UWDJfRkxBR19UQ19NQVJLX0VOQUJMRUQ7XFxuK1xcdFxcdFxcdG90eDJfY2xlYXJfZmxhZyhuaWMsIE9UWDJfRkxBR19UQ19NQVJLX0VOQUJMRUQpO1xcbiBcXG4gXFx0aWYgKGZsb3dfbm9kZS1cXHUwMDNlaXNfYWN0X3BvbGljZSkge1xcbiBcXHRcXHRfX2NsZWFyX2JpdChmbG93X25vZGUtXFx1MDAzZXJxLCBcXHUwMDI2bmljLVxcdTAwM2VycV9ibWFwKTtcXG4gXFxuLVxcdFxcdGlmIChuaWMtXFx1MDAzZWZsYWdzIFxcdTAwMjYgT1RYMl9GTEFHX0lOVEZfRE9XTilcXG4rXFx0XFx0aWYgKG90eDJfdGVzdF9mbGFnKG5pYywgT1RYMl9GTEFHX0lOVEZfRE9XTikpXFxuIFxcdFxcdFxcdGdvdG8gZnJlZV9tY2FtX2Zsb3c7XFxuIFxcbiBcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZuaWMtXFx1MDAzZW1ib3gubG9jayk7XFxuQEAgLTEyNDYsMTAgKzEyNTUsMTAgQEAgc3RhdGljIGludCBvdHgyX3RjX2FkZF9mbG93KHN0cnVjdCBvdHgyX25pYyAqbmljLFxcbiBcXHRzdHJ1Y3QgbnBjX2luc3RhbGxfZmxvd19yZXEgKnJlcSwgZHVtbXk7XFxuIFxcdGludCByYywgZXJyLCBlbnRyeTtcXG4gXFxuLVxcdGlmICghKG5pYy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBPVFgyX0ZMQUdfVENfRkxPV0VSX1NVUFBPUlQpKVxcbitcXHRpZiAoIW90eDJfdGVzdF9mbGFnKG5pYywgT1RYMl9GTEFHX1RDX0ZMT1dFUl9TVVBQT1JUKSlcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbi1cXHRpZiAobmljLVxcdTAwM2VmbGFncyBcXHUwMDI2IE9UWDJfRkxBR19JTlRGX0RPV04pIHtcXG4rXFx0aWYgKG90eDJfdGVzdF9mbGFnKG5pYywgT1RYMl9GTEFHX0lOVEZfRE9XTikpIHtcXG4gXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcIkludGVyZmFjZSBub3QgaW5pdGlhbGl6ZWRcXFwiKTtcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG5AQCAtMTQ0NCw3ICsxNDUzLDcgQEAgc3RhdGljIGludCBvdHgyX3RjX2luZ3Jlc3NfbWF0Y2hhbGxfaW5zdGFsbChzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYyxcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuLVxcdGlmIChuaWMtXFx1MDAzZWZsYWdzIFxcdTAwMjYgT1RYMl9GTEFHX1RDX01BVENIQUxMX0lOR1JFU1NfRU5BQkxFRCkge1xcbitcXHRpZiAob3R4Ml90ZXN0X2ZsYWcobmljLCBPVFgyX0ZMQUdfVENfTUFUQ0hBTExfSU5HUkVTU19FTkFCTEVEKSkge1xcbiBcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxcbiBcXHRcXHRcXHRcXHQgICBcXFwiT25seSBvbmUgaW5ncmVzcyBNQVRDSEFMTCByYXRlbGltaXR0ZXIgY2FuIGJlIG9mZmxvYWRlZFxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5AQCAtMTQ2OSw3ICsxNDc4LDcgQEAgc3RhdGljIGludCBvdHgyX3RjX2luZ3Jlc3NfbWF0Y2hhbGxfaW5zdGFsbChzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYyxcXG4gXFx0XFx0ZXJyID0gY24xMGtfc2V0X21hdGNoYWxsX2lwb2xpY2VyX3JhdGUobmljLCBlbnRyeS1cXHUwMDNlcG9saWNlLmJ1cnN0LCByYXRlKTtcXG4gXFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4tXFx0XFx0bmljLVxcdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfVENfTUFUQ0hBTExfSU5HUkVTU19FTkFCTEVEO1xcbitcXHRcXHRvdHgyX3NldF9mbGFnKG5pYywgT1RYMl9GTEFHX1RDX01BVENIQUxMX0lOR1JFU1NfRU5BQkxFRCk7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxcbkBAIC0xNDg2LDEzICsxNDk1LDEzIEBAIHN0YXRpYyBpbnQgb3R4Ml90Y19pbmdyZXNzX21hdGNoYWxsX2RlbGV0ZShzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYyxcXG4gXFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrID0gY2xzLVxcdTAwM2Vjb21tb24uZXh0YWNrO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4tXFx0aWYgKG5pYy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBPVFgyX0ZMQUdfSU5URl9ET1dOKSB7XFxuK1xcdGlmIChvdHgyX3Rlc3RfZmxhZyhuaWMsIE9UWDJfRkxBR19JTlRGX0RPV04pKSB7XFxuIFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFxcXCJJbnRlcmZhY2Ugbm90IGluaXRpYWxpemVkXFxcIik7XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuIFxcbiBcXHRlcnIgPSBjbjEwa19mcmVlX21hdGNoYWxsX2lwb2xpY2VyKG5pYyk7XFxuLVxcdG5pYy1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gfk9UWDJfRkxBR19UQ19NQVRDSEFMTF9JTkdSRVNTX0VOQUJMRUQ7XFxuK1xcdG90eDJfY2xlYXJfZmxhZyhuaWMsIE9UWDJfRkxBR19UQ19NQVRDSEFMTF9JTkdSRVNTX0VOQUJMRUQpO1xcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbkBAIC0xNjAwLDE0ICsxNjA5LDc1MCBAQCBzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfYmxvY2soc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFx0XFx0XFx0XFx0XFx0ICBuaWMsIG5pYywgaW5ncmVzcyk7XFxuIH1cXG4gXFxuKy8qIEZyZWUgdGhlIHBlci1xdWV1ZSBtaW4vbWF4IHJhdGUgY2FjaGVzLiAqL1xcbitzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19mcmVlX2NhY2hlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4re1xcbitcXHRkZXZtX2tmcmVlKHBmdmYtXFx1MDAzZWRldiwgcGZ2Zi1cXHUwMDNlbXFwcmlvLm1pbl9yYXRlKTtcXG4rXFx0ZGV2bV9rZnJlZShwZnZmLVxcdTAwM2VkZXYsIHBmdmYtXFx1MDAzZW1xcHJpby5tYXhfcmF0ZSk7XFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpby5taW5fcmF0ZSA9IE5VTEw7XFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpby5tYXhfcmF0ZSA9IE5VTEw7XFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpby5mbGFncyA9IDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fYWxsb2NfY2FjaGUoc3RydWN0IG90eDJfbmljICpwZnZmLCBib29sIHJlcGxhY2luZylcXG4re1xcbitcXHR1MTYgbnVtX3R4cSA9IHBmdmYtXFx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzO1xcbitcXG4rXFx0aWYgKHJlcGxhY2luZyBcXHUwMDI2XFx1MDAyNiBwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGUgXFx1MDAyNlxcdTAwMjYgcGZ2Zi1cXHUwMDNlbXFwcmlvLm1heF9yYXRlKSB7XFxuK1xcdFxcdG1lbXNldChwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGUsIDAsXFxuK1xcdFxcdCAgICAgICBudW1fdHhxICogc2l6ZW9mKCpwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGUpKTtcXG4rXFx0XFx0bWVtc2V0KHBmdmYtXFx1MDAzZW1xcHJpby5tYXhfcmF0ZSwgMCxcXG4rXFx0XFx0ICAgICAgIG51bV90eHEgKiBzaXplb2YoKnBmdmYtXFx1MDAzZW1xcHJpby5tYXhfcmF0ZSkpO1xcbitcXHRcXHRwZnZmLVxcdTAwM2VtcXByaW8uZmxhZ3MgPSAwO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0b3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTtcXG4rXFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpby5taW5fcmF0ZSA9IGRldm1fa2NhbGxvYyhwZnZmLVxcdTAwM2VkZXYsIG51bV90eHEsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgc2l6ZW9mKCpwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGUpLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIEdGUF9LRVJORUwpO1xcbitcXHRwZnZmLVxcdTAwM2VtcXByaW8ubWF4X3JhdGUgPSBkZXZtX2tjYWxsb2MocGZ2Zi1cXHUwMDNlZGV2LCBudW1fdHhxLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHNpemVvZigqcGZ2Zi1cXHUwMDNlbXFwcmlvLm1heF9yYXRlKSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGUgfHwgIXBmdmYtXFx1MDAzZW1xcHJpby5tYXhfcmF0ZSkge1xcbitcXHRcXHRvdHgyX21xcHJpb19mcmVlX2NhY2hlKHBmdmYpO1xcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX3NuYXBfZnJlZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXFxuK1xcdFxcdFxcdFxcdCAgc3RydWN0IG1xX29mZmxvYWRfc25hcCAqKnNuYXApXFxuK3tcXG4rXFx0aWYgKCEqc25hcClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0ZGV2bV9rZnJlZShwZnZmLVxcdTAwM2VkZXYsICpzbmFwKTtcXG4rXFx0KnNuYXAgPSBOVUxMO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG90eDJfbXFwcmlvX3NuYXBfY29weShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwICoqZHN0LFxcbitcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbylcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcXHUwMDI2bXFwcmlvLVxcdTAwM2Vxb3B0O1xcbitcXHRzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwICpzbmFwO1xcbitcXHRpbnQgdGM7XFxuK1xcbitcXHRpZiAoISpkc3QpIHtcXG4rXFx0XFx0c25hcCA9IGRldm1fa3phbGxvYyhwZnZmLVxcdTAwM2VkZXYsIHNpemVvZigqc25hcCksIEdGUF9LRVJORUwpO1xcbitcXHRcXHRpZiAoIXNuYXApXFxuK1xcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHRcXHQqZHN0ID0gc25hcDtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0c25hcCA9ICpkc3Q7XFxuK1xcdH1cXG4rXFxuK1xcdHNuYXAtXFx1MDAzZW51bV90YyA9IHFvcHQtXFx1MDAzZW51bV90YztcXG4rXFx0Zm9yICh0YyA9IDA7IHRjIFxcdTAwM2MgVENfUU9QVF9NQVhfUVVFVUU7IHRjKyspIHtcXG4rXFx0XFx0c25hcC1cXHUwMDNlY291bnRbdGNdID0gcW9wdC1cXHUwMDNlY291bnRbdGNdO1xcbitcXHRcXHRzbmFwLVxcdTAwM2VvZmZzZXRbdGNdID0gcW9wdC1cXHUwMDNlb2Zmc2V0W3RjXTtcXG4rXFx0XFx0c25hcC1cXHUwMDNlbWluX3JhdGVbdGNdID0gMDtcXG4rXFx0XFx0c25hcC1cXHUwMDNlbWF4X3JhdGVbdGNdID0gMDtcXG4rXFx0fVxcbitcXG4rXFx0Zm9yICh0YyA9IDA7IHRjIFxcdTAwM2MgcW9wdC1cXHUwMDNlbnVtX3RjOyB0YysrKSB7XFxuK1xcdFxcdGlmIChtcXByaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpXFxuK1xcdFxcdFxcdHNuYXAtXFx1MDAzZW1pbl9yYXRlW3RjXSA9IG1xcHJpby1cXHUwMDNlbWluX3JhdGVbdGNdO1xcbitcXHRcXHRpZiAobXFwcmlvLVxcdTAwM2VmbGFncyBcXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKVxcbitcXHRcXHRcXHRzbmFwLVxcdTAwM2VtYXhfcmF0ZVt0Y10gPSBtcXByaW8tXFx1MDAzZW1heF9yYXRlW3RjXTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fc3RhZ2VfY3VyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcXG4rXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXFxuK3tcXG4rXFx0cmV0dXJuIG90eDJfbXFwcmlvX3NuYXBfY29weShwZnZmLCBcXHUwMDI2cGZ2Zi1cXHUwMDNlY3VyX21xX3NuYXAsIG1xcHJpbyk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX3NuYXBfY29tbWl0KHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4re1xcbitcXHRvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgXFx1MDAyNnBmdmYtXFx1MDAzZW9sZF9tcV9zbmFwKTtcXG4rXFx0cGZ2Zi1cXHUwMDNlb2xkX21xX3NuYXAgPSBwZnZmLVxcdTAwM2VjdXJfbXFfc25hcDtcXG4rXFx0cGZ2Zi1cXHUwMDNlY3VyX21xX3NuYXAgPSBOVUxMO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19jbGVhcl9yZXBsYWNlX3N0YXRlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4re1xcbitcXHRwZnZmLVxcdTAwM2VtcXByaW8ucmVwbGFjZV9zZXR1cF9kb25lID0gZmFsc2U7XFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpby5yZXBsYWNlX2dyYWZ0X2RvbmUgPSBmYWxzZTtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgb3R4Ml9tcXByaW9fbWRxX2FsbG9jYXRlZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXFxuK3tcXG4rXFx0cmV0dXJuIHBmdmYtXFx1MDAzZWh3LnR4c2NocV9jbnRbTklYX1RYU0NIX0xWTF9NRFFdICE9IDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByYXRlX2xpbWl0KTtcXG4rXFxuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fcmVzdG9yZV9vbGQoc3RydWN0IG90eDJfbmljICpwZnZmKVxcbit7XFxuK1xcdHN0cnVjdCBtcV9vZmZsb2FkX3NuYXAgKnNuYXAgPSBwZnZmLVxcdTAwM2VvbGRfbXFfc25hcDtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtXFx1MDAzZW5ldGRldjtcXG4rXFx0dTE2IG51bV90eHEgPSBwZnZmLVxcdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcXG4rXFx0aW50IHRjLCB0eHEsIGVycjtcXG4rXFxuK1xcdGlmICghc25hcClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRlcnIgPSBvdHgyX21xcHJpb19hbGxvY19jYWNoZShwZnZmLCBmYWxzZSk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHRtZW1zZXQocGZ2Zi1cXHUwMDNlbXFwcmlvLm1pbl9yYXRlLCAwLCBudW1fdHhxICogc2l6ZW9mKCpwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGUpKTtcXG4rXFx0bWVtc2V0KHBmdmYtXFx1MDAzZW1xcHJpby5tYXhfcmF0ZSwgMCwgbnVtX3R4cSAqIHNpemVvZigqcGZ2Zi1cXHUwMDNlbXFwcmlvLm1heF9yYXRlKSk7XFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpby5mbGFncyA9IDA7XFxuK1xcbitcXHRmb3IgKHRjID0gMDsgdGMgXFx1MDAzYyBzbmFwLVxcdTAwM2VudW1fdGM7IHRjKyspIHtcXG4rXFx0XFx0dTY0IG1pbl9yYXRlID0gc25hcC1cXHUwMDNlbWluX3JhdGVbdGNdO1xcbitcXHRcXHR1NjQgbWF4X3JhdGUgPSBzbmFwLVxcdTAwM2VtYXhfcmF0ZVt0Y107XFxuK1xcbitcXHRcXHRpZiAobWluX3JhdGUpXFxuK1xcdFxcdFxcdHBmdmYtXFx1MDAzZW1xcHJpby5mbGFncyB8PSBUQ19NUVBSSU9fRl9NSU5fUkFURTtcXG4rXFx0XFx0aWYgKG1heF9yYXRlKVxcbitcXHRcXHRcXHRwZnZmLVxcdTAwM2VtcXByaW8uZmxhZ3MgfD0gVENfTVFQUklPX0ZfTUFYX1JBVEU7XFxuK1xcbitcXHRcXHRmb3IgKHR4cSA9IHNuYXAtXFx1MDAzZW9mZnNldFt0Y107XFxuK1xcdFxcdCAgICAgdHhxIFxcdTAwM2Mgc25hcC1cXHUwMDNlb2Zmc2V0W3RjXSArIHNuYXAtXFx1MDAzZWNvdW50W3RjXTsgdHhxKyspIHtcXG4rXFx0XFx0XFx0cGZ2Zi1cXHUwMDNlbXFwcmlvLm1pbl9yYXRlW3R4cV0gPSBtaW5fcmF0ZTtcXG4rXFx0XFx0XFx0cGZ2Zi1cXHUwMDNlbXFwcmlvLm1heF9yYXRlW3R4cV0gPSBtYXhfcmF0ZTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRuZXRkZXZfc2V0X251bV90YyhuZXRkZXYsIHNuYXAtXFx1MDAzZW51bV90Yyk7XFxuK1xcdGZvciAodGMgPSAwOyB0YyBcXHUwMDNjIHNuYXAtXFx1MDAzZW51bV90YzsgdGMrKylcXG4rXFx0XFx0bmV0ZGV2X3NldF90Y19xdWV1ZShuZXRkZXYsIHRjLCBzbmFwLVxcdTAwM2Vjb3VudFt0Y10sXFxuK1xcdFxcdFxcdFxcdCAgICBzbmFwLVxcdTAwM2VvZmZzZXRbdGNdKTtcXG4rXFxuK1xcdGlmIChvdHgyX21xcHJpb19tZHFfYWxsb2NhdGVkKHBmdmYpKSB7XFxuK1xcdFxcdGVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4rXFx0LyogUmVidWlsZCB0aGUgVFggc2NoZWR1bGVyIHZpYSBuZXRkZXYgcmVzdGFydCB3aGVuIHJ1bm5pbmc7IG90eDJfbXFwcmlvX3VwKClcXG4rXFx0ICogYWxvbmUgaXMgaW5zdWZmaWNpZW50IGFmdGVyIGEgZmFpbGVkIHJlcGxhY2UgdGhhdCBhbHJlYWR5IGJvdW5jZWQgdGhlXFxuK1xcdCAqIGludGVyZmFjZS4gSWYgb3BlbiBmYWlsZWQsIFRYIHNjaGVkdWxlcnMgd2VyZSBmcmVlZDsgZGVmZXIgc2hhcGVyIHJlc3RvcmVcXG4rXFx0ICogdG8gdGhlIG5leHQgc3VjY2Vzc2Z1bCBuZG9fb3BlbigpIHZpYSBvdHgyX21xcHJpb191cCgpLlxcbitcXHQgKi9cXG4rXFx0cGZ2Zi1cXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQgPSB0cnVlO1xcbitcXG4rXFx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkge1xcbitcXHRcXHRlcnIgPSBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihuZXRkZXYsIHRydWUpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHR9IGVsc2UgaWYgKHBmdmYtXFx1MDAzZWh3LnR4c2NocV9jbnRbTklYX1RYU0NIX0xWTF9TTVFdKSB7XFxuK1xcdFxcdGVyciA9IG90eDJfbXFwcmlvX3VwKHBmdmYpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHR9XFxuK1xcbitcXHRvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgXFx1MDAyNnBmdmYtXFx1MDAzZWN1cl9tcV9zbmFwKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19zbmFwX2Rlc3Ryb3koc3RydWN0IG90eDJfbmljICpwZnZmKVxcbit7XFxuK1xcdG90eDJfbXFwcmlvX3NuYXBfZnJlZShwZnZmLCBcXHUwMDI2cGZ2Zi1cXHUwMDNlY3VyX21xX3NuYXApO1xcbitcXHRvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgXFx1MDAyNnBmdmYtXFx1MDAzZW9sZF9tcV9zbmFwKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fY2xlYXJfc3coc3RydWN0IG90eDJfbmljICpwZnZmKVxcbit7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVxcdTAwM2VuZXRkZXY7XFxuK1xcbitcXHRwZnZmLVxcdTAwM2VtcXByaW8ucmF0ZV9saW1pdCA9IGZhbHNlO1xcbitcXHRvdHgyX21xcHJpb19jbGVhcl9yZXBsYWNlX3N0YXRlKHBmdmYpO1xcbitcXHRuZXRkZXZfc2V0X251bV90YyhuZXRkZXYsIDApO1xcbitcXHRvdHgyX21xcHJpb19mcmVlX2NhY2hlKHBmdmYpO1xcbit9XFxuK1xcbisvKiBUZWFyIGRvd24gbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkOiBjbGVhciBwZXItcXVldWUgc2hhcGVycyxcXG4rICogbXFwcmlvX3JhdGVfbGltaXQsIG5ldGRldiBUQyBtYXBwaW5ncywgYW5kIHRoZSBjYWNoZWQgcmF0ZXMuICBDYWxsZWQgb25cXG4rICogZXhwbGljaXQgbXFwcmlvIHRlYXJkb3duICh0YyBxZGlzYyBkZWwpIGFuZCBlcnJvciBjbGVhbnVwLCBub3Qgb25cXG4rICogcm91dGluZSBuZXRkZXYgc3RvcC9vcGVuIGN5Y2xlcyB3aGVyZSB0aGUgb2ZmbG9hZCBzdGF5cyBhY3RpdmUuXFxuKyAqL1xcbitpbnQgb3R4Ml9tcXByaW9fZG93bihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXFxuK3tcXG4rXFx0aW50IGVyciA9IDA7XFxuK1xcbitcXHRpZiAoIXBmdmYtXFx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmIChuZXRpZl9ydW5uaW5nKHBmdmYtXFx1MDAzZW5ldGRldikgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIG90eDJfbXFwcmlvX21kcV9hbGxvY2F0ZWQocGZ2ZikpXFxuK1xcdFxcdGVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTtcXG4rXFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0bmV0ZGV2X3dhcm4ocGZ2Zi1cXHUwMDNlbmV0ZGV2LFxcbitcXHRcXHRcXHQgICAgXFxcIm1xcHJpbzogZmFpbGVkIHRvIGNsZWFyIGhhcmR3YXJlIHNoYXBlcnM6ICVkOyBjbGVhcmluZyBzb2Z0d2FyZSBzdGF0ZVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgIGVycik7XFxuK1xcdFxcdG90eDJfbXFwcmlvX2NsZWFyX3N3KHBmdmYpO1xcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHR9XFxuK1xcbitcXHRvdHgyX21xcHJpb19jbGVhcl9zdyhwZnZmKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKVxcbit7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVxcdTAwM2VuZXRkZXY7XFxuK1xcdGludCB0eHEsIGVycjtcXG4rXFxuK1xcdGlmICghcGZ2Zi1cXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKCFwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGUgfHwgIXBmdmYtXFx1MDAzZW1xcHJpby5tYXhfcmF0ZSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRmb3IgKHR4cSA9IDA7IHR4cSBcXHUwMDNjIHBmdmYtXFx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzOyB0eHErKykge1xcbitcXHRcXHR1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7XFxuK1xcbitcXHRcXHRpZiAocGZ2Zi1cXHUwMDNlbXFwcmlvLmZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpXFxuK1xcdFxcdFxcdG1pbl9yYXRlID0gcGZ2Zi1cXHUwMDNlbXFwcmlvLm1pbl9yYXRlW3R4cV07XFxuK1xcdFxcdGlmIChwZnZmLVxcdTAwM2VtcXByaW8uZmxhZ3MgXFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSlcXG4rXFx0XFx0XFx0bWF4X3JhdGUgPSBwZnZmLVxcdTAwM2VtcXByaW8ubWF4X3JhdGVbdHhxXTtcXG4rXFxuK1xcdFxcdGlmICghbWluX3JhdGUgXFx1MDAyNlxcdTAwMjYgIW1heF9yYXRlKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGVyciA9IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIocGZ2ZiwgdHhxLCBtaW5fcmF0ZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgbWF4X3JhdGUpO1xcbitcXHRcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiBmYWlsZWQgdG8gcmVzdG9yZSBzaGFwZXIgZm9yIHR4cSAlZDogJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgIHR4cSwgZXJyKTtcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyogUmVzdGFydCB0aGUgbmV0ZGV2IHRvIHJlcHJvZ3JhbSB0aGUgVFggc2NoZWR1bGVyIGhpZXJhcmNoeSBmb3IgbXFwcmlvXFxuKyAqIGJhbmR3aWR0aCBvZmZsb2FkLiAgQm90aCBtcXByaW8gYWRkIGFuZCBkZWxldGUgKHdoZW4gb2ZmbG9hZCB3YXMgYWN0aXZlKVxcbisgKiB0YWtlIHRoaXMgcGF0aCB2aWEgbmRvX3N0b3AoKS9uZG9fb3BlbigpIHNvIFZGLXNwZWNpZmljIG9wZW4gbG9naWMgKGUuZy5cXG4rICogTEJLIGNhcnJpZXIgb24pIHJ1bnMgY29ycmVjdGx5LlxcbisgKlxcbisgKiBJbnRlbnRpb25hbCBiZWhhdmlvdXI6IHRoaXMgZnVsbCBzdG9wL29wZW4gY3ljbGUgZHJvcHMgaW4tZmxpZ2h0IHRyYWZmaWNcXG4rICogKGNhcnJpZXIgb2ZmLCBJUlEvTkFQSSB0ZWFyZG93biwgcXVldWUgZHJhaW4pLiAgVGhlIE5JWCBUWCBzY2hlZHVsZXIgbXVzdFxcbisgKiBiZSByZWFsbG9jYXRlZCAoZS5nLiBvbmUgU01RIHBlciBub24tUW9TIHF1ZXVlKSBhbmQgY2Fubm90IGJlIHJlcHJvZ3JhbW1lZFxcbisgKiBsaXZlIHRvZGF5LCBzbyBhIG5ldGRldiBib3VuY2UgaXMgcmVxdWlyZWQgb24gZXZlcnkgbXFwcmlvIGFkZCwgcmVwbGFjZSxcXG4rICogZGVsZXRlLCBhbmQgcm9sbGJhY2suICBVc2VycyBzZWUgYSBicmllZiBjb25uZWN0aXZpdHkgYmxpcDsgdGhpcyBpcyBub3QgYVxcbisgKiBidWcgdG8gXFxcImZpeFxcXCIgd2l0aG91dCBpbXBsZW1lbnRpbmcgdGhlIGxpdmUtcmVwcm9ncmFtbWluZyBwYXRoIG5vdGVkIGJlbG93LlxcbisgKiBJZiBvcGVuIGZhaWxzLCB0aGUgaW50ZXJmYWNlIGlzIGxlZnQgYWRtaW5pc3RyYXRpdmVseSBkb3duIHdpdGhvdXQgY2FsbGluZ1xcbisgKiBuZG9fc3RvcCgpIGFnYWluIG9uIHJlc291cmNlcyBhbHJlYWR5IHRvcm4gZG93biBieSB0aGUgb3BlbiBlcnJvciBwYXRoLlxcbisgKlxcbisgKiBRdWllc2NlIHRoZSB0cmFuc21pdCBwYXRoIGxpa2UgX19kZXZfY2xvc2VfbWFueSgpIGJlZm9yZSBuZG9fc3RvcCgpIHNvXFxuKyAqIG90eDJfeG1pdCgpIGNhbm5vdCByYWNlIG90eDJfZnJlZV9xdWV1ZV9tZW0oKS5cXG4rICovXFxuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByYXRlX2xpbWl0KVxcbit7XFxuK1xcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuK1xcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyAqb3BzID0gbmV0ZGV2LVxcdTAwM2VuZXRkZXZfb3BzO1xcbitcXHRib29sIHJ1bm5pbmcgPSBuZXRpZl9ydW5uaW5nKG5ldGRldik7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHQvKiBUT0RPOiBFeHBsb3JlIGxpdmUgVFggc2NoZWR1bGVyIHJlcHJvZ3JhbW1pbmcgdG8gYXZvaWQgYSBmdWxsXFxuK1xcdCAqIG5kb19zdG9wKCkvbmRvX29wZW4oKSBib3VuY2Ugb24gZXZlcnkgbXFwcmlvIGNoYW5nZS5cXG4rXFx0ICovXFxuK1xcdG5ldGRldl9pbmZvKG5ldGRldixcXG4rXFx0XFx0ICAgIFxcXCJtcXByaW86IHJlc3RhcnRpbmcgaW50ZXJmYWNlIHRvIHJlcHJvZ3JhbSBUWCBzY2hlZHVsZXI7IGluLWZsaWdodCB0cmFmZmljIHdpbGwgYmUgZHJvcHBlZFxcXFxuXFxcIik7XFxuK1xcbitcXHRpZiAocnVubmluZykge1xcbitcXHRcXHRjbGVhcl9iaXQoX19MSU5LX1NUQVRFX1NUQVJULCBcXHUwMDI2bmV0ZGV2LVxcdTAwM2VzdGF0ZSk7XFxuK1xcdFxcdHNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7IC8qIENvbW1pdCBuZXRpZl9ydW5uaW5nKCkuICovXFxuK1xcdH1cXG4rXFx0ZGV2X2RlYWN0aXZhdGUobmV0ZGV2LCB0cnVlKTtcXG4rXFxuK1xcdGVyciA9IG9wcy1cXHUwMDNlbmRvX3N0b3AobmV0ZGV2KTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRpZiAocnVubmluZykge1xcbitcXHRcXHRcXHRzZXRfYml0KF9fTElOS19TVEFURV9TVEFSVCwgXFx1MDAyNm5ldGRldi1cXHUwMDNlc3RhdGUpO1xcbitcXHRcXHRcXHRkZXZfYWN0aXZhdGUobmV0ZGV2KTtcXG4rXFx0XFx0fVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHR9XFxuK1xcbitcXHQvKiBTZXQgYmVmb3JlIG5kb19vcGVuKCkgc28gb3R4Ml90eHNjaF9hbGxvYygpIHdpZGVucyBTTVEgYWxsb2NhdGlvbi5cXG4rXFx0ICogT24gdGVhcmRvd24sIGRyb3AgbXFwcmlvIHNvZnR3YXJlIHN0YXRlIHNvIG5kb19vcGVuKCkgZG9lcyBub3RcXG4rXFx0ICogcmUtYXBwbHkgYmFuZHdpZHRoIGxpbWl0cyB2aWEgb3R4Ml9tcXByaW9fdXAoKSBhZnRlciB0aGUga2VybmVsXFxuK1xcdCAqIHJlbW92ZWQgdGhlIHFkaXNjLlxcbitcXHQgKi9cXG4rXFx0aWYgKHJhdGVfbGltaXQpXFxuK1xcdFxcdHBmdmYtXFx1MDAzZW1xcHJpby5yYXRlX2xpbWl0ID0gdHJ1ZTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRvdHgyX21xcHJpb19jbGVhcl9zdyhwZnZmKTtcXG4rXFxuK1xcdGVyciA9IG9wcy1cXHUwMDNlbmRvX29wZW4obmV0ZGV2KTtcXG4rXFx0aWYgKCFlcnIgXFx1MDAyNlxcdTAwMjYgcnVubmluZykge1xcbitcXHRcXHRzZXRfYml0KF9fTElOS19TVEFURV9TVEFSVCwgXFx1MDAyNm5ldGRldi1cXHUwMDNlc3RhdGUpO1xcbitcXHRcXHRkZXZfYWN0aXZhdGUobmV0ZGV2KTtcXG4rXFx0fSBlbHNlIGlmIChlcnIpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsXFxuK1xcdFxcdFxcdCAgIFxcXCJGYWlsZWQgdG8gcmVzdGFydCBkZXZpY2UgYWZ0ZXIgbXFwcmlvIGNoYW5nZTogJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgIGVycik7XFxuK1xcdFxcdC8qIG5kb19vcGVuKCkgYWxyZWFkeSBmcmVlZCB0aGUgVFggc2NoZWR1bGVycyBvbiBmYWlsdXJlIHdoaWxlXFxuK1xcdFxcdCAqIG5ldGlmX3J1bm5pbmcoKSBtYXkgc3RpbGwgYmUgdHJ1ZTsgZHJvcCBtcXByaW8gc29mdHdhcmUgc3RhdGVcXG4rXFx0XFx0ICogb25seSBpbnN0ZWFkIG9mIHNlbmRpbmcgc2hhcGVyIGNsZWFycyB0byBmcmVlZCBxdWV1ZXMuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRvdHgyX21xcHJpb19jbGVhcl9zdyhwZnZmKTtcXG4rXFx0XFx0LyogbmRvX29wZW4oKSByb2xscyBiYWNrIG9uIGZhaWx1cmU7IG1hcmsgdGhlIGludGVyZmFjZSBkb3duIHNvXFxuK1xcdFxcdCAqIG5ldGlmX2Nsb3NlKCkgZG9lcyBub3QgaW52b2tlIG5kb19zdG9wKCkgb24gZnJlZWQgTkFQSS9xdWV1ZVxcbitcXHRcXHQgKiBzdGF0ZS4gQ2FsbGVyIGhvbGRzIFJUTkw7IGRldl9jbG9zZSgpIHdvdWxkIGRlYWRsb2NrLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0b3R4Ml9zZXRfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfSU5URl9ET1dOKTtcXG4rXFx0XFx0LyogdmlzaWJsZSB0byBvdHgyX3N0b3AoKSBvbiBvdGhlciBjcHVzICovXFxuK1xcdFxcdHNtcF93bWIoKTtcXG4rXFx0XFx0bmV0aWZfY2xvc2UobmV0ZGV2KTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rc3RhdGljIGludCBvdHgyX21xcHJpb192YWxpZGF0ZV90Y19yYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcXG4rXFx0XFx0XFx0XFx0XFx0dTY0IHJhdGUsIHUzMiBxY291bnQsIGludCB0YyxcXG4rXFx0XFx0XFx0XFx0XFx0Y29uc3QgY2hhciAqbmFtZSlcXG4re1xcbitcXHRpZiAoIXJhdGUpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKHFjb3VudCBcXHUwMDNjPSAxKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdC8qIFRPRE86IG1xcHJpbyBtaW5fcmF0ZS9tYXhfcmF0ZSBhcmUgcGVyIHRyYWZmaWMgY2xhc3MsIGJ1dCBiYW5kd2lkdGhcXG4rXFx0ICogb2ZmbG9hZCBzaGFwZXMgb24gcGVyLXF1ZXVlIE1EUSBub2RlcyBwYXJlbnRlZCB1bmRlciBhIHNpbmdsZSBUTDQuXFxuK1xcdCAqIFdpdGhvdXQgcGVyLVRDIFRMNCBzaGFwZXJzIHRoZSBkcml2ZXIgY2Fubm90IGhvbm9yIFRDLWxldmVsIGxpbWl0c1xcbitcXHQgKiBmb3IgYSB0cmFmZmljIGNsYXNzIHRoYXQgc3BhbnMgbXVsdGlwbGUgcXVldWVzIHdpdGhvdXQgZWl0aGVyXFxuK1xcdCAqIGRpdmlkaW5nIHRoZSByYXRlIGFjcm9zcyBxdWV1ZXMgKHVBUEkgbWlzbWF0Y2gpIG9yIGV4Y2VlZGluZyB0aGUgVENcXG4rXFx0ICogY2FwIHdoZW4gZXZlcnkgbWVtYmVyIHF1ZXVlIGlzIGFjdGl2ZS4gUmVqZWN0IHVudGlsIHBlci1UQyBUTDRcXG4rXFx0ICogc2hhcGluZyBjYW4gYmUgaW1wbGVtZW50ZWQgd2l0aG91dCBhbGxvY2F0aW5nIGFkZGl0aW9uYWwgVEw0IG5vZGVzXFxuK1xcdCAqIGJleW9uZCB0aGUgZXhpc3RpbmcgaGllcmFyY2h5LlxcbitcXHQgKi9cXG4rXFx0bmV0ZGV2X2VycihuZXRkZXYsXFxuK1xcdFxcdCAgIFxcXCJtcXByaW86ICVzIHJhdGUgZm9yIHRjICVkIG5vdCBzdXBwb3J0ZWQgd2l0aCAldSBxdWV1ZXNcXFxcblxcXCIsXFxuK1xcdFxcdCAgIG5hbWUsIHRjLCBxY291bnQpO1xcbitcXHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcXG4rXFx0XFx0XFx0ICAgICAgIFxcXCJtcXByaW86ICVzIHJhdGUgZm9yIHRjICVkIG5vdCBzdXBwb3J0ZWQgd2l0aCAldSBxdWV1ZXNcXFwiLFxcbitcXHRcXHRcXHQgICAgICAgbmFtZSwgdGMsIHFjb3VudCk7XFxuK1xcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBvdHgyX21xcHJpb192YWxpZGF0ZV90eHFzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdClcXG4re1xcbitcXHRzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbitcXHR1MTYgbnVtX3R4cSA9IHBmdmYtXFx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzO1xcbitcXHRpbnQgdGMsIHR4cTtcXG4rXFxuK1xcdGlmIChxb3B0LVxcdTAwM2VudW1fdGMgXFx1MDAzZSBudW1fdHhxKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LCBcXFwiTnVtYmVyIG9mIFRDcyAoJXUpIGV4Y2VlZHMgaHcgcXVldWVzICV1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICBxb3B0LVxcdTAwM2VudW1fdGMsIG51bV90eHEpO1xcbitcXHRcXHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIFxcXCJOdW1iZXIgb2YgVENzICgldSkgZXhjZWVkcyBodyBxdWV1ZXMgJXVcXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgICAgcW9wdC1cXHUwMDNlbnVtX3RjLCBudW1fdHhxKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChudW1fdHhxIFxcdTAwM2UgTUFYX1RYU0NIUV9QRVJfRlVOQykge1xcbitcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0ICAgXFxcIk51bWJlciBvZiBxdWV1ZXMgKCV1KSBleGNlZWRzIG1heCBzY2hlZHVsZXIgcXVldWVzICV1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICBudW1fdHhxLCBNQVhfVFhTQ0hRX1BFUl9GVU5DKTtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdCAgICAgICBcXFwiTnVtYmVyIG9mIHF1ZXVlcyAoJXUpIGV4Y2VlZHMgbWF4IHNjaGVkdWxlciBxdWV1ZXMgJXVcXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgICAgbnVtX3R4cSwgTUFYX1RYU0NIUV9QRVJfRlVOQyk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRmb3IgKHRjID0gMDsgdGMgXFx1MDAzYyBxb3B0LVxcdTAwM2VudW1fdGM7IHRjKyspIHtcXG4rXFx0XFx0dTMyIHFjb3VudCA9IHFvcHQtXFx1MDAzZWNvdW50W3RjXTtcXG4rXFxuK1xcdFxcdGZvciAodHhxID0gcW9wdC1cXHUwMDNlb2Zmc2V0W3RjXTtcXG4rXFx0XFx0ICAgICB0eHEgXFx1MDAzYyBxb3B0LVxcdTAwM2VvZmZzZXRbdGNdICsgcWNvdW50OyB0eHErKykge1xcbitcXHRcXHRcXHRpZiAodHhxIFxcdTAwM2U9IG51bV90eHEpIHtcXG4rXFx0XFx0XFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIFxcXCJtcXByaW86IHR4cSAlZCBleGNlZWRzIG9mZmxvYWQgcXVldWUgY291bnQgJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHR4cSwgbnVtX3R4cSk7XFxuK1xcdFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcIm1xcHJpbzogdHhxICVkIGV4Y2VlZHMgb2ZmbG9hZCBxdWV1ZSBjb3VudCAldVxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICB0eHEsIG51bV90eHEpO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBvdHgyX21xcHJpb19yYXRlX3ZhbGlkKHU2NCByYXRlX2J5dGVzX3BzKVxcbit7XFxuK1xcdHU2NCBtYnBzO1xcbitcXG4rXFx0aWYgKCFyYXRlX2J5dGVzX3BzKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdGlmIChyYXRlX2J5dGVzX3BzIFxcdTAwM2MgT1RYMl9NUVBSSU9fTUlOX1JBVEVfQllURVNfUFMpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlmIChyYXRlX2J5dGVzX3BzIFxcdTAwM2UgT1RYMl9NUVBSSU9fTUFYX1JBVEVfQllURVNfUFMpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlmIChyYXRlX2J5dGVzX3BzIFxcdTAwM2UgZGl2X3U2NChVNjRfTUFYLCA4KSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0bWJwcyA9IG90eDJfY29udmVydF9yYXRlKHJhdGVfYnl0ZXNfcHMpO1xcbitcXHRyZXR1cm4gaWxvZzIobWJwcyAvIDIpIFxcdTAwM2M9IE1BWF9SQVRFX0VYUE9ORU5UO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcXG4rXFx0XFx0XFx0XFx0ICAgc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbylcXG4re1xcbitcXHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcXHUwMDI2bXFwcmlvLVxcdTAwM2Vxb3B0O1xcbitcXHRib29sIGhhZF9tcXByaW8gPSBwZnZmLVxcdTAwM2VtcXByaW8ucmF0ZV9saW1pdDtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtXFx1MDAzZW5ldGRldjtcXG4rXFx0Ym9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcobmV0ZGV2KTtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdHFvcHQtXFx1MDAzZWh3ID0gMDtcXG4rXFxuK1xcdC8qIHRjIHFkaXNjIHJlcGxhY2UgcnVucyBzZXR1cCBvbiB0aGUgbmV3IG1xcHJpbyBiZWZvcmUgZGVzdHJveWluZyB0aGVcXG4rXFx0ICogb2xkIG9uZS4gcmVwbGFjZV9zZXR1cF9kb25lIGFuZCBUQ19ST09UX0dSQUZUIGRpc3Rpbmd1aXNoIHN0YWxlXFxuK1xcdCAqIG9sZC1pbnN0YW5jZSB0ZWFyZG93biBmcm9tIGdyYWZ0IGZhaWx1cmUgYWZ0ZXIgc2V0dXAuXFxuK1xcdCAqL1xcbitcXHRpZiAocGZ2Zi1cXHUwMDNlbXFwcmlvLnJlcGxhY2Vfc2V0dXBfZG9uZSBcXHUwMDI2XFx1MDAyNiBwZnZmLVxcdTAwM2VjdXJfbXFfc25hcCkge1xcbitcXHRcXHRlcnIgPSAwO1xcbitcXHRcXHRpZiAocGZ2Zi1cXHUwMDNlbXFwcmlvLnJlcGxhY2VfZ3JhZnRfZG9uZSlcXG4rXFx0XFx0XFx0b3R4Ml9tcXByaW9fc25hcF9jb21taXQocGZ2Zik7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0ZXJyID0gb3R4Ml9tcXByaW9fcmVzdG9yZV9vbGQocGZ2Zik7XFxuK1xcdFxcdG90eDJfbXFwcmlvX2NsZWFyX3JlcGxhY2Vfc3RhdGUocGZ2Zik7XFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFNraXAgdGhlIG5ldGRldiByZXN0YXJ0IHdoZW4gbXFwcmlvIG9mZmxvYWQgd2FzIG5vdCBhY3RpdmUuICovXFxuK1xcdGlmICghaGFkX21xcHJpbylcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAoaWZfdXApIHtcXG4rXFx0XFx0aW50IGRvd25fZXJyLCBlcnI7XFxuK1xcbitcXHRcXHRkb3duX2VyciA9IG90eDJfbXFwcmlvX2Rvd24ocGZ2Zik7XFxuK1xcdFxcdGVyciA9IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KG5ldGRldiwgZmFsc2UpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHRyZXR1cm4gZG93bl9lcnI7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIG5kb19zdG9wKCkgYWxyZWFkeSBmcmVlZCB0aGUgVFggc2NoZWR1bGVyIFRMIG5vZGVzOyBkcm9wIHNvZnR3YXJlXFxuK1xcdCAqIHN0YXRlIG9ubHkuXFxuK1xcdCAqL1xcbitcXHRvdHgyX21xcHJpb19jbGVhcl9zdyhwZnZmKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19tcXByaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4rXFx0XFx0XFx0XFx0c3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbylcXG4re1xcbitcXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2sgPSBtcXByaW8tXFx1MDAzZWV4dGFjaztcXG4rXFx0c3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFx0c3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0ID0gXFx1MDAyNm1xcHJpby1cXHUwMDNlcW9wdDtcXG4rXFx0Ym9vbCByZXBsYWNpbmcgPSBwZnZmLVxcdTAwM2VtcXByaW8ucmF0ZV9saW1pdDtcXG4rXFx0Ym9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcobmV0ZGV2KTtcXG4rXFx0aW50IHRjLCB0eHEsIGVyciwgaTtcXG4rXFxuK1xcdGlmICghcW9wdC1cXHUwMDNlaHcpXFxuK1xcdFxcdHJldHVybiBvdHgyX3RlYXJkb3duX3RjX21xcHJpbyhwZnZmLCBtcXByaW8pO1xcbitcXG4rXFx0aWYgKCFpZl91cCkge1xcbitcXHRcXHRuZXRkZXZfZXJyKG5ldGRldiwgXFxcIm1xcHJpbzogc2V0dXAgcmVxdWlyZXMgaW50ZXJmYWNlIFVQXFxcXG5cXFwiKTtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcIm1xcHJpbzogc2V0dXAgcmVxdWlyZXMgaW50ZXJmYWNlIFVQXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKG1xcHJpby1cXHUwMDNlc2hhcGVyICE9IFRDX01RUFJJT19TSEFQRVJfQldfUkFURSkge1xcbitcXHRcXHRuZXRkZXZfZXJyKG5ldGRldiwgXFxcIlVuc3VwcG9ydGVkIG1xcHJpbyBzaGFwZXIgJSN4XFxcXG5cXFwiLCBtcXByaW8tXFx1MDAzZXNoYXBlcik7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLCBcXFwiVW5zdXBwb3J0ZWQgbXFwcmlvIHNoYXBlciAlI3hcXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgICAgbXFwcmlvLVxcdTAwM2VzaGFwZXIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghdGVzdF9iaXQoUU9TX0NJUl9QSVJfU1VQUE9SVCwgXFx1MDAyNnBmdmYtXFx1MDAzZWh3LmNhcF9mbGFnKSkge1xcbitcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgcmVxdWlyZXMgQ0lSK1BJUiBzdXBwb3J0XFxcXG5cXFwiKTtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgcmVxdWlyZXMgQ0lSK1BJUiBzdXBwb3J0XFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGlzX290eDJfc2RwX3JlcChwZnZmLVxcdTAwM2VwZGV2KSkge1xcbitcXHRcXHRuZXRkZXZfZXJyKG5ldGRldiwgXFxcIm1xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgbm90IHN1cHBvcnRlZCBvbiBTRFAgcmVwXFxcXG5cXFwiKTtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgbm90IHN1cHBvcnRlZCBvbiBTRFAgcmVwXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHBmdmYtXFx1MDAzZXBmY19lbikge1xcbitcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFBGQyBpcyBlbmFibGVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFBGQyBpcyBlbmFibGVkXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHBmdmYtXFx1MDAzZXhkcF9wcm9nKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHQgICBcXFwibXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgWERQIGlzIGFjdGl2ZVxcXFxuXFxcIik7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJtcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBYRFAgaXMgYWN0aXZlXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZwZnZmLVxcdTAwM2Vxb3MucW9zX3RyZWUpKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHQgICBcXFwibXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgSFRCIGlzIGFjdGl2ZVxcXFxuXFxcIik7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJtcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBIVEIgaXMgYWN0aXZlXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0Zm9yICh0YyA9IDA7IHRjIFxcdTAwM2MgcW9wdC1cXHUwMDNlbnVtX3RjOyB0YysrKSB7XFxuK1xcdFxcdHU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDtcXG4rXFx0XFx0dTMyIHFjb3VudCA9IHFvcHQtXFx1MDAzZWNvdW50W3RjXTtcXG4rXFxuK1xcdFxcdGlmIChtcXByaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpXFxuK1xcdFxcdFxcdG1pbl9yYXRlID0gbXFwcmlvLVxcdTAwM2VtaW5fcmF0ZVt0Y107XFxuK1xcdFxcdGlmIChtcXByaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUpXFxuK1xcdFxcdFxcdG1heF9yYXRlID0gbXFwcmlvLVxcdTAwM2VtYXhfcmF0ZVt0Y107XFxuK1xcbitcXHRcXHRpZiAobWluX3JhdGUgXFx1MDAyNlxcdTAwMjYgbWF4X3JhdGUgXFx1MDAyNlxcdTAwMjYgbWluX3JhdGUgXFx1MDAzZSBtYXhfcmF0ZSkge1xcbitcXHRcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIm1pbl9yYXRlICVsbHUgZXhjZWVkcyBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgbWluX3JhdGUsIG1heF9yYXRlLCB0Yyk7XFxuK1xcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcIm1pbl9yYXRlICVsbHUgZXhjZWVkcyBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZFxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBtaW5fcmF0ZSwgbWF4X3JhdGUsIHRjKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChtcXByaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpIHtcXG4rXFx0XFx0XFx0ZXJyID0gb3R4Ml9tcXByaW9fdmFsaWRhdGVfdGNfcmF0ZShuZXRkZXYsIGV4dGFjaywgbWluX3JhdGUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIHFjb3VudCwgdGMsIFxcXCJtaW5cXFwiKTtcXG4rXFx0XFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKG1xcHJpby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSkge1xcbitcXHRcXHRcXHRlcnIgPSBvdHgyX21xcHJpb192YWxpZGF0ZV90Y19yYXRlKG5ldGRldiwgZXh0YWNrLCBtYXhfcmF0ZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgcWNvdW50LCB0YywgXFxcIm1heFxcXCIpO1xcbitcXHRcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAobXFwcmlvLVxcdTAwM2VmbGFncyBcXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAhb3R4Ml9tcXByaW9fcmF0ZV92YWxpZChtaW5fcmF0ZSkpIHtcXG4rXFx0XFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJtcXByaW86IG1pbl9yYXRlICVsbHUgZm9yIHRjICVkIGlzIG91dHNpZGUgaGFyZHdhcmUgbGltaXRzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICBtaW5fcmF0ZSwgdGMpO1xcbitcXHRcXHRcXHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXCJtcXByaW86IG1pbl9yYXRlICVsbHUgZm9yIHRjICVkIGlzIG91dHNpZGUgaGFyZHdhcmUgbGltaXRzXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIG1pbl9yYXRlLCB0Yyk7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAobXFwcmlvLVxcdTAwM2VmbGFncyBcXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAhb3R4Ml9tcXByaW9fcmF0ZV92YWxpZChtYXhfcmF0ZSkpIHtcXG4rXFx0XFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJtcXByaW86IG1heF9yYXRlICVsbHUgZm9yIHRjICVkIGlzIG91dHNpZGUgaGFyZHdhcmUgbGltaXRzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICBtYXhfcmF0ZSwgdGMpO1xcbitcXHRcXHRcXHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXCJtcXByaW86IG1heF9yYXRlICVsbHUgZm9yIHRjICVkIGlzIG91dHNpZGUgaGFyZHdhcmUgbGltaXRzXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIG1heF9yYXRlLCB0Yyk7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdGVyciA9IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3R4cXMobmV0ZGV2LCBleHRhY2ssIHFvcHQpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0ZXJyID0gb3R4Ml9tcXByaW9fc3RhZ2VfY3VyKHBmdmYsIG1xcHJpbyk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHRlcnIgPSBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihwZnZmLVxcdTAwM2VuZXRkZXYsIHRydWUpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHRlcnIgPSBvdHgyX21xcHJpb19hbGxvY19jYWNoZShwZnZmLCByZXBsYWNpbmcpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHQvKiBvdHgyX21xcHJpb191cCgpIG1heSBoYXZlIHJlc3RvcmVkIHRoZSBwcmV2aW91cyBjb25maWd1cmF0aW9uIGR1cmluZ1xcbitcXHQgKiB0aGUgcmVzdGFydCBhYm92ZS4gQ2xlYXIgZXZlcnkgTURRIHNoYXBlciBiZWZvcmUgYXBwbHlpbmcgdGhlIG5ld1xcbitcXHQgKiBtYXBwaW5nIHNvIHF1ZXVlcyBkcm9wcGVkIGZyb20gdGhlIFRDIGxheW91dCBkbyBub3Qga2VlcCBzdGFsZVxcbitcXHQgKiBsaW1pdHMgaW4gaGFyZHdhcmUuXFxuK1xcdCAqL1xcbitcXHRpZiAob3R4Ml9tcXByaW9fbWRxX2FsbG9jYXRlZChwZnZmKSkge1xcbitcXHRcXHRlcnIgPSBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIocGZ2Zik7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0fVxcbitcXG4rXFx0cGZ2Zi1cXHUwMDNlbXFwcmlvLmZsYWdzID0gbXFwcmlvLVxcdTAwM2VmbGFncztcXG4rXFxuK1xcdGZvciAodGMgPSAwOyB0YyBcXHUwMDNjIHFvcHQtXFx1MDAzZW51bV90YzsgdGMrKykge1xcbitcXHRcXHR1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7XFxuK1xcdFxcdHUzMiBxY291bnQgPSBxb3B0LVxcdTAwM2Vjb3VudFt0Y107XFxuK1xcbitcXHRcXHQvKiBSYXRlcyBvbWl0dGVkIGZyb20gdGMgbXFwcmlvIGFyZSBwYXNzZWQgYXMgemVybyBhbmQgYm90aCBNRFFcXG4rXFx0XFx0ICogc2hhcGVyIHJlZ2lzdGVycyBhcmUgcHJvZ3JhbW1lZDsgc2VlXFxuK1xcdFxcdCAqIG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoKS4gTXVsdGktcXVldWUgVENzIHdpdGggcmF0ZXNcXG4rXFx0XFx0ICogYXJlIHJlamVjdGVkIGFib3ZlLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKG1xcHJpby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcXG4rXFx0XFx0XFx0bWluX3JhdGUgPSBtcXByaW8tXFx1MDAzZW1pbl9yYXRlW3RjXTtcXG4rXFx0XFx0aWYgKG1xcHJpby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSlcXG4rXFx0XFx0XFx0bWF4X3JhdGUgPSBtcXByaW8tXFx1MDAzZW1heF9yYXRlW3RjXTtcXG4rXFxuK1xcdFxcdGZvciAodHhxID0gcW9wdC1cXHUwMDNlb2Zmc2V0W3RjXTtcXG4rXFx0XFx0ICAgICB0eHEgXFx1MDAzYyBxb3B0LVxcdTAwM2VvZmZzZXRbdGNdICsgcWNvdW50OyB0eHErKykge1xcbitcXHRcXHRcXHRuZXRkZXZfZGJnKG5ldGRldixcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogdGMgJWQgdHhxICVkIG1pbl9yYXRlICVsbHUgbWF4X3JhdGUgJWxsdVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgdGMsIHR4cSwgbWluX3JhdGUsIG1heF9yYXRlKTtcXG4rXFxuK1xcdFxcdFxcdHBmdmYtXFx1MDAzZW1xcHJpby5taW5fcmF0ZVt0eHFdID0gbWluX3JhdGU7XFxuK1xcdFxcdFxcdHBmdmYtXFx1MDAzZW1xcHJpby5tYXhfcmF0ZVt0eHFdID0gbWF4X3JhdGU7XFxuK1xcbitcXHRcXHRcXHRlcnIgPSBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHBmdmYsIHR4cSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgbWluX3JhdGUsIG1heF9yYXRlKTtcXG4rXFx0XFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0XFx0Z290byBjbGVhbnVwO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdG5ldGRldl9zZXRfbnVtX3RjKG5ldGRldiwgcGZ2Zi1cXHUwMDNlY3VyX21xX3NuYXAtXFx1MDAzZW51bV90Yyk7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwZnZmLVxcdTAwM2VjdXJfbXFfc25hcC1cXHUwMDNlbnVtX3RjOyBpKyspXFxuK1xcdFxcdG5ldGRldl9zZXRfdGNfcXVldWUobmV0ZGV2LCBpLCBwZnZmLVxcdTAwM2VjdXJfbXFfc25hcC1cXHUwMDNlY291bnRbaV0sXFxuK1xcdFxcdFxcdFxcdCAgICBxb3B0LVxcdTAwM2VvZmZzZXRbaV0pO1xcbitcXG4rXFx0cW9wdC1cXHUwMDNlaHcgPSBUQ19NUVBSSU9fSFdfT0ZGTE9BRF9UQ1M7XFxuK1xcbitcXHRpZiAocmVwbGFjaW5nKSB7XFxuK1xcdFxcdHBmdmYtXFx1MDAzZW1xcHJpby5yZXBsYWNlX3NldHVwX2RvbmUgPSB0cnVlO1xcbitcXHRcXHRwZnZmLVxcdTAwM2VtcXByaW8ucmVwbGFjZV9ncmFmdF9kb25lID0gZmFsc2U7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdG90eDJfbXFwcmlvX3NuYXBfY29tbWl0KHBmdmYpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2NsZWFudXA6XFxuK1xcdHFvcHQtXFx1MDAzZWh3ID0gMDtcXG4rXFx0aWYgKHJlcGxhY2luZykge1xcbitcXHRcXHRpbnQgcmVzdG9yZV9lcnIgPSBvdHgyX21xcHJpb19yZXN0b3JlX29sZChwZnZmKTtcXG4rXFxuK1xcdFxcdG90eDJfbXFwcmlvX2NsZWFyX3JlcGxhY2Vfc3RhdGUocGZ2Zik7XFxuK1xcdFxcdGlmIChyZXN0b3JlX2Vycikge1xcbitcXHRcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogcmVwbGFjZSBmYWlsZWQgYW5kIHByaW9yIGNvbmZpZ3VyYXRpb24gcm9sbGJhY2sgZmFpbGVkOiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgcmVzdG9yZV9lcnIpO1xcbitcXHRcXHRcXHRpZiAoZXh0YWNrKVxcbitcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXCJtcXByaW86IHJlcGxhY2UgZmFpbGVkIGFuZCBwcmlvciBjb25maWd1cmF0aW9uIHJvbGxiYWNrIGZhaWxlZDogJWRcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgcmVzdG9yZV9lcnIpO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogcmVwbGFjZSBmYWlsZWQ7IHByaW9yIGNvbmZpZ3VyYXRpb24gcmVzdG9yZWRcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRpZiAoZXh0YWNrKVxcbitcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiByZXBsYWNlIGZhaWxlZDsgcHJpb3IgY29uZmlndXJhdGlvbiByZXN0b3JlZFxcXCIpO1xcbitcXHRcXHR9XFxuK1xcdFxcdHJldHVybiBlcnIgPyBlcnIgOiAtRUlPO1xcbitcXHR9XFxuK1xcdG90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHBmdmYsIG1xcHJpbyk7XFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19yb290KHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IHRjX3Jvb3RfcW9wdF9vZmZsb2FkICpyb290KVxcbit7XFxuK1xcdHN3aXRjaCAocm9vdC1cXHUwMDNlY29tbWFuZCkge1xcbitcXHRjYXNlIFRDX1JPT1RfR1JBRlQ6XFxuK1xcdFxcdGlmIChwZnZmLVxcdTAwM2VtcXByaW8ucmVwbGFjZV9zZXR1cF9kb25lKVxcbitcXHRcXHRcXHRwZnZmLVxcdTAwM2VtcXByaW8ucmVwbGFjZV9ncmFmdF9kb25lID0gdHJ1ZTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfcXVlcnlfY2Fwcyh2b2lkICp0eXBlX2RhdGEpXFxuK3tcXG4rXFx0c3RydWN0IHRjX3F1ZXJ5X2NhcHNfYmFzZSAqYmFzZSA9IHR5cGVfZGF0YTtcXG4rXFx0c3RydWN0IHRjX21xcHJpb19jYXBzICpjYXBzO1xcbitcXG4rXFx0aWYgKGJhc2UtXFx1MDAzZXR5cGUgIT0gVENfU0VUVVBfUURJU0NfTVFQUklPKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRjYXBzID0gYmFzZS1cXHUwMDNlY2FwcztcXG4rXFx0Y2Fwcy1cXHUwMDNldmFsaWRhdGVfcXVldWVfY291bnRzID0gdHJ1ZTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBpbnQgb3R4Ml9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSxcXG4gXFx0XFx0ICB2b2lkICp0eXBlX2RhdGEpXFxuIHtcXG4gXFx0c3dpdGNoICh0eXBlKSB7XFxuK1xcdGNhc2UgVENfUVVFUllfQ0FQUzpcXG4rXFx0XFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfcXVlcnlfY2Fwcyh0eXBlX2RhdGEpO1xcbiBcXHRjYXNlIFRDX1NFVFVQX0JMT0NLOlxcbiBcXHRcXHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19ibG9jayhuZXRkZXYsIHR5cGVfZGF0YSk7XFxuIFxcdGNhc2UgVENfU0VUVVBfUURJU0NfSFRCOlxcbiBcXHRcXHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19odGIobmV0ZGV2LCB0eXBlX2RhdGEpO1xcbitcXHRjYXNlIFRDX1NFVFVQX1FESVNDX01RUFJJTzpcXG4rXFx0XFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfbXFwcmlvKG5ldGRldiwgdHlwZV9kYXRhKTtcXG4rXFx0Y2FzZSBUQ19TRVRVUF9ST09UX1FESVNDOlxcbitcXHRcXHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19yb290KG5ldGRldl9wcml2KG5ldGRldiksIHR5cGVfZGF0YSk7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gXFx0fVxcbkBAIC0xNjMyLDYgKzIzNzcsNyBAQCBFWFBPUlRfU1lNQk9MKG90eDJfaW5pdF90Yyk7XFxuIHZvaWQgb3R4Ml9zaHV0ZG93bl90YyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYylcXG4ge1xcbiBcXHRvdHgyX2Rlc3Ryb3lfdGNfZmxvd19saXN0KG5pYyk7XFxuK1xcdG90eDJfbXFwcmlvX3NuYXBfZGVzdHJveShuaWMpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0wob3R4Ml9zaHV0ZG93bl90Yyk7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90eHJ4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90eHJ4LmNcXG5pbmRleCA4ZDJkNjA3YmM5MmY5Li5mNjViYTQ0ZGI2MGI2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3R4cnguY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3R4cnguY1xcbkBAIC0xNzEsNyArMTcxLDcgQEAgc3RhdGljIHZvaWQgb3R4Ml9zZXRfcnh0c3RhbXAoc3RydWN0IG90eDJfbmljICpwZnZmLFxcbiBcXHR1NjQgdGltZXN0YW1wLCB0c25zO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4tXFx0aWYgKCEocGZ2Zi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBPVFgyX0ZMQUdfUlhfVFNUQU1QX0VOQUJMRUQpKVxcbitcXHRpZiAoIW90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19SWF9UU1RBTVBfRU5BQkxFRCkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdHRpbWVzdGFtcCA9IHBmdmYtXFx1MDAzZXB0cC1cXHUwMDNlY29udmVydF9yeF9wdHBfdHN0bXAoKih1NjQgKilkYXRhKTtcXG5AQCAtMzc0LDEzICszNzQsMTMgQEAgc3RhdGljIHZvaWQgb3R4Ml9yY3ZfcGt0X2hhbmRsZXIoc3RydWN0IG90eDJfbmljICpwZnZmLFxcbiBcXHR9XFxuIFxcdG90eDJfc2V0X3J4aGFzaChwZnZmLCBjcWUsIHNrYik7XFxuIFxcbi1cXHRpZiAoIShwZnZmLVxcdTAwM2VmbGFncyBcXHUwMDI2IE9UWDJfRkxBR19SRVBfTU9ERV9FTkFCTEVEKSkge1xcbitcXHRpZiAoIW90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19SRVBfTU9ERV9FTkFCTEVEKSkge1xcbiBcXHRcXHRza2JfcmVjb3JkX3J4X3F1ZXVlKHNrYiwgY3EtXFx1MDAzZWNxX2lkeCk7XFxuIFxcdFxcdGlmIChwZnZmLVxcdTAwM2VuZXRkZXYtXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjYgTkVUSUZfRl9SWENTVU0pXFxuIFxcdFxcdFxcdHNrYi1cXHUwMDNlaXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChwZnZmLVxcdTAwM2VmbGFncyBcXHUwMDI2IE9UWDJfRkxBR19UQ19NQVJLX0VOQUJMRUQpXFxuK1xcdGlmIChvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfVENfTUFSS19FTkFCTEVEKSlcXG4gXFx0XFx0c2tiLVxcdTAwM2VtYXJrID0gcGFyc2UtXFx1MDAzZW1hdGNoX2lkO1xcbiBcXG4gXFx0c2tiX21hcmtfZm9yX3JlY3ljbGUoc2tiKTtcXG5AQCAtNTEzLDcgKzUxMyw3IEBAIHN0YXRpYyBpbnQgb3R4Ml90eF9uYXBpX2hhbmRsZXIoc3RydWN0IG90eDJfbmljICpwZnZmLFxcbiBcXHRcXHQgICAgICgodTY0KWNxLVxcdTAwM2VjcV9pZHggXFx1MDAzY1xcdTAwM2MgMzIpIHwgcHJvY2Vzc2VkX2NxZSk7XFxuIFxcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfUlZVX0VTV0lUQ0gpXFxuLVxcdGlmIChwZnZmLVxcdTAwM2VmbGFncyBcXHUwMDI2IE9UWDJfRkxBR19SRVBfTU9ERV9FTkFCTEVEKVxcbitcXHRpZiAob3R4Ml90ZXN0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1JFUF9NT0RFX0VOQUJMRUQpKVxcbiBcXHRcXHRuZGV2ID0gcGZ2Zi1cXHUwMDNlcmVwc1txaWR4XS1cXHUwMDNlbmV0ZGV2O1xcbiBcXHRlbHNlXFxuICNlbmRpZlxcbkBAIC01MjYsNyArNTI2LDcgQEAgc3RhdGljIGludCBvdHgyX3R4X25hcGlfaGFuZGxlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXFxuIFxcbiBcXHRcXHRpZiAocWlkeCBcXHUwMDNlPSBwZnZmLVxcdTAwM2Vody50eF9xdWV1ZXMpXFxuIFxcdFxcdFxcdHFpZHggLT0gcGZ2Zi1cXHUwMDNlaHcueGRwX3F1ZXVlcztcXG4tXFx0XFx0aWYgKHBmdmYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgT1RYMl9GTEFHX1JFUF9NT0RFX0VOQUJMRUQpXFxuK1xcdFxcdGlmIChvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfUkVQX01PREVfRU5BQkxFRCkpXFxuIFxcdFxcdFxcdHFpZHggPSAwO1xcbiBcXHRcXHR0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKG5kZXYsIHFpZHgpO1xcbiBcXHRcXHRuZXRkZXZfdHhfY29tcGxldGVkX3F1ZXVlKHR4cSwgdHhfcGt0cywgdHhfYnl0ZXMpO1xcbkBAIC01OTksMTEgKzU5OSwxMSBAQCBpbnQgb3R4Ml9uYXBpX2hhbmRsZXIoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KVxcbiBcXG4gXFx0aWYgKHdvcmtkb25lIFxcdTAwM2MgYnVkZ2V0IFxcdTAwMjZcXHUwMDI2IG5hcGlfY29tcGxldGVfZG9uZShuYXBpLCB3b3JrZG9uZSkpIHtcXG4gXFx0XFx0LyogSWYgaW50ZXJmYWNlIGlzIGdvaW5nIGRvd24sIGRvbid0IHJlLWVuYWJsZSBJUlEgKi9cXG4tXFx0XFx0aWYgKHBmdmYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgT1RYMl9GTEFHX0lOVEZfRE9XTilcXG4rXFx0XFx0aWYgKG90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19JTlRGX0RPV04pKVxcbiBcXHRcXHRcXHRyZXR1cm4gd29ya2RvbmU7XFxuIFxcbiBcXHRcXHQvKiBBZGp1c3QgaXJxIGNvYWxlc2UgdXNpbmcgbmV0X2RpbSAqL1xcbi1cXHRcXHRpZiAocGZ2Zi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBPVFgyX0ZMQUdfQURQVFZfSU5UX0NPQUxfRU5BQkxFRClcXG4rXFx0XFx0aWYgKG90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19BRFBUVl9JTlRfQ09BTF9FTkFCTEVEKSlcXG4gXFx0XFx0XFx0b3R4Ml9hZGp1c3RfYWRhcHRpdmVfY29hbGVzZShwZnZmLCBjcV9wb2xsKTtcXG4gXFxuIFxcdFxcdGlmIChsaWtlbHkoY3EpKVxcbkBAIC0xMTM3LDcgKzExMzcsNyBAQCBzdGF0aWMgdm9pZCBvdHgyX3NldF90eHRzdGFtcChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcbiBcXHRpZiAodW5saWtlbHkoIXNrYl9zaGluZm8oc2tiKS1cXHUwMDNlZ3NvX3NpemUgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgICAoc2tiX3NoaW5mbyhza2IpLVxcdTAwM2V0eF9mbGFncyBcXHUwMDI2IFNLQlRYX0hXX1RTVEFNUCkpKSB7XFxuLVxcdFxcdGlmICh1bmxpa2VseShwZnZmLVxcdTAwM2VmbGFncyBcXHUwMDI2IE9UWDJfRkxBR19QVFBfT05FU1RFUF9TWU5DIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdGlmICh1bmxpa2VseShvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfUFRQX09ORVNURVBfU1lOQykgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0XFx0ICAgICBvdHgyX3B0cF9pc19zeW5jKHNrYiwgXFx1MDAyNnB0cF9vZmZzZXQsIFxcdTAwMjZ1ZHBfY3N1bV9jcnQpKSkge1xcbiBcXHRcXHRcXHRvcmlnaW5fdHN0YW1wID0gKHN0cnVjdCBwdHB2Ml90c3RhbXAgKilcXG4gXFx0XFx0XFx0XFx0XFx0KCh1OCAqKXNrYi1cXHUwMDNlZGF0YSArIHB0cF9vZmZzZXQgK1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml92Zi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdmYuY1xcbmluZGV4IGY3NzY1ZTE5ZDc4YTkuLjVmNzkxNTIzMWNhM2EgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdmYuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmNcXG5AQCAtNjEwLDcgKzYxMCw3IEBAIHN0YXRpYyBpbnQgb3R4MnZmX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXFxuIFxcdHZmLVxcdTAwM2VkZXYgPSBkZXY7XFxuIFxcdHZmLVxcdTAwM2Vpb21tdV9kb21haW4gPSBpb21tdV9nZXRfZG9tYWluX2Zvcl9kZXYoZGV2KTtcXG4gXFxuLVxcdHZmLVxcdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfSU5URl9ET1dOO1xcbitcXHRvdHgyX3NldF9mbGFnKHZmLCBPVFgyX0ZMQUdfSU5URl9ET1dOKTtcXG4gXFx0aHcgPSBcXHUwMDI2dmYtXFx1MDAzZWh3O1xcbiBcXHRody1cXHUwMDNlcGRldiA9IHZmLVxcdTAwM2VwZGV2O1xcbiBcXHRody1cXHUwMDNlcnhfcXVldWVzID0gcWNvdW50O1xcbkBAIC04MjQsMTAgKzgyNCwxMCBAQCBzdGF0aWMgdm9pZCBvdHgydmZfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiBcXHR2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuIFxcbiBcXHQvKiBEaXNhYmxlIDgwMi4zeCBwYXVzZSBmcmFtZXMgKi9cXG4tXFx0aWYgKHZmLVxcdTAwM2VmbGFncyBcXHUwMDI2IE9UWDJfRkxBR19SWF9QQVVTRV9FTkFCTEVEIHx8XFxuLVxcdCAgICAodmYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgT1RYMl9GTEFHX1RYX1BBVVNFX0VOQUJMRUQpKSB7XFxuLVxcdFxcdHZmLVxcdTAwM2VmbGFncyBcXHUwMDI2PSB+T1RYMl9GTEFHX1JYX1BBVVNFX0VOQUJMRUQ7XFxuLVxcdFxcdHZmLVxcdTAwM2VmbGFncyBcXHUwMDI2PSB+T1RYMl9GTEFHX1RYX1BBVVNFX0VOQUJMRUQ7XFxuK1xcdGlmIChvdHgyX3Rlc3RfZmxhZyh2ZiwgT1RYMl9GTEFHX1JYX1BBVVNFX0VOQUJMRUQpIHx8XFxuK1xcdCAgICBvdHgyX3Rlc3RfZmxhZyh2ZiwgT1RYMl9GTEFHX1RYX1BBVVNFX0VOQUJMRUQpKSB7XFxuK1xcdFxcdG90eDJfY2xlYXJfZmxhZyh2ZiwgT1RYMl9GTEFHX1JYX1BBVVNFX0VOQUJMRUQpO1xcbitcXHRcXHRvdHgyX2NsZWFyX2ZsYWcodmYsIE9UWDJfRkxBR19UWF9QQVVTRV9FTkFCTEVEKTtcXG4gXFx0XFx0b3R4Ml9jb25maWdfcGF1c2VfZnJtKHZmKTtcXG4gXFx0fVxcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfeHNrLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml94c2suY1xcbmluZGV4IDBlOGE2YTY0ODZjNGEuLjc4MDg1ODhhMDIzNGEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfeHNrLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml94c2suY1xcbkBAIC05Niw3ICs5Niw3IEBAIHN0YXRpYyB2b2lkIG90eDJfY2xlYW5fdXBfcnEoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgcWlkeClcXG4gXFx0dTY0IGlvdmE7XFxuIFxcbiBcXHQvKiBJZiB0aGUgRE9XTiBmbGFnIGlzIHNldCBTUXMgYXJlIGFscmVhZHkgZnJlZWQgKi9cXG4tXFx0aWYgKHBmdmYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgT1RYMl9GTEFHX0lOVEZfRE9XTilcXG4rXFx0aWYgKG90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19JTlRGX0RPV04pKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRjcSA9IFxcdTAwMjZxc2V0LVxcdTAwM2VjcVtxaWR4XTtcXG5AQCAtMTcyLDcgKzE3Miw3IEBAIGludCBvdHgyX3hza193YWtldXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHF1ZXVlX2lkLCB1MzIgZmxhZ3MpXFxuIFxcdHN0cnVjdCBvdHgyX2NxX3BvbGwgKmNxX3BvbGwgPSBOVUxMO1xcbiBcXHRzdHJ1Y3Qgb3R4Ml9xc2V0ICpxc2V0ID0gXFx1MDAyNnBmLVxcdTAwM2Vxc2V0O1xcbiBcXG4tXFx0aWYgKHBmLVxcdTAwM2VmbGFncyBcXHUwMDI2IE9UWDJfRkxBR19JTlRGX0RPV04pXFxuK1xcdGlmIChvdHgyX3Rlc3RfZmxhZyhwZiwgT1RYMl9GTEFHX0lOVEZfRE9XTikpXFxuIFxcdFxcdHJldHVybiAtRU5FVERPV047XFxuIFxcbiBcXHRpZiAocXVldWVfaWQgXFx1MDAzZT0gcGYtXFx1MDAzZWh3LnJ4X3F1ZXVlcyB8fCBxdWV1ZV9pZCBcXHUwMDNlPSBwZi1cXHUwMDNlaHcudHhfcXVldWVzKVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmNcXG5pbmRleCBmMTYwYjE2MThlZmEyLi45ZWY1NWE2ZGI1MGI3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuY1xcbkBAIC0xMTgsNiArMTE4LDkgQEAgc3RhdGljIHZvaWQgb3R4Ml9jb25maWdfc2NoZWRfc2hhcGluZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXFxuIFxcdC8qIGNvbmZpZ3VyZSBQSVIgKi9cXG4gXFx0bWF4cmF0ZSA9IChub2RlLVxcdTAwM2VyYXRlIFxcdTAwM2Ugbm9kZS1cXHUwMDNlY2VpbCkgPyBub2RlLVxcdTAwM2VyYXRlIDogbm9kZS1cXHUwMDNlY2VpbDtcXG4gXFxuK1xcdC8qIDY1NTM2IGlzIHRoZSBrZXJuZWwtc2lkZSBkZWZhdWx0IGJ1cnN0IHdoZW4gSFRCIGRvZXMgbm90IHN1cHBseSBhblxcbitcXHQgKiBleHBsaWNpdCB2YWx1ZSwgbm90IHRoZSBOSVggaGFyZHdhcmUgbWF4aW11bSAoQ04xMEtfTUFYX0JVUlNUX1NJWkUpLlxcbitcXHQgKi9cXG4gXFx0Y2ZnLVxcdTAwM2VyZWd2YWxbKm51bV9yZWdzXSA9XFxuIFxcdFxcdG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCBtYXhyYXRlLCA2NTUzNik7XFxuIFxcdCgqbnVtX3JlZ3MpKys7XFxuQEAgLTEwODgsNiArMTA5MSwxNCBAQCBzdGF0aWMgaW50IG90eDJfcW9zX3Jvb3RfYWRkKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgdTE2IGh0Yl9tYWpfaWQsIHUxNiBodGJfZGVmY1xcbiBcXHRcXHQgICBcXFwiVENfSFRCX0NSRUFURTogaGFuZGxlPTB4JXggZGVmY2xzPTB4JXhcXFxcblxcXCIsXFxuIFxcdFxcdCAgIGh0Yl9tYWpfaWQsIGh0Yl9kZWZjbHMpO1xcbiBcXG4rXFx0aWYgKHBmdmYtXFx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KSB7XFxuK1xcdFxcdG5ldGRldl9lcnIocGZ2Zi1cXHUwMDNlbmV0ZGV2LFxcbitcXHRcXHRcXHQgICBcXFwiSFRCOiBjYW5ub3QgZW5hYmxlIHdoaWxlIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBpcyBhY3RpdmVcXFxcblxcXCIpO1xcbitcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICBcXFwiSFRCOiBjYW5ub3QgZW5hYmxlIHdoaWxlIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBpcyBhY3RpdmVcXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbiBcXHRyb290ID0gb3R4Ml9xb3NfYWxsb2Nfcm9vdChwZnZmKTtcXG4gXFx0aWYgKElTX0VSUihyb290KSkge1xcbiBcXHRcXHRlcnIgPSBQVFJfRVJSKHJvb3QpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zX3NxLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zX3NxLmNcXG5pbmRleCAyODcyYWRhYmM4MzA1Li41ZjA5ZTI5NjAxNDQxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3Nfc3EuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3Nfc3EuY1xcbkBAIC0yMzgsNyArMjM4LDcgQEAgaW50IG90eDJfcW9zX2VuYWJsZV9zcShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBxaWR4KVxcbiBcXHRzdHJ1Y3Qgb3R4Ml9odyAqaHcgPSBcXHUwMDI2cGZ2Zi1cXHUwMDNlaHc7XFxuIFxcdGludCBwb29sX2lkLCBzcV9pZHgsIGVycjtcXG4gXFxuLVxcdGlmIChwZnZmLVxcdTAwM2VmbGFncyBcXHUwMDI2IE9UWDJfRkxBR19JTlRGX0RPV04pXFxuK1xcdGlmIChvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfSU5URl9ET1dOKSlcXG4gXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4gXFxuIFxcdHNxX2lkeCA9IGh3LVxcdTAwM2Vub25fcW9zX3F1ZXVlcyArIHFpZHg7XFxuQEAgLTI4OCw3ICsyODgsNyBAQCB2b2lkIG90eDJfcW9zX2Rpc2FibGVfc3Eoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgcWlkeClcXG4gXFx0c3FfaWR4ID0gaHctXFx1MDAzZW5vbl9xb3NfcXVldWVzICsgcWlkeDtcXG4gXFxuIFxcdC8qIElmIHRoZSBET1dOIGZsYWcgaXMgc2V0IFNRcyBhcmUgYWxyZWFkeSBmcmVlZCAqL1xcbi1cXHRpZiAocGZ2Zi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBPVFgyX0ZMQUdfSU5URl9ET1dOKVxcbitcXHRpZiAob3R4Ml90ZXN0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX0lOVEZfRE9XTikpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdHNxID0gXFx1MDAyNnBmdmYtXFx1MDAzZXFzZXQuc3Fbc3FfaWR4XTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3JlcC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3JlcC5jXFxuaW5kZXggMGY1ZDU2NDJkM2Y3YS4uOGE4YzAwODhmZDIwNCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmNcXG5AQCAtOTMsOSArOTMsOSBAQCBzdGF0aWMgaW50IHJ2dV9yZXBfbWNhbV9mbG93X2luaXQoc3RydWN0IHJlcF9kZXYgKnJlcClcXG4gXFx0cmVwLVxcdTAwM2VmbG93X2NmZy1cXHUwMDNlbWF4X2Zsb3dzID0gYWxsb2NhdGVkO1xcbiBcXG4gXFx0aWYgKGFsbG9jYXRlZCkge1xcbi1cXHRcXHRyZXAtXFx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19NQ0FNX0VOVFJJRVNfQUxMT0M7XFxuLVxcdFxcdHJlcC1cXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX05UVVBMRV9TVVBQT1JUO1xcbi1cXHRcXHRyZXAtXFx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19UQ19GTE9XRVJfU1VQUE9SVDtcXG4rXFx0XFx0c2V0X2JpdChPVFgyX0ZMQUdfTUNBTV9FTlRSSUVTX0FMTE9DLCBcXHUwMDI2cmVwLVxcdTAwM2VmbGFncyk7XFxuK1xcdFxcdHNldF9iaXQoT1RYMl9GTEFHX05UVVBMRV9TVVBQT1JULCBcXHUwMDI2cmVwLVxcdTAwM2VmbGFncyk7XFxuK1xcdFxcdHNldF9iaXQoT1RYMl9GTEFHX1RDX0ZMT1dFUl9TVVBQT1JULCBcXHUwMDI2cmVwLVxcdTAwM2VmbGFncyk7XFxuIFxcdH1cXG4gXFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZyZXAtXFx1MDAzZWZsb3dfY2ZnLVxcdTAwM2VmbG93X2xpc3QpO1xcbkBAIC0xMDksMTQgKzEwOSwxNCBAQCBzdGF0aWMgaW50IHJ2dV9yZXBfc2V0dXBfdGNfY2IoZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsXFxuIFxcdHN0cnVjdCByZXBfZGV2ICpyZXAgPSBjYl9wcml2O1xcbiBcXHRzdHJ1Y3Qgb3R4Ml9uaWMgKnByaXYgPSByZXAtXFx1MDAzZW1kZXY7XFxuIFxcbi1cXHRpZiAoIShyZXAtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUlZVX1JFUF9WRl9JTklUSUFMSVpFRCkpXFxuK1xcdGlmICghdGVzdF9iaXQoT1RYMl9SRVBfVkZfSU5JVElBTElaRUQsIFxcdTAwMjZyZXAtXFx1MDAzZWZsYWdzKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbi1cXHRpZiAoIShyZXAtXFx1MDAzZWZsYWdzIFxcdTAwMjYgT1RYMl9GTEFHX1RDX0ZMT1dFUl9TVVBQT1JUKSlcXG4rXFx0aWYgKCF0ZXN0X2JpdChPVFgyX0ZMQUdfVENfRkxPV0VSX1NVUFBPUlQsIFxcdTAwMjZyZXAtXFx1MDAzZWZsYWdzKSlcXG4gXFx0XFx0cnZ1X3JlcF9tY2FtX2Zsb3dfaW5pdChyZXApO1xcbiBcXG4gXFx0cHJpdi1cXHUwMDNlbmV0ZGV2ID0gcmVwLVxcdTAwM2VuZXRkZXY7XFxuLVxcdHByaXYtXFx1MDAzZWZsYWdzID0gcmVwLVxcdTAwM2VmbGFncztcXG4rXFx0b3R4Ml9zeW5jX2ZsYWdzX2Zyb21fcmVwKHByaXYsIFxcdTAwMjZyZXAtXFx1MDAzZWZsYWdzKTtcXG4gXFx0cHJpdi1cXHUwMDNlcGNpZnVuYyA9IHJlcC1cXHUwMDNlcGNpZnVuYztcXG4gXFx0cHJpdi1cXHUwMDNlZmxvd19jZmcgPSByZXAtXFx1MDAzZWZsb3dfY2ZnO1xcbiBcXG5AQCAtMzAzLDkgKzMwMyw5IEBAIHN0YXRpYyB2b2lkIHJ2dV9yZXBfc3RhdGVfZXZ0X2hhbmRsZXIoc3RydWN0IG90eDJfbmljICpwcml2LFxcbiBcXHRyZXBfaWQgPSBydnVfcmVwX2dldF9yZXBpZChwcml2LCBpbmZvLVxcdTAwM2VwY2lmdW5jKTtcXG4gXFx0cmVwID0gcHJpdi1cXHUwMDNlcmVwc1tyZXBfaWRdO1xcbiBcXHRpZiAoaW5mby1cXHUwMDNlZXZ0X2RhdGEudmZfc3RhdGUpXFxuLVxcdFxcdHJlcC1cXHUwMDNlZmxhZ3MgfD0gUlZVX1JFUF9WRl9JTklUSUFMSVpFRDtcXG4rXFx0XFx0c2V0X2JpdChPVFgyX1JFUF9WRl9JTklUSUFMSVpFRCwgXFx1MDAyNnJlcC1cXHUwMDNlZmxhZ3MpO1xcbiBcXHRlbHNlXFxuLVxcdFxcdHJlcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gflJWVV9SRVBfVkZfSU5JVElBTElaRUQ7XFxuK1xcdFxcdGNsZWFyX2JpdChPVFgyX1JFUF9WRl9JTklUSUFMSVpFRCwgXFx1MDAyNnJlcC1cXHUwMDNlZmxhZ3MpO1xcbiB9XFxuIFxcbiBpbnQgcnZ1X2V2ZW50X3VwX25vdGlmeShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmLCBzdHJ1Y3QgcmVwX2V2ZW50ICppbmZvKVxcbkBAIC0zODIsNyArMzgyLDcgQEAgc3RhdGljIHZvaWQgcnZ1X3JlcF9nZXRfc3RhdHM2NChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiB7XFxuIFxcdHN0cnVjdCByZXBfZGV2ICpyZXAgPSBuZXRkZXZfcHJpdihkZXYpO1xcbiBcXG4tXFx0aWYgKCEocmVwLVxcdTAwM2VmbGFncyBcXHUwMDI2IFJWVV9SRVBfVkZfSU5JVElBTElaRUQpKVxcbitcXHRpZiAoIXRlc3RfYml0KE9UWDJfUkVQX1ZGX0lOSVRJQUxJWkVELCBcXHUwMDI2cmVwLVxcdTAwM2VmbGFncykpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdHN0YXRzLVxcdTAwM2VyeF9wYWNrZXRzID0gcmVwLVxcdTAwM2VzdGF0cy5yeF9mcmFtZXM7XFxuQEAgLTQ1Myw3ICs0NTMsNyBAQCBzdGF0aWMgaW50IHJ2dV9yZXBfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBcXHRzdHJ1Y3Qgb3R4Ml9uaWMgKnByaXYgPSByZXAtXFx1MDAzZW1kZXY7XFxuIFxcdHN0cnVjdCByZXBfZXZlbnQgZXZ0ID0gezB9O1xcbiBcXG4tXFx0aWYgKCEocmVwLVxcdTAwM2VmbGFncyBcXHUwMDI2IFJWVV9SRVBfVkZfSU5JVElBTElaRUQpKVxcbitcXHRpZiAoIXRlc3RfYml0KE9UWDJfUkVQX1ZGX0lOSVRJQUxJWkVELCBcXHUwMDI2cmVwLVxcdTAwM2VmbGFncykpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4gXFx0bmV0aWZfY2Fycmllcl9vbihkZXYpO1xcbkBAIC00NzIsNyArNDcyLDcgQEAgc3RhdGljIGludCBydnVfcmVwX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0c3RydWN0IG90eDJfbmljICpwcml2ID0gcmVwLVxcdTAwM2VtZGV2O1xcbiBcXHRzdHJ1Y3QgcmVwX2V2ZW50IGV2dCA9IHswfTtcXG4gXFxuLVxcdGlmICghKHJlcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBSVlVfUkVQX1ZGX0lOSVRJQUxJWkVEKSlcXG4rXFx0aWYgKCF0ZXN0X2JpdChPVFgyX1JFUF9WRl9JTklUSUFMSVpFRCwgXFx1MDAyNnJlcC1cXHUwMDNlZmxhZ3MpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdG5ldGlmX2NhcnJpZXJfb2ZmKGRldik7XFxuQEAgLTU0Nyw3ICs1NDcsNyBAQCBzdGF0aWMgaW50IHJ2dV9yZXBfbmFwaV9pbml0KHN0cnVjdCBvdHgyX25pYyAqcHJpdixcXG4gXFx0XFx0b3R4Ml93cml0ZTY0KHByaXYsIE5JWF9MRl9DSU5UWF9JTlQocWlkeCksIEJJVF9VTEwoMCkpO1xcbiBcXHRcXHRvdHgyX3dyaXRlNjQocHJpdiwgTklYX0xGX0NJTlRYX0VOQV9XMVMocWlkeCksIEJJVF9VTEwoMCkpO1xcbiBcXHR9XFxuLVxcdHByaXYtXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5PVFgyX0ZMQUdfSU5URl9ET1dOO1xcbitcXHRvdHgyX2NsZWFyX2ZsYWcocHJpdiwgT1RYMl9GTEFHX0lOVEZfRE9XTik7XFxuIFxcdHJldHVybiAwO1xcbiBcXG4gZXJyX2ZyZWVfY2ludHM6XFxuQEAgLTYzMiw3ICs2MzIsNyBAQCB2b2lkIHJ2dV9yZXBfZGVzdHJveShzdHJ1Y3Qgb3R4Ml9uaWMgKnByaXYpXFxuIFxcdGludCByZXBfaWQ7XFxuIFxcbiBcXHRydnVfZXN3aXRjaF9jb25maWcocHJpdiwgZmFsc2UpO1xcbi1cXHRwcml2LVxcdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfSU5URl9ET1dOO1xcbitcXHRvdHgyX3NldF9mbGFnKHByaXYsIE9UWDJfRkxBR19JTlRGX0RPV04pO1xcbiBcXHRydnVfcmVwX2ZyZWVfY3FfcnNyYyhwcml2KTtcXG4gXFx0Zm9yIChyZXBfaWQgPSAwOyByZXBfaWQgXFx1MDAzYyBwcml2LVxcdTAwM2VyZXBfY250OyByZXBfaWQrKykge1xcbiBcXHRcXHRyZXAgPSBwcml2LVxcdTAwM2VyZXBzW3JlcF9pZF07XFxuQEAgLTgwMSw4ICs4MDEsOCBAQCBzdGF0aWMgaW50IHJ2dV9yZXBfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG4gXFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIHByaXYpO1xcbiBcXHRwcml2LVxcdTAwM2VwZGV2ID0gcGRldjtcXG4gXFx0cHJpdi1cXHUwMDNlZGV2ID0gZGV2O1xcbi1cXHRwcml2LVxcdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfSU5URl9ET1dOO1xcbi1cXHRwcml2LVxcdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfUkVQX01PREVfRU5BQkxFRDtcXG4rXFx0b3R4Ml9zZXRfZmxhZyhwcml2LCBPVFgyX0ZMQUdfSU5URl9ET1dOKTtcXG4rXFx0b3R4Ml9zZXRfZmxhZyhwcml2LCBPVFgyX0ZMQUdfUkVQX01PREVfRU5BQkxFRCk7XFxuIFxcbiBcXHRodyA9IFxcdTAwMjZwcml2LVxcdTAwM2VodztcXG4gXFx0aHctXFx1MDAzZXBkZXYgPSBwZGV2O1xcbkBAIC04NDUsNyArODQ1LDcgQEAgc3RhdGljIHZvaWQgcnZ1X3JlcF9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIFxcdHN0cnVjdCBvdHgyX25pYyAqcHJpdiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcXG4gXFxuIFxcdG90eDJfdW5yZWdpc3Rlcl9kbChwcml2KTtcXG4tXFx0aWYgKCEocHJpdi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBPVFgyX0ZMQUdfSU5URl9ET1dOKSlcXG4rXFx0aWYgKCFvdHgyX3Rlc3RfZmxhZyhwcml2LCBPVFgyX0ZMQUdfSU5URl9ET1dOKSlcXG4gXFx0XFx0cnZ1X3JlcF9kZXN0cm95KHByaXYpO1xcbiBcXHRvdHgyX2RldGFjaF9yZXNvdXJjZXMoXFx1MDAyNnByaXYtXFx1MDAzZW1ib3gpO1xcbiBcXHRpZiAocHJpdi1cXHUwMDNlaHcubG10X2luZm8pXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuaFxcbmluZGV4IDViYzllMmM3ZDgwMGIuLjQ1NzA3YzQzNGQ4OWYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3JlcC5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3JlcC5oXFxuQEAgLTM3LDggKzM3LDcgQEAgc3RydWN0IHJlcF9kZXYge1xcbiBcXHRzdHJ1Y3QgZGVsYXllZF93b3JrIHN0YXRzX3dyaztcXG4gXFx0c3RydWN0IGRldmxpbmtfcG9ydCBkbF9wb3J0O1xcbiBcXHRzdHJ1Y3Qgb3R4Ml9mbG93X2NvbmZpZ1xcdCpmbG93X2NmZztcXG4tI2RlZmluZSBSVlVfUkVQX1ZGX0lOSVRJQUxJWkVEXFx0XFx0QklUX1VMTCgwKVxcbi1cXHR1NjQgZmxhZ3M7XFxuK1xcdHVuc2lnbmVkIGxvbmdcXHRcXHRmbGFncztcXG4gXFx0dTE2IHJlcF9pZDtcXG4gXFx0dTE2IHBjaWZ1bmM7XFxuIFxcdHU4IG1hY1tFVEhfQUxFTl07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjQ2OjUzLjY2MDI1MTcxN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTU3OTUxMDgzNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBleGNsdXNpdmVseSBtb2RpZmllcyB0aGUgTWFydmVsbCBPY3Rlb25UWDIgUlZVL05JQyBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyLyksIGFkZGluZyBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgc3VwcG9ydCBhbmQgcmVmYWN0b3JpbmcgZmxhZyBiaXRtYXNrIG9wZXJhdGlvbnMuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsIE1hcnZlbGwgT2N0ZW9uVFgyIC8gQ04xMEsgaGFyZHdhcmUvQVNJQ3MgYW5kIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSB2aXJ0dWFsaXphdGlvbiBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIHN5emthbGxlciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5MmMxMzM0Y2Q5ZTUwNDhlM2M2NTFmMTczNWFkMDIwMThhYmMwZDg0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMTI6NDY6NTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcbmluZGV4IGQ4MGQyYzAwYmQ4NDMuLjJkMWFiOGM3NjFjNDAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguY1xuQEAgLTMzMSw4ICszMzEsMTIgQEAgc3RhdGljIGJvb2wgaXNfdmFsaWRfdHhzY2hxKHN0cnVjdCBydnUgKnJ2dSwgaW50IGJsa2FkZHIsXG4gXHRcdFx0cmV0dXJuIHRydWU7XG4gXHR9XG4gXG4tXHRpZiAobWFwX2Z1bmMgIT0gcGNpZnVuYylcbitcdGlmIChtYXBfZnVuYyAhPSBwY2lmdW5jKSB7XG4rXHRcdGRldl9lcnJfcmF0ZWxpbWl0ZWQocnZ1LVx1MDAzZWRldixcbitcdFx0XHRcdCAgICBcInBjaWZ1bmMgJXggbWFwIHBjaWZ1bmMgJXggbm90IGVxdWFsLCBsdmw9JXUgc2NocT0ldVxcblwiLFxuK1x0XHRcdFx0ICAgIHBjaWZ1bmMsIG1hcF9mdW5jLCBsdmwsIHNjaHEpO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4rXHR9XG4gXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL2NuMTBrX2lwc2VjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvY24xMGtfaXBzZWMuY1xuaW5kZXggNzc1NDNkNDcyMzQ1ZS4uNTBlYzQ1NDJjNDE4MyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9jbjEwa19pcHNlYy5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvY24xMGtfaXBzZWMuY1xuQEAgLTMzNCw3ICszMzQsNyBAQCBzdGF0aWMgaW50IGNuMTBrX291dGJfY3B0X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdFx0XHRcdFx0XHRDTjEwS19DUFRfTEZfTlFYKDApKTtcbiBcbiBcdC8qIFNldCBpcHNlYyBvZmZsb2FkIGVuYWJsZWQgZm9yIHRoaXMgZGV2aWNlICovXG4tXHRwZi1cdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfSVBTRUNfT0ZGTE9BRF9FTkFCTEVEO1xuK1x0b3R4Ml9zZXRfZmxhZyhwZiwgT1RYMl9GTEFHX0lQU0VDX09GRkxPQURfRU5BQkxFRCk7XG4gXG4gXHRjbjEwa19jcHRfZGV2aWNlX3NldF9hdmFpbGFibGUocGYpO1xuIFx0cmV0dXJuIDA7XG5AQCAtMzU2LDcgKzM1Niw3IEBAIHN0YXRpYyBpbnQgY24xMGtfb3V0Yl9jcHRfY2xlYW4oc3RydWN0IG90eDJfbmljICpwZilcbiBcdH1cbiBcbiBcdC8qIFNldCBpcHNlYyBvZmZsb2FkIGRpc2FibGVkIGZvciB0aGlzIGRldmljZSAqL1xuLVx0cGYtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+T1RYMl9GTEFHX0lQU0VDX09GRkxPQURfRU5BQkxFRDtcbitcdG90eDJfY2xlYXJfZmxhZyhwZiwgT1RYMl9GTEFHX0lQU0VDX09GRkxPQURfRU5BQkxFRCk7XG4gXG4gXHQvKiBEaXNhYmxlIENQVExGIEluc3RydWN0aW9uIFF1ZXVlIChJUSkgKi9cbiBcdGNuMTBrX291dGJfY3B0bGZfaXFfZGlzYWJsZShwZik7XG5AQCAtODIwLDcgKzgyMCw3IEBAIHZvaWQgY24xMGtfaXBzZWNfY2xlYW4oc3RydWN0IG90eDJfbmljICpwZilcbiBcdGlmICghaXNfZGV2X3N1cHBvcnRfaXBzZWNfb2ZmbG9hZChwZi1cdTAwM2VwZGV2KSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0aWYgKCEocGYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19JUFNFQ19PRkZMT0FEX0VOQUJMRUQpKVxuK1x0aWYgKCFvdHgyX3Rlc3RfZmxhZyhwZiwgT1RYMl9GTEFHX0lQU0VDX09GRkxPQURfRU5BQkxFRCkpXG4gXHRcdHJldHVybjtcbiBcbiBcdGlmIChwZi1cdTAwM2VpcHNlYy5zYV93b3JrcSkge1xuQEAgLTk0NSw3ICs5NDUsNyBAQCBib29sIGNuMTBrX2lwc2VjX3RyYW5zbWl0KHN0cnVjdCBvdHgyX25pYyAqcGYsIHN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cSxcbiBcdHUxNiBkbGVuO1xuIFxuIFx0LyogQ2hlY2sgZm9yIElQU0VDIG9mZmxvYWQgZW5hYmxlZCAqL1xuLVx0aWYgKCEocGYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19JUFNFQ19PRkZMT0FEX0VOQUJMRUQpKVxuK1x0aWYgKCFvdHgyX3Rlc3RfZmxhZyhwZiwgT1RYMl9GTEFHX0lQU0VDX09GRkxPQURfRU5BQkxFRCkpXG4gXHRcdGdvdG8gZHJvcDtcbiBcbiBcdHNwID0gc2tiX3NlY19wYXRoKHNrYik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uY1xuaW5kZXggMTc1OTkyMTg4YzE4YS4uNWJhZDI0NjZkYTBjNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uY1xuQEAgLTIyMCwxMCArMjIwLDEwIEBAIGludCBvdHgyX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB2b2lkICpwKVxuIFx0XHRldGhfaHdfYWRkcl9zZXQobmV0ZGV2LCBhZGRyLVx1MDAzZXNhX2RhdGEpO1xuIFx0XHQvKiB1cGRhdGUgZG1hYyBmaWVsZCBpbiB2bGFuIG9mZmxvYWQgcnVsZSAqL1xuIFx0XHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgcGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1JYX1ZMQU5fU1VQUE9SVClcbitcdFx0ICAgIG90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19SWF9WTEFOX1NVUFBPUlQpKVxuIFx0XHRcdG90eDJfaW5zdGFsbF9yeHZsYW5fb2ZmbG9hZF9mbG93KHBmdmYpO1xuIFx0XHQvKiB1cGRhdGUgZG1hYyBhZGRyZXNzIGluIG50dXBsZSBhbmQgRE1BQyBmaWx0ZXIgbGlzdCAqL1xuLVx0XHRpZiAocGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX0RNQUNGTFRSX1NVUFBPUlQpXG4rXHRcdGlmIChvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfRE1BQ0ZMVFJfU1VQUE9SVCkpXG4gXHRcdFx0b3R4Ml9kbWFjZmx0X3VwZGF0ZV9wZm1hY19mbG93KHBmdmYpO1xuIFx0fSBlbHNlIHtcbiBcdFx0cmV0dXJuIC1FUEVSTTtcbkBAIC0yNzUsOCArMjc1LDggQEAgaW50IG90eDJfY29uZmlnX3BhdXNlX2ZybShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4gXHRcdGdvdG8gdW5sb2NrO1xuIFx0fVxuIFxuLVx0cmVxLVx1MDAzZXJ4X3BhdXNlID0gISEocGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1JYX1BBVVNFX0VOQUJMRUQpO1xuLVx0cmVxLVx1MDAzZXR4X3BhdXNlID0gISEocGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1RYX1BBVVNFX0VOQUJMRUQpO1xuK1x0cmVxLVx1MDAzZXJ4X3BhdXNlID0gb3R4Ml90ZXN0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1JYX1BBVVNFX0VOQUJMRUQpO1xuK1x0cmVxLVx1MDAzZXR4X3BhdXNlID0gb3R4Ml90ZXN0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1RYX1BBVVNFX0VOQUJMRUQpO1xuIFx0cmVxLVx1MDAzZXNldCA9IDE7XG4gXG4gXHRlcnIgPSBvdHgyX3N5bmNfbWJveF9tc2coXHUwMDI2cGZ2Zi1cdTAwM2VtYm94KTtcbkBAIC02MTUsNiArNjE1LDE0MiBAQCB2b2lkIG90eDJfZ2V0X21hY19mcm9tX2FmKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gfVxuIEVYUE9SVF9TWU1CT0wob3R4Ml9nZXRfbWFjX2Zyb21fYWYpO1xuIFxuK3N0YXRpYyBpbnRcbitvdHgyX25peF90bXFfcmVnX3dyaXRlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGNudCxcbitcdFx0ICAgICAgIHU2NCByZWdfYWRkcltNQVhfUkVHU19QRVJfTUJPWF9NU0ddLFxuK1x0XHQgICAgICAgdTY0IHJlZ192YWxbTUFYX1JFR1NfUEVSX01CT1hfTVNHXSlcbit7XG4rXHRzdHJ1Y3QgbWJveCAqbWJveCA9IFx1MDAyNnBmdmYtXHUwMDNlbWJveDtcbitcdHN0cnVjdCBuaXhfdHhzY2hxX2NvbmZpZyAqcmVxO1xuK1x0aW50IGksIGVycjtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbitcdHJlcSA9IG90eDJfbWJveF9hbGxvY19tc2dfbml4X3R4c2NocV9jZmcobWJveCk7XG4rXHRpZiAoIXJlcSkge1xuK1x0XHRtdXRleF91bmxvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4rXHRyZXEtXHUwMDNlbHZsID0gTklYX1RYU0NIX0xWTF9NRFE7XG4rXHRyZXEtXHUwMDNlbnVtX3JlZ3MgPSBjbnQ7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjbnQ7IGkrKykge1xuK1x0XHRyZXEtXHUwMDNlcmVnW2ldID0gcmVnX2FkZHJbaV07XG4rXHRcdHJlcS1cdTAwM2VyZWd2YWxbaV0gPSByZWdfdmFsW2ldO1xuK1x0fVxuK1xuK1x0ZXJyID0gb3R4Ml9zeW5jX21ib3hfbXNnKG1ib3gpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4rXG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbitpbnQgb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zilcbit7XG4rXHR1NjQgcmVnX2FkZHJbTUFYX1JFR1NfUEVSX01CT1hfTVNHXTtcbitcdHU2NCByZWdfdmFsW01BWF9SRUdTX1BFUl9NQk9YX01TR107XG4rXHRpbnQgZXJyLCBzbXEsIGksIGNudCA9IDA7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwZnZmLVx1MDAzZWh3LnR4c2NocV9jbnRbTklYX1RYU0NIX0xWTF9TTVFdOyBpKyspIHtcbitcdFx0c21xID0gcGZ2Zi1cdTAwM2Vody50eHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1NNUV1baV07XG4rXG4rXHRcdHJlZ19hZGRyW2NudF0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTtcbitcdFx0cmVnX3ZhbFtjbnRdID0gMDtcbitcdFx0Y250Kys7XG4rXG4rXHRcdHJlZ19hZGRyW2NudF0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTtcbitcdFx0cmVnX3ZhbFtjbnRdID0gMDtcbitcdFx0Y250Kys7XG4rXG4rXHRcdGlmIChjbnQgXHUwMDNjIE1BWF9SRUdTX1BFUl9NQk9YX01TRyAtIDEpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdGVyciA9IG90eDJfbml4X3RtcV9yZWdfd3JpdGUocGZ2ZiwgY250LFxuK1x0XHRcdFx0XHQgICAgIHJlZ19hZGRyLCByZWdfdmFsKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRnb3RvIGZhaWw7XG4rXHRcdGNudCA9IDA7XG4rXHR9XG4rXG4rXHRpZiAoY250KSB7XG4rXHRcdGVyciA9IG90eDJfbml4X3RtcV9yZWdfd3JpdGUocGZ2ZiwgY250LFxuK1x0XHRcdFx0XHQgICAgIHJlZ19hZGRyLCByZWdfdmFsKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRnb3RvIGZhaWw7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbitmYWlsOlxuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4raW50IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmLFxuK1x0XHRcdFx0IGludCB0eHEsIHU2NCBtaW5yYXRlLCB1NjQgbWF4cmF0ZSlcbit7XG4rXHRzdHJ1Y3QgbWJveCAqbWJveCA9IFx1MDAyNnBmdmYtXHUwMDNlbWJveDtcbitcdHN0cnVjdCBuaXhfdHhzY2hxX2NvbmZpZyAqcmVxO1xuK1x0aW50IGVyciwgc21xLCBuID0gMDtcbitcdHU2NCByZWdfYWRkclsyXTtcbitcdHU2NCByZWdfdmFsWzJdO1xuK1x0dTY0IHJhdGU7XG4rXG4rXHRpZiAoIW1heHJhdGUgXHUwMDI2XHUwMDI2ICFtaW5yYXRlKSB7XG4rXHRcdHNtcSA9IG90eDJfZ2V0X3NtcV9pZHgocGZ2ZiwgdHhxKTtcbitcdFx0cmVnX2FkZHJbMF0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTtcbitcdFx0cmVnX3ZhbFswXSA9IDA7XG4rXHRcdHJlZ19hZGRyWzFdID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7XG4rXHRcdHJlZ192YWxbMV0gPSAwO1xuK1x0XHRyZXR1cm4gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCAyLCByZWdfYWRkciwgcmVnX3ZhbCk7XG4rXHR9XG4rXG4rXHRzbXEgPSBvdHgyX2dldF9zbXFfaWR4KHBmdmYsIHR4cSk7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4rXHRyZXEgPSBvdHgyX21ib3hfYWxsb2NfbXNnX25peF90eHNjaHFfY2ZnKG1ib3gpO1xuK1x0aWYgKCFyZXEpIHtcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuK1xuK1x0cmVxLVx1MDAzZWx2bCA9IE5JWF9UWFNDSF9MVkxfTURRO1xuK1xuK1x0LyogTVFQUklPIGV4cG9zZXMgb25seSBtaW4vbWF4IHJhdGUsIG5vdCBidXJzdC4gIFBhc3MgYnVyc3QgMCBzb1xuK1x0ICogb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZygpIHByb2dyYW1tZXMgdGhlIGxhcmdlc3QgYnVyc3QgdGhlIE5JWFxuK1x0ICogZW5jb2Rpbmcgc3VwcG9ydHMgKENOMTBLX01BWF9CVVJTVF9TSVpFIG9uIENOMTBLKS4gIFRoaXMgZGlmZmVyc1xuK1x0ICogZnJvbSB0aGUgNjU1MzYgYnl0ZSBkZWZhdWx0IHVzZWQgaW4gdGhlIEhUQiBwYXRoLCB3aGljaCBpcyBhXG4rXHQgKiBrZXJuZWwtc2lkZSBkZWZhdWx0IHdoZW4gbm8gZXhwbGljaXQgYnVyc3QgaXMgY29uZmlndXJlZCwgbm90IGFcbitcdCAqIGhhcmR3YXJlIGNhcC5cbitcdCAqXG4rXHQgKiBtcXByaW8gc2V0dXAgcmVzdGFydHMgdGhlIG5ldGRldiAob3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYpLFxuK1x0ICogd2hpY2ggcmVzZXRzIE1EUSBzaGFwZXJzIHRvIHplcm8uICBQcm9ncmFtIGJvdGggUElSIGFuZCBDSVIgb25cbitcdCAqIGV2ZXJ5IHVwZGF0ZSBzbyBvbWl0dGVkIHJhdGVzIGFyZSBhcHBsaWVkIGV4cGxpY2l0bHkgcmF0aGVyIHRoYW5cbitcdCAqIHJlbHlpbmcgb24gc3RhbGUgaGFyZHdhcmUgc3RhdGUuXG4rXHQgKi9cbitcdHJlcS1cdTAwM2VyZWdbbl0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTtcbitcdGlmIChtYXhyYXRlKSB7XG4rXHRcdHJhdGUgPSBvdHgyX2NvbnZlcnRfcmF0ZShtYXhyYXRlKTtcbitcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtuXSA9IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCByYXRlLCAwKTtcbitcdH0gZWxzZSB7XG4rXHRcdHJlcS1cdTAwM2VyZWd2YWxbbl0gPSAwO1xuK1x0fVxuK1x0bisrO1xuK1xuK1x0LyogQ0lSK1BJUiBzdXBwb3J0IGlzIHJlcXVpcmVkIGFuZCBjaGVja2VkIGF0IG1xcHJpbyBzZXR1cC4gKi9cbitcdHJlcS1cdTAwM2VyZWdbbl0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTtcbitcdGlmIChtaW5yYXRlKSB7XG4rXHRcdHJhdGUgPSBvdHgyX2NvbnZlcnRfcmF0ZShtaW5yYXRlKTtcbitcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtuXSA9IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCByYXRlLCAwKTtcbitcdH0gZWxzZSB7XG4rXHRcdHJlcS1cdTAwM2VyZWd2YWxbbl0gPSAwO1xuK1x0fVxuK1x0bisrO1xuK1x0cmVxLVx1MDAzZW51bV9yZWdzID0gbjtcbitcbitcdGVyciA9IG90eDJfc3luY19tYm94X21zZyhtYm94KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZtYm94LVx1MDAzZWxvY2spO1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4gaW50IG90eDJfdHhzY2hxX2NvbmZpZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBsdmwsIGludCBwcmlvLCBib29sIHR4c2NocV9mb3JfcGZjKVxuIHtcbiBcdHUxNiAoKnNjaHFfbGlzdClbTUFYX1RYU0NIUV9QRVJfRlVOQ107XG5AQCAtNjUxLDcgKzc4NywxMSBAQCBpbnQgb3R4Ml90eHNjaHFfY29uZmlnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGx2bCwgaW50IHByaW8sIGJvb2wgdHhzY2hxX2ZvclxuIFx0XHRcdFx0XHRcdCh1NjQpaHctXHUwMDNlc21xX2xpbmtfdHlwZSk7XG4gXHRcdHJlcS1cdTAwM2VudW1fcmVncysrO1xuIFx0XHQvKiBNRFEgY29uZmlnICovXG4tXHRcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bcHJpb107XG4rXHRcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KVxuK1x0XHRcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bMF07XG4rXHRcdGVsc2VcbitcdFx0XHRwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdW3ByaW9dO1xuK1xuIFx0XHRyZXEtXHUwMDNlcmVnWzFdID0gTklYX0FGX01EUVhfUEFSRU5UKHNjaHEpO1xuIFx0XHRyZXEtXHUwMDNlcmVndmFsWzFdID0gcGFyZW50IFx1MDAzY1x1MDAzYyAxNjtcbiBcdFx0cmVxLVx1MDAzZW51bV9yZWdzKys7XG5AQCAtNzc5LDYgKzkxOSw5IEBAIGludCBvdHgyX3R4c2NoX2FsbG9jKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiBcdFx0cmVxLVx1MDAzZXNjaHFbTklYX1RYU0NIX0xWTF9UTDRdID0gY2hhbl9jbnQ7XG4gXHR9XG4gXG4rXHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdClcbitcdFx0cmVxLVx1MDAzZXNjaHFbTklYX1RYU0NIX0xWTF9TTVFdID0gcGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcbitcbiBcdHJjID0gb3R4Ml9zeW5jX21ib3hfbXNnKFx1MDAyNnBmdmYtXHUwMDNlbWJveCk7XG4gXHRpZiAocmMpXG4gXHRcdHJldHVybiByYztcbkBAIC04NDQsNiArOTg3LDcgQEAgdm9pZCBvdHgyX3R4c2NocV9zdG9wKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiBcbiBcdC8qIENsZWFyIHRoZSB0eHNjaHEgbGlzdCAqL1xuIFx0Zm9yIChsdmwgPSAwOyBsdmwgXHUwMDNjIE5JWF9UWFNDSF9MVkxfQ05UOyBsdmwrKykge1xuK1x0XHRwZnZmLVx1MDAzZWh3LnR4c2NocV9jbnRbbHZsXSA9IDA7XG4gXHRcdGZvciAoc2NocSA9IDA7IHNjaHEgXHUwMDNjIE1BWF9UWFNDSFFfUEVSX0ZVTkM7IHNjaHErKylcbiBcdFx0XHRwZnZmLVx1MDAzZWh3LnR4c2NocV9saXN0W2x2bF1bc2NocV0gPSAwO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmhcbmluZGV4IGVlY2VlNjEyYjdiMmMuLjZlNzEzMmYyN2I2MjEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmhcbkBAIC0xNyw2ICsxNyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc29jL21hcnZlbGwvc2lsaWNvbnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NvYy9tYXJ2ZWxsL29jdGVvbnR4Mi9hc20uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9tYWNzZWMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvcGt0X3NjaGVkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvcGt0X2Nscy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2RldmxpbmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3RpbWU2NC5oXHUwMDNlXG5AQCAtNDgzLDYgKzQ4NCwyMyBAQCBzdHJ1Y3QgcGZfaXJxX2RhdGEge1xuIFx0aW50IG1kZXZzO1xuIH07XG4gXG4rc3RydWN0IG1xX29mZmxvYWRfc25hcCB7XG4rXHR1NjQgbWluX3JhdGVbVENfUU9QVF9NQVhfUVVFVUVdO1xuK1x0dTY0IG1heF9yYXRlW1RDX1FPUFRfTUFYX1FVRVVFXTtcbitcdF9fdTggbnVtX3RjO1xuK1x0X191MTYgY291bnRbVENfUU9QVF9NQVhfUVVFVUVdO1xuK1x0X191MTYgb2Zmc2V0W1RDX1FPUFRfTUFYX1FVRVVFXTtcbit9O1xuK1xuK3N0cnVjdCBvdHgyX21xcHJpbyB7XG4rXHR1MzJcdGZsYWdzO1xuK1x0dTY0XHQqbWluX3JhdGU7XG4rXHR1NjRcdCptYXhfcmF0ZTtcbitcdGJvb2xcdHJhdGVfbGltaXQ7XG4rXHRib29sXHRyZXBsYWNlX3NldHVwX2RvbmU7XG4rXHRib29sXHRyZXBsYWNlX2dyYWZ0X2RvbmU7XG4rfTtcbitcbiBzdHJ1Y3Qgb3R4Ml9uaWMge1xuIFx0dm9pZCBfX2lvbWVtXHRcdCpyZWdfYmFzZTtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlXHQqbmV0ZGV2O1xuQEAgLTQ5MSwzMCArNTA5LDM1IEBAIHN0cnVjdCBvdHgyX25pYyB7XG4gXHR1MTZcdFx0XHR0eF9tYXhfcGt0bGVuO1xuIFx0dTE2XHRcdFx0cmJzaXplOyAvKiBSZWNlaXZlIGJ1ZmZlciBzaXplICovXG4gXG4tI2RlZmluZSBPVFgyX0ZMQUdfUlhfVFNUQU1QX0VOQUJMRURcdFx0QklUX1VMTCgwKVxuLSNkZWZpbmUgT1RYMl9GTEFHX1RYX1RTVEFNUF9FTkFCTEVEXHRcdEJJVF9VTEwoMSlcbi0jZGVmaW5lIE9UWDJfRkxBR19JTlRGX0RPV05cdFx0XHRCSVRfVUxMKDIpXG4tI2RlZmluZSBPVFgyX0ZMQUdfTUNBTV9FTlRSSUVTX0FMTE9DXHRcdEJJVF9VTEwoMylcbi0jZGVmaW5lIE9UWDJfRkxBR19OVFVQTEVfU1VQUE9SVFx0XHRCSVRfVUxMKDQpXG4tI2RlZmluZSBPVFgyX0ZMQUdfVUNBU1RfRkxUUl9TVVBQT1JUXHRcdEJJVF9VTEwoNSlcbi0jZGVmaW5lIE9UWDJfRkxBR19SWF9WTEFOX1NVUFBPUlRcdFx0QklUX1VMTCg2KVxuLSNkZWZpbmUgT1RYMl9GTEFHX1ZGX1ZMQU5fU1VQUE9SVFx0XHRCSVRfVUxMKDcpXG4tI2RlZmluZSBPVFgyX0ZMQUdfUEZfU0hVVERPV05cdFx0XHRCSVRfVUxMKDgpXG4tI2RlZmluZSBPVFgyX0ZMQUdfUlhfUEFVU0VfRU5BQkxFRFx0XHRCSVRfVUxMKDkpXG4tI2RlZmluZSBPVFgyX0ZMQUdfVFhfUEFVU0VfRU5BQkxFRFx0XHRCSVRfVUxMKDEwKVxuLSNkZWZpbmUgT1RYMl9GTEFHX1RDX0ZMT1dFUl9TVVBQT1JUXHRcdEJJVF9VTEwoMTEpXG4tI2RlZmluZSBPVFgyX0ZMQUdfVENfTUFUQ0hBTExfRUdSRVNTX0VOQUJMRURcdEJJVF9VTEwoMTIpXG4tI2RlZmluZSBPVFgyX0ZMQUdfVENfTUFUQ0hBTExfSU5HUkVTU19FTkFCTEVEXHRCSVRfVUxMKDEzKVxuLSNkZWZpbmUgT1RYMl9GTEFHX0RNQUNGTFRSX1NVUFBPUlRcdFx0QklUX1VMTCgxNClcbi0jZGVmaW5lIE9UWDJfRkxBR19QVFBfT05FU1RFUF9TWU5DXHRcdEJJVF9VTEwoMTUpXG4tI2RlZmluZSBPVFgyX0ZMQUdfQURQVFZfSU5UX0NPQUxfRU5BQkxFRCBCSVRfVUxMKDE2KVxuLSNkZWZpbmUgT1RYMl9GTEFHX1RDX01BUktfRU5BQkxFRFx0XHRCSVRfVUxMKDE3KVxuLSNkZWZpbmUgT1RYMl9GTEFHX1JFUF9NT0RFX0VOQUJMRURcdFx0IEJJVF9VTEwoMTgpXG4tI2RlZmluZSBPVFgyX0ZMQUdfUE9SVF9VUFx0XHRcdEJJVF9VTEwoMTkpXG4tI2RlZmluZSBPVFgyX0ZMQUdfSVBTRUNfT0ZGTE9BRF9FTkFCTEVEXHRcdEJJVF9VTEwoMjApXG4tXHR1NjRcdFx0XHRmbGFncztcbisjZGVmaW5lIE9UWDJfRkxBR19SWF9UU1RBTVBfRU5BQkxFRFx0XHQwXG4rI2RlZmluZSBPVFgyX0ZMQUdfVFhfVFNUQU1QX0VOQUJMRURcdFx0MVxuKyNkZWZpbmUgT1RYMl9GTEFHX0lOVEZfRE9XTlx0XHRcdDJcbisjZGVmaW5lIE9UWDJfRkxBR19NQ0FNX0VOVFJJRVNfQUxMT0NcdFx0M1xuKyNkZWZpbmUgT1RYMl9GTEFHX05UVVBMRV9TVVBQT1JUXHRcdDRcbisjZGVmaW5lIE9UWDJfRkxBR19VQ0FTVF9GTFRSX1NVUFBPUlRcdFx0NVxuKyNkZWZpbmUgT1RYMl9GTEFHX1JYX1ZMQU5fU1VQUE9SVFx0XHQ2XG4rI2RlZmluZSBPVFgyX0ZMQUdfVkZfVkxBTl9TVVBQT1JUXHRcdDdcbisjZGVmaW5lIE9UWDJfRkxBR19QRl9TSFVURE9XTlx0XHRcdDhcbisjZGVmaW5lIE9UWDJfRkxBR19SWF9QQVVTRV9FTkFCTEVEXHRcdDlcbisjZGVmaW5lIE9UWDJfRkxBR19UWF9QQVVTRV9FTkFCTEVEXHRcdDEwXG4rI2RlZmluZSBPVFgyX0ZMQUdfVENfRkxPV0VSX1NVUFBPUlRcdFx0MTFcbisjZGVmaW5lIE9UWDJfRkxBR19UQ19NQVRDSEFMTF9FR1JFU1NfRU5BQkxFRFx0MTJcbisjZGVmaW5lIE9UWDJfRkxBR19UQ19NQVRDSEFMTF9JTkdSRVNTX0VOQUJMRURcdDEzXG4rI2RlZmluZSBPVFgyX0ZMQUdfRE1BQ0ZMVFJfU1VQUE9SVFx0XHQxNFxuKyNkZWZpbmUgT1RYMl9GTEFHX1BUUF9PTkVTVEVQX1NZTkNcdFx0MTVcbisjZGVmaW5lIE9UWDJfRkxBR19BRFBUVl9JTlRfQ09BTF9FTkFCTEVEXHQxNlxuKyNkZWZpbmUgT1RYMl9GTEFHX1RDX01BUktfRU5BQkxFRFx0XHQxN1xuKyNkZWZpbmUgT1RYMl9GTEFHX1JFUF9NT0RFX0VOQUJMRURcdFx0MThcbisjZGVmaW5lIE9UWDJfRkxBR19QT1JUX1VQXHRcdFx0MTlcbisjZGVmaW5lIE9UWDJfRkxBR19JUFNFQ19PRkZMT0FEX0VOQUJMRURcdFx0MjBcbisjZGVmaW5lIE9UWDJfUkVQX1ZGX0lOSVRJQUxJWkVEXHRcdFx0MjFcbitcdHVuc2lnbmVkIGxvbmdcdFx0ZmxhZ3M7XG4gXHR1NjRcdFx0XHQqY3Ffb3BfYWRkcjtcbiBcbitcdHN0cnVjdCBvdHgyX21xcHJpb1x0bXFwcmlvO1xuK1x0c3RydWN0IG1xX29mZmxvYWRfc25hcFx0KmN1cl9tcV9zbmFwO1xuK1x0c3RydWN0IG1xX29mZmxvYWRfc25hcFx0Km9sZF9tcV9zbmFwO1xuK1xuIFx0c3RydWN0IGJwZl9wcm9nXHRcdCp4ZHBfcHJvZztcbiBcdHN0cnVjdCBvdHgyX3FzZXRcdHFzZXQ7XG4gXHRzdHJ1Y3Qgb3R4Ml9od1x0XHRodztcbkBAIC01OTQsNiArNjE3LDM0IEBAIHN0cnVjdCBvdHgyX25pYyB7XG4gXHR1bnNpZ25lZCBsb25nXHRcdCphZl94ZHBfemNfcWlkeDtcbiB9O1xuIFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBvdHgyX3NldF9mbGFnKHN0cnVjdCBvdHgyX25pYyAqbmljLCB1bnNpZ25lZCBpbnQgZmxhZylcbit7XG4rXHRzZXRfYml0KGZsYWcsIFx1MDAyNm5pYy1cdTAwM2VmbGFncyk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBvdHgyX2NsZWFyX2ZsYWcoc3RydWN0IG90eDJfbmljICpuaWMsIHVuc2lnbmVkIGludCBmbGFnKVxuK3tcbitcdGNsZWFyX2JpdChmbGFnLCBcdTAwMjZuaWMtXHUwMDNlZmxhZ3MpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGJvb2wgb3R4Ml90ZXN0X2ZsYWcoc3RydWN0IG90eDJfbmljICpuaWMsIHVuc2lnbmVkIGludCBmbGFnKVxuK3tcbitcdHJldHVybiB0ZXN0X2JpdChmbGFnLCBcdTAwMjZuaWMtXHUwMDNlZmxhZ3MpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgb3R4Ml9zeW5jX2ZsYWdzX2Zyb21fcmVwKHN0cnVjdCBvdHgyX25pYyAqZHN0LFxuK1x0XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyAqc3JjX2ZsYWdzKVxuK3tcbitcdHVuc2lnbmVkIGludCBmbGFnO1xuK1xuK1x0Zm9yIChmbGFnID0gMDsgZmxhZyBcdTAwM2M9IE9UWDJfUkVQX1ZGX0lOSVRJQUxJWkVEOyBmbGFnKyspIHtcbitcdFx0aWYgKHRlc3RfYml0KGZsYWcsIHNyY19mbGFncykpXG4rXHRcdFx0c2V0X2JpdChmbGFnLCBcdTAwMjZkc3QtXHUwMDNlZmxhZ3MpO1xuK1x0XHRlbHNlXG4rXHRcdFx0Y2xlYXJfYml0KGZsYWcsIFx1MDAyNmRzdC1cdTAwM2VmbGFncyk7XG4rXHR9XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19vdHgyX2xia3ZmKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIHtcbiBcdHJldHVybiAocGRldi1cdTAwM2VkZXZpY2UgPT0gUENJX0RFVklEX09DVEVPTlRYMl9SVlVfQUZWRikgfHxcbkBAIC0xMjQ2LDYgKzEyOTcsMTEgQEAgZG1hX2FkZHJfdCBvdHgyX2RtYV9tYXBfc2tiX2ZyYWcoc3RydWN0IG90eDJfbmljICpwZnZmLFxuIFx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IsIGludCBzZWcsIGludCAqbGVuKTtcbiB2b2lkIG90eDJfZG1hX3VubWFwX3NrYl9mcmFncyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHN0cnVjdCBzZ19saXN0ICpzZyk7XG4gaW50IG90eDJfcmVhZF9mcmVlX3NxZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHUxNiBxaWR4KTtcbitpbnQgb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCB0eHEsXG4rXHRcdFx0XHQgdTY0IG1pbnJhdGUsIHU2NCBtYXhyYXRlKTtcbitpbnQgb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XG4raW50IG90eDJfbXFwcmlvX2Rvd24oc3RydWN0IG90eDJfbmljICpwZnZmKTtcbitpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKTtcbiB2b2lkIG90eDJfcXVldWVfdmZfd29yayhzdHJ1Y3QgbWJveCAqbXcsIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICptYm94X3dxLFxuIFx0XHRcdGludCBmaXJzdCwgaW50IG1kZXZzLCB1NjQgaW50cik7XG4gaW50IG90eDJfZGVsX21jYW1fZmxvd19lbnRyeShzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTE2IGVudHJ5LFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jXG5pbmRleCA5MWQzNDZkMTE0YWY1Li5iN2JkMDgxMjlmYjY0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xuQEAgLTQxMyw2ICs0MTMsMTIgQEAgc3RhdGljIGludCBvdHgyX2RjYm5sX2llZWVfc2V0cGZjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZWVlX3BmYyAqcGZjKVxuIFx0dTggb2xkX3BmY19lbjtcbiBcdGludCBlcnI7XG4gXG4rXHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdCBcdTAwMjZcdTAwMjYgcGZjLVx1MDAzZXBmY19lbikge1xuK1x0XHRuZXRkZXZfZXJyKGRldixcbitcdFx0XHQgICBcIlBGQzogY2Fubm90IGVuYWJsZSB3aGlsZSBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgaXMgYWN0aXZlXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4gXHRvbGRfcGZjX2VuID0gcGZ2Zi1cdTAwM2VwZmNfZW47XG4gXHRwZnZmLVx1MDAzZXBmY19lbiA9IHBmYy1cdTAwM2VwZmNfZW47XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGV2bGluay5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGV2bGluay5jXG5pbmRleCA0YTVjZTBlNjdkZGE4Li44NjNhNWNlZDlhMjZiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGV2bGluay5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kZXZsaW5rLmNcbkBAIC0xMDQsNyArMTA0LDcgQEAgc3RhdGljIGludCBvdHgyX2RsX3VjYXN0X2ZsdF9jbnRfdmFsaWRhdGUoc3RydWN0IGRldmxpbmsgKmRldmxpbmssIHUzMiBpZCxcbiBcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG90eDJfZGwtXHUwMDNlcGZ2ZjtcbiBcbiBcdC8qIENoZWNrIGZvciBVTklDQVNUIGZpbHRlciBzdXBwb3J0Ki9cbi1cdGlmICghKHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19VQ0FTVF9GTFRSX1NVUFBPUlQpKSB7XG4rXHRpZiAoIW90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19VQ0FTVF9GTFRSX1NVUFBPUlQpKSB7XG4gXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4gXHRcdFx0XHQgICBcIlVuaWNhc3QgZmlsdGVyIG5vdCBlbmFibGVkXCIpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmNcbmluZGV4IDliZWUxYjkxZWVhYTYuLmU2M2VhZDNiMTExM2UgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuY1xuQEAgLTI4Nyw2ICsyODcsMTQgQEAgc3RhdGljIGludCBvdHgyX3NldF9jaGFubmVscyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbitcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0IFx1MDAyNlx1MDAyNlxuK1x0ICAgIChjaGFubmVsLVx1MDAzZXR4X2NvdW50ICE9IHBmdmYtXHUwMDNlaHcudHhfcXVldWVzIHx8XG4rXHQgICAgIGNoYW5uZWwtXHUwMDNlcnhfY291bnQgIT0gcGZ2Zi1cdTAwM2Vody5yeF9xdWV1ZXMpKSB7XG4rXHRcdG5ldGRldl9pbmZvKGRldixcbitcdFx0XHQgICAgXCJOb3QgcGVybWl0dGVkIHRvIGNoYW5nZSBjaGFubmVsIGNvdW50IHdoaWxlIE1RIHByaW8gaXMgYWN0aXZlXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbiBcdGlmIChpZl91cClcbiBcdFx0ZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX3N0b3AoZGV2KTtcbiBcbkBAIC0zNTQsMTQgKzM2MiwxNCBAQCBzdGF0aWMgaW50IG90eDJfc2V0X3BhdXNlcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuIFx0aWYgKHBhdXNlLVx1MDAzZXJ4X3BhdXNlKVxuLVx0XHRwZnZmLVx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19SWF9QQVVTRV9FTkFCTEVEO1xuK1x0XHRvdHgyX3NldF9mbGFnKHBmdmYsIE9UWDJfRkxBR19SWF9QQVVTRV9FTkFCTEVEKTtcbiBcdGVsc2Vcbi1cdFx0cGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjY9IH5PVFgyX0ZMQUdfUlhfUEFVU0VfRU5BQkxFRDtcbitcdFx0b3R4Ml9jbGVhcl9mbGFnKHBmdmYsIE9UWDJfRkxBR19SWF9QQVVTRV9FTkFCTEVEKTtcbiBcbiBcdGlmIChwYXVzZS1cdTAwM2V0eF9wYXVzZSlcbi1cdFx0cGZ2Zi1cdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfVFhfUEFVU0VfRU5BQkxFRDtcbitcdFx0b3R4Ml9zZXRfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfVFhfUEFVU0VfRU5BQkxFRCk7XG4gXHRlbHNlXG4tXHRcdHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+T1RYMl9GTEFHX1RYX1BBVVNFX0VOQUJMRUQ7XG4rXHRcdG90eDJfY2xlYXJfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfVFhfUEFVU0VfRU5BQkxFRCk7XG4gXG4gXHRyZXR1cm4gb3R4Ml9jb25maWdfcGF1c2VfZnJtKHBmdmYpO1xuIH1cbkBAIC00NzAsOCArNDc4LDcgQEAgc3RhdGljIGludCBvdHgyX2dldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0Y21kLVx1MDAzZXJ4X21heF9jb2FsZXNjZWRfZnJhbWVzID0gaHctXHUwMDNlY3FfZWNvdW50X3dhaXQ7XG4gXHRjbWQtXHUwMDNldHhfY29hbGVzY2VfdXNlY3MgPSBody1cdTAwM2VjcV90aW1lX3dhaXQ7XG4gXHRjbWQtXHUwMDNldHhfbWF4X2NvYWxlc2NlZF9mcmFtZXMgPSBody1cdTAwM2VjcV9lY291bnRfd2FpdDtcbi1cdGlmICgocGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX0FEUFRWX0lOVF9DT0FMX0VOQUJMRUQpID09XG4tXHRcdFx0T1RYMl9GTEFHX0FEUFRWX0lOVF9DT0FMX0VOQUJMRUQpIHtcbitcdGlmIChvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfQURQVFZfSU5UX0NPQUxfRU5BQkxFRCkpIHtcbiBcdFx0Y21kLVx1MDAzZXVzZV9hZGFwdGl2ZV9yeF9jb2FsZXNjZSA9IDE7XG4gXHRcdGNtZC1cdTAwM2V1c2VfYWRhcHRpdmVfdHhfY29hbGVzY2UgPSAxO1xuIFx0fSBlbHNlIHtcbkBAIC01MDIsMTUgKzUwOSwxNCBAQCBzdGF0aWMgaW50IG90eDJfc2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHR9XG4gXG4gXHQvKiBDaGVjayBhbmQgdXBkYXRlIGNvYWxlc2NlIHN0YXR1cyAqL1xuLVx0aWYgKChwZnZmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfQURQVFZfSU5UX0NPQUxfRU5BQkxFRCkgPT1cbi1cdFx0XHRPVFgyX0ZMQUdfQURQVFZfSU5UX0NPQUxfRU5BQkxFRCkge1xuK1x0aWYgKG90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19BRFBUVl9JTlRfQ09BTF9FTkFCTEVEKSkge1xuIFx0XHRwcml2X2NvYWxlc2NlX3N0YXR1cyA9IDE7XG4gXHRcdGlmICghZWMtXHUwMDNldXNlX2FkYXB0aXZlX3J4X2NvYWxlc2NlKVxuLVx0XHRcdHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+T1RYMl9GTEFHX0FEUFRWX0lOVF9DT0FMX0VOQUJMRUQ7XG4rXHRcdFx0b3R4Ml9jbGVhcl9mbGFnKHBmdmYsIE9UWDJfRkxBR19BRFBUVl9JTlRfQ09BTF9FTkFCTEVEKTtcbiBcdH0gZWxzZSB7XG4gXHRcdHByaXZfY29hbGVzY2Vfc3RhdHVzID0gMDtcbiBcdFx0aWYgKGVjLVx1MDAzZXVzZV9hZGFwdGl2ZV9yeF9jb2FsZXNjZSlcbi1cdFx0XHRwZnZmLVx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19BRFBUVl9JTlRfQ09BTF9FTkFCTEVEO1xuK1x0XHRcdG90eDJfc2V0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX0FEUFRWX0lOVF9DT0FMX0VOQUJMRUQpO1xuIFx0fVxuIFxuIFx0LyogJ2NxX3RpbWVfd2FpdCcgaXMgOGJpdCBhbmQgaXMgaW4gbXVsdGlwbGUgb2YgMTAwbnMsXG5AQCAtNTU2LDggKzU2Miw3IEBAIHN0YXRpYyBpbnQgb3R4Ml9zZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdCAqICdvbicgdG8gJ29mZicuXG4gXHQgKi9cbiBcdGlmIChwcml2X2NvYWxlc2NlX3N0YXR1cyBcdTAwMjZcdTAwMjZcbi1cdCAgICAoKHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19BRFBUVl9JTlRfQ09BTF9FTkFCTEVEKSAhPVxuLVx0ICAgICBPVFgyX0ZMQUdfQURQVFZfSU5UX0NPQUxfRU5BQkxFRCkpIHtcbitcdCAgICAoIW90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19BRFBUVl9JTlRfQ09BTF9FTkFCTEVEKSkpIHtcbiBcdFx0aHctXHUwMDNlY3FfdGltZV93YWl0ID0gQ1FfVElNRVJfVEhSRVNIX0RFRkFVTFQ7XG4gXHRcdGh3LVx1MDAzZWNxX2Vjb3VudF93YWl0ID0gQ1FfQ1FFX1RIUkVTSF9ERUZBVUxUO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2Zsb3dzLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9mbG93cy5jXG5pbmRleCA5OWQ3OGZjNWEyYzRhLi5iOGZmNDlmMGY2ZTNiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZmxvd3MuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZmxvd3MuY1xuQEAgLTI3MCw5ICsyNzAsOSBAQCBpbnQgb3R4Ml9hbGxvY19tY2FtX2VudHJpZXMoc3RydWN0IG90eDJfbmljICpwZnZmLCB1MTYgY291bnQpXG4gXHRmbG93X2NmZy1cdTAwM2VtYXhfZmxvd3MgPSBhbGxvY2F0ZWQ7XG4gXG4gXHRpZiAoYWxsb2NhdGVkKSB7XG4tXHRcdHBmdmYtXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX01DQU1fRU5UUklFU19BTExPQztcbi1cdFx0cGZ2Zi1cdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfTlRVUExFX1NVUFBPUlQ7XG4tXHRcdHBmdmYtXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX1RDX0ZMT1dFUl9TVVBQT1JUO1xuK1x0XHRvdHgyX3NldF9mbGFnKHBmdmYsIE9UWDJfRkxBR19NQ0FNX0VOVFJJRVNfQUxMT0MpO1xuK1x0XHRvdHgyX3NldF9mbGFnKHBmdmYsIE9UWDJfRkxBR19OVFVQTEVfU1VQUE9SVCk7XG4rXHRcdG90eDJfc2V0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1RDX0ZMT1dFUl9TVVBQT1JUKTtcbiBcdH1cbiBcbiBcdGlmIChhbGxvY2F0ZWQgIT0gY291bnQpXG5AQCAtMzc2LDcgKzM3Niw3IEBAIGludCBvdHgyX21jYW1fZW50cnlfaW5pdChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4gXHRmbG93X2NmZy1cdTAwM2V1bmljYXN0X29mZnNldCA9IHZmX3ZsYW5fbWF4X2Zsb3dzO1xuIFx0Zmxvd19jZmctXHUwMDNlcnhfdmxhbl9vZmZzZXQgPSBmbG93X2NmZy1cdTAwM2V1bmljYXN0X29mZnNldCArXG4gXHRcdFx0XHRcdGZsb3dfY2ZnLVx1MDAzZXVjYXN0X2ZsdF9jbnQ7XG4tXHRwZnZmLVx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19VQ0FTVF9GTFRSX1NVUFBPUlQ7XG4rXHRvdHgyX3NldF9mbGFnKHBmdmYsIE9UWDJfRkxBR19VQ0FTVF9GTFRSX1NVUFBPUlQpO1xuIFxuIFx0LyogQ2hlY2sgaWYgTlBDX0RNQUMgZmllbGQgaXMgc3VwcG9ydGVkXG4gXHQgKiBieSB0aGUgbWtleCBwcm9maWxlIGJlZm9yZSBzZXR0aW5nIFZMQU4gc3VwcG9ydCBmbGFnLlxuQEAgLTQwMSwxMSArNDAxLDExIEBAIGludCBvdHgyX21jYW1fZW50cnlfaW5pdChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4gXHR9XG4gXG4gXHRpZiAoZnJzcC1cdTAwM2VlbmFibGUpIHtcbi1cdFx0cGZ2Zi1cdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfUlhfVkxBTl9TVVBQT1JUO1xuLVx0XHRwZnZmLVx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19WRl9WTEFOX1NVUFBPUlQ7XG4rXHRcdG90eDJfc2V0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1JYX1ZMQU5fU1VQUE9SVCk7XG4rXHRcdG90eDJfc2V0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1ZGX1ZMQU5fU1VQUE9SVCk7XG4gXHR9XG4gXG4tXHRwZnZmLVx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19NQ0FNX0VOVFJJRVNfQUxMT0M7XG4rXHRvdHgyX3NldF9mbGFnKHBmdmYsIE9UWDJfRkxBR19NQ0FNX0VOVFJJRVNfQUxMT0MpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBmdmYtXHUwMDNlbWJveC5sb2NrKTtcbiBcbiBcdC8qIEFsbG9jYXRlIGVudHJpZXMgZm9yIE50dXBsZSBmaWx0ZXJzICovXG5AQCAtNDE1LDcgKzQxNSw3IEBAIGludCBvdHgyX21jYW1fZW50cnlfaW5pdChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuLVx0cGZ2Zi1cdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfVENfRkxPV0VSX1NVUFBPUlQ7XG4rXHRvdHgyX3NldF9mbGFnKHBmdmYsIE9UWDJfRkxBR19UQ19GTE9XRVJfU1VQUE9SVCk7XG4gXG4gXHRyZWZjb3VudF9zZXQoXHUwMDI2Zmxvd19jZmctXHUwMDNlbWFya19mbG93cywgMSk7XG4gXHRyZXR1cm4gMDtcbkBAIC00NzksNyArNDc5LDcgQEAgaW50IG90eDJfbWNhbV9mbG93X2luaXQoc3RydWN0IG90eDJfbmljICpwZilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbiBcdC8qIENoZWNrIGlmIE1DQU0gZW50cmllcyBhcmUgYWxsb2NhdGUgb3Igbm90ICovXG4tXHRpZiAoIShwZi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1VDQVNUX0ZMVFJfU1VQUE9SVCkpXG4rXHRpZiAoIW90eDJfdGVzdF9mbGFnKHBmLCBPVFgyX0ZMQUdfVUNBU1RfRkxUUl9TVVBQT1JUKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRwZi1cdTAwM2VtYWNfdGFibGUgPSBkZXZtX2t6YWxsb2MocGYtXHUwMDNlZGV2LCBzaXplb2Yoc3RydWN0IG90eDJfbWFjX3RhYmxlKVxuQEAgLTUwMSw3ICs1MDEsNyBAQCBpbnQgb3R4Ml9tY2FtX2Zsb3dfaW5pdChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmKVxuIFx0aWYgKCFwZi1cdTAwM2VmbG93X2NmZy1cdTAwM2VibWFwX3RvX2RtYWNpbmRleClcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4tXHRwZi1cdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfRE1BQ0ZMVFJfU1VQUE9SVDtcbitcdG90eDJfc2V0X2ZsYWcocGYsIE9UWDJfRkxBR19ETUFDRkxUUl9TVVBQT1JUKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC01MjEsNyArNTIxLDcgQEAgc3RhdGljIGludCBvdHgyX2RvX2FkZF9tYWNmaWx0ZXIoc3RydWN0IG90eDJfbmljICpwZiwgY29uc3QgdTggKm1hYylcbiBcdHN0cnVjdCBucGNfaW5zdGFsbF9mbG93X3JlcSAqcmVxO1xuIFx0aW50IGVyciwgaTtcbiBcbi1cdGlmICghKHBmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfVUNBU1RfRkxUUl9TVVBQT1JUKSlcbitcdGlmICghb3R4Ml90ZXN0X2ZsYWcocGYsIE9UWDJfRkxBR19VQ0FTVF9GTFRSX1NVUFBPUlQpKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiBcdC8qIGRvbnQgaGF2ZSBmcmVlIG1jYW0gZW50cmllcyBvciB1YyBsaXN0IGlzIGdyZWF0ZXIgdGhhbiBhbGxvdGVkICovXG5AQCAtMTE2Nyw3ICsxMTY3LDcgQEAgc3RhdGljIGludCBvdHgyX2lzX2Zsb3dfcnVsZV9kbWFjZmlsdGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbiBcdHU2NCByaW5nX2Nvb2tpZSA9IGZzcC1cdTAwM2VyaW5nX2Nvb2tpZTtcbiBcdHUzMiBmbG93X3R5cGU7XG4gXG4tXHRpZiAoIShwZnZmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfRE1BQ0ZMVFJfU1VQUE9SVCkpXG4rXHRpZiAoIW90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19ETUFDRkxUUl9TVVBQT1JUKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0Zmxvd190eXBlID0gZnNwLVx1MDAzZWZsb3dfdHlwZSBcdTAwMjYgfihGTE9XX0VYVCB8IEZMT1dfTUFDX0VYVCB8IEZMT1dfUlNTKTtcbkBAIC0xMzY0LDcgKzEzNjQsNyBAQCBpbnQgb3R4Ml9hZGRfZmxvdyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHN0cnVjdCBldGh0b29sX3J4bmZjICpuZmMpXG4gXHR9XG4gXG4gXHRyaW5nID0gZXRodG9vbF9nZXRfZmxvd19zcGVjX3JpbmcoZnNwLVx1MDAzZXJpbmdfY29va2llKTtcbi1cdGlmICghKHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19OVFVQTEVfU1VQUE9SVCkpXG4rXHRpZiAoIW90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19OVFVQTEVfU1VQUE9SVCkpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIFx0LyogTnVtYmVyIG9mIHF1ZXVlcyBvbiBhIFZGIGNhbiBiZSBncmVhdGVyIG9yIGxlc3MgdGhhblxuQEAgLTE1OTYsNyArMTU5Niw3IEBAIGludCBvdHgyX2Rlc3Ryb3lfbnR1cGxlX2Zsb3dzKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiBcdHN0cnVjdCBvdHgyX2Zsb3cgKml0ZXIsICp0bXA7XG4gXHRpbnQgZXJyO1xuIFxuLVx0aWYgKCEocGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX05UVVBMRV9TVVBQT1JUKSlcbitcdGlmICghb3R4Ml90ZXN0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX05UVVBMRV9TVVBQT1JUKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRpZiAoIWZsb3dfY2ZnLVx1MDAzZW1heF9mbG93cylcbkBAIC0xNjI5LDcgKzE2MjksNyBAQCBpbnQgb3R4Ml9kZXN0cm95X21jYW1fZmxvd3Moc3RydWN0IG90eDJfbmljICpwZnZmKVxuIFx0c3RydWN0IG90eDJfZmxvdyAqaXRlciwgKnRtcDtcbiBcdGludCBlcnI7XG4gXG4tXHRpZiAoIShwZnZmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfTUNBTV9FTlRSSUVTX0FMTE9DKSlcbitcdGlmICghb3R4Ml90ZXN0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX01DQU1fRU5UUklFU19BTExPQykpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0LyogcmVtb3ZlIGFsbCBmbG93cyAqL1xuQEAgLTE2NTgsNyArMTY1OCw3IEBAIGludCBvdHgyX2Rlc3Ryb3lfbWNhbV9mbG93cyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4gXHRcdHJldHVybiBlcnI7XG4gXHR9XG4gXG4tXHRwZnZmLVx1MDAzZWZsYWdzIFx1MDAyNj0gfk9UWDJfRkxBR19NQ0FNX0VOVFJJRVNfQUxMT0M7XG4rXHRvdHgyX2NsZWFyX2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX01DQU1fRU5UUklFU19BTExPQyk7XG4gXHRmbG93X2NmZy1cdTAwM2VtYXhfZmxvd3MgPSAwO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBmdmYtXHUwMDNlbWJveC5sb2NrKTtcbiBcbkBAIC0xNzIxLDcgKzE3MjEsNyBAQCBpbnQgb3R4Ml9lbmFibGVfcnh2bGFuKHN0cnVjdCBvdHgyX25pYyAqcGYsIGJvb2wgZW5hYmxlKVxuIFx0aW50IGVycjtcbiBcbiBcdC8qIERvbnQgaGF2ZSBlbm91Z2ggbWNhbSBlbnRyaWVzICovXG4tXHRpZiAoIShwZi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1JYX1ZMQU5fU1VQUE9SVCkpXG4rXHRpZiAoIW90eDJfdGVzdF9mbGFnKHBmLCBPVFgyX0ZMQUdfUlhfVkxBTl9TVVBQT1JUKSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4gXHRpZiAoZW5hYmxlKSB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNcbmluZGV4IGMwZTIxMDBkZTFkOTMuLjFlMTdmOGQ0OWZkNDQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXG5AQCAtODc5LDcgKzg3OSw3IEBAIHN0YXRpYyB2b2lkIG90eDJfaGFuZGxlX2xpbmtfZXZlbnQoc3RydWN0IG90eDJfbmljICpwZilcbiBcdHN0cnVjdCBjZ3hfbGlua191c2VyX2luZm8gKmxpbmZvID0gXHUwMDI2cGYtXHUwMDNlbGluZm87XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGYtXHUwMDNlbmV0ZGV2O1xuIFxuLVx0aWYgKHBmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfUE9SVF9VUClcbitcdGlmIChvdHgyX3Rlc3RfZmxhZyhwZiwgT1RYMl9GTEFHX1BPUlRfVVApKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRwcl9pbmZvKFwiJXMgTklDIExpbmsgaXMgJXMgJWQgTWJwcyAlcyBkdXBsZXhcXG5cIiwgbmV0ZGV2LVx1MDAzZW5hbWUsXG5AQCAtOTA3LDExICs5MDcsMTEgQEAgc3RhdGljIGludCBvdHgyX21ib3hfdXBfaGFuZGxlcl9yZXBfZXZlbnRfdXBfbm90aWZ5KHN0cnVjdCBvdHgyX25pYyAqcGYsXG4gXG4gXHRpZiAoaW5mby1cdTAwM2VldmVudCA9PSBSVlVfRVZFTlRfUE9SVF9TVEFURSkge1xuIFx0XHRpZiAoaW5mby1cdTAwM2VldnRfZGF0YS5wb3J0X3N0YXRlKSB7XG4tXHRcdFx0cGYtXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX1BPUlRfVVA7XG4rXHRcdFx0b3R4Ml9zZXRfZmxhZyhwZiwgT1RYMl9GTEFHX1BPUlRfVVApO1xuIFx0XHRcdG5ldGlmX2NhcnJpZXJfb24obmV0ZGV2KTtcbiBcdFx0XHRuZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKG5ldGRldik7XG4gXHRcdH0gZWxzZSB7XG4tXHRcdFx0cGYtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+T1RYMl9GTEFHX1BPUlRfVVA7XG4rXHRcdFx0b3R4Ml9jbGVhcl9mbGFnKHBmLCBPVFgyX0ZMQUdfUE9SVF9VUCk7XG4gXHRcdFx0bmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5ldGRldik7XG4gXHRcdFx0bmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTtcbiBcdFx0fVxuQEAgLTk1Myw3ICs5NTMsNyBAQCBpbnQgb3R4Ml9tYm94X3VwX2hhbmRsZXJfY2d4X2xpbmtfZXZlbnQoc3RydWN0IG90eDJfbmljICpwZixcbiBcdH1cbiBcbiBcdC8qIGludGVyZmFjZSBoYXMgbm90IGJlZW4gZnVsbHkgY29uZmlndXJlZCB5ZXQgKi9cbi1cdGlmIChwZi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX0lOVEZfRE9XTilcbitcdGlmIChvdHgyX3Rlc3RfZmxhZyhwZiwgT1RYMl9GTEFHX0lOVEZfRE9XTikpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0b3R4Ml9oYW5kbGVfbGlua19ldmVudChwZik7XG5AQCAtMTgyOCw3ICsxODI4LDcgQEAgdm9pZCBvdHgyX2ZyZWVfaHdfcmVzb3VyY2VzKHN0cnVjdCBvdHgyX25pYyAqcGYpXG4gXHRmcmVlX3JlcSA9IG90eDJfbWJveF9hbGxvY19tc2dfbml4X2xmX2ZyZWUobWJveCk7XG4gXHRpZiAoZnJlZV9yZXEpIHtcbiBcdFx0ZnJlZV9yZXEtXHUwMDNlZmxhZ3MgPSBOSVhfTEZfRElTQUJMRV9GTE9XUyB8IE5JWF9MRl9ET05UX0ZSRUVfREZUX0lEWFM7XG4tXHRcdGlmICghKHBmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfUEZfU0hVVERPV04pKVxuK1x0XHRpZiAoIW90eDJfdGVzdF9mbGFnKHBmLCBPVFgyX0ZMQUdfUEZfU0hVVERPV04pKVxuIFx0XHRcdGZyZWVfcmVxLVx1MDAzZWZsYWdzIHw9IE5JWF9MRl9ET05UX0ZSRUVfVFhfVlRBRztcbiBcdFx0aWYgKG90eDJfc3luY19tYm94X21zZyhtYm94KSlcbiBcdFx0XHRkZXZfZXJyKHBmLVx1MDAzZWRldiwgXCIlcyBmYWlsZWQgdG8gZnJlZSBuaXhsZlxcblwiLCBfX2Z1bmNfXyk7XG5AQCAtMjAwNyw2ICsyMDA3LDE0IEBAIGludCBvdHgyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXJyX2ZyZWVfbWVtO1xuIFxuK1x0ZXJyID0gb3R4Ml9tcXByaW9fdXAocGYpO1xuK1x0aWYgKGVycikge1xuK1x0XHRuZXRkZXZfZXJyKHBmLVx1MDAzZW5ldGRldixcbitcdFx0XHQgICBcIm1xcHJpbzogZmFpbGVkIHRvIHJlc3RvcmUgc2hhcGVycyBkdXJpbmcgb3BlbjogJWRcXG5cIixcbitcdFx0XHQgICBlcnIpO1xuK1x0XHRnb3RvIGVycl9mcmVlX2h3O1xuK1x0fVxuK1xuIFx0LyogUmVnaXN0ZXIgTkFQSSBoYW5kbGVyICovXG4gXHRmb3IgKHFpZHggPSAwOyBxaWR4IFx1MDAzYyBwZi1cdTAwM2Vody5jaW50X2NudDsgcWlkeCsrKSB7XG4gXHRcdGNxX3BvbGwgPSBcdTAwMjZxc2V0LVx1MDAzZW5hcGlbcWlkeF07XG5AQCAtMjEzNSwyMSArMjE0MywyMSBAQCBpbnQgb3R4Ml9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHR9XG4gXHRvdHgyX3dyaXRlNjQocGYsIE5JWF9MRl9SQVNfRU5BX1cxUywgTklYX0xGX1JBU19NQVNLKTtcbiBcbi1cdGlmIChwZi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1JYX1ZMQU5fU1VQUE9SVClcbitcdGlmIChvdHgyX3Rlc3RfZmxhZyhwZiwgT1RYMl9GTEFHX1JYX1ZMQU5fU1VQUE9SVCkpXG4gXHRcdG90eDJfZW5hYmxlX3J4dmxhbihwZiwgdHJ1ZSk7XG4gXG4gXHQvKiBXaGVuIHJlaW5pdGlhbGl6aW5nIGVuYWJsZSB0aW1lIHN0YW1waW5nIGlmIGl0IGlzIGVuYWJsZWQgYmVmb3JlICovXG4tXHRpZiAocGYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19UWF9UU1RBTVBfRU5BQkxFRCkge1xuLVx0XHRwZi1cdTAwM2VmbGFncyBcdTAwMjY9IH5PVFgyX0ZMQUdfVFhfVFNUQU1QX0VOQUJMRUQ7XG4rXHRpZiAob3R4Ml90ZXN0X2ZsYWcocGYsIE9UWDJfRkxBR19UWF9UU1RBTVBfRU5BQkxFRCkpIHtcbitcdFx0b3R4Ml9jbGVhcl9mbGFnKHBmLCBPVFgyX0ZMQUdfVFhfVFNUQU1QX0VOQUJMRUQpO1xuIFx0XHRvdHgyX2NvbmZpZ19od190eF90c3RhbXAocGYsIHRydWUpO1xuIFx0fVxuLVx0aWYgKHBmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfUlhfVFNUQU1QX0VOQUJMRUQpIHtcbi1cdFx0cGYtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+T1RYMl9GTEFHX1JYX1RTVEFNUF9FTkFCTEVEO1xuK1x0aWYgKG90eDJfdGVzdF9mbGFnKHBmLCBPVFgyX0ZMQUdfUlhfVFNUQU1QX0VOQUJMRUQpKSB7XG4rXHRcdG90eDJfY2xlYXJfZmxhZyhwZiwgT1RYMl9GTEFHX1JYX1RTVEFNUF9FTkFCTEVEKTtcbiBcdFx0b3R4Ml9jb25maWdfaHdfcnhfdHN0YW1wKHBmLCB0cnVlKTtcbiBcdH1cbiBcbi1cdHBmLVx1MDAzZWZsYWdzIFx1MDAyNj0gfk9UWDJfRkxBR19JTlRGX0RPV047XG4tXHRwZi1cdTAwM2VmbGFncyBcdTAwMjY9IH5PVFgyX0ZMQUdfUE9SVF9VUDtcbitcdG90eDJfY2xlYXJfZmxhZyhwZiwgT1RYMl9GTEFHX0lOVEZfRE9XTik7XG4rXHRvdHgyX2NsZWFyX2ZsYWcocGYsIE9UWDJfRkxBR19QT1JUX1VQKTtcbiBcdC8qICdpbnRmX2Rvd24nIG1heSBiZSBjaGVja2VkIG9uIGFueSBjcHUgKi9cbiBcdHNtcF93bWIoKTtcbiBcbkBAIC0yMTYxLDcgKzIxNjksNyBAQCBpbnQgb3R4Ml9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRcdG90eDJfaGFuZGxlX2xpbmtfZXZlbnQocGYpO1xuIFxuIFx0LyogSW5zdGFsbCBETUFDIEZpbHRlcnMgKi9cbi1cdGlmIChwZi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX0RNQUNGTFRSX1NVUFBPUlQpXG4rXHRpZiAob3R4Ml90ZXN0X2ZsYWcocGYsIE9UWDJfRkxBR19ETUFDRkxUUl9TVVBQT1JUKSlcbiBcdFx0b3R4Ml9kbWFjZmx0X3JlaW5zdGFsbF9mbG93cyhwZik7XG4gXG4gXHRvdHgyX3RjX2FwcGx5X2luZ3Jlc3NfcG9saWNlX3J1bGVzKHBmKTtcbkBAIC0yMTg2LDcgKzIxOTQsNyBAQCBpbnQgb3R4Ml9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gZXJyX3R4X3N0b3BfcXVldWVzOlxuIFx0bmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5ldGRldik7XG4gXHRuZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpO1xuLVx0cGYtXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX0lOVEZfRE9XTjtcbitcdG90eDJfc2V0X2ZsYWcocGYsIE9UWDJfRkxBR19JTlRGX0RPV04pO1xuIFx0LyogZnJlZSBOSVhMRiBQT0lTT04gaXJxICovXG4gXHR2ZWMgPSBwY2lfaXJxX3ZlY3RvcihwZi1cdTAwM2VwZGV2LFxuIFx0XHRcdCAgICAgcGYtXHUwMDNlaHcubml4X21zaXhvZmYgKyBOSVhfTEZfUE9JU09OX1ZFQyk7XG5AQCAtMjIwNSw2ICsyMjEzLDcgQEAgaW50IG90eDJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0ZnJlZV9pcnEodmVjLCBwZik7XG4gZXJyX2Rpc2FibGVfbmFwaTpcbiBcdG90eDJfZGlzYWJsZV9uYXBpKHBmKTtcbitlcnJfZnJlZV9odzpcbiBcdG90eDJfZnJlZV9od19yZXNvdXJjZXMocGYpO1xuIGVycl9mcmVlX21lbTpcbiBcdG90eDJfZnJlZV9xdWV1ZV9tZW0ocXNldCk7XG5AQCAtMjIyMCwxMyArMjIyOSwxMyBAQCBpbnQgb3R4Ml9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRpbnQgcWlkeCwgdmVjLCB3cms7XG4gXG4gXHQvKiBJZiB0aGUgRE9XTiBmbGFnIGlzIHNldCByZXNvdXJjZXMgYXJlIGFscmVhZHkgZnJlZWQgKi9cbi1cdGlmIChwZi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX0lOVEZfRE9XTilcbitcdGlmIChvdHgyX3Rlc3RfZmxhZyhwZiwgT1RYMl9GTEFHX0lOVEZfRE9XTikpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0bmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTtcbiBcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpO1xuIFxuLVx0cGYtXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX0lOVEZfRE9XTjtcbitcdG90eDJfc2V0X2ZsYWcocGYsIE9UWDJfRkxBR19JTlRGX0RPV04pO1xuIFx0LyogJ2ludGZfZG93bicgbWF5IGJlIGNoZWNrZWQgb24gYW55IGNwdSAqL1xuIFx0c21wX3dtYigpO1xuIFxuQEAgLTIyODAsNiArMjI4OSw3IEBAIGludCBvdHgyX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdGZvciAocWlkeCA9IDA7IHFpZHggXHUwMDNjIG5ldGRldi1cdTAwM2VudW1fdHhfcXVldWVzOyBxaWR4KyspXG4gXHRcdG5ldGRldl90eF9yZXNldF9xdWV1ZShuZXRkZXZfZ2V0X3R4X3F1ZXVlKG5ldGRldiwgcWlkeCkpO1xuIFxuK1x0c3luY2hyb25pemVfbmV0KCk7XG4gXHRvdHgyX2ZyZWVfcXVldWVfbWVtKHFzZXQpO1xuIFx0LyogRG8gbm90IGNsZWFyIFJRL1NRIHJpbmdzaXplIHNldHRpbmdzICovXG4gXHRtZW1zZXRfc3RhcnRhdChxc2V0LCAwLCBzcWVfY250KTtcbkBAIC0yNDU3LDcgKzI0NjcsNyBAQCBzdGF0aWMgaW50IG90eDJfY29uZmlnX2h3X3J4X3RzdGFtcChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGJvb2wgZW5hYmxlKVxuIFx0c3RydWN0IG1zZ19yZXEgKnJlcTtcbiBcdGludCBlcnI7XG4gXG4tXHRpZiAocGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1JYX1RTVEFNUF9FTkFCTEVEIFx1MDAyNlx1MDAyNiBlbmFibGUpXG4rXHRpZiAob3R4Ml90ZXN0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1JYX1RTVEFNUF9FTkFCTEVEKSBcdTAwMjZcdTAwMjYgZW5hYmxlKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdG11dGV4X2xvY2soXHUwMDI2cGZ2Zi1cdTAwM2VtYm94LmxvY2spO1xuQEAgLTI0NzgsOSArMjQ4OCw5IEBAIHN0YXRpYyBpbnQgb3R4Ml9jb25maWdfaHdfcnhfdHN0YW1wKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgYm9vbCBlbmFibGUpXG4gXG4gXHRtdXRleF91bmxvY2soXHUwMDI2cGZ2Zi1cdTAwM2VtYm94LmxvY2spO1xuIFx0aWYgKGVuYWJsZSlcbi1cdFx0cGZ2Zi1cdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfUlhfVFNUQU1QX0VOQUJMRUQ7XG4rXHRcdG90eDJfc2V0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1JYX1RTVEFNUF9FTkFCTEVEKTtcbiBcdGVsc2Vcbi1cdFx0cGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjY9IH5PVFgyX0ZMQUdfUlhfVFNUQU1QX0VOQUJMRUQ7XG4rXHRcdG90eDJfY2xlYXJfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfUlhfVFNUQU1QX0VOQUJMRUQpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTI0ODksNyArMjQ5OSw3IEBAIHN0YXRpYyBpbnQgb3R4Ml9jb25maWdfaHdfdHhfdHN0YW1wKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgYm9vbCBlbmFibGUpXG4gXHRzdHJ1Y3QgbXNnX3JlcSAqcmVxO1xuIFx0aW50IGVycjtcbiBcbi1cdGlmIChwZnZmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfVFhfVFNUQU1QX0VOQUJMRUQgXHUwMDI2XHUwMDI2IGVuYWJsZSlcbitcdGlmIChvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfVFhfVFNUQU1QX0VOQUJMRUQpIFx1MDAyNlx1MDAyNiBlbmFibGUpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZwZnZmLVx1MDAzZW1ib3gubG9jayk7XG5AQCAtMjUxMCw5ICsyNTIwLDkgQEAgc3RhdGljIGludCBvdHgyX2NvbmZpZ19od190eF90c3RhbXAoc3RydWN0IG90eDJfbmljICpwZnZmLCBib29sIGVuYWJsZSlcbiBcbiBcdG11dGV4X3VubG9jayhcdTAwMjZwZnZmLVx1MDAzZW1ib3gubG9jayk7XG4gXHRpZiAoZW5hYmxlKVxuLVx0XHRwZnZmLVx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19UWF9UU1RBTVBfRU5BQkxFRDtcbitcdFx0b3R4Ml9zZXRfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfVFhfVFNUQU1QX0VOQUJMRUQpO1xuIFx0ZWxzZVxuLVx0XHRwZnZmLVx1MDAzZWZsYWdzIFx1MDAyNj0gfk9UWDJfRkxBR19UWF9UU1RBTVBfRU5BQkxFRDtcbitcdFx0b3R4Ml9jbGVhcl9mbGFnKHBmdmYsIE9UWDJfRkxBR19UWF9UU1RBTVBfRU5BQkxFRCk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMjUzNyw4ICsyNTQ3LDggQEAgaW50IG90eDJfY29uZmlnX2h3dHN0YW1wX3NldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFxuIFx0c3dpdGNoIChjb25maWctXHUwMDNldHhfdHlwZSkge1xuIFx0Y2FzZSBIV1RTVEFNUF9UWF9PRkY6XG4tXHRcdGlmIChwZnZmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfUFRQX09ORVNURVBfU1lOQylcbi1cdFx0XHRwZnZmLVx1MDAzZWZsYWdzIFx1MDAyNj0gfk9UWDJfRkxBR19QVFBfT05FU1RFUF9TWU5DO1xuK1x0XHRpZiAob3R4Ml90ZXN0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1BUUF9PTkVTVEVQX1NZTkMpKVxuK1x0XHRcdG90eDJfY2xlYXJfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfUFRQX09ORVNURVBfU1lOQyk7XG4gXG4gXHRcdGNhbmNlbF9kZWxheWVkX3dvcmsoXHUwMDI2cGZ2Zi1cdTAwM2VwdHAtXHUwMDNlc3luY3RzdGFtcF93b3JrKTtcbiBcdFx0b3R4Ml9jb25maWdfaHdfdHhfdHN0YW1wKHBmdmYsIGZhbHNlKTtcbkBAIC0yNTQ5LDcgKzI1NTksNyBAQCBpbnQgb3R4Ml9jb25maWdfaHd0c3RhbXBfc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdFx0XHRcdCAgIFwiT25lLXN0ZXAgdGltZSBzdGFtcGluZyBpcyBub3Qgc3VwcG9ydGVkXCIpO1xuIFx0XHRcdHJldHVybiAtRVJBTkdFO1xuIFx0XHR9XG4tXHRcdHBmdmYtXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX1BUUF9PTkVTVEVQX1NZTkM7XG4rXHRcdG90eDJfc2V0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1BUUF9PTkVTVEVQX1NZTkMpO1xuIFx0XHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2cGZ2Zi1cdTAwM2VwdHAtXHUwMDNlc3luY3RzdGFtcF93b3JrLFxuIFx0XHRcdFx0ICAgICAgbXNlY3NfdG9famlmZmllcyg1MDApKTtcbiBcdFx0ZmFsbHRocm91Z2g7XG5AQCAtMjgzNSw3ICsyODQ1LDcgQEAgc3RhdGljIGludCBvdHgyX3NldF92Zl92bGFuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCB2ZiwgdTE2IHZsYW4sIHU4IHFvcyxcbiBcdGlmIChwcm90byAhPSBodG9ucyhFVEhfUF84MDIxUSkpXG4gXHRcdHJldHVybiAtRVBST1RPTk9TVVBQT1JUO1xuIFxuLVx0aWYgKCEocGYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19WRl9WTEFOX1NVUFBPUlQpKVxuK1x0aWYgKCFvdHgyX3Rlc3RfZmxhZyhwZiwgT1RYMl9GTEFHX1ZGX1ZMQU5fU1VQUE9SVCkpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbiBcdHJldHVybiBvdHgyX2RvX3NldF92Zl92bGFuKHBmLCB2ZiwgdmxhbiwgcW9zLCBwcm90byk7XG5AQCAtMjkyMyw2ICsyOTMzLDEyIEBAIHN0YXRpYyBpbnQgb3R4Ml94ZHBfc2V0dXAoc3RydWN0IG90eDJfbmljICpwZiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuIFx0Ym9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcocGYtXHUwMDNlbmV0ZGV2KTtcbiBcdHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2c7XG4gXG4rXHRpZiAocHJvZyBcdTAwMjZcdTAwMjYgcGYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpIHtcbitcdFx0bmV0ZGV2X2VycihkZXYsXG4rXHRcdFx0ICAgXCJYRFA6IGNhbm5vdCBhdHRhY2ggd2hpbGUgbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGlzIGFjdGl2ZVxcblwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuIFx0aWYgKHByb2cgXHUwMDI2XHUwMDI2IGRldi1cdTAwM2VtdHUgXHUwMDNlIE1BWF9YRFBfTVRVKSB7XG4gXHRcdG5ldGRldl93YXJuKGRldiwgXCJKdW1ibyBmcmFtZXMgbm90IHlldCBzdXBwb3J0ZWQgd2l0aCBYRFBcXG5cIik7XG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbkBAIC0zMDg2LDcgKzMxMDIsNyBAQCBpbnQgb3R4Ml9yZWFsbG9jX21zaXhfdmVjdG9ycyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmKVxuIFx0ICogaW50ZXJydXB0IHJhbmdlIChRSU5ULCBDSU5ULCBHSU5ULCBFUlIgYW5kIFBPSVNPTiB2ZWN0b3JzKS5cbiBcdCAqL1xuIFx0bnVtX3ZlYyA9IGh3LVx1MDAzZW5peF9tc2l4b2ZmO1xuLVx0aWYgKHBmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfUkVQX01PREVfRU5BQkxFRClcbitcdGlmIChvdHgyX3Rlc3RfZmxhZyhwZiwgT1RYMl9GTEFHX1JFUF9NT0RFX0VOQUJMRUQpKVxuIFx0XHRudW1fdmVjICs9IE5JWF9MRl9DSU5UX1ZFQ19TVEFSVCArIGh3LVx1MDAzZW1heF9xdWV1ZXM7XG4gXHRlbHNlXG4gXHRcdG51bV92ZWMgKz0gTklYX0xGX1BPSVNPTl9WRUMgKyAxO1xuQEAgLTMyNzMsNyArMzI4OSw3IEBAIHN0YXRpYyBpbnQgb3R4Ml9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuIFx0cGYtXHUwMDNlcGRldiA9IHBkZXY7XG4gXHRwZi1cdTAwM2VkZXYgPSBkZXY7XG4gXHRwZi1cdTAwM2V0b3RhbF92ZnMgPSBwY2lfc3Jpb3ZfZ2V0X3RvdGFsdmZzKHBkZXYpO1xuLVx0cGYtXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX0lOVEZfRE9XTjtcbitcdG90eDJfc2V0X2ZsYWcocGYsIE9UWDJfRkxBR19JTlRGX0RPV04pO1xuIFxuIFx0aHcgPSBcdTAwMjZwZi1cdTAwM2VodztcbiBcdGh3LVx1MDAzZXBkZXYgPSBwZGV2O1xuQEAgLTMzMjgsMjMgKzMzNDQsMjMgQEAgc3RhdGljIGludCBvdHgyX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9kZWxfbWNhbV9lbnRyaWVzO1xuIFxuLVx0aWYgKHBmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfTlRVUExFX1NVUFBPUlQpXG4rXHRpZiAob3R4Ml90ZXN0X2ZsYWcocGYsIE9UWDJfRkxBR19OVFVQTEVfU1VQUE9SVCkpXG4gXHRcdG5ldGRldi1cdTAwM2Vod19mZWF0dXJlcyB8PSBORVRJRl9GX05UVVBMRTtcbiBcbi1cdGlmIChwZi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1VDQVNUX0ZMVFJfU1VQUE9SVClcbitcdGlmIChvdHgyX3Rlc3RfZmxhZyhwZiwgT1RYMl9GTEFHX1VDQVNUX0ZMVFJfU1VQUE9SVCkpXG4gXHRcdG5ldGRldi1cdTAwM2Vwcml2X2ZsYWdzIHw9IElGRl9VTklDQVNUX0ZMVDtcbiBcbiBcdC8qIFN1cHBvcnQgVFNPIG9uIHRhZyBpbnRlcmZhY2UgKi9cbiBcdG5ldGRldi1cdTAwM2V2bGFuX2ZlYXR1cmVzIHw9IG5ldGRldi1cdTAwM2VmZWF0dXJlcztcbiBcdG5ldGRldi1cdTAwM2Vod19mZWF0dXJlcyAgfD0gTkVUSUZfRl9IV19WTEFOX0NUQUdfVFggfFxuIFx0XHRcdFx0TkVUSUZfRl9IV19WTEFOX1NUQUdfVFg7XG4tXHRpZiAocGYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19SWF9WTEFOX1NVUFBPUlQpXG4rXHRpZiAob3R4Ml90ZXN0X2ZsYWcocGYsIE9UWDJfRkxBR19SWF9WTEFOX1NVUFBPUlQpKVxuIFx0XHRuZXRkZXYtXHUwMDNlaHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX0NUQUdfUlggfFxuIFx0XHRcdFx0ICAgICAgIE5FVElGX0ZfSFdfVkxBTl9TVEFHX1JYO1xuIFx0bmV0ZGV2LVx1MDAzZWZlYXR1cmVzIHw9IG5ldGRldi1cdTAwM2Vod19mZWF0dXJlcztcbiBcbiBcdC8qIEhXIHN1cHBvcnRzIHRjIG9mZmxvYWQgYnV0IG11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIG4tdHVwbGUgZmlsdGVycyAqL1xuLVx0aWYgKHBmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfVENfRkxPV0VSX1NVUFBPUlQpXG4rXHRpZiAob3R4Ml90ZXN0X2ZsYWcocGYsIE9UWDJfRkxBR19UQ19GTE9XRVJfU1VQUE9SVCkpXG4gXHRcdG5ldGRldi1cdTAwM2Vod19mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1RDO1xuIFxuIFx0bmV0ZGV2LVx1MDAzZWh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfTE9PUEJBQ0sgfCBORVRJRl9GX1JYQUxMO1xuQEAgLTM1OTUsMTggKzM2MTEsMTggQEAgc3RhdGljIHZvaWQgb3R4Ml9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXG4gXHRwZiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4gXG4tXHRwZi1cdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfUEZfU0hVVERPV047XG4rXHRvdHgyX3NldF9mbGFnKHBmLCBPVFgyX0ZMQUdfUEZfU0hVVERPV04pO1xuIFxuLVx0aWYgKHBmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfVFhfVFNUQU1QX0VOQUJMRUQpXG4rXHRpZiAob3R4Ml90ZXN0X2ZsYWcocGYsIE9UWDJfRkxBR19UWF9UU1RBTVBfRU5BQkxFRCkpXG4gXHRcdG90eDJfY29uZmlnX2h3X3R4X3RzdGFtcChwZiwgZmFsc2UpO1xuLVx0aWYgKHBmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfUlhfVFNUQU1QX0VOQUJMRUQpXG4rXHRpZiAob3R4Ml90ZXN0X2ZsYWcocGYsIE9UWDJfRkxBR19SWF9UU1RBTVBfRU5BQkxFRCkpXG4gXHRcdG90eDJfY29uZmlnX2h3X3J4X3RzdGFtcChwZiwgZmFsc2UpO1xuIFxuIFx0LyogRGlzYWJsZSA4MDIuM3ggcGF1c2UgZnJhbWVzICovXG4tXHRpZiAocGYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19SWF9QQVVTRV9FTkFCTEVEIHx8XG4tXHQgICAgKHBmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfVFhfUEFVU0VfRU5BQkxFRCkpIHtcbi1cdFx0cGYtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+T1RYMl9GTEFHX1JYX1BBVVNFX0VOQUJMRUQ7XG4tXHRcdHBmLVx1MDAzZWZsYWdzIFx1MDAyNj0gfk9UWDJfRkxBR19UWF9QQVVTRV9FTkFCTEVEO1xuK1x0aWYgKG90eDJfdGVzdF9mbGFnKHBmLCBPVFgyX0ZMQUdfUlhfUEFVU0VfRU5BQkxFRCkgfHxcbitcdCAgICBvdHgyX3Rlc3RfZmxhZyhwZiwgT1RYMl9GTEFHX1RYX1BBVVNFX0VOQUJMRUQpKSB7XG4rXHRcdG90eDJfY2xlYXJfZmxhZyhwZiwgT1RYMl9GTEFHX1JYX1BBVVNFX0VOQUJMRUQpO1xuK1x0XHRvdHgyX2NsZWFyX2ZsYWcocGYsIE9UWDJfRkxBR19UWF9QQVVTRV9FTkFCTEVEKTtcbiBcdFx0b3R4Ml9jb25maWdfcGF1c2VfZnJtKHBmKTtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuY1xuaW5kZXggMDM5ZmQ0N2ViZjUyMi4uNzBkOTlhZTNkZWZiNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmNcbkBAIC0xNiw2ICsxNiw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3RjX2FjdC90Y19taXJyZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC90Y19hY3QvdGNfdmxhbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2lwdjYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9wa3Rfc2NoZWQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9zY2hfZ2VuZXJpYy5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJjbjEway5oXCJcbiAjaW5jbHVkZSBcIm90eDJfY29tbW9uLmhcIlxuQEAgLTMxLDYgKzMzLDEwIEBAXG4gXG4gI2RlZmluZSBNQ0FTVF9JTlZBTElEX0dSUFx0XHQoLTFVKVxuICNkZWZpbmUgUkFURV9NQU5USVNTQV9CSVRTXHRcdDhcbisvKiBNaW4gcGVyLXF1ZXVlIGVncmVzcyBzaGFwaW5nIHJhdGUgdGhlIE5JWCBUTFggZW5jb2RlciBzdXBwb3J0cyAoMiBNYnBzKS4gKi9cbisjZGVmaW5lIE9UWDJfTVFQUklPX01JTl9SQVRFX0JZVEVTX1BTXHQyNTAwMDBVTExcbisvKiBNYXggZWdyZXNzIHNoYXBpbmcgcmF0ZSB0aGUgTklYIFRMWCBlbmNvZGVyIHN1cHBvcnRzICgxMzA4MTYgTWJwcykuICovXG4rI2RlZmluZSBPVFgyX01RUFJJT19NQVhfUkFURV9CWVRFU19QU1x0KChNQVhfQlVSU1RfU0laRSAqIDEwMDAwMDBVTEwpIC8gOFVMTClcbiBcbiBzdGF0aWMgdm9pZCBvdHgyX2dldF9lZ3Jlc3NfYnVyc3RfY2ZnKHN0cnVjdCBvdHgyX25pYyAqbmljLCB1MzIgYnVyc3QsXG4gXHRcdFx0XHQgICAgICB1MzIgKmJ1cnN0X2V4cCwgdTMyICpidXJzdF9tYW50aXNzYSlcbkBAIC02MSw2ICs2Nyw5IEBAIHN0YXRpYyB2b2lkIG90eDJfZ2V0X2VncmVzc19idXJzdF9jZmcoc3RydWN0IG90eDJfbmljICpuaWMsIHUzMiBidXJzdCxcbiBcdFx0XHQqYnVyc3RfbWFudGlzc2EgPSB0bXAgLyAoMVVMTCBcdTAwM2NcdTAwM2MgKCpidXJzdF9leHAgLSA3KSk7XG4gXHRcdH1cbiBcdH0gZWxzZSB7XG4rXHRcdC8qIGJ1cnN0IDA6IGxhcmdlc3QgZW5jb2RhYmxlIGJ1cnN0IChDTjEwS19NQVhfQlVSU1RfU0laRSBvblxuK1x0XHQgKiBDTjEwSyksIG5vdCBhIG1pbmltYWwgYnVyc3QuXG4rXHRcdCAqL1xuIFx0XHQqYnVyc3RfZXhwID0gTUFYX0JVUlNUX0VYUE9ORU5UO1xuIFx0XHQqYnVyc3RfbWFudGlzc2EgPSBtYXhfbWFudGlzc2E7XG4gXHR9XG5AQCAtMTU5LDcgKzE2OCw3IEBAIHN0YXRpYyBpbnQgb3R4Ml90Y192YWxpZGF0ZV9mbG93KHN0cnVjdCBvdHgyX25pYyAqbmljLFxuIFx0XHRcdFx0IHN0cnVjdCBmbG93X2FjdGlvbiAqYWN0aW9ucyxcbiBcdFx0XHRcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuLVx0aWYgKG5pYy1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX0lOVEZfRE9XTikge1xuK1x0aWYgKG90eDJfdGVzdF9mbGFnKG5pYywgT1RYMl9GTEFHX0lOVEZfRE9XTikpIHtcbiBcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCJJbnRlcmZhY2Ugbm90IGluaXRpYWxpemVkXCIpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbkBAIC0yMjMsNyArMjMyLDcgQEAgc3RhdGljIGludCBvdHgyX3RjX2VncmVzc19tYXRjaGFsbF9pbnN0YWxsKHN0cnVjdCBvdHgyX25pYyAqbmljLFxuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbi1cdGlmIChuaWMtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19UQ19NQVRDSEFMTF9FR1JFU1NfRU5BQkxFRCkge1xuK1x0aWYgKG90eDJfdGVzdF9mbGFnKG5pYywgT1RYMl9GTEFHX1RDX01BVENIQUxMX0VHUkVTU19FTkFCTEVEKSkge1xuIFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuIFx0XHRcdFx0ICAgXCJPbmx5IG9uZSBFZ3Jlc3MgTUFUQ0hBTEwgcmF0ZWxpbWl0ZXIgY2FuIGJlIG9mZmxvYWRlZFwiKTtcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG5AQCAtMjQ0LDcgKzI1Myw3IEBAIHN0YXRpYyBpbnQgb3R4Ml90Y19lZ3Jlc3NfbWF0Y2hhbGxfaW5zdGFsbChzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYyxcbiBcdFx0XHRcdFx0XHQgICAgb3R4Ml9jb252ZXJ0X3JhdGUoZW50cnktXHUwMDNlcG9saWNlLnJhdGVfYnl0ZXNfcHMpKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRyZXR1cm4gZXJyO1xuLVx0XHRuaWMtXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX1RDX01BVENIQUxMX0VHUkVTU19FTkFCTEVEO1xuK1x0XHRvdHgyX3NldF9mbGFnKG5pYywgT1RYMl9GTEFHX1RDX01BVENIQUxMX0VHUkVTU19FTkFCTEVEKTtcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuQEAgLTI2MSwxMyArMjcwLDEzIEBAIHN0YXRpYyBpbnQgb3R4Ml90Y19lZ3Jlc3NfbWF0Y2hhbGxfZGVsZXRlKHN0cnVjdCBvdHgyX25pYyAqbmljLFxuIFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrID0gY2xzLVx1MDAzZWNvbW1vbi5leHRhY2s7XG4gXHRpbnQgZXJyO1xuIFxuLVx0aWYgKG5pYy1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX0lOVEZfRE9XTikge1xuK1x0aWYgKG90eDJfdGVzdF9mbGFnKG5pYywgT1RYMl9GTEFHX0lOVEZfRE9XTikpIHtcbiBcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCJJbnRlcmZhY2Ugbm90IGluaXRpYWxpemVkXCIpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbiBcdGVyciA9IG90eDJfc2V0X21hdGNoYWxsX2VncmVzc19yYXRlKG5pYywgMCwgMCk7XG4tXHRuaWMtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+T1RYMl9GTEFHX1RDX01BVENIQUxMX0VHUkVTU19FTkFCTEVEO1xuK1x0b3R4Ml9jbGVhcl9mbGFnKG5pYywgT1RYMl9GTEFHX1RDX01BVENIQUxMX0VHUkVTU19FTkFCTEVEKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuQEAgLTUwNSw3ICs1MTQsNyBAQCBzdGF0aWMgaW50IG90eDJfdGNfcGFyc2VfYWN0aW9ucyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYyxcbiBcdFx0XHRtYXJrID0gYWN0LVx1MDAzZW1hcms7XG4gXHRcdFx0cmVxLVx1MDAzZW1hdGNoX2lkID0gbWFyayBcdTAwMjYgT1RYMl9SWF9NQVRDSF9JRF9NQVNLO1xuIFx0XHRcdHJlcS1cdTAwM2VvcCA9IE5JWF9SWF9BQ1RJT05fREVGQVVMVDtcbi1cdFx0XHRuaWMtXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX1RDX01BUktfRU5BQkxFRDtcbitcdFx0XHRvdHgyX3NldF9mbGFnKG5pYywgT1RYMl9GTEFHX1RDX01BUktfRU5BQkxFRCk7XG4gXHRcdFx0cmVmY291bnRfaW5jKFx1MDAyNm5pYy1cdTAwM2VmbG93X2NmZy1cdTAwM2VtYXJrX2Zsb3dzKTtcbiBcdFx0XHRicmVhaztcbiBcbkBAIC05NDIsNyArOTUxLDcgQEAgc3RhdGljIHZvaWQgb3R4Ml9kZXN0cm95X3RjX2Zsb3dfbGlzdChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4gXHRzdHJ1Y3Qgb3R4Ml9mbG93X2NvbmZpZyAqZmxvd19jZmcgPSBwZnZmLVx1MDAzZWZsb3dfY2ZnO1xuIFx0c3RydWN0IG90eDJfdGNfZmxvdyAqaXRlciwgKnRtcDtcbiBcbi1cdGlmICghKHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19NQ0FNX0VOVFJJRVNfQUxMT0MpKVxuK1x0aWYgKCFvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfTUNBTV9FTlRSSUVTX0FMTE9DKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGl0ZXIsIHRtcCwgXHUwMDI2Zmxvd19jZmctXHUwMDNlZmxvd19saXN0X3RjLCBsaXN0KSB7XG5AQCAtMTE5NSwxMiArMTIwNCwxMiBAQCBzdGF0aWMgaW50IG90eDJfdGNfZGVsX2Zsb3coc3RydWN0IG90eDJfbmljICpuaWMsXG4gXHQvKiBEaXNhYmxlIFRDIE1BUksgZmxhZyBpZiB0aGV5IGFyZSBubyBydWxlcyB3aXRoIHNrYmVkaXQgbWFyayBhY3Rpb24gKi9cbiBcdGlmIChmbG93X25vZGUtXHUwMDNlcmVxLm1hdGNoX2lkKVxuIFx0XHRpZiAoIXJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZmbG93X2NmZy1cdTAwM2VtYXJrX2Zsb3dzKSlcbi1cdFx0XHRuaWMtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+T1RYMl9GTEFHX1RDX01BUktfRU5BQkxFRDtcbitcdFx0XHRvdHgyX2NsZWFyX2ZsYWcobmljLCBPVFgyX0ZMQUdfVENfTUFSS19FTkFCTEVEKTtcbiBcbiBcdGlmIChmbG93X25vZGUtXHUwMDNlaXNfYWN0X3BvbGljZSkge1xuIFx0XHRfX2NsZWFyX2JpdChmbG93X25vZGUtXHUwMDNlcnEsIFx1MDAyNm5pYy1cdTAwM2VycV9ibWFwKTtcbiBcbi1cdFx0aWYgKG5pYy1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX0lOVEZfRE9XTilcbitcdFx0aWYgKG90eDJfdGVzdF9mbGFnKG5pYywgT1RYMl9GTEFHX0lOVEZfRE9XTikpXG4gXHRcdFx0Z290byBmcmVlX21jYW1fZmxvdztcbiBcbiBcdFx0bXV0ZXhfbG9jayhcdTAwMjZuaWMtXHUwMDNlbWJveC5sb2NrKTtcbkBAIC0xMjQ2LDEwICsxMjU1LDEwIEBAIHN0YXRpYyBpbnQgb3R4Ml90Y19hZGRfZmxvdyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYyxcbiBcdHN0cnVjdCBucGNfaW5zdGFsbF9mbG93X3JlcSAqcmVxLCBkdW1teTtcbiBcdGludCByYywgZXJyLCBlbnRyeTtcbiBcbi1cdGlmICghKG5pYy1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1RDX0ZMT1dFUl9TVVBQT1JUKSlcbitcdGlmICghb3R4Ml90ZXN0X2ZsYWcobmljLCBPVFgyX0ZMQUdfVENfRkxPV0VSX1NVUFBPUlQpKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdGlmIChuaWMtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19JTlRGX0RPV04pIHtcbitcdGlmIChvdHgyX3Rlc3RfZmxhZyhuaWMsIE9UWDJfRkxBR19JTlRGX0RPV04pKSB7XG4gXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwiSW50ZXJmYWNlIG5vdCBpbml0aWFsaXplZFwiKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG5AQCAtMTQ0NCw3ICsxNDUzLDcgQEAgc3RhdGljIGludCBvdHgyX3RjX2luZ3Jlc3NfbWF0Y2hhbGxfaW5zdGFsbChzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYyxcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4tXHRpZiAobmljLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfVENfTUFUQ0hBTExfSU5HUkVTU19FTkFCTEVEKSB7XG4rXHRpZiAob3R4Ml90ZXN0X2ZsYWcobmljLCBPVFgyX0ZMQUdfVENfTUFUQ0hBTExfSU5HUkVTU19FTkFCTEVEKSkge1xuIFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuIFx0XHRcdFx0ICAgXCJPbmx5IG9uZSBpbmdyZXNzIE1BVENIQUxMIHJhdGVsaW1pdHRlciBjYW4gYmUgb2ZmbG9hZGVkXCIpO1xuIFx0XHRyZXR1cm4gLUVOT01FTTtcbkBAIC0xNDY5LDcgKzE0NzgsNyBAQCBzdGF0aWMgaW50IG90eDJfdGNfaW5ncmVzc19tYXRjaGFsbF9pbnN0YWxsKHN0cnVjdCBvdHgyX25pYyAqbmljLFxuIFx0XHRlcnIgPSBjbjEwa19zZXRfbWF0Y2hhbGxfaXBvbGljZXJfcmF0ZShuaWMsIGVudHJ5LVx1MDAzZXBvbGljZS5idXJzdCwgcmF0ZSk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIGVycjtcbi1cdFx0bmljLVx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19UQ19NQVRDSEFMTF9JTkdSRVNTX0VOQUJMRUQ7XG4rXHRcdG90eDJfc2V0X2ZsYWcobmljLCBPVFgyX0ZMQUdfVENfTUFUQ0hBTExfSU5HUkVTU19FTkFCTEVEKTtcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuQEAgLTE0ODYsMTMgKzE0OTUsMTMgQEAgc3RhdGljIGludCBvdHgyX3RjX2luZ3Jlc3NfbWF0Y2hhbGxfZGVsZXRlKHN0cnVjdCBvdHgyX25pYyAqbmljLFxuIFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrID0gY2xzLVx1MDAzZWNvbW1vbi5leHRhY2s7XG4gXHRpbnQgZXJyO1xuIFxuLVx0aWYgKG5pYy1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX0lOVEZfRE9XTikge1xuK1x0aWYgKG90eDJfdGVzdF9mbGFnKG5pYywgT1RYMl9GTEFHX0lOVEZfRE9XTikpIHtcbiBcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCJJbnRlcmZhY2Ugbm90IGluaXRpYWxpemVkXCIpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbiBcdGVyciA9IGNuMTBrX2ZyZWVfbWF0Y2hhbGxfaXBvbGljZXIobmljKTtcbi1cdG5pYy1cdTAwM2VmbGFncyBcdTAwMjY9IH5PVFgyX0ZMQUdfVENfTUFUQ0hBTExfSU5HUkVTU19FTkFCTEVEO1xuK1x0b3R4Ml9jbGVhcl9mbGFnKG5pYywgT1RYMl9GTEFHX1RDX01BVENIQUxMX0lOR1JFU1NfRU5BQkxFRCk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC0xNjAwLDE0ICsxNjA5LDc1MCBAQCBzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfYmxvY2soc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0XHRcdFx0ICBuaWMsIG5pYywgaW5ncmVzcyk7XG4gfVxuIFxuKy8qIEZyZWUgdGhlIHBlci1xdWV1ZSBtaW4vbWF4IHJhdGUgY2FjaGVzLiAqL1xuK3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUoc3RydWN0IG90eDJfbmljICpwZnZmKVxuK3tcbitcdGRldm1fa2ZyZWUocGZ2Zi1cdTAwM2VkZXYsIHBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlKTtcbitcdGRldm1fa2ZyZWUocGZ2Zi1cdTAwM2VkZXYsIHBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlKTtcbitcdHBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlID0gTlVMTDtcbitcdHBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlID0gTlVMTDtcbitcdHBmdmYtXHUwMDNlbXFwcmlvLmZsYWdzID0gMDtcbit9XG4rXG4rc3RhdGljIGludCBvdHgyX21xcHJpb19hbGxvY19jYWNoZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGJvb2wgcmVwbGFjaW5nKVxuK3tcbitcdHUxNiBudW1fdHhxID0gcGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcbitcbitcdGlmIChyZXBsYWNpbmcgXHUwMDI2XHUwMDI2IHBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlIFx1MDAyNlx1MDAyNiBwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSkge1xuK1x0XHRtZW1zZXQocGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUsIDAsXG4rXHRcdCAgICAgICBudW1fdHhxICogc2l6ZW9mKCpwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSkpO1xuK1x0XHRtZW1zZXQocGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUsIDAsXG4rXHRcdCAgICAgICBudW1fdHhxICogc2l6ZW9mKCpwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSkpO1xuK1x0XHRwZnZmLVx1MDAzZW1xcHJpby5mbGFncyA9IDA7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0b3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTtcbitcbitcdHBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlID0gZGV2bV9rY2FsbG9jKHBmdmYtXHUwMDNlZGV2LCBudW1fdHhxLFxuK1x0XHRcdFx0XHQgICAgIHNpemVvZigqcGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUpLFxuK1x0XHRcdFx0XHQgICAgIEdGUF9LRVJORUwpO1xuK1x0cGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUgPSBkZXZtX2tjYWxsb2MocGZ2Zi1cdTAwM2VkZXYsIG51bV90eHEsXG4rXHRcdFx0XHRcdCAgICAgc2l6ZW9mKCpwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSksXG4rXHRcdFx0XHRcdCAgICAgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIXBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlIHx8ICFwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSkge1xuK1x0XHRvdHgyX21xcHJpb19mcmVlX2NhY2hlKHBmdmYpO1xuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19zbmFwX2ZyZWUoc3RydWN0IG90eDJfbmljICpwZnZmLFxuK1x0XHRcdFx0ICBzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwICoqc25hcClcbit7XG4rXHRpZiAoISpzbmFwKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRkZXZtX2tmcmVlKHBmdmYtXHUwMDNlZGV2LCAqc25hcCk7XG4rXHQqc25hcCA9IE5VTEw7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fc25hcF9jb3B5KHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbitcdFx0XHRcdCBzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwICoqZHN0LFxuK1x0XHRcdFx0IGNvbnN0IHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXG4re1xuK1x0Y29uc3Qgc3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0ID0gXHUwMDI2bXFwcmlvLVx1MDAzZXFvcHQ7XG4rXHRzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwICpzbmFwO1xuK1x0aW50IHRjO1xuK1xuK1x0aWYgKCEqZHN0KSB7XG4rXHRcdHNuYXAgPSBkZXZtX2t6YWxsb2MocGZ2Zi1cdTAwM2VkZXYsIHNpemVvZigqc25hcCksIEdGUF9LRVJORUwpO1xuK1x0XHRpZiAoIXNuYXApXG4rXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHRcdCpkc3QgPSBzbmFwO1xuK1x0fSBlbHNlIHtcbitcdFx0c25hcCA9ICpkc3Q7XG4rXHR9XG4rXG4rXHRzbmFwLVx1MDAzZW51bV90YyA9IHFvcHQtXHUwMDNlbnVtX3RjO1xuK1x0Zm9yICh0YyA9IDA7IHRjIFx1MDAzYyBUQ19RT1BUX01BWF9RVUVVRTsgdGMrKykge1xuK1x0XHRzbmFwLVx1MDAzZWNvdW50W3RjXSA9IHFvcHQtXHUwMDNlY291bnRbdGNdO1xuK1x0XHRzbmFwLVx1MDAzZW9mZnNldFt0Y10gPSBxb3B0LVx1MDAzZW9mZnNldFt0Y107XG4rXHRcdHNuYXAtXHUwMDNlbWluX3JhdGVbdGNdID0gMDtcbitcdFx0c25hcC1cdTAwM2VtYXhfcmF0ZVt0Y10gPSAwO1xuK1x0fVxuK1xuK1x0Zm9yICh0YyA9IDA7IHRjIFx1MDAzYyBxb3B0LVx1MDAzZW51bV90YzsgdGMrKykge1xuK1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcbitcdFx0XHRzbmFwLVx1MDAzZW1pbl9yYXRlW3RjXSA9IG1xcHJpby1cdTAwM2VtaW5fcmF0ZVt0Y107XG4rXHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKVxuK1x0XHRcdHNuYXAtXHUwMDNlbWF4X3JhdGVbdGNdID0gbXFwcmlvLVx1MDAzZW1heF9yYXRlW3RjXTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IG90eDJfbXFwcmlvX3N0YWdlX2N1cihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4rXHRcdFx0XHQgY29uc3Qgc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbylcbit7XG4rXHRyZXR1cm4gb3R4Ml9tcXByaW9fc25hcF9jb3B5KHBmdmYsIFx1MDAyNnBmdmYtXHUwMDNlY3VyX21xX3NuYXAsIG1xcHJpbyk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX3NuYXBfY29tbWl0KHN0cnVjdCBvdHgyX25pYyAqcGZ2Zilcbit7XG4rXHRvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgXHUwMDI2cGZ2Zi1cdTAwM2VvbGRfbXFfc25hcCk7XG4rXHRwZnZmLVx1MDAzZW9sZF9tcV9zbmFwID0gcGZ2Zi1cdTAwM2VjdXJfbXFfc25hcDtcbitcdHBmdmYtXHUwMDNlY3VyX21xX3NuYXAgPSBOVUxMO1xuK31cbitcbitzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19jbGVhcl9yZXBsYWNlX3N0YXRlKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zilcbit7XG4rXHRwZnZmLVx1MDAzZW1xcHJpby5yZXBsYWNlX3NldHVwX2RvbmUgPSBmYWxzZTtcbitcdHBmdmYtXHUwMDNlbXFwcmlvLnJlcGxhY2VfZ3JhZnRfZG9uZSA9IGZhbHNlO1xuK31cbitcbitzdGF0aWMgYm9vbCBvdHgyX21xcHJpb19tZHFfYWxsb2NhdGVkKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zilcbit7XG4rXHRyZXR1cm4gcGZ2Zi1cdTAwM2Vody50eHNjaHFfY250W05JWF9UWFNDSF9MVkxfTURRXSAhPSAwO1xuK31cbitcbitzdGF0aWMgaW50IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmF0ZV9saW1pdCk7XG4rXG4rc3RhdGljIGludCBvdHgyX21xcHJpb19yZXN0b3JlX29sZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4re1xuK1x0c3RydWN0IG1xX29mZmxvYWRfc25hcCAqc25hcCA9IHBmdmYtXHUwMDNlb2xkX21xX3NuYXA7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGZ2Zi1cdTAwM2VuZXRkZXY7XG4rXHR1MTYgbnVtX3R4cSA9IHBmdmYtXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXM7XG4rXHRpbnQgdGMsIHR4cSwgZXJyO1xuK1xuK1x0aWYgKCFzbmFwKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGVyciA9IG90eDJfbXFwcmlvX2FsbG9jX2NhY2hlKHBmdmYsIGZhbHNlKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRtZW1zZXQocGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUsIDAsIG51bV90eHEgKiBzaXplb2YoKnBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlKSk7XG4rXHRtZW1zZXQocGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUsIDAsIG51bV90eHEgKiBzaXplb2YoKnBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlKSk7XG4rXHRwZnZmLVx1MDAzZW1xcHJpby5mbGFncyA9IDA7XG4rXG4rXHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIHNuYXAtXHUwMDNlbnVtX3RjOyB0YysrKSB7XG4rXHRcdHU2NCBtaW5fcmF0ZSA9IHNuYXAtXHUwMDNlbWluX3JhdGVbdGNdO1xuK1x0XHR1NjQgbWF4X3JhdGUgPSBzbmFwLVx1MDAzZW1heF9yYXRlW3RjXTtcbitcbitcdFx0aWYgKG1pbl9yYXRlKVxuK1x0XHRcdHBmdmYtXHUwMDNlbXFwcmlvLmZsYWdzIHw9IFRDX01RUFJJT19GX01JTl9SQVRFO1xuK1x0XHRpZiAobWF4X3JhdGUpXG4rXHRcdFx0cGZ2Zi1cdTAwM2VtcXByaW8uZmxhZ3MgfD0gVENfTVFQUklPX0ZfTUFYX1JBVEU7XG4rXG4rXHRcdGZvciAodHhxID0gc25hcC1cdTAwM2VvZmZzZXRbdGNdO1xuK1x0XHQgICAgIHR4cSBcdTAwM2Mgc25hcC1cdTAwM2VvZmZzZXRbdGNdICsgc25hcC1cdTAwM2Vjb3VudFt0Y107IHR4cSsrKSB7XG4rXHRcdFx0cGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGVbdHhxXSA9IG1pbl9yYXRlO1xuK1x0XHRcdHBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlW3R4cV0gPSBtYXhfcmF0ZTtcbitcdFx0fVxuK1x0fVxuK1xuK1x0bmV0ZGV2X3NldF9udW1fdGMobmV0ZGV2LCBzbmFwLVx1MDAzZW51bV90Yyk7XG4rXHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIHNuYXAtXHUwMDNlbnVtX3RjOyB0YysrKVxuK1x0XHRuZXRkZXZfc2V0X3RjX3F1ZXVlKG5ldGRldiwgdGMsIHNuYXAtXHUwMDNlY291bnRbdGNdLFxuK1x0XHRcdFx0ICAgIHNuYXAtXHUwMDNlb2Zmc2V0W3RjXSk7XG4rXG4rXHRpZiAob3R4Ml9tcXByaW9fbWRxX2FsbG9jYXRlZChwZnZmKSkge1xuK1x0XHRlcnIgPSBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIocGZ2Zik7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdH1cbitcbitcdC8qIFJlYnVpbGQgdGhlIFRYIHNjaGVkdWxlciB2aWEgbmV0ZGV2IHJlc3RhcnQgd2hlbiBydW5uaW5nOyBvdHgyX21xcHJpb191cCgpXG4rXHQgKiBhbG9uZSBpcyBpbnN1ZmZpY2llbnQgYWZ0ZXIgYSBmYWlsZWQgcmVwbGFjZSB0aGF0IGFscmVhZHkgYm91bmNlZCB0aGVcbitcdCAqIGludGVyZmFjZS4gSWYgb3BlbiBmYWlsZWQsIFRYIHNjaGVkdWxlcnMgd2VyZSBmcmVlZDsgZGVmZXIgc2hhcGVyIHJlc3RvcmVcbitcdCAqIHRvIHRoZSBuZXh0IHN1Y2Nlc3NmdWwgbmRvX29wZW4oKSB2aWEgb3R4Ml9tcXByaW9fdXAoKS5cbitcdCAqL1xuK1x0cGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdCA9IHRydWU7XG4rXG4rXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7XG4rXHRcdGVyciA9IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KG5ldGRldiwgdHJ1ZSk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdH0gZWxzZSBpZiAocGZ2Zi1cdTAwM2Vody50eHNjaHFfY250W05JWF9UWFNDSF9MVkxfU01RXSkge1xuK1x0XHRlcnIgPSBvdHgyX21xcHJpb191cChwZnZmKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuK1x0b3R4Ml9tcXByaW9fc25hcF9mcmVlKHBmdmYsIFx1MDAyNnBmdmYtXHUwMDNlY3VyX21xX3NuYXApO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX3NuYXBfZGVzdHJveShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4re1xuK1x0b3R4Ml9tcXByaW9fc25hcF9mcmVlKHBmdmYsIFx1MDAyNnBmdmYtXHUwMDNlY3VyX21xX3NuYXApO1xuK1x0b3R4Ml9tcXByaW9fc25hcF9mcmVlKHBmdmYsIFx1MDAyNnBmdmYtXHUwMDNlb2xkX21xX3NuYXApO1xuK31cbitcbitzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19jbGVhcl9zdyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4re1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtXHUwMDNlbmV0ZGV2O1xuK1xuK1x0cGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdCA9IGZhbHNlO1xuK1x0b3R4Ml9tcXByaW9fY2xlYXJfcmVwbGFjZV9zdGF0ZShwZnZmKTtcbitcdG5ldGRldl9zZXRfbnVtX3RjKG5ldGRldiwgMCk7XG4rXHRvdHgyX21xcHJpb19mcmVlX2NhY2hlKHBmdmYpO1xuK31cbitcbisvKiBUZWFyIGRvd24gbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkOiBjbGVhciBwZXItcXVldWUgc2hhcGVycyxcbisgKiBtcXByaW9fcmF0ZV9saW1pdCwgbmV0ZGV2IFRDIG1hcHBpbmdzLCBhbmQgdGhlIGNhY2hlZCByYXRlcy4gIENhbGxlZCBvblxuKyAqIGV4cGxpY2l0IG1xcHJpbyB0ZWFyZG93biAodGMgcWRpc2MgZGVsKSBhbmQgZXJyb3IgY2xlYW51cCwgbm90IG9uXG4rICogcm91dGluZSBuZXRkZXYgc3RvcC9vcGVuIGN5Y2xlcyB3aGVyZSB0aGUgb2ZmbG9hZCBzdGF5cyBhY3RpdmUuXG4rICovXG4raW50IG90eDJfbXFwcmlvX2Rvd24oc3RydWN0IG90eDJfbmljICpwZnZmKVxuK3tcbitcdGludCBlcnIgPSAwO1xuK1xuK1x0aWYgKCFwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmIChuZXRpZl9ydW5uaW5nKHBmdmYtXHUwMDNlbmV0ZGV2KSBcdTAwMjZcdTAwMjZcbitcdCAgICBvdHgyX21xcHJpb19tZHFfYWxsb2NhdGVkKHBmdmYpKVxuK1x0XHRlcnIgPSBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIocGZ2Zik7XG4rXG4rXHRpZiAoZXJyKSB7XG4rXHRcdG5ldGRldl93YXJuKHBmdmYtXHUwMDNlbmV0ZGV2LFxuK1x0XHRcdCAgICBcIm1xcHJpbzogZmFpbGVkIHRvIGNsZWFyIGhhcmR3YXJlIHNoYXBlcnM6ICVkOyBjbGVhcmluZyBzb2Z0d2FyZSBzdGF0ZVxcblwiLFxuK1x0XHRcdCAgICBlcnIpO1xuK1x0XHRvdHgyX21xcHJpb19jbGVhcl9zdyhwZnZmKTtcbitcdFx0cmV0dXJuIGVycjtcbitcdH1cbitcbitcdG90eDJfbXFwcmlvX2NsZWFyX3N3KHBmdmYpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK2ludCBvdHgyX21xcHJpb191cChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4re1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtXHUwMDNlbmV0ZGV2O1xuK1x0aW50IHR4cSwgZXJyO1xuK1xuK1x0aWYgKCFwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmICghcGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUgfHwgIXBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGZvciAodHhxID0gMDsgdHhxIFx1MDAzYyBwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzOyB0eHErKykge1xuK1x0XHR1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7XG4rXG4rXHRcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5mbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpXG4rXHRcdFx0bWluX3JhdGUgPSBwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZVt0eHFdO1xuK1x0XHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8uZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKVxuK1x0XHRcdG1heF9yYXRlID0gcGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGVbdHhxXTtcbitcbitcdFx0aWYgKCFtaW5fcmF0ZSBcdTAwMjZcdTAwMjYgIW1heF9yYXRlKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRlcnIgPSBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHBmdmYsIHR4cSwgbWluX3JhdGUsXG4rXHRcdFx0XHRcdFx0ICAgbWF4X3JhdGUpO1xuK1x0XHRpZiAoZXJyKSB7XG4rXHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0XHQgICBcIm1xcHJpbzogZmFpbGVkIHRvIHJlc3RvcmUgc2hhcGVyIGZvciB0eHEgJWQ6ICVkXFxuXCIsXG4rXHRcdFx0XHQgICB0eHEsIGVycik7XG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdFx0fVxuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qIFJlc3RhcnQgdGhlIG5ldGRldiB0byByZXByb2dyYW0gdGhlIFRYIHNjaGVkdWxlciBoaWVyYXJjaHkgZm9yIG1xcHJpb1xuKyAqIGJhbmR3aWR0aCBvZmZsb2FkLiAgQm90aCBtcXByaW8gYWRkIGFuZCBkZWxldGUgKHdoZW4gb2ZmbG9hZCB3YXMgYWN0aXZlKVxuKyAqIHRha2UgdGhpcyBwYXRoIHZpYSBuZG9fc3RvcCgpL25kb19vcGVuKCkgc28gVkYtc3BlY2lmaWMgb3BlbiBsb2dpYyAoZS5nLlxuKyAqIExCSyBjYXJyaWVyIG9uKSBydW5zIGNvcnJlY3RseS5cbisgKlxuKyAqIEludGVudGlvbmFsIGJlaGF2aW91cjogdGhpcyBmdWxsIHN0b3Avb3BlbiBjeWNsZSBkcm9wcyBpbi1mbGlnaHQgdHJhZmZpY1xuKyAqIChjYXJyaWVyIG9mZiwgSVJRL05BUEkgdGVhcmRvd24sIHF1ZXVlIGRyYWluKS4gIFRoZSBOSVggVFggc2NoZWR1bGVyIG11c3RcbisgKiBiZSByZWFsbG9jYXRlZCAoZS5nLiBvbmUgU01RIHBlciBub24tUW9TIHF1ZXVlKSBhbmQgY2Fubm90IGJlIHJlcHJvZ3JhbW1lZFxuKyAqIGxpdmUgdG9kYXksIHNvIGEgbmV0ZGV2IGJvdW5jZSBpcyByZXF1aXJlZCBvbiBldmVyeSBtcXByaW8gYWRkLCByZXBsYWNlLFxuKyAqIGRlbGV0ZSwgYW5kIHJvbGxiYWNrLiAgVXNlcnMgc2VlIGEgYnJpZWYgY29ubmVjdGl2aXR5IGJsaXA7IHRoaXMgaXMgbm90IGFcbisgKiBidWcgdG8gXCJmaXhcIiB3aXRob3V0IGltcGxlbWVudGluZyB0aGUgbGl2ZS1yZXByb2dyYW1taW5nIHBhdGggbm90ZWQgYmVsb3cuXG4rICogSWYgb3BlbiBmYWlscywgdGhlIGludGVyZmFjZSBpcyBsZWZ0IGFkbWluaXN0cmF0aXZlbHkgZG93biB3aXRob3V0IGNhbGxpbmdcbisgKiBuZG9fc3RvcCgpIGFnYWluIG9uIHJlc291cmNlcyBhbHJlYWR5IHRvcm4gZG93biBieSB0aGUgb3BlbiBlcnJvciBwYXRoLlxuKyAqXG4rICogUXVpZXNjZSB0aGUgdHJhbnNtaXQgcGF0aCBsaWtlIF9fZGV2X2Nsb3NlX21hbnkoKSBiZWZvcmUgbmRvX3N0b3AoKSBzb1xuKyAqIG90eDJfeG1pdCgpIGNhbm5vdCByYWNlIG90eDJfZnJlZV9xdWV1ZV9tZW0oKS5cbisgKi9cbitzdGF0aWMgaW50IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmF0ZV9saW1pdClcbit7XG4rXHRzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuK1x0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHMgPSBuZXRkZXYtXHUwMDNlbmV0ZGV2X29wcztcbitcdGJvb2wgcnVubmluZyA9IG5ldGlmX3J1bm5pbmcobmV0ZGV2KTtcbitcdGludCBlcnI7XG4rXG4rXHQvKiBUT0RPOiBFeHBsb3JlIGxpdmUgVFggc2NoZWR1bGVyIHJlcHJvZ3JhbW1pbmcgdG8gYXZvaWQgYSBmdWxsXG4rXHQgKiBuZG9fc3RvcCgpL25kb19vcGVuKCkgYm91bmNlIG9uIGV2ZXJ5IG1xcHJpbyBjaGFuZ2UuXG4rXHQgKi9cbitcdG5ldGRldl9pbmZvKG5ldGRldixcbitcdFx0ICAgIFwibXFwcmlvOiByZXN0YXJ0aW5nIGludGVyZmFjZSB0byByZXByb2dyYW0gVFggc2NoZWR1bGVyOyBpbi1mbGlnaHQgdHJhZmZpYyB3aWxsIGJlIGRyb3BwZWRcXG5cIik7XG4rXG4rXHRpZiAocnVubmluZykge1xuK1x0XHRjbGVhcl9iaXQoX19MSU5LX1NUQVRFX1NUQVJULCBcdTAwMjZuZXRkZXYtXHUwMDNlc3RhdGUpO1xuK1x0XHRzbXBfbWJfX2FmdGVyX2F0b21pYygpOyAvKiBDb21taXQgbmV0aWZfcnVubmluZygpLiAqL1xuK1x0fVxuK1x0ZGV2X2RlYWN0aXZhdGUobmV0ZGV2LCB0cnVlKTtcbitcbitcdGVyciA9IG9wcy1cdTAwM2VuZG9fc3RvcChuZXRkZXYpO1xuK1x0aWYgKGVycikge1xuK1x0XHRpZiAocnVubmluZykge1xuK1x0XHRcdHNldF9iaXQoX19MSU5LX1NUQVRFX1NUQVJULCBcdTAwMjZuZXRkZXYtXHUwMDNlc3RhdGUpO1xuK1x0XHRcdGRldl9hY3RpdmF0ZShuZXRkZXYpO1xuK1x0XHR9XG4rXHRcdHJldHVybiBlcnI7XG4rXHR9XG4rXG4rXHQvKiBTZXQgYmVmb3JlIG5kb19vcGVuKCkgc28gb3R4Ml90eHNjaF9hbGxvYygpIHdpZGVucyBTTVEgYWxsb2NhdGlvbi5cbitcdCAqIE9uIHRlYXJkb3duLCBkcm9wIG1xcHJpbyBzb2Z0d2FyZSBzdGF0ZSBzbyBuZG9fb3BlbigpIGRvZXMgbm90XG4rXHQgKiByZS1hcHBseSBiYW5kd2lkdGggbGltaXRzIHZpYSBvdHgyX21xcHJpb191cCgpIGFmdGVyIHRoZSBrZXJuZWxcbitcdCAqIHJlbW92ZWQgdGhlIHFkaXNjLlxuK1x0ICovXG4rXHRpZiAocmF0ZV9saW1pdClcbitcdFx0cGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdCA9IHRydWU7XG4rXHRlbHNlXG4rXHRcdG90eDJfbXFwcmlvX2NsZWFyX3N3KHBmdmYpO1xuK1xuK1x0ZXJyID0gb3BzLVx1MDAzZW5kb19vcGVuKG5ldGRldik7XG4rXHRpZiAoIWVyciBcdTAwMjZcdTAwMjYgcnVubmluZykge1xuK1x0XHRzZXRfYml0KF9fTElOS19TVEFURV9TVEFSVCwgXHUwMDI2bmV0ZGV2LVx1MDAzZXN0YXRlKTtcbitcdFx0ZGV2X2FjdGl2YXRlKG5ldGRldik7XG4rXHR9IGVsc2UgaWYgKGVycikge1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHQgICBcIkZhaWxlZCB0byByZXN0YXJ0IGRldmljZSBhZnRlciBtcXByaW8gY2hhbmdlOiAlZFxcblwiLFxuK1x0XHRcdCAgIGVycik7XG4rXHRcdC8qIG5kb19vcGVuKCkgYWxyZWFkeSBmcmVlZCB0aGUgVFggc2NoZWR1bGVycyBvbiBmYWlsdXJlIHdoaWxlXG4rXHRcdCAqIG5ldGlmX3J1bm5pbmcoKSBtYXkgc3RpbGwgYmUgdHJ1ZTsgZHJvcCBtcXByaW8gc29mdHdhcmUgc3RhdGVcbitcdFx0ICogb25seSBpbnN0ZWFkIG9mIHNlbmRpbmcgc2hhcGVyIGNsZWFycyB0byBmcmVlZCBxdWV1ZXMuXG4rXHRcdCAqL1xuK1x0XHRvdHgyX21xcHJpb19jbGVhcl9zdyhwZnZmKTtcbitcdFx0LyogbmRvX29wZW4oKSByb2xscyBiYWNrIG9uIGZhaWx1cmU7IG1hcmsgdGhlIGludGVyZmFjZSBkb3duIHNvXG4rXHRcdCAqIG5ldGlmX2Nsb3NlKCkgZG9lcyBub3QgaW52b2tlIG5kb19zdG9wKCkgb24gZnJlZWQgTkFQSS9xdWV1ZVxuK1x0XHQgKiBzdGF0ZS4gQ2FsbGVyIGhvbGRzIFJUTkw7IGRldl9jbG9zZSgpIHdvdWxkIGRlYWRsb2NrLlxuK1x0XHQgKi9cbitcdFx0b3R4Ml9zZXRfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfSU5URl9ET1dOKTtcbitcdFx0LyogdmlzaWJsZSB0byBvdHgyX3N0b3AoKSBvbiBvdGhlciBjcHVzICovXG4rXHRcdHNtcF93bWIoKTtcbitcdFx0bmV0aWZfY2xvc2UobmV0ZGV2KTtcbitcdH1cbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fdmFsaWRhdGVfdGNfcmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuK1x0XHRcdFx0XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXG4rXHRcdFx0XHRcdHU2NCByYXRlLCB1MzIgcWNvdW50LCBpbnQgdGMsXG4rXHRcdFx0XHRcdGNvbnN0IGNoYXIgKm5hbWUpXG4re1xuK1x0aWYgKCFyYXRlKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmIChxY291bnQgXHUwMDNjPSAxKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdC8qIFRPRE86IG1xcHJpbyBtaW5fcmF0ZS9tYXhfcmF0ZSBhcmUgcGVyIHRyYWZmaWMgY2xhc3MsIGJ1dCBiYW5kd2lkdGhcbitcdCAqIG9mZmxvYWQgc2hhcGVzIG9uIHBlci1xdWV1ZSBNRFEgbm9kZXMgcGFyZW50ZWQgdW5kZXIgYSBzaW5nbGUgVEw0LlxuK1x0ICogV2l0aG91dCBwZXItVEMgVEw0IHNoYXBlcnMgdGhlIGRyaXZlciBjYW5ub3QgaG9ub3IgVEMtbGV2ZWwgbGltaXRzXG4rXHQgKiBmb3IgYSB0cmFmZmljIGNsYXNzIHRoYXQgc3BhbnMgbXVsdGlwbGUgcXVldWVzIHdpdGhvdXQgZWl0aGVyXG4rXHQgKiBkaXZpZGluZyB0aGUgcmF0ZSBhY3Jvc3MgcXVldWVzICh1QVBJIG1pc21hdGNoKSBvciBleGNlZWRpbmcgdGhlIFRDXG4rXHQgKiBjYXAgd2hlbiBldmVyeSBtZW1iZXIgcXVldWUgaXMgYWN0aXZlLiBSZWplY3QgdW50aWwgcGVyLVRDIFRMNFxuK1x0ICogc2hhcGluZyBjYW4gYmUgaW1wbGVtZW50ZWQgd2l0aG91dCBhbGxvY2F0aW5nIGFkZGl0aW9uYWwgVEw0IG5vZGVzXG4rXHQgKiBiZXlvbmQgdGhlIGV4aXN0aW5nIGhpZXJhcmNoeS5cbitcdCAqL1xuK1x0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdCAgIFwibXFwcmlvOiAlcyByYXRlIGZvciB0YyAlZCBub3Qgc3VwcG9ydGVkIHdpdGggJXUgcXVldWVzXFxuXCIsXG4rXHRcdCAgIG5hbWUsIHRjLCBxY291bnQpO1xuK1x0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4rXHRcdFx0ICAgICAgIFwibXFwcmlvOiAlcyByYXRlIGZvciB0YyAlZCBub3Qgc3VwcG9ydGVkIHdpdGggJXUgcXVldWVzXCIsXG4rXHRcdFx0ICAgICAgIG5hbWUsIHRjLCBxY291bnQpO1xuK1x0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK31cbitcbitzdGF0aWMgaW50IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3R4cXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbitcdFx0XHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQpXG4re1xuK1x0c3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcdHUxNiBudW1fdHhxID0gcGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcbitcdGludCB0YywgdHhxO1xuK1xuK1x0aWYgKHFvcHQtXHUwMDNlbnVtX3RjIFx1MDAzZSBudW1fdHhxKSB7XG4rXHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcIk51bWJlciBvZiBUQ3MgKCV1KSBleGNlZWRzIGh3IHF1ZXVlcyAldVxcblwiLFxuK1x0XHRcdCAgIHFvcHQtXHUwMDNlbnVtX3RjLCBudW1fdHhxKTtcbitcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4rXHRcdFx0XHQgICAgICAgXCJOdW1iZXIgb2YgVENzICgldSkgZXhjZWVkcyBodyBxdWV1ZXMgJXVcIixcbitcdFx0XHRcdCAgICAgICBxb3B0LVx1MDAzZW51bV90YywgbnVtX3R4cSk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0aWYgKG51bV90eHEgXHUwMDNlIE1BWF9UWFNDSFFfUEVSX0ZVTkMpIHtcbitcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0ICAgXCJOdW1iZXIgb2YgcXVldWVzICgldSkgZXhjZWVkcyBtYXggc2NoZWR1bGVyIHF1ZXVlcyAldVxcblwiLFxuK1x0XHRcdCAgIG51bV90eHEsIE1BWF9UWFNDSFFfUEVSX0ZVTkMpO1xuK1x0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcbitcdFx0XHRcdCAgICAgICBcIk51bWJlciBvZiBxdWV1ZXMgKCV1KSBleGNlZWRzIG1heCBzY2hlZHVsZXIgcXVldWVzICV1XCIsXG4rXHRcdFx0XHQgICAgICAgbnVtX3R4cSwgTUFYX1RYU0NIUV9QRVJfRlVOQyk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0Zm9yICh0YyA9IDA7IHRjIFx1MDAzYyBxb3B0LVx1MDAzZW51bV90YzsgdGMrKykge1xuK1x0XHR1MzIgcWNvdW50ID0gcW9wdC1cdTAwM2Vjb3VudFt0Y107XG4rXG4rXHRcdGZvciAodHhxID0gcW9wdC1cdTAwM2VvZmZzZXRbdGNdO1xuK1x0XHQgICAgIHR4cSBcdTAwM2MgcW9wdC1cdTAwM2VvZmZzZXRbdGNdICsgcWNvdW50OyB0eHErKykge1xuK1x0XHRcdGlmICh0eHEgXHUwMDNlPSBudW1fdHhxKSB7XG4rXHRcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHRcdFx0ICAgXCJtcXByaW86IHR4cSAlZCBleGNlZWRzIG9mZmxvYWQgcXVldWUgY291bnQgJXVcXG5cIixcbitcdFx0XHRcdFx0ICAgdHhxLCBudW1fdHhxKTtcbitcdFx0XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxuK1x0XHRcdFx0XHRcdCAgICAgICBcIm1xcHJpbzogdHhxICVkIGV4Y2VlZHMgb2ZmbG9hZCBxdWV1ZSBjb3VudCAldVwiLFxuK1x0XHRcdFx0XHRcdCAgICAgICB0eHEsIG51bV90eHEpO1xuK1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdFx0fVxuK1x0XHR9XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGJvb2wgb3R4Ml9tcXByaW9fcmF0ZV92YWxpZCh1NjQgcmF0ZV9ieXRlc19wcylcbit7XG4rXHR1NjQgbWJwcztcbitcbitcdGlmICghcmF0ZV9ieXRlc19wcylcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHRpZiAocmF0ZV9ieXRlc19wcyBcdTAwM2MgT1RYMl9NUVBSSU9fTUlOX1JBVEVfQllURVNfUFMpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmIChyYXRlX2J5dGVzX3BzIFx1MDAzZSBPVFgyX01RUFJJT19NQVhfUkFURV9CWVRFU19QUylcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0aWYgKHJhdGVfYnl0ZXNfcHMgXHUwMDNlIGRpdl91NjQoVTY0X01BWCwgOCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdG1icHMgPSBvdHgyX2NvbnZlcnRfcmF0ZShyYXRlX2J5dGVzX3BzKTtcbitcdHJldHVybiBpbG9nMihtYnBzIC8gMikgXHUwMDNjPSBNQVhfUkFURV9FWFBPTkVOVDtcbit9XG4rXG4rc3RhdGljIGludCBvdHgyX3RlYXJkb3duX3RjX21xcHJpbyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4rXHRcdFx0XHQgICBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKVxuK3tcbitcdHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9IFx1MDAyNm1xcHJpby1cdTAwM2Vxb3B0O1xuK1x0Ym9vbCBoYWRfbXFwcmlvID0gcGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdDtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVx1MDAzZW5ldGRldjtcbitcdGJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKG5ldGRldik7XG4rXHRpbnQgZXJyO1xuK1xuK1x0cW9wdC1cdTAwM2VodyA9IDA7XG4rXG4rXHQvKiB0YyBxZGlzYyByZXBsYWNlIHJ1bnMgc2V0dXAgb24gdGhlIG5ldyBtcXByaW8gYmVmb3JlIGRlc3Ryb3lpbmcgdGhlXG4rXHQgKiBvbGQgb25lLiByZXBsYWNlX3NldHVwX2RvbmUgYW5kIFRDX1JPT1RfR1JBRlQgZGlzdGluZ3Vpc2ggc3RhbGVcbitcdCAqIG9sZC1pbnN0YW5jZSB0ZWFyZG93biBmcm9tIGdyYWZ0IGZhaWx1cmUgYWZ0ZXIgc2V0dXAuXG4rXHQgKi9cbitcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5yZXBsYWNlX3NldHVwX2RvbmUgXHUwMDI2XHUwMDI2IHBmdmYtXHUwMDNlY3VyX21xX3NuYXApIHtcbitcdFx0ZXJyID0gMDtcbitcdFx0aWYgKHBmdmYtXHUwMDNlbXFwcmlvLnJlcGxhY2VfZ3JhZnRfZG9uZSlcbitcdFx0XHRvdHgyX21xcHJpb19zbmFwX2NvbW1pdChwZnZmKTtcbitcdFx0ZWxzZVxuK1x0XHRcdGVyciA9IG90eDJfbXFwcmlvX3Jlc3RvcmVfb2xkKHBmdmYpO1xuK1x0XHRvdHgyX21xcHJpb19jbGVhcl9yZXBsYWNlX3N0YXRlKHBmdmYpO1xuK1x0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuK1x0LyogU2tpcCB0aGUgbmV0ZGV2IHJlc3RhcnQgd2hlbiBtcXByaW8gb2ZmbG9hZCB3YXMgbm90IGFjdGl2ZS4gKi9cbitcdGlmICghaGFkX21xcHJpbylcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAoaWZfdXApIHtcbitcdFx0aW50IGRvd25fZXJyLCBlcnI7XG4rXG4rXHRcdGRvd25fZXJyID0gb3R4Ml9tcXByaW9fZG93bihwZnZmKTtcbitcdFx0ZXJyID0gb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYobmV0ZGV2LCBmYWxzZSk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdFx0cmV0dXJuIGRvd25fZXJyO1xuK1x0fVxuK1xuK1x0LyogbmRvX3N0b3AoKSBhbHJlYWR5IGZyZWVkIHRoZSBUWCBzY2hlZHVsZXIgVEwgbm9kZXM7IGRyb3Agc29mdHdhcmVcbitcdCAqIHN0YXRlIG9ubHkuXG4rXHQgKi9cbitcdG90eDJfbXFwcmlvX2NsZWFyX3N3KHBmdmYpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19tcXByaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbitcdFx0XHRcdHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXG4re1xuK1x0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrID0gbXFwcmlvLVx1MDAzZWV4dGFjaztcbitcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcdTAwMjZtcXByaW8tXHUwMDNlcW9wdDtcbitcdGJvb2wgcmVwbGFjaW5nID0gcGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdDtcbitcdGJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKG5ldGRldik7XG4rXHRpbnQgdGMsIHR4cSwgZXJyLCBpO1xuK1xuK1x0aWYgKCFxb3B0LVx1MDAzZWh3KVxuK1x0XHRyZXR1cm4gb3R4Ml90ZWFyZG93bl90Y19tcXByaW8ocGZ2ZiwgbXFwcmlvKTtcbitcbitcdGlmICghaWZfdXApIHtcbitcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwibXFwcmlvOiBzZXR1cCByZXF1aXJlcyBpbnRlcmZhY2UgVVBcXG5cIik7XG4rXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwibXFwcmlvOiBzZXR1cCByZXF1aXJlcyBpbnRlcmZhY2UgVVBcIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdGlmIChtcXByaW8tXHUwMDNlc2hhcGVyICE9IFRDX01RUFJJT19TSEFQRVJfQldfUkFURSkge1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCJVbnN1cHBvcnRlZCBtcXByaW8gc2hhcGVyICUjeFxcblwiLCBtcXByaW8tXHUwMDNlc2hhcGVyKTtcbitcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssIFwiVW5zdXBwb3J0ZWQgbXFwcmlvIHNoYXBlciAlI3hcIixcbitcdFx0XHRcdCAgICAgICBtcXByaW8tXHUwMDNlc2hhcGVyKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0aWYgKCF0ZXN0X2JpdChRT1NfQ0lSX1BJUl9TVVBQT1JULCBcdTAwMjZwZnZmLVx1MDAzZWh3LmNhcF9mbGFnKSkge1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHQgICBcIm1xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgcmVxdWlyZXMgQ0lSK1BJUiBzdXBwb3J0XFxuXCIpO1xuK1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuK1x0XHRcdFx0ICAgXCJtcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIHJlcXVpcmVzIENJUitQSVIgc3VwcG9ydFwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0aWYgKGlzX290eDJfc2RwX3JlcChwZnZmLVx1MDAzZXBkZXYpKSB7XG4rXHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcIm1xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgbm90IHN1cHBvcnRlZCBvbiBTRFAgcmVwXFxuXCIpO1xuK1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuK1x0XHRcdFx0ICAgXCJtcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIG5vdCBzdXBwb3J0ZWQgb24gU0RQIHJlcFwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0aWYgKHBmdmYtXHUwMDNlcGZjX2VuKSB7XG4rXHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuK1x0XHRcdCAgIFwibXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgUEZDIGlzIGVuYWJsZWRcXG5cIik7XG4rXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4rXHRcdFx0XHQgICBcIm1xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFBGQyBpcyBlbmFibGVkXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4rXHRpZiAocGZ2Zi1cdTAwM2V4ZHBfcHJvZykge1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHQgICBcIm1xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFhEUCBpcyBhY3RpdmVcXG5cIik7XG4rXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4rXHRcdFx0XHQgICBcIm1xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFhEUCBpcyBhY3RpdmVcIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdGlmICghbGlzdF9lbXB0eShcdTAwMjZwZnZmLVx1MDAzZXFvcy5xb3NfdHJlZSkpIHtcbitcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0ICAgXCJtcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBIVEIgaXMgYWN0aXZlXFxuXCIpO1xuK1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuK1x0XHRcdFx0ICAgXCJtcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBIVEIgaXMgYWN0aXZlXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4rXHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIHFvcHQtXHUwMDNlbnVtX3RjOyB0YysrKSB7XG4rXHRcdHU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDtcbitcdFx0dTMyIHFjb3VudCA9IHFvcHQtXHUwMDNlY291bnRbdGNdO1xuK1xuK1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcbitcdFx0XHRtaW5fcmF0ZSA9IG1xcHJpby1cdTAwM2VtaW5fcmF0ZVt0Y107XG4rXHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKVxuK1x0XHRcdG1heF9yYXRlID0gbXFwcmlvLVx1MDAzZW1heF9yYXRlW3RjXTtcbitcbitcdFx0aWYgKG1pbl9yYXRlIFx1MDAyNlx1MDAyNiBtYXhfcmF0ZSBcdTAwMjZcdTAwMjYgbWluX3JhdGUgXHUwMDNlIG1heF9yYXRlKSB7XG4rXHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0XHQgICBcIm1pbl9yYXRlICVsbHUgZXhjZWVkcyBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZFxcblwiLFxuK1x0XHRcdFx0ICAgbWluX3JhdGUsIG1heF9yYXRlLCB0Yyk7XG4rXHRcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4rXHRcdFx0XHRcdCAgICAgICBcIm1pbl9yYXRlICVsbHUgZXhjZWVkcyBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZFwiLFxuK1x0XHRcdFx0XHQgICAgICAgbWluX3JhdGUsIG1heF9yYXRlLCB0Yyk7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcbitcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpIHtcbitcdFx0XHRlcnIgPSBvdHgyX21xcHJpb192YWxpZGF0ZV90Y19yYXRlKG5ldGRldiwgZXh0YWNrLCBtaW5fcmF0ZSxcbitcdFx0XHRcdFx0XHRcdCAgIHFjb3VudCwgdGMsIFwibWluXCIpO1xuK1x0XHRcdGlmIChlcnIpXG4rXHRcdFx0XHRyZXR1cm4gZXJyO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKSB7XG4rXHRcdFx0ZXJyID0gb3R4Ml9tcXByaW9fdmFsaWRhdGVfdGNfcmF0ZShuZXRkZXYsIGV4dGFjaywgbWF4X3JhdGUsXG4rXHRcdFx0XHRcdFx0XHQgICBxY291bnQsIHRjLCBcIm1heFwiKTtcbitcdFx0XHRpZiAoZXJyKVxuK1x0XHRcdFx0cmV0dXJuIGVycjtcbitcdFx0fVxuK1xuK1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICFvdHgyX21xcHJpb19yYXRlX3ZhbGlkKG1pbl9yYXRlKSkge1xuK1x0XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuK1x0XHRcdFx0ICAgXCJtcXByaW86IG1pbl9yYXRlICVsbHUgZm9yIHRjICVkIGlzIG91dHNpZGUgaGFyZHdhcmUgbGltaXRzXFxuXCIsXG4rXHRcdFx0XHQgICBtaW5fcmF0ZSwgdGMpO1xuK1x0XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxuK1x0XHRcdFx0XHQgICAgICAgXCJtcXByaW86IG1pbl9yYXRlICVsbHUgZm9yIHRjICVkIGlzIG91dHNpZGUgaGFyZHdhcmUgbGltaXRzXCIsXG4rXHRcdFx0XHRcdCAgICAgICBtaW5fcmF0ZSwgdGMpO1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIW90eDJfbXFwcmlvX3JhdGVfdmFsaWQobWF4X3JhdGUpKSB7XG4rXHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0XHQgICBcIm1xcHJpbzogbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcXG5cIixcbitcdFx0XHRcdCAgIG1heF9yYXRlLCB0Yyk7XG4rXHRcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4rXHRcdFx0XHRcdCAgICAgICBcIm1xcHJpbzogbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcIixcbitcdFx0XHRcdFx0ICAgICAgIG1heF9yYXRlLCB0Yyk7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcdH1cbitcbitcdGVyciA9IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3R4cXMobmV0ZGV2LCBleHRhY2ssIHFvcHQpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdGVyciA9IG90eDJfbXFwcmlvX3N0YWdlX2N1cihwZnZmLCBtcXByaW8pO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdGVyciA9IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KHBmdmYtXHUwMDNlbmV0ZGV2LCB0cnVlKTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdGVyciA9IG90eDJfbXFwcmlvX2FsbG9jX2NhY2hlKHBmdmYsIHJlcGxhY2luZyk7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHQvKiBvdHgyX21xcHJpb191cCgpIG1heSBoYXZlIHJlc3RvcmVkIHRoZSBwcmV2aW91cyBjb25maWd1cmF0aW9uIGR1cmluZ1xuK1x0ICogdGhlIHJlc3RhcnQgYWJvdmUuIENsZWFyIGV2ZXJ5IE1EUSBzaGFwZXIgYmVmb3JlIGFwcGx5aW5nIHRoZSBuZXdcbitcdCAqIG1hcHBpbmcgc28gcXVldWVzIGRyb3BwZWQgZnJvbSB0aGUgVEMgbGF5b3V0IGRvIG5vdCBrZWVwIHN0YWxlXG4rXHQgKiBsaW1pdHMgaW4gaGFyZHdhcmUuXG4rXHQgKi9cbitcdGlmIChvdHgyX21xcHJpb19tZHFfYWxsb2NhdGVkKHBmdmYpKSB7XG4rXHRcdGVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRnb3RvIGNsZWFudXA7XG4rXHR9XG4rXG4rXHRwZnZmLVx1MDAzZW1xcHJpby5mbGFncyA9IG1xcHJpby1cdTAwM2VmbGFncztcbitcbitcdGZvciAodGMgPSAwOyB0YyBcdTAwM2MgcW9wdC1cdTAwM2VudW1fdGM7IHRjKyspIHtcbitcdFx0dTY0IG1pbl9yYXRlID0gMCwgbWF4X3JhdGUgPSAwO1xuK1x0XHR1MzIgcWNvdW50ID0gcW9wdC1cdTAwM2Vjb3VudFt0Y107XG4rXG4rXHRcdC8qIFJhdGVzIG9taXR0ZWQgZnJvbSB0YyBtcXByaW8gYXJlIHBhc3NlZCBhcyB6ZXJvIGFuZCBib3RoIE1EUVxuK1x0XHQgKiBzaGFwZXIgcmVnaXN0ZXJzIGFyZSBwcm9ncmFtbWVkOyBzZWVcbitcdFx0ICogb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcigpLiBNdWx0aS1xdWV1ZSBUQ3Mgd2l0aCByYXRlc1xuK1x0XHQgKiBhcmUgcmVqZWN0ZWQgYWJvdmUuXG4rXHRcdCAqL1xuK1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcbitcdFx0XHRtaW5fcmF0ZSA9IG1xcHJpby1cdTAwM2VtaW5fcmF0ZVt0Y107XG4rXHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKVxuK1x0XHRcdG1heF9yYXRlID0gbXFwcmlvLVx1MDAzZW1heF9yYXRlW3RjXTtcbitcbitcdFx0Zm9yICh0eHEgPSBxb3B0LVx1MDAzZW9mZnNldFt0Y107XG4rXHRcdCAgICAgdHhxIFx1MDAzYyBxb3B0LVx1MDAzZW9mZnNldFt0Y10gKyBxY291bnQ7IHR4cSsrKSB7XG4rXHRcdFx0bmV0ZGV2X2RiZyhuZXRkZXYsXG4rXHRcdFx0XHQgICBcIm1xcHJpbzogdGMgJWQgdHhxICVkIG1pbl9yYXRlICVsbHUgbWF4X3JhdGUgJWxsdVxcblwiLFxuK1x0XHRcdFx0ICAgdGMsIHR4cSwgbWluX3JhdGUsIG1heF9yYXRlKTtcbitcbitcdFx0XHRwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZVt0eHFdID0gbWluX3JhdGU7XG4rXHRcdFx0cGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGVbdHhxXSA9IG1heF9yYXRlO1xuK1xuK1x0XHRcdGVyciA9IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIocGZ2ZiwgdHhxLFxuK1x0XHRcdFx0XHRcdFx0ICAgbWluX3JhdGUsIG1heF9yYXRlKTtcbitcdFx0XHRpZiAoZXJyKVxuK1x0XHRcdFx0Z290byBjbGVhbnVwO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRuZXRkZXZfc2V0X251bV90YyhuZXRkZXYsIHBmdmYtXHUwMDNlY3VyX21xX3NuYXAtXHUwMDNlbnVtX3RjKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBmdmYtXHUwMDNlY3VyX21xX3NuYXAtXHUwMDNlbnVtX3RjOyBpKyspXG4rXHRcdG5ldGRldl9zZXRfdGNfcXVldWUobmV0ZGV2LCBpLCBwZnZmLVx1MDAzZWN1cl9tcV9zbmFwLVx1MDAzZWNvdW50W2ldLFxuK1x0XHRcdFx0ICAgIHFvcHQtXHUwMDNlb2Zmc2V0W2ldKTtcbitcbitcdHFvcHQtXHUwMDNlaHcgPSBUQ19NUVBSSU9fSFdfT0ZGTE9BRF9UQ1M7XG4rXG4rXHRpZiAocmVwbGFjaW5nKSB7XG4rXHRcdHBmdmYtXHUwMDNlbXFwcmlvLnJlcGxhY2Vfc2V0dXBfZG9uZSA9IHRydWU7XG4rXHRcdHBmdmYtXHUwMDNlbXFwcmlvLnJlcGxhY2VfZ3JhZnRfZG9uZSA9IGZhbHNlO1xuK1x0fSBlbHNlIHtcbitcdFx0b3R4Ml9tcXByaW9fc25hcF9jb21taXQocGZ2Zik7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbitcbitjbGVhbnVwOlxuK1x0cW9wdC1cdTAwM2VodyA9IDA7XG4rXHRpZiAocmVwbGFjaW5nKSB7XG4rXHRcdGludCByZXN0b3JlX2VyciA9IG90eDJfbXFwcmlvX3Jlc3RvcmVfb2xkKHBmdmYpO1xuK1xuK1x0XHRvdHgyX21xcHJpb19jbGVhcl9yZXBsYWNlX3N0YXRlKHBmdmYpO1xuK1x0XHRpZiAocmVzdG9yZV9lcnIpIHtcbitcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHRcdCAgIFwibXFwcmlvOiByZXBsYWNlIGZhaWxlZCBhbmQgcHJpb3IgY29uZmlndXJhdGlvbiByb2xsYmFjayBmYWlsZWQ6ICVkXFxuXCIsXG4rXHRcdFx0XHQgICByZXN0b3JlX2Vycik7XG4rXHRcdFx0aWYgKGV4dGFjaylcbitcdFx0XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxuK1x0XHRcdFx0XHRcdCAgICAgICBcIm1xcHJpbzogcmVwbGFjZSBmYWlsZWQgYW5kIHByaW9yIGNvbmZpZ3VyYXRpb24gcm9sbGJhY2sgZmFpbGVkOiAlZFwiLFxuK1x0XHRcdFx0XHRcdCAgICAgICByZXN0b3JlX2Vycik7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0XHQgICBcIm1xcHJpbzogcmVwbGFjZSBmYWlsZWQ7IHByaW9yIGNvbmZpZ3VyYXRpb24gcmVzdG9yZWRcXG5cIik7XG4rXHRcdFx0aWYgKGV4dGFjaylcbitcdFx0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4rXHRcdFx0XHRcdFx0ICAgXCJtcXByaW86IHJlcGxhY2UgZmFpbGVkOyBwcmlvciBjb25maWd1cmF0aW9uIHJlc3RvcmVkXCIpO1xuK1x0XHR9XG4rXHRcdHJldHVybiBlcnIgPyBlcnIgOiAtRUlPO1xuK1x0fVxuK1x0b3R4Ml90ZWFyZG93bl90Y19tcXByaW8ocGZ2ZiwgbXFwcmlvKTtcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19yb290KHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbitcdFx0XHQgICAgICBzdHJ1Y3QgdGNfcm9vdF9xb3B0X29mZmxvYWQgKnJvb3QpXG4re1xuK1x0c3dpdGNoIChyb290LVx1MDAzZWNvbW1hbmQpIHtcbitcdGNhc2UgVENfUk9PVF9HUkFGVDpcbitcdFx0aWYgKHBmdmYtXHUwMDNlbXFwcmlvLnJlcGxhY2Vfc2V0dXBfZG9uZSlcbitcdFx0XHRwZnZmLVx1MDAzZW1xcHJpby5yZXBsYWNlX2dyYWZ0X2RvbmUgPSB0cnVlO1xuK1x0XHRyZXR1cm4gMDtcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbit9XG4rXG4rc3RhdGljIGludCBvdHgyX3NldHVwX3RjX3F1ZXJ5X2NhcHModm9pZCAqdHlwZV9kYXRhKVxuK3tcbitcdHN0cnVjdCB0Y19xdWVyeV9jYXBzX2Jhc2UgKmJhc2UgPSB0eXBlX2RhdGE7XG4rXHRzdHJ1Y3QgdGNfbXFwcmlvX2NhcHMgKmNhcHM7XG4rXG4rXHRpZiAoYmFzZS1cdTAwM2V0eXBlICE9IFRDX1NFVFVQX1FESVNDX01RUFJJTylcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0Y2FwcyA9IGJhc2UtXHUwMDNlY2FwcztcbitcdGNhcHMtXHUwMDNldmFsaWRhdGVfcXVldWVfY291bnRzID0gdHJ1ZTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbiBpbnQgb3R4Ml9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSxcbiBcdFx0ICB2b2lkICp0eXBlX2RhdGEpXG4ge1xuIFx0c3dpdGNoICh0eXBlKSB7XG4rXHRjYXNlIFRDX1FVRVJZX0NBUFM6XG4rXHRcdHJldHVybiBvdHgyX3NldHVwX3RjX3F1ZXJ5X2NhcHModHlwZV9kYXRhKTtcbiBcdGNhc2UgVENfU0VUVVBfQkxPQ0s6XG4gXHRcdHJldHVybiBvdHgyX3NldHVwX3RjX2Jsb2NrKG5ldGRldiwgdHlwZV9kYXRhKTtcbiBcdGNhc2UgVENfU0VUVVBfUURJU0NfSFRCOlxuIFx0XHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19odGIobmV0ZGV2LCB0eXBlX2RhdGEpO1xuK1x0Y2FzZSBUQ19TRVRVUF9RRElTQ19NUVBSSU86XG4rXHRcdHJldHVybiBvdHgyX3NldHVwX3RjX21xcHJpbyhuZXRkZXYsIHR5cGVfZGF0YSk7XG4rXHRjYXNlIFRDX1NFVFVQX1JPT1RfUURJU0M6XG4rXHRcdHJldHVybiBvdHgyX3NldHVwX3RjX3Jvb3QobmV0ZGV2X3ByaXYobmV0ZGV2KSwgdHlwZV9kYXRhKTtcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcdH1cbkBAIC0xNjMyLDYgKzIzNzcsNyBAQCBFWFBPUlRfU1lNQk9MKG90eDJfaW5pdF90Yyk7XG4gdm9pZCBvdHgyX3NodXRkb3duX3RjKHN0cnVjdCBvdHgyX25pYyAqbmljKVxuIHtcbiBcdG90eDJfZGVzdHJveV90Y19mbG93X2xpc3QobmljKTtcbitcdG90eDJfbXFwcmlvX3NuYXBfZGVzdHJveShuaWMpO1xuIH1cbiBFWFBPUlRfU1lNQk9MKG90eDJfc2h1dGRvd25fdGMpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3R4cnguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3R4cnguY1xuaW5kZXggOGQyZDYwN2JjOTJmOS4uZjY1YmE0NGRiNjBiNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3R4cnguY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdHhyeC5jXG5AQCAtMTcxLDcgKzE3MSw3IEBAIHN0YXRpYyB2b2lkIG90eDJfc2V0X3J4dHN0YW1wKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbiBcdHU2NCB0aW1lc3RhbXAsIHRzbnM7XG4gXHRpbnQgZXJyO1xuIFxuLVx0aWYgKCEocGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1JYX1RTVEFNUF9FTkFCTEVEKSlcbitcdGlmICghb3R4Ml90ZXN0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1JYX1RTVEFNUF9FTkFCTEVEKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0dGltZXN0YW1wID0gcGZ2Zi1cdTAwM2VwdHAtXHUwMDNlY29udmVydF9yeF9wdHBfdHN0bXAoKih1NjQgKilkYXRhKTtcbkBAIC0zNzQsMTMgKzM3NCwxMyBAQCBzdGF0aWMgdm9pZCBvdHgyX3Jjdl9wa3RfaGFuZGxlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4gXHR9XG4gXHRvdHgyX3NldF9yeGhhc2gocGZ2ZiwgY3FlLCBza2IpO1xuIFxuLVx0aWYgKCEocGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1JFUF9NT0RFX0VOQUJMRUQpKSB7XG4rXHRpZiAoIW90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19SRVBfTU9ERV9FTkFCTEVEKSkge1xuIFx0XHRza2JfcmVjb3JkX3J4X3F1ZXVlKHNrYiwgY3EtXHUwMDNlY3FfaWR4KTtcbiBcdFx0aWYgKHBmdmYtXHUwMDNlbmV0ZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX1JYQ1NVTSlcbiBcdFx0XHRza2ItXHUwMDNlaXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7XG4gXHR9XG4gXG4tXHRpZiAocGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1RDX01BUktfRU5BQkxFRClcbitcdGlmIChvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfVENfTUFSS19FTkFCTEVEKSlcbiBcdFx0c2tiLVx1MDAzZW1hcmsgPSBwYXJzZS1cdTAwM2VtYXRjaF9pZDtcbiBcbiBcdHNrYl9tYXJrX2Zvcl9yZWN5Y2xlKHNrYik7XG5AQCAtNTEzLDcgKzUxMyw3IEBAIHN0YXRpYyBpbnQgb3R4Ml90eF9uYXBpX2hhbmRsZXIoc3RydWN0IG90eDJfbmljICpwZnZmLFxuIFx0XHQgICAgICgodTY0KWNxLVx1MDAzZWNxX2lkeCBcdTAwM2NcdTAwM2MgMzIpIHwgcHJvY2Vzc2VkX2NxZSk7XG4gXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX1JWVV9FU1dJVENIKVxuLVx0aWYgKHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19SRVBfTU9ERV9FTkFCTEVEKVxuK1x0aWYgKG90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19SRVBfTU9ERV9FTkFCTEVEKSlcbiBcdFx0bmRldiA9IHBmdmYtXHUwMDNlcmVwc1txaWR4XS1cdTAwM2VuZXRkZXY7XG4gXHRlbHNlXG4gI2VuZGlmXG5AQCAtNTI2LDcgKzUyNiw3IEBAIHN0YXRpYyBpbnQgb3R4Ml90eF9uYXBpX2hhbmRsZXIoc3RydWN0IG90eDJfbmljICpwZnZmLFxuIFxuIFx0XHRpZiAocWlkeCBcdTAwM2U9IHBmdmYtXHUwMDNlaHcudHhfcXVldWVzKVxuIFx0XHRcdHFpZHggLT0gcGZ2Zi1cdTAwM2Vody54ZHBfcXVldWVzO1xuLVx0XHRpZiAocGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1JFUF9NT0RFX0VOQUJMRUQpXG4rXHRcdGlmIChvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfUkVQX01PREVfRU5BQkxFRCkpXG4gXHRcdFx0cWlkeCA9IDA7XG4gXHRcdHR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUobmRldiwgcWlkeCk7XG4gXHRcdG5ldGRldl90eF9jb21wbGV0ZWRfcXVldWUodHhxLCB0eF9wa3RzLCB0eF9ieXRlcyk7XG5AQCAtNTk5LDExICs1OTksMTEgQEAgaW50IG90eDJfbmFwaV9oYW5kbGVyKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldClcbiBcbiBcdGlmICh3b3JrZG9uZSBcdTAwM2MgYnVkZ2V0IFx1MDAyNlx1MDAyNiBuYXBpX2NvbXBsZXRlX2RvbmUobmFwaSwgd29ya2RvbmUpKSB7XG4gXHRcdC8qIElmIGludGVyZmFjZSBpcyBnb2luZyBkb3duLCBkb24ndCByZS1lbmFibGUgSVJRICovXG4tXHRcdGlmIChwZnZmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfSU5URl9ET1dOKVxuK1x0XHRpZiAob3R4Ml90ZXN0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX0lOVEZfRE9XTikpXG4gXHRcdFx0cmV0dXJuIHdvcmtkb25lO1xuIFxuIFx0XHQvKiBBZGp1c3QgaXJxIGNvYWxlc2UgdXNpbmcgbmV0X2RpbSAqL1xuLVx0XHRpZiAocGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX0FEUFRWX0lOVF9DT0FMX0VOQUJMRUQpXG4rXHRcdGlmIChvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfQURQVFZfSU5UX0NPQUxfRU5BQkxFRCkpXG4gXHRcdFx0b3R4Ml9hZGp1c3RfYWRhcHRpdmVfY29hbGVzZShwZnZmLCBjcV9wb2xsKTtcbiBcbiBcdFx0aWYgKGxpa2VseShjcSkpXG5AQCAtMTEzNyw3ICsxMTM3LDcgQEAgc3RhdGljIHZvaWQgb3R4Ml9zZXRfdHh0c3RhbXAoc3RydWN0IG90eDJfbmljICpwZnZmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFxuIFx0aWYgKHVubGlrZWx5KCFza2Jfc2hpbmZvKHNrYiktXHUwMDNlZ3NvX3NpemUgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAgKHNrYl9zaGluZm8oc2tiKS1cdTAwM2V0eF9mbGFncyBcdTAwMjYgU0tCVFhfSFdfVFNUQU1QKSkpIHtcbi1cdFx0aWYgKHVubGlrZWx5KHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19QVFBfT05FU1RFUF9TWU5DIFx1MDAyNlx1MDAyNlxuK1x0XHRpZiAodW5saWtlbHkob3R4Ml90ZXN0X2ZsYWcocGZ2ZiwgT1RYMl9GTEFHX1BUUF9PTkVTVEVQX1NZTkMpIFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgICAgb3R4Ml9wdHBfaXNfc3luYyhza2IsIFx1MDAyNnB0cF9vZmZzZXQsIFx1MDAyNnVkcF9jc3VtX2NydCkpKSB7XG4gXHRcdFx0b3JpZ2luX3RzdGFtcCA9IChzdHJ1Y3QgcHRwdjJfdHN0YW1wICopXG4gXHRcdFx0XHRcdCgodTggKilza2ItXHUwMDNlZGF0YSArIHB0cF9vZmZzZXQgK1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml92Zi5jXG5pbmRleCBmNzc2NWUxOWQ3OGE5Li41Zjc5MTUyMzFjYTNhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdmYuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdmYuY1xuQEAgLTYxMCw3ICs2MTAsNyBAQCBzdGF0aWMgaW50IG90eDJ2Zl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuIFx0dmYtXHUwMDNlZGV2ID0gZGV2O1xuIFx0dmYtXHUwMDNlaW9tbXVfZG9tYWluID0gaW9tbXVfZ2V0X2RvbWFpbl9mb3JfZGV2KGRldik7XG4gXG4tXHR2Zi1cdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfSU5URl9ET1dOO1xuK1x0b3R4Ml9zZXRfZmxhZyh2ZiwgT1RYMl9GTEFHX0lOVEZfRE9XTik7XG4gXHRodyA9IFx1MDAyNnZmLVx1MDAzZWh3O1xuIFx0aHctXHUwMDNlcGRldiA9IHZmLVx1MDAzZXBkZXY7XG4gXHRody1cdTAwM2VyeF9xdWV1ZXMgPSBxY291bnQ7XG5AQCAtODI0LDEwICs4MjQsMTAgQEAgc3RhdGljIHZvaWQgb3R4MnZmX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdHZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiBcbiBcdC8qIERpc2FibGUgODAyLjN4IHBhdXNlIGZyYW1lcyAqL1xuLVx0aWYgKHZmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfUlhfUEFVU0VfRU5BQkxFRCB8fFxuLVx0ICAgICh2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1RYX1BBVVNFX0VOQUJMRUQpKSB7XG4tXHRcdHZmLVx1MDAzZWZsYWdzIFx1MDAyNj0gfk9UWDJfRkxBR19SWF9QQVVTRV9FTkFCTEVEO1xuLVx0XHR2Zi1cdTAwM2VmbGFncyBcdTAwMjY9IH5PVFgyX0ZMQUdfVFhfUEFVU0VfRU5BQkxFRDtcbitcdGlmIChvdHgyX3Rlc3RfZmxhZyh2ZiwgT1RYMl9GTEFHX1JYX1BBVVNFX0VOQUJMRUQpIHx8XG4rXHQgICAgb3R4Ml90ZXN0X2ZsYWcodmYsIE9UWDJfRkxBR19UWF9QQVVTRV9FTkFCTEVEKSkge1xuK1x0XHRvdHgyX2NsZWFyX2ZsYWcodmYsIE9UWDJfRkxBR19SWF9QQVVTRV9FTkFCTEVEKTtcbitcdFx0b3R4Ml9jbGVhcl9mbGFnKHZmLCBPVFgyX0ZMQUdfVFhfUEFVU0VfRU5BQkxFRCk7XG4gXHRcdG90eDJfY29uZmlnX3BhdXNlX2ZybSh2Zik7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfeHNrLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml94c2suY1xuaW5kZXggMGU4YTZhNjQ4NmM0YS4uNzgwODU4OGEwMjM0YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3hzay5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml94c2suY1xuQEAgLTk2LDcgKzk2LDcgQEAgc3RhdGljIHZvaWQgb3R4Ml9jbGVhbl91cF9ycShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBxaWR4KVxuIFx0dTY0IGlvdmE7XG4gXG4gXHQvKiBJZiB0aGUgRE9XTiBmbGFnIGlzIHNldCBTUXMgYXJlIGFscmVhZHkgZnJlZWQgKi9cbi1cdGlmIChwZnZmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfSU5URl9ET1dOKVxuK1x0aWYgKG90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19JTlRGX0RPV04pKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRjcSA9IFx1MDAyNnFzZXQtXHUwMDNlY3FbcWlkeF07XG5AQCAtMTcyLDcgKzE3Miw3IEBAIGludCBvdHgyX3hza193YWtldXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHF1ZXVlX2lkLCB1MzIgZmxhZ3MpXG4gXHRzdHJ1Y3Qgb3R4Ml9jcV9wb2xsICpjcV9wb2xsID0gTlVMTDtcbiBcdHN0cnVjdCBvdHgyX3FzZXQgKnFzZXQgPSBcdTAwMjZwZi1cdTAwM2Vxc2V0O1xuIFxuLVx0aWYgKHBmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfSU5URl9ET1dOKVxuK1x0aWYgKG90eDJfdGVzdF9mbGFnKHBmLCBPVFgyX0ZMQUdfSU5URl9ET1dOKSlcbiBcdFx0cmV0dXJuIC1FTkVURE9XTjtcbiBcbiBcdGlmIChxdWV1ZV9pZCBcdTAwM2U9IHBmLVx1MDAzZWh3LnJ4X3F1ZXVlcyB8fCBxdWV1ZV9pZCBcdTAwM2U9IHBmLVx1MDAzZWh3LnR4X3F1ZXVlcylcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmNcbmluZGV4IGYxNjBiMTYxOGVmYTIuLjllZjU1YTZkYjUwYjcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuY1xuQEAgLTExOCw2ICsxMTgsOSBAQCBzdGF0aWMgdm9pZCBvdHgyX2NvbmZpZ19zY2hlZF9zaGFwaW5nKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbiBcdC8qIGNvbmZpZ3VyZSBQSVIgKi9cbiBcdG1heHJhdGUgPSAobm9kZS1cdTAwM2VyYXRlIFx1MDAzZSBub2RlLVx1MDAzZWNlaWwpID8gbm9kZS1cdTAwM2VyYXRlIDogbm9kZS1cdTAwM2VjZWlsO1xuIFxuK1x0LyogNjU1MzYgaXMgdGhlIGtlcm5lbC1zaWRlIGRlZmF1bHQgYnVyc3Qgd2hlbiBIVEIgZG9lcyBub3Qgc3VwcGx5IGFuXG4rXHQgKiBleHBsaWNpdCB2YWx1ZSwgbm90IHRoZSBOSVggaGFyZHdhcmUgbWF4aW11bSAoQ04xMEtfTUFYX0JVUlNUX1NJWkUpLlxuK1x0ICovXG4gXHRjZmctXHUwMDNlcmVndmFsWypudW1fcmVnc10gPVxuIFx0XHRvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwocGZ2ZiwgbWF4cmF0ZSwgNjU1MzYpO1xuIFx0KCpudW1fcmVncykrKztcbkBAIC0xMDg4LDYgKzEwOTEsMTQgQEAgc3RhdGljIGludCBvdHgyX3Fvc19yb290X2FkZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHUxNiBodGJfbWFqX2lkLCB1MTYgaHRiX2RlZmNcbiBcdFx0ICAgXCJUQ19IVEJfQ1JFQVRFOiBoYW5kbGU9MHgleCBkZWZjbHM9MHgleFxcblwiLFxuIFx0XHQgICBodGJfbWFqX2lkLCBodGJfZGVmY2xzKTtcbiBcbitcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KSB7XG4rXHRcdG5ldGRldl9lcnIocGZ2Zi1cdTAwM2VuZXRkZXYsXG4rXHRcdFx0ICAgXCJIVEI6IGNhbm5vdCBlbmFibGUgd2hpbGUgbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGlzIGFjdGl2ZVxcblwiKTtcbitcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbitcdFx0XHRcdCAgIFwiSFRCOiBjYW5ub3QgZW5hYmxlIHdoaWxlIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBpcyBhY3RpdmVcIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbiBcdHJvb3QgPSBvdHgyX3Fvc19hbGxvY19yb290KHBmdmYpO1xuIFx0aWYgKElTX0VSUihyb290KSkge1xuIFx0XHRlcnIgPSBQVFJfRVJSKHJvb3QpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3Nfc3EuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3Nfc3EuY1xuaW5kZXggMjg3MmFkYWJjODMwNS4uNWYwOWUyOTYwMTQ0MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3Nfc3EuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvc19zcS5jXG5AQCAtMjM4LDcgKzIzOCw3IEBAIGludCBvdHgyX3Fvc19lbmFibGVfc3Eoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgcWlkeClcbiBcdHN0cnVjdCBvdHgyX2h3ICpodyA9IFx1MDAyNnBmdmYtXHUwMDNlaHc7XG4gXHRpbnQgcG9vbF9pZCwgc3FfaWR4LCBlcnI7XG4gXG4tXHRpZiAocGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX0lOVEZfRE9XTilcbitcdGlmIChvdHgyX3Rlc3RfZmxhZyhwZnZmLCBPVFgyX0ZMQUdfSU5URl9ET1dOKSlcbiBcdFx0cmV0dXJuIC1FUEVSTTtcbiBcbiBcdHNxX2lkeCA9IGh3LVx1MDAzZW5vbl9xb3NfcXVldWVzICsgcWlkeDtcbkBAIC0yODgsNyArMjg4LDcgQEAgdm9pZCBvdHgyX3Fvc19kaXNhYmxlX3NxKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IHFpZHgpXG4gXHRzcV9pZHggPSBody1cdTAwM2Vub25fcW9zX3F1ZXVlcyArIHFpZHg7XG4gXG4gXHQvKiBJZiB0aGUgRE9XTiBmbGFnIGlzIHNldCBTUXMgYXJlIGFscmVhZHkgZnJlZWQgKi9cbi1cdGlmIChwZnZmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfSU5URl9ET1dOKVxuK1x0aWYgKG90eDJfdGVzdF9mbGFnKHBmdmYsIE9UWDJfRkxBR19JTlRGX0RPV04pKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRzcSA9IFx1MDAyNnBmdmYtXHUwMDNlcXNldC5zcVtzcV9pZHhdO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuY1xuaW5kZXggMGY1ZDU2NDJkM2Y3YS4uOGE4YzAwODhmZDIwNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3JlcC5jXG5AQCAtOTMsOSArOTMsOSBAQCBzdGF0aWMgaW50IHJ2dV9yZXBfbWNhbV9mbG93X2luaXQoc3RydWN0IHJlcF9kZXYgKnJlcClcbiBcdHJlcC1cdTAwM2VmbG93X2NmZy1cdTAwM2VtYXhfZmxvd3MgPSBhbGxvY2F0ZWQ7XG4gXG4gXHRpZiAoYWxsb2NhdGVkKSB7XG4tXHRcdHJlcC1cdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfTUNBTV9FTlRSSUVTX0FMTE9DO1xuLVx0XHRyZXAtXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX05UVVBMRV9TVVBQT1JUO1xuLVx0XHRyZXAtXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX1RDX0ZMT1dFUl9TVVBQT1JUO1xuK1x0XHRzZXRfYml0KE9UWDJfRkxBR19NQ0FNX0VOVFJJRVNfQUxMT0MsIFx1MDAyNnJlcC1cdTAwM2VmbGFncyk7XG4rXHRcdHNldF9iaXQoT1RYMl9GTEFHX05UVVBMRV9TVVBQT1JULCBcdTAwMjZyZXAtXHUwMDNlZmxhZ3MpO1xuK1x0XHRzZXRfYml0KE9UWDJfRkxBR19UQ19GTE9XRVJfU1VQUE9SVCwgXHUwMDI2cmVwLVx1MDAzZWZsYWdzKTtcbiBcdH1cbiBcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNnJlcC1cdTAwM2VmbG93X2NmZy1cdTAwM2VmbG93X2xpc3QpO1xuQEAgLTEwOSwxNCArMTA5LDE0IEBAIHN0YXRpYyBpbnQgcnZ1X3JlcF9zZXR1cF90Y19jYihlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSxcbiBcdHN0cnVjdCByZXBfZGV2ICpyZXAgPSBjYl9wcml2O1xuIFx0c3RydWN0IG90eDJfbmljICpwcml2ID0gcmVwLVx1MDAzZW1kZXY7XG4gXG4tXHRpZiAoIShyZXAtXHUwMDNlZmxhZ3MgXHUwMDI2IFJWVV9SRVBfVkZfSU5JVElBTElaRUQpKVxuK1x0aWYgKCF0ZXN0X2JpdChPVFgyX1JFUF9WRl9JTklUSUFMSVpFRCwgXHUwMDI2cmVwLVx1MDAzZWZsYWdzKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRpZiAoIShyZXAtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19UQ19GTE9XRVJfU1VQUE9SVCkpXG4rXHRpZiAoIXRlc3RfYml0KE9UWDJfRkxBR19UQ19GTE9XRVJfU1VQUE9SVCwgXHUwMDI2cmVwLVx1MDAzZWZsYWdzKSlcbiBcdFx0cnZ1X3JlcF9tY2FtX2Zsb3dfaW5pdChyZXApO1xuIFxuIFx0cHJpdi1cdTAwM2VuZXRkZXYgPSByZXAtXHUwMDNlbmV0ZGV2O1xuLVx0cHJpdi1cdTAwM2VmbGFncyA9IHJlcC1cdTAwM2VmbGFncztcbitcdG90eDJfc3luY19mbGFnc19mcm9tX3JlcChwcml2LCBcdTAwMjZyZXAtXHUwMDNlZmxhZ3MpO1xuIFx0cHJpdi1cdTAwM2VwY2lmdW5jID0gcmVwLVx1MDAzZXBjaWZ1bmM7XG4gXHRwcml2LVx1MDAzZWZsb3dfY2ZnID0gcmVwLVx1MDAzZWZsb3dfY2ZnO1xuIFxuQEAgLTMwMyw5ICszMDMsOSBAQCBzdGF0aWMgdm9pZCBydnVfcmVwX3N0YXRlX2V2dF9oYW5kbGVyKHN0cnVjdCBvdHgyX25pYyAqcHJpdixcbiBcdHJlcF9pZCA9IHJ2dV9yZXBfZ2V0X3JlcGlkKHByaXYsIGluZm8tXHUwMDNlcGNpZnVuYyk7XG4gXHRyZXAgPSBwcml2LVx1MDAzZXJlcHNbcmVwX2lkXTtcbiBcdGlmIChpbmZvLVx1MDAzZWV2dF9kYXRhLnZmX3N0YXRlKVxuLVx0XHRyZXAtXHUwMDNlZmxhZ3MgfD0gUlZVX1JFUF9WRl9JTklUSUFMSVpFRDtcbitcdFx0c2V0X2JpdChPVFgyX1JFUF9WRl9JTklUSUFMSVpFRCwgXHUwMDI2cmVwLVx1MDAzZWZsYWdzKTtcbiBcdGVsc2Vcbi1cdFx0cmVwLVx1MDAzZWZsYWdzIFx1MDAyNj0gflJWVV9SRVBfVkZfSU5JVElBTElaRUQ7XG4rXHRcdGNsZWFyX2JpdChPVFgyX1JFUF9WRl9JTklUSUFMSVpFRCwgXHUwMDI2cmVwLVx1MDAzZWZsYWdzKTtcbiB9XG4gXG4gaW50IHJ2dV9ldmVudF91cF9ub3RpZnkoc3RydWN0IG90eDJfbmljICpwZiwgc3RydWN0IHJlcF9ldmVudCAqaW5mbylcbkBAIC0zODIsNyArMzgyLDcgQEAgc3RhdGljIHZvaWQgcnZ1X3JlcF9nZXRfc3RhdHM2NChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIHtcbiBcdHN0cnVjdCByZXBfZGV2ICpyZXAgPSBuZXRkZXZfcHJpdihkZXYpO1xuIFxuLVx0aWYgKCEocmVwLVx1MDAzZWZsYWdzIFx1MDAyNiBSVlVfUkVQX1ZGX0lOSVRJQUxJWkVEKSlcbitcdGlmICghdGVzdF9iaXQoT1RYMl9SRVBfVkZfSU5JVElBTElaRUQsIFx1MDAyNnJlcC1cdTAwM2VmbGFncykpXG4gXHRcdHJldHVybjtcbiBcbiBcdHN0YXRzLVx1MDAzZXJ4X3BhY2tldHMgPSByZXAtXHUwMDNlc3RhdHMucnhfZnJhbWVzO1xuQEAgLTQ1Myw3ICs0NTMsNyBAQCBzdGF0aWMgaW50IHJ2dV9yZXBfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0c3RydWN0IG90eDJfbmljICpwcml2ID0gcmVwLVx1MDAzZW1kZXY7XG4gXHRzdHJ1Y3QgcmVwX2V2ZW50IGV2dCA9IHswfTtcbiBcbi1cdGlmICghKHJlcC1cdTAwM2VmbGFncyBcdTAwMjYgUlZVX1JFUF9WRl9JTklUSUFMSVpFRCkpXG4rXHRpZiAoIXRlc3RfYml0KE9UWDJfUkVQX1ZGX0lOSVRJQUxJWkVELCBcdTAwMjZyZXAtXHUwMDNlZmxhZ3MpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdG5ldGlmX2NhcnJpZXJfb24oZGV2KTtcbkBAIC00NzIsNyArNDcyLDcgQEAgc3RhdGljIGludCBydnVfcmVwX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdHN0cnVjdCBvdHgyX25pYyAqcHJpdiA9IHJlcC1cdTAwM2VtZGV2O1xuIFx0c3RydWN0IHJlcF9ldmVudCBldnQgPSB7MH07XG4gXG4tXHRpZiAoIShyZXAtXHUwMDNlZmxhZ3MgXHUwMDI2IFJWVV9SRVBfVkZfSU5JVElBTElaRUQpKVxuK1x0aWYgKCF0ZXN0X2JpdChPVFgyX1JFUF9WRl9JTklUSUFMSVpFRCwgXHUwMDI2cmVwLVx1MDAzZWZsYWdzKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRuZXRpZl9jYXJyaWVyX29mZihkZXYpO1xuQEAgLTU0Nyw3ICs1NDcsNyBAQCBzdGF0aWMgaW50IHJ2dV9yZXBfbmFwaV9pbml0KHN0cnVjdCBvdHgyX25pYyAqcHJpdixcbiBcdFx0b3R4Ml93cml0ZTY0KHByaXYsIE5JWF9MRl9DSU5UWF9JTlQocWlkeCksIEJJVF9VTEwoMCkpO1xuIFx0XHRvdHgyX3dyaXRlNjQocHJpdiwgTklYX0xGX0NJTlRYX0VOQV9XMVMocWlkeCksIEJJVF9VTEwoMCkpO1xuIFx0fVxuLVx0cHJpdi1cdTAwM2VmbGFncyBcdTAwMjY9IH5PVFgyX0ZMQUdfSU5URl9ET1dOO1xuK1x0b3R4Ml9jbGVhcl9mbGFnKHByaXYsIE9UWDJfRkxBR19JTlRGX0RPV04pO1xuIFx0cmV0dXJuIDA7XG4gXG4gZXJyX2ZyZWVfY2ludHM6XG5AQCAtNjMyLDcgKzYzMiw3IEBAIHZvaWQgcnZ1X3JlcF9kZXN0cm95KHN0cnVjdCBvdHgyX25pYyAqcHJpdilcbiBcdGludCByZXBfaWQ7XG4gXG4gXHRydnVfZXN3aXRjaF9jb25maWcocHJpdiwgZmFsc2UpO1xuLVx0cHJpdi1cdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfSU5URl9ET1dOO1xuK1x0b3R4Ml9zZXRfZmxhZyhwcml2LCBPVFgyX0ZMQUdfSU5URl9ET1dOKTtcbiBcdHJ2dV9yZXBfZnJlZV9jcV9yc3JjKHByaXYpO1xuIFx0Zm9yIChyZXBfaWQgPSAwOyByZXBfaWQgXHUwMDNjIHByaXYtXHUwMDNlcmVwX2NudDsgcmVwX2lkKyspIHtcbiBcdFx0cmVwID0gcHJpdi1cdTAwM2VyZXBzW3JlcF9pZF07XG5AQCAtODAxLDggKzgwMSw4IEBAIHN0YXRpYyBpbnQgcnZ1X3JlcF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuIFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIHByaXYpO1xuIFx0cHJpdi1cdTAwM2VwZGV2ID0gcGRldjtcbiBcdHByaXYtXHUwMDNlZGV2ID0gZGV2O1xuLVx0cHJpdi1cdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfSU5URl9ET1dOO1xuLVx0cHJpdi1cdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfUkVQX01PREVfRU5BQkxFRDtcbitcdG90eDJfc2V0X2ZsYWcocHJpdiwgT1RYMl9GTEFHX0lOVEZfRE9XTik7XG4rXHRvdHgyX3NldF9mbGFnKHByaXYsIE9UWDJfRkxBR19SRVBfTU9ERV9FTkFCTEVEKTtcbiBcbiBcdGh3ID0gXHUwMDI2cHJpdi1cdTAwM2VodztcbiBcdGh3LVx1MDAzZXBkZXYgPSBwZGV2O1xuQEAgLTg0NSw3ICs4NDUsNyBAQCBzdGF0aWMgdm9pZCBydnVfcmVwX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdHN0cnVjdCBvdHgyX25pYyAqcHJpdiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbiBcbiBcdG90eDJfdW5yZWdpc3Rlcl9kbChwcml2KTtcbi1cdGlmICghKHByaXYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19JTlRGX0RPV04pKVxuK1x0aWYgKCFvdHgyX3Rlc3RfZmxhZyhwcml2LCBPVFgyX0ZMQUdfSU5URl9ET1dOKSlcbiBcdFx0cnZ1X3JlcF9kZXN0cm95KHByaXYpO1xuIFx0b3R4Ml9kZXRhY2hfcmVzb3VyY2VzKFx1MDAyNnByaXYtXHUwMDNlbWJveCk7XG4gXHRpZiAocHJpdi1cdTAwM2Vody5sbXRfaW5mbylcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmhcbmluZGV4IDViYzllMmM3ZDgwMGIuLjQ1NzA3YzQzNGQ4OWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuaFxuQEAgLTM3LDggKzM3LDcgQEAgc3RydWN0IHJlcF9kZXYge1xuIFx0c3RydWN0IGRlbGF5ZWRfd29yayBzdGF0c193cms7XG4gXHRzdHJ1Y3QgZGV2bGlua19wb3J0IGRsX3BvcnQ7XG4gXHRzdHJ1Y3Qgb3R4Ml9mbG93X2NvbmZpZ1x0KmZsb3dfY2ZnO1xuLSNkZWZpbmUgUlZVX1JFUF9WRl9JTklUSUFMSVpFRFx0XHRCSVRfVUxMKDApXG4tXHR1NjQgZmxhZ3M7XG4rXHR1bnNpZ25lZCBsb25nXHRcdGZsYWdzO1xuIFx0dTE2IHJlcF9pZDtcbiBcdHUxNiBwY2lmdW5jO1xuIFx0dTggbWFjW0VUSF9BTEVOXTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjQ2OjUzLjY2MDI1MzIwN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU2Mjg4ODIxMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBEZWNpc2lvbiBmb3IgdGhlIE9jdGVvblRYMiBOSUMgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyBmb2N1c2VkIG9uIHdoZXRoZXIgdGhpcyBwYXRjaCBpcyBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLCBhbmQgSSBuZWVkIHRvIGFwcGx5IHRoZSBlc3RhYmxpc2hlZCBndWlkZWxpbmVzLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzLiBUaGUgcGF0Y2ggdG91Y2hlcyBhIGxvdCBvZiBmaWxlcyB3aXRoaW4gdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIG5ldHdvcmtpbmcgZHJpdmVyLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIG1vZGlmeSBjb2RlIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyYCBkaXJlY3RvcnkuIFRoaXMgaXMgaW50ZXJlc3RpbmcsIGFzIHRoaXMgbGlrZWx5IGlzIGEgZHJpdmVyIGZvciBhIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSwgYSBTbWFydE5JQyBvciBwb3RlbnRpYWxseSBhIFNvQy5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgaGFyZHdhcmUgaXMgcmVhbGlzdGljYWxseSByZWFjaGFibGUgZm9yIGZ1enppbmcsIHdoaWNoIG1lYW5zIHRoZSBoYXJkd2FyZSBtdXN0IGJlIGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgZGlyZWN0bHkgYWNjZXNzaWJsZS4gVGhlIGd1aWRlbGluZXMsIHNwZWNpZmljYWxseSBTZWN0aW9uIDIsIGFyZSB2ZXJ5IGNsZWFyIG9uIHRoaXMuIFRoZSBcInN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZVwiIGNsYXVzZSBqdW1wcyBvdXQsIGFuZCBJJ20gbG9va2luZyB0byBjaGVjayB0byBjb25maXJtIHdoZXRoZXIgT2N0ZW9uVFgyIGZhbGxzIGludG8gdGhhdCBjYXRlZ29yeS4gVGhlIHJ1bGUgc3BlY2lmaWNhbGx5IGNhbGxzIG91dCBTbWFydE5JQ3MgYW5kIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzIGFzIHBvdGVudGlhbCBleGNsdXNpb25zLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgbmF0dXJlIG9mIHRoZSBPY3Rlb25UWDIuIElzIGl0IGEgcHJvcHJpZXRhcnkgQVNJQywgYSBOSUMgdGhhdCByZXF1aXJlcyBhIHNwZWNpZmljIGhhcmR3YXJlIHNldHVwLCBvciBjYW4gaXQgYmUgc2ltdWxhdGVkIG9yIGFjY2Vzc2VkIGluIGEgd2F5IHRoYXQgYWxpZ25zIHdpdGggdGhlIGZ1enppbmcgaW5mcmFzdHJ1Y3R1cmU/IFRoaXMgaXMgY3JpdGljYWwuXG5cbkknbGwgbmVlZCB0byByZXNlYXJjaCB3aGF0IHRoZSBgb2N0ZW9udHgyYCByZWZlcnMgdG8sIGFuZCB3aGF0IHRoZSBoYXJkd2FyZSBlbnRhaWxzLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcsIG9yIHNlYXJjaCBmb3IgaW5mb3JtYXRpb24gdG8gdW5kZXJzdGFuZCB3aGF0IGl0IGlzIGFuZCBob3cgYWNjZXNzaWJsZSBpdCBpcy4gSWYgaXQncyBzb21ldGhpbmcgbGlrZSBhbiBtbHhzdywgb3IgaW9uaWMsIEknbGwgbmVlZCB0byBzdHJvbmdseSBjb25zaWRlciB3aGV0aGVyIHRoaXMgaXMgd29ydGggcHVyc3VpbmcsIG9yIGlmIGl0IGlzIHVuZmVhc2libGUgZ2l2ZW4gdGhhdCBJIGRvbid0IGhhdmUgZGlyZWN0IGFjY2VzcyB0byB0aGF0IGhhcmR3YXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTk5NCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjQ2OjU5LjI4OTEzNzg2MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjIyMDQ4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgT0NURU9OVFgyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctNS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjY6Y29uZmlnIE9DVEVPTlRYMl9NQk9YXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy03LVxcdHRyaXN0YXRlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy04LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc6OTpjb25maWcgT0NURU9OVFgyX0FGXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0xMC1cXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCBPY3Rlb25UWDIgUlZVIEFkbWluIEZ1bmN0aW9uIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc9MjI9Y29uZmlnIE5EQ19ESVNfRFlOQU1JQ19DQUNISU5HXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTMwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc6MzE6Y29uZmlnIE9DVEVPTlRYMl9QRlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMzItXFx0dHJpc3RhdGUgXFxcIk1hcnZlbGwgT2N0ZW9uVFgyIE5JQyBQaHlzaWNhbCBGdW5jdGlvbiBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTQ0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc6NDU6Y29uZmlnIE9DVEVPTlRYMl9WRlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctNDYtXFx0dHJpc3RhdGUgXFxcIk1hcnZlbGwgT2N0ZW9uVFgyIE5JQyBWaXJ0dWFsIEZ1bmN0aW9uIGRyaXZlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTI6NDY6NTkuMzc1MzYyOTkxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjk4MjcwOTM2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBLY29uZmlnIGZpbGU6XG5cbioqRGl2aW5nIGludG8gdGhlIE1hcnZlbGwgT2N0ZW9uIFRYMiBFdGhlcm5ldCBEcml2ZXIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBhYm91dCB0byBkaXNzZWN0IGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBNYXJ2ZWxsIE9jdGVvbiBUWDIgRXRoZXJuZXQgZHJpdmVyIGFyZSBkZWZpbmVkLCB3aGljaCBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBpdCBjYW4gYmUgdGFpbG9yZWQgZm9yIGRpZmZlcmVudCBzeXN0ZW1zIGFuZCB1c2UgY2FzZXMuIEkgZXhwZWN0IHRvIGZpbmQgZGVwZW5kZW5jaWVzIG9uIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwsIGhhcmR3YXJlLXNwZWNpZmljIHNldHRpbmdzLCBhbmQgdGhlIHVzdWFsIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGxvZ2ljLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9ja3MgLSB0aGUgZmVhdHVyZXMgdGhhdCBjYW4gYmUgZW5hYmxlZCBvciBkaXNhYmxlZCwgYW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhvc2UgY2hvaWNlcy4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRlcGVuZGVuY2llcyDigJMgd2hhdCBvdGhlciBkcml2ZXJzIG9yIGtlcm5lbCBmZWF0dXJlcyBhcmUgcmVxdWlyZWQgZm9yIHZhcmlvdXMgT2N0ZW9uIFRYMiBFdGhlcm5ldCBmdW5jdGlvbmFsaXRpZXMuIEFyZSB0aGVyZSBzcGVjaWZpYyBib2FyZCBjb25maWd1cmF0aW9ucyBvciBQSFkgb3B0aW9ucyBJIG5lZWQgdG8gY29uc2lkZXI/IEknbGwgYWxzbyBiZSBzY2FubmluZyBmb3IgYW55IHVudXN1YWwgb3IgdmVuZG9yLXNwZWNpZmljIG9wdGlvbnMgdGhhdCBtaWdodCBpbmRpY2F0ZSB1bmlxdWUgTWFydmVsbCBvcHRpbWl6YXRpb25zIG9yIGhhcmR3YXJlIGZlYXR1cmVzLiBNeSBnb2FsIGlzIHRvIGdyYXNwIHRoZSBjb25maWd1cmFiaWxpdHkgb2YgdGhpcyBkcml2ZXIgYW5kIGhvdyBpdCBpbnRlcmZhY2VzIHdpdGggdGhlIG92ZXJhbGwgbmV0d29ya2luZyBzdGFjay4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCB0aGUga2V5IGNvbmZpZ3VyYWJsZSBlbGVtZW50cyBhcmUgYW5kIHRoZWlyIHBvdGVudGlhbCBpbXBhY3RzIG9uIHBlcmZvcm1hbmNlLCBwb3dlciBjb25zdW1wdGlvbiwgYW5kIHN1cHBvcnRlZCBoYXJkd2FyZS4gRmluYWxseSwgSSdsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgYWJvdXQgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb24gcGl0ZmFsbHMgb3IgY29tbW9uIGlzc3VlcyB0aGF0IG1pZ2h0IGFyaXNlIGR1cmluZyBkZXBsb3ltZW50LiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZCFcblxuXG4iLCJJbnB1dFRva2VucyI6Mzc1ODIsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjo0NzowMi4zNTgwNzQ4MDZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDY5ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBNYXJ2ZWxsIFJWVSBOZXR3b3JrIGRyaXZlcnMgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgT0NURU9OVFgyX01CT1hcXG4gICA3OlxcdFxcdHRyaXN0YXRlXFxuICAgODpcXHRcXG4gICA5OlxcdGNvbmZpZyBPQ1RFT05UWDJfQUZcXG4gIDEwOlxcdFxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIE9jdGVvblRYMiBSVlUgQWRtaW4gRnVuY3Rpb24gZHJpdmVyXFxcIlxcbiAgMTE6XFx0XFx0c2VsZWN0IE9DVEVPTlRYMl9NQk9YXFxuICAxMjpcXHRcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG4gIDEzOlxcdFxcdGRlcGVuZHMgb24gKDY0QklUIFxcdTAwMjZcXHUwMDI2IENPTVBJTEVfVEVTVCkgfHwgQVJNNjRcXG4gIDE0OlxcdFxcdGRlcGVuZHMgb24gUENJXFxuICAxNTpcXHRcXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXFxuICAxNjpcXHRcXHRoZWxwXFxuICAxNzpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIE1hcnZlbGwncyBPY3Rlb25UWDIgUmVzb3VyY2UgVmlydHVhbGl6YXRpb25cXG4gIDE4OlxcdFxcdCAgVW5pdCdzIGFkbWluIGZ1bmN0aW9uIG1hbmFnZXIgd2hpY2ggbWFuYWdlcyBhbGwgUlZVIEhXIHJlc291cmNlc1xcbiAgMTk6XFx0XFx0ICBhbmQgcHJvdmlkZXMgYSBtZWRpdW0gdG8gb3RoZXIgUEYvVkZzIHRvIGNvbmZpZ3VyZSBIVy4gU2hvdWxkIGJlXFxuICAyMDpcXHRcXHQgIGVuYWJsZWQgZm9yIG90aGVyIFJWVSBkZXZpY2UgZHJpdmVycyB0byB3b3JrLlxcbiAgMjE6XFx0XFxuICAyMjpcXHRjb25maWcgTkRDX0RJU19EWU5BTUlDX0NBQ0hJTkdcXG4gIDIzOlxcdFxcdGJvb2wgXFxcIkRpc2FibGUgY2FjaGluZyBvZiBkeW5hbWljIGVudHJpZXMgaW4gTkRDXFxcIlxcbiAgMjQ6XFx0XFx0ZGVwZW5kcyBvbiBPQ1RFT05UWDJfQUZcXG4gIDI1OlxcdFxcdGRlZmF1bHQgblxcbiAgMjY6XFx0XFx0aGVscFxcbiAgMjc6XFx0XFx0ICBUaGlzIGNvbmZpZyBvcHRpb24gZGlzYWJsZXMgY2FjaGluZyBvZiBkeW5hbWljIGVudHJpZXMgc3VjaCBhcyBOSVggU1FFc1xcbiAgMjg6XFx0XFx0ICAsIE5QQSBzdGFjayBwYWdlcyBldGMgaW4gTkRDLiBBbHNvIGxvY2tzIGRvd24gTklYIFNRL0NRL1JRL1JTUyBhbmRcXG4gIDI5OlxcdFxcdCAgTlBBIEF1cmEvUG9vbCBjb250ZXh0cy5cXG4gIDMwOlxcdFxcbiAgMzE6XFx0Y29uZmlnIE9DVEVPTlRYMl9QRlxcbiAgMzI6XFx0XFx0dHJpc3RhdGUgXFxcIk1hcnZlbGwgT2N0ZW9uVFgyIE5JQyBQaHlzaWNhbCBGdW5jdGlvbiBkcml2ZXJcXFwiXFxuICAzMzpcXHRcXHRzZWxlY3QgT0NURU9OVFgyX01CT1hcXG4gIDM0OlxcdFxcdHNlbGVjdCBORVRfREVWTElOS1xcbiAgMzU6XFx0XFx0c2VsZWN0IFBBR0VfUE9PTFxcbiAgMzY6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfQUVTIGlmIE1BQ1NFQ1xcbiAgMzc6XFx0XFx0ZGVwZW5kcyBvbiAoNjRCSVQgXFx1MDAyNlxcdTAwMjYgQ09NUElMRV9URVNUKSB8fCBBUk02NFxcbiAgMzg6XFx0XFx0c2VsZWN0IERJTUxJQlxcbiAgMzk6XFx0XFx0ZGVwZW5kcyBvbiBQQ0lcXG4gIDQwOlxcdFxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcXG4gIDQxOlxcdFxcdGRlcGVuZHMgb24gTUFDU0VDIHx8ICFNQUNTRUNcXG4gIDQyOlxcdFxcdGhlbHBcXG4gIDQzOlxcdFxcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgTWFydmVsbCdzIE9jdGVvblRYMiBOSUMgcGh5c2ljYWwgZnVuY3Rpb24uXFxuICA0NDpcXHRcXG4gIDQ1OlxcdGNvbmZpZyBPQ1RFT05UWDJfVkZcXG4gIDQ2OlxcdFxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgVmlydHVhbCBGdW5jdGlvbiBkcml2ZXJcXFwiXFxuICA0NzpcXHRcXHRkZXBlbmRzIG9uIE9DVEVPTlRYMl9QRlxcbiAgNDg6XFx0XFx0aGVscFxcbiAgNDk6XFx0XFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBNYXJ2ZWxsJ3MgT2N0ZW9uVFgyIE5JQyB2aXJ0dWFsIGZ1bmN0aW9uLlxcbiAgNTA6XFx0XFxuICA1MTpcXHRjb25maWcgUlZVX0VTV0lUQ0hcXG4gIDUyOlxcdFxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIFJWVSBFLVN3aXRjaCBzdXBwb3J0XFxcIlxcbiAgNTM6XFx0XFx0ZGVwZW5kcyBvbiBPQ1RFT05UWDJfUEZcXG4gIDU0OlxcdFxcdGRlZmF1bHQgbVxcbiAgNTU6XFx0XFx0aGVscFxcbiAgNTY6XFx0XFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBNYXJ2ZWxsJ3MgUlZVIEUtU3dpdGNoIHRoYXRcXG4gIDU3OlxcdFxcdCAgcHJvdmlkZXMgaW50ZXJuYWwgU1JJT1YgcGFja2V0IHN0ZWVyaW5nIGFuZCBzd2l0Y2hpbmcuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjQ3OjAyLjM1ODE4NDIyNloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjcwOTcxMzI1OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIE9jdGVvblRYMiBEcml2ZXIgZm9yIEZ1enppbmcgRWxpZ2liaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZXNlIGBPQ1RFT05UWDJgIGRyaXZlcnMgYXJlLCBhcyBJIHVuZGVyc3RhbmQsIHNwZWNpZmljIHRvIE1hcnZlbGwncyBPY3Rlb25UWDIgUlZVL1NtYXJ0TklDL1NvQyBoYXJkd2FyZS4gVGhleSdyZSBwaHlzaWNhbCBkcml2ZXJzIGZvciBBUk02NCBvciwgaW4gc29tZSBjYXNlcywgNjQtYml0IGNvbXBpbGF0aW9uIHRlc3RzLiBUaGUga2V5IGhlcmUgaXMgKnBoeXNpY2FsKiBoYXJkd2FyZTsgdGhlc2UgZHJpdmVycyBhcmUgdGllZCB0byBNYXJ2ZWxsJ3MgUENJZSBkZXZpY2VzLiBTdGFuZGFyZCBRRU1VIG9yIEdDRSBWTXMgc2ltcGx5IHdvbid0IGN1dCBpdC4gVGhleSBjYW4ndCBlbXVsYXRlIHRoaXMgaGFyZHdhcmUuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHZlcmlmeSB0aGUgc2NvcGUgb2YgdGhlIG1vZGlmaWNhdGlvbnMuIEEgcXVpY2sgc2NhbiBvZiB0aGUgY2hhbmdlZCBmaWxlcyBjb25maXJtcyB0aGlzLiBJdCBsb29rcyBsaWtlIHRoZSBwYXRjaCB0b3VjaGVzIGEgY29tcHJlaGVuc2l2ZSBzZXQgb2YgZmlsZXMgd2l0aGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9gLiBJdCBpbmNsdWRlcyB0aGluZ3MgbGlrZSBgYWYvcnZ1X25peC5jYCwgYG5pYy9jbjEwa19pcHNlYy5jYCwgYG5pYy9vdHgyX2NvbW1vbi5jYCwgYW5kIHNvIG9uLiBObyBjb3JlIG5ldHdvcmtpbmcsIHNvY2tldCBjb2RlLCBvciBOZXRsaW5rIGNvcmUgaGF2ZSBiZWVuIG1vZGlmaWVkLCBzbyB0aGF0J3MgYSBnb29kIHNpZ24uIFRoZSBjaGFuZ2VzIGFyZSBhbGwgc2VsZi1jb250YWluZWQgd2l0aGluIHRoaXMgZHJpdmVyJ3Mgc3BlY2lmaWMgZGlyZWN0b3J5LlxuXG5Ob3csIGxldCdzIGFwcGx5IHRoZSBjcml0ZXJpYS4gV2UncmUgbG9va2luZyBmb3Igc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLiBMb29raW5nIGF0IHNlY3Rpb24gMiwgdGhlIGV4YW1wbGVzIHByb3ZpZGVkIHRoZXJlLCBgbWx4c3dgLCBgcGRzX2NvcmVgLCBgcWVkYCwgZXRjLiwgYXJlIGFsbCB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcyBvciBTbWFydE5JQyBkcml2ZXJzLiAgVGhlc2UgcmVxdWlyZSBwaHlzaWNhbCBBU0lDcyBvciBQQ0llIGNhcmRzIHRoYXQgYXJlbid0IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoYXQgaXMgZXhhY3RseSB3aGF0IHdlIGhhdmUgaGVyZS4gVGhlIE9jdGVvblRYMiBpcyBhIHZlbmRvci1zcGVjaWZpYyBTbWFydE5JQy9Tb0MgbmV0d29yayBkcml2ZXIsIGFuZCBpdCBuZWVkcyBwaHlzaWNhbCBNYXJ2ZWxsIGhhcmR3YXJlIC8gQVNJQ3MgdG8gd29yay4gIFRoaXMgaXMgY3JpdGljYWwuXG5cblRoaXMgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIGNvZGUgdGhhdCBpcyBpbmhlcmVudGx5IHVucmVhY2hhYmxlIGluIGFueSB0eXBpY2FsIGZ1enppbmcgc2V0dXAgbGlrZSB0aGUgb25lIGluIHN5emthbGxlci4gVGhlIGhhcmR3YXJlIGRlcGVuZGVuY3kgcmVuZGVycyBpdCBtb290LlxuXG5UaGVyZWZvcmUsIHRoZSBgV29ydGhGdXp6aW5nYCBmbGFnIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYC4gVGhlcmUncyBubyBwb2ludCBpbiB0cnlpbmcgdG8gZnV6eiBjb2RlIHRoYXQgd29uJ3QgZXZlciBleGVjdXRlIGluIHRoZSBmdXp6aW5nIGVudmlyb25tZW50LlxuXG5GaW5hbGx5LCBsZXQncyBwcmVwYXJlIHRoZSB0b29sIGNhbGw6XG5cbiogICBgV29ydGhGdXp6aW5nOiBmYWxzZWBcbiogICBgRm9jdXNTeW1ib2xzOiBbXWAgKFdlIGRvbid0IG5lZWQgYW55IGZvY3VzZWQgc3ltYm9scylcbiogICBgRW5hYmxlQ29uZmlnczogW11gIChXZSBkb24ndCBuZWVkIHRvIGVuYWJsZSBhbnl0aGluZylcbiogICBgUmVhc29uaW5nOiBUaGUgbW9kaWZpY2F0aW9ucyBhcmUgZXhjbHVzaXZlbHkgd2l0aGluIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgZHJpdmVyLCByZXF1aXJpbmcgcGh5c2ljYWwgTWFydmVsbCBPY3Rlb25UWDIgLyBDTjEwSyBBU0lDL1BDSWUgaGFyZHdhcmUsIHdoaWNoIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5gXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4NzY3LCJPdXRwdXRUb2tlbnMiOjEzMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk0OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjQ3OjA5LjQ1NTMyMDYxOVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzc5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGV4Y2x1c2l2ZWx5IG1vZGlmaWVzIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBSVlUvTklDIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvKSwgYWRkaW5nIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBzdXBwb3J0IGFuZCByZWZhY3RvcmluZyBmbGFnIGJpdG1hc2sgb3BlcmF0aW9ucy4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgc3BlY2lmaWMgcGh5c2ljYWwgTWFydmVsbCBPY3Rlb25UWDIgLyBDTjEwSyBoYXJkd2FyZS9BU0lDcyBhbmQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIHZpcnR1YWxpemF0aW9uIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3Igc3l6a2FsbGVyIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgZXhjbHVzaXZlbHkgbW9kaWZpZXMgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIFJWVS9OSUMgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi8pLCBhZGRpbmcgbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIHN1cHBvcnQgYW5kIHJlZmFjdG9yaW5nIGZsYWcgYml0bWFzayBvcGVyYXRpb25zLiBUaGlzIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbCBNYXJ2ZWxsIE9jdGVvblRYMiAvIENOMTBLIGhhcmR3YXJlL0FTSUNzIGFuZCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBzeXprYWxsZXIgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjQ3OjA5LjQ1NTM2MjYyOVoiLCJTZXEiOjksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow5wppw[1] Phase: Running StartedAt: 2026-09-11 12:47:22 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wppw[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-11 12:47:22 +0000 UTC FinishedAt: 2026-09-11 12:47:28 +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,}