Name: series-workflowxcz4h Phase: Failed StartedAt: 2026-08-11 09:35:02 +0000 UTC FinishedAt: 2026-08-11 09:53:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxcz4h[0] Phase: Succeeded StartedAt: 2026-08-11 09:35:02 +0000 UTC FinishedAt: 2026-08-11 09:52:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxcz4h[0].run-triage Phase: Succeeded StartedAt: 2026-08-11 09:35:02 +0000 UTC FinishedAt: 2026-08-11 09:52:50 +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+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjUxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZXhjbHVzaXZlbHkgYWRkcyBzdXBwb3J0IGFuZCBmaXhlcyBmb3IgdGhlIFJlYWx0ZWsgUlRMODcyM0JTIFNESU8gV2lGaSBjaGlwLiBTRElPIGRldmljZXMgcmVxdWlyZSBwaHlzaWNhbCBoYXJkd2FyZSBvciBzcGVjaWZpYyBRRU1VIG1hY2hpbmUgZW11bGF0aW9uIHdoaWNoIGlzIG5vdCBhdmFpbGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuIFRoZXJlIGlzIG5vIHNvZnR3YXJlIFNESU8gZW11bGF0aW9uIGZyYW1ld29yayAobGlrZSBkdW1teV9oY2QgZm9yIFVTQikgdG8gcmVhY2ggdGhlc2UgY29kZSBwYXRocyBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6NTE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhNDE4MjU2MTc4NDRlYTUzOTFmMDVjZTQ0OGY4NjkzOTViMGUwY2E4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMDk6NTE6NDkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9mdy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9mdy5jXG5pbmRleCA5NDVmZWRjZDM3NWI2Li5jODVjMGUzZTYwYTk3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9mdy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2Z3LmNcbkBAIC0zMTcsNiAmIzQzOzMxNywxNSBAQCB2b2lkIHJ0d19md19jMmhfY21kX2hhbmRsZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0Y2FzZSBDMkhfQ0NYX1RYX1JQVDpcbiBcdFx0cnR3X3R4X3JlcG9ydF9oYW5kbGUocnR3ZGV2LCBza2IsIEMySF9DQ1hfVFhfUlBUKTtcbiBcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBDMkhfVkVORE9SX1RYX1JQVDpcbiYjNDM7XHRjYXNlIEMySF9XTEFOX1JGT046XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogVGhlIFJUTDg3MjNCUyBmaXJtd2FyZSByZXBvcnRzIG1hbmFnZW1lbnQgVFggdGhyb3VnaCB0aGVzZVxuJiM0MztcdFx0ICogdHdvIGV2ZW50cyBpbnN0ZWFkLCB1c2luZyB0aGUgc2FtZSBwYXlsb2FkIGxheW91dC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSlcbiYjNDM7XHRcdFx0cnR3X3R4X3JlcG9ydF9oYW5kbGUocnR3ZGV2LCBza2IsIEMySF9DQ1hfVFhfUlBUKTtcbiYjNDM7XHRcdGJyZWFrO1xuIFx0Y2FzZSBDMkhfQlRfSU5GTzpcbiBcdFx0cnR3X2NvZXhfYnRfaW5mb19ub3RpZnkocnR3ZGV2LCBjMmgtXHUwMDNlcGF5bG9hZCwgbGVuKTtcbiBcdFx0YnJlYWs7XG5AQCAtMzY1LDYgJiM0MzszNzQsMTcgQEAgdm9pZCBydHdfZndfYzJoX2NtZF9yeF9pcnFzYWZlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHUzMiBwa3Rfb2Zmc2V0LFxuIFx0XHRydHdfY29leF9pbmZvX3Jlc3BvbnNlKHJ0d2Rldiwgc2tiKTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIEMySF9XTEFOX1JGT046XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogT24gODcyM0JTIFNESU8gd2l0aCB2NDEgZmlybXdhcmUsIEMySCAweDMyIGNhcnJpZXMgYSBzY2FuIFRYXG4mIzQzO1x0XHQgKiByZXBvcnQsIG5vdCBhIFdMQU5fUkZPTiBldmVudDogZGVmZXIgaXQgdG9cbiYjNDM7XHRcdCAqIHJ0d19md19jMmhfY21kX2hhbmRsZSgpLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKSB7XG4mIzQzO1x0XHRcdCooKHUzMiAqKXNrYi1cdTAwM2VjYikgPSBwa3Rfb2Zmc2V0O1xuJiM0MztcdFx0XHRza2JfcXVldWVfdGFpbChcdTAwMjZydHdkZXYtXHUwMDNlYzJoX3F1ZXVlLCBza2IpO1xuJiM0MztcdFx0XHRpZWVlODAyMTFfcXVldWVfd29yayhydHdkZXYtXHUwMDNlaHcsIFx1MDAyNnJ0d2Rldi1cdTAwM2VjMmhfd29yayk7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuIFx0XHRjb21wbGV0ZShcdTAwMjZydHdkZXYtXHUwMDNlbHBzX2xlYXZlX2NoZWNrKTtcbiBcdFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbiBcdFx0YnJlYWs7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9mdy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9mdy5oXG5pbmRleCA0OGFkOWNlYWI2ZWExLi5iZGRhNzhkYzY0NjJhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9mdy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2Z3LmhcbkBAIC01NCw2ICYjNDM7NTQsMTEgQEAgZW51bSBydHdfYzJoX2NtZF9pZCB7XG4gXHRDMkhfQlRfTVBfSU5GTyA9IDB4MGIsXG4gXHRDMkhfQlRfSElEX0lORk8gPSAweDQ1LFxuIFx0QzJIX1JBX1JQVCA9IDB4MGMsXG4mIzQzO1x0LypcbiYjNDM7XHQgKiA4NzIzQlMgU0RJTyB2ZW5kb3IgdjQxIGZpcm13YXJlIG1hbmFnZW1lbnQgVFggcmVwb3J0ICgweDMyIGlzXG4mIzQzO1x0ICogcmVwb3J0ZWQgYXMgQzJIX1dMQU5fUkZPTiwgaGFuZGxlZCBwZXItY2hpcCBpbiB0aGUgQzJIIGRpc3BhdGNoKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRDMkhfVkVORE9SX1RYX1JQVCA9IDB4MTIsXG4gXHRDMkhfSFdfRkVBVFVSRV9SRVBPUlQgPSAweDE5LFxuIFx0QzJIX1dMQU5fSU5GTyA9IDB4MjcsXG4gXHRDMkhfV0xBTl9SRk9OID0gMHgzMixcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oXG5pbmRleCBjNmU5ODFiYTc5ODY4Li44Zjg2ZjdjMTJkZTVhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oXG5AQCAtMTk0LDYgJiM0MzsxOTQsNyBAQCBlbnVtIHJ0d19jaGlwX3R5cGUge1xuIFx0UlRXX0NISVBfVFlQRV84NzIzRCxcbiBcdFJUV19DSElQX1RZUEVfODgyMUMsXG4gXHRSVFdfQ0hJUF9UWVBFXzg3MDNCLFxuJiM0MztcdFJUV19DSElQX1RZUEVfODcyM0IsXG4gXHRSVFdfQ0hJUF9UWVBFXzg4MjFBLFxuIFx0UlRXX0NISVBfVFlQRV84ODEyQSxcbiBcdFJUV19DSElQX1RZUEVfODgxNEEsXG5AQCAtMjE5NCw2ICYjNDM7MjE5NSwxMiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcnR3X2NoaXBfaGFzX3R4X3N0YmMoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiBcdHJldHVybiBydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2V0eF9zdGJjO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBib29sIHJ0d19pc184NzIzYnMoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VpZCA9PSBSVFdfQ0hJUF9UWVBFXzg3MjNCIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgICBydHdkZXYtXHUwMDNlaGNpLnR5cGUgPT0gUlRXX0hDSV9UWVBFX1NESU87XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSB1OCBydHdfYWNxdWlyZV9tYWNpZChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbWFjX2lkO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnguY1xuaW5kZXggMDFmZDI5OWFiYjdmZS4uYTkzNjFlZjRiOTNjMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9yeC5jXG5AQCAtMjUzLDEwICYjNDM7MjUzLDEyIEBAIHN0YXRpYyB2b2lkIHJ0d19yeF9maWxsX3J4X3N0YXR1cyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuIFxuIFx0cnR3X3J4X2FkZHJfbWF0Y2gocnR3ZGV2LCBwa3Rfc3RhdCwgaGRyKTtcbiBcbi1cdC8qIFJ0bDg3MjNjcyBkcml2ZXIgY2hlY2tzIGZvciBzaXplIFx1MDAzYyAxNCBvciBzaXplIFx1MDAzZSA4MTkyIGFuZFxuLVx0ICogc2ltcGx5IGRyb3BzIHRoZSBwYWNrZXQuXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBSdGw4NzIzY3MgYW5kIHJ0bDg3MjNicyBkcml2ZXJzIGNoZWNrIGZvciBzaXplIFx1MDAzYyAxNCBvciBzaXplIFx1MDAzZSA4MTkyXG4mIzQzO1x0ICogYW5kIHNpbXBseSBkcm9wIHRoZSBwYWNrZXQuXG4gXHQgKi9cbi1cdGlmIChydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VpZCA9PSBSVFdfQ0hJUF9UWVBFXzg3MDNCIFx1MDAyNlx1MDAyNiBwa3Rfc3RhdC1cdTAwM2Vwa3RfbGVuID09IDApIHtcbiYjNDM7XHRpZiAoKHJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZWlkID09IFJUV19DSElQX1RZUEVfODcwM0IgfHwgcnR3X2lzXzg3MjNicyhydHdkZXYpKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgcGt0X3N0YXQtXHUwMDNlcGt0X2xlbiA9PSAwKSB7XG4gXHRcdHJ4X3N0YXR1cy1cdTAwM2VmbGFnIHw9IFJYX0ZMQUdfTk9fUFNEVTtcbiBcdFx0cnR3X2RiZyhydHdkZXYsIFJUV19EQkdfUlgsIFwmIzM0O3plcm8gbGVuZ3RoIHBhY2tldFwmIzM0Oyk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uY1xuaW5kZXggNWI0MGQ3NGIxNmVlMC4uZWQxYmVkOGVhMTQ0YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uY1xuQEAgLTIwLDYgJiM0MzsyMCwxNyBAQFxuICNpbmNsdWRlIFwmIzM0O3R4LmhcJiMzNDtcbiBcbiAjZGVmaW5lIFJUV19TRElPX0lORElSRUNUX1JXX1JFVFJJRVNcdFx0XHQ1MFxuJiM0MzsjZGVmaW5lIFJUV19TRElPX09RVF9USU1FT1VUX01TXHRcdFx0XHQxMDAwXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiA4NzIzQlMgU0RJTyBUWCBGSUZPIGJhY2stcHJlc3N1cmUgd2F0ZXJtYXJrczogc3RvcCB0aGUgbWFjODAyMTEgcXVldWUgb25jZVxuJiM0MzsgKiB0aGUgcGVyLUFDIHNvZnR3YXJlIEZJRk8gZmlsbHMgcGFzdCB0aGUgaGlnaCB3YXRlcm1hcmssIGFuZCB3YWtlIGl0IGZyb20gdGhlXG4mIzQzOyAqIFRYIGRyYWluIHBhdGggb25jZSBpdCBmYWxscyBiYWNrIHRvIHRoZSBsb3cgb25lLiBCb3VuZHMgdGhlIHF1ZXVlaW5nIGxhdGVuY3lcbiYjNDM7ICogdGhhdCBvdGhlcndpc2UgY2F1c2VzIHVwbGluayBidWZmZXJibG9hdCAvIGNvbmdlc3Rpb24gY29sbGFwc2UuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIFJUV19TRElPX1RYX0ZJRk9fSElXQVRFUlx0XHRcdDE2XG4mIzQzOyNkZWZpbmUgUlRXX1NESU9fVFhfRklGT19MT1dBVEVSXHRcdFx0OFxuJiM0MzsjZGVmaW5lIFJUV19TRElPX1RYX1JFVFJZX0RFTEFZXHRcdFx0bXNlY3NfdG9famlmZmllcygxKVxuIFxuIHN0YXRpYyBib29sIHJ0d19zZGlvX2lzX2J1c19hZGRyKHUzMiBhZGRyKVxuIHtcbkBAIC01NDgsMTIgJiM0Mzs1NTksMTIyIEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9fcmVhZF9wb3J0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4ICpidWYsIHNpemVfdCBjb3VudClcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBUaGUgY2FjaGVkIGZyZWUgcGFnZSBjb3VudGVycyBhcmUgYSBmYXN0IHBhdGggaGludCBvbmx5LiBUaGV5IGFyZSB3cml0dGVuXG4mIzQzOyAqIGZyb20gdGhlIHNpbmdsZSB0aHJlYWRlZCBUWCB3b3JrIGFuZCwgZm9yIEgyQyBhbmQgcmVzZXJ2ZWQgcGFnZSB3cml0ZXMsXG4mIzQzOyAqIGZyb20gcHJvY2VzcyBjb250ZXh0LCBzbyB0aGV5IGFyZSBhdG9taWNfdDsgd2hlbmV2ZXIgdGhleSBjbGFpbSB0aGVyZSBpc1xuJiM0MzsgKiBub3QgZW5vdWdoIHJvb20gdGhleSBhcmUgcmVzeW5jaHJvbmlzZWQgZnJvbSB0aGUgY2hpcCBiZWZvcmUgdGhlIGNhbGxlclxuJiM0MzsgKiBnaXZlcyB1cCwgd2hpY2ggYWxzbyBhYnNvcmJzIGEgbG9zdCB1cGRhdGUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfc3RvcmVfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4mIzQzO1x0XHRcdFx0XHQgICAgdTMyIGZyZWVfdHhwZylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbiYjNDM7XG4mIzQzO1x0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfaGlnaCxcbiYjNDM7XHRcdCAgIHUzMl9nZXRfYml0cyhmcmVlX3R4cGcsIEJJVF9GUkVFX1RYUEdfSElHSCkpO1xuJiM0MztcdGF0b21pY19zZXQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX25vcm1hbCxcbiYjNDM7XHRcdCAgIHUzMl9nZXRfYml0cyhmcmVlX3R4cGcsIEJJVF9GUkVFX1RYUEdfTk9STUFMKSk7XG4mIzQzO1x0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfbG93LFxuJiM0MztcdFx0ICAgdTMyX2dldF9iaXRzKGZyZWVfdHhwZywgQklUX0ZSRUVfVFhQR19MT1cpKTtcbiYjNDM7XHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19wdWIsXG4mIzQzO1x0XHQgICB1MzJfZ2V0X2JpdHMoZnJlZV90eHBnLCBCSVRfRlJFRV9UWFBHX1BVQikpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfaW5pdF9mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcnR3X3BhZ2VfdGFibGUgKnBnX3RibDtcbiYjNDM7XHR1MzIgZnJlZV90eHBnO1xuJiM0MztcdHUxNiBwdWJxX251bTtcbiYjNDM7XG4mIzQzO1x0ZnJlZV90eHBnID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19TRElPX0ZSRUVfVFhQRyk7XG4mIzQzO1x0aWYgKGZyZWVfdHhwZykge1xuJiM0MztcdFx0cnR3X3NkaW9fODcyM2JzX3N0b3JlX2ZyZWVfdHhwZyhydHdkZXYsIGZyZWVfdHhwZyk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHBnX3RibCA9IFx1MDAyNnJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZXBhZ2VfdGFibGVbMF07XG4mIzQzO1x0XHRwdWJxX251bSA9IHJ0d2Rldi1cdTAwM2VmaWZvLmFjcV9wZ19udW0gLSBwZ190YmwtXHUwMDNlaHFfbnVtIC1cbiYjNDM7XHRcdFx0ICAgcGdfdGJsLVx1MDAzZWxxX251bSAtIHBnX3RibC1cdTAwM2VucV9udW0gLSBwZ190YmwtXHUwMDNlZXhxX251bSAtXG4mIzQzO1x0XHRcdCAgIHBnX3RibC1cdTAwM2VnYXBxX251bTtcbiYjNDM7XG4mIzQzO1x0XHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19oaWdoLCBwZ190YmwtXHUwMDNlaHFfbnVtKTtcbiYjNDM7XHRcdGF0b21pY19zZXQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX25vcm1hbCwgcGdfdGJsLVx1MDAzZW5xX251bSk7XG4mIzQzO1x0XHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19sb3csIHBnX3RibC1cdTAwM2VscV9udW0pO1xuJiM0MztcdFx0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfcHViLCBwdWJxX251bSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfb3F0X2ZyZWUsXG4mIzQzO1x0XHQgICBydHdfcmVhZDgocnR3ZGV2LCBSRUdfU0RJT19PUVRfRlJFRV9QRykpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfc3luY19mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiYjNDM7e1xuJiM0MztcdHUzMiBmcmVlX3R4cGcgPSBydHdfcmVhZDMyKHJ0d2RldiwgUkVHX1NESU9fRlJFRV9UWFBHKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGZyZWVfdHhwZylcbiYjNDM7XHRcdHJ0d19zZGlvXzg3MjNic19zdG9yZV9mcmVlX3R4cGcocnR3ZGV2LCBmcmVlX3R4cGcpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBTdW0gb2YgdGhlIHF1ZXVlJiMzOTtzIGRlZGljYXRlZCBjb3VudGVyIGFuZCB0aGUgcHVibGljIHBvb2wsIGNsYW1wZWQgYXQgemVybzpcbiYjNDM7ICogYSBsb3N0IHVwZGF0ZSBiZXR3ZWVuIHRoZSBjaGVjayBiZWxvdyBhbmQgcnR3X3NkaW9fODcyM2JzX2NvbnN1bWVfdHhwZygpXG4mIzQzOyAqIGNhbiBicmllZmx5IGRyaXZlIGEgY291bnRlciBuZWdhdGl2ZSwgYW5kIGxldHRpbmcgdGhhdCB3cmFwIHdvdWxkIGhpZGUgdGhlXG4mIzQzOyAqIHNob3J0YWdlIGluc3RlYWQgb2YgdHJpZ2dlcmluZyBhIHJlc3luYyBmcm9tIHRoZSBjaGlwLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBydHdfc2Rpb184NzIzYnNfcGFnZXNfZnJlZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIGF0b21pY190ICpkZWRpY2F0ZWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4mIzQzO1x0aW50IGZyZWU7XG4mIzQzO1xuJiM0MztcdGZyZWUgPSBhdG9taWNfcmVhZChkZWRpY2F0ZWQpICYjNDM7IGF0b21pY19yZWFkKFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19wdWIpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZnJlZSBcdTAwM2UgMCA/IGZyZWUgOiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYXRvbWljX3QgKnJ0d19zZGlvXzg3MjNic19mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggcXVldWUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAocXVldWUpIHtcbiYjNDM7XHRjYXNlIFJUV19UWF9RVUVVRV9WSTpcbiYjNDM7XHRcdHJldHVybiBcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfbm9ybWFsO1xuJiM0MztcdGNhc2UgUlRXX1RYX1FVRVVFX0JFOlxuJiM0MztcdGNhc2UgUlRXX1RYX1FVRVVFX0JLOlxuJiM0MztcdFx0cmV0dXJuIFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19sb3c7XG4mIzQzO1x0Y2FzZSBSVFdfVFhfUVVFVUVfQkNOOlxuJiM0MztcdGNhc2UgUlRXX1RYX1FVRVVFX0gyQzpcbiYjNDM7XHRjYXNlIFJUV19UWF9RVUVVRV9ISTA6XG4mIzQzO1x0Y2FzZSBSVFdfVFhfUVVFVUVfTUdNVDpcbiYjNDM7XHRjYXNlIFJUV19UWF9RVUVVRV9WTzpcbiYjNDM7XHRcdHJldHVybiBcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfaGlnaDtcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgcnR3X3NkaW9fY2hlY2tfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IHF1ZXVlLFxuIFx0XHRcdFx0ICAgIHNpemVfdCBjb3VudClcbiB7XG4gXHR1bnNpZ25lZCBpbnQgcGFnZXNfZnJlZSwgcGFnZXNfbmVlZGVkO1xuIFxuLVx0aWYgKHJ0d19jaGlwX3djcHVfODA1MShydHdkZXYpKSB7XG4mIzQzO1x0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSkge1xuJiM0MztcdFx0YXRvbWljX3QgKmRlZGljYXRlZDtcbiYjNDM7XG4mIzQzO1x0XHRkZWRpY2F0ZWQgPSBydHdfc2Rpb184NzIzYnNfZnJlZV90eHBnKHJ0d2RldiwgcXVldWUpO1xuJiM0MztcdFx0aWYgKCFkZWRpY2F0ZWQpIHtcbiYjNDM7XHRcdFx0cnR3X3dhcm4ocnR3ZGV2LCBcJiMzNDtVbmtub3duIG1hcHBpbmcgZm9yIHF1ZXVlICV1XFxuXCYjMzQ7LCBxdWV1ZSk7XG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdHBhZ2VzX2ZyZWUgPSBydHdfc2Rpb184NzIzYnNfcGFnZXNfZnJlZShydHdkZXYsIGRlZGljYXRlZCk7XG4mIzQzO1x0XHRwYWdlc19uZWVkZWQgPSBESVZfUk9VTkRfVVAoY291bnQsIHJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZXBhZ2Vfc2l6ZSk7XG4mIzQzO1x0XHRpZiAocGFnZXNfbmVlZGVkIFx1MDAzYz0gcGFnZXNfZnJlZSlcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdFx0cnR3X3NkaW9fODcyM2JzX3N5bmNfZnJlZV90eHBnKHJ0d2Rldik7XG4mIzQzO1x0XHRwYWdlc19mcmVlID0gcnR3X3NkaW9fODcyM2JzX3BhZ2VzX2ZyZWUocnR3ZGV2LCBkZWRpY2F0ZWQpO1xuJiM0MztcdH0gZWxzZSBpZiAocnR3X2NoaXBfd2NwdV84MDUxKHJ0d2RldikpIHtcbiBcdFx0dTMyIGZyZWVfdHhwZztcbiBcbiBcdFx0ZnJlZV90eHBnID0gcnR3X3NkaW9fcmVhZDMyKHJ0d2RldiwgUkVHX1NESU9fRlJFRV9UWFBHKTtcbkBAIC02MzIsNDQgJiM0Mzs3NTMsMTIzIEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9fY2hlY2tfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IHF1ZXVlLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IHJ0d19zZGlvXzg3MjNic193YWl0X3R4X29xdChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuJiM0MztcdHU4IGZyZWU7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGlmIChhdG9taWNfYWRkX3VubGVzcyhcdTAwMjZydHdzZGlvLVx1MDAzZXR4X29xdF9mcmVlLCAtMSwgMCkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgUlRXX1NESU9fT1FUX1RJTUVPVVRfTVM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRmcmVlID0gcnR3X3JlYWQ4KHJ0d2RldiwgUkVHX1NESU9fT1FUX0ZSRUVfUEcpO1xuJiM0MztcdFx0aWYgKGZyZWUpIHtcbiYjNDM7XHRcdFx0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZXR4X29xdF9mcmVlLCBmcmVlIC0gMSk7XG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0dXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIC1FQlVTWTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnR3X3NkaW9fODcyM2JzX2NvbnN1bWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCBxdWV1ZSxcbiYjNDM7XHRcdFx0XHRcdCB1bnNpZ25lZCBpbnQgcGFnZXMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4mIzQzO1x0YXRvbWljX3QgKmRlZGljYXRlZDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgdGFrZW47XG4mIzQzO1x0aW50IGZyZWU7XG4mIzQzO1xuJiM0MztcdGRlZGljYXRlZCA9IHJ0d19zZGlvXzg3MjNic19mcmVlX3R4cGcocnR3ZGV2LCBxdWV1ZSk7XG4mIzQzO1x0aWYgKCFkZWRpY2F0ZWQpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGZyZWUgPSBhdG9taWNfcmVhZChkZWRpY2F0ZWQpO1xuJiM0MztcdHRha2VuID0gbWluX3QodW5zaWduZWQgaW50LCBwYWdlcywgZnJlZSBcdTAwM2UgMCA/IGZyZWUgOiAwKTtcbiYjNDM7XHRhdG9taWNfc3ViKHRha2VuLCBkZWRpY2F0ZWQpO1xuJiM0MztcbiYjNDM7XHRwYWdlcyAtPSB0YWtlbjtcbiYjNDM7XHRpZiAocGFnZXMgXHUwMDI2XHUwMDI2IGF0b21pY19zdWJfcmV0dXJuKHBhZ2VzLCBcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfcHViKSBcdTAwM2MgMClcbiYjNDM7XHRcdGF0b21pY19zZXQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX3B1YiwgMCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBydHdfc2Rpb193cml0ZV9wb3J0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0ICAgICAgIGVudW0gcnR3X3R4X3F1ZXVlX3R5cGUgcXVldWUpXG4ge1xuIFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuJiM0MztcdGJvb2wgcnRsODcyM2JzID0gcnR3X2lzXzg3MjNicyhydHdkZXYpO1xuJiM0MztcdHVuc2lnbmVkIGludCBvcmlnX2xlbiA9IHNrYi1cdTAwM2VsZW47XG4mIzQzO1x0dW5zaWduZWQgaW50IHBhZ2VzO1xuJiM0MztcdHNpemVfdCB3cml0ZV9zaXplO1xuIFx0Ym9vbCBidXNfY2xhaW07XG4gXHRzaXplX3QgdHhzaXplO1xuIFx0dTMyIHR4YWRkcjtcbiBcdGludCByZXQ7XG4gXG4tXHR0eGFkZHIgPSBydHdfc2Rpb19nZXRfdHhfYWRkcihydHdkZXYsIHNrYi1cdTAwM2VsZW4sIHF1ZXVlKTtcbi1cdGlmICghdHhhZGRyKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRpZiAocnRsODcyM2JzKSB7XG4mIzQzO1x0XHR0eHNpemUgPSByb3VuZF91cChvcmlnX2xlbiwgNCk7XG4mIzQzO1x0XHR3cml0ZV9zaXplID0gdHhzaXplIFx1MDAzZSBSVFdfU0RJT19CTE9DS19TSVpFID9cbiYjNDM7XHRcdFx0ICAgICByb3VuZF91cCh0eHNpemUsIFJUV19TRElPX0JMT0NLX1NJWkUpIDogdHhzaXplO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHR0eHNpemUgPSBzZGlvX2FsaWduX3NpemUocnR3c2Rpby1cdTAwM2VzZGlvX2Z1bmMsIG9yaWdfbGVuKTtcbiYjNDM7XHRcdHdyaXRlX3NpemUgPSB0eHNpemU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAod3JpdGVfc2l6ZSBcdTAwM2Ugb3JpZ19sZW4pIHtcbiYjNDM7XHRcdHVuc2lnbmVkIGludCBwYWRkaW5nID0gd3JpdGVfc2l6ZSAtIG9yaWdfbGVuO1xuIFxuLVx0dHhzaXplID0gc2Rpb19hbGlnbl9zaXplKHJ0d3NkaW8tXHUwMDNlc2Rpb19mdW5jLCBza2ItXHUwMDNlbGVuKTtcbiYjNDM7XHRcdGlmIChza2JfdGFpbHJvb20oc2tiKSBcdTAwM2MgcGFkZGluZykge1xuJiM0MztcdFx0XHRyZXQgPSBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBwYWRkaW5nIC0gc2tiX3RhaWxyb29tKHNrYiksXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHNrYl9wdXRfemVybyhza2IsIHBhZGRpbmcpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0dHhhZGRyID0gcnR3X3NkaW9fZ2V0X3R4X2FkZHIocnR3ZGV2LCB0eHNpemUsIHF1ZXVlKTtcbiYjNDM7XHRpZiAoIXR4YWRkcikge1xuJiM0MztcdFx0cmV0ID0gLUVJTlZBTDtcbiYjNDM7XHRcdGdvdG8gb3V0X3RyaW07XG4mIzQzO1x0fVxuIFxuIFx0cmV0ID0gcnR3X3NkaW9fY2hlY2tfZnJlZV90eHBnKHJ0d2RldiwgcXVldWUsIHR4c2l6ZSk7XG4gXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0Z290byBvdXRfdHJpbTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJ0bDg3MjNicykge1xuJiM0MztcdFx0cmV0ID0gcnR3X3NkaW9fODcyM2JzX3dhaXRfdHhfb3F0KHJ0d2Rldik7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRnb3RvIG91dF90cmltO1xuJiM0MztcdH1cbiBcbiBcdGlmICghSVNfQUxJR05FRCgodW5zaWduZWQgbG9uZylza2ItXHUwMDNlZGF0YSwgUlRXX1NESU9fREFUQV9QVFJfQUxJR04pKVxuIFx0XHRydHdfd2FybihydHdkZXYsIFwmIzM0O0dvdCB1bmFsaWduZWQgU0tCIGluICVzKCkgZm9yIHF1ZXVlICV1XFxuXCYjMzQ7LFxuIFx0XHRcdCBfX2Z1bmNfXywgcXVldWUpO1xuIFxuIFx0YnVzX2NsYWltID0gcnR3X3NkaW9fYnVzX2NsYWltX25lZWRlZChydHdzZGlvKTtcbi1cbiBcdGlmIChidXNfY2xhaW0pXG4gXHRcdHNkaW9fY2xhaW1faG9zdChydHdzZGlvLVx1MDAzZXNkaW9fZnVuYyk7XG4tXG4tXHRyZXQgPSBzZGlvX21lbWNweV90b2lvKHJ0d3NkaW8tXHUwMDNlc2Rpb19mdW5jLCB0eGFkZHIsIHNrYi1cdTAwM2VkYXRhLCB0eHNpemUpO1xuLVxuJiM0MztcdHJldCA9IHNkaW9fbWVtY3B5X3RvaW8ocnR3c2Rpby1cdTAwM2VzZGlvX2Z1bmMsIHR4YWRkciwgc2tiLVx1MDAzZWRhdGEsXG4mIzQzO1x0XHRcdCAgICAgICB3cml0ZV9zaXplKTtcbiBcdGlmIChidXNfY2xhaW0pXG4gXHRcdHNkaW9fcmVsZWFzZV9ob3N0KHJ0d3NkaW8tXHUwMDNlc2Rpb19mdW5jKTtcbiBcbi1cdGlmIChyZXQpXG4mIzQzO1x0aWYgKHJldCkge1xuIFx0XHRydHdfd2FybihydHdkZXYsXG4gXHRcdFx0IFwmIzM0O0ZhaWxlZCB0byB3cml0ZSAlenUgYnl0ZShzKSB0byBTRElPIHBvcnQgMHglMDh4XCYjMzQ7LFxuLVx0XHRcdCB0eHNpemUsIHR4YWRkcik7XG4mIzQzO1x0XHRcdCB3cml0ZV9zaXplLCB0eGFkZHIpO1xuJiM0MztcdH0gZWxzZSBpZiAocnRsODcyM2JzKSB7XG4mIzQzO1x0XHRwYWdlcyA9IERJVl9ST1VORF9VUCh0eHNpemUsIHJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZXBhZ2Vfc2l6ZSk7XG4mIzQzO1x0XHRydHdfc2Rpb184NzIzYnNfY29uc3VtZV90eHBnKHJ0d2RldiwgcXVldWUsIHBhZ2VzKTtcbiYjNDM7XHR9XG4gXG4mIzQzO291dF90cmltOlxuJiM0MztcdGlmICh3cml0ZV9zaXplIFx1MDAzZSBvcmlnX2xlbilcbiYjNDM7XHRcdHNrYl90cmltKHNrYiwgb3JpZ19sZW4pO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtNjc3LDcgJiM0Mzs4NzcsMTEgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9faW5pdChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIHtcbiBcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbiBcbi1cdHJ0d3NkaW8tXHUwMDNlaXJxX21hc2sgPSBSRUdfU0RJT19ISU1SX1JYX1JFUVVFU1QgfCBSRUdfU0RJT19ISU1SX0NQV00xO1xuJiM0MztcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpXG4mIzQzO1x0XHRydHdzZGlvLVx1MDAzZWlycV9tYXNrID0gUkVHX1NESU9fSElNUl9SWF9SRVFVRVNUO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHJ0d3NkaW8tXHUwMDNlaXJxX21hc2sgPSBSRUdfU0RJT19ISU1SX1JYX1JFUVVFU1QgfFxuJiM0MztcdFx0XHRcdCAgICBSRUdfU0RJT19ISU1SX0NQV00xO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBydHdfc2Rpb19lbmFibGVfcnhfYWdncmVnYXRpb24oc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbkBAIC02ODUsNiAmIzQzOzg4OSw3IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2VuYWJsZV9yeF9hZ2dyZWdhdGlvbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIFx0dTggc2l6ZSwgdGltZW91dDtcbiBcbiBcdHN3aXRjaCAocnR3ZGV2LVx1MDAzZWNoaXAtXHUwMDNlaWQpIHtcbiYjNDM7XHRjYXNlIFJUV19DSElQX1RZUEVfODcyM0I6XG4gXHRjYXNlIFJUV19DSElQX1RZUEVfODcwM0I6XG4gXHRjYXNlIFJUV19DSElQX1RZUEVfODgyMUE6XG4gXHRjYXNlIFJUV19DSElQX1RZUEVfODgxMkE6XG5AQCAtNzEyLDYgJiM0Mzs5MTcsOCBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19lbmFibGVfcnhfYWdncmVnYXRpb24oc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiBcdFx0ICAgIEZJRUxEX1BSRVAoQklUX0RNQV9BR0dfVE9fVjEsIHRpbWVvdXQpKTtcbiBcbiBcdHJ0d193cml0ZThfc2V0KHJ0d2RldiwgUkVHX1JYRE1BX01PREUsIEJJVF9ETUFfTU9ERSk7XG4mIzQzO1x0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSlcbiYjNDM7XHRcdHJ0d193cml0ZThfbWFzayhydHdkZXYsIFJFR19SWERNQV9NT0RFLCBCSVRfRE1BX0JVUlNUX0NOVCwgMHgzKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcnR3X3NkaW9fZW5hYmxlX2ludGVycnVwdChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuQEAgLTc0OSw5ICYjNDM7OTU2LDUwIEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9fc2V0dXAoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgcnR3X3NkaW9fODcyM2JzX2NoZWNrX3JxcG4oc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBydHdfY2hpcF9pbmZvICpjaGlwID0gcnR3ZGV2LVx1MDAzZWNoaXA7XG4mIzQzO1x0c3RydWN0IHJ0d19maWZvX2NvbmYgKmZpZm8gPSBcdTAwMjZydHdkZXYtXHUwMDNlZmlmbztcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcnR3X3BhZ2VfdGFibGUgKnBnX3RibDtcbiYjNDM7XHR1MTYgcmVzZXJ2ZWRfbnVtO1xuJiM0MztcdHUzMiBmcmVlX3R4cGc7XG4mIzQzO1x0dTE2IHB1YnFfbnVtO1xuJiM0MztcbiYjNDM7XHRmcmVlX3R4cGcgPSBydHdfcmVhZDMyKHJ0d2RldiwgUkVHX1NESU9fRlJFRV9UWFBHKTtcbiYjNDM7XHRpZiAoZnJlZV90eHBnIHx8ICFmaWZvLVx1MDAzZWFjcV9wZ19udW0pXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHBnX3RibCA9IFx1MDAyNmNoaXAtXHUwMDNlcGFnZV90YWJsZVswXTtcbiYjNDM7XHRyZXNlcnZlZF9udW0gPSBwZ190YmwtXHUwMDNlaHFfbnVtICYjNDM7IHBnX3RibC1cdTAwM2VscV9udW0gJiM0MzsgcGdfdGJsLVx1MDAzZW5xX251bSAmIzQzO1xuJiM0MztcdFx0ICAgICAgIHBnX3RibC1cdTAwM2VleHFfbnVtICYjNDM7IHBnX3RibC1cdTAwM2VnYXBxX251bTtcbiYjNDM7XHRpZiAoZmlmby1cdTAwM2VhY3FfcGdfbnVtIFx1MDAzYz0gcmVzZXJ2ZWRfbnVtKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRwdWJxX251bSA9IGZpZm8tXHUwMDNlYWNxX3BnX251bSAtIHJlc2VydmVkX251bTtcbiYjNDM7XHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19SUVBOX05QUSxcbiYjNDM7XHRcdCAgICBCSVRfUlFQTl9ORShwZ190YmwtXHUwMDNlbnFfbnVtLCBwZ190YmwtXHUwMDNlZXhxX251bSkpO1xuJiM0MztcdHJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1JRUE4sXG4mIzQzO1x0XHQgICAgQklUX1JRUE5fSExQKHBnX3RibC1cdTAwM2VocV9udW0sIHBnX3RibC1cdTAwM2VscV9udW0sIHB1YnFfbnVtKSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBydHdfc2Rpb19zdGFydChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIHtcbiYjNDM7XHR1MzIgY2xlYXI7XG4mIzQzO1xuJiM0MztcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpIHtcbiYjNDM7XHRcdHJ0d19zZGlvXzg3MjNic19jaGVja19ycXBuKHJ0d2Rldik7XG4mIzQzO1x0XHRydHdfc2Rpb184NzIzYnNfaW5pdF9mcmVlX3R4cGcocnR3ZGV2KTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cnR3X3NkaW9fZW5hYmxlX3J4X2FnZ3JlZ2F0aW9uKHJ0d2Rldik7XG4mIzQzO1xuJiM0MztcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpIHtcbiYjNDM7XHRcdGNsZWFyID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19TRElPX0hJU1IpIFx1MDAyNlxuJiM0MztcdFx0XHRSVFdfU0RJT19ISVNSX0NMRUFSX01BU0s7XG4mIzQzO1x0XHRpZiAoY2xlYXIpXG4mIzQzO1x0XHRcdHJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1NESU9fSElTUiwgY2xlYXIpO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRydHdfc2Rpb19lbmFibGVfaW50ZXJydXB0KHJ0d2Rldik7XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC04MTUsNyAmIzQzOzEwNjMsMTEgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9fdHhfa2lja19vZmYoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiB7XG4gXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4gXG4tXHRxdWV1ZV93b3JrKHJ0d3NkaW8tXHUwMDNldHh3cSwgXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9oYW5kbGVyX2RhdGEtXHUwMDNld29yayk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBIHJldHJ5IG1heSBhbHJlYWR5IGJlIHBlbmRpbmcgd2l0aCBhIGRlbGF5OyByZS1hcm0gaXQgc28gYSBuZXdseVxuJiM0MztcdCAqIHF1ZXVlZCBmcmFtZSBpcyBub3QgaGVsZCBiYWNrIGJ5IGl0LlxuJiM0MztcdCAqL1xuJiM0MztcdG1vZF9kZWxheWVkX3dvcmsocnR3c2Rpby1cdTAwM2V0eHdxLCBcdTAwMjZydHdzZGlvLVx1MDAzZXR4X2hhbmRsZXJfZGF0YS1cdTAwM2V3b3JrLCAwKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcnR3X3NkaW9fbGlua19wcyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBib29sIGVudGVyKVxuQEAgLTgzMSw2ICYjNDM7MTA4Myw4IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2ludGVyZmFjZV9jZmcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiBcbiBcdHZhbCA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19UWF9DVFJMKTtcbiBcdHZhbCBcdTAwMjY9IDB4ZmZmODtcbiYjNDM7XHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKVxuJiM0MztcdFx0dmFsIHw9IEJJVF9TRElPX1RYX0NUUkxfQUxXQVlTX1JFQ09HTklaRTtcbiBcdHJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1NESU9fVFhfQ1RSTCwgdmFsKTtcbiB9XG4gXG5AQCAtOTM3LDYgJiM0MzsxMTkxLDE5IEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9fdHhfd3JpdGUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcbiBcbiBcdHNrYl9xdWV1ZV90YWlsKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfcXVldWVbcXVldWVdLCBza2IpO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogQmFjay1wcmVzc3VyZSBvbiB0aGUgZGF0YSBBQ3MgKEJLL0JFL1ZJL1ZPKTogb25jZSB0aGUgRklGTyBmaWxscyBwYXN0XG4mIzQzO1x0ICogdGhlIGhpZ2ggd2F0ZXJtYXJrLCBzdG9wIHRoZSBjb3JyZXNwb25kaW5nIG1hYzgwMjExIHF1ZXVlIHNvIGl0IHN0b3BzXG4mIzQzO1x0ICogaGFuZGluZyB1cyBmcmFtZXMsIGJvdW5kaW5nIHRoZSBxdWV1ZWluZyBsYXRlbmN5LiBSZXN1bWVkIGZyb20gdGhlIFRYXG4mIzQzO1x0ICogZHJhaW4gcGF0aCBvbmNlIHRoZSBGSUZPIGRyYWlucyBiZWxvdyB0aGUgbG93IHdhdGVybWFyay5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpIFx1MDAyNlx1MDAyNiBxdWV1ZSBcdTAwM2MgUlRXX1RYX1FVRVVFX0JDTiBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIXJ0d3NkaW8tXHUwMDNlcXVldWVfc3RvcHBlZFtxdWV1ZV0gXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHNrYl9xdWV1ZV9sZW4oXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtxdWV1ZV0pIFx1MDAzZT0gUlRXX1NESU9fVFhfRklGT19ISVdBVEVSKSB7XG4mIzQzO1x0XHRydHdzZGlvLVx1MDAzZXF1ZXVlX3N0b3BwZWRbcXVldWVdID0gdHJ1ZTtcbiYjNDM7XHRcdGllZWU4MDIxMV9zdG9wX3F1ZXVlKHJ0d2Rldi1cdTAwM2Vodywgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMTA5NSw2ICYjNDM7MTM2MiwxNCBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19oYW5kbGVfaW50ZXJydXB0KHN0cnVjdCBzZGlvX2Z1bmMgKnNkaW9fZnVuYylcbiBcdFx0cnR3X3NkaW9fcnhfaXNyKHJ0d2Rldik7XG4gXHR9XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBSVEw4NzIzQlMga2VlcHMgcmFpc2luZyB0aGUgaW50ZXJydXB0IGFmdGVyIHJlc3VtZSBpZiB1bmRlZmluZWRcbiYjNDM7XHQgKiBzdGF0dXMgYml0cyBhcmUgd3JpdHRlbiBiYWNrLCBzbyBhY2tub3dsZWRnZSBvbmx5IHRoZSBiaXRzIHRoYXQgYXJlXG4mIzQzO1x0ICogYm90aCBkZWZpbmVkIGFuZCB1bm1hc2tlZC4gT3RoZXIgY2hpcHMga2VlcCB0aGUgZXhpc3RpbmcgYmVoYXZpb3VyLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpXG4mIzQzO1x0XHRoaXNyIFx1MDAyNj0gcnR3c2Rpby1cdTAwM2VpcnFfbWFzayBcdTAwMjYgUlRXX1NESU9fSElTUl9DTEVBUl9NQVNLO1xuJiM0MztcbiBcdHJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1NESU9fSElTUiwgaGlzcik7XG4gXG4gXHRydHdzZGlvLVx1MDAzZWlycV90aHJlYWQgPSBOVUxMO1xuQEAgLTEyMzEsNDMgJiM0MzsxNTA2LDkyIEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2luZGljYXRlX3R4X3N0YXR1cyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuIFx0aWVlZTgwMjExX3R4X3N0YXR1c19pcnFzYWZlKGh3LCBza2IpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4tXHRcdFx0XHQgICAgICBlbnVtIHJ0d190eF9xdWV1ZV90eXBlIHF1ZXVlKVxuJiM0MzsvKlxuJiM0MzsgKiBTZW5kIG9uZSBmcmFtZSBmcm9tIEBxdWV1ZS4gUmV0dXJucyAxIHdoZW4gYSBmcmFtZSB3YXMgd3JpdHRlbiwgMCB3aGVuIHRoZVxuJiM0MzsgKiBxdWV1ZSB3YXMgZW1wdHkgYW5kIGEgbmVnYXRpdmUgZXJybm8gd2hlbiB0aGUgd3JpdGUgZmFpbGVkLCBpbiB3aGljaCBjYXNlXG4mIzQzOyAqIHRoZSBmcmFtZSBpcyBwdXQgYmFjayBhdCB0aGUgaGVhZCBvZiB0aGUgcXVldWUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcbiYjNDM7XHRcdFx0XHQgICAgIGVudW0gcnR3X3R4X3F1ZXVlX3R5cGUgcXVldWUpXG4ge1xuIFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiYjNDM7XHR1MTYgcV9tYXA7XG4gXHRpbnQgcmV0O1xuIFxuIFx0c2tiID0gc2tiX2RlcXVldWUoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtxdWV1ZV0pO1xuIFx0aWYgKCFza2IpXG4tXHRcdHJldHVybjtcbiYjNDM7XHRcdHJldHVybiAwO1xuIFxuJiM0MztcdHFfbWFwID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7XG4gXHRyZXQgPSBydHdfc2Rpb193cml0ZV9wb3J0KHJ0d2Rldiwgc2tiLCBxdWV1ZSk7XG4gXHRpZiAocmV0KSB7XG4gXHRcdHNrYl9xdWV1ZV9oZWFkKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfcXVldWVbcXVldWVdLCBza2IpO1xuLVx0XHRyZXR1cm47XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFxuIFx0cnR3X3NkaW9faW5kaWNhdGVfdHhfc3RhdHVzKHJ0d2Rldiwgc2tiKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSBcdTAwMjZcdTAwMjYgcXVldWUgXHUwMDNjIFJUV19UWF9RVUVVRV9CQ04gXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHJ0d3NkaW8tXHUwMDNlcXVldWVfc3RvcHBlZFtxdWV1ZV0gXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHNrYl9xdWV1ZV9sZW4oXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtxdWV1ZV0pIFx1MDAzYz1cbiYjNDM7XHQgICAgUlRXX1NESU9fVFhfRklGT19MT1dBVEVSKSB7XG4mIzQzO1x0XHRydHdzZGlvLVx1MDAzZXF1ZXVlX3N0b3BwZWRbcXVldWVdID0gZmFsc2U7XG4mIzQzO1x0XHRpZWVlODAyMTFfd2FrZV9xdWV1ZShydHdkZXYtXHUwMDNlaHcsIHFfbWFwKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAxO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBydHdfc2Rpb190eF9oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4gXHRzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhICp3b3JrX2RhdGEgPVxuLVx0XHRjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJ0d19zZGlvX3dvcmtfZGF0YSwgd29yayk7XG4mIzQzO1x0XHRjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLCBzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhLFxuJiM0MztcdFx0XHQgICAgIHdvcmspO1xuIFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvO1xuIFx0c3RydWN0IHJ0d19kZXYgKnJ0d2Rldjtcbi1cdGludCBsaW1pdCwgcXVldWU7XG4mIzQzO1x0aW50IGxpbWl0LCBxdWV1ZSwgcmV0O1xuJiM0MztcdGJvb2wgcnRsODcyM2JzO1xuIFxuIFx0cnR3ZGV2ID0gd29ya19kYXRhLVx1MDAzZXJ0d2RldjtcbiBcdHJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4mIzQzO1x0cnRsODcyM2JzID0gcnR3X2lzXzg3MjNicyhydHdkZXYpO1xuIFxuIFx0aWYgKCFydHdfZndfZmVhdHVyZV9jaGVjayhcdTAwMjZydHdkZXYtXHUwMDNlZncsIEZXX0ZFQVRVUkVfVFhfV0FLRSkpXG4gXHRcdHJ0d19zZGlvX2RlZXBfcHNfbGVhdmUocnR3ZGV2KTtcbiBcbiBcdGZvciAocXVldWUgPSBSVEtfTUFYX1RYX1FVRVVFX05VTSAtIDE7IHF1ZXVlIFx1MDAzZT0gMDsgcXVldWUtLSkge1xuIFx0XHRmb3IgKGxpbWl0ID0gMDsgbGltaXQgXHUwMDNjIDEwMDA7IGxpbWl0JiM0MzsmIzQzOykge1xuLVx0XHRcdHJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWUocnR3ZGV2LCBxdWV1ZSk7XG4mIzQzO1x0XHRcdHJldCA9IHJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWUocnR3ZGV2LCBxdWV1ZSk7XG4mIzQzO1x0XHRcdGlmIChyZXQgPT0gMClcbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbiYjNDM7XHRcdFx0XHQvKlxuJiM0MztcdFx0XHRcdCAqIEEgcGFnZSBzaG9ydGFnZSBpcyB0cmFuc2llbnQ6IGxlYXZlIHRoZVxuJiM0MztcdFx0XHRcdCAqIGZyYW1lIHF1ZXVlZCBhbmQgY29tZSBiYWNrIHNob3J0bHkgaW5zdGVhZFxuJiM0MztcdFx0XHRcdCAqIG9mIHN0YWxsaW5nIHRoaXMgQUMgdW50aWwgc29tZXRoaW5nIGVsc2VcbiYjNDM7XHRcdFx0XHQgKiBraWNrcyB0aGUgd29ya2VyLlxuJiM0MztcdFx0XHRcdCAqL1xuJiM0MztcdFx0XHRcdGlmIChydGw4NzIzYnMgXHUwMDI2XHUwMDI2IHJldCA9PSAtRUJVU1kpIHtcbiYjNDM7XHRcdFx0XHRcdHF1ZXVlX2RlbGF5ZWRfd29yayhydHdzZGlvLVx1MDAzZXR4d3EsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgXHUwMDI2d29ya19kYXRhLVx1MDAzZXdvcmssXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgUlRXX1NESU9fVFhfUkVUUllfREVMQVkpO1xuJiM0MztcdFx0XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0XHRcdH1cbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogUmVzdGFydCBmcm9tIHRoZSBoaWdoZXN0IHByaW9yaXR5IHF1ZXVlIGFmdGVyIGV2ZXJ5XG4mIzQzO1x0XHRcdCAqIG1hbmFnZW1lbnQgZnJhbWUgc28gdGhlIGpvaW4gc2VxdWVuY2UgaXMgbm90IGhlbGQgdXBcbiYjNDM7XHRcdFx0ICogYmVoaW5kIGEgZGF0YSBiYWNrbG9nLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0aWYgKHJ0bDg3MjNicyBcdTAwMjZcdTAwMjYgcXVldWUgPT0gUlRXX1RYX1FVRVVFX01HTVQpIHtcbiYjNDM7XHRcdFx0XHRxdWV1ZV9kZWxheWVkX3dvcmsocnR3c2Rpby1cdTAwM2V0eHdxLFxuJiM0MztcdFx0XHRcdFx0XHQgICBcdTAwMjZ3b3JrX2RhdGEtXHUwMDNld29yaywgMCk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0XHR9XG4gXG4gXHRcdFx0aWYgKHNrYl9xdWV1ZV9lbXB0eShcdTAwMjZydHdzZGlvLVx1MDAzZXR4X3F1ZXVlW3F1ZXVlXSkpXG4gXHRcdFx0XHRicmVhaztcbkBAIC0xMjk0LDE0ICYjNDM7MTYxOCwxNiBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX2luaXRfdHgoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBSVEtfTUFYX1RYX1FVRVVFX05VTTsgaSYjNDM7JiM0MzspXG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgUlRLX01BWF9UWF9RVUVVRV9OVU07IGkmIzQzOyYjNDM7KSB7XG4gXHRcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtpXSk7XG4mIzQzO1x0XHRydHdzZGlvLVx1MDAzZXF1ZXVlX3N0b3BwZWRbaV0gPSBmYWxzZTtcbiYjNDM7XHR9XG4gXHRydHdzZGlvLVx1MDAzZXR4X2hhbmRsZXJfZGF0YSA9IGttYWxsb2Nfb2JqKCpydHdzZGlvLVx1MDAzZXR4X2hhbmRsZXJfZGF0YSk7XG4gXHRpZiAoIXJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhKVxuIFx0XHRnb3RvIGVycl9kZXN0cm95X3dxO1xuIFxuIFx0cnR3c2Rpby1cdTAwM2V0eF9oYW5kbGVyX2RhdGEtXHUwMDNlcnR3ZGV2ID0gcnR3ZGV2O1xuLVx0SU5JVF9XT1JLKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhLVx1MDAzZXdvcmssIHJ0d19zZGlvX3R4X2hhbmRsZXIpO1xuJiM0MztcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhLVx1MDAzZXdvcmssIHJ0d19zZGlvX3R4X2hhbmRsZXIpO1xuIFxuIFx0cmV0dXJuIDA7XG4gXG5AQCAtMTMxNSw2ICYjNDM7MTY0MSw3IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2RlaW5pdF90eChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuIFx0aW50IGk7XG4gXG4mIzQzO1x0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhLVx1MDAzZXdvcmspO1xuIFx0ZGVzdHJveV93b3JrcXVldWUocnR3c2Rpby1cdTAwM2V0eHdxKTtcbiBcdGtmcmVlKHJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oXG5pbmRleCA0NTdlOGIwMjM4MGU1Li4yZjFiNjdmNGJiYzdjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oXG5AQCAtMjIsNiAmIzQzOzIyLDcgQEBcbiBcbiAvKiBTRElPIFR4IENvbnRyb2wgKi9cbiAjZGVmaW5lIFJFR19TRElPX1RYX0NUUkxcdFx0XHQoU0RJT19MT0NBTF9PRkZTRVQgJiM0MzsgMHgwMDAwKVxuJiM0MzsjZGVmaW5lIEJJVF9TRElPX1RYX0NUUkxfQUxXQVlTX1JFQ09HTklaRVx0QklUKDQpXG4gXG4gLypTRElPIHN0YXR1cyB0aW1lb3V0Ki9cbiAjZGVmaW5lIFJFR19TRElPX1RJTUVPVVRcdFx0XHQoU0RJT19MT0NBTF9PRkZTRVQgJiM0MzsgMHgwMDAyKVxuQEAgLTc3LDYgJiM0Mzs3OCwxNCBAQFxuIC8qIHRoZSBmb2xsb3dpbmcgdHdvIGFyZSBSVEw4MTg4IFNESU8gU3BlY2lmaWMgKi9cbiAjZGVmaW5lIFJFR19TRElPX0hJU1JfTUNVX0VSUlx0XHRcdEJJVCgyOClcbiAjZGVmaW5lIFJFR19TRElPX0hJU1JfVFNGX0JJVDMyX1RPR0dMRVx0XHRCSVQoMjkpXG4mIzQzOyNkZWZpbmUgUlRXX1NESU9fSElTUl9DTEVBUl9NQVNLXHRcdFxcXG4mIzQzO1x0KFJFR19TRElPX0hJU1JfVFhFUlIgfCBSRUdfU0RJT19ISVNSX1JYRVJSIHwgXFxcbiYjNDM7XHQgUkVHX1NESU9fSElTUl9UWEZPVlcgfCBSRUdfU0RJT19ISVNSX1JYRk9WVyB8IFxcXG4mIzQzO1x0IFJFR19TRElPX0hJU1JfVFhCQ05PSyB8IFJFR19TRElPX0hJU1JfVFhCQ05FUlIgfCBcXFxuJiM0MztcdCBSRUdfU0RJT19ISVNSX0MySENNRCB8IFJFR19TRElPX0hJU1JfQ1BXTTEgfCBcXFxuJiM0MztcdCBSRUdfU0RJT19ISVNSX0NQV00yIHwgUkVHX1NESU9fSElTUl9IU0lTUl9JTkQgfCBcXFxuJiM0MztcdCBSRUdfU0RJT19ISVNSX0dUSU5UM19JTkQgfCBSRUdfU0RJT19ISVNSX0dUSU5UNF9JTkQgfCBcXFxuJiM0MztcdCBSRUdfU0RJT19ISVNSX1BTVElNRU9VVCB8IFJFR19TRElPX0hJU1JfT0NQSU5UKVxuIFxuIC8qIEhDSSBDdXJyZW50IFBvd2VyIE1vZGUgKi9cbiAjZGVmaW5lIFJFR19TRElPX0hDUFdNXHRcdFx0XHQoU0RJT19MT0NBTF9PRkZTRVQgJiM0MzsgMHgwMDE5KVxuQEAgLTg2LDYgJiM0Mzs5NSwxMCBAQFxuICNkZWZpbmUgUkVHX1NESU9fT1FUX0ZSRUVfUEdcdFx0XHQoU0RJT19MT0NBTF9PRkZTRVQgJiM0MzsgMHgwMDFFKVxuIC8qIEZyZWUgVHggQnVmZmVyIFBhZ2UgKi9cbiAjZGVmaW5lIFJFR19TRElPX0ZSRUVfVFhQR1x0XHRcdChTRElPX0xPQ0FMX09GRlNFVCAmIzQzOyAweDAwMjApXG4mIzQzOyNkZWZpbmUgQklUX0ZSRUVfVFhQR19ISUdIXHRcdFx0R0VOTUFTSyg3LCAwKVxuJiM0MzsjZGVmaW5lIEJJVF9GUkVFX1RYUEdfTk9STUFMXHRcdFx0R0VOTUFTSygxNSwgOClcbiYjNDM7I2RlZmluZSBCSVRfRlJFRV9UWFBHX0xPV1x0XHRcdEdFTk1BU0soMjMsIDE2KVxuJiM0MzsjZGVmaW5lIEJJVF9GUkVFX1RYUEdfUFVCXHRcdFx0R0VOTUFTSygzMSwgMjQpXG4gLyogSENJIEN1cnJlbnQgUG93ZXIgTW9kZSAxICovXG4gI2RlZmluZSBSRUdfU0RJT19IQ1BXTTFcdFx0XHRcdChTRElPX0xPQ0FMX09GRlNFVCAmIzQzOyAweDAwMjQpXG4gLyogSENJIEN1cnJlbnQgUG93ZXIgTW9kZSAyICovXG5AQCAtMTQzLDcgJiM0MzsxNTYsNyBAQCBzdHJ1Y3QgcnR3X3NkaW9fdHhfZGF0YSB7XG4gfTtcbiBcbiBzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhIHtcbi1cdHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrO1xuJiM0MztcdHN0cnVjdCBkZWxheWVkX3dvcmsgd29yaztcbiBcdHN0cnVjdCBydHdfZGV2ICpydHdkZXY7XG4gfTtcbiBcbkBAIC0xNTksNiAmIzQzOzE3MiwxMyBAQCBzdHJ1Y3QgcnR3X3NkaW8ge1xuIFx0c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnR4d3E7XG4gXHRzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhICp0eF9oYW5kbGVyX2RhdGE7XG4gXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHR4X3F1ZXVlW1JUS19NQVhfVFhfUVVFVUVfTlVNXTtcbiYjNDM7XHRib29sIHF1ZXVlX3N0b3BwZWRbUlRLX01BWF9UWF9RVUVVRV9OVU1dO1xuJiM0MztcbiYjNDM7XHRhdG9taWNfdCBmcmVlX3BnX2hpZ2g7XG4mIzQzO1x0YXRvbWljX3QgZnJlZV9wZ19ub3JtYWw7XG4mIzQzO1x0YXRvbWljX3QgZnJlZV9wZ19sb3c7XG4mIzQzO1x0YXRvbWljX3QgZnJlZV9wZ19wdWI7XG4mIzQzO1x0YXRvbWljX3QgdHhfb3F0X2ZyZWU7XG4gfTtcbiBcbiBleHRlcm4gY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgcnR3X3NkaW9fcG1fb3BzO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvdHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvdHguY1xuaW5kZXggODc4NmJiYjQyMWMyYi4uNGUxMTBhNDU3ZTcxZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvdHguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC90eC5jXG5AQCAtMjA4LDggJiM0MzsyMDgsOSBAQCB2b2lkIHJ0d190eF9yZXBvcnRfZW5xdWV1ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBzbilcbiBcdF9fc2tiX3F1ZXVlX3RhaWwoXHUwMDI2dHhfcmVwb3J0LVx1MDAzZXF1ZXVlLCBza2IpO1xuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ0eF9yZXBvcnQtXHUwMDNlcV9sb2NrLCBmbGFncyk7XG4gXG4tXHRpZiAocnR3ZGV2LVx1MDAzZWNoaXAtXHUwMDNlaWQgPT0gUlRXX0NISVBfVFlQRV84NzIzRCBcdTAwMjZcdTAwMjZcbi1cdCAgICBydHdkZXYtXHUwMDNlaGNpLnR5cGUgPT0gUlRXX0hDSV9UWVBFX1VTQilcbiYjNDM7XHRpZiAoKHJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZWlkID09IFJUV19DSElQX1RZUEVfODcyM0QgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICBydHdkZXYtXHUwMDNlaGNpLnR5cGUgPT0gUlRXX0hDSV9UWVBFX1VTQikgfHxcbiYjNDM7XHQgICAgcnR3X2lzXzg3MjNicyhydHdkZXYpKVxuIFx0XHR0aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcygyNTAwKTtcbiBcbiBcdG1vZF90aW1lcihcdTAwMjZ0eF9yZXBvcnQtXHUwMDNlcHVyZ2VfdGltZXIsIGppZmZpZXMgJiM0MzsgdGltZW91dCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6NTE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGV4Y2x1c2l2ZWx5IGFkZHMgc3VwcG9ydCBhbmQgZml4ZXMgZm9yIHRoZSBSZWFsdGVrIFJUTDg3MjNCUyBTRElPIFdpRmkgY2hpcC4gU0RJTyBkZXZpY2VzIHJlcXVpcmUgcGh5c2ljYWwgaGFyZHdhcmUgb3Igc3BlY2lmaWMgUUVNVSBtYWNoaW5lIGVtdWxhdGlvbiB3aGljaCBpcyBub3QgYXZhaWxhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiBUaGVyZSBpcyBubyBzb2Z0d2FyZSBTRElPIGVtdWxhdGlvbiBmcmFtZXdvcmsgKGxpa2UgZHVtbXlfaGNkIGZvciBVU0IpIHRvIHJlYWNoIHRoZXNlIGNvZGUgcGF0aHMgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTQxODI1NjE3ODQ0ZWE1MzkxZjA1Y2U0NDhmODY5Mzk1YjBlMGNhOApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDExIDA5OjUxOjQ5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9mdy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9mdy5jCmluZGV4IDk0NWZlZGNkMzc1YjYuLmM4NWMwZTNlNjBhOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvZncuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2Z3LmMKQEAgLTMxNyw2ICYjNDM7MzE3LDE1IEBAIHZvaWQgcnR3X2Z3X2MyaF9jbWRfaGFuZGxlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHN0cnVjdCBza19idWZmICpza2IpCiAJY2FzZSBDMkhfQ0NYX1RYX1JQVDoKIAkJcnR3X3R4X3JlcG9ydF9oYW5kbGUocnR3ZGV2LCBza2IsIEMySF9DQ1hfVFhfUlBUKTsKIAkJYnJlYWs7CiYjNDM7CWNhc2UgQzJIX1ZFTkRPUl9UWF9SUFQ6CiYjNDM7CWNhc2UgQzJIX1dMQU5fUkZPTjoKJiM0MzsJCS8qCiYjNDM7CQkgKiBUaGUgUlRMODcyM0JTIGZpcm13YXJlIHJlcG9ydHMgbWFuYWdlbWVudCBUWCB0aHJvdWdoIHRoZXNlCiYjNDM7CQkgKiB0d28gZXZlbnRzIGluc3RlYWQsIHVzaW5nIHRoZSBzYW1lIHBheWxvYWQgbGF5b3V0LgomIzQzOwkJICovCiYjNDM7CQlpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKQomIzQzOwkJCXJ0d190eF9yZXBvcnRfaGFuZGxlKHJ0d2Rldiwgc2tiLCBDMkhfQ0NYX1RYX1JQVCk7CiYjNDM7CQlicmVhazsKIAljYXNlIEMySF9CVF9JTkZPOgogCQlydHdfY29leF9idF9pbmZvX25vdGlmeShydHdkZXYsIGMyaC0mZ3Q7cGF5bG9hZCwgbGVuKTsKIAkJYnJlYWs7CkBAIC0zNjUsNiAmIzQzOzM3NCwxNyBAQCB2b2lkIHJ0d19md19jMmhfY21kX3J4X2lycXNhZmUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTMyIHBrdF9vZmZzZXQsCiAJCXJ0d19jb2V4X2luZm9fcmVzcG9uc2UocnR3ZGV2LCBza2IpOwogCQlicmVhazsKIAljYXNlIEMySF9XTEFOX1JGT046CiYjNDM7CQkvKgomIzQzOwkJICogT24gODcyM0JTIFNESU8gd2l0aCB2NDEgZmlybXdhcmUsIEMySCAweDMyIGNhcnJpZXMgYSBzY2FuIFRYCiYjNDM7CQkgKiByZXBvcnQsIG5vdCBhIFdMQU5fUkZPTiBldmVudDogZGVmZXIgaXQgdG8KJiM0MzsJCSAqIHJ0d19md19jMmhfY21kX2hhbmRsZSgpLgomIzQzOwkJICovCiYjNDM7CQlpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKSB7CiYjNDM7CQkJKigodTMyICopc2tiLSZndDtjYikgPSBwa3Rfb2Zmc2V0OwomIzQzOwkJCXNrYl9xdWV1ZV90YWlsKCZhbXA7cnR3ZGV2LSZndDtjMmhfcXVldWUsIHNrYik7CiYjNDM7CQkJaWVlZTgwMjExX3F1ZXVlX3dvcmsocnR3ZGV2LSZndDtodywgJmFtcDtydHdkZXYtJmd0O2MyaF93b3JrKTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KIAkJY29tcGxldGUoJmFtcDtydHdkZXYtJmd0O2xwc19sZWF2ZV9jaGVjayk7CiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9mdy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9mdy5oCmluZGV4IDQ4YWQ5Y2VhYjZlYTEuLmJkZGE3OGRjNjQ2MmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvZncuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2Z3LmgKQEAgLTU0LDYgJiM0Mzs1NCwxMSBAQCBlbnVtIHJ0d19jMmhfY21kX2lkIHsKIAlDMkhfQlRfTVBfSU5GTyA9IDB4MGIsCiAJQzJIX0JUX0hJRF9JTkZPID0gMHg0NSwKIAlDMkhfUkFfUlBUID0gMHgwYywKJiM0MzsJLyoKJiM0MzsJICogODcyM0JTIFNESU8gdmVuZG9yIHY0MSBmaXJtd2FyZSBtYW5hZ2VtZW50IFRYIHJlcG9ydCAoMHgzMiBpcwomIzQzOwkgKiByZXBvcnRlZCBhcyBDMkhfV0xBTl9SRk9OLCBoYW5kbGVkIHBlci1jaGlwIGluIHRoZSBDMkggZGlzcGF0Y2gpLgomIzQzOwkgKi8KJiM0MzsJQzJIX1ZFTkRPUl9UWF9SUFQgPSAweDEyLAogCUMySF9IV19GRUFUVVJFX1JFUE9SVCA9IDB4MTksCiAJQzJIX1dMQU5fSU5GTyA9IDB4MjcsCiAJQzJIX1dMQU5fUkZPTiA9IDB4MzIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oCmluZGV4IGM2ZTk4MWJhNzk4NjguLjhmODZmN2MxMmRlNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oCkBAIC0xOTQsNiAmIzQzOzE5NCw3IEBAIGVudW0gcnR3X2NoaXBfdHlwZSB7CiAJUlRXX0NISVBfVFlQRV84NzIzRCwKIAlSVFdfQ0hJUF9UWVBFXzg4MjFDLAogCVJUV19DSElQX1RZUEVfODcwM0IsCiYjNDM7CVJUV19DSElQX1RZUEVfODcyM0IsCiAJUlRXX0NISVBfVFlQRV84ODIxQSwKIAlSVFdfQ0hJUF9UWVBFXzg4MTJBLAogCVJUV19DSElQX1RZUEVfODgxNEEsCkBAIC0yMTk0LDYgJiM0MzsyMTk1LDEyIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBydHdfY2hpcF9oYXNfdHhfc3RiYyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KQogCXJldHVybiBydHdkZXYtJmd0O2NoaXAtJmd0O3R4X3N0YmM7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgcnR3X2lzXzg3MjNicyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KQomIzQzO3sKJiM0MzsJcmV0dXJuIHJ0d2Rldi0mZ3Q7Y2hpcC0mZ3Q7aWQgPT0gUlRXX0NISVBfVFlQRV84NzIzQiAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICBydHdkZXYtJmd0O2hjaS50eXBlID09IFJUV19IQ0lfVFlQRV9TRElPOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgdTggcnR3X2FjcXVpcmVfbWFjaWQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKIHsKIAl1bnNpZ25lZCBsb25nIG1hY19pZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnguYwppbmRleCAwMWZkMjk5YWJiN2ZlLi5hOTM2MWVmNGI5M2MwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9yeC5jCkBAIC0yNTMsMTAgJiM0MzsyNTMsMTIgQEAgc3RhdGljIHZvaWQgcnR3X3J4X2ZpbGxfcnhfc3RhdHVzKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsCiAKIAlydHdfcnhfYWRkcl9tYXRjaChydHdkZXYsIHBrdF9zdGF0LCBoZHIpOwogCi0JLyogUnRsODcyM2NzIGRyaXZlciBjaGVja3MgZm9yIHNpemUgJmx0OyAxNCBvciBzaXplICZndDsgODE5MiBhbmQKLQkgKiBzaW1wbHkgZHJvcHMgdGhlIHBhY2tldC4KJiM0MzsJLyoKJiM0MzsJICogUnRsODcyM2NzIGFuZCBydGw4NzIzYnMgZHJpdmVycyBjaGVjayBmb3Igc2l6ZSAmbHQ7IDE0IG9yIHNpemUgJmd0OyA4MTkyCiYjNDM7CSAqIGFuZCBzaW1wbHkgZHJvcCB0aGUgcGFja2V0LgogCSAqLwotCWlmIChydHdkZXYtJmd0O2NoaXAtJmd0O2lkID09IFJUV19DSElQX1RZUEVfODcwM0IgJmFtcDsmYW1wOyBwa3Rfc3RhdC0mZ3Q7cGt0X2xlbiA9PSAwKSB7CiYjNDM7CWlmICgocnR3ZGV2LSZndDtjaGlwLSZndDtpZCA9PSBSVFdfQ0hJUF9UWVBFXzg3MDNCIHx8IHJ0d19pc184NzIzYnMocnR3ZGV2KSkgJmFtcDsmYW1wOwomIzQzOwkgICAgcGt0X3N0YXQtJmd0O3BrdF9sZW4gPT0gMCkgewogCQlyeF9zdGF0dXMtJmd0O2ZsYWcgfD0gUlhfRkxBR19OT19QU0RVOwogCQlydHdfZGJnKHJ0d2RldiwgUlRXX0RCR19SWCwgJiMzNDt6ZXJvIGxlbmd0aCBwYWNrZXQmIzM0Oyk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uYwppbmRleCA1YjQwZDc0YjE2ZWUwLi5lZDFiZWQ4ZWExNDRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uYwpAQCAtMjAsNiAmIzQzOzIwLDE3IEBACiAjaW5jbHVkZSAmIzM0O3R4LmgmIzM0OwogCiAjZGVmaW5lIFJUV19TRElPX0lORElSRUNUX1JXX1JFVFJJRVMJCQk1MAomIzQzOyNkZWZpbmUgUlRXX1NESU9fT1FUX1RJTUVPVVRfTVMJCQkJMTAwMAomIzQzOwomIzQzOy8qCiYjNDM7ICogODcyM0JTIFNESU8gVFggRklGTyBiYWNrLXByZXNzdXJlIHdhdGVybWFya3M6IHN0b3AgdGhlIG1hYzgwMjExIHF1ZXVlIG9uY2UKJiM0MzsgKiB0aGUgcGVyLUFDIHNvZnR3YXJlIEZJRk8gZmlsbHMgcGFzdCB0aGUgaGlnaCB3YXRlcm1hcmssIGFuZCB3YWtlIGl0IGZyb20gdGhlCiYjNDM7ICogVFggZHJhaW4gcGF0aCBvbmNlIGl0IGZhbGxzIGJhY2sgdG8gdGhlIGxvdyBvbmUuIEJvdW5kcyB0aGUgcXVldWVpbmcgbGF0ZW5jeQomIzQzOyAqIHRoYXQgb3RoZXJ3aXNlIGNhdXNlcyB1cGxpbmsgYnVmZmVyYmxvYXQgLyBjb25nZXN0aW9uIGNvbGxhcHNlLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgUlRXX1NESU9fVFhfRklGT19ISVdBVEVSCQkJMTYKJiM0MzsjZGVmaW5lIFJUV19TRElPX1RYX0ZJRk9fTE9XQVRFUgkJCTgKJiM0MzsjZGVmaW5lIFJUV19TRElPX1RYX1JFVFJZX0RFTEFZCQkJbXNlY3NfdG9famlmZmllcygxKQogCiBzdGF0aWMgYm9vbCBydHdfc2Rpb19pc19idXNfYWRkcih1MzIgYWRkcikKIHsKQEAgLTU0OCwxMiAmIzQzOzU1OSwxMjIgQEAgc3RhdGljIGludCBydHdfc2Rpb19yZWFkX3BvcnQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggKmJ1Ziwgc2l6ZV90IGNvdW50KQogCXJldHVybiByZXQ7CiB9CiAKJiM0MzsvKgomIzQzOyAqIFRoZSBjYWNoZWQgZnJlZSBwYWdlIGNvdW50ZXJzIGFyZSBhIGZhc3QgcGF0aCBoaW50IG9ubHkuIFRoZXkgYXJlIHdyaXR0ZW4KJiM0MzsgKiBmcm9tIHRoZSBzaW5nbGUgdGhyZWFkZWQgVFggd29yayBhbmQsIGZvciBIMkMgYW5kIHJlc2VydmVkIHBhZ2Ugd3JpdGVzLAomIzQzOyAqIGZyb20gcHJvY2VzcyBjb250ZXh0LCBzbyB0aGV5IGFyZSBhdG9taWNfdDsgd2hlbmV2ZXIgdGhleSBjbGFpbSB0aGVyZSBpcwomIzQzOyAqIG5vdCBlbm91Z2ggcm9vbSB0aGV5IGFyZSByZXN5bmNocm9uaXNlZCBmcm9tIHRoZSBjaGlwIGJlZm9yZSB0aGUgY2FsbGVyCiYjNDM7ICogZ2l2ZXMgdXAsIHdoaWNoIGFsc28gYWJzb3JicyBhIGxvc3QgdXBkYXRlLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHJ0d19zZGlvXzg3MjNic19zdG9yZV9mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwKJiM0MzsJCQkJCSAgICB1MzIgZnJlZV90eHBnKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi0mZ3Q7cHJpdjsKJiM0MzsKJiM0MzsJYXRvbWljX3NldCgmYW1wO3J0d3NkaW8tJmd0O2ZyZWVfcGdfaGlnaCwKJiM0MzsJCSAgIHUzMl9nZXRfYml0cyhmcmVlX3R4cGcsIEJJVF9GUkVFX1RYUEdfSElHSCkpOwomIzQzOwlhdG9taWNfc2V0KCZhbXA7cnR3c2Rpby0mZ3Q7ZnJlZV9wZ19ub3JtYWwsCiYjNDM7CQkgICB1MzJfZ2V0X2JpdHMoZnJlZV90eHBnLCBCSVRfRlJFRV9UWFBHX05PUk1BTCkpOwomIzQzOwlhdG9taWNfc2V0KCZhbXA7cnR3c2Rpby0mZ3Q7ZnJlZV9wZ19sb3csCiYjNDM7CQkgICB1MzJfZ2V0X2JpdHMoZnJlZV90eHBnLCBCSVRfRlJFRV9UWFBHX0xPVykpOwomIzQzOwlhdG9taWNfc2V0KCZhbXA7cnR3c2Rpby0mZ3Q7ZnJlZV9wZ19wdWIsCiYjNDM7CQkgICB1MzJfZ2V0X2JpdHMoZnJlZV90eHBnLCBCSVRfRlJFRV9UWFBHX1BVQikpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfaW5pdF9mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtJmd0O3ByaXY7CiYjNDM7CWNvbnN0IHN0cnVjdCBydHdfcGFnZV90YWJsZSAqcGdfdGJsOwomIzQzOwl1MzIgZnJlZV90eHBnOwomIzQzOwl1MTYgcHVicV9udW07CiYjNDM7CiYjNDM7CWZyZWVfdHhwZyA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19GUkVFX1RYUEcpOwomIzQzOwlpZiAoZnJlZV90eHBnKSB7CiYjNDM7CQlydHdfc2Rpb184NzIzYnNfc3RvcmVfZnJlZV90eHBnKHJ0d2RldiwgZnJlZV90eHBnKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXBnX3RibCA9ICZhbXA7cnR3ZGV2LSZndDtjaGlwLSZndDtwYWdlX3RhYmxlWzBdOwomIzQzOwkJcHVicV9udW0gPSBydHdkZXYtJmd0O2ZpZm8uYWNxX3BnX251bSAtIHBnX3RibC0mZ3Q7aHFfbnVtIC0KJiM0MzsJCQkgICBwZ190YmwtJmd0O2xxX251bSAtIHBnX3RibC0mZ3Q7bnFfbnVtIC0gcGdfdGJsLSZndDtleHFfbnVtIC0KJiM0MzsJCQkgICBwZ190YmwtJmd0O2dhcHFfbnVtOwomIzQzOwomIzQzOwkJYXRvbWljX3NldCgmYW1wO3J0d3NkaW8tJmd0O2ZyZWVfcGdfaGlnaCwgcGdfdGJsLSZndDtocV9udW0pOwomIzQzOwkJYXRvbWljX3NldCgmYW1wO3J0d3NkaW8tJmd0O2ZyZWVfcGdfbm9ybWFsLCBwZ190YmwtJmd0O25xX251bSk7CiYjNDM7CQlhdG9taWNfc2V0KCZhbXA7cnR3c2Rpby0mZ3Q7ZnJlZV9wZ19sb3csIHBnX3RibC0mZ3Q7bHFfbnVtKTsKJiM0MzsJCWF0b21pY19zZXQoJmFtcDtydHdzZGlvLSZndDtmcmVlX3BnX3B1YiwgcHVicV9udW0pOwomIzQzOwl9CiYjNDM7CiYjNDM7CWF0b21pY19zZXQoJmFtcDtydHdzZGlvLSZndDt0eF9vcXRfZnJlZSwKJiM0MzsJCSAgIHJ0d19yZWFkOChydHdkZXYsIFJFR19TRElPX09RVF9GUkVFX1BHKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJ0d19zZGlvXzg3MjNic19zeW5jX2ZyZWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KQomIzQzO3sKJiM0MzsJdTMyIGZyZWVfdHhwZyA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19GUkVFX1RYUEcpOwomIzQzOwomIzQzOwlpZiAoZnJlZV90eHBnKQomIzQzOwkJcnR3X3NkaW9fODcyM2JzX3N0b3JlX2ZyZWVfdHhwZyhydHdkZXYsIGZyZWVfdHhwZyk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogU3VtIG9mIHRoZSBxdWV1ZSYjMzk7cyBkZWRpY2F0ZWQgY291bnRlciBhbmQgdGhlIHB1YmxpYyBwb29sLCBjbGFtcGVkIGF0IHplcm86CiYjNDM7ICogYSBsb3N0IHVwZGF0ZSBiZXR3ZWVuIHRoZSBjaGVjayBiZWxvdyBhbmQgcnR3X3NkaW9fODcyM2JzX2NvbnN1bWVfdHhwZygpCiYjNDM7ICogY2FuIGJyaWVmbHkgZHJpdmUgYSBjb3VudGVyIG5lZ2F0aXZlLCBhbmQgbGV0dGluZyB0aGF0IHdyYXAgd291bGQgaGlkZSB0aGUKJiM0MzsgKiBzaG9ydGFnZSBpbnN0ZWFkIG9mIHRyaWdnZXJpbmcgYSByZXN5bmMgZnJvbSB0aGUgY2hpcC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IHJ0d19zZGlvXzg3MjNic19wYWdlc19mcmVlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsCiYjNDM7CQkJCQkgICAgICAgYXRvbWljX3QgKmRlZGljYXRlZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtJmd0O3ByaXY7CiYjNDM7CWludCBmcmVlOwomIzQzOwomIzQzOwlmcmVlID0gYXRvbWljX3JlYWQoZGVkaWNhdGVkKSAmIzQzOyBhdG9taWNfcmVhZCgmYW1wO3J0d3NkaW8tJmd0O2ZyZWVfcGdfcHViKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGZyZWUgJmd0OyAwID8gZnJlZSA6IDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBhdG9taWNfdCAqcnR3X3NkaW9fODcyM2JzX2ZyZWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCBxdWV1ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtJmd0O3ByaXY7CiYjNDM7CiYjNDM7CXN3aXRjaCAocXVldWUpIHsKJiM0MzsJY2FzZSBSVFdfVFhfUVVFVUVfVkk6CiYjNDM7CQlyZXR1cm4gJmFtcDtydHdzZGlvLSZndDtmcmVlX3BnX25vcm1hbDsKJiM0MzsJY2FzZSBSVFdfVFhfUVVFVUVfQkU6CiYjNDM7CWNhc2UgUlRXX1RYX1FVRVVFX0JLOgomIzQzOwkJcmV0dXJuICZhbXA7cnR3c2Rpby0mZ3Q7ZnJlZV9wZ19sb3c7CiYjNDM7CWNhc2UgUlRXX1RYX1FVRVVFX0JDTjoKJiM0MzsJY2FzZSBSVFdfVFhfUVVFVUVfSDJDOgomIzQzOwljYXNlIFJUV19UWF9RVUVVRV9ISTA6CiYjNDM7CWNhc2UgUlRXX1RYX1FVRVVFX01HTVQ6CiYjNDM7CWNhc2UgUlRXX1RYX1FVRVVFX1ZPOgomIzQzOwkJcmV0dXJuICZhbXA7cnR3c2Rpby0mZ3Q7ZnJlZV9wZ19oaWdoOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHJ0d19zZGlvX2NoZWNrX2ZyZWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCBxdWV1ZSwKIAkJCQkgICAgc2l6ZV90IGNvdW50KQogewogCXVuc2lnbmVkIGludCBwYWdlc19mcmVlLCBwYWdlc19uZWVkZWQ7CiAKLQlpZiAocnR3X2NoaXBfd2NwdV84MDUxKHJ0d2RldikpIHsKJiM0MzsJaWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSkgewomIzQzOwkJYXRvbWljX3QgKmRlZGljYXRlZDsKJiM0MzsKJiM0MzsJCWRlZGljYXRlZCA9IHJ0d19zZGlvXzg3MjNic19mcmVlX3R4cGcocnR3ZGV2LCBxdWV1ZSk7CiYjNDM7CQlpZiAoIWRlZGljYXRlZCkgewomIzQzOwkJCXJ0d193YXJuKHJ0d2RldiwgJiMzNDtVbmtub3duIG1hcHBpbmcgZm9yIHF1ZXVlICV1XG4mIzM0OywgcXVldWUpOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwomIzQzOwkJcGFnZXNfZnJlZSA9IHJ0d19zZGlvXzg3MjNic19wYWdlc19mcmVlKHJ0d2RldiwgZGVkaWNhdGVkKTsKJiM0MzsJCXBhZ2VzX25lZWRlZCA9IERJVl9ST1VORF9VUChjb3VudCwgcnR3ZGV2LSZndDtjaGlwLSZndDtwYWdlX3NpemUpOwomIzQzOwkJaWYgKHBhZ2VzX25lZWRlZCAmbHQ7PSBwYWdlc19mcmVlKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwomIzQzOwkJcnR3X3NkaW9fODcyM2JzX3N5bmNfZnJlZV90eHBnKHJ0d2Rldik7CiYjNDM7CQlwYWdlc19mcmVlID0gcnR3X3NkaW9fODcyM2JzX3BhZ2VzX2ZyZWUocnR3ZGV2LCBkZWRpY2F0ZWQpOwomIzQzOwl9IGVsc2UgaWYgKHJ0d19jaGlwX3djcHVfODA1MShydHdkZXYpKSB7CiAJCXUzMiBmcmVlX3R4cGc7CiAKIAkJZnJlZV90eHBnID0gcnR3X3NkaW9fcmVhZDMyKHJ0d2RldiwgUkVHX1NESU9fRlJFRV9UWFBHKTsKQEAgLTYzMiw0NCAmIzQzOzc1MywxMjMgQEAgc3RhdGljIGludCBydHdfc2Rpb19jaGVja19mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggcXVldWUsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IHJ0d19zZGlvXzg3MjNic193YWl0X3R4X29xdChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi0mZ3Q7cHJpdjsKJiM0MzsJdTggZnJlZTsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWlmIChhdG9taWNfYWRkX3VubGVzcygmYW1wO3J0d3NkaW8tJmd0O3R4X29xdF9mcmVlLCAtMSwgMCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IFJUV19TRElPX09RVF9USU1FT1VUX01TOyBpJiM0MzsmIzQzOykgewomIzQzOwkJZnJlZSA9IHJ0d19yZWFkOChydHdkZXYsIFJFR19TRElPX09RVF9GUkVFX1BHKTsKJiM0MzsJCWlmIChmcmVlKSB7CiYjNDM7CQkJYXRvbWljX3NldCgmYW1wO3J0d3NkaW8tJmd0O3R4X29xdF9mcmVlLCBmcmVlIC0gMSk7CiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CQl9CiYjNDM7CQl1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIC1FQlVTWTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnR3X3NkaW9fODcyM2JzX2NvbnN1bWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCBxdWV1ZSwKJiM0MzsJCQkJCSB1bnNpZ25lZCBpbnQgcGFnZXMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LSZndDtwcml2OwomIzQzOwlhdG9taWNfdCAqZGVkaWNhdGVkOwomIzQzOwl1bnNpZ25lZCBpbnQgdGFrZW47CiYjNDM7CWludCBmcmVlOwomIzQzOwomIzQzOwlkZWRpY2F0ZWQgPSBydHdfc2Rpb184NzIzYnNfZnJlZV90eHBnKHJ0d2RldiwgcXVldWUpOwomIzQzOwlpZiAoIWRlZGljYXRlZCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZnJlZSA9IGF0b21pY19yZWFkKGRlZGljYXRlZCk7CiYjNDM7CXRha2VuID0gbWluX3QodW5zaWduZWQgaW50LCBwYWdlcywgZnJlZSAmZ3Q7IDAgPyBmcmVlIDogMCk7CiYjNDM7CWF0b21pY19zdWIodGFrZW4sIGRlZGljYXRlZCk7CiYjNDM7CiYjNDM7CXBhZ2VzIC09IHRha2VuOwomIzQzOwlpZiAocGFnZXMgJmFtcDsmYW1wOyBhdG9taWNfc3ViX3JldHVybihwYWdlcywgJmFtcDtydHdzZGlvLSZndDtmcmVlX3BnX3B1YikgJmx0OyAwKQomIzQzOwkJYXRvbWljX3NldCgmYW1wO3J0d3NkaW8tJmd0O2ZyZWVfcGdfcHViLCAwKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHJ0d19zZGlvX3dyaXRlX3BvcnQoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgICAgICBlbnVtIHJ0d190eF9xdWV1ZV90eXBlIHF1ZXVlKQogewogCXN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtJmd0O3ByaXY7CiYjNDM7CWJvb2wgcnRsODcyM2JzID0gcnR3X2lzXzg3MjNicyhydHdkZXYpOwomIzQzOwl1bnNpZ25lZCBpbnQgb3JpZ19sZW4gPSBza2ItJmd0O2xlbjsKJiM0MzsJdW5zaWduZWQgaW50IHBhZ2VzOwomIzQzOwlzaXplX3Qgd3JpdGVfc2l6ZTsKIAlib29sIGJ1c19jbGFpbTsKIAlzaXplX3QgdHhzaXplOwogCXUzMiB0eGFkZHI7CiAJaW50IHJldDsKIAotCXR4YWRkciA9IHJ0d19zZGlvX2dldF90eF9hZGRyKHJ0d2Rldiwgc2tiLSZndDtsZW4sIHF1ZXVlKTsKLQlpZiAoIXR4YWRkcikKLQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CWlmIChydGw4NzIzYnMpIHsKJiM0MzsJCXR4c2l6ZSA9IHJvdW5kX3VwKG9yaWdfbGVuLCA0KTsKJiM0MzsJCXdyaXRlX3NpemUgPSB0eHNpemUgJmd0OyBSVFdfU0RJT19CTE9DS19TSVpFID8KJiM0MzsJCQkgICAgIHJvdW5kX3VwKHR4c2l6ZSwgUlRXX1NESU9fQkxPQ0tfU0laRSkgOiB0eHNpemU7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQl0eHNpemUgPSBzZGlvX2FsaWduX3NpemUocnR3c2Rpby0mZ3Q7c2Rpb19mdW5jLCBvcmlnX2xlbik7CiYjNDM7CQl3cml0ZV9zaXplID0gdHhzaXplOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICh3cml0ZV9zaXplICZndDsgb3JpZ19sZW4pIHsKJiM0MzsJCXVuc2lnbmVkIGludCBwYWRkaW5nID0gd3JpdGVfc2l6ZSAtIG9yaWdfbGVuOwogCi0JdHhzaXplID0gc2Rpb19hbGlnbl9zaXplKHJ0d3NkaW8tJmd0O3NkaW9fZnVuYywgc2tiLSZndDtsZW4pOwomIzQzOwkJaWYgKHNrYl90YWlscm9vbShza2IpICZsdDsgcGFkZGluZykgewomIzQzOwkJCXJldCA9IHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLAomIzQzOwkJCQkJICAgICAgIHBhZGRpbmcgLSBza2JfdGFpbHJvb20oc2tiKSwKJiM0MzsJCQkJCSAgICAgICBHRlBfS0VSTkVMKTsKJiM0MzsJCQlpZiAocmV0KQomIzQzOwkJCQlyZXR1cm4gcmV0OwomIzQzOwkJfQomIzQzOwkJc2tiX3B1dF96ZXJvKHNrYiwgcGFkZGluZyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJdHhhZGRyID0gcnR3X3NkaW9fZ2V0X3R4X2FkZHIocnR3ZGV2LCB0eHNpemUsIHF1ZXVlKTsKJiM0MzsJaWYgKCF0eGFkZHIpIHsKJiM0MzsJCXJldCA9IC1FSU5WQUw7CiYjNDM7CQlnb3RvIG91dF90cmltOwomIzQzOwl9CiAKIAlyZXQgPSBydHdfc2Rpb19jaGVja19mcmVlX3R4cGcocnR3ZGV2LCBxdWV1ZSwgdHhzaXplKTsKIAlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwomIzQzOwkJZ290byBvdXRfdHJpbTsKJiM0MzsKJiM0MzsJaWYgKHJ0bDg3MjNicykgewomIzQzOwkJcmV0ID0gcnR3X3NkaW9fODcyM2JzX3dhaXRfdHhfb3F0KHJ0d2Rldik7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWdvdG8gb3V0X3RyaW07CiYjNDM7CX0KIAogCWlmICghSVNfQUxJR05FRCgodW5zaWduZWQgbG9uZylza2ItJmd0O2RhdGEsIFJUV19TRElPX0RBVEFfUFRSX0FMSUdOKSkKIAkJcnR3X3dhcm4ocnR3ZGV2LCAmIzM0O0dvdCB1bmFsaWduZWQgU0tCIGluICVzKCkgZm9yIHF1ZXVlICV1XG4mIzM0OywKIAkJCSBfX2Z1bmNfXywgcXVldWUpOwogCiAJYnVzX2NsYWltID0gcnR3X3NkaW9fYnVzX2NsYWltX25lZWRlZChydHdzZGlvKTsKLQogCWlmIChidXNfY2xhaW0pCiAJCXNkaW9fY2xhaW1faG9zdChydHdzZGlvLSZndDtzZGlvX2Z1bmMpOwotCi0JcmV0ID0gc2Rpb19tZW1jcHlfdG9pbyhydHdzZGlvLSZndDtzZGlvX2Z1bmMsIHR4YWRkciwgc2tiLSZndDtkYXRhLCB0eHNpemUpOwotCiYjNDM7CXJldCA9IHNkaW9fbWVtY3B5X3RvaW8ocnR3c2Rpby0mZ3Q7c2Rpb19mdW5jLCB0eGFkZHIsIHNrYi0mZ3Q7ZGF0YSwKJiM0MzsJCQkgICAgICAgd3JpdGVfc2l6ZSk7CiAJaWYgKGJ1c19jbGFpbSkKIAkJc2Rpb19yZWxlYXNlX2hvc3QocnR3c2Rpby0mZ3Q7c2Rpb19mdW5jKTsKIAotCWlmIChyZXQpCiYjNDM7CWlmIChyZXQpIHsKIAkJcnR3X3dhcm4ocnR3ZGV2LAogCQkJICYjMzQ7RmFpbGVkIHRvIHdyaXRlICV6dSBieXRlKHMpIHRvIFNESU8gcG9ydCAweCUwOHgmIzM0OywKLQkJCSB0eHNpemUsIHR4YWRkcik7CiYjNDM7CQkJIHdyaXRlX3NpemUsIHR4YWRkcik7CiYjNDM7CX0gZWxzZSBpZiAocnRsODcyM2JzKSB7CiYjNDM7CQlwYWdlcyA9IERJVl9ST1VORF9VUCh0eHNpemUsIHJ0d2Rldi0mZ3Q7Y2hpcC0mZ3Q7cGFnZV9zaXplKTsKJiM0MzsJCXJ0d19zZGlvXzg3MjNic19jb25zdW1lX3R4cGcocnR3ZGV2LCBxdWV1ZSwgcGFnZXMpOwomIzQzOwl9CiAKJiM0MztvdXRfdHJpbToKJiM0MzsJaWYgKHdyaXRlX3NpemUgJmd0OyBvcmlnX2xlbikKJiM0MzsJCXNrYl90cmltKHNrYiwgb3JpZ19sZW4pOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTY3Nyw3ICYjNDM7ODc3LDExIEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2luaXQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKIHsKIAlzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LSZndDtwcml2OwogCi0JcnR3c2Rpby0mZ3Q7aXJxX21hc2sgPSBSRUdfU0RJT19ISU1SX1JYX1JFUVVFU1QgfCBSRUdfU0RJT19ISU1SX0NQV00xOwomIzQzOwlpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKQomIzQzOwkJcnR3c2Rpby0mZ3Q7aXJxX21hc2sgPSBSRUdfU0RJT19ISU1SX1JYX1JFUVVFU1Q7CiYjNDM7CWVsc2UKJiM0MzsJCXJ0d3NkaW8tJmd0O2lycV9tYXNrID0gUkVHX1NESU9fSElNUl9SWF9SRVFVRVNUIHwKJiM0MzsJCQkJICAgIFJFR19TRElPX0hJTVJfQ1BXTTE7CiB9CiAKIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2VuYWJsZV9yeF9hZ2dyZWdhdGlvbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KQpAQCAtNjg1LDYgJiM0Mzs4ODksNyBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19lbmFibGVfcnhfYWdncmVnYXRpb24oc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKIAl1OCBzaXplLCB0aW1lb3V0OwogCiAJc3dpdGNoIChydHdkZXYtJmd0O2NoaXAtJmd0O2lkKSB7CiYjNDM7CWNhc2UgUlRXX0NISVBfVFlQRV84NzIzQjoKIAljYXNlIFJUV19DSElQX1RZUEVfODcwM0I6CiAJY2FzZSBSVFdfQ0hJUF9UWVBFXzg4MjFBOgogCWNhc2UgUlRXX0NISVBfVFlQRV84ODEyQToKQEAgLTcxMiw2ICYjNDM7OTE3LDggQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9fZW5hYmxlX3J4X2FnZ3JlZ2F0aW9uKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiAJCSAgICBGSUVMRF9QUkVQKEJJVF9ETUFfQUdHX1RPX1YxLCB0aW1lb3V0KSk7CiAKIAlydHdfd3JpdGU4X3NldChydHdkZXYsIFJFR19SWERNQV9NT0RFLCBCSVRfRE1BX01PREUpOwomIzQzOwlpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKQomIzQzOwkJcnR3X3dyaXRlOF9tYXNrKHJ0d2RldiwgUkVHX1JYRE1BX01PREUsIEJJVF9ETUFfQlVSU1RfQ05ULCAweDMpOwogfQogCiBzdGF0aWMgdm9pZCBydHdfc2Rpb19lbmFibGVfaW50ZXJydXB0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCkBAIC03NDksOSAmIzQzOzk1Niw1MCBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX3NldHVwKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfY2hlY2tfcnFwbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IHJ0d19jaGlwX2luZm8gKmNoaXAgPSBydHdkZXYtJmd0O2NoaXA7CiYjNDM7CXN0cnVjdCBydHdfZmlmb19jb25mICpmaWZvID0gJmFtcDtydHdkZXYtJmd0O2ZpZm87CiYjNDM7CWNvbnN0IHN0cnVjdCBydHdfcGFnZV90YWJsZSAqcGdfdGJsOwomIzQzOwl1MTYgcmVzZXJ2ZWRfbnVtOwomIzQzOwl1MzIgZnJlZV90eHBnOwomIzQzOwl1MTYgcHVicV9udW07CiYjNDM7CiYjNDM7CWZyZWVfdHhwZyA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19GUkVFX1RYUEcpOwomIzQzOwlpZiAoZnJlZV90eHBnIHx8ICFmaWZvLSZndDthY3FfcGdfbnVtKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlwZ190YmwgPSAmYW1wO2NoaXAtJmd0O3BhZ2VfdGFibGVbMF07CiYjNDM7CXJlc2VydmVkX251bSA9IHBnX3RibC0mZ3Q7aHFfbnVtICYjNDM7IHBnX3RibC0mZ3Q7bHFfbnVtICYjNDM7IHBnX3RibC0mZ3Q7bnFfbnVtICYjNDM7CiYjNDM7CQkgICAgICAgcGdfdGJsLSZndDtleHFfbnVtICYjNDM7IHBnX3RibC0mZ3Q7Z2FwcV9udW07CiYjNDM7CWlmIChmaWZvLSZndDthY3FfcGdfbnVtICZsdDs9IHJlc2VydmVkX251bSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJcHVicV9udW0gPSBmaWZvLSZndDthY3FfcGdfbnVtIC0gcmVzZXJ2ZWRfbnVtOwomIzQzOwlydHdfd3JpdGUzMihydHdkZXYsIFJFR19SUVBOX05QUSwKJiM0MzsJCSAgICBCSVRfUlFQTl9ORShwZ190YmwtJmd0O25xX251bSwgcGdfdGJsLSZndDtleHFfbnVtKSk7CiYjNDM7CXJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1JRUE4sCiYjNDM7CQkgICAgQklUX1JRUE5fSExQKHBnX3RibC0mZ3Q7aHFfbnVtLCBwZ190YmwtJmd0O2xxX251bSwgcHVicV9udW0pKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHJ0d19zZGlvX3N0YXJ0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiB7CiYjNDM7CXUzMiBjbGVhcjsKJiM0MzsKJiM0MzsJaWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSkgewomIzQzOwkJcnR3X3NkaW9fODcyM2JzX2NoZWNrX3JxcG4ocnR3ZGV2KTsKJiM0MzsJCXJ0d19zZGlvXzg3MjNic19pbml0X2ZyZWVfdHhwZyhydHdkZXYpOwomIzQzOwl9CiYjNDM7CiAJcnR3X3NkaW9fZW5hYmxlX3J4X2FnZ3JlZ2F0aW9uKHJ0d2Rldik7CiYjNDM7CiYjNDM7CWlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpIHsKJiM0MzsJCWNsZWFyID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19TRElPX0hJU1IpICZhbXA7CiYjNDM7CQkJUlRXX1NESU9fSElTUl9DTEVBUl9NQVNLOwomIzQzOwkJaWYgKGNsZWFyKQomIzQzOwkJCXJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1NESU9fSElTUiwgY2xlYXIpOwomIzQzOwl9CiYjNDM7CiAJcnR3X3NkaW9fZW5hYmxlX2ludGVycnVwdChydHdkZXYpOwogCiAJcmV0dXJuIDA7CkBAIC04MTUsNyAmIzQzOzEwNjMsMTEgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9fdHhfa2lja19vZmYoc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKIHsKIAlzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LSZndDtwcml2OwogCi0JcXVldWVfd29yayhydHdzZGlvLSZndDt0eHdxLCAmYW1wO3J0d3NkaW8tJmd0O3R4X2hhbmRsZXJfZGF0YS0mZ3Q7d29yayk7CiYjNDM7CS8qCiYjNDM7CSAqIEEgcmV0cnkgbWF5IGFscmVhZHkgYmUgcGVuZGluZyB3aXRoIGEgZGVsYXk7IHJlLWFybSBpdCBzbyBhIG5ld2x5CiYjNDM7CSAqIHF1ZXVlZCBmcmFtZSBpcyBub3QgaGVsZCBiYWNrIGJ5IGl0LgomIzQzOwkgKi8KJiM0MzsJbW9kX2RlbGF5ZWRfd29yayhydHdzZGlvLSZndDt0eHdxLCAmYW1wO3J0d3NkaW8tJmd0O3R4X2hhbmRsZXJfZGF0YS0mZ3Q7d29yaywgMCk7CiB9CiAKIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2xpbmtfcHMoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgYm9vbCBlbnRlcikKQEAgLTgzMSw2ICYjNDM7MTA4Myw4IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2ludGVyZmFjZV9jZmcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKIAogCXZhbCA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19UWF9DVFJMKTsKIAl2YWwgJmFtcDs9IDB4ZmZmODsKJiM0MzsJaWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSkKJiM0MzsJCXZhbCB8PSBCSVRfU0RJT19UWF9DVFJMX0FMV0FZU19SRUNPR05JWkU7CiAJcnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfU0RJT19UWF9DVFJMLCB2YWwpOwogfQogCkBAIC05MzcsNiAmIzQzOzExOTEsMTkgQEAgc3RhdGljIGludCBydHdfc2Rpb190eF93cml0ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LAogCiAJc2tiX3F1ZXVlX3RhaWwoJmFtcDtydHdzZGlvLSZndDt0eF9xdWV1ZVtxdWV1ZV0sIHNrYik7CiAKJiM0MzsJLyoKJiM0MzsJICogQmFjay1wcmVzc3VyZSBvbiB0aGUgZGF0YSBBQ3MgKEJLL0JFL1ZJL1ZPKTogb25jZSB0aGUgRklGTyBmaWxscyBwYXN0CiYjNDM7CSAqIHRoZSBoaWdoIHdhdGVybWFyaywgc3RvcCB0aGUgY29ycmVzcG9uZGluZyBtYWM4MDIxMSBxdWV1ZSBzbyBpdCBzdG9wcwomIzQzOwkgKiBoYW5kaW5nIHVzIGZyYW1lcywgYm91bmRpbmcgdGhlIHF1ZXVlaW5nIGxhdGVuY3kuIFJlc3VtZWQgZnJvbSB0aGUgVFgKJiM0MzsJICogZHJhaW4gcGF0aCBvbmNlIHRoZSBGSUZPIGRyYWlucyBiZWxvdyB0aGUgbG93IHdhdGVybWFyay4KJiM0MzsJICovCiYjNDM7CWlmIChydHdfaXNfODcyM2JzKHJ0d2RldikgJmFtcDsmYW1wOyBxdWV1ZSAmbHQ7IFJUV19UWF9RVUVVRV9CQ04gJmFtcDsmYW1wOwomIzQzOwkgICAgIXJ0d3NkaW8tJmd0O3F1ZXVlX3N0b3BwZWRbcXVldWVdICZhbXA7JmFtcDsKJiM0MzsJICAgIHNrYl9xdWV1ZV9sZW4oJmFtcDtydHdzZGlvLSZndDt0eF9xdWV1ZVtxdWV1ZV0pICZndDs9IFJUV19TRElPX1RYX0ZJRk9fSElXQVRFUikgewomIzQzOwkJcnR3c2Rpby0mZ3Q7cXVldWVfc3RvcHBlZFtxdWV1ZV0gPSB0cnVlOwomIzQzOwkJaWVlZTgwMjExX3N0b3BfcXVldWUocnR3ZGV2LSZndDtodywgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpOwomIzQzOwl9CiYjNDM7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwOTUsNiAmIzQzOzEzNjIsMTQgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9faGFuZGxlX2ludGVycnVwdChzdHJ1Y3Qgc2Rpb19mdW5jICpzZGlvX2Z1bmMpCiAJCXJ0d19zZGlvX3J4X2lzcihydHdkZXYpOwogCX0KIAomIzQzOwkvKgomIzQzOwkgKiBSVEw4NzIzQlMga2VlcHMgcmFpc2luZyB0aGUgaW50ZXJydXB0IGFmdGVyIHJlc3VtZSBpZiB1bmRlZmluZWQKJiM0MzsJICogc3RhdHVzIGJpdHMgYXJlIHdyaXR0ZW4gYmFjaywgc28gYWNrbm93bGVkZ2Ugb25seSB0aGUgYml0cyB0aGF0IGFyZQomIzQzOwkgKiBib3RoIGRlZmluZWQgYW5kIHVubWFza2VkLiBPdGhlciBjaGlwcyBrZWVwIHRoZSBleGlzdGluZyBiZWhhdmlvdXIuCiYjNDM7CSAqLwomIzQzOwlpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKQomIzQzOwkJaGlzciAmYW1wOz0gcnR3c2Rpby0mZ3Q7aXJxX21hc2sgJmFtcDsgUlRXX1NESU9fSElTUl9DTEVBUl9NQVNLOwomIzQzOwogCXJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1NESU9fSElTUiwgaGlzcik7CiAKIAlydHdzZGlvLSZndDtpcnFfdGhyZWFkID0gTlVMTDsKQEAgLTEyMzEsNDMgJiM0MzsxNTA2LDkyIEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2luZGljYXRlX3R4X3N0YXR1cyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LAogCWllZWU4MDIxMV90eF9zdGF0dXNfaXJxc2FmZShodywgc2tiKTsKIH0KIAotc3RhdGljIHZvaWQgcnR3X3NkaW9fcHJvY2Vzc190eF9xdWV1ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LAotCQkJCSAgICAgIGVudW0gcnR3X3R4X3F1ZXVlX3R5cGUgcXVldWUpCiYjNDM7LyoKJiM0MzsgKiBTZW5kIG9uZSBmcmFtZSBmcm9tIEBxdWV1ZS4gUmV0dXJucyAxIHdoZW4gYSBmcmFtZSB3YXMgd3JpdHRlbiwgMCB3aGVuIHRoZQomIzQzOyAqIHF1ZXVlIHdhcyBlbXB0eSBhbmQgYSBuZWdhdGl2ZSBlcnJubyB3aGVuIHRoZSB3cml0ZSBmYWlsZWQsIGluIHdoaWNoIGNhc2UKJiM0MzsgKiB0aGUgZnJhbWUgaXMgcHV0IGJhY2sgYXQgdGhlIGhlYWQgb2YgdGhlIHF1ZXVlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgcnR3X3NkaW9fcHJvY2Vzc190eF9xdWV1ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LAomIzQzOwkJCQkgICAgIGVudW0gcnR3X3R4X3F1ZXVlX3R5cGUgcXVldWUpCiB7CiAJc3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi0mZ3Q7cHJpdjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwomIzQzOwl1MTYgcV9tYXA7CiAJaW50IHJldDsKIAogCXNrYiA9IHNrYl9kZXF1ZXVlKCZhbXA7cnR3c2Rpby0mZ3Q7dHhfcXVldWVbcXVldWVdKTsKIAlpZiAoIXNrYikKLQkJcmV0dXJuOwomIzQzOwkJcmV0dXJuIDA7CiAKJiM0MzsJcV9tYXAgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTsKIAlyZXQgPSBydHdfc2Rpb193cml0ZV9wb3J0KHJ0d2Rldiwgc2tiLCBxdWV1ZSk7CiAJaWYgKHJldCkgewogCQlza2JfcXVldWVfaGVhZCgmYW1wO3J0d3NkaW8tJmd0O3R4X3F1ZXVlW3F1ZXVlXSwgc2tiKTsKLQkJcmV0dXJuOwomIzQzOwkJcmV0dXJuIHJldDsKIAl9CiAKIAlydHdfc2Rpb19pbmRpY2F0ZV90eF9zdGF0dXMocnR3ZGV2LCBza2IpOwomIzQzOwomIzQzOwlpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpICZhbXA7JmFtcDsgcXVldWUgJmx0OyBSVFdfVFhfUVVFVUVfQkNOICZhbXA7JmFtcDsKJiM0MzsJICAgIHJ0d3NkaW8tJmd0O3F1ZXVlX3N0b3BwZWRbcXVldWVdICZhbXA7JmFtcDsKJiM0MzsJICAgIHNrYl9xdWV1ZV9sZW4oJmFtcDtydHdzZGlvLSZndDt0eF9xdWV1ZVtxdWV1ZV0pICZsdDs9CiYjNDM7CSAgICBSVFdfU0RJT19UWF9GSUZPX0xPV0FURVIpIHsKJiM0MzsJCXJ0d3NkaW8tJmd0O3F1ZXVlX3N0b3BwZWRbcXVldWVdID0gZmFsc2U7CiYjNDM7CQlpZWVlODAyMTFfd2FrZV9xdWV1ZShydHdkZXYtJmd0O2h3LCBxX21hcCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDE7CiB9CiAKIHN0YXRpYyB2b2lkIHJ0d19zZGlvX3R4X2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEgKndvcmtfZGF0YSA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhLCB3b3JrKTsKJiM0MzsJCWNvbnRhaW5lcl9vZih0b19kZWxheWVkX3dvcmsod29yayksIHN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEsCiYjNDM7CQkJICAgICB3b3JrKTsKIAlzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW87CiAJc3RydWN0IHJ0d19kZXYgKnJ0d2RldjsKLQlpbnQgbGltaXQsIHF1ZXVlOwomIzQzOwlpbnQgbGltaXQsIHF1ZXVlLCByZXQ7CiYjNDM7CWJvb2wgcnRsODcyM2JzOwogCiAJcnR3ZGV2ID0gd29ya19kYXRhLSZndDtydHdkZXY7CiAJcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtJmd0O3ByaXY7CiYjNDM7CXJ0bDg3MjNicyA9IHJ0d19pc184NzIzYnMocnR3ZGV2KTsKIAogCWlmICghcnR3X2Z3X2ZlYXR1cmVfY2hlY2soJmFtcDtydHdkZXYtJmd0O2Z3LCBGV19GRUFUVVJFX1RYX1dBS0UpKQogCQlydHdfc2Rpb19kZWVwX3BzX2xlYXZlKHJ0d2Rldik7CiAKIAlmb3IgKHF1ZXVlID0gUlRLX01BWF9UWF9RVUVVRV9OVU0gLSAxOyBxdWV1ZSAmZ3Q7PSAwOyBxdWV1ZS0tKSB7CiAJCWZvciAobGltaXQgPSAwOyBsaW1pdCAmbHQ7IDEwMDA7IGxpbWl0JiM0MzsmIzQzOykgewotCQkJcnR3X3NkaW9fcHJvY2Vzc190eF9xdWV1ZShydHdkZXYsIHF1ZXVlKTsKJiM0MzsJCQlyZXQgPSBydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlKHJ0d2RldiwgcXVldWUpOwomIzQzOwkJCWlmIChyZXQgPT0gMCkKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApIHsKJiM0MzsJCQkJLyoKJiM0MzsJCQkJICogQSBwYWdlIHNob3J0YWdlIGlzIHRyYW5zaWVudDogbGVhdmUgdGhlCiYjNDM7CQkJCSAqIGZyYW1lIHF1ZXVlZCBhbmQgY29tZSBiYWNrIHNob3J0bHkgaW5zdGVhZAomIzQzOwkJCQkgKiBvZiBzdGFsbGluZyB0aGlzIEFDIHVudGlsIHNvbWV0aGluZyBlbHNlCiYjNDM7CQkJCSAqIGtpY2tzIHRoZSB3b3JrZXIuCiYjNDM7CQkJCSAqLwomIzQzOwkJCQlpZiAocnRsODcyM2JzICZhbXA7JmFtcDsgcmV0ID09IC1FQlVTWSkgewomIzQzOwkJCQkJcXVldWVfZGVsYXllZF93b3JrKHJ0d3NkaW8tJmd0O3R4d3EsCiYjNDM7CQkJCQkJCSAgICZhbXA7d29ya19kYXRhLSZndDt3b3JrLAomIzQzOwkJCQkJCQkgICBSVFdfU0RJT19UWF9SRVRSWV9ERUxBWSk7CiYjNDM7CQkJCQlyZXR1cm47CiYjNDM7CQkJCX0KJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQkJfQomIzQzOwomIzQzOwkJCS8qCiYjNDM7CQkJICogUmVzdGFydCBmcm9tIHRoZSBoaWdoZXN0IHByaW9yaXR5IHF1ZXVlIGFmdGVyIGV2ZXJ5CiYjNDM7CQkJICogbWFuYWdlbWVudCBmcmFtZSBzbyB0aGUgam9pbiBzZXF1ZW5jZSBpcyBub3QgaGVsZCB1cAomIzQzOwkJCSAqIGJlaGluZCBhIGRhdGEgYmFja2xvZy4KJiM0MzsJCQkgKi8KJiM0MzsJCQlpZiAocnRsODcyM2JzICZhbXA7JmFtcDsgcXVldWUgPT0gUlRXX1RYX1FVRVVFX01HTVQpIHsKJiM0MzsJCQkJcXVldWVfZGVsYXllZF93b3JrKHJ0d3NkaW8tJmd0O3R4d3EsCiYjNDM7CQkJCQkJICAgJmFtcDt3b3JrX2RhdGEtJmd0O3dvcmssIDApOwomIzQzOwkJCQlyZXR1cm47CiYjNDM7CQkJfQogCiAJCQlpZiAoc2tiX3F1ZXVlX2VtcHR5KCZhbXA7cnR3c2Rpby0mZ3Q7dHhfcXVldWVbcXVldWVdKSkKIAkJCQlicmVhazsKQEAgLTEyOTQsMTQgJiM0MzsxNjE4LDE2IEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9faW5pdF90eChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KQogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgUlRLX01BWF9UWF9RVUVVRV9OVU07IGkmIzQzOyYjNDM7KQomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgUlRLX01BWF9UWF9RVUVVRV9OVU07IGkmIzQzOyYjNDM7KSB7CiAJCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmFtcDtydHdzZGlvLSZndDt0eF9xdWV1ZVtpXSk7CiYjNDM7CQlydHdzZGlvLSZndDtxdWV1ZV9zdG9wcGVkW2ldID0gZmFsc2U7CiYjNDM7CX0KIAlydHdzZGlvLSZndDt0eF9oYW5kbGVyX2RhdGEgPSBrbWFsbG9jX29iaigqcnR3c2Rpby0mZ3Q7dHhfaGFuZGxlcl9kYXRhKTsKIAlpZiAoIXJ0d3NkaW8tJmd0O3R4X2hhbmRsZXJfZGF0YSkKIAkJZ290byBlcnJfZGVzdHJveV93cTsKIAogCXJ0d3NkaW8tJmd0O3R4X2hhbmRsZXJfZGF0YS0mZ3Q7cnR3ZGV2ID0gcnR3ZGV2OwotCUlOSVRfV09SSygmYW1wO3J0d3NkaW8tJmd0O3R4X2hhbmRsZXJfZGF0YS0mZ3Q7d29yaywgcnR3X3NkaW9fdHhfaGFuZGxlcik7CiYjNDM7CUlOSVRfREVMQVlFRF9XT1JLKCZhbXA7cnR3c2Rpby0mZ3Q7dHhfaGFuZGxlcl9kYXRhLSZndDt3b3JrLCBydHdfc2Rpb190eF9oYW5kbGVyKTsKIAogCXJldHVybiAwOwogCkBAIC0xMzE1LDYgJiM0MzsxNjQxLDcgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9fZGVpbml0X3R4KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiAJc3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi0mZ3Q7cHJpdjsKIAlpbnQgaTsKIAomIzQzOwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmFtcDtydHdzZGlvLSZndDt0eF9oYW5kbGVyX2RhdGEtJmd0O3dvcmspOwogCWRlc3Ryb3lfd29ya3F1ZXVlKHJ0d3NkaW8tJmd0O3R4d3EpOwogCWtmcmVlKHJ0d3NkaW8tJmd0O3R4X2hhbmRsZXJfZGF0YSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmgKaW5kZXggNDU3ZThiMDIzODBlNS4uMmYxYjY3ZjRiYmM3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmgKQEAgLTIyLDYgJiM0MzsyMiw3IEBACiAKIC8qIFNESU8gVHggQ29udHJvbCAqLwogI2RlZmluZSBSRUdfU0RJT19UWF9DVFJMCQkJKFNESU9fTE9DQUxfT0ZGU0VUICYjNDM7IDB4MDAwMCkKJiM0MzsjZGVmaW5lIEJJVF9TRElPX1RYX0NUUkxfQUxXQVlTX1JFQ09HTklaRQlCSVQoNCkKIAogLypTRElPIHN0YXR1cyB0aW1lb3V0Ki8KICNkZWZpbmUgUkVHX1NESU9fVElNRU9VVAkJCShTRElPX0xPQ0FMX09GRlNFVCAmIzQzOyAweDAwMDIpCkBAIC03Nyw2ICYjNDM7NzgsMTQgQEAKIC8qIHRoZSBmb2xsb3dpbmcgdHdvIGFyZSBSVEw4MTg4IFNESU8gU3BlY2lmaWMgKi8KICNkZWZpbmUgUkVHX1NESU9fSElTUl9NQ1VfRVJSCQkJQklUKDI4KQogI2RlZmluZSBSRUdfU0RJT19ISVNSX1RTRl9CSVQzMl9UT0dHTEUJCUJJVCgyOSkKJiM0MzsjZGVmaW5lIFJUV19TRElPX0hJU1JfQ0xFQVJfTUFTSwkJXAomIzQzOwkoUkVHX1NESU9fSElTUl9UWEVSUiB8IFJFR19TRElPX0hJU1JfUlhFUlIgfCBcCiYjNDM7CSBSRUdfU0RJT19ISVNSX1RYRk9WVyB8IFJFR19TRElPX0hJU1JfUlhGT1ZXIHwgXAomIzQzOwkgUkVHX1NESU9fSElTUl9UWEJDTk9LIHwgUkVHX1NESU9fSElTUl9UWEJDTkVSUiB8IFwKJiM0MzsJIFJFR19TRElPX0hJU1JfQzJIQ01EIHwgUkVHX1NESU9fSElTUl9DUFdNMSB8IFwKJiM0MzsJIFJFR19TRElPX0hJU1JfQ1BXTTIgfCBSRUdfU0RJT19ISVNSX0hTSVNSX0lORCB8IFwKJiM0MzsJIFJFR19TRElPX0hJU1JfR1RJTlQzX0lORCB8IFJFR19TRElPX0hJU1JfR1RJTlQ0X0lORCB8IFwKJiM0MzsJIFJFR19TRElPX0hJU1JfUFNUSU1FT1VUIHwgUkVHX1NESU9fSElTUl9PQ1BJTlQpCiAKIC8qIEhDSSBDdXJyZW50IFBvd2VyIE1vZGUgKi8KICNkZWZpbmUgUkVHX1NESU9fSENQV00JCQkJKFNESU9fTE9DQUxfT0ZGU0VUICYjNDM7IDB4MDAxOSkKQEAgLTg2LDYgJiM0Mzs5NSwxMCBAQAogI2RlZmluZSBSRUdfU0RJT19PUVRfRlJFRV9QRwkJCShTRElPX0xPQ0FMX09GRlNFVCAmIzQzOyAweDAwMUUpCiAvKiBGcmVlIFR4IEJ1ZmZlciBQYWdlICovCiAjZGVmaW5lIFJFR19TRElPX0ZSRUVfVFhQRwkJCShTRElPX0xPQ0FMX09GRlNFVCAmIzQzOyAweDAwMjApCiYjNDM7I2RlZmluZSBCSVRfRlJFRV9UWFBHX0hJR0gJCQlHRU5NQVNLKDcsIDApCiYjNDM7I2RlZmluZSBCSVRfRlJFRV9UWFBHX05PUk1BTAkJCUdFTk1BU0soMTUsIDgpCiYjNDM7I2RlZmluZSBCSVRfRlJFRV9UWFBHX0xPVwkJCUdFTk1BU0soMjMsIDE2KQomIzQzOyNkZWZpbmUgQklUX0ZSRUVfVFhQR19QVUIJCQlHRU5NQVNLKDMxLCAyNCkKIC8qIEhDSSBDdXJyZW50IFBvd2VyIE1vZGUgMSAqLwogI2RlZmluZSBSRUdfU0RJT19IQ1BXTTEJCQkJKFNESU9fTE9DQUxfT0ZGU0VUICYjNDM7IDB4MDAyNCkKIC8qIEhDSSBDdXJyZW50IFBvd2VyIE1vZGUgMiAqLwpAQCAtMTQzLDcgJiM0MzsxNTYsNyBAQCBzdHJ1Y3QgcnR3X3NkaW9fdHhfZGF0YSB7CiB9OwogCiBzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhIHsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKJiM0MzsJc3RydWN0IGRlbGF5ZWRfd29yayB3b3JrOwogCXN0cnVjdCBydHdfZGV2ICpydHdkZXY7CiB9OwogCkBAIC0xNTksNiAmIzQzOzE3MiwxMyBAQCBzdHJ1Y3QgcnR3X3NkaW8gewogCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp0eHdxOwogCXN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEgKnR4X2hhbmRsZXJfZGF0YTsKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHR4X3F1ZXVlW1JUS19NQVhfVFhfUVVFVUVfTlVNXTsKJiM0MzsJYm9vbCBxdWV1ZV9zdG9wcGVkW1JUS19NQVhfVFhfUVVFVUVfTlVNXTsKJiM0MzsKJiM0MzsJYXRvbWljX3QgZnJlZV9wZ19oaWdoOwomIzQzOwlhdG9taWNfdCBmcmVlX3BnX25vcm1hbDsKJiM0MzsJYXRvbWljX3QgZnJlZV9wZ19sb3c7CiYjNDM7CWF0b21pY190IGZyZWVfcGdfcHViOwomIzQzOwlhdG9taWNfdCB0eF9vcXRfZnJlZTsKIH07CiAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBydHdfc2Rpb19wbV9vcHM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3R4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3R4LmMKaW5kZXggODc4NmJiYjQyMWMyYi4uNGUxMTBhNDU3ZTcxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC90eC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvdHguYwpAQCAtMjA4LDggJiM0MzsyMDgsOSBAQCB2b2lkIHJ0d190eF9yZXBvcnRfZW5xdWV1ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBzbikKIAlfX3NrYl9xdWV1ZV90YWlsKCZhbXA7dHhfcmVwb3J0LSZndDtxdWV1ZSwgc2tiKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7dHhfcmVwb3J0LSZndDtxX2xvY2ssIGZsYWdzKTsKIAotCWlmIChydHdkZXYtJmd0O2NoaXAtJmd0O2lkID09IFJUV19DSElQX1RZUEVfODcyM0QgJmFtcDsmYW1wOwotCSAgICBydHdkZXYtJmd0O2hjaS50eXBlID09IFJUV19IQ0lfVFlQRV9VU0IpCiYjNDM7CWlmICgocnR3ZGV2LSZndDtjaGlwLSZndDtpZCA9PSBSVFdfQ0hJUF9UWVBFXzg3MjNEICZhbXA7JmFtcDsKJiM0MzsJICAgICBydHdkZXYtJmd0O2hjaS50eXBlID09IFJUV19IQ0lfVFlQRV9VU0IpIHx8CiYjNDM7CSAgICBydHdfaXNfODcyM2JzKHJ0d2RldikpCiAJCXRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKDI1MDApOwogCiAJbW9kX3RpbWVyKCZhbXA7dHhfcmVwb3J0LSZndDtwdXJnZV90aW1lciwgamlmZmllcyAmIzQzOyB0aW1lb3V0KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2MTcKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA0NTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqU0RJTyBEcml2ZXIgUGF0Y2ggRXZhbHVhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBzZXJpZXMgZm9yIHRoZSBgcnR3ODhgIGRyaXZlciwgc3BlY2lmaWNhbGx5IGFkZGluZyBzdXBwb3J0IGZvciBSVEw4NzIzQlMgU0RJTy4gVGhpcyBoaXRzIHF1aXRlIGEgZmV3IGZpbGVzOiBgZncuY2AsIGBmdy5oYCwgYG1haW4uaGAsIGByeC5jYCwgYHNkaW8uY2AsIGBzZGlvLmhgLCBhbmQgYHR4LmNgLiBUaGF0JiMzOTtzIGEgd2lyZWxlc3MgZHJpdmVyIGZvciBSZWFsdGVrIDgwMi4xMWFjLzgwMi4xMW4gZGV2aWNlcywgc28gaXQmIzM5O3MgYSBjcml0aWNhbCBwYXJ0IG9mIHRoZSB3aXJlbGVzcyBzdGFjaywgYW5kIHRoZSBjaGFuZ2VzIGFyZSBmb2N1c2VkIG9uIHRoZSBTRElPIGludGVyZmFjZSBhbmQgZmlybXdhcmUgaGFuZGxpbmcsIHBhcnRpY3VsYXJseSBhcm91bmQgYHJ0d19pc184NzIzYnMocnR3ZGV2KWAuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzLCBjYW4gd2UgZnV6eiB0aGlzPyBJcyB0aGlzIGV2ZW4gcmVhY2hhYmxlIHdpdGhpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PwoKU0RJTyBpcyBhIHRyaWNreSBvbmUuIFN0YW5kYXJkIFFFTVUgZG9lc24mIzM5O3QgdHlwaWNhbGx5IGVtdWxhdGUgU0RJTyBkZXZpY2VzLiBBcmUgdGhlcmUgYW55IHNvZnR3YXJlIGVtdWxhdGlvbnMgZm9yIFNESU8gb3IgTU1DIHRoYXQgd2UgY291bGQgbGV2ZXJhZ2U/IEkgbmVlZCB0byB0aGluayB0aGlzIHRocm91Z2ggY2FyZWZ1bGx5LiBXYWl0LCBtYWM4MDIxMV9od3NpbSBlbXVsYXRlcyBtYWM4MDIxMSwgYnV0IHRoaXMgaXMgYSBzcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIsIHNvIGRvZXMgaXQgbWF0dGVyIHRoYXQgbWFjODAyMTEgaXMgZW11bGF0ZWQgaWYgdGhpcyBpcyB0aGUgaGFyZHdhcmUgZHJpdmVyIGl0c2VsZiAocnR3ODgpPyBDYW4gKnJ0dzg4KiBiZSBmdXp6ZWQ/CgpHZW5lcmFsbHksIEkga25vdyBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXJzLCBlc3BlY2lhbGx5IHRob3NlIGludGVyYWN0aW5nIHdpdGggU0RJTywgVVNCLCBvciBQQ0llLCB1c3VhbGx5IHJlcXVpcmUgYWN0dWFsIGhhcmR3YXJlIHVubGVzcyB0aGVyZSYjMzk7cyBhbiBlbXVsYXRvci4gVVNCIGRyaXZlcnMsIHdlIGNhbiBzb21ldGltZXMgZ2V0IGF3YXkgd2l0aCB1c2luZyBgZHVtbXlfaGNkYCBvciBgcmF3LWdhZGdldGAuIFBDSWUgZHJpdmVycyBhcmUgYSBuaWdodG1hcmUgaW4gdGhpcyBjYXNlLCBmdXp6aW5nIHRoZW0gaXMgdG91Z2ggdW5sZXNzIHRoZXJlJiMzOTtzIGEgc29mdHdhcmUgZW11bGF0aW9uLiBCdXQgd2hhdCBhYm91dCBTRElPPyBJcyB0aGVyZSBhIGR1bW15IFNESU8gaG9zdCBjb250cm9sbGVyIG91dCB0aGVyZSBzb21ld2hlcmU/IEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUgaXMgYW55IFNESU8gZnV6emluZyBzdXBwb3J0LCBvciBpZiB0aGlzIGV2ZW4gaXMgcmVhY2hhYmxlLgoKSSBuZWVkIHRvIGRvIGEgcXVpY2sgc2VhcmNoIGZvciBTRElPIGVtdWxhdGlvbiBvciwgc3BlY2lmaWNhbGx5LCB3aGV0aGVyIGBydHc4OGAgaXMgZnV6emVkIGF0IGFsbC4KCldhaXQgYSBzZWNvbmQuIFRoZSBwcm9tcHQgc2F5cywgJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOiAuLi4gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAuLi4gdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuJiMzNDsgT0ssIHNvIFNESU8gaXMgYSBoYXJkd2FyZSBidXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBrbm93IGlmIHRoaXMgaXMgZnV6YWJsZSEgTGV0JiMzOTtzIGNoZWNrIGlmIHRoZXJlJiMzOTtzIGEgd2F5IHRvIGZ1enogU0RJTyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2R1bW15X3NkaW8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNjM4CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIHN1bW1hcml6ZWQgYXMgcmVxdWVzdGVkOgoKKipBc3Nlc3NpbmcgdGhlIExhbmRzY2FwZSBmb3IgU0RJTyBIb3N0IEVtdWxhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlIGFyZSBhbnkgcmVhZGlseSBhdmFpbGFibGUgU0RJTyBob3N0IGVtdWxhdG9ycyBvdXQgdGhlcmUuIEJlZm9yZSBJIHN0YXJ0IGJ1aWxkaW5nIHNvbWV0aGluZyBmcm9tIHNjcmF0Y2gsIGl0IG1ha2VzIHNlbnNlIHRvIHNlZSB3aGF0JiMzOTtzIGFscmVhZHkgYmVlbiBjcmVhdGVkLiBUaGlzIGlzIGEgY29tbW9uIHN0YXJ0aW5nIHBvaW50IGZvciBhbnkgcHJvamVjdCwgaXNuJiMzOTt0IGl0PyBTYXZlcyB0aW1lLCBlbmVyZ3ksIGFuZCByZXNvdXJjZXMgdG8gc2VlIGlmIHNvbWVvbmUgZWxzZSBoYXMgYWxyZWFkeSB0YWNrbGVkIGEgc2ltaWxhciBjaGFsbGVuZ2UuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGF0JiMzOTtzIG91dCB0aGVyZSBzbyBJIGNhbiBkZXRlcm1pbmUgaWYgYW55IGV4aXN0aW5nIHNvbHV0aW9uIG1lZXRzIHRoZSByZXF1aXJlbWVudHMsIG9yLCBpZiBub3QsIHdoYXQgYXNwZWN0cyBtaWdodCBiZSBhcHBsaWNhYmxlLCBvciBhdCBsZWFzdCBzZXJ2ZSBhcyBhIHVzZWZ1bCBzdGFydGluZyBwb2ludCBmb3IgbXkgb3duIHdvcmsuIE15IGV4cGVyaWVuY2UgaW4gdGhpcyBmaWVsZCBoZWxwcyBtZSBhcHByZWNpYXRlIHRoYXQgZ29vZCBkZXNpZ24gcmVxdWlyZXMgYSBzb2xpZCBmb3VuZGF0aW9uIGluIHByaW9yIGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NkaW8uKmVtdWwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODY0CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIFJUVzg4IERyaXZlciBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gY29uZmlybSBpcyB3aGV0aGVyIGBydHc4OGAgaXMgKmFsc28qIGEgVVNCIGRyaXZlci4gVGhlIGNvZGUgSSYjMzk7bSBleGFtaW5pbmcgcmVmZXJlbmNlcyBgcnR3X2lzXzg3MjNicyhydHdkZXYpYCwgYW5kIHRoYXQgbWFjcm8gc2VlbXMgdG8gc3BlY2lmaWNhbGx5IHRhcmdldCB0aGUgU0RJTyBpbnRlcmZhY2Ugb2YgdGhlIFJUTDg3MjNCUyBjaGlwc2V0LiBUaGUgZGVmaW5pdGlvbiBjbGVhcmx5IGNoZWNrcyBmb3IgYm90aCB0aGUgY2hpcCBJRCAoYFJUV19DSElQX1RZUEVfODcyM0JgKSBhbmQgdGhlIEhDSSB0eXBlIGJlaW5nIFNESU8gKGBSVFdfSENJX1RZUEVfU0RJT2ApLgoKTm93LCB0aGF0JiMzOTtzIGludGVyZXN0aW5nIGJlY2F1c2UgSSBrbm93IHRoYXQgYHJ0dzg4YCBhY3R1YWxseSBzdXBwb3J0cyBVU0IsIFBDSSwgKmFuZCogU0RJTy4gU28gdGhlIHF1ZXN0aW9uIGJlY29tZXM6IENhbiB3ZSBmdXp6IHRoZSBTRElPIGludGVyZmFjZSBzcGVjaWZpY2FsbHkgd2l0aGluIHRoaXMgZHJpdmVyPyBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgU0RJTyBpbnRlcmZhY2VzIGFyZW4mIzM5O3QgdXN1YWxseSBpZGVhbCBjYW5kaWRhdGVzIGZvciBmdXp6aW5nIGluIHRoZSBrZXJuZWwuIFRoZSBtYWpvciBodXJkbGUgaXMgdGhlIGxhY2sgb2YgYSB2aXJ0dWFsIFNESU8gaG9zdCBjb250cm9sbGVyLCBhIGNvdW50ZXJwYXJ0IHRvIHNvbWV0aGluZyBsaWtlIGBkdW1teV9oY2RgIGZvciBVU0Igb3IgYHZoY2lgIGZvciBIQ0kuIFdpdGhvdXQgdGhpcywgY29uc3RydWN0aW5nIGFuZCBpbmplY3RpbmcgU0RJTyB0cmFmZmljIGluIGEgY29udHJvbGxlZCBlbnZpcm9ubWVudCBpcyBjaGFsbGVuZ2luZy4gU28gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBpZiB0aGVyZSBpcyBzb21lIGtpbmQgb2YgTU1DL1NESU8gZW11bGF0aW9uIHRoYXQgY291bGQgYmUgbGV2ZXJhZ2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW1jLiplbXVsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDM2MAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDMxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIFNESU8gRW11bGF0aW9uIEZlYXNpYmlsaXR5KioKCk9rYXksIHNvIFFFTVUgaGFzIFNEIGNhcmQgZW11bGF0aW9uLCBzcGVjaWZpY2FsbHkgdGhlIHNkaGNpIGludGVyZmFjZS4gTXkgaW5pdGlhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoYXQgZXh0ZW5kcyB0byBlbXVsYXRpbmcgKmFyYml0cmFyeSogU0RJTyBkZXZpY2VzLiBUaGUgc2hvcnQgYW5zd2VyLCBJIGJlbGlldmUsIGlzIG5vLiBRRU1VIGhhbmRsZXMgU0QgY2FyZHMsIGJ1dCBpdCBkb2VzbiYjMzk7dCBnZW5lcmFsbHkgcHJvdmlkZSBnZW5lcmljIFNESU8gZGV2aWNlIGVtdWxhdGlvbiB1bmxlc3MgYSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBpcyBidWlsdCBpbi4KClNpbmNlIEkgaGF2ZW4mIzM5O3QgY29tZSBhY3Jvc3MgUUVNVSBzcGVjaWZpY2FsbHkgZW11bGF0aW5nIHRoaXMgcGFydGljdWxhciBSZWFsdGVrIFNESU8gV2lGaSBjYXJkLCBJJiMzOTttIGFzc3VtaW5nIHRoZSByZWxldmFudCBjb2RlIHBhdGhzLCBzcGVjaWZpY2FsbHkgdGhlIG9uZXMgaW4gYHJ0dzg4L3NkaW8uY2AgdGhhdCBhcmUgdGllZCB0byBgUlRXX0hDSV9UWVBFX1NESU9gLCBhcmUgZWZmZWN0aXZlbHkgdW5yZWFjaGFibGUgd2hlbiBydW5uaW5nIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciwgb2YgY291cnNlLCBRRU1VLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhpcy4gSSBuZWVkIHRvIG1ha2UgKmFic29sdXRlbHkqIHN1cmUgdGhlcmUmIzM5O3Mgbm8gd2F5IHRvIHRyaWdnZXIgdGhvc2UgZnVuY3Rpb25zLiBJIHNlZSB0aGUgcGF0Y2ggbW9kaWZpZXMgc2V2ZXJhbCBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgZnVuY3Rpb25zOiBgcnR3X2Z3X2MyaF9jbWRfaGFuZGxlYCwgYHJ0d19md19jMmhfY21kX3J4X2lycXNhZmVgLCBgcnR3X3J4X2ZpbGxfcnhfc3RhdHVzYCwgYHJ0d19zZGlvX3JlYWRfcG9ydGAsIGFuZCBgcnR3X3NkaW9fd3JpdGVfcG9ydGAsIGFtb25nIG90aGVycy4gVGhlc2UgYXJlICphbGwqIGxvdy1sZXZlbCBoYXJkd2FyZSBpbnRlcmFjdGlvbiBwb2ludHMuIFRoaXMgcmVpbmZvcmNlcyBteSBpbml0aWFsIGFzc2Vzc21lbnQuCgpUaGUgYmlnZ2VyIHF1ZXN0aW9uIGlzIGlmIHN5emthbGxlciBjYW4gcmVhY2ggdGhlc2UsIGFzIEkgaGF2ZSBiZWVuIHJldmlld2luZyBzeXprYWxsZXIgcmVwb3J0cy4gSSBrbm93IHN5emthbGxlciBjYW4gZnV6eiBVU0IgZGV2aWNlcyB1c2luZyB0aGUgcmF3LWdhZGdldCBvciBkdW1teV9oY2QgaW50ZXJmYWNlcy4gSXQgY2FuIGFsc28gZnV6eiBtYWM4MDIxMSBkZXZpY2VzIHVzaW5nIG1hYzgwMjExX2h3c2ltIGFuZCB2aXJ0aW8gZGV2aWNlcy4gQnV0LCBhZ2FpbiwgbXkgd29ya2luZyBhc3N1bXB0aW9uIGlzIHRoYXQgaXQgKmNhbiYjMzk7dCogZnV6eiBTRElPIGRldmljZXMuIFRoZSBrZXJuZWwgbGFja3MgYSBnZW5lcmFsIFNESU8gZnV6emluZyBpbnRlcmZhY2UsIHVubGlrZSBVU0Igb3IgdGhlIG90aGVycy4KCkkmIzM5O20gZ29pbmcgdG8gZG91YmxlIGNoZWNrIHRoaXMgYW5kIGNvbmZpcm0gd2hldGhlciBvciBub3QgdGhlcmUmIzM5O3MgYW55IHN5emthbGxlciBzdXBwb3J0IGZvciBTRElPLiBJIGhhdmUgYSBodW5jaCwgYW5kIGl0JiMzOTtzIHRpbWUgdG8gdmVyaWZ5IGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N5el9zZGlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxNTMKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqQXNzZXNzaW5nIHRoZSBMYW5kc2NhcGUgZm9yIE1NQyBGdXp6aW5nIE9wcG9ydHVuaXRpZXMqKgoKT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQmIzM5O3MgdGFrZSBhIHF1aWNrIG1lbnRhbCBpbnZlbnRvcnkuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJiMzOTtzIGFueSBhY3RpdmUgTU1DIChNdWx0aU1lZGlhQ2FyZCkgZnV6emluZyBnb2luZyBvbiByaWdodCBub3cuIEl0JiMzOTtzIGEga2V5IGFyZWEgdG8gZXhwbG9yZSwgZ2l2ZW4gdGhlIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgYW5kIHdpZGVzcHJlYWQgdXNlIG9mIHRoZXNlIGRldmljZXMuIEkmIzM5O2xsIG5lZWQgdG8gY29uc2lkZXIgd2hhdCB0b29scyBhbmQgYXBwcm9hY2hlcyBhcmUgY3VycmVudGx5IGJlaW5nIGVtcGxveWVkLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIGdhcHMgb3IgdW5kZXItZXhwbG9yZWQgYXJlYXMgcmlwZSBmb3IgaW52ZXN0aWdhdGlvbi4gVGltZSB0byBzdGFydCB0aGUgZGVlcCBkaXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N5el9tbWMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTMyMwoJCQkJCQkJb3V0cHV0OiAxMDQKCQkJCQkJCXRob3VnaHRzOiA3NDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVW5yZWFjaGFibGUgQ29kZSBpbiBhIEZ1enppbmcgQ29udGV4dCoqCgpPa2F5LCBzbyB0aGUgc2l0dWF0aW9uIGlzIGNsZWFyLiBTeXprYWxsZXIgY2FuJiMzOTt0IGZ1enogU0RJTyBkZXZpY2VzLCBwZXJpb2QuIFRoYXQgbWVhbnMgYW55IGNoYW5nZXMgdG91Y2hpbmcgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jYCwgb3IgYW55IFNESU8tc3BlY2lmaWMgbG9naWMgd2l0aGluIGBmdy5jYCwgYHJ4LmNgLCBvciBldmVuIGB0eC5jYCBmb3IgdGhhdCBtYXR0ZXIsIGFyZSBlc3NlbnRpYWxseSBpbmFjY2Vzc2libGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhlIHByb21wdCBzcGVjaWZpY2FsbHkgY2FsbHMgb3V0IGNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHVzaW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIC0gbm8gVVNCIGdhZGdldCBvciBtYWM4MDIxMV9od3NpbSBoZXJlLiBUaGlzIGNsZWFybHkgZmFsbHMgdW5kZXIgdGhhdCBjYXRlZ29yeS4KCkxldCBtZSBqdXN0IHF1aWNrbHkgcmV2aWV3IHRoZSBjaGFuZ2VzIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gVGhlIGtleSBmdW5jdGlvbiBpcyBgcnR3X2lzXzg3MjNic2AsIHdoaWNoIGJlY29tZXMgdHJ1ZSB3aGVuIHRoZSBjaGlwIGlzIGFuIDg3MjNCIGFuZCB0aGUgSENJIHR5cGUgaXMgU0RJTy4KCiogICBJbiBgZncuY2AsIGEgY291cGxlIG9mIGNhc2VzIChDMkhcX1ZFTkRPUlxfVFhcX1JQVCBhbmQgQzJIXF9XTEFOXF9SRk9OKSBub3cgdHJpZ2dlciBhIGRpZmZlcmVudCBoYW5kbGVyLCBgcnR3X3R4X3JlcG9ydF9oYW5kbGVgLCAqb25seSogaWYgYHJ0d19pc184NzIzYnMocnR3ZGV2KWAgaXMgdHJ1ZS4gU28gaXQmIzM5O3MgdmVyeSBzcGVjaWZpYyB0byA4NzIzQlMgYW5kIFNESU8uCiogICBgcnguY2AgaGFzIGEgY29uZGl0aW9uIHRoYXQgZ2V0cyBleHRlbmRlZCBmcm9tIFJUV1xfQ0hJUFxfVFlQRVxfODcwM0IgKHdoaWNoIHdhcyBhbHJlYWR5IHRoZXJlKSB0byBpbmNsdWRlIGBydHdfaXNfODcyM2JzKHJ0d2RldilgLiBUaGUgYWRkZWQgY29uZGl0aW9uIGlzIHNwZWNpZmljYWxseSBTRElPLCBmb3IgdGhpcyBjaGlwLgoqICAgYHNkaW8uY2AgaGFzIGEgbG90IG9mIGRpcmVjdCBTRElPLXNwZWNpZmljIGNoYW5nZXMsIHdoaWNoIGlzIGEgYmlnIHJlZCBmbGFnLiBPYnZpb3VzLCBidXQgc3RpbGwgd29ydGggbWVudGlvbmluZy4KKiAgIEluIGB0eC5jYCwgYW4gYE9SYCBjb25kaXRpb24gaGFzIGJlZW4gYWRkZWQsIGFsbG93aW5nIGZvciB0aGUgODcyM0JTLgoKQmFzaWNhbGx5LCBhbGwgZnVuY3Rpb25hbCBjaGFuZ2VzIGJvaWwgZG93biB0byBgcnR3X2lzXzg3MjNicyhydHdkZXYpYCwgd2hpY2ggbmVlZHMgYFJUV19IQ0lfVFlQRV9TRElPYC4gU2luY2UgUUVNVSwgYW5kIHRoZXJlZm9yZSBzeXprYWxsZXIsIGRvZXNuJiMzOTt0IGVtdWxhdGUgU0RJTyBoYXJkd2FyZSwgbm9yIGlzIHRoZXJlIGEgc29mdHdhcmUgU0RJTyBmcmFtZXdvcmsgb2YgdGhhdCBzb3J0LCB0aGlzIGNvZGUgaXMgY29tcGxldGVseSB1bnJlYWNoYWJsZSBpbiBhIGZ1enppbmcgY29udGV4dC4KClRoZXJlZm9yZSwgdGhlIG9ubHkgcmVhc29uYWJsZSBjb25jbHVzaW9uIGlzIHRoYXQgSSBuZWVkIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIHJhdGlvbmFsZSBpcyBzdHJhaWdodGZvcndhcmQ6IHRoaXMgcGF0Y2ggKm9ubHkqIG1vZGlmaWVzIGNvZGUgc3BlY2lmaWMgdG8gYW4gU0RJTyBXaUZpIGNoaXAgKHRoZSBSVEw4NzIzQlMpLCB3aGljaCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSBhbmQgaXMgc2ltcGx5IG5vdCBhY2Nlc3NpYmxlIG9yIGVtdWxhdGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBhbmQgdGh1cyBpbXBvc3NpYmxlIHRvIHJlYWNoIHdpdGggc3l6a2FsbGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGV4Y2x1c2l2ZWx5IGFkZHMgc3VwcG9ydCBhbmQgZml4ZXMgZm9yIHRoZSBSZWFsdGVrIFJUTDg3MjNCUyBTRElPIFdpRmkgY2hpcC4gU0RJTyBkZXZpY2VzIHJlcXVpcmUgcGh5c2ljYWwgaGFyZHdhcmUgb3Igc3BlY2lmaWMgUUVNVSBtYWNoaW5lIGVtdWxhdGlvbiB3aGljaCBpcyBub3QgYXZhaWxhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiBUaGVyZSBpcyBubyBzb2Z0d2FyZSBTRElPIGVtdWxhdGlvbiBmcmFtZXdvcmsgKGxpa2UgZHVtbXlfaGNkIGZvciBVU0IpIHRvIHJlYWNoIHRoZXNlIGNvZGUgcGF0aHMgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBleGNsdXNpdmVseSBhZGRzIHN1cHBvcnQgYW5kIGZpeGVzIGZvciB0aGUgUmVhbHRlayBSVEw4NzIzQlMgU0RJTyBXaUZpIGNoaXAuIFNESU8gZGV2aWNlcyByZXF1aXJlIHBoeXNpY2FsIGhhcmR3YXJlIG9yIHNwZWNpZmljIFFFTVUgbWFjaGluZSBlbXVsYXRpb24gd2hpY2ggaXMgbm90IGF2YWlsYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4gVGhlcmUgaXMgbm8gc29mdHdhcmUgU0RJTyBlbXVsYXRpb24gZnJhbWV3b3JrIChsaWtlIGR1bW15X2hjZCBmb3IgVVNCKSB0byByZWFjaCB0aGVzZSBjb2RlIHBhdGhzIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6NTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjUxOjUwLjcwMjcyMTYxM1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MDE5MjEzODM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZXhjbHVzaXZlbHkgYWRkcyBzdXBwb3J0IGFuZCBmaXhlcyBmb3IgdGhlIFJlYWx0ZWsgUlRMODcyM0JTIFNESU8gV2lGaSBjaGlwLiBTRElPIGRldmljZXMgcmVxdWlyZSBwaHlzaWNhbCBoYXJkd2FyZSBvciBzcGVjaWZpYyBRRU1VIG1hY2hpbmUgZW11bGF0aW9uIHdoaWNoIGlzIG5vdCBhdmFpbGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuIFRoZXJlIGlzIG5vIHNvZnR3YXJlIFNESU8gZW11bGF0aW9uIGZyYW1ld29yayAobGlrZSBkdW1teV9oY2QgZm9yIFVTQikgdG8gcmVhY2ggdGhlc2UgY29kZSBwYXRocyBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjUxOjUwLjcwMjcyOTI0M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA5NjkwMDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYTQxODI1NjE3ODQ0ZWE1MzkxZjA1Y2U0NDhmODY5Mzk1YjBlMGNhOFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAxMSAwOTo1MTo0OSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2Z3LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2Z3LmNcXG5pbmRleCA5NDVmZWRjZDM3NWI2Li5jODVjMGUzZTYwYTk3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvZncuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvZncuY1xcbkBAIC0zMTcsNiArMzE3LDE1IEBAIHZvaWQgcnR3X2Z3X2MyaF9jbWRfaGFuZGxlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdGNhc2UgQzJIX0NDWF9UWF9SUFQ6XFxuIFxcdFxcdHJ0d190eF9yZXBvcnRfaGFuZGxlKHJ0d2Rldiwgc2tiLCBDMkhfQ0NYX1RYX1JQVCk7XFxuIFxcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEMySF9WRU5ET1JfVFhfUlBUOlxcbitcXHRjYXNlIEMySF9XTEFOX1JGT046XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFRoZSBSVEw4NzIzQlMgZmlybXdhcmUgcmVwb3J0cyBtYW5hZ2VtZW50IFRYIHRocm91Z2ggdGhlc2VcXG4rXFx0XFx0ICogdHdvIGV2ZW50cyBpbnN0ZWFkLCB1c2luZyB0aGUgc2FtZSBwYXlsb2FkIGxheW91dC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpXFxuK1xcdFxcdFxcdHJ0d190eF9yZXBvcnRfaGFuZGxlKHJ0d2Rldiwgc2tiLCBDMkhfQ0NYX1RYX1JQVCk7XFxuK1xcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIEMySF9CVF9JTkZPOlxcbiBcXHRcXHRydHdfY29leF9idF9pbmZvX25vdGlmeShydHdkZXYsIGMyaC1cXHUwMDNlcGF5bG9hZCwgbGVuKTtcXG4gXFx0XFx0YnJlYWs7XFxuQEAgLTM2NSw2ICszNzQsMTcgQEAgdm9pZCBydHdfZndfYzJoX2NtZF9yeF9pcnFzYWZlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHUzMiBwa3Rfb2Zmc2V0LFxcbiBcXHRcXHRydHdfY29leF9pbmZvX3Jlc3BvbnNlKHJ0d2Rldiwgc2tiKTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgQzJIX1dMQU5fUkZPTjpcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogT24gODcyM0JTIFNESU8gd2l0aCB2NDEgZmlybXdhcmUsIEMySCAweDMyIGNhcnJpZXMgYSBzY2FuIFRYXFxuK1xcdFxcdCAqIHJlcG9ydCwgbm90IGEgV0xBTl9SRk9OIGV2ZW50OiBkZWZlciBpdCB0b1xcbitcXHRcXHQgKiBydHdfZndfYzJoX2NtZF9oYW5kbGUoKS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpIHtcXG4rXFx0XFx0XFx0KigodTMyICopc2tiLVxcdTAwM2VjYikgPSBwa3Rfb2Zmc2V0O1xcbitcXHRcXHRcXHRza2JfcXVldWVfdGFpbChcXHUwMDI2cnR3ZGV2LVxcdTAwM2VjMmhfcXVldWUsIHNrYik7XFxuK1xcdFxcdFxcdGllZWU4MDIxMV9xdWV1ZV93b3JrKHJ0d2Rldi1cXHUwMDNlaHcsIFxcdTAwMjZydHdkZXYtXFx1MDAzZWMyaF93b3JrKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4gXFx0XFx0Y29tcGxldGUoXFx1MDAyNnJ0d2Rldi1cXHUwMDNlbHBzX2xlYXZlX2NoZWNrKTtcXG4gXFx0XFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcXG4gXFx0XFx0YnJlYWs7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvZncuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvZncuaFxcbmluZGV4IDQ4YWQ5Y2VhYjZlYTEuLmJkZGE3OGRjNjQ2MmEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9mdy5oXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9mdy5oXFxuQEAgLTU0LDYgKzU0LDExIEBAIGVudW0gcnR3X2MyaF9jbWRfaWQge1xcbiBcXHRDMkhfQlRfTVBfSU5GTyA9IDB4MGIsXFxuIFxcdEMySF9CVF9ISURfSU5GTyA9IDB4NDUsXFxuIFxcdEMySF9SQV9SUFQgPSAweDBjLFxcbitcXHQvKlxcbitcXHQgKiA4NzIzQlMgU0RJTyB2ZW5kb3IgdjQxIGZpcm13YXJlIG1hbmFnZW1lbnQgVFggcmVwb3J0ICgweDMyIGlzXFxuK1xcdCAqIHJlcG9ydGVkIGFzIEMySF9XTEFOX1JGT04sIGhhbmRsZWQgcGVyLWNoaXAgaW4gdGhlIEMySCBkaXNwYXRjaCkuXFxuK1xcdCAqL1xcbitcXHRDMkhfVkVORE9SX1RYX1JQVCA9IDB4MTIsXFxuIFxcdEMySF9IV19GRUFUVVJFX1JFUE9SVCA9IDB4MTksXFxuIFxcdEMySF9XTEFOX0lORk8gPSAweDI3LFxcbiBcXHRDMkhfV0xBTl9SRk9OID0gMHgzMixcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaFxcbmluZGV4IGM2ZTk4MWJhNzk4NjguLjhmODZmN2MxMmRlNWEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmhcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaFxcbkBAIC0xOTQsNiArMTk0LDcgQEAgZW51bSBydHdfY2hpcF90eXBlIHtcXG4gXFx0UlRXX0NISVBfVFlQRV84NzIzRCxcXG4gXFx0UlRXX0NISVBfVFlQRV84ODIxQyxcXG4gXFx0UlRXX0NISVBfVFlQRV84NzAzQixcXG4rXFx0UlRXX0NISVBfVFlQRV84NzIzQixcXG4gXFx0UlRXX0NISVBfVFlQRV84ODIxQSxcXG4gXFx0UlRXX0NISVBfVFlQRV84ODEyQSxcXG4gXFx0UlRXX0NISVBfVFlQRV84ODE0QSxcXG5AQCAtMjE5NCw2ICsyMTk1LDEyIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBydHdfY2hpcF9oYXNfdHhfc3RiYyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbiBcXHRyZXR1cm4gcnR3ZGV2LVxcdTAwM2VjaGlwLVxcdTAwM2V0eF9zdGJjO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIGJvb2wgcnR3X2lzXzg3MjNicyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbit7XFxuK1xcdHJldHVybiBydHdkZXYtXFx1MDAzZWNoaXAtXFx1MDAzZWlkID09IFJUV19DSElQX1RZUEVfODcyM0IgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAgIHJ0d2Rldi1cXHUwMDNlaGNpLnR5cGUgPT0gUlRXX0hDSV9UWVBFX1NESU87XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgdTggcnR3X2FjcXVpcmVfbWFjaWQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIG1hY19pZDtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9yeC5jXFxuaW5kZXggMDFmZDI5OWFiYjdmZS4uYTkzNjFlZjRiOTNjMCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J4LmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J4LmNcXG5AQCAtMjUzLDEwICsyNTMsMTIgQEAgc3RhdGljIHZvaWQgcnR3X3J4X2ZpbGxfcnhfc3RhdHVzKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXFxuIFxcbiBcXHRydHdfcnhfYWRkcl9tYXRjaChydHdkZXYsIHBrdF9zdGF0LCBoZHIpO1xcbiBcXG4tXFx0LyogUnRsODcyM2NzIGRyaXZlciBjaGVja3MgZm9yIHNpemUgXFx1MDAzYyAxNCBvciBzaXplIFxcdTAwM2UgODE5MiBhbmRcXG4tXFx0ICogc2ltcGx5IGRyb3BzIHRoZSBwYWNrZXQuXFxuK1xcdC8qXFxuK1xcdCAqIFJ0bDg3MjNjcyBhbmQgcnRsODcyM2JzIGRyaXZlcnMgY2hlY2sgZm9yIHNpemUgXFx1MDAzYyAxNCBvciBzaXplIFxcdTAwM2UgODE5MlxcbitcXHQgKiBhbmQgc2ltcGx5IGRyb3AgdGhlIHBhY2tldC5cXG4gXFx0ICovXFxuLVxcdGlmIChydHdkZXYtXFx1MDAzZWNoaXAtXFx1MDAzZWlkID09IFJUV19DSElQX1RZUEVfODcwM0IgXFx1MDAyNlxcdTAwMjYgcGt0X3N0YXQtXFx1MDAzZXBrdF9sZW4gPT0gMCkge1xcbitcXHRpZiAoKHJ0d2Rldi1cXHUwMDNlY2hpcC1cXHUwMDNlaWQgPT0gUlRXX0NISVBfVFlQRV84NzAzQiB8fCBydHdfaXNfODcyM2JzKHJ0d2RldikpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBwa3Rfc3RhdC1cXHUwMDNlcGt0X2xlbiA9PSAwKSB7XFxuIFxcdFxcdHJ4X3N0YXR1cy1cXHUwMDNlZmxhZyB8PSBSWF9GTEFHX05PX1BTRFU7XFxuIFxcdFxcdHJ0d19kYmcocnR3ZGV2LCBSVFdfREJHX1JYLCBcXFwiemVybyBsZW5ndGggcGFja2V0XFxcIik7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uY1xcbmluZGV4IDViNDBkNzRiMTZlZTAuLmVkMWJlZDhlYTE0NGEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uY1xcbkBAIC0yMCw2ICsyMCwxNyBAQFxcbiAjaW5jbHVkZSBcXFwidHguaFxcXCJcXG4gXFxuICNkZWZpbmUgUlRXX1NESU9fSU5ESVJFQ1RfUldfUkVUUklFU1xcdFxcdFxcdDUwXFxuKyNkZWZpbmUgUlRXX1NESU9fT1FUX1RJTUVPVVRfTVNcXHRcXHRcXHRcXHQxMDAwXFxuK1xcbisvKlxcbisgKiA4NzIzQlMgU0RJTyBUWCBGSUZPIGJhY2stcHJlc3N1cmUgd2F0ZXJtYXJrczogc3RvcCB0aGUgbWFjODAyMTEgcXVldWUgb25jZVxcbisgKiB0aGUgcGVyLUFDIHNvZnR3YXJlIEZJRk8gZmlsbHMgcGFzdCB0aGUgaGlnaCB3YXRlcm1hcmssIGFuZCB3YWtlIGl0IGZyb20gdGhlXFxuKyAqIFRYIGRyYWluIHBhdGggb25jZSBpdCBmYWxscyBiYWNrIHRvIHRoZSBsb3cgb25lLiBCb3VuZHMgdGhlIHF1ZXVlaW5nIGxhdGVuY3lcXG4rICogdGhhdCBvdGhlcndpc2UgY2F1c2VzIHVwbGluayBidWZmZXJibG9hdCAvIGNvbmdlc3Rpb24gY29sbGFwc2UuXFxuKyAqL1xcbisjZGVmaW5lIFJUV19TRElPX1RYX0ZJRk9fSElXQVRFUlxcdFxcdFxcdDE2XFxuKyNkZWZpbmUgUlRXX1NESU9fVFhfRklGT19MT1dBVEVSXFx0XFx0XFx0OFxcbisjZGVmaW5lIFJUV19TRElPX1RYX1JFVFJZX0RFTEFZXFx0XFx0XFx0bXNlY3NfdG9famlmZmllcygxKVxcbiBcXG4gc3RhdGljIGJvb2wgcnR3X3NkaW9faXNfYnVzX2FkZHIodTMyIGFkZHIpXFxuIHtcXG5AQCAtNTQ4LDEyICs1NTksMTIyIEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9fcmVhZF9wb3J0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4ICpidWYsIHNpemVfdCBjb3VudClcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rLypcXG4rICogVGhlIGNhY2hlZCBmcmVlIHBhZ2UgY291bnRlcnMgYXJlIGEgZmFzdCBwYXRoIGhpbnQgb25seS4gVGhleSBhcmUgd3JpdHRlblxcbisgKiBmcm9tIHRoZSBzaW5nbGUgdGhyZWFkZWQgVFggd29yayBhbmQsIGZvciBIMkMgYW5kIHJlc2VydmVkIHBhZ2Ugd3JpdGVzLFxcbisgKiBmcm9tIHByb2Nlc3MgY29udGV4dCwgc28gdGhleSBhcmUgYXRvbWljX3Q7IHdoZW5ldmVyIHRoZXkgY2xhaW0gdGhlcmUgaXNcXG4rICogbm90IGVub3VnaCByb29tIHRoZXkgYXJlIHJlc3luY2hyb25pc2VkIGZyb20gdGhlIGNoaXAgYmVmb3JlIHRoZSBjYWxsZXJcXG4rICogZ2l2ZXMgdXAsIHdoaWNoIGFsc28gYWJzb3JicyBhIGxvc3QgdXBkYXRlLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgcnR3X3NkaW9fODcyM2JzX3N0b3JlX2ZyZWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgdTMyIGZyZWVfdHhwZylcXG4re1xcbitcXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVxcdTAwM2Vwcml2O1xcbitcXG4rXFx0YXRvbWljX3NldChcXHUwMDI2cnR3c2Rpby1cXHUwMDNlZnJlZV9wZ19oaWdoLFxcbitcXHRcXHQgICB1MzJfZ2V0X2JpdHMoZnJlZV90eHBnLCBCSVRfRlJFRV9UWFBHX0hJR0gpKTtcXG4rXFx0YXRvbWljX3NldChcXHUwMDI2cnR3c2Rpby1cXHUwMDNlZnJlZV9wZ19ub3JtYWwsXFxuK1xcdFxcdCAgIHUzMl9nZXRfYml0cyhmcmVlX3R4cGcsIEJJVF9GUkVFX1RYUEdfTk9STUFMKSk7XFxuK1xcdGF0b21pY19zZXQoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZWZyZWVfcGdfbG93LFxcbitcXHRcXHQgICB1MzJfZ2V0X2JpdHMoZnJlZV90eHBnLCBCSVRfRlJFRV9UWFBHX0xPVykpO1xcbitcXHRhdG9taWNfc2V0KFxcdTAwMjZydHdzZGlvLVxcdTAwM2VmcmVlX3BnX3B1YixcXG4rXFx0XFx0ICAgdTMyX2dldF9iaXRzKGZyZWVfdHhwZywgQklUX0ZSRUVfVFhQR19QVUIpKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcnR3X3NkaW9fODcyM2JzX2luaXRfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cXHUwMDNlcHJpdjtcXG4rXFx0Y29uc3Qgc3RydWN0IHJ0d19wYWdlX3RhYmxlICpwZ190Ymw7XFxuK1xcdHUzMiBmcmVlX3R4cGc7XFxuK1xcdHUxNiBwdWJxX251bTtcXG4rXFxuK1xcdGZyZWVfdHhwZyA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19GUkVFX1RYUEcpO1xcbitcXHRpZiAoZnJlZV90eHBnKSB7XFxuK1xcdFxcdHJ0d19zZGlvXzg3MjNic19zdG9yZV9mcmVlX3R4cGcocnR3ZGV2LCBmcmVlX3R4cGcpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRwZ190YmwgPSBcXHUwMDI2cnR3ZGV2LVxcdTAwM2VjaGlwLVxcdTAwM2VwYWdlX3RhYmxlWzBdO1xcbitcXHRcXHRwdWJxX251bSA9IHJ0d2Rldi1cXHUwMDNlZmlmby5hY3FfcGdfbnVtIC0gcGdfdGJsLVxcdTAwM2VocV9udW0gLVxcbitcXHRcXHRcXHQgICBwZ190YmwtXFx1MDAzZWxxX251bSAtIHBnX3RibC1cXHUwMDNlbnFfbnVtIC0gcGdfdGJsLVxcdTAwM2VleHFfbnVtIC1cXG4rXFx0XFx0XFx0ICAgcGdfdGJsLVxcdTAwM2VnYXBxX251bTtcXG4rXFxuK1xcdFxcdGF0b21pY19zZXQoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZWZyZWVfcGdfaGlnaCwgcGdfdGJsLVxcdTAwM2VocV9udW0pO1xcbitcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZydHdzZGlvLVxcdTAwM2VmcmVlX3BnX25vcm1hbCwgcGdfdGJsLVxcdTAwM2VucV9udW0pO1xcbitcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZydHdzZGlvLVxcdTAwM2VmcmVlX3BnX2xvdywgcGdfdGJsLVxcdTAwM2VscV9udW0pO1xcbitcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZydHdzZGlvLVxcdTAwM2VmcmVlX3BnX3B1YiwgcHVicV9udW0pO1xcbitcXHR9XFxuK1xcbitcXHRhdG9taWNfc2V0KFxcdTAwMjZydHdzZGlvLVxcdTAwM2V0eF9vcXRfZnJlZSxcXG4rXFx0XFx0ICAgcnR3X3JlYWQ4KHJ0d2RldiwgUkVHX1NESU9fT1FUX0ZSRUVfUEcpKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcnR3X3NkaW9fODcyM2JzX3N5bmNfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuK3tcXG4rXFx0dTMyIGZyZWVfdHhwZyA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19GUkVFX1RYUEcpO1xcbitcXG4rXFx0aWYgKGZyZWVfdHhwZylcXG4rXFx0XFx0cnR3X3NkaW9fODcyM2JzX3N0b3JlX2ZyZWVfdHhwZyhydHdkZXYsIGZyZWVfdHhwZyk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFN1bSBvZiB0aGUgcXVldWUncyBkZWRpY2F0ZWQgY291bnRlciBhbmQgdGhlIHB1YmxpYyBwb29sLCBjbGFtcGVkIGF0IHplcm86XFxuKyAqIGEgbG9zdCB1cGRhdGUgYmV0d2VlbiB0aGUgY2hlY2sgYmVsb3cgYW5kIHJ0d19zZGlvXzg3MjNic19jb25zdW1lX3R4cGcoKVxcbisgKiBjYW4gYnJpZWZseSBkcml2ZSBhIGNvdW50ZXIgbmVnYXRpdmUsIGFuZCBsZXR0aW5nIHRoYXQgd3JhcCB3b3VsZCBoaWRlIHRoZVxcbisgKiBzaG9ydGFnZSBpbnN0ZWFkIG9mIHRyaWdnZXJpbmcgYSByZXN5bmMgZnJvbSB0aGUgY2hpcC5cXG4rICovXFxuK3N0YXRpYyB1bnNpZ25lZCBpbnQgcnR3X3NkaW9fODcyM2JzX3BhZ2VzX2ZyZWUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIGF0b21pY190ICpkZWRpY2F0ZWQpXFxuK3tcXG4rXFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cXHUwMDNlcHJpdjtcXG4rXFx0aW50IGZyZWU7XFxuK1xcbitcXHRmcmVlID0gYXRvbWljX3JlYWQoZGVkaWNhdGVkKSArIGF0b21pY19yZWFkKFxcdTAwMjZydHdzZGlvLVxcdTAwM2VmcmVlX3BnX3B1Yik7XFxuK1xcbitcXHRyZXR1cm4gZnJlZSBcXHUwMDNlIDAgPyBmcmVlIDogMDtcXG4rfVxcbitcXG4rc3RhdGljIGF0b21pY190ICpydHdfc2Rpb184NzIzYnNfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IHF1ZXVlKVxcbit7XFxuK1xcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXFx1MDAzZXByaXY7XFxuK1xcbitcXHRzd2l0Y2ggKHF1ZXVlKSB7XFxuK1xcdGNhc2UgUlRXX1RYX1FVRVVFX1ZJOlxcbitcXHRcXHRyZXR1cm4gXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZWZyZWVfcGdfbm9ybWFsO1xcbitcXHRjYXNlIFJUV19UWF9RVUVVRV9CRTpcXG4rXFx0Y2FzZSBSVFdfVFhfUVVFVUVfQks6XFxuK1xcdFxcdHJldHVybiBcXHUwMDI2cnR3c2Rpby1cXHUwMDNlZnJlZV9wZ19sb3c7XFxuK1xcdGNhc2UgUlRXX1RYX1FVRVVFX0JDTjpcXG4rXFx0Y2FzZSBSVFdfVFhfUVVFVUVfSDJDOlxcbitcXHRjYXNlIFJUV19UWF9RVUVVRV9ISTA6XFxuK1xcdGNhc2UgUlRXX1RYX1FVRVVFX01HTVQ6XFxuK1xcdGNhc2UgUlRXX1RYX1FVRVVFX1ZPOlxcbitcXHRcXHRyZXR1cm4gXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZWZyZWVfcGdfaGlnaDtcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdH1cXG4rfVxcbitcXG4gc3RhdGljIGludCBydHdfc2Rpb19jaGVja19mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggcXVldWUsXFxuIFxcdFxcdFxcdFxcdCAgICBzaXplX3QgY291bnQpXFxuIHtcXG4gXFx0dW5zaWduZWQgaW50IHBhZ2VzX2ZyZWUsIHBhZ2VzX25lZWRlZDtcXG4gXFxuLVxcdGlmIChydHdfY2hpcF93Y3B1XzgwNTEocnR3ZGV2KSkge1xcbitcXHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKSB7XFxuK1xcdFxcdGF0b21pY190ICpkZWRpY2F0ZWQ7XFxuK1xcbitcXHRcXHRkZWRpY2F0ZWQgPSBydHdfc2Rpb184NzIzYnNfZnJlZV90eHBnKHJ0d2RldiwgcXVldWUpO1xcbitcXHRcXHRpZiAoIWRlZGljYXRlZCkge1xcbitcXHRcXHRcXHRydHdfd2FybihydHdkZXYsIFxcXCJVbmtub3duIG1hcHBpbmcgZm9yIHF1ZXVlICV1XFxcXG5cXFwiLCBxdWV1ZSk7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRwYWdlc19mcmVlID0gcnR3X3NkaW9fODcyM2JzX3BhZ2VzX2ZyZWUocnR3ZGV2LCBkZWRpY2F0ZWQpO1xcbitcXHRcXHRwYWdlc19uZWVkZWQgPSBESVZfUk9VTkRfVVAoY291bnQsIHJ0d2Rldi1cXHUwMDNlY2hpcC1cXHUwMDNlcGFnZV9zaXplKTtcXG4rXFx0XFx0aWYgKHBhZ2VzX25lZWRlZCBcXHUwMDNjPSBwYWdlc19mcmVlKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdFxcdHJ0d19zZGlvXzg3MjNic19zeW5jX2ZyZWVfdHhwZyhydHdkZXYpO1xcbitcXHRcXHRwYWdlc19mcmVlID0gcnR3X3NkaW9fODcyM2JzX3BhZ2VzX2ZyZWUocnR3ZGV2LCBkZWRpY2F0ZWQpO1xcbitcXHR9IGVsc2UgaWYgKHJ0d19jaGlwX3djcHVfODA1MShydHdkZXYpKSB7XFxuIFxcdFxcdHUzMiBmcmVlX3R4cGc7XFxuIFxcbiBcXHRcXHRmcmVlX3R4cGcgPSBydHdfc2Rpb19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19GUkVFX1RYUEcpO1xcbkBAIC02MzIsNDQgKzc1MywxMjMgQEAgc3RhdGljIGludCBydHdfc2Rpb19jaGVja19mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggcXVldWUsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IHJ0d19zZGlvXzg3MjNic193YWl0X3R4X29xdChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXFx1MDAzZXByaXY7XFxuK1xcdHU4IGZyZWU7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0aWYgKGF0b21pY19hZGRfdW5sZXNzKFxcdTAwMjZydHdzZGlvLVxcdTAwM2V0eF9vcXRfZnJlZSwgLTEsIDApKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBSVFdfU0RJT19PUVRfVElNRU9VVF9NUzsgaSsrKSB7XFxuK1xcdFxcdGZyZWUgPSBydHdfcmVhZDgocnR3ZGV2LCBSRUdfU0RJT19PUVRfRlJFRV9QRyk7XFxuK1xcdFxcdGlmIChmcmVlKSB7XFxuK1xcdFxcdFxcdGF0b21pY19zZXQoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZXR4X29xdF9mcmVlLCBmcmVlIC0gMSk7XFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHRcXHR9XFxuK1xcdFxcdHVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIC1FQlVTWTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcnR3X3NkaW9fODcyM2JzX2NvbnN1bWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCBxdWV1ZSxcXG4rXFx0XFx0XFx0XFx0XFx0IHVuc2lnbmVkIGludCBwYWdlcylcXG4re1xcbitcXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVxcdTAwM2Vwcml2O1xcbitcXHRhdG9taWNfdCAqZGVkaWNhdGVkO1xcbitcXHR1bnNpZ25lZCBpbnQgdGFrZW47XFxuK1xcdGludCBmcmVlO1xcbitcXG4rXFx0ZGVkaWNhdGVkID0gcnR3X3NkaW9fODcyM2JzX2ZyZWVfdHhwZyhydHdkZXYsIHF1ZXVlKTtcXG4rXFx0aWYgKCFkZWRpY2F0ZWQpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGZyZWUgPSBhdG9taWNfcmVhZChkZWRpY2F0ZWQpO1xcbitcXHR0YWtlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgcGFnZXMsIGZyZWUgXFx1MDAzZSAwID8gZnJlZSA6IDApO1xcbitcXHRhdG9taWNfc3ViKHRha2VuLCBkZWRpY2F0ZWQpO1xcbitcXG4rXFx0cGFnZXMgLT0gdGFrZW47XFxuK1xcdGlmIChwYWdlcyBcXHUwMDI2XFx1MDAyNiBhdG9taWNfc3ViX3JldHVybihwYWdlcywgXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZWZyZWVfcGdfcHViKSBcXHUwMDNjIDApXFxuK1xcdFxcdGF0b21pY19zZXQoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZWZyZWVfcGdfcHViLCAwKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBydHdfc2Rpb193cml0ZV9wb3J0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdCAgICAgICBlbnVtIHJ0d190eF9xdWV1ZV90eXBlIHF1ZXVlKVxcbiB7XFxuIFxcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXFx1MDAzZXByaXY7XFxuK1xcdGJvb2wgcnRsODcyM2JzID0gcnR3X2lzXzg3MjNicyhydHdkZXYpO1xcbitcXHR1bnNpZ25lZCBpbnQgb3JpZ19sZW4gPSBza2ItXFx1MDAzZWxlbjtcXG4rXFx0dW5zaWduZWQgaW50IHBhZ2VzO1xcbitcXHRzaXplX3Qgd3JpdGVfc2l6ZTtcXG4gXFx0Ym9vbCBidXNfY2xhaW07XFxuIFxcdHNpemVfdCB0eHNpemU7XFxuIFxcdHUzMiB0eGFkZHI7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHR0eGFkZHIgPSBydHdfc2Rpb19nZXRfdHhfYWRkcihydHdkZXYsIHNrYi1cXHUwMDNlbGVuLCBxdWV1ZSk7XFxuLVxcdGlmICghdHhhZGRyKVxcbi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0aWYgKHJ0bDg3MjNicykge1xcbitcXHRcXHR0eHNpemUgPSByb3VuZF91cChvcmlnX2xlbiwgNCk7XFxuK1xcdFxcdHdyaXRlX3NpemUgPSB0eHNpemUgXFx1MDAzZSBSVFdfU0RJT19CTE9DS19TSVpFID9cXG4rXFx0XFx0XFx0ICAgICByb3VuZF91cCh0eHNpemUsIFJUV19TRElPX0JMT0NLX1NJWkUpIDogdHhzaXplO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHR0eHNpemUgPSBzZGlvX2FsaWduX3NpemUocnR3c2Rpby1cXHUwMDNlc2Rpb19mdW5jLCBvcmlnX2xlbik7XFxuK1xcdFxcdHdyaXRlX3NpemUgPSB0eHNpemU7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICh3cml0ZV9zaXplIFxcdTAwM2Ugb3JpZ19sZW4pIHtcXG4rXFx0XFx0dW5zaWduZWQgaW50IHBhZGRpbmcgPSB3cml0ZV9zaXplIC0gb3JpZ19sZW47XFxuIFxcbi1cXHR0eHNpemUgPSBzZGlvX2FsaWduX3NpemUocnR3c2Rpby1cXHUwMDNlc2Rpb19mdW5jLCBza2ItXFx1MDAzZWxlbik7XFxuK1xcdFxcdGlmIChza2JfdGFpbHJvb20oc2tiKSBcXHUwMDNjIHBhZGRpbmcpIHtcXG4rXFx0XFx0XFx0cmV0ID0gcHNrYl9leHBhbmRfaGVhZChza2IsIDAsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBwYWRkaW5nIC0gc2tiX3RhaWxyb29tKHNrYiksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBHRlBfS0VSTkVMKTtcXG4rXFx0XFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0fVxcbitcXHRcXHRza2JfcHV0X3plcm8oc2tiLCBwYWRkaW5nKTtcXG4rXFx0fVxcbitcXG4rXFx0dHhhZGRyID0gcnR3X3NkaW9fZ2V0X3R4X2FkZHIocnR3ZGV2LCB0eHNpemUsIHF1ZXVlKTtcXG4rXFx0aWYgKCF0eGFkZHIpIHtcXG4rXFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4rXFx0XFx0Z290byBvdXRfdHJpbTtcXG4rXFx0fVxcbiBcXG4gXFx0cmV0ID0gcnR3X3NkaW9fY2hlY2tfZnJlZV90eHBnKHJ0d2RldiwgcXVldWUsIHR4c2l6ZSk7XFxuIFxcdGlmIChyZXQpXFxuLVxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdGdvdG8gb3V0X3RyaW07XFxuK1xcbitcXHRpZiAocnRsODcyM2JzKSB7XFxuK1xcdFxcdHJldCA9IHJ0d19zZGlvXzg3MjNic193YWl0X3R4X29xdChydHdkZXYpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRnb3RvIG91dF90cmltO1xcbitcXHR9XFxuIFxcbiBcXHRpZiAoIUlTX0FMSUdORUQoKHVuc2lnbmVkIGxvbmcpc2tiLVxcdTAwM2VkYXRhLCBSVFdfU0RJT19EQVRBX1BUUl9BTElHTikpXFxuIFxcdFxcdHJ0d193YXJuKHJ0d2RldiwgXFxcIkdvdCB1bmFsaWduZWQgU0tCIGluICVzKCkgZm9yIHF1ZXVlICV1XFxcXG5cXFwiLFxcbiBcXHRcXHRcXHQgX19mdW5jX18sIHF1ZXVlKTtcXG4gXFxuIFxcdGJ1c19jbGFpbSA9IHJ0d19zZGlvX2J1c19jbGFpbV9uZWVkZWQocnR3c2Rpbyk7XFxuLVxcbiBcXHRpZiAoYnVzX2NsYWltKVxcbiBcXHRcXHRzZGlvX2NsYWltX2hvc3QocnR3c2Rpby1cXHUwMDNlc2Rpb19mdW5jKTtcXG4tXFxuLVxcdHJldCA9IHNkaW9fbWVtY3B5X3RvaW8ocnR3c2Rpby1cXHUwMDNlc2Rpb19mdW5jLCB0eGFkZHIsIHNrYi1cXHUwMDNlZGF0YSwgdHhzaXplKTtcXG4tXFxuK1xcdHJldCA9IHNkaW9fbWVtY3B5X3RvaW8ocnR3c2Rpby1cXHUwMDNlc2Rpb19mdW5jLCB0eGFkZHIsIHNrYi1cXHUwMDNlZGF0YSxcXG4rXFx0XFx0XFx0ICAgICAgIHdyaXRlX3NpemUpO1xcbiBcXHRpZiAoYnVzX2NsYWltKVxcbiBcXHRcXHRzZGlvX3JlbGVhc2VfaG9zdChydHdzZGlvLVxcdTAwM2VzZGlvX2Z1bmMpO1xcbiBcXG4tXFx0aWYgKHJldClcXG4rXFx0aWYgKHJldCkge1xcbiBcXHRcXHRydHdfd2FybihydHdkZXYsXFxuIFxcdFxcdFxcdCBcXFwiRmFpbGVkIHRvIHdyaXRlICV6dSBieXRlKHMpIHRvIFNESU8gcG9ydCAweCUwOHhcXFwiLFxcbi1cXHRcXHRcXHQgdHhzaXplLCB0eGFkZHIpO1xcbitcXHRcXHRcXHQgd3JpdGVfc2l6ZSwgdHhhZGRyKTtcXG4rXFx0fSBlbHNlIGlmIChydGw4NzIzYnMpIHtcXG4rXFx0XFx0cGFnZXMgPSBESVZfUk9VTkRfVVAodHhzaXplLCBydHdkZXYtXFx1MDAzZWNoaXAtXFx1MDAzZXBhZ2Vfc2l6ZSk7XFxuK1xcdFxcdHJ0d19zZGlvXzg3MjNic19jb25zdW1lX3R4cGcocnR3ZGV2LCBxdWV1ZSwgcGFnZXMpO1xcbitcXHR9XFxuIFxcbitvdXRfdHJpbTpcXG4rXFx0aWYgKHdyaXRlX3NpemUgXFx1MDAzZSBvcmlnX2xlbilcXG4rXFx0XFx0c2tiX3RyaW0oc2tiLCBvcmlnX2xlbik7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuQEAgLTY3Nyw3ICs4NzcsMTEgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9faW5pdChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXFx1MDAzZXByaXY7XFxuIFxcbi1cXHRydHdzZGlvLVxcdTAwM2VpcnFfbWFzayA9IFJFR19TRElPX0hJTVJfUlhfUkVRVUVTVCB8IFJFR19TRElPX0hJTVJfQ1BXTTE7XFxuK1xcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpXFxuK1xcdFxcdHJ0d3NkaW8tXFx1MDAzZWlycV9tYXNrID0gUkVHX1NESU9fSElNUl9SWF9SRVFVRVNUO1xcbitcXHRlbHNlXFxuK1xcdFxcdHJ0d3NkaW8tXFx1MDAzZWlycV9tYXNrID0gUkVHX1NESU9fSElNUl9SWF9SRVFVRVNUIHxcXG4rXFx0XFx0XFx0XFx0ICAgIFJFR19TRElPX0hJTVJfQ1BXTTE7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2VuYWJsZV9yeF9hZ2dyZWdhdGlvbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbkBAIC02ODUsNiArODg5LDcgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9fZW5hYmxlX3J4X2FnZ3JlZ2F0aW9uKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuIFxcdHU4IHNpemUsIHRpbWVvdXQ7XFxuIFxcbiBcXHRzd2l0Y2ggKHJ0d2Rldi1cXHUwMDNlY2hpcC1cXHUwMDNlaWQpIHtcXG4rXFx0Y2FzZSBSVFdfQ0hJUF9UWVBFXzg3MjNCOlxcbiBcXHRjYXNlIFJUV19DSElQX1RZUEVfODcwM0I6XFxuIFxcdGNhc2UgUlRXX0NISVBfVFlQRV84ODIxQTpcXG4gXFx0Y2FzZSBSVFdfQ0hJUF9UWVBFXzg4MTJBOlxcbkBAIC03MTIsNiArOTE3LDggQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9fZW5hYmxlX3J4X2FnZ3JlZ2F0aW9uKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuIFxcdFxcdCAgICBGSUVMRF9QUkVQKEJJVF9ETUFfQUdHX1RPX1YxLCB0aW1lb3V0KSk7XFxuIFxcbiBcXHRydHdfd3JpdGU4X3NldChydHdkZXYsIFJFR19SWERNQV9NT0RFLCBCSVRfRE1BX01PREUpO1xcbitcXHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKVxcbitcXHRcXHRydHdfd3JpdGU4X21hc2socnR3ZGV2LCBSRUdfUlhETUFfTU9ERSwgQklUX0RNQV9CVVJTVF9DTlQsIDB4Myk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2VuYWJsZV9pbnRlcnJ1cHQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG5AQCAtNzQ5LDkgKzk1Niw1MCBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX3NldHVwKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfY2hlY2tfcnFwbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBydHdfY2hpcF9pbmZvICpjaGlwID0gcnR3ZGV2LVxcdTAwM2VjaGlwO1xcbitcXHRzdHJ1Y3QgcnR3X2ZpZm9fY29uZiAqZmlmbyA9IFxcdTAwMjZydHdkZXYtXFx1MDAzZWZpZm87XFxuK1xcdGNvbnN0IHN0cnVjdCBydHdfcGFnZV90YWJsZSAqcGdfdGJsO1xcbitcXHR1MTYgcmVzZXJ2ZWRfbnVtO1xcbitcXHR1MzIgZnJlZV90eHBnO1xcbitcXHR1MTYgcHVicV9udW07XFxuK1xcbitcXHRmcmVlX3R4cGcgPSBydHdfcmVhZDMyKHJ0d2RldiwgUkVHX1NESU9fRlJFRV9UWFBHKTtcXG4rXFx0aWYgKGZyZWVfdHhwZyB8fCAhZmlmby1cXHUwMDNlYWNxX3BnX251bSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0cGdfdGJsID0gXFx1MDAyNmNoaXAtXFx1MDAzZXBhZ2VfdGFibGVbMF07XFxuK1xcdHJlc2VydmVkX251bSA9IHBnX3RibC1cXHUwMDNlaHFfbnVtICsgcGdfdGJsLVxcdTAwM2VscV9udW0gKyBwZ190YmwtXFx1MDAzZW5xX251bSArXFxuK1xcdFxcdCAgICAgICBwZ190YmwtXFx1MDAzZWV4cV9udW0gKyBwZ190YmwtXFx1MDAzZWdhcHFfbnVtO1xcbitcXHRpZiAoZmlmby1cXHUwMDNlYWNxX3BnX251bSBcXHUwMDNjPSByZXNlcnZlZF9udW0pXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHB1YnFfbnVtID0gZmlmby1cXHUwMDNlYWNxX3BnX251bSAtIHJlc2VydmVkX251bTtcXG4rXFx0cnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfUlFQTl9OUFEsXFxuK1xcdFxcdCAgICBCSVRfUlFQTl9ORShwZ190YmwtXFx1MDAzZW5xX251bSwgcGdfdGJsLVxcdTAwM2VleHFfbnVtKSk7XFxuK1xcdHJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1JRUE4sXFxuK1xcdFxcdCAgICBCSVRfUlFQTl9ITFAocGdfdGJsLVxcdTAwM2VocV9udW0sIHBnX3RibC1cXHUwMDNlbHFfbnVtLCBwdWJxX251bSkpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IHJ0d19zZGlvX3N0YXJ0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuIHtcXG4rXFx0dTMyIGNsZWFyO1xcbitcXG4rXFx0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSkge1xcbitcXHRcXHRydHdfc2Rpb184NzIzYnNfY2hlY2tfcnFwbihydHdkZXYpO1xcbitcXHRcXHRydHdfc2Rpb184NzIzYnNfaW5pdF9mcmVlX3R4cGcocnR3ZGV2KTtcXG4rXFx0fVxcbitcXG4gXFx0cnR3X3NkaW9fZW5hYmxlX3J4X2FnZ3JlZ2F0aW9uKHJ0d2Rldik7XFxuK1xcbitcXHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKSB7XFxuK1xcdFxcdGNsZWFyID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19TRElPX0hJU1IpIFxcdTAwMjZcXG4rXFx0XFx0XFx0UlRXX1NESU9fSElTUl9DTEVBUl9NQVNLO1xcbitcXHRcXHRpZiAoY2xlYXIpXFxuK1xcdFxcdFxcdHJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1NESU9fSElTUiwgY2xlYXIpO1xcbitcXHR9XFxuK1xcbiBcXHRydHdfc2Rpb19lbmFibGVfaW50ZXJydXB0KHJ0d2Rldik7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtODE1LDcgKzEwNjMsMTEgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9fdHhfa2lja19vZmYoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG4ge1xcbiBcXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVxcdTAwM2Vwcml2O1xcbiBcXG4tXFx0cXVldWVfd29yayhydHdzZGlvLVxcdTAwM2V0eHdxLCBcXHUwMDI2cnR3c2Rpby1cXHUwMDNldHhfaGFuZGxlcl9kYXRhLVxcdTAwM2V3b3JrKTtcXG4rXFx0LypcXG4rXFx0ICogQSByZXRyeSBtYXkgYWxyZWFkeSBiZSBwZW5kaW5nIHdpdGggYSBkZWxheTsgcmUtYXJtIGl0IHNvIGEgbmV3bHlcXG4rXFx0ICogcXVldWVkIGZyYW1lIGlzIG5vdCBoZWxkIGJhY2sgYnkgaXQuXFxuK1xcdCAqL1xcbitcXHRtb2RfZGVsYXllZF93b3JrKHJ0d3NkaW8tXFx1MDAzZXR4d3EsIFxcdTAwMjZydHdzZGlvLVxcdTAwM2V0eF9oYW5kbGVyX2RhdGEtXFx1MDAzZXdvcmssIDApO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBydHdfc2Rpb19saW5rX3BzKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIGJvb2wgZW50ZXIpXFxuQEAgLTgzMSw2ICsxMDgzLDggQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9faW50ZXJmYWNlX2NmZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbiBcXG4gXFx0dmFsID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19TRElPX1RYX0NUUkwpO1xcbiBcXHR2YWwgXFx1MDAyNj0gMHhmZmY4O1xcbitcXHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKVxcbitcXHRcXHR2YWwgfD0gQklUX1NESU9fVFhfQ1RSTF9BTFdBWVNfUkVDT0dOSVpFO1xcbiBcXHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19TRElPX1RYX0NUUkwsIHZhbCk7XFxuIH1cXG4gXFxuQEAgLTkzNyw2ICsxMTkxLDE5IEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9fdHhfd3JpdGUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcXG4gXFxuIFxcdHNrYl9xdWV1ZV90YWlsKFxcdTAwMjZydHdzZGlvLVxcdTAwM2V0eF9xdWV1ZVtxdWV1ZV0sIHNrYik7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBCYWNrLXByZXNzdXJlIG9uIHRoZSBkYXRhIEFDcyAoQksvQkUvVkkvVk8pOiBvbmNlIHRoZSBGSUZPIGZpbGxzIHBhc3RcXG4rXFx0ICogdGhlIGhpZ2ggd2F0ZXJtYXJrLCBzdG9wIHRoZSBjb3JyZXNwb25kaW5nIG1hYzgwMjExIHF1ZXVlIHNvIGl0IHN0b3BzXFxuK1xcdCAqIGhhbmRpbmcgdXMgZnJhbWVzLCBib3VuZGluZyB0aGUgcXVldWVpbmcgbGF0ZW5jeS4gUmVzdW1lZCBmcm9tIHRoZSBUWFxcbitcXHQgKiBkcmFpbiBwYXRoIG9uY2UgdGhlIEZJRk8gZHJhaW5zIGJlbG93IHRoZSBsb3cgd2F0ZXJtYXJrLlxcbitcXHQgKi9cXG4rXFx0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSBcXHUwMDI2XFx1MDAyNiBxdWV1ZSBcXHUwMDNjIFJUV19UWF9RVUVVRV9CQ04gXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICFydHdzZGlvLVxcdTAwM2VxdWV1ZV9zdG9wcGVkW3F1ZXVlXSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgc2tiX3F1ZXVlX2xlbihcXHUwMDI2cnR3c2Rpby1cXHUwMDNldHhfcXVldWVbcXVldWVdKSBcXHUwMDNlPSBSVFdfU0RJT19UWF9GSUZPX0hJV0FURVIpIHtcXG4rXFx0XFx0cnR3c2Rpby1cXHUwMDNlcXVldWVfc3RvcHBlZFtxdWV1ZV0gPSB0cnVlO1xcbitcXHRcXHRpZWVlODAyMTFfc3RvcF9xdWV1ZShydHdkZXYtXFx1MDAzZWh3LCBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKSk7XFxuK1xcdH1cXG4rXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC0xMDk1LDYgKzEzNjIsMTQgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9faGFuZGxlX2ludGVycnVwdChzdHJ1Y3Qgc2Rpb19mdW5jICpzZGlvX2Z1bmMpXFxuIFxcdFxcdHJ0d19zZGlvX3J4X2lzcihydHdkZXYpO1xcbiBcXHR9XFxuIFxcbitcXHQvKlxcbitcXHQgKiBSVEw4NzIzQlMga2VlcHMgcmFpc2luZyB0aGUgaW50ZXJydXB0IGFmdGVyIHJlc3VtZSBpZiB1bmRlZmluZWRcXG4rXFx0ICogc3RhdHVzIGJpdHMgYXJlIHdyaXR0ZW4gYmFjaywgc28gYWNrbm93bGVkZ2Ugb25seSB0aGUgYml0cyB0aGF0IGFyZVxcbitcXHQgKiBib3RoIGRlZmluZWQgYW5kIHVubWFza2VkLiBPdGhlciBjaGlwcyBrZWVwIHRoZSBleGlzdGluZyBiZWhhdmlvdXIuXFxuK1xcdCAqL1xcbitcXHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKVxcbitcXHRcXHRoaXNyIFxcdTAwMjY9IHJ0d3NkaW8tXFx1MDAzZWlycV9tYXNrIFxcdTAwMjYgUlRXX1NESU9fSElTUl9DTEVBUl9NQVNLO1xcbitcXG4gXFx0cnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfU0RJT19ISVNSLCBoaXNyKTtcXG4gXFxuIFxcdHJ0d3NkaW8tXFx1MDAzZWlycV90aHJlYWQgPSBOVUxMO1xcbkBAIC0xMjMxLDQzICsxNTA2LDkyIEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2luZGljYXRlX3R4X3N0YXR1cyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxcbiBcXHRpZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUoaHcsIHNrYik7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIHJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcXG4tXFx0XFx0XFx0XFx0ICAgICAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSlcXG4rLypcXG4rICogU2VuZCBvbmUgZnJhbWUgZnJvbSBAcXVldWUuIFJldHVybnMgMSB3aGVuIGEgZnJhbWUgd2FzIHdyaXR0ZW4sIDAgd2hlbiB0aGVcXG4rICogcXVldWUgd2FzIGVtcHR5IGFuZCBhIG5lZ2F0aXZlIGVycm5vIHdoZW4gdGhlIHdyaXRlIGZhaWxlZCwgaW4gd2hpY2ggY2FzZVxcbisgKiB0aGUgZnJhbWUgaXMgcHV0IGJhY2sgYXQgdGhlIGhlYWQgb2YgdGhlIHF1ZXVlLlxcbisgKi9cXG4rc3RhdGljIGludCBydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVxcdTAwM2Vwcml2O1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbitcXHR1MTYgcV9tYXA7XFxuIFxcdGludCByZXQ7XFxuIFxcbiBcXHRza2IgPSBza2JfZGVxdWV1ZShcXHUwMDI2cnR3c2Rpby1cXHUwMDNldHhfcXVldWVbcXVldWVdKTtcXG4gXFx0aWYgKCFza2IpXFxuLVxcdFxcdHJldHVybjtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuIFxcbitcXHRxX21hcCA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpO1xcbiBcXHRyZXQgPSBydHdfc2Rpb193cml0ZV9wb3J0KHJ0d2Rldiwgc2tiLCBxdWV1ZSk7XFxuIFxcdGlmIChyZXQpIHtcXG4gXFx0XFx0c2tiX3F1ZXVlX2hlYWQoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZXR4X3F1ZXVlW3F1ZXVlXSwgc2tiKTtcXG4tXFx0XFx0cmV0dXJuO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHR9XFxuIFxcbiBcXHRydHdfc2Rpb19pbmRpY2F0ZV90eF9zdGF0dXMocnR3ZGV2LCBza2IpO1xcbitcXG4rXFx0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSBcXHUwMDI2XFx1MDAyNiBxdWV1ZSBcXHUwMDNjIFJUV19UWF9RVUVVRV9CQ04gXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIHJ0d3NkaW8tXFx1MDAzZXF1ZXVlX3N0b3BwZWRbcXVldWVdIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBza2JfcXVldWVfbGVuKFxcdTAwMjZydHdzZGlvLVxcdTAwM2V0eF9xdWV1ZVtxdWV1ZV0pIFxcdTAwM2M9XFxuK1xcdCAgICBSVFdfU0RJT19UWF9GSUZPX0xPV0FURVIpIHtcXG4rXFx0XFx0cnR3c2Rpby1cXHUwMDNlcXVldWVfc3RvcHBlZFtxdWV1ZV0gPSBmYWxzZTtcXG4rXFx0XFx0aWVlZTgwMjExX3dha2VfcXVldWUocnR3ZGV2LVxcdTAwM2VodywgcV9tYXApO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgcnR3X3NkaW9fdHhfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIHtcXG4gXFx0c3RydWN0IHJ0d19zZGlvX3dvcmtfZGF0YSAqd29ya19kYXRhID1cXG4tXFx0XFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEsIHdvcmspO1xcbitcXHRcXHRjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLCBzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhLFxcbitcXHRcXHRcXHQgICAgIHdvcmspO1xcbiBcXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW87XFxuIFxcdHN0cnVjdCBydHdfZGV2ICpydHdkZXY7XFxuLVxcdGludCBsaW1pdCwgcXVldWU7XFxuK1xcdGludCBsaW1pdCwgcXVldWUsIHJldDtcXG4rXFx0Ym9vbCBydGw4NzIzYnM7XFxuIFxcbiBcXHRydHdkZXYgPSB3b3JrX2RhdGEtXFx1MDAzZXJ0d2RldjtcXG4gXFx0cnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXFx1MDAzZXByaXY7XFxuK1xcdHJ0bDg3MjNicyA9IHJ0d19pc184NzIzYnMocnR3ZGV2KTtcXG4gXFxuIFxcdGlmICghcnR3X2Z3X2ZlYXR1cmVfY2hlY2soXFx1MDAyNnJ0d2Rldi1cXHUwMDNlZncsIEZXX0ZFQVRVUkVfVFhfV0FLRSkpXFxuIFxcdFxcdHJ0d19zZGlvX2RlZXBfcHNfbGVhdmUocnR3ZGV2KTtcXG4gXFxuIFxcdGZvciAocXVldWUgPSBSVEtfTUFYX1RYX1FVRVVFX05VTSAtIDE7IHF1ZXVlIFxcdTAwM2U9IDA7IHF1ZXVlLS0pIHtcXG4gXFx0XFx0Zm9yIChsaW1pdCA9IDA7IGxpbWl0IFxcdTAwM2MgMTAwMDsgbGltaXQrKykge1xcbi1cXHRcXHRcXHRydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlKHJ0d2RldiwgcXVldWUpO1xcbitcXHRcXHRcXHRyZXQgPSBydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlKHJ0d2RldiwgcXVldWUpO1xcbitcXHRcXHRcXHRpZiAocmV0ID09IDApXFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0XFx0ICogQSBwYWdlIHNob3J0YWdlIGlzIHRyYW5zaWVudDogbGVhdmUgdGhlXFxuK1xcdFxcdFxcdFxcdCAqIGZyYW1lIHF1ZXVlZCBhbmQgY29tZSBiYWNrIHNob3J0bHkgaW5zdGVhZFxcbitcXHRcXHRcXHRcXHQgKiBvZiBzdGFsbGluZyB0aGlzIEFDIHVudGlsIHNvbWV0aGluZyBlbHNlXFxuK1xcdFxcdFxcdFxcdCAqIGtpY2tzIHRoZSB3b3JrZXIuXFxuK1xcdFxcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRcXHRpZiAocnRsODcyM2JzIFxcdTAwMjZcXHUwMDI2IHJldCA9PSAtRUJVU1kpIHtcXG4rXFx0XFx0XFx0XFx0XFx0cXVldWVfZGVsYXllZF93b3JrKHJ0d3NkaW8tXFx1MDAzZXR4d3EsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZ3b3JrX2RhdGEtXFx1MDAzZXdvcmssXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIFJUV19TRElPX1RYX1JFVFJZX0RFTEFZKTtcXG4rXFx0XFx0XFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRcXHR9XFxuK1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBSZXN0YXJ0IGZyb20gdGhlIGhpZ2hlc3QgcHJpb3JpdHkgcXVldWUgYWZ0ZXIgZXZlcnlcXG4rXFx0XFx0XFx0ICogbWFuYWdlbWVudCBmcmFtZSBzbyB0aGUgam9pbiBzZXF1ZW5jZSBpcyBub3QgaGVsZCB1cFxcbitcXHRcXHRcXHQgKiBiZWhpbmQgYSBkYXRhIGJhY2tsb2cuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRpZiAocnRsODcyM2JzIFxcdTAwMjZcXHUwMDI2IHF1ZXVlID09IFJUV19UWF9RVUVVRV9NR01UKSB7XFxuK1xcdFxcdFxcdFxcdHF1ZXVlX2RlbGF5ZWRfd29yayhydHdzZGlvLVxcdTAwM2V0eHdxLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2d29ya19kYXRhLVxcdTAwM2V3b3JrLCAwKTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHRcXHR9XFxuIFxcbiBcXHRcXHRcXHRpZiAoc2tiX3F1ZXVlX2VtcHR5KFxcdTAwMjZydHdzZGlvLVxcdTAwM2V0eF9xdWV1ZVtxdWV1ZV0pKVxcbiBcXHRcXHRcXHRcXHRicmVhaztcXG5AQCAtMTI5NCwxNCArMTYxOCwxNiBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX2luaXRfdHgoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdH1cXG4gXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBSVEtfTUFYX1RYX1FVRVVFX05VTTsgaSsrKVxcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgUlRLX01BWF9UWF9RVUVVRV9OVU07IGkrKykge1xcbiBcXHRcXHRza2JfcXVldWVfaGVhZF9pbml0KFxcdTAwMjZydHdzZGlvLVxcdTAwM2V0eF9xdWV1ZVtpXSk7XFxuK1xcdFxcdHJ0d3NkaW8tXFx1MDAzZXF1ZXVlX3N0b3BwZWRbaV0gPSBmYWxzZTtcXG4rXFx0fVxcbiBcXHRydHdzZGlvLVxcdTAwM2V0eF9oYW5kbGVyX2RhdGEgPSBrbWFsbG9jX29iaigqcnR3c2Rpby1cXHUwMDNldHhfaGFuZGxlcl9kYXRhKTtcXG4gXFx0aWYgKCFydHdzZGlvLVxcdTAwM2V0eF9oYW5kbGVyX2RhdGEpXFxuIFxcdFxcdGdvdG8gZXJyX2Rlc3Ryb3lfd3E7XFxuIFxcbiBcXHRydHdzZGlvLVxcdTAwM2V0eF9oYW5kbGVyX2RhdGEtXFx1MDAzZXJ0d2RldiA9IHJ0d2RldjtcXG4tXFx0SU5JVF9XT1JLKFxcdTAwMjZydHdzZGlvLVxcdTAwM2V0eF9oYW5kbGVyX2RhdGEtXFx1MDAzZXdvcmssIHJ0d19zZGlvX3R4X2hhbmRsZXIpO1xcbitcXHRJTklUX0RFTEFZRURfV09SSyhcXHUwMDI2cnR3c2Rpby1cXHUwMDNldHhfaGFuZGxlcl9kYXRhLVxcdTAwM2V3b3JrLCBydHdfc2Rpb190eF9oYW5kbGVyKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiBcXG5AQCAtMTMxNSw2ICsxNjQxLDcgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9fZGVpbml0X3R4KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuIFxcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXFx1MDAzZXByaXY7XFxuIFxcdGludCBpO1xcbiBcXG4rXFx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFxcdTAwMjZydHdzZGlvLVxcdTAwM2V0eF9oYW5kbGVyX2RhdGEtXFx1MDAzZXdvcmspO1xcbiBcXHRkZXN0cm95X3dvcmtxdWV1ZShydHdzZGlvLVxcdTAwM2V0eHdxKTtcXG4gXFx0a2ZyZWUocnR3c2Rpby1cXHUwMDNldHhfaGFuZGxlcl9kYXRhKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmhcXG5pbmRleCA0NTdlOGIwMjM4MGU1Li4yZjFiNjdmNGJiYzdjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmhcXG5AQCAtMjIsNiArMjIsNyBAQFxcbiBcXG4gLyogU0RJTyBUeCBDb250cm9sICovXFxuICNkZWZpbmUgUkVHX1NESU9fVFhfQ1RSTFxcdFxcdFxcdChTRElPX0xPQ0FMX09GRlNFVCArIDB4MDAwMClcXG4rI2RlZmluZSBCSVRfU0RJT19UWF9DVFJMX0FMV0FZU19SRUNPR05JWkVcXHRCSVQoNClcXG4gXFxuIC8qU0RJTyBzdGF0dXMgdGltZW91dCovXFxuICNkZWZpbmUgUkVHX1NESU9fVElNRU9VVFxcdFxcdFxcdChTRElPX0xPQ0FMX09GRlNFVCArIDB4MDAwMilcXG5AQCAtNzcsNiArNzgsMTQgQEBcXG4gLyogdGhlIGZvbGxvd2luZyB0d28gYXJlIFJUTDgxODggU0RJTyBTcGVjaWZpYyAqL1xcbiAjZGVmaW5lIFJFR19TRElPX0hJU1JfTUNVX0VSUlxcdFxcdFxcdEJJVCgyOClcXG4gI2RlZmluZSBSRUdfU0RJT19ISVNSX1RTRl9CSVQzMl9UT0dHTEVcXHRcXHRCSVQoMjkpXFxuKyNkZWZpbmUgUlRXX1NESU9fSElTUl9DTEVBUl9NQVNLXFx0XFx0XFxcXFxcbitcXHQoUkVHX1NESU9fSElTUl9UWEVSUiB8IFJFR19TRElPX0hJU1JfUlhFUlIgfCBcXFxcXFxuK1xcdCBSRUdfU0RJT19ISVNSX1RYRk9WVyB8IFJFR19TRElPX0hJU1JfUlhGT1ZXIHwgXFxcXFxcbitcXHQgUkVHX1NESU9fSElTUl9UWEJDTk9LIHwgUkVHX1NESU9fSElTUl9UWEJDTkVSUiB8IFxcXFxcXG4rXFx0IFJFR19TRElPX0hJU1JfQzJIQ01EIHwgUkVHX1NESU9fSElTUl9DUFdNMSB8IFxcXFxcXG4rXFx0IFJFR19TRElPX0hJU1JfQ1BXTTIgfCBSRUdfU0RJT19ISVNSX0hTSVNSX0lORCB8IFxcXFxcXG4rXFx0IFJFR19TRElPX0hJU1JfR1RJTlQzX0lORCB8IFJFR19TRElPX0hJU1JfR1RJTlQ0X0lORCB8IFxcXFxcXG4rXFx0IFJFR19TRElPX0hJU1JfUFNUSU1FT1VUIHwgUkVHX1NESU9fSElTUl9PQ1BJTlQpXFxuIFxcbiAvKiBIQ0kgQ3VycmVudCBQb3dlciBNb2RlICovXFxuICNkZWZpbmUgUkVHX1NESU9fSENQV01cXHRcXHRcXHRcXHQoU0RJT19MT0NBTF9PRkZTRVQgKyAweDAwMTkpXFxuQEAgLTg2LDYgKzk1LDEwIEBAXFxuICNkZWZpbmUgUkVHX1NESU9fT1FUX0ZSRUVfUEdcXHRcXHRcXHQoU0RJT19MT0NBTF9PRkZTRVQgKyAweDAwMUUpXFxuIC8qIEZyZWUgVHggQnVmZmVyIFBhZ2UgKi9cXG4gI2RlZmluZSBSRUdfU0RJT19GUkVFX1RYUEdcXHRcXHRcXHQoU0RJT19MT0NBTF9PRkZTRVQgKyAweDAwMjApXFxuKyNkZWZpbmUgQklUX0ZSRUVfVFhQR19ISUdIXFx0XFx0XFx0R0VOTUFTSyg3LCAwKVxcbisjZGVmaW5lIEJJVF9GUkVFX1RYUEdfTk9STUFMXFx0XFx0XFx0R0VOTUFTSygxNSwgOClcXG4rI2RlZmluZSBCSVRfRlJFRV9UWFBHX0xPV1xcdFxcdFxcdEdFTk1BU0soMjMsIDE2KVxcbisjZGVmaW5lIEJJVF9GUkVFX1RYUEdfUFVCXFx0XFx0XFx0R0VOTUFTSygzMSwgMjQpXFxuIC8qIEhDSSBDdXJyZW50IFBvd2VyIE1vZGUgMSAqL1xcbiAjZGVmaW5lIFJFR19TRElPX0hDUFdNMVxcdFxcdFxcdFxcdChTRElPX0xPQ0FMX09GRlNFVCArIDB4MDAyNClcXG4gLyogSENJIEN1cnJlbnQgUG93ZXIgTW9kZSAyICovXFxuQEAgLTE0Myw3ICsxNTYsNyBAQCBzdHJ1Y3QgcnR3X3NkaW9fdHhfZGF0YSB7XFxuIH07XFxuIFxcbiBzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhIHtcXG4tXFx0c3RydWN0IHdvcmtfc3RydWN0IHdvcms7XFxuK1xcdHN0cnVjdCBkZWxheWVkX3dvcmsgd29yaztcXG4gXFx0c3RydWN0IHJ0d19kZXYgKnJ0d2RldjtcXG4gfTtcXG4gXFxuQEAgLTE1OSw2ICsxNzIsMTMgQEAgc3RydWN0IHJ0d19zZGlvIHtcXG4gXFx0c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnR4d3E7XFxuIFxcdHN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEgKnR4X2hhbmRsZXJfZGF0YTtcXG4gXFx0c3RydWN0IHNrX2J1ZmZfaGVhZCB0eF9xdWV1ZVtSVEtfTUFYX1RYX1FVRVVFX05VTV07XFxuK1xcdGJvb2wgcXVldWVfc3RvcHBlZFtSVEtfTUFYX1RYX1FVRVVFX05VTV07XFxuK1xcbitcXHRhdG9taWNfdCBmcmVlX3BnX2hpZ2g7XFxuK1xcdGF0b21pY190IGZyZWVfcGdfbm9ybWFsO1xcbitcXHRhdG9taWNfdCBmcmVlX3BnX2xvdztcXG4rXFx0YXRvbWljX3QgZnJlZV9wZ19wdWI7XFxuK1xcdGF0b21pY190IHR4X29xdF9mcmVlO1xcbiB9O1xcbiBcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHJ0d19zZGlvX3BtX29wcztcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC90eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC90eC5jXFxuaW5kZXggODc4NmJiYjQyMWMyYi4uNGUxMTBhNDU3ZTcxZCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3R4LmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3R4LmNcXG5AQCAtMjA4LDggKzIwOCw5IEBAIHZvaWQgcnR3X3R4X3JlcG9ydF9lbnF1ZXVlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHN0cnVjdCBza19idWZmICpza2IsIHU4IHNuKVxcbiBcXHRfX3NrYl9xdWV1ZV90YWlsKFxcdTAwMjZ0eF9yZXBvcnQtXFx1MDAzZXF1ZXVlLCBza2IpO1xcbiBcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ0eF9yZXBvcnQtXFx1MDAzZXFfbG9jaywgZmxhZ3MpO1xcbiBcXG4tXFx0aWYgKHJ0d2Rldi1cXHUwMDNlY2hpcC1cXHUwMDNlaWQgPT0gUlRXX0NISVBfVFlQRV84NzIzRCBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgcnR3ZGV2LVxcdTAwM2VoY2kudHlwZSA9PSBSVFdfSENJX1RZUEVfVVNCKVxcbitcXHRpZiAoKHJ0d2Rldi1cXHUwMDNlY2hpcC1cXHUwMDNlaWQgPT0gUlRXX0NISVBfVFlQRV84NzIzRCBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIHJ0d2Rldi1cXHUwMDNlaGNpLnR5cGUgPT0gUlRXX0hDSV9UWVBFX1VTQikgfHxcXG4rXFx0ICAgIHJ0d19pc184NzIzYnMocnR3ZGV2KSlcXG4gXFx0XFx0dGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMoMjUwMCk7XFxuIFxcbiBcXHRtb2RfdGltZXIoXFx1MDAyNnR4X3JlcG9ydC1cXHUwMDNlcHVyZ2VfdGltZXIsIGppZmZpZXMgKyB0aW1lb3V0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6NTE6NTEuMTEzMjA0MzQ4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDg2MDg3MTkxNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGV4Y2x1c2l2ZWx5IGFkZHMgc3VwcG9ydCBhbmQgZml4ZXMgZm9yIHRoZSBSZWFsdGVrIFJUTDg3MjNCUyBTRElPIFdpRmkgY2hpcC4gU0RJTyBkZXZpY2VzIHJlcXVpcmUgcGh5c2ljYWwgaGFyZHdhcmUgb3Igc3BlY2lmaWMgUUVNVSBtYWNoaW5lIGVtdWxhdGlvbiB3aGljaCBpcyBub3QgYXZhaWxhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiBUaGVyZSBpcyBubyBzb2Z0d2FyZSBTRElPIGVtdWxhdGlvbiBmcmFtZXdvcmsgKGxpa2UgZHVtbXlfaGNkIGZvciBVU0IpIHRvIHJlYWNoIHRoZXNlIGNvZGUgcGF0aHMgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhNDE4MjU2MTc4NDRlYTUzOTFmMDVjZTQ0OGY4NjkzOTViMGUwY2E4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMDk6NTE6NDkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2Z3LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2Z3LmNcbmluZGV4IDk0NWZlZGNkMzc1YjYuLmM4NWMwZTNlNjBhOTcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2Z3LmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvZncuY1xuQEAgLTMxNyw2ICszMTcsMTUgQEAgdm9pZCBydHdfZndfYzJoX2NtZF9oYW5kbGUoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdGNhc2UgQzJIX0NDWF9UWF9SUFQ6XG4gXHRcdHJ0d190eF9yZXBvcnRfaGFuZGxlKHJ0d2Rldiwgc2tiLCBDMkhfQ0NYX1RYX1JQVCk7XG4gXHRcdGJyZWFrO1xuK1x0Y2FzZSBDMkhfVkVORE9SX1RYX1JQVDpcbitcdGNhc2UgQzJIX1dMQU5fUkZPTjpcbitcdFx0LypcbitcdFx0ICogVGhlIFJUTDg3MjNCUyBmaXJtd2FyZSByZXBvcnRzIG1hbmFnZW1lbnQgVFggdGhyb3VnaCB0aGVzZVxuK1x0XHQgKiB0d28gZXZlbnRzIGluc3RlYWQsIHVzaW5nIHRoZSBzYW1lIHBheWxvYWQgbGF5b3V0LlxuK1x0XHQgKi9cbitcdFx0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSlcbitcdFx0XHRydHdfdHhfcmVwb3J0X2hhbmRsZShydHdkZXYsIHNrYiwgQzJIX0NDWF9UWF9SUFQpO1xuK1x0XHRicmVhaztcbiBcdGNhc2UgQzJIX0JUX0lORk86XG4gXHRcdHJ0d19jb2V4X2J0X2luZm9fbm90aWZ5KHJ0d2RldiwgYzJoLVx1MDAzZXBheWxvYWQsIGxlbik7XG4gXHRcdGJyZWFrO1xuQEAgLTM2NSw2ICszNzQsMTcgQEAgdm9pZCBydHdfZndfYzJoX2NtZF9yeF9pcnFzYWZlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHUzMiBwa3Rfb2Zmc2V0LFxuIFx0XHRydHdfY29leF9pbmZvX3Jlc3BvbnNlKHJ0d2Rldiwgc2tiKTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIEMySF9XTEFOX1JGT046XG4rXHRcdC8qXG4rXHRcdCAqIE9uIDg3MjNCUyBTRElPIHdpdGggdjQxIGZpcm13YXJlLCBDMkggMHgzMiBjYXJyaWVzIGEgc2NhbiBUWFxuK1x0XHQgKiByZXBvcnQsIG5vdCBhIFdMQU5fUkZPTiBldmVudDogZGVmZXIgaXQgdG9cbitcdFx0ICogcnR3X2Z3X2MyaF9jbWRfaGFuZGxlKCkuXG4rXHRcdCAqL1xuK1x0XHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKSB7XG4rXHRcdFx0KigodTMyICopc2tiLVx1MDAzZWNiKSA9IHBrdF9vZmZzZXQ7XG4rXHRcdFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2cnR3ZGV2LVx1MDAzZWMyaF9xdWV1ZSwgc2tiKTtcbitcdFx0XHRpZWVlODAyMTFfcXVldWVfd29yayhydHdkZXYtXHUwMDNlaHcsIFx1MDAyNnJ0d2Rldi1cdTAwM2VjMmhfd29yayk7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbiBcdFx0Y29tcGxldGUoXHUwMDI2cnR3ZGV2LVx1MDAzZWxwc19sZWF2ZV9jaGVjayk7XG4gXHRcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XG4gXHRcdGJyZWFrO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvZncuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvZncuaFxuaW5kZXggNDhhZDljZWFiNmVhMS4uYmRkYTc4ZGM2NDYyYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvZncuaFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9mdy5oXG5AQCAtNTQsNiArNTQsMTEgQEAgZW51bSBydHdfYzJoX2NtZF9pZCB7XG4gXHRDMkhfQlRfTVBfSU5GTyA9IDB4MGIsXG4gXHRDMkhfQlRfSElEX0lORk8gPSAweDQ1LFxuIFx0QzJIX1JBX1JQVCA9IDB4MGMsXG4rXHQvKlxuK1x0ICogODcyM0JTIFNESU8gdmVuZG9yIHY0MSBmaXJtd2FyZSBtYW5hZ2VtZW50IFRYIHJlcG9ydCAoMHgzMiBpc1xuK1x0ICogcmVwb3J0ZWQgYXMgQzJIX1dMQU5fUkZPTiwgaGFuZGxlZCBwZXItY2hpcCBpbiB0aGUgQzJIIGRpc3BhdGNoKS5cbitcdCAqL1xuK1x0QzJIX1ZFTkRPUl9UWF9SUFQgPSAweDEyLFxuIFx0QzJIX0hXX0ZFQVRVUkVfUkVQT1JUID0gMHgxOSxcbiBcdEMySF9XTEFOX0lORk8gPSAweDI3LFxuIFx0QzJIX1dMQU5fUkZPTiA9IDB4MzIsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaFxuaW5kZXggYzZlOTgxYmE3OTg2OC4uOGY4NmY3YzEyZGU1YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaFxuQEAgLTE5NCw2ICsxOTQsNyBAQCBlbnVtIHJ0d19jaGlwX3R5cGUge1xuIFx0UlRXX0NISVBfVFlQRV84NzIzRCxcbiBcdFJUV19DSElQX1RZUEVfODgyMUMsXG4gXHRSVFdfQ0hJUF9UWVBFXzg3MDNCLFxuK1x0UlRXX0NISVBfVFlQRV84NzIzQixcbiBcdFJUV19DSElQX1RZUEVfODgyMUEsXG4gXHRSVFdfQ0hJUF9UWVBFXzg4MTJBLFxuIFx0UlRXX0NISVBfVFlQRV84ODE0QSxcbkBAIC0yMTk0LDYgKzIxOTUsMTIgQEAgc3RhdGljIGlubGluZSBib29sIHJ0d19jaGlwX2hhc190eF9zdGJjKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4gXHRyZXR1cm4gcnR3ZGV2LVx1MDAzZWNoaXAtXHUwMDNldHhfc3RiYztcbiB9XG4gXG4rc3RhdGljIGlubGluZSBib29sIHJ0d19pc184NzIzYnMoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldilcbit7XG4rXHRyZXR1cm4gcnR3ZGV2LVx1MDAzZWNoaXAtXHUwMDNlaWQgPT0gUlRXX0NISVBfVFlQRV84NzIzQiBcdTAwMjZcdTAwMjZcbitcdCAgICAgICBydHdkZXYtXHUwMDNlaGNpLnR5cGUgPT0gUlRXX0hDSV9UWVBFX1NESU87XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgdTggcnR3X2FjcXVpcmVfbWFjaWQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiB7XG4gXHR1bnNpZ25lZCBsb25nIG1hY19pZDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J4LmNcbmluZGV4IDAxZmQyOTlhYmI3ZmUuLmE5MzYxZWY0YjkzYzAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J4LmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnguY1xuQEAgLTI1MywxMCArMjUzLDEyIEBAIHN0YXRpYyB2b2lkIHJ0d19yeF9maWxsX3J4X3N0YXR1cyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuIFxuIFx0cnR3X3J4X2FkZHJfbWF0Y2gocnR3ZGV2LCBwa3Rfc3RhdCwgaGRyKTtcbiBcbi1cdC8qIFJ0bDg3MjNjcyBkcml2ZXIgY2hlY2tzIGZvciBzaXplIFx1MDAzYyAxNCBvciBzaXplIFx1MDAzZSA4MTkyIGFuZFxuLVx0ICogc2ltcGx5IGRyb3BzIHRoZSBwYWNrZXQuXG4rXHQvKlxuK1x0ICogUnRsODcyM2NzIGFuZCBydGw4NzIzYnMgZHJpdmVycyBjaGVjayBmb3Igc2l6ZSBcdTAwM2MgMTQgb3Igc2l6ZSBcdTAwM2UgODE5MlxuK1x0ICogYW5kIHNpbXBseSBkcm9wIHRoZSBwYWNrZXQuXG4gXHQgKi9cbi1cdGlmIChydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VpZCA9PSBSVFdfQ0hJUF9UWVBFXzg3MDNCIFx1MDAyNlx1MDAyNiBwa3Rfc3RhdC1cdTAwM2Vwa3RfbGVuID09IDApIHtcbitcdGlmICgocnR3ZGV2LVx1MDAzZWNoaXAtXHUwMDNlaWQgPT0gUlRXX0NISVBfVFlQRV84NzAzQiB8fCBydHdfaXNfODcyM2JzKHJ0d2RldikpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHBrdF9zdGF0LVx1MDAzZXBrdF9sZW4gPT0gMCkge1xuIFx0XHRyeF9zdGF0dXMtXHUwMDNlZmxhZyB8PSBSWF9GTEFHX05PX1BTRFU7XG4gXHRcdHJ0d19kYmcocnR3ZGV2LCBSVFdfREJHX1JYLCBcInplcm8gbGVuZ3RoIHBhY2tldFwiKTtcbiBcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jXG5pbmRleCA1YjQwZDc0YjE2ZWUwLi5lZDFiZWQ4ZWExNDRhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jXG5AQCAtMjAsNiArMjAsMTcgQEBcbiAjaW5jbHVkZSBcInR4LmhcIlxuIFxuICNkZWZpbmUgUlRXX1NESU9fSU5ESVJFQ1RfUldfUkVUUklFU1x0XHRcdDUwXG4rI2RlZmluZSBSVFdfU0RJT19PUVRfVElNRU9VVF9NU1x0XHRcdFx0MTAwMFxuK1xuKy8qXG4rICogODcyM0JTIFNESU8gVFggRklGTyBiYWNrLXByZXNzdXJlIHdhdGVybWFya3M6IHN0b3AgdGhlIG1hYzgwMjExIHF1ZXVlIG9uY2VcbisgKiB0aGUgcGVyLUFDIHNvZnR3YXJlIEZJRk8gZmlsbHMgcGFzdCB0aGUgaGlnaCB3YXRlcm1hcmssIGFuZCB3YWtlIGl0IGZyb20gdGhlXG4rICogVFggZHJhaW4gcGF0aCBvbmNlIGl0IGZhbGxzIGJhY2sgdG8gdGhlIGxvdyBvbmUuIEJvdW5kcyB0aGUgcXVldWVpbmcgbGF0ZW5jeVxuKyAqIHRoYXQgb3RoZXJ3aXNlIGNhdXNlcyB1cGxpbmsgYnVmZmVyYmxvYXQgLyBjb25nZXN0aW9uIGNvbGxhcHNlLlxuKyAqL1xuKyNkZWZpbmUgUlRXX1NESU9fVFhfRklGT19ISVdBVEVSXHRcdFx0MTZcbisjZGVmaW5lIFJUV19TRElPX1RYX0ZJRk9fTE9XQVRFUlx0XHRcdDhcbisjZGVmaW5lIFJUV19TRElPX1RYX1JFVFJZX0RFTEFZXHRcdFx0bXNlY3NfdG9famlmZmllcygxKVxuIFxuIHN0YXRpYyBib29sIHJ0d19zZGlvX2lzX2J1c19hZGRyKHUzMiBhZGRyKVxuIHtcbkBAIC01NDgsMTIgKzU1OSwxMjIgQEAgc3RhdGljIGludCBydHdfc2Rpb19yZWFkX3BvcnQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggKmJ1Ziwgc2l6ZV90IGNvdW50KVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4rLypcbisgKiBUaGUgY2FjaGVkIGZyZWUgcGFnZSBjb3VudGVycyBhcmUgYSBmYXN0IHBhdGggaGludCBvbmx5LiBUaGV5IGFyZSB3cml0dGVuXG4rICogZnJvbSB0aGUgc2luZ2xlIHRocmVhZGVkIFRYIHdvcmsgYW5kLCBmb3IgSDJDIGFuZCByZXNlcnZlZCBwYWdlIHdyaXRlcyxcbisgKiBmcm9tIHByb2Nlc3MgY29udGV4dCwgc28gdGhleSBhcmUgYXRvbWljX3Q7IHdoZW5ldmVyIHRoZXkgY2xhaW0gdGhlcmUgaXNcbisgKiBub3QgZW5vdWdoIHJvb20gdGhleSBhcmUgcmVzeW5jaHJvbmlzZWQgZnJvbSB0aGUgY2hpcCBiZWZvcmUgdGhlIGNhbGxlclxuKyAqIGdpdmVzIHVwLCB3aGljaCBhbHNvIGFic29yYnMgYSBsb3N0IHVwZGF0ZS5cbisgKi9cbitzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfc3RvcmVfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4rXHRcdFx0XHRcdCAgICB1MzIgZnJlZV90eHBnKVxuK3tcbitcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbitcbitcdGF0b21pY19zZXQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX2hpZ2gsXG4rXHRcdCAgIHUzMl9nZXRfYml0cyhmcmVlX3R4cGcsIEJJVF9GUkVFX1RYUEdfSElHSCkpO1xuK1x0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfbm9ybWFsLFxuK1x0XHQgICB1MzJfZ2V0X2JpdHMoZnJlZV90eHBnLCBCSVRfRlJFRV9UWFBHX05PUk1BTCkpO1xuK1x0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfbG93LFxuK1x0XHQgICB1MzJfZ2V0X2JpdHMoZnJlZV90eHBnLCBCSVRfRlJFRV9UWFBHX0xPVykpO1xuK1x0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfcHViLFxuK1x0XHQgICB1MzJfZ2V0X2JpdHMoZnJlZV90eHBnLCBCSVRfRlJFRV9UWFBHX1BVQikpO1xuK31cbitcbitzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfaW5pdF9mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldilcbit7XG4rXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4rXHRjb25zdCBzdHJ1Y3QgcnR3X3BhZ2VfdGFibGUgKnBnX3RibDtcbitcdHUzMiBmcmVlX3R4cGc7XG4rXHR1MTYgcHVicV9udW07XG4rXG4rXHRmcmVlX3R4cGcgPSBydHdfcmVhZDMyKHJ0d2RldiwgUkVHX1NESU9fRlJFRV9UWFBHKTtcbitcdGlmIChmcmVlX3R4cGcpIHtcbitcdFx0cnR3X3NkaW9fODcyM2JzX3N0b3JlX2ZyZWVfdHhwZyhydHdkZXYsIGZyZWVfdHhwZyk7XG4rXHR9IGVsc2Uge1xuK1x0XHRwZ190YmwgPSBcdTAwMjZydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VwYWdlX3RhYmxlWzBdO1xuK1x0XHRwdWJxX251bSA9IHJ0d2Rldi1cdTAwM2VmaWZvLmFjcV9wZ19udW0gLSBwZ190YmwtXHUwMDNlaHFfbnVtIC1cbitcdFx0XHQgICBwZ190YmwtXHUwMDNlbHFfbnVtIC0gcGdfdGJsLVx1MDAzZW5xX251bSAtIHBnX3RibC1cdTAwM2VleHFfbnVtIC1cbitcdFx0XHQgICBwZ190YmwtXHUwMDNlZ2FwcV9udW07XG4rXG4rXHRcdGF0b21pY19zZXQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX2hpZ2gsIHBnX3RibC1cdTAwM2VocV9udW0pO1xuK1x0XHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19ub3JtYWwsIHBnX3RibC1cdTAwM2VucV9udW0pO1xuK1x0XHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19sb3csIHBnX3RibC1cdTAwM2VscV9udW0pO1xuK1x0XHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19wdWIsIHB1YnFfbnVtKTtcbitcdH1cbitcbitcdGF0b21pY19zZXQoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9vcXRfZnJlZSxcbitcdFx0ICAgcnR3X3JlYWQ4KHJ0d2RldiwgUkVHX1NESU9fT1FUX0ZSRUVfUEcpKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcnR3X3NkaW9fODcyM2JzX3N5bmNfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4re1xuK1x0dTMyIGZyZWVfdHhwZyA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19GUkVFX1RYUEcpO1xuK1xuK1x0aWYgKGZyZWVfdHhwZylcbitcdFx0cnR3X3NkaW9fODcyM2JzX3N0b3JlX2ZyZWVfdHhwZyhydHdkZXYsIGZyZWVfdHhwZyk7XG4rfVxuK1xuKy8qXG4rICogU3VtIG9mIHRoZSBxdWV1ZSdzIGRlZGljYXRlZCBjb3VudGVyIGFuZCB0aGUgcHVibGljIHBvb2wsIGNsYW1wZWQgYXQgemVybzpcbisgKiBhIGxvc3QgdXBkYXRlIGJldHdlZW4gdGhlIGNoZWNrIGJlbG93IGFuZCBydHdfc2Rpb184NzIzYnNfY29uc3VtZV90eHBnKClcbisgKiBjYW4gYnJpZWZseSBkcml2ZSBhIGNvdW50ZXIgbmVnYXRpdmUsIGFuZCBsZXR0aW5nIHRoYXQgd3JhcCB3b3VsZCBoaWRlIHRoZVxuKyAqIHNob3J0YWdlIGluc3RlYWQgb2YgdHJpZ2dlcmluZyBhIHJlc3luYyBmcm9tIHRoZSBjaGlwLlxuKyAqL1xuK3N0YXRpYyB1bnNpZ25lZCBpbnQgcnR3X3NkaW9fODcyM2JzX3BhZ2VzX2ZyZWUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcbitcdFx0XHRcdFx0ICAgICAgIGF0b21pY190ICpkZWRpY2F0ZWQpXG4re1xuK1x0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuK1x0aW50IGZyZWU7XG4rXG4rXHRmcmVlID0gYXRvbWljX3JlYWQoZGVkaWNhdGVkKSArIGF0b21pY19yZWFkKFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19wdWIpO1xuK1xuK1x0cmV0dXJuIGZyZWUgXHUwMDNlIDAgPyBmcmVlIDogMDtcbit9XG4rXG4rc3RhdGljIGF0b21pY190ICpydHdfc2Rpb184NzIzYnNfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IHF1ZXVlKVxuK3tcbitcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbitcbitcdHN3aXRjaCAocXVldWUpIHtcbitcdGNhc2UgUlRXX1RYX1FVRVVFX1ZJOlxuK1x0XHRyZXR1cm4gXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX25vcm1hbDtcbitcdGNhc2UgUlRXX1RYX1FVRVVFX0JFOlxuK1x0Y2FzZSBSVFdfVFhfUVVFVUVfQks6XG4rXHRcdHJldHVybiBcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfbG93O1xuK1x0Y2FzZSBSVFdfVFhfUVVFVUVfQkNOOlxuK1x0Y2FzZSBSVFdfVFhfUVVFVUVfSDJDOlxuK1x0Y2FzZSBSVFdfVFhfUVVFVUVfSEkwOlxuK1x0Y2FzZSBSVFdfVFhfUVVFVUVfTUdNVDpcbitcdGNhc2UgUlRXX1RYX1FVRVVFX1ZPOlxuK1x0XHRyZXR1cm4gXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX2hpZ2g7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gTlVMTDtcbitcdH1cbit9XG4rXG4gc3RhdGljIGludCBydHdfc2Rpb19jaGVja19mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggcXVldWUsXG4gXHRcdFx0XHQgICAgc2l6ZV90IGNvdW50KVxuIHtcbiBcdHVuc2lnbmVkIGludCBwYWdlc19mcmVlLCBwYWdlc19uZWVkZWQ7XG4gXG4tXHRpZiAocnR3X2NoaXBfd2NwdV84MDUxKHJ0d2RldikpIHtcbitcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpIHtcbitcdFx0YXRvbWljX3QgKmRlZGljYXRlZDtcbitcbitcdFx0ZGVkaWNhdGVkID0gcnR3X3NkaW9fODcyM2JzX2ZyZWVfdHhwZyhydHdkZXYsIHF1ZXVlKTtcbitcdFx0aWYgKCFkZWRpY2F0ZWQpIHtcbitcdFx0XHRydHdfd2FybihydHdkZXYsIFwiVW5rbm93biBtYXBwaW5nIGZvciBxdWV1ZSAldVxcblwiLCBxdWV1ZSk7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcbitcdFx0cGFnZXNfZnJlZSA9IHJ0d19zZGlvXzg3MjNic19wYWdlc19mcmVlKHJ0d2RldiwgZGVkaWNhdGVkKTtcbitcdFx0cGFnZXNfbmVlZGVkID0gRElWX1JPVU5EX1VQKGNvdW50LCBydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VwYWdlX3NpemUpO1xuK1x0XHRpZiAocGFnZXNfbmVlZGVkIFx1MDAzYz0gcGFnZXNfZnJlZSlcbitcdFx0XHRyZXR1cm4gMDtcbitcbitcdFx0cnR3X3NkaW9fODcyM2JzX3N5bmNfZnJlZV90eHBnKHJ0d2Rldik7XG4rXHRcdHBhZ2VzX2ZyZWUgPSBydHdfc2Rpb184NzIzYnNfcGFnZXNfZnJlZShydHdkZXYsIGRlZGljYXRlZCk7XG4rXHR9IGVsc2UgaWYgKHJ0d19jaGlwX3djcHVfODA1MShydHdkZXYpKSB7XG4gXHRcdHUzMiBmcmVlX3R4cGc7XG4gXG4gXHRcdGZyZWVfdHhwZyA9IHJ0d19zZGlvX3JlYWQzMihydHdkZXYsIFJFR19TRElPX0ZSRUVfVFhQRyk7XG5AQCAtNjMyLDQ0ICs3NTMsMTIzIEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9fY2hlY2tfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IHF1ZXVlLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBpbnQgcnR3X3NkaW9fODcyM2JzX3dhaXRfdHhfb3F0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4re1xuK1x0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuK1x0dTggZnJlZTtcbitcdGludCBpO1xuK1xuK1x0aWYgKGF0b21pY19hZGRfdW5sZXNzKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfb3F0X2ZyZWUsIC0xLCAwKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBSVFdfU0RJT19PUVRfVElNRU9VVF9NUzsgaSsrKSB7XG4rXHRcdGZyZWUgPSBydHdfcmVhZDgocnR3ZGV2LCBSRUdfU0RJT19PUVRfRlJFRV9QRyk7XG4rXHRcdGlmIChmcmVlKSB7XG4rXHRcdFx0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZXR4X29xdF9mcmVlLCBmcmVlIC0gMSk7XG4rXHRcdFx0cmV0dXJuIDA7XG4rXHRcdH1cbitcdFx0dXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApO1xuK1x0fVxuK1xuK1x0cmV0dXJuIC1FQlVTWTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcnR3X3NkaW9fODcyM2JzX2NvbnN1bWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCBxdWV1ZSxcbitcdFx0XHRcdFx0IHVuc2lnbmVkIGludCBwYWdlcylcbit7XG4rXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4rXHRhdG9taWNfdCAqZGVkaWNhdGVkO1xuK1x0dW5zaWduZWQgaW50IHRha2VuO1xuK1x0aW50IGZyZWU7XG4rXG4rXHRkZWRpY2F0ZWQgPSBydHdfc2Rpb184NzIzYnNfZnJlZV90eHBnKHJ0d2RldiwgcXVldWUpO1xuK1x0aWYgKCFkZWRpY2F0ZWQpXG4rXHRcdHJldHVybjtcbitcbitcdGZyZWUgPSBhdG9taWNfcmVhZChkZWRpY2F0ZWQpO1xuK1x0dGFrZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHBhZ2VzLCBmcmVlIFx1MDAzZSAwID8gZnJlZSA6IDApO1xuK1x0YXRvbWljX3N1Yih0YWtlbiwgZGVkaWNhdGVkKTtcbitcbitcdHBhZ2VzIC09IHRha2VuO1xuK1x0aWYgKHBhZ2VzIFx1MDAyNlx1MDAyNiBhdG9taWNfc3ViX3JldHVybihwYWdlcywgXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX3B1YikgXHUwMDNjIDApXG4rXHRcdGF0b21pY19zZXQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX3B1YiwgMCk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgcnR3X3NkaW9fd3JpdGVfcG9ydChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdCAgICAgICBlbnVtIHJ0d190eF9xdWV1ZV90eXBlIHF1ZXVlKVxuIHtcbiBcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbitcdGJvb2wgcnRsODcyM2JzID0gcnR3X2lzXzg3MjNicyhydHdkZXYpO1xuK1x0dW5zaWduZWQgaW50IG9yaWdfbGVuID0gc2tiLVx1MDAzZWxlbjtcbitcdHVuc2lnbmVkIGludCBwYWdlcztcbitcdHNpemVfdCB3cml0ZV9zaXplO1xuIFx0Ym9vbCBidXNfY2xhaW07XG4gXHRzaXplX3QgdHhzaXplO1xuIFx0dTMyIHR4YWRkcjtcbiBcdGludCByZXQ7XG4gXG4tXHR0eGFkZHIgPSBydHdfc2Rpb19nZXRfdHhfYWRkcihydHdkZXYsIHNrYi1cdTAwM2VsZW4sIHF1ZXVlKTtcbi1cdGlmICghdHhhZGRyKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdGlmIChydGw4NzIzYnMpIHtcbitcdFx0dHhzaXplID0gcm91bmRfdXAob3JpZ19sZW4sIDQpO1xuK1x0XHR3cml0ZV9zaXplID0gdHhzaXplIFx1MDAzZSBSVFdfU0RJT19CTE9DS19TSVpFID9cbitcdFx0XHQgICAgIHJvdW5kX3VwKHR4c2l6ZSwgUlRXX1NESU9fQkxPQ0tfU0laRSkgOiB0eHNpemU7XG4rXHR9IGVsc2Uge1xuK1x0XHR0eHNpemUgPSBzZGlvX2FsaWduX3NpemUocnR3c2Rpby1cdTAwM2VzZGlvX2Z1bmMsIG9yaWdfbGVuKTtcbitcdFx0d3JpdGVfc2l6ZSA9IHR4c2l6ZTtcbitcdH1cbitcbitcdGlmICh3cml0ZV9zaXplIFx1MDAzZSBvcmlnX2xlbikge1xuK1x0XHR1bnNpZ25lZCBpbnQgcGFkZGluZyA9IHdyaXRlX3NpemUgLSBvcmlnX2xlbjtcbiBcbi1cdHR4c2l6ZSA9IHNkaW9fYWxpZ25fc2l6ZShydHdzZGlvLVx1MDAzZXNkaW9fZnVuYywgc2tiLVx1MDAzZWxlbik7XG4rXHRcdGlmIChza2JfdGFpbHJvb20oc2tiKSBcdTAwM2MgcGFkZGluZykge1xuK1x0XHRcdHJldCA9IHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLFxuK1x0XHRcdFx0XHQgICAgICAgcGFkZGluZyAtIHNrYl90YWlscm9vbShza2IpLFxuK1x0XHRcdFx0XHQgICAgICAgR0ZQX0tFUk5FTCk7XG4rXHRcdFx0aWYgKHJldClcbitcdFx0XHRcdHJldHVybiByZXQ7XG4rXHRcdH1cbitcdFx0c2tiX3B1dF96ZXJvKHNrYiwgcGFkZGluZyk7XG4rXHR9XG4rXG4rXHR0eGFkZHIgPSBydHdfc2Rpb19nZXRfdHhfYWRkcihydHdkZXYsIHR4c2l6ZSwgcXVldWUpO1xuK1x0aWYgKCF0eGFkZHIpIHtcbitcdFx0cmV0ID0gLUVJTlZBTDtcbitcdFx0Z290byBvdXRfdHJpbTtcbitcdH1cbiBcbiBcdHJldCA9IHJ0d19zZGlvX2NoZWNrX2ZyZWVfdHhwZyhydHdkZXYsIHF1ZXVlLCB0eHNpemUpO1xuIFx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbitcdFx0Z290byBvdXRfdHJpbTtcbitcbitcdGlmIChydGw4NzIzYnMpIHtcbitcdFx0cmV0ID0gcnR3X3NkaW9fODcyM2JzX3dhaXRfdHhfb3F0KHJ0d2Rldik7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0Z290byBvdXRfdHJpbTtcbitcdH1cbiBcbiBcdGlmICghSVNfQUxJR05FRCgodW5zaWduZWQgbG9uZylza2ItXHUwMDNlZGF0YSwgUlRXX1NESU9fREFUQV9QVFJfQUxJR04pKVxuIFx0XHRydHdfd2FybihydHdkZXYsIFwiR290IHVuYWxpZ25lZCBTS0IgaW4gJXMoKSBmb3IgcXVldWUgJXVcXG5cIixcbiBcdFx0XHQgX19mdW5jX18sIHF1ZXVlKTtcbiBcbiBcdGJ1c19jbGFpbSA9IHJ0d19zZGlvX2J1c19jbGFpbV9uZWVkZWQocnR3c2Rpbyk7XG4tXG4gXHRpZiAoYnVzX2NsYWltKVxuIFx0XHRzZGlvX2NsYWltX2hvc3QocnR3c2Rpby1cdTAwM2VzZGlvX2Z1bmMpO1xuLVxuLVx0cmV0ID0gc2Rpb19tZW1jcHlfdG9pbyhydHdzZGlvLVx1MDAzZXNkaW9fZnVuYywgdHhhZGRyLCBza2ItXHUwMDNlZGF0YSwgdHhzaXplKTtcbi1cbitcdHJldCA9IHNkaW9fbWVtY3B5X3RvaW8ocnR3c2Rpby1cdTAwM2VzZGlvX2Z1bmMsIHR4YWRkciwgc2tiLVx1MDAzZWRhdGEsXG4rXHRcdFx0ICAgICAgIHdyaXRlX3NpemUpO1xuIFx0aWYgKGJ1c19jbGFpbSlcbiBcdFx0c2Rpb19yZWxlYXNlX2hvc3QocnR3c2Rpby1cdTAwM2VzZGlvX2Z1bmMpO1xuIFxuLVx0aWYgKHJldClcbitcdGlmIChyZXQpIHtcbiBcdFx0cnR3X3dhcm4ocnR3ZGV2LFxuIFx0XHRcdCBcIkZhaWxlZCB0byB3cml0ZSAlenUgYnl0ZShzKSB0byBTRElPIHBvcnQgMHglMDh4XCIsXG4tXHRcdFx0IHR4c2l6ZSwgdHhhZGRyKTtcbitcdFx0XHQgd3JpdGVfc2l6ZSwgdHhhZGRyKTtcbitcdH0gZWxzZSBpZiAocnRsODcyM2JzKSB7XG4rXHRcdHBhZ2VzID0gRElWX1JPVU5EX1VQKHR4c2l6ZSwgcnR3ZGV2LVx1MDAzZWNoaXAtXHUwMDNlcGFnZV9zaXplKTtcbitcdFx0cnR3X3NkaW9fODcyM2JzX2NvbnN1bWVfdHhwZyhydHdkZXYsIHF1ZXVlLCBwYWdlcyk7XG4rXHR9XG4gXG4rb3V0X3RyaW06XG4rXHRpZiAod3JpdGVfc2l6ZSBcdTAwM2Ugb3JpZ19sZW4pXG4rXHRcdHNrYl90cmltKHNrYiwgb3JpZ19sZW4pO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtNjc3LDcgKzg3NywxMSBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19pbml0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4ge1xuIFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuIFxuLVx0cnR3c2Rpby1cdTAwM2VpcnFfbWFzayA9IFJFR19TRElPX0hJTVJfUlhfUkVRVUVTVCB8IFJFR19TRElPX0hJTVJfQ1BXTTE7XG4rXHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKVxuK1x0XHRydHdzZGlvLVx1MDAzZWlycV9tYXNrID0gUkVHX1NESU9fSElNUl9SWF9SRVFVRVNUO1xuK1x0ZWxzZVxuK1x0XHRydHdzZGlvLVx1MDAzZWlycV9tYXNrID0gUkVHX1NESU9fSElNUl9SWF9SRVFVRVNUIHxcbitcdFx0XHRcdCAgICBSRUdfU0RJT19ISU1SX0NQV00xO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBydHdfc2Rpb19lbmFibGVfcnhfYWdncmVnYXRpb24oc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbkBAIC02ODUsNiArODg5LDcgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9fZW5hYmxlX3J4X2FnZ3JlZ2F0aW9uKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4gXHR1OCBzaXplLCB0aW1lb3V0O1xuIFxuIFx0c3dpdGNoIChydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VpZCkge1xuK1x0Y2FzZSBSVFdfQ0hJUF9UWVBFXzg3MjNCOlxuIFx0Y2FzZSBSVFdfQ0hJUF9UWVBFXzg3MDNCOlxuIFx0Y2FzZSBSVFdfQ0hJUF9UWVBFXzg4MjFBOlxuIFx0Y2FzZSBSVFdfQ0hJUF9UWVBFXzg4MTJBOlxuQEAgLTcxMiw2ICs5MTcsOCBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19lbmFibGVfcnhfYWdncmVnYXRpb24oc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiBcdFx0ICAgIEZJRUxEX1BSRVAoQklUX0RNQV9BR0dfVE9fVjEsIHRpbWVvdXQpKTtcbiBcbiBcdHJ0d193cml0ZThfc2V0KHJ0d2RldiwgUkVHX1JYRE1BX01PREUsIEJJVF9ETUFfTU9ERSk7XG4rXHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKVxuK1x0XHRydHdfd3JpdGU4X21hc2socnR3ZGV2LCBSRUdfUlhETUFfTU9ERSwgQklUX0RNQV9CVVJTVF9DTlQsIDB4Myk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2VuYWJsZV9pbnRlcnJ1cHQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbkBAIC03NDksOSArOTU2LDUwIEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9fc2V0dXAoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfY2hlY2tfcnFwbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuK3tcbitcdGNvbnN0IHN0cnVjdCBydHdfY2hpcF9pbmZvICpjaGlwID0gcnR3ZGV2LVx1MDAzZWNoaXA7XG4rXHRzdHJ1Y3QgcnR3X2ZpZm9fY29uZiAqZmlmbyA9IFx1MDAyNnJ0d2Rldi1cdTAwM2VmaWZvO1xuK1x0Y29uc3Qgc3RydWN0IHJ0d19wYWdlX3RhYmxlICpwZ190Ymw7XG4rXHR1MTYgcmVzZXJ2ZWRfbnVtO1xuK1x0dTMyIGZyZWVfdHhwZztcbitcdHUxNiBwdWJxX251bTtcbitcbitcdGZyZWVfdHhwZyA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19GUkVFX1RYUEcpO1xuK1x0aWYgKGZyZWVfdHhwZyB8fCAhZmlmby1cdTAwM2VhY3FfcGdfbnVtKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRwZ190YmwgPSBcdTAwMjZjaGlwLVx1MDAzZXBhZ2VfdGFibGVbMF07XG4rXHRyZXNlcnZlZF9udW0gPSBwZ190YmwtXHUwMDNlaHFfbnVtICsgcGdfdGJsLVx1MDAzZWxxX251bSArIHBnX3RibC1cdTAwM2VucV9udW0gK1xuK1x0XHQgICAgICAgcGdfdGJsLVx1MDAzZWV4cV9udW0gKyBwZ190YmwtXHUwMDNlZ2FwcV9udW07XG4rXHRpZiAoZmlmby1cdTAwM2VhY3FfcGdfbnVtIFx1MDAzYz0gcmVzZXJ2ZWRfbnVtKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRwdWJxX251bSA9IGZpZm8tXHUwMDNlYWNxX3BnX251bSAtIHJlc2VydmVkX251bTtcbitcdHJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1JRUE5fTlBRLFxuK1x0XHQgICAgQklUX1JRUE5fTkUocGdfdGJsLVx1MDAzZW5xX251bSwgcGdfdGJsLVx1MDAzZWV4cV9udW0pKTtcbitcdHJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1JRUE4sXG4rXHRcdCAgICBCSVRfUlFQTl9ITFAocGdfdGJsLVx1MDAzZWhxX251bSwgcGdfdGJsLVx1MDAzZWxxX251bSwgcHVicV9udW0pKTtcbit9XG4rXG4gc3RhdGljIGludCBydHdfc2Rpb19zdGFydChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIHtcbitcdHUzMiBjbGVhcjtcbitcbitcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpIHtcbitcdFx0cnR3X3NkaW9fODcyM2JzX2NoZWNrX3JxcG4ocnR3ZGV2KTtcbitcdFx0cnR3X3NkaW9fODcyM2JzX2luaXRfZnJlZV90eHBnKHJ0d2Rldik7XG4rXHR9XG4rXG4gXHRydHdfc2Rpb19lbmFibGVfcnhfYWdncmVnYXRpb24ocnR3ZGV2KTtcbitcbitcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpIHtcbitcdFx0Y2xlYXIgPSBydHdfcmVhZDMyKHJ0d2RldiwgUkVHX1NESU9fSElTUikgXHUwMDI2XG4rXHRcdFx0UlRXX1NESU9fSElTUl9DTEVBUl9NQVNLO1xuK1x0XHRpZiAoY2xlYXIpXG4rXHRcdFx0cnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfU0RJT19ISVNSLCBjbGVhcik7XG4rXHR9XG4rXG4gXHRydHdfc2Rpb19lbmFibGVfaW50ZXJydXB0KHJ0d2Rldik7XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC04MTUsNyArMTA2MywxMSBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb190eF9raWNrX29mZihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIHtcbiBcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbiBcbi1cdHF1ZXVlX3dvcmsocnR3c2Rpby1cdTAwM2V0eHdxLCBcdTAwMjZydHdzZGlvLVx1MDAzZXR4X2hhbmRsZXJfZGF0YS1cdTAwM2V3b3JrKTtcbitcdC8qXG4rXHQgKiBBIHJldHJ5IG1heSBhbHJlYWR5IGJlIHBlbmRpbmcgd2l0aCBhIGRlbGF5OyByZS1hcm0gaXQgc28gYSBuZXdseVxuK1x0ICogcXVldWVkIGZyYW1lIGlzIG5vdCBoZWxkIGJhY2sgYnkgaXQuXG4rXHQgKi9cbitcdG1vZF9kZWxheWVkX3dvcmsocnR3c2Rpby1cdTAwM2V0eHdxLCBcdTAwMjZydHdzZGlvLVx1MDAzZXR4X2hhbmRsZXJfZGF0YS1cdTAwM2V3b3JrLCAwKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcnR3X3NkaW9fbGlua19wcyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBib29sIGVudGVyKVxuQEAgLTgzMSw2ICsxMDgzLDggQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9faW50ZXJmYWNlX2NmZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIFxuIFx0dmFsID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19TRElPX1RYX0NUUkwpO1xuIFx0dmFsIFx1MDAyNj0gMHhmZmY4O1xuK1x0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSlcbitcdFx0dmFsIHw9IEJJVF9TRElPX1RYX0NUUkxfQUxXQVlTX1JFQ09HTklaRTtcbiBcdHJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1NESU9fVFhfQ1RSTCwgdmFsKTtcbiB9XG4gXG5AQCAtOTM3LDYgKzExOTEsMTkgQEAgc3RhdGljIGludCBydHdfc2Rpb190eF93cml0ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuIFxuIFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtxdWV1ZV0sIHNrYik7XG4gXG4rXHQvKlxuK1x0ICogQmFjay1wcmVzc3VyZSBvbiB0aGUgZGF0YSBBQ3MgKEJLL0JFL1ZJL1ZPKTogb25jZSB0aGUgRklGTyBmaWxscyBwYXN0XG4rXHQgKiB0aGUgaGlnaCB3YXRlcm1hcmssIHN0b3AgdGhlIGNvcnJlc3BvbmRpbmcgbWFjODAyMTEgcXVldWUgc28gaXQgc3RvcHNcbitcdCAqIGhhbmRpbmcgdXMgZnJhbWVzLCBib3VuZGluZyB0aGUgcXVldWVpbmcgbGF0ZW5jeS4gUmVzdW1lZCBmcm9tIHRoZSBUWFxuK1x0ICogZHJhaW4gcGF0aCBvbmNlIHRoZSBGSUZPIGRyYWlucyBiZWxvdyB0aGUgbG93IHdhdGVybWFyay5cbitcdCAqL1xuK1x0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSBcdTAwMjZcdTAwMjYgcXVldWUgXHUwMDNjIFJUV19UWF9RVUVVRV9CQ04gXHUwMDI2XHUwMDI2XG4rXHQgICAgIXJ0d3NkaW8tXHUwMDNlcXVldWVfc3RvcHBlZFtxdWV1ZV0gXHUwMDI2XHUwMDI2XG4rXHQgICAgc2tiX3F1ZXVlX2xlbihcdTAwMjZydHdzZGlvLVx1MDAzZXR4X3F1ZXVlW3F1ZXVlXSkgXHUwMDNlPSBSVFdfU0RJT19UWF9GSUZPX0hJV0FURVIpIHtcbitcdFx0cnR3c2Rpby1cdTAwM2VxdWV1ZV9zdG9wcGVkW3F1ZXVlXSA9IHRydWU7XG4rXHRcdGllZWU4MDIxMV9zdG9wX3F1ZXVlKHJ0d2Rldi1cdTAwM2Vodywgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpO1xuK1x0fVxuK1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTEwOTUsNiArMTM2MiwxNCBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19oYW5kbGVfaW50ZXJydXB0KHN0cnVjdCBzZGlvX2Z1bmMgKnNkaW9fZnVuYylcbiBcdFx0cnR3X3NkaW9fcnhfaXNyKHJ0d2Rldik7XG4gXHR9XG4gXG4rXHQvKlxuK1x0ICogUlRMODcyM0JTIGtlZXBzIHJhaXNpbmcgdGhlIGludGVycnVwdCBhZnRlciByZXN1bWUgaWYgdW5kZWZpbmVkXG4rXHQgKiBzdGF0dXMgYml0cyBhcmUgd3JpdHRlbiBiYWNrLCBzbyBhY2tub3dsZWRnZSBvbmx5IHRoZSBiaXRzIHRoYXQgYXJlXG4rXHQgKiBib3RoIGRlZmluZWQgYW5kIHVubWFza2VkLiBPdGhlciBjaGlwcyBrZWVwIHRoZSBleGlzdGluZyBiZWhhdmlvdXIuXG4rXHQgKi9cbitcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpXG4rXHRcdGhpc3IgXHUwMDI2PSBydHdzZGlvLVx1MDAzZWlycV9tYXNrIFx1MDAyNiBSVFdfU0RJT19ISVNSX0NMRUFSX01BU0s7XG4rXG4gXHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19TRElPX0hJU1IsIGhpc3IpO1xuIFxuIFx0cnR3c2Rpby1cdTAwM2VpcnFfdGhyZWFkID0gTlVMTDtcbkBAIC0xMjMxLDQzICsxNTA2LDkyIEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2luZGljYXRlX3R4X3N0YXR1cyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuIFx0aWVlZTgwMjExX3R4X3N0YXR1c19pcnFzYWZlKGh3LCBza2IpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4tXHRcdFx0XHQgICAgICBlbnVtIHJ0d190eF9xdWV1ZV90eXBlIHF1ZXVlKVxuKy8qXG4rICogU2VuZCBvbmUgZnJhbWUgZnJvbSBAcXVldWUuIFJldHVybnMgMSB3aGVuIGEgZnJhbWUgd2FzIHdyaXR0ZW4sIDAgd2hlbiB0aGVcbisgKiBxdWV1ZSB3YXMgZW1wdHkgYW5kIGEgbmVnYXRpdmUgZXJybm8gd2hlbiB0aGUgd3JpdGUgZmFpbGVkLCBpbiB3aGljaCBjYXNlXG4rICogdGhlIGZyYW1lIGlzIHB1dCBiYWNrIGF0IHRoZSBoZWFkIG9mIHRoZSBxdWV1ZS5cbisgKi9cbitzdGF0aWMgaW50IHJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcbitcdFx0XHRcdCAgICAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSlcbiB7XG4gXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuK1x0dTE2IHFfbWFwO1xuIFx0aW50IHJldDtcbiBcbiBcdHNrYiA9IHNrYl9kZXF1ZXVlKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfcXVldWVbcXVldWVdKTtcbiBcdGlmICghc2tiKVxuLVx0XHRyZXR1cm47XG4rXHRcdHJldHVybiAwO1xuIFxuK1x0cV9tYXAgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTtcbiBcdHJldCA9IHJ0d19zZGlvX3dyaXRlX3BvcnQocnR3ZGV2LCBza2IsIHF1ZXVlKTtcbiBcdGlmIChyZXQpIHtcbiBcdFx0c2tiX3F1ZXVlX2hlYWQoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtxdWV1ZV0sIHNrYik7XG4tXHRcdHJldHVybjtcbitcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbiBcdHJ0d19zZGlvX2luZGljYXRlX3R4X3N0YXR1cyhydHdkZXYsIHNrYik7XG4rXG4rXHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpIFx1MDAyNlx1MDAyNiBxdWV1ZSBcdTAwM2MgUlRXX1RYX1FVRVVFX0JDTiBcdTAwMjZcdTAwMjZcbitcdCAgICBydHdzZGlvLVx1MDAzZXF1ZXVlX3N0b3BwZWRbcXVldWVdIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHNrYl9xdWV1ZV9sZW4oXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtxdWV1ZV0pIFx1MDAzYz1cbitcdCAgICBSVFdfU0RJT19UWF9GSUZPX0xPV0FURVIpIHtcbitcdFx0cnR3c2Rpby1cdTAwM2VxdWV1ZV9zdG9wcGVkW3F1ZXVlXSA9IGZhbHNlO1xuK1x0XHRpZWVlODAyMTFfd2FrZV9xdWV1ZShydHdkZXYtXHUwMDNlaHcsIHFfbWFwKTtcbitcdH1cbitcbitcdHJldHVybiAxO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBydHdfc2Rpb190eF9oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4gXHRzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhICp3b3JrX2RhdGEgPVxuLVx0XHRjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJ0d19zZGlvX3dvcmtfZGF0YSwgd29yayk7XG4rXHRcdGNvbnRhaW5lcl9vZih0b19kZWxheWVkX3dvcmsod29yayksIHN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEsXG4rXHRcdFx0ICAgICB3b3JrKTtcbiBcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbztcbiBcdHN0cnVjdCBydHdfZGV2ICpydHdkZXY7XG4tXHRpbnQgbGltaXQsIHF1ZXVlO1xuK1x0aW50IGxpbWl0LCBxdWV1ZSwgcmV0O1xuK1x0Ym9vbCBydGw4NzIzYnM7XG4gXG4gXHRydHdkZXYgPSB3b3JrX2RhdGEtXHUwMDNlcnR3ZGV2O1xuIFx0cnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbitcdHJ0bDg3MjNicyA9IHJ0d19pc184NzIzYnMocnR3ZGV2KTtcbiBcbiBcdGlmICghcnR3X2Z3X2ZlYXR1cmVfY2hlY2soXHUwMDI2cnR3ZGV2LVx1MDAzZWZ3LCBGV19GRUFUVVJFX1RYX1dBS0UpKVxuIFx0XHRydHdfc2Rpb19kZWVwX3BzX2xlYXZlKHJ0d2Rldik7XG4gXG4gXHRmb3IgKHF1ZXVlID0gUlRLX01BWF9UWF9RVUVVRV9OVU0gLSAxOyBxdWV1ZSBcdTAwM2U9IDA7IHF1ZXVlLS0pIHtcbiBcdFx0Zm9yIChsaW1pdCA9IDA7IGxpbWl0IFx1MDAzYyAxMDAwOyBsaW1pdCsrKSB7XG4tXHRcdFx0cnR3X3NkaW9fcHJvY2Vzc190eF9xdWV1ZShydHdkZXYsIHF1ZXVlKTtcbitcdFx0XHRyZXQgPSBydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlKHJ0d2RldiwgcXVldWUpO1xuK1x0XHRcdGlmIChyZXQgPT0gMClcbitcdFx0XHRcdGJyZWFrO1xuK1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbitcdFx0XHRcdC8qXG4rXHRcdFx0XHQgKiBBIHBhZ2Ugc2hvcnRhZ2UgaXMgdHJhbnNpZW50OiBsZWF2ZSB0aGVcbitcdFx0XHRcdCAqIGZyYW1lIHF1ZXVlZCBhbmQgY29tZSBiYWNrIHNob3J0bHkgaW5zdGVhZFxuK1x0XHRcdFx0ICogb2Ygc3RhbGxpbmcgdGhpcyBBQyB1bnRpbCBzb21ldGhpbmcgZWxzZVxuK1x0XHRcdFx0ICoga2lja3MgdGhlIHdvcmtlci5cbitcdFx0XHRcdCAqL1xuK1x0XHRcdFx0aWYgKHJ0bDg3MjNicyBcdTAwMjZcdTAwMjYgcmV0ID09IC1FQlVTWSkge1xuK1x0XHRcdFx0XHRxdWV1ZV9kZWxheWVkX3dvcmsocnR3c2Rpby1cdTAwM2V0eHdxLFxuK1x0XHRcdFx0XHRcdFx0ICAgXHUwMDI2d29ya19kYXRhLVx1MDAzZXdvcmssXG4rXHRcdFx0XHRcdFx0XHQgICBSVFdfU0RJT19UWF9SRVRSWV9ERUxBWSk7XG4rXHRcdFx0XHRcdHJldHVybjtcbitcdFx0XHRcdH1cbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdH1cbitcbitcdFx0XHQvKlxuK1x0XHRcdCAqIFJlc3RhcnQgZnJvbSB0aGUgaGlnaGVzdCBwcmlvcml0eSBxdWV1ZSBhZnRlciBldmVyeVxuK1x0XHRcdCAqIG1hbmFnZW1lbnQgZnJhbWUgc28gdGhlIGpvaW4gc2VxdWVuY2UgaXMgbm90IGhlbGQgdXBcbitcdFx0XHQgKiBiZWhpbmQgYSBkYXRhIGJhY2tsb2cuXG4rXHRcdFx0ICovXG4rXHRcdFx0aWYgKHJ0bDg3MjNicyBcdTAwMjZcdTAwMjYgcXVldWUgPT0gUlRXX1RYX1FVRVVFX01HTVQpIHtcbitcdFx0XHRcdHF1ZXVlX2RlbGF5ZWRfd29yayhydHdzZGlvLVx1MDAzZXR4d3EsXG4rXHRcdFx0XHRcdFx0ICAgXHUwMDI2d29ya19kYXRhLVx1MDAzZXdvcmssIDApO1xuK1x0XHRcdFx0cmV0dXJuO1xuK1x0XHRcdH1cbiBcbiBcdFx0XHRpZiAoc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfcXVldWVbcXVldWVdKSlcbiBcdFx0XHRcdGJyZWFrO1xuQEAgLTEyOTQsMTQgKzE2MTgsMTYgQEAgc3RhdGljIGludCBydHdfc2Rpb19pbml0X3R4KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgUlRLX01BWF9UWF9RVUVVRV9OVU07IGkrKylcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFJUS19NQVhfVFhfUVVFVUVfTlVNOyBpKyspIHtcbiBcdFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZydHdzZGlvLVx1MDAzZXR4X3F1ZXVlW2ldKTtcbitcdFx0cnR3c2Rpby1cdTAwM2VxdWV1ZV9zdG9wcGVkW2ldID0gZmFsc2U7XG4rXHR9XG4gXHRydHdzZGlvLVx1MDAzZXR4X2hhbmRsZXJfZGF0YSA9IGttYWxsb2Nfb2JqKCpydHdzZGlvLVx1MDAzZXR4X2hhbmRsZXJfZGF0YSk7XG4gXHRpZiAoIXJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhKVxuIFx0XHRnb3RvIGVycl9kZXN0cm95X3dxO1xuIFxuIFx0cnR3c2Rpby1cdTAwM2V0eF9oYW5kbGVyX2RhdGEtXHUwMDNlcnR3ZGV2ID0gcnR3ZGV2O1xuLVx0SU5JVF9XT1JLKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhLVx1MDAzZXdvcmssIHJ0d19zZGlvX3R4X2hhbmRsZXIpO1xuK1x0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9oYW5kbGVyX2RhdGEtXHUwMDNld29yaywgcnR3X3NkaW9fdHhfaGFuZGxlcik7XG4gXG4gXHRyZXR1cm4gMDtcbiBcbkBAIC0xMzE1LDYgKzE2NDEsNyBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19kZWluaXRfdHgoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiBcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbiBcdGludCBpO1xuIFxuK1x0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhLVx1MDAzZXdvcmspO1xuIFx0ZGVzdHJveV93b3JrcXVldWUocnR3c2Rpby1cdTAwM2V0eHdxKTtcbiBcdGtmcmVlKHJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oXG5pbmRleCA0NTdlOGIwMjM4MGU1Li4yZjFiNjdmNGJiYzdjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmhcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oXG5AQCAtMjIsNiArMjIsNyBAQFxuIFxuIC8qIFNESU8gVHggQ29udHJvbCAqL1xuICNkZWZpbmUgUkVHX1NESU9fVFhfQ1RSTFx0XHRcdChTRElPX0xPQ0FMX09GRlNFVCArIDB4MDAwMClcbisjZGVmaW5lIEJJVF9TRElPX1RYX0NUUkxfQUxXQVlTX1JFQ09HTklaRVx0QklUKDQpXG4gXG4gLypTRElPIHN0YXR1cyB0aW1lb3V0Ki9cbiAjZGVmaW5lIFJFR19TRElPX1RJTUVPVVRcdFx0XHQoU0RJT19MT0NBTF9PRkZTRVQgKyAweDAwMDIpXG5AQCAtNzcsNiArNzgsMTQgQEBcbiAvKiB0aGUgZm9sbG93aW5nIHR3byBhcmUgUlRMODE4OCBTRElPIFNwZWNpZmljICovXG4gI2RlZmluZSBSRUdfU0RJT19ISVNSX01DVV9FUlJcdFx0XHRCSVQoMjgpXG4gI2RlZmluZSBSRUdfU0RJT19ISVNSX1RTRl9CSVQzMl9UT0dHTEVcdFx0QklUKDI5KVxuKyNkZWZpbmUgUlRXX1NESU9fSElTUl9DTEVBUl9NQVNLXHRcdFxcXG4rXHQoUkVHX1NESU9fSElTUl9UWEVSUiB8IFJFR19TRElPX0hJU1JfUlhFUlIgfCBcXFxuK1x0IFJFR19TRElPX0hJU1JfVFhGT1ZXIHwgUkVHX1NESU9fSElTUl9SWEZPVlcgfCBcXFxuK1x0IFJFR19TRElPX0hJU1JfVFhCQ05PSyB8IFJFR19TRElPX0hJU1JfVFhCQ05FUlIgfCBcXFxuK1x0IFJFR19TRElPX0hJU1JfQzJIQ01EIHwgUkVHX1NESU9fSElTUl9DUFdNMSB8IFxcXG4rXHQgUkVHX1NESU9fSElTUl9DUFdNMiB8IFJFR19TRElPX0hJU1JfSFNJU1JfSU5EIHwgXFxcbitcdCBSRUdfU0RJT19ISVNSX0dUSU5UM19JTkQgfCBSRUdfU0RJT19ISVNSX0dUSU5UNF9JTkQgfCBcXFxuK1x0IFJFR19TRElPX0hJU1JfUFNUSU1FT1VUIHwgUkVHX1NESU9fSElTUl9PQ1BJTlQpXG4gXG4gLyogSENJIEN1cnJlbnQgUG93ZXIgTW9kZSAqL1xuICNkZWZpbmUgUkVHX1NESU9fSENQV01cdFx0XHRcdChTRElPX0xPQ0FMX09GRlNFVCArIDB4MDAxOSlcbkBAIC04Niw2ICs5NSwxMCBAQFxuICNkZWZpbmUgUkVHX1NESU9fT1FUX0ZSRUVfUEdcdFx0XHQoU0RJT19MT0NBTF9PRkZTRVQgKyAweDAwMUUpXG4gLyogRnJlZSBUeCBCdWZmZXIgUGFnZSAqL1xuICNkZWZpbmUgUkVHX1NESU9fRlJFRV9UWFBHXHRcdFx0KFNESU9fTE9DQUxfT0ZGU0VUICsgMHgwMDIwKVxuKyNkZWZpbmUgQklUX0ZSRUVfVFhQR19ISUdIXHRcdFx0R0VOTUFTSyg3LCAwKVxuKyNkZWZpbmUgQklUX0ZSRUVfVFhQR19OT1JNQUxcdFx0XHRHRU5NQVNLKDE1LCA4KVxuKyNkZWZpbmUgQklUX0ZSRUVfVFhQR19MT1dcdFx0XHRHRU5NQVNLKDIzLCAxNilcbisjZGVmaW5lIEJJVF9GUkVFX1RYUEdfUFVCXHRcdFx0R0VOTUFTSygzMSwgMjQpXG4gLyogSENJIEN1cnJlbnQgUG93ZXIgTW9kZSAxICovXG4gI2RlZmluZSBSRUdfU0RJT19IQ1BXTTFcdFx0XHRcdChTRElPX0xPQ0FMX09GRlNFVCArIDB4MDAyNClcbiAvKiBIQ0kgQ3VycmVudCBQb3dlciBNb2RlIDIgKi9cbkBAIC0xNDMsNyArMTU2LDcgQEAgc3RydWN0IHJ0d19zZGlvX3R4X2RhdGEge1xuIH07XG4gXG4gc3RydWN0IHJ0d19zZGlvX3dvcmtfZGF0YSB7XG4tXHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yaztcbitcdHN0cnVjdCBkZWxheWVkX3dvcmsgd29yaztcbiBcdHN0cnVjdCBydHdfZGV2ICpydHdkZXY7XG4gfTtcbiBcbkBAIC0xNTksNiArMTcyLDEzIEBAIHN0cnVjdCBydHdfc2RpbyB7XG4gXHRzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqdHh3cTtcbiBcdHN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEgKnR4X2hhbmRsZXJfZGF0YTtcbiBcdHN0cnVjdCBza19idWZmX2hlYWQgdHhfcXVldWVbUlRLX01BWF9UWF9RVUVVRV9OVU1dO1xuK1x0Ym9vbCBxdWV1ZV9zdG9wcGVkW1JUS19NQVhfVFhfUVVFVUVfTlVNXTtcbitcbitcdGF0b21pY190IGZyZWVfcGdfaGlnaDtcbitcdGF0b21pY190IGZyZWVfcGdfbm9ybWFsO1xuK1x0YXRvbWljX3QgZnJlZV9wZ19sb3c7XG4rXHRhdG9taWNfdCBmcmVlX3BnX3B1YjtcbitcdGF0b21pY190IHR4X29xdF9mcmVlO1xuIH07XG4gXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHJ0d19zZGlvX3BtX29wcztcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3R4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3R4LmNcbmluZGV4IDg3ODZiYmI0MjFjMmIuLjRlMTEwYTQ1N2U3MWQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3R4LmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvdHguY1xuQEAgLTIwOCw4ICsyMDgsOSBAQCB2b2lkIHJ0d190eF9yZXBvcnRfZW5xdWV1ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBzbilcbiBcdF9fc2tiX3F1ZXVlX3RhaWwoXHUwMDI2dHhfcmVwb3J0LVx1MDAzZXF1ZXVlLCBza2IpO1xuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ0eF9yZXBvcnQtXHUwMDNlcV9sb2NrLCBmbGFncyk7XG4gXG4tXHRpZiAocnR3ZGV2LVx1MDAzZWNoaXAtXHUwMDNlaWQgPT0gUlRXX0NISVBfVFlQRV84NzIzRCBcdTAwMjZcdTAwMjZcbi1cdCAgICBydHdkZXYtXHUwMDNlaGNpLnR5cGUgPT0gUlRXX0hDSV9UWVBFX1VTQilcbitcdGlmICgocnR3ZGV2LVx1MDAzZWNoaXAtXHUwMDNlaWQgPT0gUlRXX0NISVBfVFlQRV84NzIzRCBcdTAwMjZcdTAwMjZcbitcdCAgICAgcnR3ZGV2LVx1MDAzZWhjaS50eXBlID09IFJUV19IQ0lfVFlQRV9VU0IpIHx8XG4rXHQgICAgcnR3X2lzXzg3MjNicyhydHdkZXYpKVxuIFx0XHR0aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcygyNTAwKTtcbiBcbiBcdG1vZF90aW1lcihcdTAwMjZ0eF9yZXBvcnQtXHUwMDNlcHVyZ2VfdGltZXIsIGppZmZpZXMgKyB0aW1lb3V0KTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjUxOjUxLjExMzIxMDQyOFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg3NzI0NTUxNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqU0RJTyBEcml2ZXIgUGF0Y2ggRXZhbHVhdGlvbioqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggc2VyaWVzIGZvciB0aGUgYHJ0dzg4YCBkcml2ZXIsIHNwZWNpZmljYWxseSBhZGRpbmcgc3VwcG9ydCBmb3IgUlRMODcyM0JTIFNESU8uIFRoaXMgaGl0cyBxdWl0ZSBhIGZldyBmaWxlczogYGZ3LmNgLCBgZncuaGAsIGBtYWluLmhgLCBgcnguY2AsIGBzZGlvLmNgLCBgc2Rpby5oYCwgYW5kIGB0eC5jYC4gVGhhdCdzIGEgd2lyZWxlc3MgZHJpdmVyIGZvciBSZWFsdGVrIDgwMi4xMWFjLzgwMi4xMW4gZGV2aWNlcywgc28gaXQncyBhIGNyaXRpY2FsIHBhcnQgb2YgdGhlIHdpcmVsZXNzIHN0YWNrLCBhbmQgdGhlIGNoYW5nZXMgYXJlIGZvY3VzZWQgb24gdGhlIFNESU8gaW50ZXJmYWNlIGFuZCBmaXJtd2FyZSBoYW5kbGluZywgcGFydGljdWxhcmx5IGFyb3VuZCBgcnR3X2lzXzg3MjNicyhydHdkZXYpYC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMsIGNhbiB3ZSBmdXp6IHRoaXM/IElzIHRoaXMgZXZlbiByZWFjaGFibGUgd2l0aGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/XG5cblNESU8gaXMgYSB0cmlja3kgb25lLiBTdGFuZGFyZCBRRU1VIGRvZXNuJ3QgdHlwaWNhbGx5IGVtdWxhdGUgU0RJTyBkZXZpY2VzLiBBcmUgdGhlcmUgYW55IHNvZnR3YXJlIGVtdWxhdGlvbnMgZm9yIFNESU8gb3IgTU1DIHRoYXQgd2UgY291bGQgbGV2ZXJhZ2U/IEkgbmVlZCB0byB0aGluayB0aGlzIHRocm91Z2ggY2FyZWZ1bGx5LiBXYWl0LCBtYWM4MDIxMV9od3NpbSBlbXVsYXRlcyBtYWM4MDIxMSwgYnV0IHRoaXMgaXMgYSBzcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIsIHNvIGRvZXMgaXQgbWF0dGVyIHRoYXQgbWFjODAyMTEgaXMgZW11bGF0ZWQgaWYgdGhpcyBpcyB0aGUgaGFyZHdhcmUgZHJpdmVyIGl0c2VsZiAocnR3ODgpPyBDYW4gKnJ0dzg4KiBiZSBmdXp6ZWQ/XG5cbkdlbmVyYWxseSwgSSBrbm93IGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlcnMsIGVzcGVjaWFsbHkgdGhvc2UgaW50ZXJhY3Rpbmcgd2l0aCBTRElPLCBVU0IsIG9yIFBDSWUsIHVzdWFsbHkgcmVxdWlyZSBhY3R1YWwgaGFyZHdhcmUgdW5sZXNzIHRoZXJlJ3MgYW4gZW11bGF0b3IuIFVTQiBkcml2ZXJzLCB3ZSBjYW4gc29tZXRpbWVzIGdldCBhd2F5IHdpdGggdXNpbmcgYGR1bW15X2hjZGAgb3IgYHJhdy1nYWRnZXRgLiBQQ0llIGRyaXZlcnMgYXJlIGEgbmlnaHRtYXJlIGluIHRoaXMgY2FzZSwgZnV6emluZyB0aGVtIGlzIHRvdWdoIHVubGVzcyB0aGVyZSdzIGEgc29mdHdhcmUgZW11bGF0aW9uLiBCdXQgd2hhdCBhYm91dCBTRElPPyBJcyB0aGVyZSBhIGR1bW15IFNESU8gaG9zdCBjb250cm9sbGVyIG91dCB0aGVyZSBzb21ld2hlcmU/IEknbGwgbmVlZCB0byBjaGVjayBpZiB0aGVyZSBpcyBhbnkgU0RJTyBmdXp6aW5nIHN1cHBvcnQsIG9yIGlmIHRoaXMgZXZlbiBpcyByZWFjaGFibGUuXG5cbkkgbmVlZCB0byBkbyBhIHF1aWNrIHNlYXJjaCBmb3IgU0RJTyBlbXVsYXRpb24gb3IsIHNwZWNpZmljYWxseSwgd2hldGhlciBgcnR3ODhgIGlzIGZ1enplZCBhdCBhbGwuXG5cbldhaXQgYSBzZWNvbmQuIFRoZSBwcm9tcHQgc2F5cywgXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOiAuLi4gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAuLi4gdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXCIgT0ssIHNvIFNESU8gaXMgYSBoYXJkd2FyZSBidXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBrbm93IGlmIHRoaXMgaXMgZnV6YWJsZSEgTGV0J3MgY2hlY2sgaWYgdGhlcmUncyBhIHdheSB0byBmdXp6IFNESU8hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjE3LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDU2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6NTE6NTkuODg1NjY4MDE0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NjEzNTc2NzYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImR1bW15X3NkaW9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjUyOjAxLjg0NzAzNjk4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzExMTIwNjc4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBzdW1tYXJpemVkIGFzIHJlcXVlc3RlZDpcblxuKipBc3Nlc3NpbmcgdGhlIExhbmRzY2FwZSBmb3IgU0RJTyBIb3N0IEVtdWxhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVyZSBhcmUgYW55IHJlYWRpbHkgYXZhaWxhYmxlIFNESU8gaG9zdCBlbXVsYXRvcnMgb3V0IHRoZXJlLiBCZWZvcmUgSSBzdGFydCBidWlsZGluZyBzb21ldGhpbmcgZnJvbSBzY3JhdGNoLCBpdCBtYWtlcyBzZW5zZSB0byBzZWUgd2hhdCdzIGFscmVhZHkgYmVlbiBjcmVhdGVkLiBUaGlzIGlzIGEgY29tbW9uIHN0YXJ0aW5nIHBvaW50IGZvciBhbnkgcHJvamVjdCwgaXNuJ3QgaXQ/IFNhdmVzIHRpbWUsIGVuZXJneSwgYW5kIHJlc291cmNlcyB0byBzZWUgaWYgc29tZW9uZSBlbHNlIGhhcyBhbHJlYWR5IHRhY2tsZWQgYSBzaW1pbGFyIGNoYWxsZW5nZS4gSSdsbCBuZWVkIHRvIGtub3cgd2hhdCdzIG91dCB0aGVyZSBzbyBJIGNhbiBkZXRlcm1pbmUgaWYgYW55IGV4aXN0aW5nIHNvbHV0aW9uIG1lZXRzIHRoZSByZXF1aXJlbWVudHMsIG9yLCBpZiBub3QsIHdoYXQgYXNwZWN0cyBtaWdodCBiZSBhcHBsaWNhYmxlLCBvciBhdCBsZWFzdCBzZXJ2ZSBhcyBhIHVzZWZ1bCBzdGFydGluZyBwb2ludCBmb3IgbXkgb3duIHdvcmsuIE15IGV4cGVyaWVuY2UgaW4gdGhpcyBmaWVsZCBoZWxwcyBtZSBhcHByZWNpYXRlIHRoYXQgZ29vZCBkZXNpZ24gcmVxdWlyZXMgYSBzb2xpZCBmb3VuZGF0aW9uIGluIHByaW9yIGFydC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM2MzgsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOTo1MjowNC45NTgyNDY0OTJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ4NTMwNjE4OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2Rpby4qZW11bFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6NTI6MDcuNDQzNTU5ODcxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc1NzM1MzE0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBSVFc4OCBEcml2ZXIgZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBjb25maXJtIGlzIHdoZXRoZXIgYHJ0dzg4YCBpcyAqYWxzbyogYSBVU0IgZHJpdmVyLiBUaGUgY29kZSBJJ20gZXhhbWluaW5nIHJlZmVyZW5jZXMgYHJ0d19pc184NzIzYnMocnR3ZGV2KWAsIGFuZCB0aGF0IG1hY3JvIHNlZW1zIHRvIHNwZWNpZmljYWxseSB0YXJnZXQgdGhlIFNESU8gaW50ZXJmYWNlIG9mIHRoZSBSVEw4NzIzQlMgY2hpcHNldC4gVGhlIGRlZmluaXRpb24gY2xlYXJseSBjaGVja3MgZm9yIGJvdGggdGhlIGNoaXAgSUQgKGBSVFdfQ0hJUF9UWVBFXzg3MjNCYCkgYW5kIHRoZSBIQ0kgdHlwZSBiZWluZyBTRElPIChgUlRXX0hDSV9UWVBFX1NESU9gKS5cblxuTm93LCB0aGF0J3MgaW50ZXJlc3RpbmcgYmVjYXVzZSBJIGtub3cgdGhhdCBgcnR3ODhgIGFjdHVhbGx5IHN1cHBvcnRzIFVTQiwgUENJLCAqYW5kKiBTRElPLiBTbyB0aGUgcXVlc3Rpb24gYmVjb21lczogQ2FuIHdlIGZ1enogdGhlIFNESU8gaW50ZXJmYWNlIHNwZWNpZmljYWxseSB3aXRoaW4gdGhpcyBkcml2ZXI/IE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBTRElPIGludGVyZmFjZXMgYXJlbid0IHVzdWFsbHkgaWRlYWwgY2FuZGlkYXRlcyBmb3IgZnV6emluZyBpbiB0aGUga2VybmVsLiBUaGUgbWFqb3IgaHVyZGxlIGlzIHRoZSBsYWNrIG9mIGEgdmlydHVhbCBTRElPIGhvc3QgY29udHJvbGxlciwgYSBjb3VudGVycGFydCB0byBzb21ldGhpbmcgbGlrZSBgZHVtbXlfaGNkYCBmb3IgVVNCIG9yIGB2aGNpYCBmb3IgSENJLiBXaXRob3V0IHRoaXMsIGNvbnN0cnVjdGluZyBhbmQgaW5qZWN0aW5nIFNESU8gdHJhZmZpYyBpbiBhIGNvbnRyb2xsZWQgZW52aXJvbm1lbnQgaXMgY2hhbGxlbmdpbmcuIFNvIEknbGwgbmVlZCB0byBjaGVjayBpZiB0aGVyZSBpcyBzb21lIGtpbmQgb2YgTU1DL1NESU8gZW11bGF0aW9uIHRoYXQgY291bGQgYmUgbGV2ZXJhZ2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzg2NCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOTo1MjoxMi4yMDA5MTUxNTNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkzMjQ4NDU4OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW1jLiplbXVsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOTo1MjoxNC4xMzM0MDcwMTNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NDM0OTg3MTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgU0RJTyBFbXVsYXRpb24gRmVhc2liaWxpdHkqKlxuXG5Pa2F5LCBzbyBRRU1VIGhhcyBTRCBjYXJkIGVtdWxhdGlvbiwgc3BlY2lmaWNhbGx5IHRoZSBzZGhjaSBpbnRlcmZhY2UuIE15IGluaXRpYWwgcXVlc3Rpb24gaXMgd2hldGhlciB0aGF0IGV4dGVuZHMgdG8gZW11bGF0aW5nICphcmJpdHJhcnkqIFNESU8gZGV2aWNlcy4gVGhlIHNob3J0IGFuc3dlciwgSSBiZWxpZXZlLCBpcyBuby4gUUVNVSBoYW5kbGVzIFNEIGNhcmRzLCBidXQgaXQgZG9lc24ndCBnZW5lcmFsbHkgcHJvdmlkZSBnZW5lcmljIFNESU8gZGV2aWNlIGVtdWxhdGlvbiB1bmxlc3MgYSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBpcyBidWlsdCBpbi5cblxuU2luY2UgSSBoYXZlbid0IGNvbWUgYWNyb3NzIFFFTVUgc3BlY2lmaWNhbGx5IGVtdWxhdGluZyB0aGlzIHBhcnRpY3VsYXIgUmVhbHRlayBTRElPIFdpRmkgY2FyZCwgSSdtIGFzc3VtaW5nIHRoZSByZWxldmFudCBjb2RlIHBhdGhzLCBzcGVjaWZpY2FsbHkgdGhlIG9uZXMgaW4gYHJ0dzg4L3NkaW8uY2AgdGhhdCBhcmUgdGllZCB0byBgUlRXX0hDSV9UWVBFX1NESU9gLCBhcmUgZWZmZWN0aXZlbHkgdW5yZWFjaGFibGUgd2hlbiBydW5uaW5nIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciwgb2YgY291cnNlLCBRRU1VLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGlzLiBJIG5lZWQgdG8gbWFrZSAqYWJzb2x1dGVseSogc3VyZSB0aGVyZSdzIG5vIHdheSB0byB0cmlnZ2VyIHRob3NlIGZ1bmN0aW9ucy4gSSBzZWUgdGhlIHBhdGNoIG1vZGlmaWVzIHNldmVyYWwgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIGZ1bmN0aW9uczogYHJ0d19md19jMmhfY21kX2hhbmRsZWAsIGBydHdfZndfYzJoX2NtZF9yeF9pcnFzYWZlYCwgYHJ0d19yeF9maWxsX3J4X3N0YXR1c2AsIGBydHdfc2Rpb19yZWFkX3BvcnRgLCBhbmQgYHJ0d19zZGlvX3dyaXRlX3BvcnRgLCBhbW9uZyBvdGhlcnMuIFRoZXNlIGFyZSAqYWxsKiBsb3ctbGV2ZWwgaGFyZHdhcmUgaW50ZXJhY3Rpb24gcG9pbnRzLiBUaGlzIHJlaW5mb3JjZXMgbXkgaW5pdGlhbCBhc3Nlc3NtZW50LlxuXG5UaGUgYmlnZ2VyIHF1ZXN0aW9uIGlzIGlmIHN5emthbGxlciBjYW4gcmVhY2ggdGhlc2UsIGFzIEkgaGF2ZSBiZWVuIHJldmlld2luZyBzeXprYWxsZXIgcmVwb3J0cy4gSSBrbm93IHN5emthbGxlciBjYW4gZnV6eiBVU0IgZGV2aWNlcyB1c2luZyB0aGUgcmF3LWdhZGdldCBvciBkdW1teV9oY2QgaW50ZXJmYWNlcy4gSXQgY2FuIGFsc28gZnV6eiBtYWM4MDIxMSBkZXZpY2VzIHVzaW5nIG1hYzgwMjExX2h3c2ltIGFuZCB2aXJ0aW8gZGV2aWNlcy4gQnV0LCBhZ2FpbiwgbXkgd29ya2luZyBhc3N1bXB0aW9uIGlzIHRoYXQgaXQgKmNhbid0KiBmdXp6IFNESU8gZGV2aWNlcy4gVGhlIGtlcm5lbCBsYWNrcyBhIGdlbmVyYWwgU0RJTyBmdXp6aW5nIGludGVyZmFjZSwgdW5saWtlIFVTQiBvciB0aGUgb3RoZXJzLlxuXG5JJ20gZ29pbmcgdG8gZG91YmxlIGNoZWNrIHRoaXMgYW5kIGNvbmZpcm0gd2hldGhlciBvciBub3QgdGhlcmUncyBhbnkgc3l6a2FsbGVyIHN1cHBvcnQgZm9yIFNESU8uIEkgaGF2ZSBhIGh1bmNoLCBhbmQgaXQncyB0aW1lIHRvIHZlcmlmeSBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQzNjAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6NTI6MjEuNTY4Mzk3NzM0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTE2OTY4Mzg1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzeXpfc2Rpb1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6NTI6MjMuMDg1MzgwNjg5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMDA4NDA3NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipBc3Nlc3NpbmcgdGhlIExhbmRzY2FwZSBmb3IgTU1DIEZ1enppbmcgT3Bwb3J0dW5pdGllcyoqXG5cbk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0J3MgdGFrZSBhIHF1aWNrIG1lbnRhbCBpbnZlbnRvcnkuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJ3MgYW55IGFjdGl2ZSBNTUMgKE11bHRpTWVkaWFDYXJkKSBmdXp6aW5nIGdvaW5nIG9uIHJpZ2h0IG5vdy4gSXQncyBhIGtleSBhcmVhIHRvIGV4cGxvcmUsIGdpdmVuIHRoZSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIGFuZCB3aWRlc3ByZWFkIHVzZSBvZiB0aGVzZSBkZXZpY2VzLiBJJ2xsIG5lZWQgdG8gY29uc2lkZXIgd2hhdCB0b29scyBhbmQgYXBwcm9hY2hlcyBhcmUgY3VycmVudGx5IGJlaW5nIGVtcGxveWVkLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIGdhcHMgb3IgdW5kZXItZXhwbG9yZWQgYXJlYXMgcmlwZSBmb3IgaW52ZXN0aWdhdGlvbi4gVGltZSB0byBzdGFydCB0aGUgZGVlcCBkaXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTE1MywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjUyOjI2LjA4NjIyMzYwMloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0NjY2MTczMiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3l6X21tY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6NTI6MjcuNjMyODk0MTc0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMDg5MDAxMjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVucmVhY2hhYmxlIENvZGUgaW4gYSBGdXp6aW5nIENvbnRleHQqKlxuXG5Pa2F5LCBzbyB0aGUgc2l0dWF0aW9uIGlzIGNsZWFyLiBTeXprYWxsZXIgY2FuJ3QgZnV6eiBTRElPIGRldmljZXMsIHBlcmlvZC4gVGhhdCBtZWFucyBhbnkgY2hhbmdlcyB0b3VjaGluZyBgZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmNgLCBvciBhbnkgU0RJTy1zcGVjaWZpYyBsb2dpYyB3aXRoaW4gYGZ3LmNgLCBgcnguY2AsIG9yIGV2ZW4gYHR4LmNgIGZvciB0aGF0IG1hdHRlciwgYXJlIGVzc2VudGlhbGx5IGluYWNjZXNzaWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGUgcHJvbXB0IHNwZWNpZmljYWxseSBjYWxscyBvdXQgY29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXNpbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgLSBubyBVU0IgZ2FkZ2V0IG9yIG1hYzgwMjExX2h3c2ltIGhlcmUuIFRoaXMgY2xlYXJseSBmYWxscyB1bmRlciB0aGF0IGNhdGVnb3J5LlxuXG5MZXQgbWUganVzdCBxdWlja2x5IHJldmlldyB0aGUgY2hhbmdlcyB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uIFRoZSBrZXkgZnVuY3Rpb24gaXMgYHJ0d19pc184NzIzYnNgLCB3aGljaCBiZWNvbWVzIHRydWUgd2hlbiB0aGUgY2hpcCBpcyBhbiA4NzIzQiBhbmQgdGhlIEhDSSB0eXBlIGlzIFNESU8uXG5cbiogICBJbiBgZncuY2AsIGEgY291cGxlIG9mIGNhc2VzIChDMkhcXF9WRU5ET1JcXF9UWFxcX1JQVCBhbmQgQzJIXFxfV0xBTlxcX1JGT04pIG5vdyB0cmlnZ2VyIGEgZGlmZmVyZW50IGhhbmRsZXIsIGBydHdfdHhfcmVwb3J0X2hhbmRsZWAsICpvbmx5KiBpZiBgcnR3X2lzXzg3MjNicyhydHdkZXYpYCBpcyB0cnVlLiBTbyBpdCdzIHZlcnkgc3BlY2lmaWMgdG8gODcyM0JTIGFuZCBTRElPLlxuKiAgIGByeC5jYCBoYXMgYSBjb25kaXRpb24gdGhhdCBnZXRzIGV4dGVuZGVkIGZyb20gUlRXXFxfQ0hJUFxcX1RZUEVcXF84NzAzQiAod2hpY2ggd2FzIGFscmVhZHkgdGhlcmUpIHRvIGluY2x1ZGUgYHJ0d19pc184NzIzYnMocnR3ZGV2KWAuIFRoZSBhZGRlZCBjb25kaXRpb24gaXMgc3BlY2lmaWNhbGx5IFNESU8sIGZvciB0aGlzIGNoaXAuXG4qICAgYHNkaW8uY2AgaGFzIGEgbG90IG9mIGRpcmVjdCBTRElPLXNwZWNpZmljIGNoYW5nZXMsIHdoaWNoIGlzIGEgYmlnIHJlZCBmbGFnLiBPYnZpb3VzLCBidXQgc3RpbGwgd29ydGggbWVudGlvbmluZy5cbiogICBJbiBgdHguY2AsIGFuIGBPUmAgY29uZGl0aW9uIGhhcyBiZWVuIGFkZGVkLCBhbGxvd2luZyBmb3IgdGhlIDg3MjNCUy5cblxuQmFzaWNhbGx5LCBhbGwgZnVuY3Rpb25hbCBjaGFuZ2VzIGJvaWwgZG93biB0byBgcnR3X2lzXzg3MjNicyhydHdkZXYpYCwgd2hpY2ggbmVlZHMgYFJUV19IQ0lfVFlQRV9TRElPYC4gU2luY2UgUUVNVSwgYW5kIHRoZXJlZm9yZSBzeXprYWxsZXIsIGRvZXNuJ3QgZW11bGF0ZSBTRElPIGhhcmR3YXJlLCBub3IgaXMgdGhlcmUgYSBzb2Z0d2FyZSBTRElPIGZyYW1ld29yayBvZiB0aGF0IHNvcnQsIHRoaXMgY29kZSBpcyBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGluIGEgZnV6emluZyBjb250ZXh0LlxuXG5UaGVyZWZvcmUsIHRoZSBvbmx5IHJlYXNvbmFibGUgY29uY2x1c2lvbiBpcyB0aGF0IEkgbmVlZCB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSByYXRpb25hbGUgaXMgc3RyYWlnaHRmb3J3YXJkOiB0aGlzIHBhdGNoICpvbmx5KiBtb2RpZmllcyBjb2RlIHNwZWNpZmljIHRvIGFuIFNESU8gV2lGaSBjaGlwICh0aGUgUlRMODcyM0JTKSwgd2hpY2ggcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgYW5kIGlzIHNpbXBseSBub3QgYWNjZXNzaWJsZSBvciBlbXVsYXRhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgYW5kIHRodXMgaW1wb3NzaWJsZSB0byByZWFjaCB3aXRoIHN5emthbGxlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzMjMsIk91dHB1dFRva2VucyI6MTA0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjUyOjM5LjcyMTg5ODM0N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGV4Y2x1c2l2ZWx5IGFkZHMgc3VwcG9ydCBhbmQgZml4ZXMgZm9yIHRoZSBSZWFsdGVrIFJUTDg3MjNCUyBTRElPIFdpRmkgY2hpcC4gU0RJTyBkZXZpY2VzIHJlcXVpcmUgcGh5c2ljYWwgaGFyZHdhcmUgb3Igc3BlY2lmaWMgUUVNVSBtYWNoaW5lIGVtdWxhdGlvbiB3aGljaCBpcyBub3QgYXZhaWxhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiBUaGVyZSBpcyBubyBzb2Z0d2FyZSBTRElPIGVtdWxhdGlvbiBmcmFtZXdvcmsgKGxpa2UgZHVtbXlfaGNkIGZvciBVU0IpIHRvIHJlYWNoIHRoZXNlIGNvZGUgcGF0aHMgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBleGNsdXNpdmVseSBhZGRzIHN1cHBvcnQgYW5kIGZpeGVzIGZvciB0aGUgUmVhbHRlayBSVEw4NzIzQlMgU0RJTyBXaUZpIGNoaXAuIFNESU8gZGV2aWNlcyByZXF1aXJlIHBoeXNpY2FsIGhhcmR3YXJlIG9yIHNwZWNpZmljIFFFTVUgbWFjaGluZSBlbXVsYXRpb24gd2hpY2ggaXMgbm90IGF2YWlsYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4gVGhlcmUgaXMgbm8gc29mdHdhcmUgU0RJTyBlbXVsYXRpb24gZnJhbWV3b3JrIChsaWtlIGR1bW15X2hjZCBmb3IgVVNCKSB0byByZWFjaCB0aGVzZSBjb2RlIHBhdGhzIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6NTI6MzkuNzIxOTI1NjA3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowxcz4h[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-11 09:35:02 +0000 UTC FinishedAt: 2026-08-11 09:52:40 +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+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjUxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZXhjbHVzaXZlbHkgYWRkcyBzdXBwb3J0IGFuZCBmaXhlcyBmb3IgdGhlIFJlYWx0ZWsgUlRMODcyM0JTIFNESU8gV2lGaSBjaGlwLiBTRElPIGRldmljZXMgcmVxdWlyZSBwaHlzaWNhbCBoYXJkd2FyZSBvciBzcGVjaWZpYyBRRU1VIG1hY2hpbmUgZW11bGF0aW9uIHdoaWNoIGlzIG5vdCBhdmFpbGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuIFRoZXJlIGlzIG5vIHNvZnR3YXJlIFNESU8gZW11bGF0aW9uIGZyYW1ld29yayAobGlrZSBkdW1teV9oY2QgZm9yIFVTQikgdG8gcmVhY2ggdGhlc2UgY29kZSBwYXRocyBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6NTE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhNDE4MjU2MTc4NDRlYTUzOTFmMDVjZTQ0OGY4NjkzOTViMGUwY2E4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMDk6NTE6NDkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9mdy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9mdy5jXG5pbmRleCA5NDVmZWRjZDM3NWI2Li5jODVjMGUzZTYwYTk3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9mdy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2Z3LmNcbkBAIC0zMTcsNiAmIzQzOzMxNywxNSBAQCB2b2lkIHJ0d19md19jMmhfY21kX2hhbmRsZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0Y2FzZSBDMkhfQ0NYX1RYX1JQVDpcbiBcdFx0cnR3X3R4X3JlcG9ydF9oYW5kbGUocnR3ZGV2LCBza2IsIEMySF9DQ1hfVFhfUlBUKTtcbiBcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBDMkhfVkVORE9SX1RYX1JQVDpcbiYjNDM7XHRjYXNlIEMySF9XTEFOX1JGT046XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogVGhlIFJUTDg3MjNCUyBmaXJtd2FyZSByZXBvcnRzIG1hbmFnZW1lbnQgVFggdGhyb3VnaCB0aGVzZVxuJiM0MztcdFx0ICogdHdvIGV2ZW50cyBpbnN0ZWFkLCB1c2luZyB0aGUgc2FtZSBwYXlsb2FkIGxheW91dC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSlcbiYjNDM7XHRcdFx0cnR3X3R4X3JlcG9ydF9oYW5kbGUocnR3ZGV2LCBza2IsIEMySF9DQ1hfVFhfUlBUKTtcbiYjNDM7XHRcdGJyZWFrO1xuIFx0Y2FzZSBDMkhfQlRfSU5GTzpcbiBcdFx0cnR3X2NvZXhfYnRfaW5mb19ub3RpZnkocnR3ZGV2LCBjMmgtXHUwMDNlcGF5bG9hZCwgbGVuKTtcbiBcdFx0YnJlYWs7XG5AQCAtMzY1LDYgJiM0MzszNzQsMTcgQEAgdm9pZCBydHdfZndfYzJoX2NtZF9yeF9pcnFzYWZlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHUzMiBwa3Rfb2Zmc2V0LFxuIFx0XHRydHdfY29leF9pbmZvX3Jlc3BvbnNlKHJ0d2Rldiwgc2tiKTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIEMySF9XTEFOX1JGT046XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogT24gODcyM0JTIFNESU8gd2l0aCB2NDEgZmlybXdhcmUsIEMySCAweDMyIGNhcnJpZXMgYSBzY2FuIFRYXG4mIzQzO1x0XHQgKiByZXBvcnQsIG5vdCBhIFdMQU5fUkZPTiBldmVudDogZGVmZXIgaXQgdG9cbiYjNDM7XHRcdCAqIHJ0d19md19jMmhfY21kX2hhbmRsZSgpLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKSB7XG4mIzQzO1x0XHRcdCooKHUzMiAqKXNrYi1cdTAwM2VjYikgPSBwa3Rfb2Zmc2V0O1xuJiM0MztcdFx0XHRza2JfcXVldWVfdGFpbChcdTAwMjZydHdkZXYtXHUwMDNlYzJoX3F1ZXVlLCBza2IpO1xuJiM0MztcdFx0XHRpZWVlODAyMTFfcXVldWVfd29yayhydHdkZXYtXHUwMDNlaHcsIFx1MDAyNnJ0d2Rldi1cdTAwM2VjMmhfd29yayk7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuIFx0XHRjb21wbGV0ZShcdTAwMjZydHdkZXYtXHUwMDNlbHBzX2xlYXZlX2NoZWNrKTtcbiBcdFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbiBcdFx0YnJlYWs7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9mdy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9mdy5oXG5pbmRleCA0OGFkOWNlYWI2ZWExLi5iZGRhNzhkYzY0NjJhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9mdy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2Z3LmhcbkBAIC01NCw2ICYjNDM7NTQsMTEgQEAgZW51bSBydHdfYzJoX2NtZF9pZCB7XG4gXHRDMkhfQlRfTVBfSU5GTyA9IDB4MGIsXG4gXHRDMkhfQlRfSElEX0lORk8gPSAweDQ1LFxuIFx0QzJIX1JBX1JQVCA9IDB4MGMsXG4mIzQzO1x0LypcbiYjNDM7XHQgKiA4NzIzQlMgU0RJTyB2ZW5kb3IgdjQxIGZpcm13YXJlIG1hbmFnZW1lbnQgVFggcmVwb3J0ICgweDMyIGlzXG4mIzQzO1x0ICogcmVwb3J0ZWQgYXMgQzJIX1dMQU5fUkZPTiwgaGFuZGxlZCBwZXItY2hpcCBpbiB0aGUgQzJIIGRpc3BhdGNoKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRDMkhfVkVORE9SX1RYX1JQVCA9IDB4MTIsXG4gXHRDMkhfSFdfRkVBVFVSRV9SRVBPUlQgPSAweDE5LFxuIFx0QzJIX1dMQU5fSU5GTyA9IDB4MjcsXG4gXHRDMkhfV0xBTl9SRk9OID0gMHgzMixcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oXG5pbmRleCBjNmU5ODFiYTc5ODY4Li44Zjg2ZjdjMTJkZTVhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oXG5AQCAtMTk0LDYgJiM0MzsxOTQsNyBAQCBlbnVtIHJ0d19jaGlwX3R5cGUge1xuIFx0UlRXX0NISVBfVFlQRV84NzIzRCxcbiBcdFJUV19DSElQX1RZUEVfODgyMUMsXG4gXHRSVFdfQ0hJUF9UWVBFXzg3MDNCLFxuJiM0MztcdFJUV19DSElQX1RZUEVfODcyM0IsXG4gXHRSVFdfQ0hJUF9UWVBFXzg4MjFBLFxuIFx0UlRXX0NISVBfVFlQRV84ODEyQSxcbiBcdFJUV19DSElQX1RZUEVfODgxNEEsXG5AQCAtMjE5NCw2ICYjNDM7MjE5NSwxMiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcnR3X2NoaXBfaGFzX3R4X3N0YmMoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiBcdHJldHVybiBydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2V0eF9zdGJjO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBib29sIHJ0d19pc184NzIzYnMoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VpZCA9PSBSVFdfQ0hJUF9UWVBFXzg3MjNCIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgICBydHdkZXYtXHUwMDNlaGNpLnR5cGUgPT0gUlRXX0hDSV9UWVBFX1NESU87XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSB1OCBydHdfYWNxdWlyZV9tYWNpZChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbWFjX2lkO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnguY1xuaW5kZXggMDFmZDI5OWFiYjdmZS4uYTkzNjFlZjRiOTNjMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9yeC5jXG5AQCAtMjUzLDEwICYjNDM7MjUzLDEyIEBAIHN0YXRpYyB2b2lkIHJ0d19yeF9maWxsX3J4X3N0YXR1cyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuIFxuIFx0cnR3X3J4X2FkZHJfbWF0Y2gocnR3ZGV2LCBwa3Rfc3RhdCwgaGRyKTtcbiBcbi1cdC8qIFJ0bDg3MjNjcyBkcml2ZXIgY2hlY2tzIGZvciBzaXplIFx1MDAzYyAxNCBvciBzaXplIFx1MDAzZSA4MTkyIGFuZFxuLVx0ICogc2ltcGx5IGRyb3BzIHRoZSBwYWNrZXQuXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBSdGw4NzIzY3MgYW5kIHJ0bDg3MjNicyBkcml2ZXJzIGNoZWNrIGZvciBzaXplIFx1MDAzYyAxNCBvciBzaXplIFx1MDAzZSA4MTkyXG4mIzQzO1x0ICogYW5kIHNpbXBseSBkcm9wIHRoZSBwYWNrZXQuXG4gXHQgKi9cbi1cdGlmIChydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VpZCA9PSBSVFdfQ0hJUF9UWVBFXzg3MDNCIFx1MDAyNlx1MDAyNiBwa3Rfc3RhdC1cdTAwM2Vwa3RfbGVuID09IDApIHtcbiYjNDM7XHRpZiAoKHJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZWlkID09IFJUV19DSElQX1RZUEVfODcwM0IgfHwgcnR3X2lzXzg3MjNicyhydHdkZXYpKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgcGt0X3N0YXQtXHUwMDNlcGt0X2xlbiA9PSAwKSB7XG4gXHRcdHJ4X3N0YXR1cy1cdTAwM2VmbGFnIHw9IFJYX0ZMQUdfTk9fUFNEVTtcbiBcdFx0cnR3X2RiZyhydHdkZXYsIFJUV19EQkdfUlgsIFwmIzM0O3plcm8gbGVuZ3RoIHBhY2tldFwmIzM0Oyk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uY1xuaW5kZXggNWI0MGQ3NGIxNmVlMC4uZWQxYmVkOGVhMTQ0YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uY1xuQEAgLTIwLDYgJiM0MzsyMCwxNyBAQFxuICNpbmNsdWRlIFwmIzM0O3R4LmhcJiMzNDtcbiBcbiAjZGVmaW5lIFJUV19TRElPX0lORElSRUNUX1JXX1JFVFJJRVNcdFx0XHQ1MFxuJiM0MzsjZGVmaW5lIFJUV19TRElPX09RVF9USU1FT1VUX01TXHRcdFx0XHQxMDAwXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiA4NzIzQlMgU0RJTyBUWCBGSUZPIGJhY2stcHJlc3N1cmUgd2F0ZXJtYXJrczogc3RvcCB0aGUgbWFjODAyMTEgcXVldWUgb25jZVxuJiM0MzsgKiB0aGUgcGVyLUFDIHNvZnR3YXJlIEZJRk8gZmlsbHMgcGFzdCB0aGUgaGlnaCB3YXRlcm1hcmssIGFuZCB3YWtlIGl0IGZyb20gdGhlXG4mIzQzOyAqIFRYIGRyYWluIHBhdGggb25jZSBpdCBmYWxscyBiYWNrIHRvIHRoZSBsb3cgb25lLiBCb3VuZHMgdGhlIHF1ZXVlaW5nIGxhdGVuY3lcbiYjNDM7ICogdGhhdCBvdGhlcndpc2UgY2F1c2VzIHVwbGluayBidWZmZXJibG9hdCAvIGNvbmdlc3Rpb24gY29sbGFwc2UuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIFJUV19TRElPX1RYX0ZJRk9fSElXQVRFUlx0XHRcdDE2XG4mIzQzOyNkZWZpbmUgUlRXX1NESU9fVFhfRklGT19MT1dBVEVSXHRcdFx0OFxuJiM0MzsjZGVmaW5lIFJUV19TRElPX1RYX1JFVFJZX0RFTEFZXHRcdFx0bXNlY3NfdG9famlmZmllcygxKVxuIFxuIHN0YXRpYyBib29sIHJ0d19zZGlvX2lzX2J1c19hZGRyKHUzMiBhZGRyKVxuIHtcbkBAIC01NDgsMTIgJiM0Mzs1NTksMTIyIEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9fcmVhZF9wb3J0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4ICpidWYsIHNpemVfdCBjb3VudClcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBUaGUgY2FjaGVkIGZyZWUgcGFnZSBjb3VudGVycyBhcmUgYSBmYXN0IHBhdGggaGludCBvbmx5LiBUaGV5IGFyZSB3cml0dGVuXG4mIzQzOyAqIGZyb20gdGhlIHNpbmdsZSB0aHJlYWRlZCBUWCB3b3JrIGFuZCwgZm9yIEgyQyBhbmQgcmVzZXJ2ZWQgcGFnZSB3cml0ZXMsXG4mIzQzOyAqIGZyb20gcHJvY2VzcyBjb250ZXh0LCBzbyB0aGV5IGFyZSBhdG9taWNfdDsgd2hlbmV2ZXIgdGhleSBjbGFpbSB0aGVyZSBpc1xuJiM0MzsgKiBub3QgZW5vdWdoIHJvb20gdGhleSBhcmUgcmVzeW5jaHJvbmlzZWQgZnJvbSB0aGUgY2hpcCBiZWZvcmUgdGhlIGNhbGxlclxuJiM0MzsgKiBnaXZlcyB1cCwgd2hpY2ggYWxzbyBhYnNvcmJzIGEgbG9zdCB1cGRhdGUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfc3RvcmVfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4mIzQzO1x0XHRcdFx0XHQgICAgdTMyIGZyZWVfdHhwZylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbiYjNDM7XG4mIzQzO1x0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfaGlnaCxcbiYjNDM7XHRcdCAgIHUzMl9nZXRfYml0cyhmcmVlX3R4cGcsIEJJVF9GUkVFX1RYUEdfSElHSCkpO1xuJiM0MztcdGF0b21pY19zZXQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX25vcm1hbCxcbiYjNDM7XHRcdCAgIHUzMl9nZXRfYml0cyhmcmVlX3R4cGcsIEJJVF9GUkVFX1RYUEdfTk9STUFMKSk7XG4mIzQzO1x0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfbG93LFxuJiM0MztcdFx0ICAgdTMyX2dldF9iaXRzKGZyZWVfdHhwZywgQklUX0ZSRUVfVFhQR19MT1cpKTtcbiYjNDM7XHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19wdWIsXG4mIzQzO1x0XHQgICB1MzJfZ2V0X2JpdHMoZnJlZV90eHBnLCBCSVRfRlJFRV9UWFBHX1BVQikpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfaW5pdF9mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcnR3X3BhZ2VfdGFibGUgKnBnX3RibDtcbiYjNDM7XHR1MzIgZnJlZV90eHBnO1xuJiM0MztcdHUxNiBwdWJxX251bTtcbiYjNDM7XG4mIzQzO1x0ZnJlZV90eHBnID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19TRElPX0ZSRUVfVFhQRyk7XG4mIzQzO1x0aWYgKGZyZWVfdHhwZykge1xuJiM0MztcdFx0cnR3X3NkaW9fODcyM2JzX3N0b3JlX2ZyZWVfdHhwZyhydHdkZXYsIGZyZWVfdHhwZyk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHBnX3RibCA9IFx1MDAyNnJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZXBhZ2VfdGFibGVbMF07XG4mIzQzO1x0XHRwdWJxX251bSA9IHJ0d2Rldi1cdTAwM2VmaWZvLmFjcV9wZ19udW0gLSBwZ190YmwtXHUwMDNlaHFfbnVtIC1cbiYjNDM7XHRcdFx0ICAgcGdfdGJsLVx1MDAzZWxxX251bSAtIHBnX3RibC1cdTAwM2VucV9udW0gLSBwZ190YmwtXHUwMDNlZXhxX251bSAtXG4mIzQzO1x0XHRcdCAgIHBnX3RibC1cdTAwM2VnYXBxX251bTtcbiYjNDM7XG4mIzQzO1x0XHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19oaWdoLCBwZ190YmwtXHUwMDNlaHFfbnVtKTtcbiYjNDM7XHRcdGF0b21pY19zZXQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX25vcm1hbCwgcGdfdGJsLVx1MDAzZW5xX251bSk7XG4mIzQzO1x0XHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19sb3csIHBnX3RibC1cdTAwM2VscV9udW0pO1xuJiM0MztcdFx0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfcHViLCBwdWJxX251bSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfb3F0X2ZyZWUsXG4mIzQzO1x0XHQgICBydHdfcmVhZDgocnR3ZGV2LCBSRUdfU0RJT19PUVRfRlJFRV9QRykpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfc3luY19mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiYjNDM7e1xuJiM0MztcdHUzMiBmcmVlX3R4cGcgPSBydHdfcmVhZDMyKHJ0d2RldiwgUkVHX1NESU9fRlJFRV9UWFBHKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGZyZWVfdHhwZylcbiYjNDM7XHRcdHJ0d19zZGlvXzg3MjNic19zdG9yZV9mcmVlX3R4cGcocnR3ZGV2LCBmcmVlX3R4cGcpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBTdW0gb2YgdGhlIHF1ZXVlJiMzOTtzIGRlZGljYXRlZCBjb3VudGVyIGFuZCB0aGUgcHVibGljIHBvb2wsIGNsYW1wZWQgYXQgemVybzpcbiYjNDM7ICogYSBsb3N0IHVwZGF0ZSBiZXR3ZWVuIHRoZSBjaGVjayBiZWxvdyBhbmQgcnR3X3NkaW9fODcyM2JzX2NvbnN1bWVfdHhwZygpXG4mIzQzOyAqIGNhbiBicmllZmx5IGRyaXZlIGEgY291bnRlciBuZWdhdGl2ZSwgYW5kIGxldHRpbmcgdGhhdCB3cmFwIHdvdWxkIGhpZGUgdGhlXG4mIzQzOyAqIHNob3J0YWdlIGluc3RlYWQgb2YgdHJpZ2dlcmluZyBhIHJlc3luYyBmcm9tIHRoZSBjaGlwLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBydHdfc2Rpb184NzIzYnNfcGFnZXNfZnJlZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIGF0b21pY190ICpkZWRpY2F0ZWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4mIzQzO1x0aW50IGZyZWU7XG4mIzQzO1xuJiM0MztcdGZyZWUgPSBhdG9taWNfcmVhZChkZWRpY2F0ZWQpICYjNDM7IGF0b21pY19yZWFkKFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19wdWIpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZnJlZSBcdTAwM2UgMCA/IGZyZWUgOiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYXRvbWljX3QgKnJ0d19zZGlvXzg3MjNic19mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggcXVldWUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAocXVldWUpIHtcbiYjNDM7XHRjYXNlIFJUV19UWF9RVUVVRV9WSTpcbiYjNDM7XHRcdHJldHVybiBcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfbm9ybWFsO1xuJiM0MztcdGNhc2UgUlRXX1RYX1FVRVVFX0JFOlxuJiM0MztcdGNhc2UgUlRXX1RYX1FVRVVFX0JLOlxuJiM0MztcdFx0cmV0dXJuIFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19sb3c7XG4mIzQzO1x0Y2FzZSBSVFdfVFhfUVVFVUVfQkNOOlxuJiM0MztcdGNhc2UgUlRXX1RYX1FVRVVFX0gyQzpcbiYjNDM7XHRjYXNlIFJUV19UWF9RVUVVRV9ISTA6XG4mIzQzO1x0Y2FzZSBSVFdfVFhfUVVFVUVfTUdNVDpcbiYjNDM7XHRjYXNlIFJUV19UWF9RVUVVRV9WTzpcbiYjNDM7XHRcdHJldHVybiBcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfaGlnaDtcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgcnR3X3NkaW9fY2hlY2tfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IHF1ZXVlLFxuIFx0XHRcdFx0ICAgIHNpemVfdCBjb3VudClcbiB7XG4gXHR1bnNpZ25lZCBpbnQgcGFnZXNfZnJlZSwgcGFnZXNfbmVlZGVkO1xuIFxuLVx0aWYgKHJ0d19jaGlwX3djcHVfODA1MShydHdkZXYpKSB7XG4mIzQzO1x0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSkge1xuJiM0MztcdFx0YXRvbWljX3QgKmRlZGljYXRlZDtcbiYjNDM7XG4mIzQzO1x0XHRkZWRpY2F0ZWQgPSBydHdfc2Rpb184NzIzYnNfZnJlZV90eHBnKHJ0d2RldiwgcXVldWUpO1xuJiM0MztcdFx0aWYgKCFkZWRpY2F0ZWQpIHtcbiYjNDM7XHRcdFx0cnR3X3dhcm4ocnR3ZGV2LCBcJiMzNDtVbmtub3duIG1hcHBpbmcgZm9yIHF1ZXVlICV1XFxuXCYjMzQ7LCBxdWV1ZSk7XG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdHBhZ2VzX2ZyZWUgPSBydHdfc2Rpb184NzIzYnNfcGFnZXNfZnJlZShydHdkZXYsIGRlZGljYXRlZCk7XG4mIzQzO1x0XHRwYWdlc19uZWVkZWQgPSBESVZfUk9VTkRfVVAoY291bnQsIHJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZXBhZ2Vfc2l6ZSk7XG4mIzQzO1x0XHRpZiAocGFnZXNfbmVlZGVkIFx1MDAzYz0gcGFnZXNfZnJlZSlcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdFx0cnR3X3NkaW9fODcyM2JzX3N5bmNfZnJlZV90eHBnKHJ0d2Rldik7XG4mIzQzO1x0XHRwYWdlc19mcmVlID0gcnR3X3NkaW9fODcyM2JzX3BhZ2VzX2ZyZWUocnR3ZGV2LCBkZWRpY2F0ZWQpO1xuJiM0MztcdH0gZWxzZSBpZiAocnR3X2NoaXBfd2NwdV84MDUxKHJ0d2RldikpIHtcbiBcdFx0dTMyIGZyZWVfdHhwZztcbiBcbiBcdFx0ZnJlZV90eHBnID0gcnR3X3NkaW9fcmVhZDMyKHJ0d2RldiwgUkVHX1NESU9fRlJFRV9UWFBHKTtcbkBAIC02MzIsNDQgJiM0Mzs3NTMsMTIzIEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9fY2hlY2tfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IHF1ZXVlLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IHJ0d19zZGlvXzg3MjNic193YWl0X3R4X29xdChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuJiM0MztcdHU4IGZyZWU7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGlmIChhdG9taWNfYWRkX3VubGVzcyhcdTAwMjZydHdzZGlvLVx1MDAzZXR4X29xdF9mcmVlLCAtMSwgMCkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgUlRXX1NESU9fT1FUX1RJTUVPVVRfTVM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRmcmVlID0gcnR3X3JlYWQ4KHJ0d2RldiwgUkVHX1NESU9fT1FUX0ZSRUVfUEcpO1xuJiM0MztcdFx0aWYgKGZyZWUpIHtcbiYjNDM7XHRcdFx0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZXR4X29xdF9mcmVlLCBmcmVlIC0gMSk7XG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0dXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIC1FQlVTWTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnR3X3NkaW9fODcyM2JzX2NvbnN1bWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCBxdWV1ZSxcbiYjNDM7XHRcdFx0XHRcdCB1bnNpZ25lZCBpbnQgcGFnZXMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4mIzQzO1x0YXRvbWljX3QgKmRlZGljYXRlZDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgdGFrZW47XG4mIzQzO1x0aW50IGZyZWU7XG4mIzQzO1xuJiM0MztcdGRlZGljYXRlZCA9IHJ0d19zZGlvXzg3MjNic19mcmVlX3R4cGcocnR3ZGV2LCBxdWV1ZSk7XG4mIzQzO1x0aWYgKCFkZWRpY2F0ZWQpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGZyZWUgPSBhdG9taWNfcmVhZChkZWRpY2F0ZWQpO1xuJiM0MztcdHRha2VuID0gbWluX3QodW5zaWduZWQgaW50LCBwYWdlcywgZnJlZSBcdTAwM2UgMCA/IGZyZWUgOiAwKTtcbiYjNDM7XHRhdG9taWNfc3ViKHRha2VuLCBkZWRpY2F0ZWQpO1xuJiM0MztcbiYjNDM7XHRwYWdlcyAtPSB0YWtlbjtcbiYjNDM7XHRpZiAocGFnZXMgXHUwMDI2XHUwMDI2IGF0b21pY19zdWJfcmV0dXJuKHBhZ2VzLCBcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfcHViKSBcdTAwM2MgMClcbiYjNDM7XHRcdGF0b21pY19zZXQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX3B1YiwgMCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBydHdfc2Rpb193cml0ZV9wb3J0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0ICAgICAgIGVudW0gcnR3X3R4X3F1ZXVlX3R5cGUgcXVldWUpXG4ge1xuIFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuJiM0MztcdGJvb2wgcnRsODcyM2JzID0gcnR3X2lzXzg3MjNicyhydHdkZXYpO1xuJiM0MztcdHVuc2lnbmVkIGludCBvcmlnX2xlbiA9IHNrYi1cdTAwM2VsZW47XG4mIzQzO1x0dW5zaWduZWQgaW50IHBhZ2VzO1xuJiM0MztcdHNpemVfdCB3cml0ZV9zaXplO1xuIFx0Ym9vbCBidXNfY2xhaW07XG4gXHRzaXplX3QgdHhzaXplO1xuIFx0dTMyIHR4YWRkcjtcbiBcdGludCByZXQ7XG4gXG4tXHR0eGFkZHIgPSBydHdfc2Rpb19nZXRfdHhfYWRkcihydHdkZXYsIHNrYi1cdTAwM2VsZW4sIHF1ZXVlKTtcbi1cdGlmICghdHhhZGRyKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRpZiAocnRsODcyM2JzKSB7XG4mIzQzO1x0XHR0eHNpemUgPSByb3VuZF91cChvcmlnX2xlbiwgNCk7XG4mIzQzO1x0XHR3cml0ZV9zaXplID0gdHhzaXplIFx1MDAzZSBSVFdfU0RJT19CTE9DS19TSVpFID9cbiYjNDM7XHRcdFx0ICAgICByb3VuZF91cCh0eHNpemUsIFJUV19TRElPX0JMT0NLX1NJWkUpIDogdHhzaXplO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHR0eHNpemUgPSBzZGlvX2FsaWduX3NpemUocnR3c2Rpby1cdTAwM2VzZGlvX2Z1bmMsIG9yaWdfbGVuKTtcbiYjNDM7XHRcdHdyaXRlX3NpemUgPSB0eHNpemU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAod3JpdGVfc2l6ZSBcdTAwM2Ugb3JpZ19sZW4pIHtcbiYjNDM7XHRcdHVuc2lnbmVkIGludCBwYWRkaW5nID0gd3JpdGVfc2l6ZSAtIG9yaWdfbGVuO1xuIFxuLVx0dHhzaXplID0gc2Rpb19hbGlnbl9zaXplKHJ0d3NkaW8tXHUwMDNlc2Rpb19mdW5jLCBza2ItXHUwMDNlbGVuKTtcbiYjNDM7XHRcdGlmIChza2JfdGFpbHJvb20oc2tiKSBcdTAwM2MgcGFkZGluZykge1xuJiM0MztcdFx0XHRyZXQgPSBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBwYWRkaW5nIC0gc2tiX3RhaWxyb29tKHNrYiksXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHNrYl9wdXRfemVybyhza2IsIHBhZGRpbmcpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0dHhhZGRyID0gcnR3X3NkaW9fZ2V0X3R4X2FkZHIocnR3ZGV2LCB0eHNpemUsIHF1ZXVlKTtcbiYjNDM7XHRpZiAoIXR4YWRkcikge1xuJiM0MztcdFx0cmV0ID0gLUVJTlZBTDtcbiYjNDM7XHRcdGdvdG8gb3V0X3RyaW07XG4mIzQzO1x0fVxuIFxuIFx0cmV0ID0gcnR3X3NkaW9fY2hlY2tfZnJlZV90eHBnKHJ0d2RldiwgcXVldWUsIHR4c2l6ZSk7XG4gXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0Z290byBvdXRfdHJpbTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJ0bDg3MjNicykge1xuJiM0MztcdFx0cmV0ID0gcnR3X3NkaW9fODcyM2JzX3dhaXRfdHhfb3F0KHJ0d2Rldik7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRnb3RvIG91dF90cmltO1xuJiM0MztcdH1cbiBcbiBcdGlmICghSVNfQUxJR05FRCgodW5zaWduZWQgbG9uZylza2ItXHUwMDNlZGF0YSwgUlRXX1NESU9fREFUQV9QVFJfQUxJR04pKVxuIFx0XHRydHdfd2FybihydHdkZXYsIFwmIzM0O0dvdCB1bmFsaWduZWQgU0tCIGluICVzKCkgZm9yIHF1ZXVlICV1XFxuXCYjMzQ7LFxuIFx0XHRcdCBfX2Z1bmNfXywgcXVldWUpO1xuIFxuIFx0YnVzX2NsYWltID0gcnR3X3NkaW9fYnVzX2NsYWltX25lZWRlZChydHdzZGlvKTtcbi1cbiBcdGlmIChidXNfY2xhaW0pXG4gXHRcdHNkaW9fY2xhaW1faG9zdChydHdzZGlvLVx1MDAzZXNkaW9fZnVuYyk7XG4tXG4tXHRyZXQgPSBzZGlvX21lbWNweV90b2lvKHJ0d3NkaW8tXHUwMDNlc2Rpb19mdW5jLCB0eGFkZHIsIHNrYi1cdTAwM2VkYXRhLCB0eHNpemUpO1xuLVxuJiM0MztcdHJldCA9IHNkaW9fbWVtY3B5X3RvaW8ocnR3c2Rpby1cdTAwM2VzZGlvX2Z1bmMsIHR4YWRkciwgc2tiLVx1MDAzZWRhdGEsXG4mIzQzO1x0XHRcdCAgICAgICB3cml0ZV9zaXplKTtcbiBcdGlmIChidXNfY2xhaW0pXG4gXHRcdHNkaW9fcmVsZWFzZV9ob3N0KHJ0d3NkaW8tXHUwMDNlc2Rpb19mdW5jKTtcbiBcbi1cdGlmIChyZXQpXG4mIzQzO1x0aWYgKHJldCkge1xuIFx0XHRydHdfd2FybihydHdkZXYsXG4gXHRcdFx0IFwmIzM0O0ZhaWxlZCB0byB3cml0ZSAlenUgYnl0ZShzKSB0byBTRElPIHBvcnQgMHglMDh4XCYjMzQ7LFxuLVx0XHRcdCB0eHNpemUsIHR4YWRkcik7XG4mIzQzO1x0XHRcdCB3cml0ZV9zaXplLCB0eGFkZHIpO1xuJiM0MztcdH0gZWxzZSBpZiAocnRsODcyM2JzKSB7XG4mIzQzO1x0XHRwYWdlcyA9IERJVl9ST1VORF9VUCh0eHNpemUsIHJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZXBhZ2Vfc2l6ZSk7XG4mIzQzO1x0XHRydHdfc2Rpb184NzIzYnNfY29uc3VtZV90eHBnKHJ0d2RldiwgcXVldWUsIHBhZ2VzKTtcbiYjNDM7XHR9XG4gXG4mIzQzO291dF90cmltOlxuJiM0MztcdGlmICh3cml0ZV9zaXplIFx1MDAzZSBvcmlnX2xlbilcbiYjNDM7XHRcdHNrYl90cmltKHNrYiwgb3JpZ19sZW4pO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtNjc3LDcgJiM0Mzs4NzcsMTEgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9faW5pdChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIHtcbiBcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbiBcbi1cdHJ0d3NkaW8tXHUwMDNlaXJxX21hc2sgPSBSRUdfU0RJT19ISU1SX1JYX1JFUVVFU1QgfCBSRUdfU0RJT19ISU1SX0NQV00xO1xuJiM0MztcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpXG4mIzQzO1x0XHRydHdzZGlvLVx1MDAzZWlycV9tYXNrID0gUkVHX1NESU9fSElNUl9SWF9SRVFVRVNUO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHJ0d3NkaW8tXHUwMDNlaXJxX21hc2sgPSBSRUdfU0RJT19ISU1SX1JYX1JFUVVFU1QgfFxuJiM0MztcdFx0XHRcdCAgICBSRUdfU0RJT19ISU1SX0NQV00xO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBydHdfc2Rpb19lbmFibGVfcnhfYWdncmVnYXRpb24oc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbkBAIC02ODUsNiAmIzQzOzg4OSw3IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2VuYWJsZV9yeF9hZ2dyZWdhdGlvbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIFx0dTggc2l6ZSwgdGltZW91dDtcbiBcbiBcdHN3aXRjaCAocnR3ZGV2LVx1MDAzZWNoaXAtXHUwMDNlaWQpIHtcbiYjNDM7XHRjYXNlIFJUV19DSElQX1RZUEVfODcyM0I6XG4gXHRjYXNlIFJUV19DSElQX1RZUEVfODcwM0I6XG4gXHRjYXNlIFJUV19DSElQX1RZUEVfODgyMUE6XG4gXHRjYXNlIFJUV19DSElQX1RZUEVfODgxMkE6XG5AQCAtNzEyLDYgJiM0Mzs5MTcsOCBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19lbmFibGVfcnhfYWdncmVnYXRpb24oc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiBcdFx0ICAgIEZJRUxEX1BSRVAoQklUX0RNQV9BR0dfVE9fVjEsIHRpbWVvdXQpKTtcbiBcbiBcdHJ0d193cml0ZThfc2V0KHJ0d2RldiwgUkVHX1JYRE1BX01PREUsIEJJVF9ETUFfTU9ERSk7XG4mIzQzO1x0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSlcbiYjNDM7XHRcdHJ0d193cml0ZThfbWFzayhydHdkZXYsIFJFR19SWERNQV9NT0RFLCBCSVRfRE1BX0JVUlNUX0NOVCwgMHgzKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcnR3X3NkaW9fZW5hYmxlX2ludGVycnVwdChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuQEAgLTc0OSw5ICYjNDM7OTU2LDUwIEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9fc2V0dXAoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgcnR3X3NkaW9fODcyM2JzX2NoZWNrX3JxcG4oc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBydHdfY2hpcF9pbmZvICpjaGlwID0gcnR3ZGV2LVx1MDAzZWNoaXA7XG4mIzQzO1x0c3RydWN0IHJ0d19maWZvX2NvbmYgKmZpZm8gPSBcdTAwMjZydHdkZXYtXHUwMDNlZmlmbztcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcnR3X3BhZ2VfdGFibGUgKnBnX3RibDtcbiYjNDM7XHR1MTYgcmVzZXJ2ZWRfbnVtO1xuJiM0MztcdHUzMiBmcmVlX3R4cGc7XG4mIzQzO1x0dTE2IHB1YnFfbnVtO1xuJiM0MztcbiYjNDM7XHRmcmVlX3R4cGcgPSBydHdfcmVhZDMyKHJ0d2RldiwgUkVHX1NESU9fRlJFRV9UWFBHKTtcbiYjNDM7XHRpZiAoZnJlZV90eHBnIHx8ICFmaWZvLVx1MDAzZWFjcV9wZ19udW0pXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHBnX3RibCA9IFx1MDAyNmNoaXAtXHUwMDNlcGFnZV90YWJsZVswXTtcbiYjNDM7XHRyZXNlcnZlZF9udW0gPSBwZ190YmwtXHUwMDNlaHFfbnVtICYjNDM7IHBnX3RibC1cdTAwM2VscV9udW0gJiM0MzsgcGdfdGJsLVx1MDAzZW5xX251bSAmIzQzO1xuJiM0MztcdFx0ICAgICAgIHBnX3RibC1cdTAwM2VleHFfbnVtICYjNDM7IHBnX3RibC1cdTAwM2VnYXBxX251bTtcbiYjNDM7XHRpZiAoZmlmby1cdTAwM2VhY3FfcGdfbnVtIFx1MDAzYz0gcmVzZXJ2ZWRfbnVtKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRwdWJxX251bSA9IGZpZm8tXHUwMDNlYWNxX3BnX251bSAtIHJlc2VydmVkX251bTtcbiYjNDM7XHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19SUVBOX05QUSxcbiYjNDM7XHRcdCAgICBCSVRfUlFQTl9ORShwZ190YmwtXHUwMDNlbnFfbnVtLCBwZ190YmwtXHUwMDNlZXhxX251bSkpO1xuJiM0MztcdHJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1JRUE4sXG4mIzQzO1x0XHQgICAgQklUX1JRUE5fSExQKHBnX3RibC1cdTAwM2VocV9udW0sIHBnX3RibC1cdTAwM2VscV9udW0sIHB1YnFfbnVtKSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBydHdfc2Rpb19zdGFydChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIHtcbiYjNDM7XHR1MzIgY2xlYXI7XG4mIzQzO1xuJiM0MztcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpIHtcbiYjNDM7XHRcdHJ0d19zZGlvXzg3MjNic19jaGVja19ycXBuKHJ0d2Rldik7XG4mIzQzO1x0XHRydHdfc2Rpb184NzIzYnNfaW5pdF9mcmVlX3R4cGcocnR3ZGV2KTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cnR3X3NkaW9fZW5hYmxlX3J4X2FnZ3JlZ2F0aW9uKHJ0d2Rldik7XG4mIzQzO1xuJiM0MztcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpIHtcbiYjNDM7XHRcdGNsZWFyID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19TRElPX0hJU1IpIFx1MDAyNlxuJiM0MztcdFx0XHRSVFdfU0RJT19ISVNSX0NMRUFSX01BU0s7XG4mIzQzO1x0XHRpZiAoY2xlYXIpXG4mIzQzO1x0XHRcdHJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1NESU9fSElTUiwgY2xlYXIpO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRydHdfc2Rpb19lbmFibGVfaW50ZXJydXB0KHJ0d2Rldik7XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC04MTUsNyAmIzQzOzEwNjMsMTEgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9fdHhfa2lja19vZmYoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiB7XG4gXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4gXG4tXHRxdWV1ZV93b3JrKHJ0d3NkaW8tXHUwMDNldHh3cSwgXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9oYW5kbGVyX2RhdGEtXHUwMDNld29yayk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBIHJldHJ5IG1heSBhbHJlYWR5IGJlIHBlbmRpbmcgd2l0aCBhIGRlbGF5OyByZS1hcm0gaXQgc28gYSBuZXdseVxuJiM0MztcdCAqIHF1ZXVlZCBmcmFtZSBpcyBub3QgaGVsZCBiYWNrIGJ5IGl0LlxuJiM0MztcdCAqL1xuJiM0MztcdG1vZF9kZWxheWVkX3dvcmsocnR3c2Rpby1cdTAwM2V0eHdxLCBcdTAwMjZydHdzZGlvLVx1MDAzZXR4X2hhbmRsZXJfZGF0YS1cdTAwM2V3b3JrLCAwKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcnR3X3NkaW9fbGlua19wcyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBib29sIGVudGVyKVxuQEAgLTgzMSw2ICYjNDM7MTA4Myw4IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2ludGVyZmFjZV9jZmcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiBcbiBcdHZhbCA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19UWF9DVFJMKTtcbiBcdHZhbCBcdTAwMjY9IDB4ZmZmODtcbiYjNDM7XHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKVxuJiM0MztcdFx0dmFsIHw9IEJJVF9TRElPX1RYX0NUUkxfQUxXQVlTX1JFQ09HTklaRTtcbiBcdHJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1NESU9fVFhfQ1RSTCwgdmFsKTtcbiB9XG4gXG5AQCAtOTM3LDYgJiM0MzsxMTkxLDE5IEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9fdHhfd3JpdGUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcbiBcbiBcdHNrYl9xdWV1ZV90YWlsKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfcXVldWVbcXVldWVdLCBza2IpO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogQmFjay1wcmVzc3VyZSBvbiB0aGUgZGF0YSBBQ3MgKEJLL0JFL1ZJL1ZPKTogb25jZSB0aGUgRklGTyBmaWxscyBwYXN0XG4mIzQzO1x0ICogdGhlIGhpZ2ggd2F0ZXJtYXJrLCBzdG9wIHRoZSBjb3JyZXNwb25kaW5nIG1hYzgwMjExIHF1ZXVlIHNvIGl0IHN0b3BzXG4mIzQzO1x0ICogaGFuZGluZyB1cyBmcmFtZXMsIGJvdW5kaW5nIHRoZSBxdWV1ZWluZyBsYXRlbmN5LiBSZXN1bWVkIGZyb20gdGhlIFRYXG4mIzQzO1x0ICogZHJhaW4gcGF0aCBvbmNlIHRoZSBGSUZPIGRyYWlucyBiZWxvdyB0aGUgbG93IHdhdGVybWFyay5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpIFx1MDAyNlx1MDAyNiBxdWV1ZSBcdTAwM2MgUlRXX1RYX1FVRVVFX0JDTiBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIXJ0d3NkaW8tXHUwMDNlcXVldWVfc3RvcHBlZFtxdWV1ZV0gXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHNrYl9xdWV1ZV9sZW4oXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtxdWV1ZV0pIFx1MDAzZT0gUlRXX1NESU9fVFhfRklGT19ISVdBVEVSKSB7XG4mIzQzO1x0XHRydHdzZGlvLVx1MDAzZXF1ZXVlX3N0b3BwZWRbcXVldWVdID0gdHJ1ZTtcbiYjNDM7XHRcdGllZWU4MDIxMV9zdG9wX3F1ZXVlKHJ0d2Rldi1cdTAwM2Vodywgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMTA5NSw2ICYjNDM7MTM2MiwxNCBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19oYW5kbGVfaW50ZXJydXB0KHN0cnVjdCBzZGlvX2Z1bmMgKnNkaW9fZnVuYylcbiBcdFx0cnR3X3NkaW9fcnhfaXNyKHJ0d2Rldik7XG4gXHR9XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBSVEw4NzIzQlMga2VlcHMgcmFpc2luZyB0aGUgaW50ZXJydXB0IGFmdGVyIHJlc3VtZSBpZiB1bmRlZmluZWRcbiYjNDM7XHQgKiBzdGF0dXMgYml0cyBhcmUgd3JpdHRlbiBiYWNrLCBzbyBhY2tub3dsZWRnZSBvbmx5IHRoZSBiaXRzIHRoYXQgYXJlXG4mIzQzO1x0ICogYm90aCBkZWZpbmVkIGFuZCB1bm1hc2tlZC4gT3RoZXIgY2hpcHMga2VlcCB0aGUgZXhpc3RpbmcgYmVoYXZpb3VyLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpXG4mIzQzO1x0XHRoaXNyIFx1MDAyNj0gcnR3c2Rpby1cdTAwM2VpcnFfbWFzayBcdTAwMjYgUlRXX1NESU9fSElTUl9DTEVBUl9NQVNLO1xuJiM0MztcbiBcdHJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1NESU9fSElTUiwgaGlzcik7XG4gXG4gXHRydHdzZGlvLVx1MDAzZWlycV90aHJlYWQgPSBOVUxMO1xuQEAgLTEyMzEsNDMgJiM0MzsxNTA2LDkyIEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2luZGljYXRlX3R4X3N0YXR1cyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuIFx0aWVlZTgwMjExX3R4X3N0YXR1c19pcnFzYWZlKGh3LCBza2IpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4tXHRcdFx0XHQgICAgICBlbnVtIHJ0d190eF9xdWV1ZV90eXBlIHF1ZXVlKVxuJiM0MzsvKlxuJiM0MzsgKiBTZW5kIG9uZSBmcmFtZSBmcm9tIEBxdWV1ZS4gUmV0dXJucyAxIHdoZW4gYSBmcmFtZSB3YXMgd3JpdHRlbiwgMCB3aGVuIHRoZVxuJiM0MzsgKiBxdWV1ZSB3YXMgZW1wdHkgYW5kIGEgbmVnYXRpdmUgZXJybm8gd2hlbiB0aGUgd3JpdGUgZmFpbGVkLCBpbiB3aGljaCBjYXNlXG4mIzQzOyAqIHRoZSBmcmFtZSBpcyBwdXQgYmFjayBhdCB0aGUgaGVhZCBvZiB0aGUgcXVldWUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcbiYjNDM7XHRcdFx0XHQgICAgIGVudW0gcnR3X3R4X3F1ZXVlX3R5cGUgcXVldWUpXG4ge1xuIFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiYjNDM7XHR1MTYgcV9tYXA7XG4gXHRpbnQgcmV0O1xuIFxuIFx0c2tiID0gc2tiX2RlcXVldWUoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtxdWV1ZV0pO1xuIFx0aWYgKCFza2IpXG4tXHRcdHJldHVybjtcbiYjNDM7XHRcdHJldHVybiAwO1xuIFxuJiM0MztcdHFfbWFwID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7XG4gXHRyZXQgPSBydHdfc2Rpb193cml0ZV9wb3J0KHJ0d2Rldiwgc2tiLCBxdWV1ZSk7XG4gXHRpZiAocmV0KSB7XG4gXHRcdHNrYl9xdWV1ZV9oZWFkKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfcXVldWVbcXVldWVdLCBza2IpO1xuLVx0XHRyZXR1cm47XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFxuIFx0cnR3X3NkaW9faW5kaWNhdGVfdHhfc3RhdHVzKHJ0d2Rldiwgc2tiKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSBcdTAwMjZcdTAwMjYgcXVldWUgXHUwMDNjIFJUV19UWF9RVUVVRV9CQ04gXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHJ0d3NkaW8tXHUwMDNlcXVldWVfc3RvcHBlZFtxdWV1ZV0gXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHNrYl9xdWV1ZV9sZW4oXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtxdWV1ZV0pIFx1MDAzYz1cbiYjNDM7XHQgICAgUlRXX1NESU9fVFhfRklGT19MT1dBVEVSKSB7XG4mIzQzO1x0XHRydHdzZGlvLVx1MDAzZXF1ZXVlX3N0b3BwZWRbcXVldWVdID0gZmFsc2U7XG4mIzQzO1x0XHRpZWVlODAyMTFfd2FrZV9xdWV1ZShydHdkZXYtXHUwMDNlaHcsIHFfbWFwKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAxO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBydHdfc2Rpb190eF9oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4gXHRzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhICp3b3JrX2RhdGEgPVxuLVx0XHRjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJ0d19zZGlvX3dvcmtfZGF0YSwgd29yayk7XG4mIzQzO1x0XHRjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLCBzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhLFxuJiM0MztcdFx0XHQgICAgIHdvcmspO1xuIFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvO1xuIFx0c3RydWN0IHJ0d19kZXYgKnJ0d2Rldjtcbi1cdGludCBsaW1pdCwgcXVldWU7XG4mIzQzO1x0aW50IGxpbWl0LCBxdWV1ZSwgcmV0O1xuJiM0MztcdGJvb2wgcnRsODcyM2JzO1xuIFxuIFx0cnR3ZGV2ID0gd29ya19kYXRhLVx1MDAzZXJ0d2RldjtcbiBcdHJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4mIzQzO1x0cnRsODcyM2JzID0gcnR3X2lzXzg3MjNicyhydHdkZXYpO1xuIFxuIFx0aWYgKCFydHdfZndfZmVhdHVyZV9jaGVjayhcdTAwMjZydHdkZXYtXHUwMDNlZncsIEZXX0ZFQVRVUkVfVFhfV0FLRSkpXG4gXHRcdHJ0d19zZGlvX2RlZXBfcHNfbGVhdmUocnR3ZGV2KTtcbiBcbiBcdGZvciAocXVldWUgPSBSVEtfTUFYX1RYX1FVRVVFX05VTSAtIDE7IHF1ZXVlIFx1MDAzZT0gMDsgcXVldWUtLSkge1xuIFx0XHRmb3IgKGxpbWl0ID0gMDsgbGltaXQgXHUwMDNjIDEwMDA7IGxpbWl0JiM0MzsmIzQzOykge1xuLVx0XHRcdHJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWUocnR3ZGV2LCBxdWV1ZSk7XG4mIzQzO1x0XHRcdHJldCA9IHJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWUocnR3ZGV2LCBxdWV1ZSk7XG4mIzQzO1x0XHRcdGlmIChyZXQgPT0gMClcbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbiYjNDM7XHRcdFx0XHQvKlxuJiM0MztcdFx0XHRcdCAqIEEgcGFnZSBzaG9ydGFnZSBpcyB0cmFuc2llbnQ6IGxlYXZlIHRoZVxuJiM0MztcdFx0XHRcdCAqIGZyYW1lIHF1ZXVlZCBhbmQgY29tZSBiYWNrIHNob3J0bHkgaW5zdGVhZFxuJiM0MztcdFx0XHRcdCAqIG9mIHN0YWxsaW5nIHRoaXMgQUMgdW50aWwgc29tZXRoaW5nIGVsc2VcbiYjNDM7XHRcdFx0XHQgKiBraWNrcyB0aGUgd29ya2VyLlxuJiM0MztcdFx0XHRcdCAqL1xuJiM0MztcdFx0XHRcdGlmIChydGw4NzIzYnMgXHUwMDI2XHUwMDI2IHJldCA9PSAtRUJVU1kpIHtcbiYjNDM7XHRcdFx0XHRcdHF1ZXVlX2RlbGF5ZWRfd29yayhydHdzZGlvLVx1MDAzZXR4d3EsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgXHUwMDI2d29ya19kYXRhLVx1MDAzZXdvcmssXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgUlRXX1NESU9fVFhfUkVUUllfREVMQVkpO1xuJiM0MztcdFx0XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0XHRcdH1cbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogUmVzdGFydCBmcm9tIHRoZSBoaWdoZXN0IHByaW9yaXR5IHF1ZXVlIGFmdGVyIGV2ZXJ5XG4mIzQzO1x0XHRcdCAqIG1hbmFnZW1lbnQgZnJhbWUgc28gdGhlIGpvaW4gc2VxdWVuY2UgaXMgbm90IGhlbGQgdXBcbiYjNDM7XHRcdFx0ICogYmVoaW5kIGEgZGF0YSBiYWNrbG9nLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0aWYgKHJ0bDg3MjNicyBcdTAwMjZcdTAwMjYgcXVldWUgPT0gUlRXX1RYX1FVRVVFX01HTVQpIHtcbiYjNDM7XHRcdFx0XHRxdWV1ZV9kZWxheWVkX3dvcmsocnR3c2Rpby1cdTAwM2V0eHdxLFxuJiM0MztcdFx0XHRcdFx0XHQgICBcdTAwMjZ3b3JrX2RhdGEtXHUwMDNld29yaywgMCk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0XHR9XG4gXG4gXHRcdFx0aWYgKHNrYl9xdWV1ZV9lbXB0eShcdTAwMjZydHdzZGlvLVx1MDAzZXR4X3F1ZXVlW3F1ZXVlXSkpXG4gXHRcdFx0XHRicmVhaztcbkBAIC0xMjk0LDE0ICYjNDM7MTYxOCwxNiBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX2luaXRfdHgoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBSVEtfTUFYX1RYX1FVRVVFX05VTTsgaSYjNDM7JiM0MzspXG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgUlRLX01BWF9UWF9RVUVVRV9OVU07IGkmIzQzOyYjNDM7KSB7XG4gXHRcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtpXSk7XG4mIzQzO1x0XHRydHdzZGlvLVx1MDAzZXF1ZXVlX3N0b3BwZWRbaV0gPSBmYWxzZTtcbiYjNDM7XHR9XG4gXHRydHdzZGlvLVx1MDAzZXR4X2hhbmRsZXJfZGF0YSA9IGttYWxsb2Nfb2JqKCpydHdzZGlvLVx1MDAzZXR4X2hhbmRsZXJfZGF0YSk7XG4gXHRpZiAoIXJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhKVxuIFx0XHRnb3RvIGVycl9kZXN0cm95X3dxO1xuIFxuIFx0cnR3c2Rpby1cdTAwM2V0eF9oYW5kbGVyX2RhdGEtXHUwMDNlcnR3ZGV2ID0gcnR3ZGV2O1xuLVx0SU5JVF9XT1JLKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhLVx1MDAzZXdvcmssIHJ0d19zZGlvX3R4X2hhbmRsZXIpO1xuJiM0MztcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhLVx1MDAzZXdvcmssIHJ0d19zZGlvX3R4X2hhbmRsZXIpO1xuIFxuIFx0cmV0dXJuIDA7XG4gXG5AQCAtMTMxNSw2ICYjNDM7MTY0MSw3IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2RlaW5pdF90eChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuIFx0aW50IGk7XG4gXG4mIzQzO1x0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhLVx1MDAzZXdvcmspO1xuIFx0ZGVzdHJveV93b3JrcXVldWUocnR3c2Rpby1cdTAwM2V0eHdxKTtcbiBcdGtmcmVlKHJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oXG5pbmRleCA0NTdlOGIwMjM4MGU1Li4yZjFiNjdmNGJiYzdjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oXG5AQCAtMjIsNiAmIzQzOzIyLDcgQEBcbiBcbiAvKiBTRElPIFR4IENvbnRyb2wgKi9cbiAjZGVmaW5lIFJFR19TRElPX1RYX0NUUkxcdFx0XHQoU0RJT19MT0NBTF9PRkZTRVQgJiM0MzsgMHgwMDAwKVxuJiM0MzsjZGVmaW5lIEJJVF9TRElPX1RYX0NUUkxfQUxXQVlTX1JFQ09HTklaRVx0QklUKDQpXG4gXG4gLypTRElPIHN0YXR1cyB0aW1lb3V0Ki9cbiAjZGVmaW5lIFJFR19TRElPX1RJTUVPVVRcdFx0XHQoU0RJT19MT0NBTF9PRkZTRVQgJiM0MzsgMHgwMDAyKVxuQEAgLTc3LDYgJiM0Mzs3OCwxNCBAQFxuIC8qIHRoZSBmb2xsb3dpbmcgdHdvIGFyZSBSVEw4MTg4IFNESU8gU3BlY2lmaWMgKi9cbiAjZGVmaW5lIFJFR19TRElPX0hJU1JfTUNVX0VSUlx0XHRcdEJJVCgyOClcbiAjZGVmaW5lIFJFR19TRElPX0hJU1JfVFNGX0JJVDMyX1RPR0dMRVx0XHRCSVQoMjkpXG4mIzQzOyNkZWZpbmUgUlRXX1NESU9fSElTUl9DTEVBUl9NQVNLXHRcdFxcXG4mIzQzO1x0KFJFR19TRElPX0hJU1JfVFhFUlIgfCBSRUdfU0RJT19ISVNSX1JYRVJSIHwgXFxcbiYjNDM7XHQgUkVHX1NESU9fSElTUl9UWEZPVlcgfCBSRUdfU0RJT19ISVNSX1JYRk9WVyB8IFxcXG4mIzQzO1x0IFJFR19TRElPX0hJU1JfVFhCQ05PSyB8IFJFR19TRElPX0hJU1JfVFhCQ05FUlIgfCBcXFxuJiM0MztcdCBSRUdfU0RJT19ISVNSX0MySENNRCB8IFJFR19TRElPX0hJU1JfQ1BXTTEgfCBcXFxuJiM0MztcdCBSRUdfU0RJT19ISVNSX0NQV00yIHwgUkVHX1NESU9fSElTUl9IU0lTUl9JTkQgfCBcXFxuJiM0MztcdCBSRUdfU0RJT19ISVNSX0dUSU5UM19JTkQgfCBSRUdfU0RJT19ISVNSX0dUSU5UNF9JTkQgfCBcXFxuJiM0MztcdCBSRUdfU0RJT19ISVNSX1BTVElNRU9VVCB8IFJFR19TRElPX0hJU1JfT0NQSU5UKVxuIFxuIC8qIEhDSSBDdXJyZW50IFBvd2VyIE1vZGUgKi9cbiAjZGVmaW5lIFJFR19TRElPX0hDUFdNXHRcdFx0XHQoU0RJT19MT0NBTF9PRkZTRVQgJiM0MzsgMHgwMDE5KVxuQEAgLTg2LDYgJiM0Mzs5NSwxMCBAQFxuICNkZWZpbmUgUkVHX1NESU9fT1FUX0ZSRUVfUEdcdFx0XHQoU0RJT19MT0NBTF9PRkZTRVQgJiM0MzsgMHgwMDFFKVxuIC8qIEZyZWUgVHggQnVmZmVyIFBhZ2UgKi9cbiAjZGVmaW5lIFJFR19TRElPX0ZSRUVfVFhQR1x0XHRcdChTRElPX0xPQ0FMX09GRlNFVCAmIzQzOyAweDAwMjApXG4mIzQzOyNkZWZpbmUgQklUX0ZSRUVfVFhQR19ISUdIXHRcdFx0R0VOTUFTSyg3LCAwKVxuJiM0MzsjZGVmaW5lIEJJVF9GUkVFX1RYUEdfTk9STUFMXHRcdFx0R0VOTUFTSygxNSwgOClcbiYjNDM7I2RlZmluZSBCSVRfRlJFRV9UWFBHX0xPV1x0XHRcdEdFTk1BU0soMjMsIDE2KVxuJiM0MzsjZGVmaW5lIEJJVF9GUkVFX1RYUEdfUFVCXHRcdFx0R0VOTUFTSygzMSwgMjQpXG4gLyogSENJIEN1cnJlbnQgUG93ZXIgTW9kZSAxICovXG4gI2RlZmluZSBSRUdfU0RJT19IQ1BXTTFcdFx0XHRcdChTRElPX0xPQ0FMX09GRlNFVCAmIzQzOyAweDAwMjQpXG4gLyogSENJIEN1cnJlbnQgUG93ZXIgTW9kZSAyICovXG5AQCAtMTQzLDcgJiM0MzsxNTYsNyBAQCBzdHJ1Y3QgcnR3X3NkaW9fdHhfZGF0YSB7XG4gfTtcbiBcbiBzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhIHtcbi1cdHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrO1xuJiM0MztcdHN0cnVjdCBkZWxheWVkX3dvcmsgd29yaztcbiBcdHN0cnVjdCBydHdfZGV2ICpydHdkZXY7XG4gfTtcbiBcbkBAIC0xNTksNiAmIzQzOzE3MiwxMyBAQCBzdHJ1Y3QgcnR3X3NkaW8ge1xuIFx0c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnR4d3E7XG4gXHRzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhICp0eF9oYW5kbGVyX2RhdGE7XG4gXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHR4X3F1ZXVlW1JUS19NQVhfVFhfUVVFVUVfTlVNXTtcbiYjNDM7XHRib29sIHF1ZXVlX3N0b3BwZWRbUlRLX01BWF9UWF9RVUVVRV9OVU1dO1xuJiM0MztcbiYjNDM7XHRhdG9taWNfdCBmcmVlX3BnX2hpZ2g7XG4mIzQzO1x0YXRvbWljX3QgZnJlZV9wZ19ub3JtYWw7XG4mIzQzO1x0YXRvbWljX3QgZnJlZV9wZ19sb3c7XG4mIzQzO1x0YXRvbWljX3QgZnJlZV9wZ19wdWI7XG4mIzQzO1x0YXRvbWljX3QgdHhfb3F0X2ZyZWU7XG4gfTtcbiBcbiBleHRlcm4gY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgcnR3X3NkaW9fcG1fb3BzO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvdHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvdHguY1xuaW5kZXggODc4NmJiYjQyMWMyYi4uNGUxMTBhNDU3ZTcxZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvdHguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC90eC5jXG5AQCAtMjA4LDggJiM0MzsyMDgsOSBAQCB2b2lkIHJ0d190eF9yZXBvcnRfZW5xdWV1ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBzbilcbiBcdF9fc2tiX3F1ZXVlX3RhaWwoXHUwMDI2dHhfcmVwb3J0LVx1MDAzZXF1ZXVlLCBza2IpO1xuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ0eF9yZXBvcnQtXHUwMDNlcV9sb2NrLCBmbGFncyk7XG4gXG4tXHRpZiAocnR3ZGV2LVx1MDAzZWNoaXAtXHUwMDNlaWQgPT0gUlRXX0NISVBfVFlQRV84NzIzRCBcdTAwMjZcdTAwMjZcbi1cdCAgICBydHdkZXYtXHUwMDNlaGNpLnR5cGUgPT0gUlRXX0hDSV9UWVBFX1VTQilcbiYjNDM7XHRpZiAoKHJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZWlkID09IFJUV19DSElQX1RZUEVfODcyM0QgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICBydHdkZXYtXHUwMDNlaGNpLnR5cGUgPT0gUlRXX0hDSV9UWVBFX1VTQikgfHxcbiYjNDM7XHQgICAgcnR3X2lzXzg3MjNicyhydHdkZXYpKVxuIFx0XHR0aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcygyNTAwKTtcbiBcbiBcdG1vZF90aW1lcihcdTAwMjZ0eF9yZXBvcnQtXHUwMDNlcHVyZ2VfdGltZXIsIGppZmZpZXMgJiM0MzsgdGltZW91dCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6NTE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGV4Y2x1c2l2ZWx5IGFkZHMgc3VwcG9ydCBhbmQgZml4ZXMgZm9yIHRoZSBSZWFsdGVrIFJUTDg3MjNCUyBTRElPIFdpRmkgY2hpcC4gU0RJTyBkZXZpY2VzIHJlcXVpcmUgcGh5c2ljYWwgaGFyZHdhcmUgb3Igc3BlY2lmaWMgUUVNVSBtYWNoaW5lIGVtdWxhdGlvbiB3aGljaCBpcyBub3QgYXZhaWxhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiBUaGVyZSBpcyBubyBzb2Z0d2FyZSBTRElPIGVtdWxhdGlvbiBmcmFtZXdvcmsgKGxpa2UgZHVtbXlfaGNkIGZvciBVU0IpIHRvIHJlYWNoIHRoZXNlIGNvZGUgcGF0aHMgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTQxODI1NjE3ODQ0ZWE1MzkxZjA1Y2U0NDhmODY5Mzk1YjBlMGNhOApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDExIDA5OjUxOjQ5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9mdy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9mdy5jCmluZGV4IDk0NWZlZGNkMzc1YjYuLmM4NWMwZTNlNjBhOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvZncuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2Z3LmMKQEAgLTMxNyw2ICYjNDM7MzE3LDE1IEBAIHZvaWQgcnR3X2Z3X2MyaF9jbWRfaGFuZGxlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHN0cnVjdCBza19idWZmICpza2IpCiAJY2FzZSBDMkhfQ0NYX1RYX1JQVDoKIAkJcnR3X3R4X3JlcG9ydF9oYW5kbGUocnR3ZGV2LCBza2IsIEMySF9DQ1hfVFhfUlBUKTsKIAkJYnJlYWs7CiYjNDM7CWNhc2UgQzJIX1ZFTkRPUl9UWF9SUFQ6CiYjNDM7CWNhc2UgQzJIX1dMQU5fUkZPTjoKJiM0MzsJCS8qCiYjNDM7CQkgKiBUaGUgUlRMODcyM0JTIGZpcm13YXJlIHJlcG9ydHMgbWFuYWdlbWVudCBUWCB0aHJvdWdoIHRoZXNlCiYjNDM7CQkgKiB0d28gZXZlbnRzIGluc3RlYWQsIHVzaW5nIHRoZSBzYW1lIHBheWxvYWQgbGF5b3V0LgomIzQzOwkJICovCiYjNDM7CQlpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKQomIzQzOwkJCXJ0d190eF9yZXBvcnRfaGFuZGxlKHJ0d2Rldiwgc2tiLCBDMkhfQ0NYX1RYX1JQVCk7CiYjNDM7CQlicmVhazsKIAljYXNlIEMySF9CVF9JTkZPOgogCQlydHdfY29leF9idF9pbmZvX25vdGlmeShydHdkZXYsIGMyaC0mZ3Q7cGF5bG9hZCwgbGVuKTsKIAkJYnJlYWs7CkBAIC0zNjUsNiAmIzQzOzM3NCwxNyBAQCB2b2lkIHJ0d19md19jMmhfY21kX3J4X2lycXNhZmUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTMyIHBrdF9vZmZzZXQsCiAJCXJ0d19jb2V4X2luZm9fcmVzcG9uc2UocnR3ZGV2LCBza2IpOwogCQlicmVhazsKIAljYXNlIEMySF9XTEFOX1JGT046CiYjNDM7CQkvKgomIzQzOwkJICogT24gODcyM0JTIFNESU8gd2l0aCB2NDEgZmlybXdhcmUsIEMySCAweDMyIGNhcnJpZXMgYSBzY2FuIFRYCiYjNDM7CQkgKiByZXBvcnQsIG5vdCBhIFdMQU5fUkZPTiBldmVudDogZGVmZXIgaXQgdG8KJiM0MzsJCSAqIHJ0d19md19jMmhfY21kX2hhbmRsZSgpLgomIzQzOwkJICovCiYjNDM7CQlpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKSB7CiYjNDM7CQkJKigodTMyICopc2tiLSZndDtjYikgPSBwa3Rfb2Zmc2V0OwomIzQzOwkJCXNrYl9xdWV1ZV90YWlsKCZhbXA7cnR3ZGV2LSZndDtjMmhfcXVldWUsIHNrYik7CiYjNDM7CQkJaWVlZTgwMjExX3F1ZXVlX3dvcmsocnR3ZGV2LSZndDtodywgJmFtcDtydHdkZXYtJmd0O2MyaF93b3JrKTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KIAkJY29tcGxldGUoJmFtcDtydHdkZXYtJmd0O2xwc19sZWF2ZV9jaGVjayk7CiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9mdy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9mdy5oCmluZGV4IDQ4YWQ5Y2VhYjZlYTEuLmJkZGE3OGRjNjQ2MmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvZncuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2Z3LmgKQEAgLTU0LDYgJiM0Mzs1NCwxMSBAQCBlbnVtIHJ0d19jMmhfY21kX2lkIHsKIAlDMkhfQlRfTVBfSU5GTyA9IDB4MGIsCiAJQzJIX0JUX0hJRF9JTkZPID0gMHg0NSwKIAlDMkhfUkFfUlBUID0gMHgwYywKJiM0MzsJLyoKJiM0MzsJICogODcyM0JTIFNESU8gdmVuZG9yIHY0MSBmaXJtd2FyZSBtYW5hZ2VtZW50IFRYIHJlcG9ydCAoMHgzMiBpcwomIzQzOwkgKiByZXBvcnRlZCBhcyBDMkhfV0xBTl9SRk9OLCBoYW5kbGVkIHBlci1jaGlwIGluIHRoZSBDMkggZGlzcGF0Y2gpLgomIzQzOwkgKi8KJiM0MzsJQzJIX1ZFTkRPUl9UWF9SUFQgPSAweDEyLAogCUMySF9IV19GRUFUVVJFX1JFUE9SVCA9IDB4MTksCiAJQzJIX1dMQU5fSU5GTyA9IDB4MjcsCiAJQzJIX1dMQU5fUkZPTiA9IDB4MzIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oCmluZGV4IGM2ZTk4MWJhNzk4NjguLjhmODZmN2MxMmRlNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oCkBAIC0xOTQsNiAmIzQzOzE5NCw3IEBAIGVudW0gcnR3X2NoaXBfdHlwZSB7CiAJUlRXX0NISVBfVFlQRV84NzIzRCwKIAlSVFdfQ0hJUF9UWVBFXzg4MjFDLAogCVJUV19DSElQX1RZUEVfODcwM0IsCiYjNDM7CVJUV19DSElQX1RZUEVfODcyM0IsCiAJUlRXX0NISVBfVFlQRV84ODIxQSwKIAlSVFdfQ0hJUF9UWVBFXzg4MTJBLAogCVJUV19DSElQX1RZUEVfODgxNEEsCkBAIC0yMTk0LDYgJiM0MzsyMTk1LDEyIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBydHdfY2hpcF9oYXNfdHhfc3RiYyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KQogCXJldHVybiBydHdkZXYtJmd0O2NoaXAtJmd0O3R4X3N0YmM7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgcnR3X2lzXzg3MjNicyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KQomIzQzO3sKJiM0MzsJcmV0dXJuIHJ0d2Rldi0mZ3Q7Y2hpcC0mZ3Q7aWQgPT0gUlRXX0NISVBfVFlQRV84NzIzQiAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICBydHdkZXYtJmd0O2hjaS50eXBlID09IFJUV19IQ0lfVFlQRV9TRElPOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgdTggcnR3X2FjcXVpcmVfbWFjaWQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKIHsKIAl1bnNpZ25lZCBsb25nIG1hY19pZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnguYwppbmRleCAwMWZkMjk5YWJiN2ZlLi5hOTM2MWVmNGI5M2MwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9yeC5jCkBAIC0yNTMsMTAgJiM0MzsyNTMsMTIgQEAgc3RhdGljIHZvaWQgcnR3X3J4X2ZpbGxfcnhfc3RhdHVzKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsCiAKIAlydHdfcnhfYWRkcl9tYXRjaChydHdkZXYsIHBrdF9zdGF0LCBoZHIpOwogCi0JLyogUnRsODcyM2NzIGRyaXZlciBjaGVja3MgZm9yIHNpemUgJmx0OyAxNCBvciBzaXplICZndDsgODE5MiBhbmQKLQkgKiBzaW1wbHkgZHJvcHMgdGhlIHBhY2tldC4KJiM0MzsJLyoKJiM0MzsJICogUnRsODcyM2NzIGFuZCBydGw4NzIzYnMgZHJpdmVycyBjaGVjayBmb3Igc2l6ZSAmbHQ7IDE0IG9yIHNpemUgJmd0OyA4MTkyCiYjNDM7CSAqIGFuZCBzaW1wbHkgZHJvcCB0aGUgcGFja2V0LgogCSAqLwotCWlmIChydHdkZXYtJmd0O2NoaXAtJmd0O2lkID09IFJUV19DSElQX1RZUEVfODcwM0IgJmFtcDsmYW1wOyBwa3Rfc3RhdC0mZ3Q7cGt0X2xlbiA9PSAwKSB7CiYjNDM7CWlmICgocnR3ZGV2LSZndDtjaGlwLSZndDtpZCA9PSBSVFdfQ0hJUF9UWVBFXzg3MDNCIHx8IHJ0d19pc184NzIzYnMocnR3ZGV2KSkgJmFtcDsmYW1wOwomIzQzOwkgICAgcGt0X3N0YXQtJmd0O3BrdF9sZW4gPT0gMCkgewogCQlyeF9zdGF0dXMtJmd0O2ZsYWcgfD0gUlhfRkxBR19OT19QU0RVOwogCQlydHdfZGJnKHJ0d2RldiwgUlRXX0RCR19SWCwgJiMzNDt6ZXJvIGxlbmd0aCBwYWNrZXQmIzM0Oyk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uYwppbmRleCA1YjQwZDc0YjE2ZWUwLi5lZDFiZWQ4ZWExNDRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uYwpAQCAtMjAsNiAmIzQzOzIwLDE3IEBACiAjaW5jbHVkZSAmIzM0O3R4LmgmIzM0OwogCiAjZGVmaW5lIFJUV19TRElPX0lORElSRUNUX1JXX1JFVFJJRVMJCQk1MAomIzQzOyNkZWZpbmUgUlRXX1NESU9fT1FUX1RJTUVPVVRfTVMJCQkJMTAwMAomIzQzOwomIzQzOy8qCiYjNDM7ICogODcyM0JTIFNESU8gVFggRklGTyBiYWNrLXByZXNzdXJlIHdhdGVybWFya3M6IHN0b3AgdGhlIG1hYzgwMjExIHF1ZXVlIG9uY2UKJiM0MzsgKiB0aGUgcGVyLUFDIHNvZnR3YXJlIEZJRk8gZmlsbHMgcGFzdCB0aGUgaGlnaCB3YXRlcm1hcmssIGFuZCB3YWtlIGl0IGZyb20gdGhlCiYjNDM7ICogVFggZHJhaW4gcGF0aCBvbmNlIGl0IGZhbGxzIGJhY2sgdG8gdGhlIGxvdyBvbmUuIEJvdW5kcyB0aGUgcXVldWVpbmcgbGF0ZW5jeQomIzQzOyAqIHRoYXQgb3RoZXJ3aXNlIGNhdXNlcyB1cGxpbmsgYnVmZmVyYmxvYXQgLyBjb25nZXN0aW9uIGNvbGxhcHNlLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgUlRXX1NESU9fVFhfRklGT19ISVdBVEVSCQkJMTYKJiM0MzsjZGVmaW5lIFJUV19TRElPX1RYX0ZJRk9fTE9XQVRFUgkJCTgKJiM0MzsjZGVmaW5lIFJUV19TRElPX1RYX1JFVFJZX0RFTEFZCQkJbXNlY3NfdG9famlmZmllcygxKQogCiBzdGF0aWMgYm9vbCBydHdfc2Rpb19pc19idXNfYWRkcih1MzIgYWRkcikKIHsKQEAgLTU0OCwxMiAmIzQzOzU1OSwxMjIgQEAgc3RhdGljIGludCBydHdfc2Rpb19yZWFkX3BvcnQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggKmJ1Ziwgc2l6ZV90IGNvdW50KQogCXJldHVybiByZXQ7CiB9CiAKJiM0MzsvKgomIzQzOyAqIFRoZSBjYWNoZWQgZnJlZSBwYWdlIGNvdW50ZXJzIGFyZSBhIGZhc3QgcGF0aCBoaW50IG9ubHkuIFRoZXkgYXJlIHdyaXR0ZW4KJiM0MzsgKiBmcm9tIHRoZSBzaW5nbGUgdGhyZWFkZWQgVFggd29yayBhbmQsIGZvciBIMkMgYW5kIHJlc2VydmVkIHBhZ2Ugd3JpdGVzLAomIzQzOyAqIGZyb20gcHJvY2VzcyBjb250ZXh0LCBzbyB0aGV5IGFyZSBhdG9taWNfdDsgd2hlbmV2ZXIgdGhleSBjbGFpbSB0aGVyZSBpcwomIzQzOyAqIG5vdCBlbm91Z2ggcm9vbSB0aGV5IGFyZSByZXN5bmNocm9uaXNlZCBmcm9tIHRoZSBjaGlwIGJlZm9yZSB0aGUgY2FsbGVyCiYjNDM7ICogZ2l2ZXMgdXAsIHdoaWNoIGFsc28gYWJzb3JicyBhIGxvc3QgdXBkYXRlLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHJ0d19zZGlvXzg3MjNic19zdG9yZV9mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwKJiM0MzsJCQkJCSAgICB1MzIgZnJlZV90eHBnKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi0mZ3Q7cHJpdjsKJiM0MzsKJiM0MzsJYXRvbWljX3NldCgmYW1wO3J0d3NkaW8tJmd0O2ZyZWVfcGdfaGlnaCwKJiM0MzsJCSAgIHUzMl9nZXRfYml0cyhmcmVlX3R4cGcsIEJJVF9GUkVFX1RYUEdfSElHSCkpOwomIzQzOwlhdG9taWNfc2V0KCZhbXA7cnR3c2Rpby0mZ3Q7ZnJlZV9wZ19ub3JtYWwsCiYjNDM7CQkgICB1MzJfZ2V0X2JpdHMoZnJlZV90eHBnLCBCSVRfRlJFRV9UWFBHX05PUk1BTCkpOwomIzQzOwlhdG9taWNfc2V0KCZhbXA7cnR3c2Rpby0mZ3Q7ZnJlZV9wZ19sb3csCiYjNDM7CQkgICB1MzJfZ2V0X2JpdHMoZnJlZV90eHBnLCBCSVRfRlJFRV9UWFBHX0xPVykpOwomIzQzOwlhdG9taWNfc2V0KCZhbXA7cnR3c2Rpby0mZ3Q7ZnJlZV9wZ19wdWIsCiYjNDM7CQkgICB1MzJfZ2V0X2JpdHMoZnJlZV90eHBnLCBCSVRfRlJFRV9UWFBHX1BVQikpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfaW5pdF9mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtJmd0O3ByaXY7CiYjNDM7CWNvbnN0IHN0cnVjdCBydHdfcGFnZV90YWJsZSAqcGdfdGJsOwomIzQzOwl1MzIgZnJlZV90eHBnOwomIzQzOwl1MTYgcHVicV9udW07CiYjNDM7CiYjNDM7CWZyZWVfdHhwZyA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19GUkVFX1RYUEcpOwomIzQzOwlpZiAoZnJlZV90eHBnKSB7CiYjNDM7CQlydHdfc2Rpb184NzIzYnNfc3RvcmVfZnJlZV90eHBnKHJ0d2RldiwgZnJlZV90eHBnKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXBnX3RibCA9ICZhbXA7cnR3ZGV2LSZndDtjaGlwLSZndDtwYWdlX3RhYmxlWzBdOwomIzQzOwkJcHVicV9udW0gPSBydHdkZXYtJmd0O2ZpZm8uYWNxX3BnX251bSAtIHBnX3RibC0mZ3Q7aHFfbnVtIC0KJiM0MzsJCQkgICBwZ190YmwtJmd0O2xxX251bSAtIHBnX3RibC0mZ3Q7bnFfbnVtIC0gcGdfdGJsLSZndDtleHFfbnVtIC0KJiM0MzsJCQkgICBwZ190YmwtJmd0O2dhcHFfbnVtOwomIzQzOwomIzQzOwkJYXRvbWljX3NldCgmYW1wO3J0d3NkaW8tJmd0O2ZyZWVfcGdfaGlnaCwgcGdfdGJsLSZndDtocV9udW0pOwomIzQzOwkJYXRvbWljX3NldCgmYW1wO3J0d3NkaW8tJmd0O2ZyZWVfcGdfbm9ybWFsLCBwZ190YmwtJmd0O25xX251bSk7CiYjNDM7CQlhdG9taWNfc2V0KCZhbXA7cnR3c2Rpby0mZ3Q7ZnJlZV9wZ19sb3csIHBnX3RibC0mZ3Q7bHFfbnVtKTsKJiM0MzsJCWF0b21pY19zZXQoJmFtcDtydHdzZGlvLSZndDtmcmVlX3BnX3B1YiwgcHVicV9udW0pOwomIzQzOwl9CiYjNDM7CiYjNDM7CWF0b21pY19zZXQoJmFtcDtydHdzZGlvLSZndDt0eF9vcXRfZnJlZSwKJiM0MzsJCSAgIHJ0d19yZWFkOChydHdkZXYsIFJFR19TRElPX09RVF9GUkVFX1BHKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJ0d19zZGlvXzg3MjNic19zeW5jX2ZyZWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KQomIzQzO3sKJiM0MzsJdTMyIGZyZWVfdHhwZyA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19GUkVFX1RYUEcpOwomIzQzOwomIzQzOwlpZiAoZnJlZV90eHBnKQomIzQzOwkJcnR3X3NkaW9fODcyM2JzX3N0b3JlX2ZyZWVfdHhwZyhydHdkZXYsIGZyZWVfdHhwZyk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogU3VtIG9mIHRoZSBxdWV1ZSYjMzk7cyBkZWRpY2F0ZWQgY291bnRlciBhbmQgdGhlIHB1YmxpYyBwb29sLCBjbGFtcGVkIGF0IHplcm86CiYjNDM7ICogYSBsb3N0IHVwZGF0ZSBiZXR3ZWVuIHRoZSBjaGVjayBiZWxvdyBhbmQgcnR3X3NkaW9fODcyM2JzX2NvbnN1bWVfdHhwZygpCiYjNDM7ICogY2FuIGJyaWVmbHkgZHJpdmUgYSBjb3VudGVyIG5lZ2F0aXZlLCBhbmQgbGV0dGluZyB0aGF0IHdyYXAgd291bGQgaGlkZSB0aGUKJiM0MzsgKiBzaG9ydGFnZSBpbnN0ZWFkIG9mIHRyaWdnZXJpbmcgYSByZXN5bmMgZnJvbSB0aGUgY2hpcC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IHJ0d19zZGlvXzg3MjNic19wYWdlc19mcmVlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsCiYjNDM7CQkJCQkgICAgICAgYXRvbWljX3QgKmRlZGljYXRlZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtJmd0O3ByaXY7CiYjNDM7CWludCBmcmVlOwomIzQzOwomIzQzOwlmcmVlID0gYXRvbWljX3JlYWQoZGVkaWNhdGVkKSAmIzQzOyBhdG9taWNfcmVhZCgmYW1wO3J0d3NkaW8tJmd0O2ZyZWVfcGdfcHViKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGZyZWUgJmd0OyAwID8gZnJlZSA6IDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBhdG9taWNfdCAqcnR3X3NkaW9fODcyM2JzX2ZyZWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCBxdWV1ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtJmd0O3ByaXY7CiYjNDM7CiYjNDM7CXN3aXRjaCAocXVldWUpIHsKJiM0MzsJY2FzZSBSVFdfVFhfUVVFVUVfVkk6CiYjNDM7CQlyZXR1cm4gJmFtcDtydHdzZGlvLSZndDtmcmVlX3BnX25vcm1hbDsKJiM0MzsJY2FzZSBSVFdfVFhfUVVFVUVfQkU6CiYjNDM7CWNhc2UgUlRXX1RYX1FVRVVFX0JLOgomIzQzOwkJcmV0dXJuICZhbXA7cnR3c2Rpby0mZ3Q7ZnJlZV9wZ19sb3c7CiYjNDM7CWNhc2UgUlRXX1RYX1FVRVVFX0JDTjoKJiM0MzsJY2FzZSBSVFdfVFhfUVVFVUVfSDJDOgomIzQzOwljYXNlIFJUV19UWF9RVUVVRV9ISTA6CiYjNDM7CWNhc2UgUlRXX1RYX1FVRVVFX01HTVQ6CiYjNDM7CWNhc2UgUlRXX1RYX1FVRVVFX1ZPOgomIzQzOwkJcmV0dXJuICZhbXA7cnR3c2Rpby0mZ3Q7ZnJlZV9wZ19oaWdoOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHJ0d19zZGlvX2NoZWNrX2ZyZWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCBxdWV1ZSwKIAkJCQkgICAgc2l6ZV90IGNvdW50KQogewogCXVuc2lnbmVkIGludCBwYWdlc19mcmVlLCBwYWdlc19uZWVkZWQ7CiAKLQlpZiAocnR3X2NoaXBfd2NwdV84MDUxKHJ0d2RldikpIHsKJiM0MzsJaWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSkgewomIzQzOwkJYXRvbWljX3QgKmRlZGljYXRlZDsKJiM0MzsKJiM0MzsJCWRlZGljYXRlZCA9IHJ0d19zZGlvXzg3MjNic19mcmVlX3R4cGcocnR3ZGV2LCBxdWV1ZSk7CiYjNDM7CQlpZiAoIWRlZGljYXRlZCkgewomIzQzOwkJCXJ0d193YXJuKHJ0d2RldiwgJiMzNDtVbmtub3duIG1hcHBpbmcgZm9yIHF1ZXVlICV1XG4mIzM0OywgcXVldWUpOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwomIzQzOwkJcGFnZXNfZnJlZSA9IHJ0d19zZGlvXzg3MjNic19wYWdlc19mcmVlKHJ0d2RldiwgZGVkaWNhdGVkKTsKJiM0MzsJCXBhZ2VzX25lZWRlZCA9IERJVl9ST1VORF9VUChjb3VudCwgcnR3ZGV2LSZndDtjaGlwLSZndDtwYWdlX3NpemUpOwomIzQzOwkJaWYgKHBhZ2VzX25lZWRlZCAmbHQ7PSBwYWdlc19mcmVlKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwomIzQzOwkJcnR3X3NkaW9fODcyM2JzX3N5bmNfZnJlZV90eHBnKHJ0d2Rldik7CiYjNDM7CQlwYWdlc19mcmVlID0gcnR3X3NkaW9fODcyM2JzX3BhZ2VzX2ZyZWUocnR3ZGV2LCBkZWRpY2F0ZWQpOwomIzQzOwl9IGVsc2UgaWYgKHJ0d19jaGlwX3djcHVfODA1MShydHdkZXYpKSB7CiAJCXUzMiBmcmVlX3R4cGc7CiAKIAkJZnJlZV90eHBnID0gcnR3X3NkaW9fcmVhZDMyKHJ0d2RldiwgUkVHX1NESU9fRlJFRV9UWFBHKTsKQEAgLTYzMiw0NCAmIzQzOzc1MywxMjMgQEAgc3RhdGljIGludCBydHdfc2Rpb19jaGVja19mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggcXVldWUsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IHJ0d19zZGlvXzg3MjNic193YWl0X3R4X29xdChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi0mZ3Q7cHJpdjsKJiM0MzsJdTggZnJlZTsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWlmIChhdG9taWNfYWRkX3VubGVzcygmYW1wO3J0d3NkaW8tJmd0O3R4X29xdF9mcmVlLCAtMSwgMCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IFJUV19TRElPX09RVF9USU1FT1VUX01TOyBpJiM0MzsmIzQzOykgewomIzQzOwkJZnJlZSA9IHJ0d19yZWFkOChydHdkZXYsIFJFR19TRElPX09RVF9GUkVFX1BHKTsKJiM0MzsJCWlmIChmcmVlKSB7CiYjNDM7CQkJYXRvbWljX3NldCgmYW1wO3J0d3NkaW8tJmd0O3R4X29xdF9mcmVlLCBmcmVlIC0gMSk7CiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CQl9CiYjNDM7CQl1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIC1FQlVTWTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnR3X3NkaW9fODcyM2JzX2NvbnN1bWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCBxdWV1ZSwKJiM0MzsJCQkJCSB1bnNpZ25lZCBpbnQgcGFnZXMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LSZndDtwcml2OwomIzQzOwlhdG9taWNfdCAqZGVkaWNhdGVkOwomIzQzOwl1bnNpZ25lZCBpbnQgdGFrZW47CiYjNDM7CWludCBmcmVlOwomIzQzOwomIzQzOwlkZWRpY2F0ZWQgPSBydHdfc2Rpb184NzIzYnNfZnJlZV90eHBnKHJ0d2RldiwgcXVldWUpOwomIzQzOwlpZiAoIWRlZGljYXRlZCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZnJlZSA9IGF0b21pY19yZWFkKGRlZGljYXRlZCk7CiYjNDM7CXRha2VuID0gbWluX3QodW5zaWduZWQgaW50LCBwYWdlcywgZnJlZSAmZ3Q7IDAgPyBmcmVlIDogMCk7CiYjNDM7CWF0b21pY19zdWIodGFrZW4sIGRlZGljYXRlZCk7CiYjNDM7CiYjNDM7CXBhZ2VzIC09IHRha2VuOwomIzQzOwlpZiAocGFnZXMgJmFtcDsmYW1wOyBhdG9taWNfc3ViX3JldHVybihwYWdlcywgJmFtcDtydHdzZGlvLSZndDtmcmVlX3BnX3B1YikgJmx0OyAwKQomIzQzOwkJYXRvbWljX3NldCgmYW1wO3J0d3NkaW8tJmd0O2ZyZWVfcGdfcHViLCAwKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHJ0d19zZGlvX3dyaXRlX3BvcnQoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgICAgICBlbnVtIHJ0d190eF9xdWV1ZV90eXBlIHF1ZXVlKQogewogCXN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtJmd0O3ByaXY7CiYjNDM7CWJvb2wgcnRsODcyM2JzID0gcnR3X2lzXzg3MjNicyhydHdkZXYpOwomIzQzOwl1bnNpZ25lZCBpbnQgb3JpZ19sZW4gPSBza2ItJmd0O2xlbjsKJiM0MzsJdW5zaWduZWQgaW50IHBhZ2VzOwomIzQzOwlzaXplX3Qgd3JpdGVfc2l6ZTsKIAlib29sIGJ1c19jbGFpbTsKIAlzaXplX3QgdHhzaXplOwogCXUzMiB0eGFkZHI7CiAJaW50IHJldDsKIAotCXR4YWRkciA9IHJ0d19zZGlvX2dldF90eF9hZGRyKHJ0d2Rldiwgc2tiLSZndDtsZW4sIHF1ZXVlKTsKLQlpZiAoIXR4YWRkcikKLQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CWlmIChydGw4NzIzYnMpIHsKJiM0MzsJCXR4c2l6ZSA9IHJvdW5kX3VwKG9yaWdfbGVuLCA0KTsKJiM0MzsJCXdyaXRlX3NpemUgPSB0eHNpemUgJmd0OyBSVFdfU0RJT19CTE9DS19TSVpFID8KJiM0MzsJCQkgICAgIHJvdW5kX3VwKHR4c2l6ZSwgUlRXX1NESU9fQkxPQ0tfU0laRSkgOiB0eHNpemU7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQl0eHNpemUgPSBzZGlvX2FsaWduX3NpemUocnR3c2Rpby0mZ3Q7c2Rpb19mdW5jLCBvcmlnX2xlbik7CiYjNDM7CQl3cml0ZV9zaXplID0gdHhzaXplOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICh3cml0ZV9zaXplICZndDsgb3JpZ19sZW4pIHsKJiM0MzsJCXVuc2lnbmVkIGludCBwYWRkaW5nID0gd3JpdGVfc2l6ZSAtIG9yaWdfbGVuOwogCi0JdHhzaXplID0gc2Rpb19hbGlnbl9zaXplKHJ0d3NkaW8tJmd0O3NkaW9fZnVuYywgc2tiLSZndDtsZW4pOwomIzQzOwkJaWYgKHNrYl90YWlscm9vbShza2IpICZsdDsgcGFkZGluZykgewomIzQzOwkJCXJldCA9IHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLAomIzQzOwkJCQkJICAgICAgIHBhZGRpbmcgLSBza2JfdGFpbHJvb20oc2tiKSwKJiM0MzsJCQkJCSAgICAgICBHRlBfS0VSTkVMKTsKJiM0MzsJCQlpZiAocmV0KQomIzQzOwkJCQlyZXR1cm4gcmV0OwomIzQzOwkJfQomIzQzOwkJc2tiX3B1dF96ZXJvKHNrYiwgcGFkZGluZyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJdHhhZGRyID0gcnR3X3NkaW9fZ2V0X3R4X2FkZHIocnR3ZGV2LCB0eHNpemUsIHF1ZXVlKTsKJiM0MzsJaWYgKCF0eGFkZHIpIHsKJiM0MzsJCXJldCA9IC1FSU5WQUw7CiYjNDM7CQlnb3RvIG91dF90cmltOwomIzQzOwl9CiAKIAlyZXQgPSBydHdfc2Rpb19jaGVja19mcmVlX3R4cGcocnR3ZGV2LCBxdWV1ZSwgdHhzaXplKTsKIAlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwomIzQzOwkJZ290byBvdXRfdHJpbTsKJiM0MzsKJiM0MzsJaWYgKHJ0bDg3MjNicykgewomIzQzOwkJcmV0ID0gcnR3X3NkaW9fODcyM2JzX3dhaXRfdHhfb3F0KHJ0d2Rldik7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWdvdG8gb3V0X3RyaW07CiYjNDM7CX0KIAogCWlmICghSVNfQUxJR05FRCgodW5zaWduZWQgbG9uZylza2ItJmd0O2RhdGEsIFJUV19TRElPX0RBVEFfUFRSX0FMSUdOKSkKIAkJcnR3X3dhcm4ocnR3ZGV2LCAmIzM0O0dvdCB1bmFsaWduZWQgU0tCIGluICVzKCkgZm9yIHF1ZXVlICV1XG4mIzM0OywKIAkJCSBfX2Z1bmNfXywgcXVldWUpOwogCiAJYnVzX2NsYWltID0gcnR3X3NkaW9fYnVzX2NsYWltX25lZWRlZChydHdzZGlvKTsKLQogCWlmIChidXNfY2xhaW0pCiAJCXNkaW9fY2xhaW1faG9zdChydHdzZGlvLSZndDtzZGlvX2Z1bmMpOwotCi0JcmV0ID0gc2Rpb19tZW1jcHlfdG9pbyhydHdzZGlvLSZndDtzZGlvX2Z1bmMsIHR4YWRkciwgc2tiLSZndDtkYXRhLCB0eHNpemUpOwotCiYjNDM7CXJldCA9IHNkaW9fbWVtY3B5X3RvaW8ocnR3c2Rpby0mZ3Q7c2Rpb19mdW5jLCB0eGFkZHIsIHNrYi0mZ3Q7ZGF0YSwKJiM0MzsJCQkgICAgICAgd3JpdGVfc2l6ZSk7CiAJaWYgKGJ1c19jbGFpbSkKIAkJc2Rpb19yZWxlYXNlX2hvc3QocnR3c2Rpby0mZ3Q7c2Rpb19mdW5jKTsKIAotCWlmIChyZXQpCiYjNDM7CWlmIChyZXQpIHsKIAkJcnR3X3dhcm4ocnR3ZGV2LAogCQkJICYjMzQ7RmFpbGVkIHRvIHdyaXRlICV6dSBieXRlKHMpIHRvIFNESU8gcG9ydCAweCUwOHgmIzM0OywKLQkJCSB0eHNpemUsIHR4YWRkcik7CiYjNDM7CQkJIHdyaXRlX3NpemUsIHR4YWRkcik7CiYjNDM7CX0gZWxzZSBpZiAocnRsODcyM2JzKSB7CiYjNDM7CQlwYWdlcyA9IERJVl9ST1VORF9VUCh0eHNpemUsIHJ0d2Rldi0mZ3Q7Y2hpcC0mZ3Q7cGFnZV9zaXplKTsKJiM0MzsJCXJ0d19zZGlvXzg3MjNic19jb25zdW1lX3R4cGcocnR3ZGV2LCBxdWV1ZSwgcGFnZXMpOwomIzQzOwl9CiAKJiM0MztvdXRfdHJpbToKJiM0MzsJaWYgKHdyaXRlX3NpemUgJmd0OyBvcmlnX2xlbikKJiM0MzsJCXNrYl90cmltKHNrYiwgb3JpZ19sZW4pOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTY3Nyw3ICYjNDM7ODc3LDExIEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2luaXQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKIHsKIAlzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LSZndDtwcml2OwogCi0JcnR3c2Rpby0mZ3Q7aXJxX21hc2sgPSBSRUdfU0RJT19ISU1SX1JYX1JFUVVFU1QgfCBSRUdfU0RJT19ISU1SX0NQV00xOwomIzQzOwlpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKQomIzQzOwkJcnR3c2Rpby0mZ3Q7aXJxX21hc2sgPSBSRUdfU0RJT19ISU1SX1JYX1JFUVVFU1Q7CiYjNDM7CWVsc2UKJiM0MzsJCXJ0d3NkaW8tJmd0O2lycV9tYXNrID0gUkVHX1NESU9fSElNUl9SWF9SRVFVRVNUIHwKJiM0MzsJCQkJICAgIFJFR19TRElPX0hJTVJfQ1BXTTE7CiB9CiAKIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2VuYWJsZV9yeF9hZ2dyZWdhdGlvbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KQpAQCAtNjg1LDYgJiM0Mzs4ODksNyBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19lbmFibGVfcnhfYWdncmVnYXRpb24oc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKIAl1OCBzaXplLCB0aW1lb3V0OwogCiAJc3dpdGNoIChydHdkZXYtJmd0O2NoaXAtJmd0O2lkKSB7CiYjNDM7CWNhc2UgUlRXX0NISVBfVFlQRV84NzIzQjoKIAljYXNlIFJUV19DSElQX1RZUEVfODcwM0I6CiAJY2FzZSBSVFdfQ0hJUF9UWVBFXzg4MjFBOgogCWNhc2UgUlRXX0NISVBfVFlQRV84ODEyQToKQEAgLTcxMiw2ICYjNDM7OTE3LDggQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9fZW5hYmxlX3J4X2FnZ3JlZ2F0aW9uKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiAJCSAgICBGSUVMRF9QUkVQKEJJVF9ETUFfQUdHX1RPX1YxLCB0aW1lb3V0KSk7CiAKIAlydHdfd3JpdGU4X3NldChydHdkZXYsIFJFR19SWERNQV9NT0RFLCBCSVRfRE1BX01PREUpOwomIzQzOwlpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKQomIzQzOwkJcnR3X3dyaXRlOF9tYXNrKHJ0d2RldiwgUkVHX1JYRE1BX01PREUsIEJJVF9ETUFfQlVSU1RfQ05ULCAweDMpOwogfQogCiBzdGF0aWMgdm9pZCBydHdfc2Rpb19lbmFibGVfaW50ZXJydXB0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCkBAIC03NDksOSAmIzQzOzk1Niw1MCBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX3NldHVwKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfY2hlY2tfcnFwbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IHJ0d19jaGlwX2luZm8gKmNoaXAgPSBydHdkZXYtJmd0O2NoaXA7CiYjNDM7CXN0cnVjdCBydHdfZmlmb19jb25mICpmaWZvID0gJmFtcDtydHdkZXYtJmd0O2ZpZm87CiYjNDM7CWNvbnN0IHN0cnVjdCBydHdfcGFnZV90YWJsZSAqcGdfdGJsOwomIzQzOwl1MTYgcmVzZXJ2ZWRfbnVtOwomIzQzOwl1MzIgZnJlZV90eHBnOwomIzQzOwl1MTYgcHVicV9udW07CiYjNDM7CiYjNDM7CWZyZWVfdHhwZyA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19GUkVFX1RYUEcpOwomIzQzOwlpZiAoZnJlZV90eHBnIHx8ICFmaWZvLSZndDthY3FfcGdfbnVtKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlwZ190YmwgPSAmYW1wO2NoaXAtJmd0O3BhZ2VfdGFibGVbMF07CiYjNDM7CXJlc2VydmVkX251bSA9IHBnX3RibC0mZ3Q7aHFfbnVtICYjNDM7IHBnX3RibC0mZ3Q7bHFfbnVtICYjNDM7IHBnX3RibC0mZ3Q7bnFfbnVtICYjNDM7CiYjNDM7CQkgICAgICAgcGdfdGJsLSZndDtleHFfbnVtICYjNDM7IHBnX3RibC0mZ3Q7Z2FwcV9udW07CiYjNDM7CWlmIChmaWZvLSZndDthY3FfcGdfbnVtICZsdDs9IHJlc2VydmVkX251bSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJcHVicV9udW0gPSBmaWZvLSZndDthY3FfcGdfbnVtIC0gcmVzZXJ2ZWRfbnVtOwomIzQzOwlydHdfd3JpdGUzMihydHdkZXYsIFJFR19SUVBOX05QUSwKJiM0MzsJCSAgICBCSVRfUlFQTl9ORShwZ190YmwtJmd0O25xX251bSwgcGdfdGJsLSZndDtleHFfbnVtKSk7CiYjNDM7CXJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1JRUE4sCiYjNDM7CQkgICAgQklUX1JRUE5fSExQKHBnX3RibC0mZ3Q7aHFfbnVtLCBwZ190YmwtJmd0O2xxX251bSwgcHVicV9udW0pKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHJ0d19zZGlvX3N0YXJ0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiB7CiYjNDM7CXUzMiBjbGVhcjsKJiM0MzsKJiM0MzsJaWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSkgewomIzQzOwkJcnR3X3NkaW9fODcyM2JzX2NoZWNrX3JxcG4ocnR3ZGV2KTsKJiM0MzsJCXJ0d19zZGlvXzg3MjNic19pbml0X2ZyZWVfdHhwZyhydHdkZXYpOwomIzQzOwl9CiYjNDM7CiAJcnR3X3NkaW9fZW5hYmxlX3J4X2FnZ3JlZ2F0aW9uKHJ0d2Rldik7CiYjNDM7CiYjNDM7CWlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpIHsKJiM0MzsJCWNsZWFyID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19TRElPX0hJU1IpICZhbXA7CiYjNDM7CQkJUlRXX1NESU9fSElTUl9DTEVBUl9NQVNLOwomIzQzOwkJaWYgKGNsZWFyKQomIzQzOwkJCXJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1NESU9fSElTUiwgY2xlYXIpOwomIzQzOwl9CiYjNDM7CiAJcnR3X3NkaW9fZW5hYmxlX2ludGVycnVwdChydHdkZXYpOwogCiAJcmV0dXJuIDA7CkBAIC04MTUsNyAmIzQzOzEwNjMsMTEgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9fdHhfa2lja19vZmYoc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKIHsKIAlzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LSZndDtwcml2OwogCi0JcXVldWVfd29yayhydHdzZGlvLSZndDt0eHdxLCAmYW1wO3J0d3NkaW8tJmd0O3R4X2hhbmRsZXJfZGF0YS0mZ3Q7d29yayk7CiYjNDM7CS8qCiYjNDM7CSAqIEEgcmV0cnkgbWF5IGFscmVhZHkgYmUgcGVuZGluZyB3aXRoIGEgZGVsYXk7IHJlLWFybSBpdCBzbyBhIG5ld2x5CiYjNDM7CSAqIHF1ZXVlZCBmcmFtZSBpcyBub3QgaGVsZCBiYWNrIGJ5IGl0LgomIzQzOwkgKi8KJiM0MzsJbW9kX2RlbGF5ZWRfd29yayhydHdzZGlvLSZndDt0eHdxLCAmYW1wO3J0d3NkaW8tJmd0O3R4X2hhbmRsZXJfZGF0YS0mZ3Q7d29yaywgMCk7CiB9CiAKIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2xpbmtfcHMoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgYm9vbCBlbnRlcikKQEAgLTgzMSw2ICYjNDM7MTA4Myw4IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2ludGVyZmFjZV9jZmcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKIAogCXZhbCA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19UWF9DVFJMKTsKIAl2YWwgJmFtcDs9IDB4ZmZmODsKJiM0MzsJaWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSkKJiM0MzsJCXZhbCB8PSBCSVRfU0RJT19UWF9DVFJMX0FMV0FZU19SRUNPR05JWkU7CiAJcnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfU0RJT19UWF9DVFJMLCB2YWwpOwogfQogCkBAIC05MzcsNiAmIzQzOzExOTEsMTkgQEAgc3RhdGljIGludCBydHdfc2Rpb190eF93cml0ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LAogCiAJc2tiX3F1ZXVlX3RhaWwoJmFtcDtydHdzZGlvLSZndDt0eF9xdWV1ZVtxdWV1ZV0sIHNrYik7CiAKJiM0MzsJLyoKJiM0MzsJICogQmFjay1wcmVzc3VyZSBvbiB0aGUgZGF0YSBBQ3MgKEJLL0JFL1ZJL1ZPKTogb25jZSB0aGUgRklGTyBmaWxscyBwYXN0CiYjNDM7CSAqIHRoZSBoaWdoIHdhdGVybWFyaywgc3RvcCB0aGUgY29ycmVzcG9uZGluZyBtYWM4MDIxMSBxdWV1ZSBzbyBpdCBzdG9wcwomIzQzOwkgKiBoYW5kaW5nIHVzIGZyYW1lcywgYm91bmRpbmcgdGhlIHF1ZXVlaW5nIGxhdGVuY3kuIFJlc3VtZWQgZnJvbSB0aGUgVFgKJiM0MzsJICogZHJhaW4gcGF0aCBvbmNlIHRoZSBGSUZPIGRyYWlucyBiZWxvdyB0aGUgbG93IHdhdGVybWFyay4KJiM0MzsJICovCiYjNDM7CWlmIChydHdfaXNfODcyM2JzKHJ0d2RldikgJmFtcDsmYW1wOyBxdWV1ZSAmbHQ7IFJUV19UWF9RVUVVRV9CQ04gJmFtcDsmYW1wOwomIzQzOwkgICAgIXJ0d3NkaW8tJmd0O3F1ZXVlX3N0b3BwZWRbcXVldWVdICZhbXA7JmFtcDsKJiM0MzsJICAgIHNrYl9xdWV1ZV9sZW4oJmFtcDtydHdzZGlvLSZndDt0eF9xdWV1ZVtxdWV1ZV0pICZndDs9IFJUV19TRElPX1RYX0ZJRk9fSElXQVRFUikgewomIzQzOwkJcnR3c2Rpby0mZ3Q7cXVldWVfc3RvcHBlZFtxdWV1ZV0gPSB0cnVlOwomIzQzOwkJaWVlZTgwMjExX3N0b3BfcXVldWUocnR3ZGV2LSZndDtodywgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpOwomIzQzOwl9CiYjNDM7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwOTUsNiAmIzQzOzEzNjIsMTQgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9faGFuZGxlX2ludGVycnVwdChzdHJ1Y3Qgc2Rpb19mdW5jICpzZGlvX2Z1bmMpCiAJCXJ0d19zZGlvX3J4X2lzcihydHdkZXYpOwogCX0KIAomIzQzOwkvKgomIzQzOwkgKiBSVEw4NzIzQlMga2VlcHMgcmFpc2luZyB0aGUgaW50ZXJydXB0IGFmdGVyIHJlc3VtZSBpZiB1bmRlZmluZWQKJiM0MzsJICogc3RhdHVzIGJpdHMgYXJlIHdyaXR0ZW4gYmFjaywgc28gYWNrbm93bGVkZ2Ugb25seSB0aGUgYml0cyB0aGF0IGFyZQomIzQzOwkgKiBib3RoIGRlZmluZWQgYW5kIHVubWFza2VkLiBPdGhlciBjaGlwcyBrZWVwIHRoZSBleGlzdGluZyBiZWhhdmlvdXIuCiYjNDM7CSAqLwomIzQzOwlpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKQomIzQzOwkJaGlzciAmYW1wOz0gcnR3c2Rpby0mZ3Q7aXJxX21hc2sgJmFtcDsgUlRXX1NESU9fSElTUl9DTEVBUl9NQVNLOwomIzQzOwogCXJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1NESU9fSElTUiwgaGlzcik7CiAKIAlydHdzZGlvLSZndDtpcnFfdGhyZWFkID0gTlVMTDsKQEAgLTEyMzEsNDMgJiM0MzsxNTA2LDkyIEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2luZGljYXRlX3R4X3N0YXR1cyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LAogCWllZWU4MDIxMV90eF9zdGF0dXNfaXJxc2FmZShodywgc2tiKTsKIH0KIAotc3RhdGljIHZvaWQgcnR3X3NkaW9fcHJvY2Vzc190eF9xdWV1ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LAotCQkJCSAgICAgIGVudW0gcnR3X3R4X3F1ZXVlX3R5cGUgcXVldWUpCiYjNDM7LyoKJiM0MzsgKiBTZW5kIG9uZSBmcmFtZSBmcm9tIEBxdWV1ZS4gUmV0dXJucyAxIHdoZW4gYSBmcmFtZSB3YXMgd3JpdHRlbiwgMCB3aGVuIHRoZQomIzQzOyAqIHF1ZXVlIHdhcyBlbXB0eSBhbmQgYSBuZWdhdGl2ZSBlcnJubyB3aGVuIHRoZSB3cml0ZSBmYWlsZWQsIGluIHdoaWNoIGNhc2UKJiM0MzsgKiB0aGUgZnJhbWUgaXMgcHV0IGJhY2sgYXQgdGhlIGhlYWQgb2YgdGhlIHF1ZXVlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgcnR3X3NkaW9fcHJvY2Vzc190eF9xdWV1ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LAomIzQzOwkJCQkgICAgIGVudW0gcnR3X3R4X3F1ZXVlX3R5cGUgcXVldWUpCiB7CiAJc3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi0mZ3Q7cHJpdjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwomIzQzOwl1MTYgcV9tYXA7CiAJaW50IHJldDsKIAogCXNrYiA9IHNrYl9kZXF1ZXVlKCZhbXA7cnR3c2Rpby0mZ3Q7dHhfcXVldWVbcXVldWVdKTsKIAlpZiAoIXNrYikKLQkJcmV0dXJuOwomIzQzOwkJcmV0dXJuIDA7CiAKJiM0MzsJcV9tYXAgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTsKIAlyZXQgPSBydHdfc2Rpb193cml0ZV9wb3J0KHJ0d2Rldiwgc2tiLCBxdWV1ZSk7CiAJaWYgKHJldCkgewogCQlza2JfcXVldWVfaGVhZCgmYW1wO3J0d3NkaW8tJmd0O3R4X3F1ZXVlW3F1ZXVlXSwgc2tiKTsKLQkJcmV0dXJuOwomIzQzOwkJcmV0dXJuIHJldDsKIAl9CiAKIAlydHdfc2Rpb19pbmRpY2F0ZV90eF9zdGF0dXMocnR3ZGV2LCBza2IpOwomIzQzOwomIzQzOwlpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpICZhbXA7JmFtcDsgcXVldWUgJmx0OyBSVFdfVFhfUVVFVUVfQkNOICZhbXA7JmFtcDsKJiM0MzsJICAgIHJ0d3NkaW8tJmd0O3F1ZXVlX3N0b3BwZWRbcXVldWVdICZhbXA7JmFtcDsKJiM0MzsJICAgIHNrYl9xdWV1ZV9sZW4oJmFtcDtydHdzZGlvLSZndDt0eF9xdWV1ZVtxdWV1ZV0pICZsdDs9CiYjNDM7CSAgICBSVFdfU0RJT19UWF9GSUZPX0xPV0FURVIpIHsKJiM0MzsJCXJ0d3NkaW8tJmd0O3F1ZXVlX3N0b3BwZWRbcXVldWVdID0gZmFsc2U7CiYjNDM7CQlpZWVlODAyMTFfd2FrZV9xdWV1ZShydHdkZXYtJmd0O2h3LCBxX21hcCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDE7CiB9CiAKIHN0YXRpYyB2b2lkIHJ0d19zZGlvX3R4X2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEgKndvcmtfZGF0YSA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhLCB3b3JrKTsKJiM0MzsJCWNvbnRhaW5lcl9vZih0b19kZWxheWVkX3dvcmsod29yayksIHN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEsCiYjNDM7CQkJICAgICB3b3JrKTsKIAlzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW87CiAJc3RydWN0IHJ0d19kZXYgKnJ0d2RldjsKLQlpbnQgbGltaXQsIHF1ZXVlOwomIzQzOwlpbnQgbGltaXQsIHF1ZXVlLCByZXQ7CiYjNDM7CWJvb2wgcnRsODcyM2JzOwogCiAJcnR3ZGV2ID0gd29ya19kYXRhLSZndDtydHdkZXY7CiAJcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtJmd0O3ByaXY7CiYjNDM7CXJ0bDg3MjNicyA9IHJ0d19pc184NzIzYnMocnR3ZGV2KTsKIAogCWlmICghcnR3X2Z3X2ZlYXR1cmVfY2hlY2soJmFtcDtydHdkZXYtJmd0O2Z3LCBGV19GRUFUVVJFX1RYX1dBS0UpKQogCQlydHdfc2Rpb19kZWVwX3BzX2xlYXZlKHJ0d2Rldik7CiAKIAlmb3IgKHF1ZXVlID0gUlRLX01BWF9UWF9RVUVVRV9OVU0gLSAxOyBxdWV1ZSAmZ3Q7PSAwOyBxdWV1ZS0tKSB7CiAJCWZvciAobGltaXQgPSAwOyBsaW1pdCAmbHQ7IDEwMDA7IGxpbWl0JiM0MzsmIzQzOykgewotCQkJcnR3X3NkaW9fcHJvY2Vzc190eF9xdWV1ZShydHdkZXYsIHF1ZXVlKTsKJiM0MzsJCQlyZXQgPSBydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlKHJ0d2RldiwgcXVldWUpOwomIzQzOwkJCWlmIChyZXQgPT0gMCkKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApIHsKJiM0MzsJCQkJLyoKJiM0MzsJCQkJICogQSBwYWdlIHNob3J0YWdlIGlzIHRyYW5zaWVudDogbGVhdmUgdGhlCiYjNDM7CQkJCSAqIGZyYW1lIHF1ZXVlZCBhbmQgY29tZSBiYWNrIHNob3J0bHkgaW5zdGVhZAomIzQzOwkJCQkgKiBvZiBzdGFsbGluZyB0aGlzIEFDIHVudGlsIHNvbWV0aGluZyBlbHNlCiYjNDM7CQkJCSAqIGtpY2tzIHRoZSB3b3JrZXIuCiYjNDM7CQkJCSAqLwomIzQzOwkJCQlpZiAocnRsODcyM2JzICZhbXA7JmFtcDsgcmV0ID09IC1FQlVTWSkgewomIzQzOwkJCQkJcXVldWVfZGVsYXllZF93b3JrKHJ0d3NkaW8tJmd0O3R4d3EsCiYjNDM7CQkJCQkJCSAgICZhbXA7d29ya19kYXRhLSZndDt3b3JrLAomIzQzOwkJCQkJCQkgICBSVFdfU0RJT19UWF9SRVRSWV9ERUxBWSk7CiYjNDM7CQkJCQlyZXR1cm47CiYjNDM7CQkJCX0KJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQkJfQomIzQzOwomIzQzOwkJCS8qCiYjNDM7CQkJICogUmVzdGFydCBmcm9tIHRoZSBoaWdoZXN0IHByaW9yaXR5IHF1ZXVlIGFmdGVyIGV2ZXJ5CiYjNDM7CQkJICogbWFuYWdlbWVudCBmcmFtZSBzbyB0aGUgam9pbiBzZXF1ZW5jZSBpcyBub3QgaGVsZCB1cAomIzQzOwkJCSAqIGJlaGluZCBhIGRhdGEgYmFja2xvZy4KJiM0MzsJCQkgKi8KJiM0MzsJCQlpZiAocnRsODcyM2JzICZhbXA7JmFtcDsgcXVldWUgPT0gUlRXX1RYX1FVRVVFX01HTVQpIHsKJiM0MzsJCQkJcXVldWVfZGVsYXllZF93b3JrKHJ0d3NkaW8tJmd0O3R4d3EsCiYjNDM7CQkJCQkJICAgJmFtcDt3b3JrX2RhdGEtJmd0O3dvcmssIDApOwomIzQzOwkJCQlyZXR1cm47CiYjNDM7CQkJfQogCiAJCQlpZiAoc2tiX3F1ZXVlX2VtcHR5KCZhbXA7cnR3c2Rpby0mZ3Q7dHhfcXVldWVbcXVldWVdKSkKIAkJCQlicmVhazsKQEAgLTEyOTQsMTQgJiM0MzsxNjE4LDE2IEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9faW5pdF90eChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KQogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgUlRLX01BWF9UWF9RVUVVRV9OVU07IGkmIzQzOyYjNDM7KQomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgUlRLX01BWF9UWF9RVUVVRV9OVU07IGkmIzQzOyYjNDM7KSB7CiAJCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmFtcDtydHdzZGlvLSZndDt0eF9xdWV1ZVtpXSk7CiYjNDM7CQlydHdzZGlvLSZndDtxdWV1ZV9zdG9wcGVkW2ldID0gZmFsc2U7CiYjNDM7CX0KIAlydHdzZGlvLSZndDt0eF9oYW5kbGVyX2RhdGEgPSBrbWFsbG9jX29iaigqcnR3c2Rpby0mZ3Q7dHhfaGFuZGxlcl9kYXRhKTsKIAlpZiAoIXJ0d3NkaW8tJmd0O3R4X2hhbmRsZXJfZGF0YSkKIAkJZ290byBlcnJfZGVzdHJveV93cTsKIAogCXJ0d3NkaW8tJmd0O3R4X2hhbmRsZXJfZGF0YS0mZ3Q7cnR3ZGV2ID0gcnR3ZGV2OwotCUlOSVRfV09SSygmYW1wO3J0d3NkaW8tJmd0O3R4X2hhbmRsZXJfZGF0YS0mZ3Q7d29yaywgcnR3X3NkaW9fdHhfaGFuZGxlcik7CiYjNDM7CUlOSVRfREVMQVlFRF9XT1JLKCZhbXA7cnR3c2Rpby0mZ3Q7dHhfaGFuZGxlcl9kYXRhLSZndDt3b3JrLCBydHdfc2Rpb190eF9oYW5kbGVyKTsKIAogCXJldHVybiAwOwogCkBAIC0xMzE1LDYgJiM0MzsxNjQxLDcgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9fZGVpbml0X3R4KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiAJc3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi0mZ3Q7cHJpdjsKIAlpbnQgaTsKIAomIzQzOwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmFtcDtydHdzZGlvLSZndDt0eF9oYW5kbGVyX2RhdGEtJmd0O3dvcmspOwogCWRlc3Ryb3lfd29ya3F1ZXVlKHJ0d3NkaW8tJmd0O3R4d3EpOwogCWtmcmVlKHJ0d3NkaW8tJmd0O3R4X2hhbmRsZXJfZGF0YSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmgKaW5kZXggNDU3ZThiMDIzODBlNS4uMmYxYjY3ZjRiYmM3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmgKQEAgLTIyLDYgJiM0MzsyMiw3IEBACiAKIC8qIFNESU8gVHggQ29udHJvbCAqLwogI2RlZmluZSBSRUdfU0RJT19UWF9DVFJMCQkJKFNESU9fTE9DQUxfT0ZGU0VUICYjNDM7IDB4MDAwMCkKJiM0MzsjZGVmaW5lIEJJVF9TRElPX1RYX0NUUkxfQUxXQVlTX1JFQ09HTklaRQlCSVQoNCkKIAogLypTRElPIHN0YXR1cyB0aW1lb3V0Ki8KICNkZWZpbmUgUkVHX1NESU9fVElNRU9VVAkJCShTRElPX0xPQ0FMX09GRlNFVCAmIzQzOyAweDAwMDIpCkBAIC03Nyw2ICYjNDM7NzgsMTQgQEAKIC8qIHRoZSBmb2xsb3dpbmcgdHdvIGFyZSBSVEw4MTg4IFNESU8gU3BlY2lmaWMgKi8KICNkZWZpbmUgUkVHX1NESU9fSElTUl9NQ1VfRVJSCQkJQklUKDI4KQogI2RlZmluZSBSRUdfU0RJT19ISVNSX1RTRl9CSVQzMl9UT0dHTEUJCUJJVCgyOSkKJiM0MzsjZGVmaW5lIFJUV19TRElPX0hJU1JfQ0xFQVJfTUFTSwkJXAomIzQzOwkoUkVHX1NESU9fSElTUl9UWEVSUiB8IFJFR19TRElPX0hJU1JfUlhFUlIgfCBcCiYjNDM7CSBSRUdfU0RJT19ISVNSX1RYRk9WVyB8IFJFR19TRElPX0hJU1JfUlhGT1ZXIHwgXAomIzQzOwkgUkVHX1NESU9fSElTUl9UWEJDTk9LIHwgUkVHX1NESU9fSElTUl9UWEJDTkVSUiB8IFwKJiM0MzsJIFJFR19TRElPX0hJU1JfQzJIQ01EIHwgUkVHX1NESU9fSElTUl9DUFdNMSB8IFwKJiM0MzsJIFJFR19TRElPX0hJU1JfQ1BXTTIgfCBSRUdfU0RJT19ISVNSX0hTSVNSX0lORCB8IFwKJiM0MzsJIFJFR19TRElPX0hJU1JfR1RJTlQzX0lORCB8IFJFR19TRElPX0hJU1JfR1RJTlQ0X0lORCB8IFwKJiM0MzsJIFJFR19TRElPX0hJU1JfUFNUSU1FT1VUIHwgUkVHX1NESU9fSElTUl9PQ1BJTlQpCiAKIC8qIEhDSSBDdXJyZW50IFBvd2VyIE1vZGUgKi8KICNkZWZpbmUgUkVHX1NESU9fSENQV00JCQkJKFNESU9fTE9DQUxfT0ZGU0VUICYjNDM7IDB4MDAxOSkKQEAgLTg2LDYgJiM0Mzs5NSwxMCBAQAogI2RlZmluZSBSRUdfU0RJT19PUVRfRlJFRV9QRwkJCShTRElPX0xPQ0FMX09GRlNFVCAmIzQzOyAweDAwMUUpCiAvKiBGcmVlIFR4IEJ1ZmZlciBQYWdlICovCiAjZGVmaW5lIFJFR19TRElPX0ZSRUVfVFhQRwkJCShTRElPX0xPQ0FMX09GRlNFVCAmIzQzOyAweDAwMjApCiYjNDM7I2RlZmluZSBCSVRfRlJFRV9UWFBHX0hJR0gJCQlHRU5NQVNLKDcsIDApCiYjNDM7I2RlZmluZSBCSVRfRlJFRV9UWFBHX05PUk1BTAkJCUdFTk1BU0soMTUsIDgpCiYjNDM7I2RlZmluZSBCSVRfRlJFRV9UWFBHX0xPVwkJCUdFTk1BU0soMjMsIDE2KQomIzQzOyNkZWZpbmUgQklUX0ZSRUVfVFhQR19QVUIJCQlHRU5NQVNLKDMxLCAyNCkKIC8qIEhDSSBDdXJyZW50IFBvd2VyIE1vZGUgMSAqLwogI2RlZmluZSBSRUdfU0RJT19IQ1BXTTEJCQkJKFNESU9fTE9DQUxfT0ZGU0VUICYjNDM7IDB4MDAyNCkKIC8qIEhDSSBDdXJyZW50IFBvd2VyIE1vZGUgMiAqLwpAQCAtMTQzLDcgJiM0MzsxNTYsNyBAQCBzdHJ1Y3QgcnR3X3NkaW9fdHhfZGF0YSB7CiB9OwogCiBzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhIHsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKJiM0MzsJc3RydWN0IGRlbGF5ZWRfd29yayB3b3JrOwogCXN0cnVjdCBydHdfZGV2ICpydHdkZXY7CiB9OwogCkBAIC0xNTksNiAmIzQzOzE3MiwxMyBAQCBzdHJ1Y3QgcnR3X3NkaW8gewogCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp0eHdxOwogCXN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEgKnR4X2hhbmRsZXJfZGF0YTsKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHR4X3F1ZXVlW1JUS19NQVhfVFhfUVVFVUVfTlVNXTsKJiM0MzsJYm9vbCBxdWV1ZV9zdG9wcGVkW1JUS19NQVhfVFhfUVVFVUVfTlVNXTsKJiM0MzsKJiM0MzsJYXRvbWljX3QgZnJlZV9wZ19oaWdoOwomIzQzOwlhdG9taWNfdCBmcmVlX3BnX25vcm1hbDsKJiM0MzsJYXRvbWljX3QgZnJlZV9wZ19sb3c7CiYjNDM7CWF0b21pY190IGZyZWVfcGdfcHViOwomIzQzOwlhdG9taWNfdCB0eF9vcXRfZnJlZTsKIH07CiAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBydHdfc2Rpb19wbV9vcHM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3R4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3R4LmMKaW5kZXggODc4NmJiYjQyMWMyYi4uNGUxMTBhNDU3ZTcxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC90eC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvdHguYwpAQCAtMjA4LDggJiM0MzsyMDgsOSBAQCB2b2lkIHJ0d190eF9yZXBvcnRfZW5xdWV1ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBzbikKIAlfX3NrYl9xdWV1ZV90YWlsKCZhbXA7dHhfcmVwb3J0LSZndDtxdWV1ZSwgc2tiKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7dHhfcmVwb3J0LSZndDtxX2xvY2ssIGZsYWdzKTsKIAotCWlmIChydHdkZXYtJmd0O2NoaXAtJmd0O2lkID09IFJUV19DSElQX1RZUEVfODcyM0QgJmFtcDsmYW1wOwotCSAgICBydHdkZXYtJmd0O2hjaS50eXBlID09IFJUV19IQ0lfVFlQRV9VU0IpCiYjNDM7CWlmICgocnR3ZGV2LSZndDtjaGlwLSZndDtpZCA9PSBSVFdfQ0hJUF9UWVBFXzg3MjNEICZhbXA7JmFtcDsKJiM0MzsJICAgICBydHdkZXYtJmd0O2hjaS50eXBlID09IFJUV19IQ0lfVFlQRV9VU0IpIHx8CiYjNDM7CSAgICBydHdfaXNfODcyM2JzKHJ0d2RldikpCiAJCXRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKDI1MDApOwogCiAJbW9kX3RpbWVyKCZhbXA7dHhfcmVwb3J0LSZndDtwdXJnZV90aW1lciwgamlmZmllcyAmIzQzOyB0aW1lb3V0KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2MTcKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA0NTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqU0RJTyBEcml2ZXIgUGF0Y2ggRXZhbHVhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBzZXJpZXMgZm9yIHRoZSBgcnR3ODhgIGRyaXZlciwgc3BlY2lmaWNhbGx5IGFkZGluZyBzdXBwb3J0IGZvciBSVEw4NzIzQlMgU0RJTy4gVGhpcyBoaXRzIHF1aXRlIGEgZmV3IGZpbGVzOiBgZncuY2AsIGBmdy5oYCwgYG1haW4uaGAsIGByeC5jYCwgYHNkaW8uY2AsIGBzZGlvLmhgLCBhbmQgYHR4LmNgLiBUaGF0JiMzOTtzIGEgd2lyZWxlc3MgZHJpdmVyIGZvciBSZWFsdGVrIDgwMi4xMWFjLzgwMi4xMW4gZGV2aWNlcywgc28gaXQmIzM5O3MgYSBjcml0aWNhbCBwYXJ0IG9mIHRoZSB3aXJlbGVzcyBzdGFjaywgYW5kIHRoZSBjaGFuZ2VzIGFyZSBmb2N1c2VkIG9uIHRoZSBTRElPIGludGVyZmFjZSBhbmQgZmlybXdhcmUgaGFuZGxpbmcsIHBhcnRpY3VsYXJseSBhcm91bmQgYHJ0d19pc184NzIzYnMocnR3ZGV2KWAuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzLCBjYW4gd2UgZnV6eiB0aGlzPyBJcyB0aGlzIGV2ZW4gcmVhY2hhYmxlIHdpdGhpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PwoKU0RJTyBpcyBhIHRyaWNreSBvbmUuIFN0YW5kYXJkIFFFTVUgZG9lc24mIzM5O3QgdHlwaWNhbGx5IGVtdWxhdGUgU0RJTyBkZXZpY2VzLiBBcmUgdGhlcmUgYW55IHNvZnR3YXJlIGVtdWxhdGlvbnMgZm9yIFNESU8gb3IgTU1DIHRoYXQgd2UgY291bGQgbGV2ZXJhZ2U/IEkgbmVlZCB0byB0aGluayB0aGlzIHRocm91Z2ggY2FyZWZ1bGx5LiBXYWl0LCBtYWM4MDIxMV9od3NpbSBlbXVsYXRlcyBtYWM4MDIxMSwgYnV0IHRoaXMgaXMgYSBzcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIsIHNvIGRvZXMgaXQgbWF0dGVyIHRoYXQgbWFjODAyMTEgaXMgZW11bGF0ZWQgaWYgdGhpcyBpcyB0aGUgaGFyZHdhcmUgZHJpdmVyIGl0c2VsZiAocnR3ODgpPyBDYW4gKnJ0dzg4KiBiZSBmdXp6ZWQ/CgpHZW5lcmFsbHksIEkga25vdyBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXJzLCBlc3BlY2lhbGx5IHRob3NlIGludGVyYWN0aW5nIHdpdGggU0RJTywgVVNCLCBvciBQQ0llLCB1c3VhbGx5IHJlcXVpcmUgYWN0dWFsIGhhcmR3YXJlIHVubGVzcyB0aGVyZSYjMzk7cyBhbiBlbXVsYXRvci4gVVNCIGRyaXZlcnMsIHdlIGNhbiBzb21ldGltZXMgZ2V0IGF3YXkgd2l0aCB1c2luZyBgZHVtbXlfaGNkYCBvciBgcmF3LWdhZGdldGAuIFBDSWUgZHJpdmVycyBhcmUgYSBuaWdodG1hcmUgaW4gdGhpcyBjYXNlLCBmdXp6aW5nIHRoZW0gaXMgdG91Z2ggdW5sZXNzIHRoZXJlJiMzOTtzIGEgc29mdHdhcmUgZW11bGF0aW9uLiBCdXQgd2hhdCBhYm91dCBTRElPPyBJcyB0aGVyZSBhIGR1bW15IFNESU8gaG9zdCBjb250cm9sbGVyIG91dCB0aGVyZSBzb21ld2hlcmU/IEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUgaXMgYW55IFNESU8gZnV6emluZyBzdXBwb3J0LCBvciBpZiB0aGlzIGV2ZW4gaXMgcmVhY2hhYmxlLgoKSSBuZWVkIHRvIGRvIGEgcXVpY2sgc2VhcmNoIGZvciBTRElPIGVtdWxhdGlvbiBvciwgc3BlY2lmaWNhbGx5LCB3aGV0aGVyIGBydHc4OGAgaXMgZnV6emVkIGF0IGFsbC4KCldhaXQgYSBzZWNvbmQuIFRoZSBwcm9tcHQgc2F5cywgJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOiAuLi4gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAuLi4gdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuJiMzNDsgT0ssIHNvIFNESU8gaXMgYSBoYXJkd2FyZSBidXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBrbm93IGlmIHRoaXMgaXMgZnV6YWJsZSEgTGV0JiMzOTtzIGNoZWNrIGlmIHRoZXJlJiMzOTtzIGEgd2F5IHRvIGZ1enogU0RJTyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2R1bW15X3NkaW8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNjM4CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIHN1bW1hcml6ZWQgYXMgcmVxdWVzdGVkOgoKKipBc3Nlc3NpbmcgdGhlIExhbmRzY2FwZSBmb3IgU0RJTyBIb3N0IEVtdWxhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlIGFyZSBhbnkgcmVhZGlseSBhdmFpbGFibGUgU0RJTyBob3N0IGVtdWxhdG9ycyBvdXQgdGhlcmUuIEJlZm9yZSBJIHN0YXJ0IGJ1aWxkaW5nIHNvbWV0aGluZyBmcm9tIHNjcmF0Y2gsIGl0IG1ha2VzIHNlbnNlIHRvIHNlZSB3aGF0JiMzOTtzIGFscmVhZHkgYmVlbiBjcmVhdGVkLiBUaGlzIGlzIGEgY29tbW9uIHN0YXJ0aW5nIHBvaW50IGZvciBhbnkgcHJvamVjdCwgaXNuJiMzOTt0IGl0PyBTYXZlcyB0aW1lLCBlbmVyZ3ksIGFuZCByZXNvdXJjZXMgdG8gc2VlIGlmIHNvbWVvbmUgZWxzZSBoYXMgYWxyZWFkeSB0YWNrbGVkIGEgc2ltaWxhciBjaGFsbGVuZ2UuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGF0JiMzOTtzIG91dCB0aGVyZSBzbyBJIGNhbiBkZXRlcm1pbmUgaWYgYW55IGV4aXN0aW5nIHNvbHV0aW9uIG1lZXRzIHRoZSByZXF1aXJlbWVudHMsIG9yLCBpZiBub3QsIHdoYXQgYXNwZWN0cyBtaWdodCBiZSBhcHBsaWNhYmxlLCBvciBhdCBsZWFzdCBzZXJ2ZSBhcyBhIHVzZWZ1bCBzdGFydGluZyBwb2ludCBmb3IgbXkgb3duIHdvcmsuIE15IGV4cGVyaWVuY2UgaW4gdGhpcyBmaWVsZCBoZWxwcyBtZSBhcHByZWNpYXRlIHRoYXQgZ29vZCBkZXNpZ24gcmVxdWlyZXMgYSBzb2xpZCBmb3VuZGF0aW9uIGluIHByaW9yIGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NkaW8uKmVtdWwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODY0CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIFJUVzg4IERyaXZlciBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gY29uZmlybSBpcyB3aGV0aGVyIGBydHc4OGAgaXMgKmFsc28qIGEgVVNCIGRyaXZlci4gVGhlIGNvZGUgSSYjMzk7bSBleGFtaW5pbmcgcmVmZXJlbmNlcyBgcnR3X2lzXzg3MjNicyhydHdkZXYpYCwgYW5kIHRoYXQgbWFjcm8gc2VlbXMgdG8gc3BlY2lmaWNhbGx5IHRhcmdldCB0aGUgU0RJTyBpbnRlcmZhY2Ugb2YgdGhlIFJUTDg3MjNCUyBjaGlwc2V0LiBUaGUgZGVmaW5pdGlvbiBjbGVhcmx5IGNoZWNrcyBmb3IgYm90aCB0aGUgY2hpcCBJRCAoYFJUV19DSElQX1RZUEVfODcyM0JgKSBhbmQgdGhlIEhDSSB0eXBlIGJlaW5nIFNESU8gKGBSVFdfSENJX1RZUEVfU0RJT2ApLgoKTm93LCB0aGF0JiMzOTtzIGludGVyZXN0aW5nIGJlY2F1c2UgSSBrbm93IHRoYXQgYHJ0dzg4YCBhY3R1YWxseSBzdXBwb3J0cyBVU0IsIFBDSSwgKmFuZCogU0RJTy4gU28gdGhlIHF1ZXN0aW9uIGJlY29tZXM6IENhbiB3ZSBmdXp6IHRoZSBTRElPIGludGVyZmFjZSBzcGVjaWZpY2FsbHkgd2l0aGluIHRoaXMgZHJpdmVyPyBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgU0RJTyBpbnRlcmZhY2VzIGFyZW4mIzM5O3QgdXN1YWxseSBpZGVhbCBjYW5kaWRhdGVzIGZvciBmdXp6aW5nIGluIHRoZSBrZXJuZWwuIFRoZSBtYWpvciBodXJkbGUgaXMgdGhlIGxhY2sgb2YgYSB2aXJ0dWFsIFNESU8gaG9zdCBjb250cm9sbGVyLCBhIGNvdW50ZXJwYXJ0IHRvIHNvbWV0aGluZyBsaWtlIGBkdW1teV9oY2RgIGZvciBVU0Igb3IgYHZoY2lgIGZvciBIQ0kuIFdpdGhvdXQgdGhpcywgY29uc3RydWN0aW5nIGFuZCBpbmplY3RpbmcgU0RJTyB0cmFmZmljIGluIGEgY29udHJvbGxlZCBlbnZpcm9ubWVudCBpcyBjaGFsbGVuZ2luZy4gU28gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBpZiB0aGVyZSBpcyBzb21lIGtpbmQgb2YgTU1DL1NESU8gZW11bGF0aW9uIHRoYXQgY291bGQgYmUgbGV2ZXJhZ2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW1jLiplbXVsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDM2MAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDMxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIFNESU8gRW11bGF0aW9uIEZlYXNpYmlsaXR5KioKCk9rYXksIHNvIFFFTVUgaGFzIFNEIGNhcmQgZW11bGF0aW9uLCBzcGVjaWZpY2FsbHkgdGhlIHNkaGNpIGludGVyZmFjZS4gTXkgaW5pdGlhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoYXQgZXh0ZW5kcyB0byBlbXVsYXRpbmcgKmFyYml0cmFyeSogU0RJTyBkZXZpY2VzLiBUaGUgc2hvcnQgYW5zd2VyLCBJIGJlbGlldmUsIGlzIG5vLiBRRU1VIGhhbmRsZXMgU0QgY2FyZHMsIGJ1dCBpdCBkb2VzbiYjMzk7dCBnZW5lcmFsbHkgcHJvdmlkZSBnZW5lcmljIFNESU8gZGV2aWNlIGVtdWxhdGlvbiB1bmxlc3MgYSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBpcyBidWlsdCBpbi4KClNpbmNlIEkgaGF2ZW4mIzM5O3QgY29tZSBhY3Jvc3MgUUVNVSBzcGVjaWZpY2FsbHkgZW11bGF0aW5nIHRoaXMgcGFydGljdWxhciBSZWFsdGVrIFNESU8gV2lGaSBjYXJkLCBJJiMzOTttIGFzc3VtaW5nIHRoZSByZWxldmFudCBjb2RlIHBhdGhzLCBzcGVjaWZpY2FsbHkgdGhlIG9uZXMgaW4gYHJ0dzg4L3NkaW8uY2AgdGhhdCBhcmUgdGllZCB0byBgUlRXX0hDSV9UWVBFX1NESU9gLCBhcmUgZWZmZWN0aXZlbHkgdW5yZWFjaGFibGUgd2hlbiBydW5uaW5nIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciwgb2YgY291cnNlLCBRRU1VLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhpcy4gSSBuZWVkIHRvIG1ha2UgKmFic29sdXRlbHkqIHN1cmUgdGhlcmUmIzM5O3Mgbm8gd2F5IHRvIHRyaWdnZXIgdGhvc2UgZnVuY3Rpb25zLiBJIHNlZSB0aGUgcGF0Y2ggbW9kaWZpZXMgc2V2ZXJhbCBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgZnVuY3Rpb25zOiBgcnR3X2Z3X2MyaF9jbWRfaGFuZGxlYCwgYHJ0d19md19jMmhfY21kX3J4X2lycXNhZmVgLCBgcnR3X3J4X2ZpbGxfcnhfc3RhdHVzYCwgYHJ0d19zZGlvX3JlYWRfcG9ydGAsIGFuZCBgcnR3X3NkaW9fd3JpdGVfcG9ydGAsIGFtb25nIG90aGVycy4gVGhlc2UgYXJlICphbGwqIGxvdy1sZXZlbCBoYXJkd2FyZSBpbnRlcmFjdGlvbiBwb2ludHMuIFRoaXMgcmVpbmZvcmNlcyBteSBpbml0aWFsIGFzc2Vzc21lbnQuCgpUaGUgYmlnZ2VyIHF1ZXN0aW9uIGlzIGlmIHN5emthbGxlciBjYW4gcmVhY2ggdGhlc2UsIGFzIEkgaGF2ZSBiZWVuIHJldmlld2luZyBzeXprYWxsZXIgcmVwb3J0cy4gSSBrbm93IHN5emthbGxlciBjYW4gZnV6eiBVU0IgZGV2aWNlcyB1c2luZyB0aGUgcmF3LWdhZGdldCBvciBkdW1teV9oY2QgaW50ZXJmYWNlcy4gSXQgY2FuIGFsc28gZnV6eiBtYWM4MDIxMSBkZXZpY2VzIHVzaW5nIG1hYzgwMjExX2h3c2ltIGFuZCB2aXJ0aW8gZGV2aWNlcy4gQnV0LCBhZ2FpbiwgbXkgd29ya2luZyBhc3N1bXB0aW9uIGlzIHRoYXQgaXQgKmNhbiYjMzk7dCogZnV6eiBTRElPIGRldmljZXMuIFRoZSBrZXJuZWwgbGFja3MgYSBnZW5lcmFsIFNESU8gZnV6emluZyBpbnRlcmZhY2UsIHVubGlrZSBVU0Igb3IgdGhlIG90aGVycy4KCkkmIzM5O20gZ29pbmcgdG8gZG91YmxlIGNoZWNrIHRoaXMgYW5kIGNvbmZpcm0gd2hldGhlciBvciBub3QgdGhlcmUmIzM5O3MgYW55IHN5emthbGxlciBzdXBwb3J0IGZvciBTRElPLiBJIGhhdmUgYSBodW5jaCwgYW5kIGl0JiMzOTtzIHRpbWUgdG8gdmVyaWZ5IGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N5el9zZGlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxNTMKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqQXNzZXNzaW5nIHRoZSBMYW5kc2NhcGUgZm9yIE1NQyBGdXp6aW5nIE9wcG9ydHVuaXRpZXMqKgoKT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQmIzM5O3MgdGFrZSBhIHF1aWNrIG1lbnRhbCBpbnZlbnRvcnkuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJiMzOTtzIGFueSBhY3RpdmUgTU1DIChNdWx0aU1lZGlhQ2FyZCkgZnV6emluZyBnb2luZyBvbiByaWdodCBub3cuIEl0JiMzOTtzIGEga2V5IGFyZWEgdG8gZXhwbG9yZSwgZ2l2ZW4gdGhlIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgYW5kIHdpZGVzcHJlYWQgdXNlIG9mIHRoZXNlIGRldmljZXMuIEkmIzM5O2xsIG5lZWQgdG8gY29uc2lkZXIgd2hhdCB0b29scyBhbmQgYXBwcm9hY2hlcyBhcmUgY3VycmVudGx5IGJlaW5nIGVtcGxveWVkLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIGdhcHMgb3IgdW5kZXItZXhwbG9yZWQgYXJlYXMgcmlwZSBmb3IgaW52ZXN0aWdhdGlvbi4gVGltZSB0byBzdGFydCB0aGUgZGVlcCBkaXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N5el9tbWMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTMyMwoJCQkJCQkJb3V0cHV0OiAxMDQKCQkJCQkJCXRob3VnaHRzOiA3NDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVW5yZWFjaGFibGUgQ29kZSBpbiBhIEZ1enppbmcgQ29udGV4dCoqCgpPa2F5LCBzbyB0aGUgc2l0dWF0aW9uIGlzIGNsZWFyLiBTeXprYWxsZXIgY2FuJiMzOTt0IGZ1enogU0RJTyBkZXZpY2VzLCBwZXJpb2QuIFRoYXQgbWVhbnMgYW55IGNoYW5nZXMgdG91Y2hpbmcgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jYCwgb3IgYW55IFNESU8tc3BlY2lmaWMgbG9naWMgd2l0aGluIGBmdy5jYCwgYHJ4LmNgLCBvciBldmVuIGB0eC5jYCBmb3IgdGhhdCBtYXR0ZXIsIGFyZSBlc3NlbnRpYWxseSBpbmFjY2Vzc2libGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhlIHByb21wdCBzcGVjaWZpY2FsbHkgY2FsbHMgb3V0IGNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHVzaW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIC0gbm8gVVNCIGdhZGdldCBvciBtYWM4MDIxMV9od3NpbSBoZXJlLiBUaGlzIGNsZWFybHkgZmFsbHMgdW5kZXIgdGhhdCBjYXRlZ29yeS4KCkxldCBtZSBqdXN0IHF1aWNrbHkgcmV2aWV3IHRoZSBjaGFuZ2VzIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gVGhlIGtleSBmdW5jdGlvbiBpcyBgcnR3X2lzXzg3MjNic2AsIHdoaWNoIGJlY29tZXMgdHJ1ZSB3aGVuIHRoZSBjaGlwIGlzIGFuIDg3MjNCIGFuZCB0aGUgSENJIHR5cGUgaXMgU0RJTy4KCiogICBJbiBgZncuY2AsIGEgY291cGxlIG9mIGNhc2VzIChDMkhcX1ZFTkRPUlxfVFhcX1JQVCBhbmQgQzJIXF9XTEFOXF9SRk9OKSBub3cgdHJpZ2dlciBhIGRpZmZlcmVudCBoYW5kbGVyLCBgcnR3X3R4X3JlcG9ydF9oYW5kbGVgLCAqb25seSogaWYgYHJ0d19pc184NzIzYnMocnR3ZGV2KWAgaXMgdHJ1ZS4gU28gaXQmIzM5O3MgdmVyeSBzcGVjaWZpYyB0byA4NzIzQlMgYW5kIFNESU8uCiogICBgcnguY2AgaGFzIGEgY29uZGl0aW9uIHRoYXQgZ2V0cyBleHRlbmRlZCBmcm9tIFJUV1xfQ0hJUFxfVFlQRVxfODcwM0IgKHdoaWNoIHdhcyBhbHJlYWR5IHRoZXJlKSB0byBpbmNsdWRlIGBydHdfaXNfODcyM2JzKHJ0d2RldilgLiBUaGUgYWRkZWQgY29uZGl0aW9uIGlzIHNwZWNpZmljYWxseSBTRElPLCBmb3IgdGhpcyBjaGlwLgoqICAgYHNkaW8uY2AgaGFzIGEgbG90IG9mIGRpcmVjdCBTRElPLXNwZWNpZmljIGNoYW5nZXMsIHdoaWNoIGlzIGEgYmlnIHJlZCBmbGFnLiBPYnZpb3VzLCBidXQgc3RpbGwgd29ydGggbWVudGlvbmluZy4KKiAgIEluIGB0eC5jYCwgYW4gYE9SYCBjb25kaXRpb24gaGFzIGJlZW4gYWRkZWQsIGFsbG93aW5nIGZvciB0aGUgODcyM0JTLgoKQmFzaWNhbGx5LCBhbGwgZnVuY3Rpb25hbCBjaGFuZ2VzIGJvaWwgZG93biB0byBgcnR3X2lzXzg3MjNicyhydHdkZXYpYCwgd2hpY2ggbmVlZHMgYFJUV19IQ0lfVFlQRV9TRElPYC4gU2luY2UgUUVNVSwgYW5kIHRoZXJlZm9yZSBzeXprYWxsZXIsIGRvZXNuJiMzOTt0IGVtdWxhdGUgU0RJTyBoYXJkd2FyZSwgbm9yIGlzIHRoZXJlIGEgc29mdHdhcmUgU0RJTyBmcmFtZXdvcmsgb2YgdGhhdCBzb3J0LCB0aGlzIGNvZGUgaXMgY29tcGxldGVseSB1bnJlYWNoYWJsZSBpbiBhIGZ1enppbmcgY29udGV4dC4KClRoZXJlZm9yZSwgdGhlIG9ubHkgcmVhc29uYWJsZSBjb25jbHVzaW9uIGlzIHRoYXQgSSBuZWVkIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIHJhdGlvbmFsZSBpcyBzdHJhaWdodGZvcndhcmQ6IHRoaXMgcGF0Y2ggKm9ubHkqIG1vZGlmaWVzIGNvZGUgc3BlY2lmaWMgdG8gYW4gU0RJTyBXaUZpIGNoaXAgKHRoZSBSVEw4NzIzQlMpLCB3aGljaCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSBhbmQgaXMgc2ltcGx5IG5vdCBhY2Nlc3NpYmxlIG9yIGVtdWxhdGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBhbmQgdGh1cyBpbXBvc3NpYmxlIHRvIHJlYWNoIHdpdGggc3l6a2FsbGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGV4Y2x1c2l2ZWx5IGFkZHMgc3VwcG9ydCBhbmQgZml4ZXMgZm9yIHRoZSBSZWFsdGVrIFJUTDg3MjNCUyBTRElPIFdpRmkgY2hpcC4gU0RJTyBkZXZpY2VzIHJlcXVpcmUgcGh5c2ljYWwgaGFyZHdhcmUgb3Igc3BlY2lmaWMgUUVNVSBtYWNoaW5lIGVtdWxhdGlvbiB3aGljaCBpcyBub3QgYXZhaWxhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiBUaGVyZSBpcyBubyBzb2Z0d2FyZSBTRElPIGVtdWxhdGlvbiBmcmFtZXdvcmsgKGxpa2UgZHVtbXlfaGNkIGZvciBVU0IpIHRvIHJlYWNoIHRoZXNlIGNvZGUgcGF0aHMgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBleGNsdXNpdmVseSBhZGRzIHN1cHBvcnQgYW5kIGZpeGVzIGZvciB0aGUgUmVhbHRlayBSVEw4NzIzQlMgU0RJTyBXaUZpIGNoaXAuIFNESU8gZGV2aWNlcyByZXF1aXJlIHBoeXNpY2FsIGhhcmR3YXJlIG9yIHNwZWNpZmljIFFFTVUgbWFjaGluZSBlbXVsYXRpb24gd2hpY2ggaXMgbm90IGF2YWlsYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4gVGhlcmUgaXMgbm8gc29mdHdhcmUgU0RJTyBlbXVsYXRpb24gZnJhbWV3b3JrIChsaWtlIGR1bW15X2hjZCBmb3IgVVNCKSB0byByZWFjaCB0aGVzZSBjb2RlIHBhdGhzIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6NTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjUxOjUwLjcwMjcyMTYxM1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MDE5MjEzODM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZXhjbHVzaXZlbHkgYWRkcyBzdXBwb3J0IGFuZCBmaXhlcyBmb3IgdGhlIFJlYWx0ZWsgUlRMODcyM0JTIFNESU8gV2lGaSBjaGlwLiBTRElPIGRldmljZXMgcmVxdWlyZSBwaHlzaWNhbCBoYXJkd2FyZSBvciBzcGVjaWZpYyBRRU1VIG1hY2hpbmUgZW11bGF0aW9uIHdoaWNoIGlzIG5vdCBhdmFpbGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuIFRoZXJlIGlzIG5vIHNvZnR3YXJlIFNESU8gZW11bGF0aW9uIGZyYW1ld29yayAobGlrZSBkdW1teV9oY2QgZm9yIFVTQikgdG8gcmVhY2ggdGhlc2UgY29kZSBwYXRocyBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjUxOjUwLjcwMjcyOTI0M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA5NjkwMDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYTQxODI1NjE3ODQ0ZWE1MzkxZjA1Y2U0NDhmODY5Mzk1YjBlMGNhOFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAxMSAwOTo1MTo0OSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2Z3LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2Z3LmNcXG5pbmRleCA5NDVmZWRjZDM3NWI2Li5jODVjMGUzZTYwYTk3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvZncuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvZncuY1xcbkBAIC0zMTcsNiArMzE3LDE1IEBAIHZvaWQgcnR3X2Z3X2MyaF9jbWRfaGFuZGxlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdGNhc2UgQzJIX0NDWF9UWF9SUFQ6XFxuIFxcdFxcdHJ0d190eF9yZXBvcnRfaGFuZGxlKHJ0d2Rldiwgc2tiLCBDMkhfQ0NYX1RYX1JQVCk7XFxuIFxcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEMySF9WRU5ET1JfVFhfUlBUOlxcbitcXHRjYXNlIEMySF9XTEFOX1JGT046XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFRoZSBSVEw4NzIzQlMgZmlybXdhcmUgcmVwb3J0cyBtYW5hZ2VtZW50IFRYIHRocm91Z2ggdGhlc2VcXG4rXFx0XFx0ICogdHdvIGV2ZW50cyBpbnN0ZWFkLCB1c2luZyB0aGUgc2FtZSBwYXlsb2FkIGxheW91dC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpXFxuK1xcdFxcdFxcdHJ0d190eF9yZXBvcnRfaGFuZGxlKHJ0d2Rldiwgc2tiLCBDMkhfQ0NYX1RYX1JQVCk7XFxuK1xcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIEMySF9CVF9JTkZPOlxcbiBcXHRcXHRydHdfY29leF9idF9pbmZvX25vdGlmeShydHdkZXYsIGMyaC1cXHUwMDNlcGF5bG9hZCwgbGVuKTtcXG4gXFx0XFx0YnJlYWs7XFxuQEAgLTM2NSw2ICszNzQsMTcgQEAgdm9pZCBydHdfZndfYzJoX2NtZF9yeF9pcnFzYWZlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHUzMiBwa3Rfb2Zmc2V0LFxcbiBcXHRcXHRydHdfY29leF9pbmZvX3Jlc3BvbnNlKHJ0d2Rldiwgc2tiKTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgQzJIX1dMQU5fUkZPTjpcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogT24gODcyM0JTIFNESU8gd2l0aCB2NDEgZmlybXdhcmUsIEMySCAweDMyIGNhcnJpZXMgYSBzY2FuIFRYXFxuK1xcdFxcdCAqIHJlcG9ydCwgbm90IGEgV0xBTl9SRk9OIGV2ZW50OiBkZWZlciBpdCB0b1xcbitcXHRcXHQgKiBydHdfZndfYzJoX2NtZF9oYW5kbGUoKS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpIHtcXG4rXFx0XFx0XFx0KigodTMyICopc2tiLVxcdTAwM2VjYikgPSBwa3Rfb2Zmc2V0O1xcbitcXHRcXHRcXHRza2JfcXVldWVfdGFpbChcXHUwMDI2cnR3ZGV2LVxcdTAwM2VjMmhfcXVldWUsIHNrYik7XFxuK1xcdFxcdFxcdGllZWU4MDIxMV9xdWV1ZV93b3JrKHJ0d2Rldi1cXHUwMDNlaHcsIFxcdTAwMjZydHdkZXYtXFx1MDAzZWMyaF93b3JrKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4gXFx0XFx0Y29tcGxldGUoXFx1MDAyNnJ0d2Rldi1cXHUwMDNlbHBzX2xlYXZlX2NoZWNrKTtcXG4gXFx0XFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcXG4gXFx0XFx0YnJlYWs7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvZncuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvZncuaFxcbmluZGV4IDQ4YWQ5Y2VhYjZlYTEuLmJkZGE3OGRjNjQ2MmEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9mdy5oXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9mdy5oXFxuQEAgLTU0LDYgKzU0LDExIEBAIGVudW0gcnR3X2MyaF9jbWRfaWQge1xcbiBcXHRDMkhfQlRfTVBfSU5GTyA9IDB4MGIsXFxuIFxcdEMySF9CVF9ISURfSU5GTyA9IDB4NDUsXFxuIFxcdEMySF9SQV9SUFQgPSAweDBjLFxcbitcXHQvKlxcbitcXHQgKiA4NzIzQlMgU0RJTyB2ZW5kb3IgdjQxIGZpcm13YXJlIG1hbmFnZW1lbnQgVFggcmVwb3J0ICgweDMyIGlzXFxuK1xcdCAqIHJlcG9ydGVkIGFzIEMySF9XTEFOX1JGT04sIGhhbmRsZWQgcGVyLWNoaXAgaW4gdGhlIEMySCBkaXNwYXRjaCkuXFxuK1xcdCAqL1xcbitcXHRDMkhfVkVORE9SX1RYX1JQVCA9IDB4MTIsXFxuIFxcdEMySF9IV19GRUFUVVJFX1JFUE9SVCA9IDB4MTksXFxuIFxcdEMySF9XTEFOX0lORk8gPSAweDI3LFxcbiBcXHRDMkhfV0xBTl9SRk9OID0gMHgzMixcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaFxcbmluZGV4IGM2ZTk4MWJhNzk4NjguLjhmODZmN2MxMmRlNWEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmhcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaFxcbkBAIC0xOTQsNiArMTk0LDcgQEAgZW51bSBydHdfY2hpcF90eXBlIHtcXG4gXFx0UlRXX0NISVBfVFlQRV84NzIzRCxcXG4gXFx0UlRXX0NISVBfVFlQRV84ODIxQyxcXG4gXFx0UlRXX0NISVBfVFlQRV84NzAzQixcXG4rXFx0UlRXX0NISVBfVFlQRV84NzIzQixcXG4gXFx0UlRXX0NISVBfVFlQRV84ODIxQSxcXG4gXFx0UlRXX0NISVBfVFlQRV84ODEyQSxcXG4gXFx0UlRXX0NISVBfVFlQRV84ODE0QSxcXG5AQCAtMjE5NCw2ICsyMTk1LDEyIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBydHdfY2hpcF9oYXNfdHhfc3RiYyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbiBcXHRyZXR1cm4gcnR3ZGV2LVxcdTAwM2VjaGlwLVxcdTAwM2V0eF9zdGJjO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIGJvb2wgcnR3X2lzXzg3MjNicyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbit7XFxuK1xcdHJldHVybiBydHdkZXYtXFx1MDAzZWNoaXAtXFx1MDAzZWlkID09IFJUV19DSElQX1RZUEVfODcyM0IgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAgIHJ0d2Rldi1cXHUwMDNlaGNpLnR5cGUgPT0gUlRXX0hDSV9UWVBFX1NESU87XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgdTggcnR3X2FjcXVpcmVfbWFjaWQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIG1hY19pZDtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9yeC5jXFxuaW5kZXggMDFmZDI5OWFiYjdmZS4uYTkzNjFlZjRiOTNjMCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J4LmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J4LmNcXG5AQCAtMjUzLDEwICsyNTMsMTIgQEAgc3RhdGljIHZvaWQgcnR3X3J4X2ZpbGxfcnhfc3RhdHVzKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXFxuIFxcbiBcXHRydHdfcnhfYWRkcl9tYXRjaChydHdkZXYsIHBrdF9zdGF0LCBoZHIpO1xcbiBcXG4tXFx0LyogUnRsODcyM2NzIGRyaXZlciBjaGVja3MgZm9yIHNpemUgXFx1MDAzYyAxNCBvciBzaXplIFxcdTAwM2UgODE5MiBhbmRcXG4tXFx0ICogc2ltcGx5IGRyb3BzIHRoZSBwYWNrZXQuXFxuK1xcdC8qXFxuK1xcdCAqIFJ0bDg3MjNjcyBhbmQgcnRsODcyM2JzIGRyaXZlcnMgY2hlY2sgZm9yIHNpemUgXFx1MDAzYyAxNCBvciBzaXplIFxcdTAwM2UgODE5MlxcbitcXHQgKiBhbmQgc2ltcGx5IGRyb3AgdGhlIHBhY2tldC5cXG4gXFx0ICovXFxuLVxcdGlmIChydHdkZXYtXFx1MDAzZWNoaXAtXFx1MDAzZWlkID09IFJUV19DSElQX1RZUEVfODcwM0IgXFx1MDAyNlxcdTAwMjYgcGt0X3N0YXQtXFx1MDAzZXBrdF9sZW4gPT0gMCkge1xcbitcXHRpZiAoKHJ0d2Rldi1cXHUwMDNlY2hpcC1cXHUwMDNlaWQgPT0gUlRXX0NISVBfVFlQRV84NzAzQiB8fCBydHdfaXNfODcyM2JzKHJ0d2RldikpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBwa3Rfc3RhdC1cXHUwMDNlcGt0X2xlbiA9PSAwKSB7XFxuIFxcdFxcdHJ4X3N0YXR1cy1cXHUwMDNlZmxhZyB8PSBSWF9GTEFHX05PX1BTRFU7XFxuIFxcdFxcdHJ0d19kYmcocnR3ZGV2LCBSVFdfREJHX1JYLCBcXFwiemVybyBsZW5ndGggcGFja2V0XFxcIik7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uY1xcbmluZGV4IDViNDBkNzRiMTZlZTAuLmVkMWJlZDhlYTE0NGEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uY1xcbkBAIC0yMCw2ICsyMCwxNyBAQFxcbiAjaW5jbHVkZSBcXFwidHguaFxcXCJcXG4gXFxuICNkZWZpbmUgUlRXX1NESU9fSU5ESVJFQ1RfUldfUkVUUklFU1xcdFxcdFxcdDUwXFxuKyNkZWZpbmUgUlRXX1NESU9fT1FUX1RJTUVPVVRfTVNcXHRcXHRcXHRcXHQxMDAwXFxuK1xcbisvKlxcbisgKiA4NzIzQlMgU0RJTyBUWCBGSUZPIGJhY2stcHJlc3N1cmUgd2F0ZXJtYXJrczogc3RvcCB0aGUgbWFjODAyMTEgcXVldWUgb25jZVxcbisgKiB0aGUgcGVyLUFDIHNvZnR3YXJlIEZJRk8gZmlsbHMgcGFzdCB0aGUgaGlnaCB3YXRlcm1hcmssIGFuZCB3YWtlIGl0IGZyb20gdGhlXFxuKyAqIFRYIGRyYWluIHBhdGggb25jZSBpdCBmYWxscyBiYWNrIHRvIHRoZSBsb3cgb25lLiBCb3VuZHMgdGhlIHF1ZXVlaW5nIGxhdGVuY3lcXG4rICogdGhhdCBvdGhlcndpc2UgY2F1c2VzIHVwbGluayBidWZmZXJibG9hdCAvIGNvbmdlc3Rpb24gY29sbGFwc2UuXFxuKyAqL1xcbisjZGVmaW5lIFJUV19TRElPX1RYX0ZJRk9fSElXQVRFUlxcdFxcdFxcdDE2XFxuKyNkZWZpbmUgUlRXX1NESU9fVFhfRklGT19MT1dBVEVSXFx0XFx0XFx0OFxcbisjZGVmaW5lIFJUV19TRElPX1RYX1JFVFJZX0RFTEFZXFx0XFx0XFx0bXNlY3NfdG9famlmZmllcygxKVxcbiBcXG4gc3RhdGljIGJvb2wgcnR3X3NkaW9faXNfYnVzX2FkZHIodTMyIGFkZHIpXFxuIHtcXG5AQCAtNTQ4LDEyICs1NTksMTIyIEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9fcmVhZF9wb3J0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4ICpidWYsIHNpemVfdCBjb3VudClcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rLypcXG4rICogVGhlIGNhY2hlZCBmcmVlIHBhZ2UgY291bnRlcnMgYXJlIGEgZmFzdCBwYXRoIGhpbnQgb25seS4gVGhleSBhcmUgd3JpdHRlblxcbisgKiBmcm9tIHRoZSBzaW5nbGUgdGhyZWFkZWQgVFggd29yayBhbmQsIGZvciBIMkMgYW5kIHJlc2VydmVkIHBhZ2Ugd3JpdGVzLFxcbisgKiBmcm9tIHByb2Nlc3MgY29udGV4dCwgc28gdGhleSBhcmUgYXRvbWljX3Q7IHdoZW5ldmVyIHRoZXkgY2xhaW0gdGhlcmUgaXNcXG4rICogbm90IGVub3VnaCByb29tIHRoZXkgYXJlIHJlc3luY2hyb25pc2VkIGZyb20gdGhlIGNoaXAgYmVmb3JlIHRoZSBjYWxsZXJcXG4rICogZ2l2ZXMgdXAsIHdoaWNoIGFsc28gYWJzb3JicyBhIGxvc3QgdXBkYXRlLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgcnR3X3NkaW9fODcyM2JzX3N0b3JlX2ZyZWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgdTMyIGZyZWVfdHhwZylcXG4re1xcbitcXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVxcdTAwM2Vwcml2O1xcbitcXG4rXFx0YXRvbWljX3NldChcXHUwMDI2cnR3c2Rpby1cXHUwMDNlZnJlZV9wZ19oaWdoLFxcbitcXHRcXHQgICB1MzJfZ2V0X2JpdHMoZnJlZV90eHBnLCBCSVRfRlJFRV9UWFBHX0hJR0gpKTtcXG4rXFx0YXRvbWljX3NldChcXHUwMDI2cnR3c2Rpby1cXHUwMDNlZnJlZV9wZ19ub3JtYWwsXFxuK1xcdFxcdCAgIHUzMl9nZXRfYml0cyhmcmVlX3R4cGcsIEJJVF9GUkVFX1RYUEdfTk9STUFMKSk7XFxuK1xcdGF0b21pY19zZXQoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZWZyZWVfcGdfbG93LFxcbitcXHRcXHQgICB1MzJfZ2V0X2JpdHMoZnJlZV90eHBnLCBCSVRfRlJFRV9UWFBHX0xPVykpO1xcbitcXHRhdG9taWNfc2V0KFxcdTAwMjZydHdzZGlvLVxcdTAwM2VmcmVlX3BnX3B1YixcXG4rXFx0XFx0ICAgdTMyX2dldF9iaXRzKGZyZWVfdHhwZywgQklUX0ZSRUVfVFhQR19QVUIpKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcnR3X3NkaW9fODcyM2JzX2luaXRfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cXHUwMDNlcHJpdjtcXG4rXFx0Y29uc3Qgc3RydWN0IHJ0d19wYWdlX3RhYmxlICpwZ190Ymw7XFxuK1xcdHUzMiBmcmVlX3R4cGc7XFxuK1xcdHUxNiBwdWJxX251bTtcXG4rXFxuK1xcdGZyZWVfdHhwZyA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19GUkVFX1RYUEcpO1xcbitcXHRpZiAoZnJlZV90eHBnKSB7XFxuK1xcdFxcdHJ0d19zZGlvXzg3MjNic19zdG9yZV9mcmVlX3R4cGcocnR3ZGV2LCBmcmVlX3R4cGcpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRwZ190YmwgPSBcXHUwMDI2cnR3ZGV2LVxcdTAwM2VjaGlwLVxcdTAwM2VwYWdlX3RhYmxlWzBdO1xcbitcXHRcXHRwdWJxX251bSA9IHJ0d2Rldi1cXHUwMDNlZmlmby5hY3FfcGdfbnVtIC0gcGdfdGJsLVxcdTAwM2VocV9udW0gLVxcbitcXHRcXHRcXHQgICBwZ190YmwtXFx1MDAzZWxxX251bSAtIHBnX3RibC1cXHUwMDNlbnFfbnVtIC0gcGdfdGJsLVxcdTAwM2VleHFfbnVtIC1cXG4rXFx0XFx0XFx0ICAgcGdfdGJsLVxcdTAwM2VnYXBxX251bTtcXG4rXFxuK1xcdFxcdGF0b21pY19zZXQoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZWZyZWVfcGdfaGlnaCwgcGdfdGJsLVxcdTAwM2VocV9udW0pO1xcbitcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZydHdzZGlvLVxcdTAwM2VmcmVlX3BnX25vcm1hbCwgcGdfdGJsLVxcdTAwM2VucV9udW0pO1xcbitcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZydHdzZGlvLVxcdTAwM2VmcmVlX3BnX2xvdywgcGdfdGJsLVxcdTAwM2VscV9udW0pO1xcbitcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZydHdzZGlvLVxcdTAwM2VmcmVlX3BnX3B1YiwgcHVicV9udW0pO1xcbitcXHR9XFxuK1xcbitcXHRhdG9taWNfc2V0KFxcdTAwMjZydHdzZGlvLVxcdTAwM2V0eF9vcXRfZnJlZSxcXG4rXFx0XFx0ICAgcnR3X3JlYWQ4KHJ0d2RldiwgUkVHX1NESU9fT1FUX0ZSRUVfUEcpKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcnR3X3NkaW9fODcyM2JzX3N5bmNfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuK3tcXG4rXFx0dTMyIGZyZWVfdHhwZyA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19GUkVFX1RYUEcpO1xcbitcXG4rXFx0aWYgKGZyZWVfdHhwZylcXG4rXFx0XFx0cnR3X3NkaW9fODcyM2JzX3N0b3JlX2ZyZWVfdHhwZyhydHdkZXYsIGZyZWVfdHhwZyk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFN1bSBvZiB0aGUgcXVldWUncyBkZWRpY2F0ZWQgY291bnRlciBhbmQgdGhlIHB1YmxpYyBwb29sLCBjbGFtcGVkIGF0IHplcm86XFxuKyAqIGEgbG9zdCB1cGRhdGUgYmV0d2VlbiB0aGUgY2hlY2sgYmVsb3cgYW5kIHJ0d19zZGlvXzg3MjNic19jb25zdW1lX3R4cGcoKVxcbisgKiBjYW4gYnJpZWZseSBkcml2ZSBhIGNvdW50ZXIgbmVnYXRpdmUsIGFuZCBsZXR0aW5nIHRoYXQgd3JhcCB3b3VsZCBoaWRlIHRoZVxcbisgKiBzaG9ydGFnZSBpbnN0ZWFkIG9mIHRyaWdnZXJpbmcgYSByZXN5bmMgZnJvbSB0aGUgY2hpcC5cXG4rICovXFxuK3N0YXRpYyB1bnNpZ25lZCBpbnQgcnR3X3NkaW9fODcyM2JzX3BhZ2VzX2ZyZWUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIGF0b21pY190ICpkZWRpY2F0ZWQpXFxuK3tcXG4rXFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cXHUwMDNlcHJpdjtcXG4rXFx0aW50IGZyZWU7XFxuK1xcbitcXHRmcmVlID0gYXRvbWljX3JlYWQoZGVkaWNhdGVkKSArIGF0b21pY19yZWFkKFxcdTAwMjZydHdzZGlvLVxcdTAwM2VmcmVlX3BnX3B1Yik7XFxuK1xcbitcXHRyZXR1cm4gZnJlZSBcXHUwMDNlIDAgPyBmcmVlIDogMDtcXG4rfVxcbitcXG4rc3RhdGljIGF0b21pY190ICpydHdfc2Rpb184NzIzYnNfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IHF1ZXVlKVxcbit7XFxuK1xcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXFx1MDAzZXByaXY7XFxuK1xcbitcXHRzd2l0Y2ggKHF1ZXVlKSB7XFxuK1xcdGNhc2UgUlRXX1RYX1FVRVVFX1ZJOlxcbitcXHRcXHRyZXR1cm4gXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZWZyZWVfcGdfbm9ybWFsO1xcbitcXHRjYXNlIFJUV19UWF9RVUVVRV9CRTpcXG4rXFx0Y2FzZSBSVFdfVFhfUVVFVUVfQks6XFxuK1xcdFxcdHJldHVybiBcXHUwMDI2cnR3c2Rpby1cXHUwMDNlZnJlZV9wZ19sb3c7XFxuK1xcdGNhc2UgUlRXX1RYX1FVRVVFX0JDTjpcXG4rXFx0Y2FzZSBSVFdfVFhfUVVFVUVfSDJDOlxcbitcXHRjYXNlIFJUV19UWF9RVUVVRV9ISTA6XFxuK1xcdGNhc2UgUlRXX1RYX1FVRVVFX01HTVQ6XFxuK1xcdGNhc2UgUlRXX1RYX1FVRVVFX1ZPOlxcbitcXHRcXHRyZXR1cm4gXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZWZyZWVfcGdfaGlnaDtcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdH1cXG4rfVxcbitcXG4gc3RhdGljIGludCBydHdfc2Rpb19jaGVja19mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggcXVldWUsXFxuIFxcdFxcdFxcdFxcdCAgICBzaXplX3QgY291bnQpXFxuIHtcXG4gXFx0dW5zaWduZWQgaW50IHBhZ2VzX2ZyZWUsIHBhZ2VzX25lZWRlZDtcXG4gXFxuLVxcdGlmIChydHdfY2hpcF93Y3B1XzgwNTEocnR3ZGV2KSkge1xcbitcXHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKSB7XFxuK1xcdFxcdGF0b21pY190ICpkZWRpY2F0ZWQ7XFxuK1xcbitcXHRcXHRkZWRpY2F0ZWQgPSBydHdfc2Rpb184NzIzYnNfZnJlZV90eHBnKHJ0d2RldiwgcXVldWUpO1xcbitcXHRcXHRpZiAoIWRlZGljYXRlZCkge1xcbitcXHRcXHRcXHRydHdfd2FybihydHdkZXYsIFxcXCJVbmtub3duIG1hcHBpbmcgZm9yIHF1ZXVlICV1XFxcXG5cXFwiLCBxdWV1ZSk7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRwYWdlc19mcmVlID0gcnR3X3NkaW9fODcyM2JzX3BhZ2VzX2ZyZWUocnR3ZGV2LCBkZWRpY2F0ZWQpO1xcbitcXHRcXHRwYWdlc19uZWVkZWQgPSBESVZfUk9VTkRfVVAoY291bnQsIHJ0d2Rldi1cXHUwMDNlY2hpcC1cXHUwMDNlcGFnZV9zaXplKTtcXG4rXFx0XFx0aWYgKHBhZ2VzX25lZWRlZCBcXHUwMDNjPSBwYWdlc19mcmVlKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdFxcdHJ0d19zZGlvXzg3MjNic19zeW5jX2ZyZWVfdHhwZyhydHdkZXYpO1xcbitcXHRcXHRwYWdlc19mcmVlID0gcnR3X3NkaW9fODcyM2JzX3BhZ2VzX2ZyZWUocnR3ZGV2LCBkZWRpY2F0ZWQpO1xcbitcXHR9IGVsc2UgaWYgKHJ0d19jaGlwX3djcHVfODA1MShydHdkZXYpKSB7XFxuIFxcdFxcdHUzMiBmcmVlX3R4cGc7XFxuIFxcbiBcXHRcXHRmcmVlX3R4cGcgPSBydHdfc2Rpb19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19GUkVFX1RYUEcpO1xcbkBAIC02MzIsNDQgKzc1MywxMjMgQEAgc3RhdGljIGludCBydHdfc2Rpb19jaGVja19mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggcXVldWUsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IHJ0d19zZGlvXzg3MjNic193YWl0X3R4X29xdChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXFx1MDAzZXByaXY7XFxuK1xcdHU4IGZyZWU7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0aWYgKGF0b21pY19hZGRfdW5sZXNzKFxcdTAwMjZydHdzZGlvLVxcdTAwM2V0eF9vcXRfZnJlZSwgLTEsIDApKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBSVFdfU0RJT19PUVRfVElNRU9VVF9NUzsgaSsrKSB7XFxuK1xcdFxcdGZyZWUgPSBydHdfcmVhZDgocnR3ZGV2LCBSRUdfU0RJT19PUVRfRlJFRV9QRyk7XFxuK1xcdFxcdGlmIChmcmVlKSB7XFxuK1xcdFxcdFxcdGF0b21pY19zZXQoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZXR4X29xdF9mcmVlLCBmcmVlIC0gMSk7XFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHRcXHR9XFxuK1xcdFxcdHVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIC1FQlVTWTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcnR3X3NkaW9fODcyM2JzX2NvbnN1bWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCBxdWV1ZSxcXG4rXFx0XFx0XFx0XFx0XFx0IHVuc2lnbmVkIGludCBwYWdlcylcXG4re1xcbitcXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVxcdTAwM2Vwcml2O1xcbitcXHRhdG9taWNfdCAqZGVkaWNhdGVkO1xcbitcXHR1bnNpZ25lZCBpbnQgdGFrZW47XFxuK1xcdGludCBmcmVlO1xcbitcXG4rXFx0ZGVkaWNhdGVkID0gcnR3X3NkaW9fODcyM2JzX2ZyZWVfdHhwZyhydHdkZXYsIHF1ZXVlKTtcXG4rXFx0aWYgKCFkZWRpY2F0ZWQpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGZyZWUgPSBhdG9taWNfcmVhZChkZWRpY2F0ZWQpO1xcbitcXHR0YWtlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgcGFnZXMsIGZyZWUgXFx1MDAzZSAwID8gZnJlZSA6IDApO1xcbitcXHRhdG9taWNfc3ViKHRha2VuLCBkZWRpY2F0ZWQpO1xcbitcXG4rXFx0cGFnZXMgLT0gdGFrZW47XFxuK1xcdGlmIChwYWdlcyBcXHUwMDI2XFx1MDAyNiBhdG9taWNfc3ViX3JldHVybihwYWdlcywgXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZWZyZWVfcGdfcHViKSBcXHUwMDNjIDApXFxuK1xcdFxcdGF0b21pY19zZXQoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZWZyZWVfcGdfcHViLCAwKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBydHdfc2Rpb193cml0ZV9wb3J0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdCAgICAgICBlbnVtIHJ0d190eF9xdWV1ZV90eXBlIHF1ZXVlKVxcbiB7XFxuIFxcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXFx1MDAzZXByaXY7XFxuK1xcdGJvb2wgcnRsODcyM2JzID0gcnR3X2lzXzg3MjNicyhydHdkZXYpO1xcbitcXHR1bnNpZ25lZCBpbnQgb3JpZ19sZW4gPSBza2ItXFx1MDAzZWxlbjtcXG4rXFx0dW5zaWduZWQgaW50IHBhZ2VzO1xcbitcXHRzaXplX3Qgd3JpdGVfc2l6ZTtcXG4gXFx0Ym9vbCBidXNfY2xhaW07XFxuIFxcdHNpemVfdCB0eHNpemU7XFxuIFxcdHUzMiB0eGFkZHI7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHR0eGFkZHIgPSBydHdfc2Rpb19nZXRfdHhfYWRkcihydHdkZXYsIHNrYi1cXHUwMDNlbGVuLCBxdWV1ZSk7XFxuLVxcdGlmICghdHhhZGRyKVxcbi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0aWYgKHJ0bDg3MjNicykge1xcbitcXHRcXHR0eHNpemUgPSByb3VuZF91cChvcmlnX2xlbiwgNCk7XFxuK1xcdFxcdHdyaXRlX3NpemUgPSB0eHNpemUgXFx1MDAzZSBSVFdfU0RJT19CTE9DS19TSVpFID9cXG4rXFx0XFx0XFx0ICAgICByb3VuZF91cCh0eHNpemUsIFJUV19TRElPX0JMT0NLX1NJWkUpIDogdHhzaXplO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHR0eHNpemUgPSBzZGlvX2FsaWduX3NpemUocnR3c2Rpby1cXHUwMDNlc2Rpb19mdW5jLCBvcmlnX2xlbik7XFxuK1xcdFxcdHdyaXRlX3NpemUgPSB0eHNpemU7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICh3cml0ZV9zaXplIFxcdTAwM2Ugb3JpZ19sZW4pIHtcXG4rXFx0XFx0dW5zaWduZWQgaW50IHBhZGRpbmcgPSB3cml0ZV9zaXplIC0gb3JpZ19sZW47XFxuIFxcbi1cXHR0eHNpemUgPSBzZGlvX2FsaWduX3NpemUocnR3c2Rpby1cXHUwMDNlc2Rpb19mdW5jLCBza2ItXFx1MDAzZWxlbik7XFxuK1xcdFxcdGlmIChza2JfdGFpbHJvb20oc2tiKSBcXHUwMDNjIHBhZGRpbmcpIHtcXG4rXFx0XFx0XFx0cmV0ID0gcHNrYl9leHBhbmRfaGVhZChza2IsIDAsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBwYWRkaW5nIC0gc2tiX3RhaWxyb29tKHNrYiksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBHRlBfS0VSTkVMKTtcXG4rXFx0XFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0fVxcbitcXHRcXHRza2JfcHV0X3plcm8oc2tiLCBwYWRkaW5nKTtcXG4rXFx0fVxcbitcXG4rXFx0dHhhZGRyID0gcnR3X3NkaW9fZ2V0X3R4X2FkZHIocnR3ZGV2LCB0eHNpemUsIHF1ZXVlKTtcXG4rXFx0aWYgKCF0eGFkZHIpIHtcXG4rXFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4rXFx0XFx0Z290byBvdXRfdHJpbTtcXG4rXFx0fVxcbiBcXG4gXFx0cmV0ID0gcnR3X3NkaW9fY2hlY2tfZnJlZV90eHBnKHJ0d2RldiwgcXVldWUsIHR4c2l6ZSk7XFxuIFxcdGlmIChyZXQpXFxuLVxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdGdvdG8gb3V0X3RyaW07XFxuK1xcbitcXHRpZiAocnRsODcyM2JzKSB7XFxuK1xcdFxcdHJldCA9IHJ0d19zZGlvXzg3MjNic193YWl0X3R4X29xdChydHdkZXYpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRnb3RvIG91dF90cmltO1xcbitcXHR9XFxuIFxcbiBcXHRpZiAoIUlTX0FMSUdORUQoKHVuc2lnbmVkIGxvbmcpc2tiLVxcdTAwM2VkYXRhLCBSVFdfU0RJT19EQVRBX1BUUl9BTElHTikpXFxuIFxcdFxcdHJ0d193YXJuKHJ0d2RldiwgXFxcIkdvdCB1bmFsaWduZWQgU0tCIGluICVzKCkgZm9yIHF1ZXVlICV1XFxcXG5cXFwiLFxcbiBcXHRcXHRcXHQgX19mdW5jX18sIHF1ZXVlKTtcXG4gXFxuIFxcdGJ1c19jbGFpbSA9IHJ0d19zZGlvX2J1c19jbGFpbV9uZWVkZWQocnR3c2Rpbyk7XFxuLVxcbiBcXHRpZiAoYnVzX2NsYWltKVxcbiBcXHRcXHRzZGlvX2NsYWltX2hvc3QocnR3c2Rpby1cXHUwMDNlc2Rpb19mdW5jKTtcXG4tXFxuLVxcdHJldCA9IHNkaW9fbWVtY3B5X3RvaW8ocnR3c2Rpby1cXHUwMDNlc2Rpb19mdW5jLCB0eGFkZHIsIHNrYi1cXHUwMDNlZGF0YSwgdHhzaXplKTtcXG4tXFxuK1xcdHJldCA9IHNkaW9fbWVtY3B5X3RvaW8ocnR3c2Rpby1cXHUwMDNlc2Rpb19mdW5jLCB0eGFkZHIsIHNrYi1cXHUwMDNlZGF0YSxcXG4rXFx0XFx0XFx0ICAgICAgIHdyaXRlX3NpemUpO1xcbiBcXHRpZiAoYnVzX2NsYWltKVxcbiBcXHRcXHRzZGlvX3JlbGVhc2VfaG9zdChydHdzZGlvLVxcdTAwM2VzZGlvX2Z1bmMpO1xcbiBcXG4tXFx0aWYgKHJldClcXG4rXFx0aWYgKHJldCkge1xcbiBcXHRcXHRydHdfd2FybihydHdkZXYsXFxuIFxcdFxcdFxcdCBcXFwiRmFpbGVkIHRvIHdyaXRlICV6dSBieXRlKHMpIHRvIFNESU8gcG9ydCAweCUwOHhcXFwiLFxcbi1cXHRcXHRcXHQgdHhzaXplLCB0eGFkZHIpO1xcbitcXHRcXHRcXHQgd3JpdGVfc2l6ZSwgdHhhZGRyKTtcXG4rXFx0fSBlbHNlIGlmIChydGw4NzIzYnMpIHtcXG4rXFx0XFx0cGFnZXMgPSBESVZfUk9VTkRfVVAodHhzaXplLCBydHdkZXYtXFx1MDAzZWNoaXAtXFx1MDAzZXBhZ2Vfc2l6ZSk7XFxuK1xcdFxcdHJ0d19zZGlvXzg3MjNic19jb25zdW1lX3R4cGcocnR3ZGV2LCBxdWV1ZSwgcGFnZXMpO1xcbitcXHR9XFxuIFxcbitvdXRfdHJpbTpcXG4rXFx0aWYgKHdyaXRlX3NpemUgXFx1MDAzZSBvcmlnX2xlbilcXG4rXFx0XFx0c2tiX3RyaW0oc2tiLCBvcmlnX2xlbik7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuQEAgLTY3Nyw3ICs4NzcsMTEgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9faW5pdChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXFx1MDAzZXByaXY7XFxuIFxcbi1cXHRydHdzZGlvLVxcdTAwM2VpcnFfbWFzayA9IFJFR19TRElPX0hJTVJfUlhfUkVRVUVTVCB8IFJFR19TRElPX0hJTVJfQ1BXTTE7XFxuK1xcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpXFxuK1xcdFxcdHJ0d3NkaW8tXFx1MDAzZWlycV9tYXNrID0gUkVHX1NESU9fSElNUl9SWF9SRVFVRVNUO1xcbitcXHRlbHNlXFxuK1xcdFxcdHJ0d3NkaW8tXFx1MDAzZWlycV9tYXNrID0gUkVHX1NESU9fSElNUl9SWF9SRVFVRVNUIHxcXG4rXFx0XFx0XFx0XFx0ICAgIFJFR19TRElPX0hJTVJfQ1BXTTE7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2VuYWJsZV9yeF9hZ2dyZWdhdGlvbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbkBAIC02ODUsNiArODg5LDcgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9fZW5hYmxlX3J4X2FnZ3JlZ2F0aW9uKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuIFxcdHU4IHNpemUsIHRpbWVvdXQ7XFxuIFxcbiBcXHRzd2l0Y2ggKHJ0d2Rldi1cXHUwMDNlY2hpcC1cXHUwMDNlaWQpIHtcXG4rXFx0Y2FzZSBSVFdfQ0hJUF9UWVBFXzg3MjNCOlxcbiBcXHRjYXNlIFJUV19DSElQX1RZUEVfODcwM0I6XFxuIFxcdGNhc2UgUlRXX0NISVBfVFlQRV84ODIxQTpcXG4gXFx0Y2FzZSBSVFdfQ0hJUF9UWVBFXzg4MTJBOlxcbkBAIC03MTIsNiArOTE3LDggQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9fZW5hYmxlX3J4X2FnZ3JlZ2F0aW9uKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuIFxcdFxcdCAgICBGSUVMRF9QUkVQKEJJVF9ETUFfQUdHX1RPX1YxLCB0aW1lb3V0KSk7XFxuIFxcbiBcXHRydHdfd3JpdGU4X3NldChydHdkZXYsIFJFR19SWERNQV9NT0RFLCBCSVRfRE1BX01PREUpO1xcbitcXHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKVxcbitcXHRcXHRydHdfd3JpdGU4X21hc2socnR3ZGV2LCBSRUdfUlhETUFfTU9ERSwgQklUX0RNQV9CVVJTVF9DTlQsIDB4Myk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2VuYWJsZV9pbnRlcnJ1cHQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG5AQCAtNzQ5LDkgKzk1Niw1MCBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX3NldHVwKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfY2hlY2tfcnFwbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBydHdfY2hpcF9pbmZvICpjaGlwID0gcnR3ZGV2LVxcdTAwM2VjaGlwO1xcbitcXHRzdHJ1Y3QgcnR3X2ZpZm9fY29uZiAqZmlmbyA9IFxcdTAwMjZydHdkZXYtXFx1MDAzZWZpZm87XFxuK1xcdGNvbnN0IHN0cnVjdCBydHdfcGFnZV90YWJsZSAqcGdfdGJsO1xcbitcXHR1MTYgcmVzZXJ2ZWRfbnVtO1xcbitcXHR1MzIgZnJlZV90eHBnO1xcbitcXHR1MTYgcHVicV9udW07XFxuK1xcbitcXHRmcmVlX3R4cGcgPSBydHdfcmVhZDMyKHJ0d2RldiwgUkVHX1NESU9fRlJFRV9UWFBHKTtcXG4rXFx0aWYgKGZyZWVfdHhwZyB8fCAhZmlmby1cXHUwMDNlYWNxX3BnX251bSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0cGdfdGJsID0gXFx1MDAyNmNoaXAtXFx1MDAzZXBhZ2VfdGFibGVbMF07XFxuK1xcdHJlc2VydmVkX251bSA9IHBnX3RibC1cXHUwMDNlaHFfbnVtICsgcGdfdGJsLVxcdTAwM2VscV9udW0gKyBwZ190YmwtXFx1MDAzZW5xX251bSArXFxuK1xcdFxcdCAgICAgICBwZ190YmwtXFx1MDAzZWV4cV9udW0gKyBwZ190YmwtXFx1MDAzZWdhcHFfbnVtO1xcbitcXHRpZiAoZmlmby1cXHUwMDNlYWNxX3BnX251bSBcXHUwMDNjPSByZXNlcnZlZF9udW0pXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHB1YnFfbnVtID0gZmlmby1cXHUwMDNlYWNxX3BnX251bSAtIHJlc2VydmVkX251bTtcXG4rXFx0cnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfUlFQTl9OUFEsXFxuK1xcdFxcdCAgICBCSVRfUlFQTl9ORShwZ190YmwtXFx1MDAzZW5xX251bSwgcGdfdGJsLVxcdTAwM2VleHFfbnVtKSk7XFxuK1xcdHJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1JRUE4sXFxuK1xcdFxcdCAgICBCSVRfUlFQTl9ITFAocGdfdGJsLVxcdTAwM2VocV9udW0sIHBnX3RibC1cXHUwMDNlbHFfbnVtLCBwdWJxX251bSkpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IHJ0d19zZGlvX3N0YXJ0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuIHtcXG4rXFx0dTMyIGNsZWFyO1xcbitcXG4rXFx0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSkge1xcbitcXHRcXHRydHdfc2Rpb184NzIzYnNfY2hlY2tfcnFwbihydHdkZXYpO1xcbitcXHRcXHRydHdfc2Rpb184NzIzYnNfaW5pdF9mcmVlX3R4cGcocnR3ZGV2KTtcXG4rXFx0fVxcbitcXG4gXFx0cnR3X3NkaW9fZW5hYmxlX3J4X2FnZ3JlZ2F0aW9uKHJ0d2Rldik7XFxuK1xcbitcXHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKSB7XFxuK1xcdFxcdGNsZWFyID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19TRElPX0hJU1IpIFxcdTAwMjZcXG4rXFx0XFx0XFx0UlRXX1NESU9fSElTUl9DTEVBUl9NQVNLO1xcbitcXHRcXHRpZiAoY2xlYXIpXFxuK1xcdFxcdFxcdHJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1NESU9fSElTUiwgY2xlYXIpO1xcbitcXHR9XFxuK1xcbiBcXHRydHdfc2Rpb19lbmFibGVfaW50ZXJydXB0KHJ0d2Rldik7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtODE1LDcgKzEwNjMsMTEgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9fdHhfa2lja19vZmYoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG4ge1xcbiBcXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVxcdTAwM2Vwcml2O1xcbiBcXG4tXFx0cXVldWVfd29yayhydHdzZGlvLVxcdTAwM2V0eHdxLCBcXHUwMDI2cnR3c2Rpby1cXHUwMDNldHhfaGFuZGxlcl9kYXRhLVxcdTAwM2V3b3JrKTtcXG4rXFx0LypcXG4rXFx0ICogQSByZXRyeSBtYXkgYWxyZWFkeSBiZSBwZW5kaW5nIHdpdGggYSBkZWxheTsgcmUtYXJtIGl0IHNvIGEgbmV3bHlcXG4rXFx0ICogcXVldWVkIGZyYW1lIGlzIG5vdCBoZWxkIGJhY2sgYnkgaXQuXFxuK1xcdCAqL1xcbitcXHRtb2RfZGVsYXllZF93b3JrKHJ0d3NkaW8tXFx1MDAzZXR4d3EsIFxcdTAwMjZydHdzZGlvLVxcdTAwM2V0eF9oYW5kbGVyX2RhdGEtXFx1MDAzZXdvcmssIDApO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBydHdfc2Rpb19saW5rX3BzKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIGJvb2wgZW50ZXIpXFxuQEAgLTgzMSw2ICsxMDgzLDggQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9faW50ZXJmYWNlX2NmZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbiBcXG4gXFx0dmFsID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19TRElPX1RYX0NUUkwpO1xcbiBcXHR2YWwgXFx1MDAyNj0gMHhmZmY4O1xcbitcXHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKVxcbitcXHRcXHR2YWwgfD0gQklUX1NESU9fVFhfQ1RSTF9BTFdBWVNfUkVDT0dOSVpFO1xcbiBcXHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19TRElPX1RYX0NUUkwsIHZhbCk7XFxuIH1cXG4gXFxuQEAgLTkzNyw2ICsxMTkxLDE5IEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9fdHhfd3JpdGUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcXG4gXFxuIFxcdHNrYl9xdWV1ZV90YWlsKFxcdTAwMjZydHdzZGlvLVxcdTAwM2V0eF9xdWV1ZVtxdWV1ZV0sIHNrYik7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBCYWNrLXByZXNzdXJlIG9uIHRoZSBkYXRhIEFDcyAoQksvQkUvVkkvVk8pOiBvbmNlIHRoZSBGSUZPIGZpbGxzIHBhc3RcXG4rXFx0ICogdGhlIGhpZ2ggd2F0ZXJtYXJrLCBzdG9wIHRoZSBjb3JyZXNwb25kaW5nIG1hYzgwMjExIHF1ZXVlIHNvIGl0IHN0b3BzXFxuK1xcdCAqIGhhbmRpbmcgdXMgZnJhbWVzLCBib3VuZGluZyB0aGUgcXVldWVpbmcgbGF0ZW5jeS4gUmVzdW1lZCBmcm9tIHRoZSBUWFxcbitcXHQgKiBkcmFpbiBwYXRoIG9uY2UgdGhlIEZJRk8gZHJhaW5zIGJlbG93IHRoZSBsb3cgd2F0ZXJtYXJrLlxcbitcXHQgKi9cXG4rXFx0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSBcXHUwMDI2XFx1MDAyNiBxdWV1ZSBcXHUwMDNjIFJUV19UWF9RVUVVRV9CQ04gXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICFydHdzZGlvLVxcdTAwM2VxdWV1ZV9zdG9wcGVkW3F1ZXVlXSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgc2tiX3F1ZXVlX2xlbihcXHUwMDI2cnR3c2Rpby1cXHUwMDNldHhfcXVldWVbcXVldWVdKSBcXHUwMDNlPSBSVFdfU0RJT19UWF9GSUZPX0hJV0FURVIpIHtcXG4rXFx0XFx0cnR3c2Rpby1cXHUwMDNlcXVldWVfc3RvcHBlZFtxdWV1ZV0gPSB0cnVlO1xcbitcXHRcXHRpZWVlODAyMTFfc3RvcF9xdWV1ZShydHdkZXYtXFx1MDAzZWh3LCBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKSk7XFxuK1xcdH1cXG4rXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC0xMDk1LDYgKzEzNjIsMTQgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9faGFuZGxlX2ludGVycnVwdChzdHJ1Y3Qgc2Rpb19mdW5jICpzZGlvX2Z1bmMpXFxuIFxcdFxcdHJ0d19zZGlvX3J4X2lzcihydHdkZXYpO1xcbiBcXHR9XFxuIFxcbitcXHQvKlxcbitcXHQgKiBSVEw4NzIzQlMga2VlcHMgcmFpc2luZyB0aGUgaW50ZXJydXB0IGFmdGVyIHJlc3VtZSBpZiB1bmRlZmluZWRcXG4rXFx0ICogc3RhdHVzIGJpdHMgYXJlIHdyaXR0ZW4gYmFjaywgc28gYWNrbm93bGVkZ2Ugb25seSB0aGUgYml0cyB0aGF0IGFyZVxcbitcXHQgKiBib3RoIGRlZmluZWQgYW5kIHVubWFza2VkLiBPdGhlciBjaGlwcyBrZWVwIHRoZSBleGlzdGluZyBiZWhhdmlvdXIuXFxuK1xcdCAqL1xcbitcXHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKVxcbitcXHRcXHRoaXNyIFxcdTAwMjY9IHJ0d3NkaW8tXFx1MDAzZWlycV9tYXNrIFxcdTAwMjYgUlRXX1NESU9fSElTUl9DTEVBUl9NQVNLO1xcbitcXG4gXFx0cnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfU0RJT19ISVNSLCBoaXNyKTtcXG4gXFxuIFxcdHJ0d3NkaW8tXFx1MDAzZWlycV90aHJlYWQgPSBOVUxMO1xcbkBAIC0xMjMxLDQzICsxNTA2LDkyIEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2luZGljYXRlX3R4X3N0YXR1cyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxcbiBcXHRpZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUoaHcsIHNrYik7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIHJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcXG4tXFx0XFx0XFx0XFx0ICAgICAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSlcXG4rLypcXG4rICogU2VuZCBvbmUgZnJhbWUgZnJvbSBAcXVldWUuIFJldHVybnMgMSB3aGVuIGEgZnJhbWUgd2FzIHdyaXR0ZW4sIDAgd2hlbiB0aGVcXG4rICogcXVldWUgd2FzIGVtcHR5IGFuZCBhIG5lZ2F0aXZlIGVycm5vIHdoZW4gdGhlIHdyaXRlIGZhaWxlZCwgaW4gd2hpY2ggY2FzZVxcbisgKiB0aGUgZnJhbWUgaXMgcHV0IGJhY2sgYXQgdGhlIGhlYWQgb2YgdGhlIHF1ZXVlLlxcbisgKi9cXG4rc3RhdGljIGludCBydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVxcdTAwM2Vwcml2O1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbitcXHR1MTYgcV9tYXA7XFxuIFxcdGludCByZXQ7XFxuIFxcbiBcXHRza2IgPSBza2JfZGVxdWV1ZShcXHUwMDI2cnR3c2Rpby1cXHUwMDNldHhfcXVldWVbcXVldWVdKTtcXG4gXFx0aWYgKCFza2IpXFxuLVxcdFxcdHJldHVybjtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuIFxcbitcXHRxX21hcCA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpO1xcbiBcXHRyZXQgPSBydHdfc2Rpb193cml0ZV9wb3J0KHJ0d2Rldiwgc2tiLCBxdWV1ZSk7XFxuIFxcdGlmIChyZXQpIHtcXG4gXFx0XFx0c2tiX3F1ZXVlX2hlYWQoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZXR4X3F1ZXVlW3F1ZXVlXSwgc2tiKTtcXG4tXFx0XFx0cmV0dXJuO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHR9XFxuIFxcbiBcXHRydHdfc2Rpb19pbmRpY2F0ZV90eF9zdGF0dXMocnR3ZGV2LCBza2IpO1xcbitcXG4rXFx0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSBcXHUwMDI2XFx1MDAyNiBxdWV1ZSBcXHUwMDNjIFJUV19UWF9RVUVVRV9CQ04gXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIHJ0d3NkaW8tXFx1MDAzZXF1ZXVlX3N0b3BwZWRbcXVldWVdIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBza2JfcXVldWVfbGVuKFxcdTAwMjZydHdzZGlvLVxcdTAwM2V0eF9xdWV1ZVtxdWV1ZV0pIFxcdTAwM2M9XFxuK1xcdCAgICBSVFdfU0RJT19UWF9GSUZPX0xPV0FURVIpIHtcXG4rXFx0XFx0cnR3c2Rpby1cXHUwMDNlcXVldWVfc3RvcHBlZFtxdWV1ZV0gPSBmYWxzZTtcXG4rXFx0XFx0aWVlZTgwMjExX3dha2VfcXVldWUocnR3ZGV2LVxcdTAwM2VodywgcV9tYXApO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgcnR3X3NkaW9fdHhfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIHtcXG4gXFx0c3RydWN0IHJ0d19zZGlvX3dvcmtfZGF0YSAqd29ya19kYXRhID1cXG4tXFx0XFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEsIHdvcmspO1xcbitcXHRcXHRjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLCBzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhLFxcbitcXHRcXHRcXHQgICAgIHdvcmspO1xcbiBcXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW87XFxuIFxcdHN0cnVjdCBydHdfZGV2ICpydHdkZXY7XFxuLVxcdGludCBsaW1pdCwgcXVldWU7XFxuK1xcdGludCBsaW1pdCwgcXVldWUsIHJldDtcXG4rXFx0Ym9vbCBydGw4NzIzYnM7XFxuIFxcbiBcXHRydHdkZXYgPSB3b3JrX2RhdGEtXFx1MDAzZXJ0d2RldjtcXG4gXFx0cnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXFx1MDAzZXByaXY7XFxuK1xcdHJ0bDg3MjNicyA9IHJ0d19pc184NzIzYnMocnR3ZGV2KTtcXG4gXFxuIFxcdGlmICghcnR3X2Z3X2ZlYXR1cmVfY2hlY2soXFx1MDAyNnJ0d2Rldi1cXHUwMDNlZncsIEZXX0ZFQVRVUkVfVFhfV0FLRSkpXFxuIFxcdFxcdHJ0d19zZGlvX2RlZXBfcHNfbGVhdmUocnR3ZGV2KTtcXG4gXFxuIFxcdGZvciAocXVldWUgPSBSVEtfTUFYX1RYX1FVRVVFX05VTSAtIDE7IHF1ZXVlIFxcdTAwM2U9IDA7IHF1ZXVlLS0pIHtcXG4gXFx0XFx0Zm9yIChsaW1pdCA9IDA7IGxpbWl0IFxcdTAwM2MgMTAwMDsgbGltaXQrKykge1xcbi1cXHRcXHRcXHRydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlKHJ0d2RldiwgcXVldWUpO1xcbitcXHRcXHRcXHRyZXQgPSBydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlKHJ0d2RldiwgcXVldWUpO1xcbitcXHRcXHRcXHRpZiAocmV0ID09IDApXFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0XFx0ICogQSBwYWdlIHNob3J0YWdlIGlzIHRyYW5zaWVudDogbGVhdmUgdGhlXFxuK1xcdFxcdFxcdFxcdCAqIGZyYW1lIHF1ZXVlZCBhbmQgY29tZSBiYWNrIHNob3J0bHkgaW5zdGVhZFxcbitcXHRcXHRcXHRcXHQgKiBvZiBzdGFsbGluZyB0aGlzIEFDIHVudGlsIHNvbWV0aGluZyBlbHNlXFxuK1xcdFxcdFxcdFxcdCAqIGtpY2tzIHRoZSB3b3JrZXIuXFxuK1xcdFxcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRcXHRpZiAocnRsODcyM2JzIFxcdTAwMjZcXHUwMDI2IHJldCA9PSAtRUJVU1kpIHtcXG4rXFx0XFx0XFx0XFx0XFx0cXVldWVfZGVsYXllZF93b3JrKHJ0d3NkaW8tXFx1MDAzZXR4d3EsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZ3b3JrX2RhdGEtXFx1MDAzZXdvcmssXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIFJUV19TRElPX1RYX1JFVFJZX0RFTEFZKTtcXG4rXFx0XFx0XFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRcXHR9XFxuK1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBSZXN0YXJ0IGZyb20gdGhlIGhpZ2hlc3QgcHJpb3JpdHkgcXVldWUgYWZ0ZXIgZXZlcnlcXG4rXFx0XFx0XFx0ICogbWFuYWdlbWVudCBmcmFtZSBzbyB0aGUgam9pbiBzZXF1ZW5jZSBpcyBub3QgaGVsZCB1cFxcbitcXHRcXHRcXHQgKiBiZWhpbmQgYSBkYXRhIGJhY2tsb2cuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRpZiAocnRsODcyM2JzIFxcdTAwMjZcXHUwMDI2IHF1ZXVlID09IFJUV19UWF9RVUVVRV9NR01UKSB7XFxuK1xcdFxcdFxcdFxcdHF1ZXVlX2RlbGF5ZWRfd29yayhydHdzZGlvLVxcdTAwM2V0eHdxLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2d29ya19kYXRhLVxcdTAwM2V3b3JrLCAwKTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHRcXHR9XFxuIFxcbiBcXHRcXHRcXHRpZiAoc2tiX3F1ZXVlX2VtcHR5KFxcdTAwMjZydHdzZGlvLVxcdTAwM2V0eF9xdWV1ZVtxdWV1ZV0pKVxcbiBcXHRcXHRcXHRcXHRicmVhaztcXG5AQCAtMTI5NCwxNCArMTYxOCwxNiBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX2luaXRfdHgoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdH1cXG4gXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBSVEtfTUFYX1RYX1FVRVVFX05VTTsgaSsrKVxcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgUlRLX01BWF9UWF9RVUVVRV9OVU07IGkrKykge1xcbiBcXHRcXHRza2JfcXVldWVfaGVhZF9pbml0KFxcdTAwMjZydHdzZGlvLVxcdTAwM2V0eF9xdWV1ZVtpXSk7XFxuK1xcdFxcdHJ0d3NkaW8tXFx1MDAzZXF1ZXVlX3N0b3BwZWRbaV0gPSBmYWxzZTtcXG4rXFx0fVxcbiBcXHRydHdzZGlvLVxcdTAwM2V0eF9oYW5kbGVyX2RhdGEgPSBrbWFsbG9jX29iaigqcnR3c2Rpby1cXHUwMDNldHhfaGFuZGxlcl9kYXRhKTtcXG4gXFx0aWYgKCFydHdzZGlvLVxcdTAwM2V0eF9oYW5kbGVyX2RhdGEpXFxuIFxcdFxcdGdvdG8gZXJyX2Rlc3Ryb3lfd3E7XFxuIFxcbiBcXHRydHdzZGlvLVxcdTAwM2V0eF9oYW5kbGVyX2RhdGEtXFx1MDAzZXJ0d2RldiA9IHJ0d2RldjtcXG4tXFx0SU5JVF9XT1JLKFxcdTAwMjZydHdzZGlvLVxcdTAwM2V0eF9oYW5kbGVyX2RhdGEtXFx1MDAzZXdvcmssIHJ0d19zZGlvX3R4X2hhbmRsZXIpO1xcbitcXHRJTklUX0RFTEFZRURfV09SSyhcXHUwMDI2cnR3c2Rpby1cXHUwMDNldHhfaGFuZGxlcl9kYXRhLVxcdTAwM2V3b3JrLCBydHdfc2Rpb190eF9oYW5kbGVyKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiBcXG5AQCAtMTMxNSw2ICsxNjQxLDcgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9fZGVpbml0X3R4KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuIFxcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXFx1MDAzZXByaXY7XFxuIFxcdGludCBpO1xcbiBcXG4rXFx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFxcdTAwMjZydHdzZGlvLVxcdTAwM2V0eF9oYW5kbGVyX2RhdGEtXFx1MDAzZXdvcmspO1xcbiBcXHRkZXN0cm95X3dvcmtxdWV1ZShydHdzZGlvLVxcdTAwM2V0eHdxKTtcXG4gXFx0a2ZyZWUocnR3c2Rpby1cXHUwMDNldHhfaGFuZGxlcl9kYXRhKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmhcXG5pbmRleCA0NTdlOGIwMjM4MGU1Li4yZjFiNjdmNGJiYzdjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmhcXG5AQCAtMjIsNiArMjIsNyBAQFxcbiBcXG4gLyogU0RJTyBUeCBDb250cm9sICovXFxuICNkZWZpbmUgUkVHX1NESU9fVFhfQ1RSTFxcdFxcdFxcdChTRElPX0xPQ0FMX09GRlNFVCArIDB4MDAwMClcXG4rI2RlZmluZSBCSVRfU0RJT19UWF9DVFJMX0FMV0FZU19SRUNPR05JWkVcXHRCSVQoNClcXG4gXFxuIC8qU0RJTyBzdGF0dXMgdGltZW91dCovXFxuICNkZWZpbmUgUkVHX1NESU9fVElNRU9VVFxcdFxcdFxcdChTRElPX0xPQ0FMX09GRlNFVCArIDB4MDAwMilcXG5AQCAtNzcsNiArNzgsMTQgQEBcXG4gLyogdGhlIGZvbGxvd2luZyB0d28gYXJlIFJUTDgxODggU0RJTyBTcGVjaWZpYyAqL1xcbiAjZGVmaW5lIFJFR19TRElPX0hJU1JfTUNVX0VSUlxcdFxcdFxcdEJJVCgyOClcXG4gI2RlZmluZSBSRUdfU0RJT19ISVNSX1RTRl9CSVQzMl9UT0dHTEVcXHRcXHRCSVQoMjkpXFxuKyNkZWZpbmUgUlRXX1NESU9fSElTUl9DTEVBUl9NQVNLXFx0XFx0XFxcXFxcbitcXHQoUkVHX1NESU9fSElTUl9UWEVSUiB8IFJFR19TRElPX0hJU1JfUlhFUlIgfCBcXFxcXFxuK1xcdCBSRUdfU0RJT19ISVNSX1RYRk9WVyB8IFJFR19TRElPX0hJU1JfUlhGT1ZXIHwgXFxcXFxcbitcXHQgUkVHX1NESU9fSElTUl9UWEJDTk9LIHwgUkVHX1NESU9fSElTUl9UWEJDTkVSUiB8IFxcXFxcXG4rXFx0IFJFR19TRElPX0hJU1JfQzJIQ01EIHwgUkVHX1NESU9fSElTUl9DUFdNMSB8IFxcXFxcXG4rXFx0IFJFR19TRElPX0hJU1JfQ1BXTTIgfCBSRUdfU0RJT19ISVNSX0hTSVNSX0lORCB8IFxcXFxcXG4rXFx0IFJFR19TRElPX0hJU1JfR1RJTlQzX0lORCB8IFJFR19TRElPX0hJU1JfR1RJTlQ0X0lORCB8IFxcXFxcXG4rXFx0IFJFR19TRElPX0hJU1JfUFNUSU1FT1VUIHwgUkVHX1NESU9fSElTUl9PQ1BJTlQpXFxuIFxcbiAvKiBIQ0kgQ3VycmVudCBQb3dlciBNb2RlICovXFxuICNkZWZpbmUgUkVHX1NESU9fSENQV01cXHRcXHRcXHRcXHQoU0RJT19MT0NBTF9PRkZTRVQgKyAweDAwMTkpXFxuQEAgLTg2LDYgKzk1LDEwIEBAXFxuICNkZWZpbmUgUkVHX1NESU9fT1FUX0ZSRUVfUEdcXHRcXHRcXHQoU0RJT19MT0NBTF9PRkZTRVQgKyAweDAwMUUpXFxuIC8qIEZyZWUgVHggQnVmZmVyIFBhZ2UgKi9cXG4gI2RlZmluZSBSRUdfU0RJT19GUkVFX1RYUEdcXHRcXHRcXHQoU0RJT19MT0NBTF9PRkZTRVQgKyAweDAwMjApXFxuKyNkZWZpbmUgQklUX0ZSRUVfVFhQR19ISUdIXFx0XFx0XFx0R0VOTUFTSyg3LCAwKVxcbisjZGVmaW5lIEJJVF9GUkVFX1RYUEdfTk9STUFMXFx0XFx0XFx0R0VOTUFTSygxNSwgOClcXG4rI2RlZmluZSBCSVRfRlJFRV9UWFBHX0xPV1xcdFxcdFxcdEdFTk1BU0soMjMsIDE2KVxcbisjZGVmaW5lIEJJVF9GUkVFX1RYUEdfUFVCXFx0XFx0XFx0R0VOTUFTSygzMSwgMjQpXFxuIC8qIEhDSSBDdXJyZW50IFBvd2VyIE1vZGUgMSAqL1xcbiAjZGVmaW5lIFJFR19TRElPX0hDUFdNMVxcdFxcdFxcdFxcdChTRElPX0xPQ0FMX09GRlNFVCArIDB4MDAyNClcXG4gLyogSENJIEN1cnJlbnQgUG93ZXIgTW9kZSAyICovXFxuQEAgLTE0Myw3ICsxNTYsNyBAQCBzdHJ1Y3QgcnR3X3NkaW9fdHhfZGF0YSB7XFxuIH07XFxuIFxcbiBzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhIHtcXG4tXFx0c3RydWN0IHdvcmtfc3RydWN0IHdvcms7XFxuK1xcdHN0cnVjdCBkZWxheWVkX3dvcmsgd29yaztcXG4gXFx0c3RydWN0IHJ0d19kZXYgKnJ0d2RldjtcXG4gfTtcXG4gXFxuQEAgLTE1OSw2ICsxNzIsMTMgQEAgc3RydWN0IHJ0d19zZGlvIHtcXG4gXFx0c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnR4d3E7XFxuIFxcdHN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEgKnR4X2hhbmRsZXJfZGF0YTtcXG4gXFx0c3RydWN0IHNrX2J1ZmZfaGVhZCB0eF9xdWV1ZVtSVEtfTUFYX1RYX1FVRVVFX05VTV07XFxuK1xcdGJvb2wgcXVldWVfc3RvcHBlZFtSVEtfTUFYX1RYX1FVRVVFX05VTV07XFxuK1xcbitcXHRhdG9taWNfdCBmcmVlX3BnX2hpZ2g7XFxuK1xcdGF0b21pY190IGZyZWVfcGdfbm9ybWFsO1xcbitcXHRhdG9taWNfdCBmcmVlX3BnX2xvdztcXG4rXFx0YXRvbWljX3QgZnJlZV9wZ19wdWI7XFxuK1xcdGF0b21pY190IHR4X29xdF9mcmVlO1xcbiB9O1xcbiBcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHJ0d19zZGlvX3BtX29wcztcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC90eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC90eC5jXFxuaW5kZXggODc4NmJiYjQyMWMyYi4uNGUxMTBhNDU3ZTcxZCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3R4LmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3R4LmNcXG5AQCAtMjA4LDggKzIwOCw5IEBAIHZvaWQgcnR3X3R4X3JlcG9ydF9lbnF1ZXVlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHN0cnVjdCBza19idWZmICpza2IsIHU4IHNuKVxcbiBcXHRfX3NrYl9xdWV1ZV90YWlsKFxcdTAwMjZ0eF9yZXBvcnQtXFx1MDAzZXF1ZXVlLCBza2IpO1xcbiBcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ0eF9yZXBvcnQtXFx1MDAzZXFfbG9jaywgZmxhZ3MpO1xcbiBcXG4tXFx0aWYgKHJ0d2Rldi1cXHUwMDNlY2hpcC1cXHUwMDNlaWQgPT0gUlRXX0NISVBfVFlQRV84NzIzRCBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgcnR3ZGV2LVxcdTAwM2VoY2kudHlwZSA9PSBSVFdfSENJX1RZUEVfVVNCKVxcbitcXHRpZiAoKHJ0d2Rldi1cXHUwMDNlY2hpcC1cXHUwMDNlaWQgPT0gUlRXX0NISVBfVFlQRV84NzIzRCBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIHJ0d2Rldi1cXHUwMDNlaGNpLnR5cGUgPT0gUlRXX0hDSV9UWVBFX1VTQikgfHxcXG4rXFx0ICAgIHJ0d19pc184NzIzYnMocnR3ZGV2KSlcXG4gXFx0XFx0dGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMoMjUwMCk7XFxuIFxcbiBcXHRtb2RfdGltZXIoXFx1MDAyNnR4X3JlcG9ydC1cXHUwMDNlcHVyZ2VfdGltZXIsIGppZmZpZXMgKyB0aW1lb3V0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6NTE6NTEuMTEzMjA0MzQ4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDg2MDg3MTkxNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGV4Y2x1c2l2ZWx5IGFkZHMgc3VwcG9ydCBhbmQgZml4ZXMgZm9yIHRoZSBSZWFsdGVrIFJUTDg3MjNCUyBTRElPIFdpRmkgY2hpcC4gU0RJTyBkZXZpY2VzIHJlcXVpcmUgcGh5c2ljYWwgaGFyZHdhcmUgb3Igc3BlY2lmaWMgUUVNVSBtYWNoaW5lIGVtdWxhdGlvbiB3aGljaCBpcyBub3QgYXZhaWxhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiBUaGVyZSBpcyBubyBzb2Z0d2FyZSBTRElPIGVtdWxhdGlvbiBmcmFtZXdvcmsgKGxpa2UgZHVtbXlfaGNkIGZvciBVU0IpIHRvIHJlYWNoIHRoZXNlIGNvZGUgcGF0aHMgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhNDE4MjU2MTc4NDRlYTUzOTFmMDVjZTQ0OGY4NjkzOTViMGUwY2E4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMDk6NTE6NDkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2Z3LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2Z3LmNcbmluZGV4IDk0NWZlZGNkMzc1YjYuLmM4NWMwZTNlNjBhOTcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L2Z3LmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvZncuY1xuQEAgLTMxNyw2ICszMTcsMTUgQEAgdm9pZCBydHdfZndfYzJoX2NtZF9oYW5kbGUoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdGNhc2UgQzJIX0NDWF9UWF9SUFQ6XG4gXHRcdHJ0d190eF9yZXBvcnRfaGFuZGxlKHJ0d2Rldiwgc2tiLCBDMkhfQ0NYX1RYX1JQVCk7XG4gXHRcdGJyZWFrO1xuK1x0Y2FzZSBDMkhfVkVORE9SX1RYX1JQVDpcbitcdGNhc2UgQzJIX1dMQU5fUkZPTjpcbitcdFx0LypcbitcdFx0ICogVGhlIFJUTDg3MjNCUyBmaXJtd2FyZSByZXBvcnRzIG1hbmFnZW1lbnQgVFggdGhyb3VnaCB0aGVzZVxuK1x0XHQgKiB0d28gZXZlbnRzIGluc3RlYWQsIHVzaW5nIHRoZSBzYW1lIHBheWxvYWQgbGF5b3V0LlxuK1x0XHQgKi9cbitcdFx0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSlcbitcdFx0XHRydHdfdHhfcmVwb3J0X2hhbmRsZShydHdkZXYsIHNrYiwgQzJIX0NDWF9UWF9SUFQpO1xuK1x0XHRicmVhaztcbiBcdGNhc2UgQzJIX0JUX0lORk86XG4gXHRcdHJ0d19jb2V4X2J0X2luZm9fbm90aWZ5KHJ0d2RldiwgYzJoLVx1MDAzZXBheWxvYWQsIGxlbik7XG4gXHRcdGJyZWFrO1xuQEAgLTM2NSw2ICszNzQsMTcgQEAgdm9pZCBydHdfZndfYzJoX2NtZF9yeF9pcnFzYWZlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHUzMiBwa3Rfb2Zmc2V0LFxuIFx0XHRydHdfY29leF9pbmZvX3Jlc3BvbnNlKHJ0d2Rldiwgc2tiKTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIEMySF9XTEFOX1JGT046XG4rXHRcdC8qXG4rXHRcdCAqIE9uIDg3MjNCUyBTRElPIHdpdGggdjQxIGZpcm13YXJlLCBDMkggMHgzMiBjYXJyaWVzIGEgc2NhbiBUWFxuK1x0XHQgKiByZXBvcnQsIG5vdCBhIFdMQU5fUkZPTiBldmVudDogZGVmZXIgaXQgdG9cbitcdFx0ICogcnR3X2Z3X2MyaF9jbWRfaGFuZGxlKCkuXG4rXHRcdCAqL1xuK1x0XHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKSB7XG4rXHRcdFx0KigodTMyICopc2tiLVx1MDAzZWNiKSA9IHBrdF9vZmZzZXQ7XG4rXHRcdFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2cnR3ZGV2LVx1MDAzZWMyaF9xdWV1ZSwgc2tiKTtcbitcdFx0XHRpZWVlODAyMTFfcXVldWVfd29yayhydHdkZXYtXHUwMDNlaHcsIFx1MDAyNnJ0d2Rldi1cdTAwM2VjMmhfd29yayk7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbiBcdFx0Y29tcGxldGUoXHUwMDI2cnR3ZGV2LVx1MDAzZWxwc19sZWF2ZV9jaGVjayk7XG4gXHRcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XG4gXHRcdGJyZWFrO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvZncuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvZncuaFxuaW5kZXggNDhhZDljZWFiNmVhMS4uYmRkYTc4ZGM2NDYyYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvZncuaFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9mdy5oXG5AQCAtNTQsNiArNTQsMTEgQEAgZW51bSBydHdfYzJoX2NtZF9pZCB7XG4gXHRDMkhfQlRfTVBfSU5GTyA9IDB4MGIsXG4gXHRDMkhfQlRfSElEX0lORk8gPSAweDQ1LFxuIFx0QzJIX1JBX1JQVCA9IDB4MGMsXG4rXHQvKlxuK1x0ICogODcyM0JTIFNESU8gdmVuZG9yIHY0MSBmaXJtd2FyZSBtYW5hZ2VtZW50IFRYIHJlcG9ydCAoMHgzMiBpc1xuK1x0ICogcmVwb3J0ZWQgYXMgQzJIX1dMQU5fUkZPTiwgaGFuZGxlZCBwZXItY2hpcCBpbiB0aGUgQzJIIGRpc3BhdGNoKS5cbitcdCAqL1xuK1x0QzJIX1ZFTkRPUl9UWF9SUFQgPSAweDEyLFxuIFx0QzJIX0hXX0ZFQVRVUkVfUkVQT1JUID0gMHgxOSxcbiBcdEMySF9XTEFOX0lORk8gPSAweDI3LFxuIFx0QzJIX1dMQU5fUkZPTiA9IDB4MzIsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaFxuaW5kZXggYzZlOTgxYmE3OTg2OC4uOGY4NmY3YzEyZGU1YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaFxuQEAgLTE5NCw2ICsxOTQsNyBAQCBlbnVtIHJ0d19jaGlwX3R5cGUge1xuIFx0UlRXX0NISVBfVFlQRV84NzIzRCxcbiBcdFJUV19DSElQX1RZUEVfODgyMUMsXG4gXHRSVFdfQ0hJUF9UWVBFXzg3MDNCLFxuK1x0UlRXX0NISVBfVFlQRV84NzIzQixcbiBcdFJUV19DSElQX1RZUEVfODgyMUEsXG4gXHRSVFdfQ0hJUF9UWVBFXzg4MTJBLFxuIFx0UlRXX0NISVBfVFlQRV84ODE0QSxcbkBAIC0yMTk0LDYgKzIxOTUsMTIgQEAgc3RhdGljIGlubGluZSBib29sIHJ0d19jaGlwX2hhc190eF9zdGJjKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4gXHRyZXR1cm4gcnR3ZGV2LVx1MDAzZWNoaXAtXHUwMDNldHhfc3RiYztcbiB9XG4gXG4rc3RhdGljIGlubGluZSBib29sIHJ0d19pc184NzIzYnMoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldilcbit7XG4rXHRyZXR1cm4gcnR3ZGV2LVx1MDAzZWNoaXAtXHUwMDNlaWQgPT0gUlRXX0NISVBfVFlQRV84NzIzQiBcdTAwMjZcdTAwMjZcbitcdCAgICAgICBydHdkZXYtXHUwMDNlaGNpLnR5cGUgPT0gUlRXX0hDSV9UWVBFX1NESU87XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgdTggcnR3X2FjcXVpcmVfbWFjaWQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiB7XG4gXHR1bnNpZ25lZCBsb25nIG1hY19pZDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J4LmNcbmluZGV4IDAxZmQyOTlhYmI3ZmUuLmE5MzYxZWY0YjkzYzAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J4LmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnguY1xuQEAgLTI1MywxMCArMjUzLDEyIEBAIHN0YXRpYyB2b2lkIHJ0d19yeF9maWxsX3J4X3N0YXR1cyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuIFxuIFx0cnR3X3J4X2FkZHJfbWF0Y2gocnR3ZGV2LCBwa3Rfc3RhdCwgaGRyKTtcbiBcbi1cdC8qIFJ0bDg3MjNjcyBkcml2ZXIgY2hlY2tzIGZvciBzaXplIFx1MDAzYyAxNCBvciBzaXplIFx1MDAzZSA4MTkyIGFuZFxuLVx0ICogc2ltcGx5IGRyb3BzIHRoZSBwYWNrZXQuXG4rXHQvKlxuK1x0ICogUnRsODcyM2NzIGFuZCBydGw4NzIzYnMgZHJpdmVycyBjaGVjayBmb3Igc2l6ZSBcdTAwM2MgMTQgb3Igc2l6ZSBcdTAwM2UgODE5MlxuK1x0ICogYW5kIHNpbXBseSBkcm9wIHRoZSBwYWNrZXQuXG4gXHQgKi9cbi1cdGlmIChydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VpZCA9PSBSVFdfQ0hJUF9UWVBFXzg3MDNCIFx1MDAyNlx1MDAyNiBwa3Rfc3RhdC1cdTAwM2Vwa3RfbGVuID09IDApIHtcbitcdGlmICgocnR3ZGV2LVx1MDAzZWNoaXAtXHUwMDNlaWQgPT0gUlRXX0NISVBfVFlQRV84NzAzQiB8fCBydHdfaXNfODcyM2JzKHJ0d2RldikpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHBrdF9zdGF0LVx1MDAzZXBrdF9sZW4gPT0gMCkge1xuIFx0XHRyeF9zdGF0dXMtXHUwMDNlZmxhZyB8PSBSWF9GTEFHX05PX1BTRFU7XG4gXHRcdHJ0d19kYmcocnR3ZGV2LCBSVFdfREJHX1JYLCBcInplcm8gbGVuZ3RoIHBhY2tldFwiKTtcbiBcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jXG5pbmRleCA1YjQwZDc0YjE2ZWUwLi5lZDFiZWQ4ZWExNDRhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jXG5AQCAtMjAsNiArMjAsMTcgQEBcbiAjaW5jbHVkZSBcInR4LmhcIlxuIFxuICNkZWZpbmUgUlRXX1NESU9fSU5ESVJFQ1RfUldfUkVUUklFU1x0XHRcdDUwXG4rI2RlZmluZSBSVFdfU0RJT19PUVRfVElNRU9VVF9NU1x0XHRcdFx0MTAwMFxuK1xuKy8qXG4rICogODcyM0JTIFNESU8gVFggRklGTyBiYWNrLXByZXNzdXJlIHdhdGVybWFya3M6IHN0b3AgdGhlIG1hYzgwMjExIHF1ZXVlIG9uY2VcbisgKiB0aGUgcGVyLUFDIHNvZnR3YXJlIEZJRk8gZmlsbHMgcGFzdCB0aGUgaGlnaCB3YXRlcm1hcmssIGFuZCB3YWtlIGl0IGZyb20gdGhlXG4rICogVFggZHJhaW4gcGF0aCBvbmNlIGl0IGZhbGxzIGJhY2sgdG8gdGhlIGxvdyBvbmUuIEJvdW5kcyB0aGUgcXVldWVpbmcgbGF0ZW5jeVxuKyAqIHRoYXQgb3RoZXJ3aXNlIGNhdXNlcyB1cGxpbmsgYnVmZmVyYmxvYXQgLyBjb25nZXN0aW9uIGNvbGxhcHNlLlxuKyAqL1xuKyNkZWZpbmUgUlRXX1NESU9fVFhfRklGT19ISVdBVEVSXHRcdFx0MTZcbisjZGVmaW5lIFJUV19TRElPX1RYX0ZJRk9fTE9XQVRFUlx0XHRcdDhcbisjZGVmaW5lIFJUV19TRElPX1RYX1JFVFJZX0RFTEFZXHRcdFx0bXNlY3NfdG9famlmZmllcygxKVxuIFxuIHN0YXRpYyBib29sIHJ0d19zZGlvX2lzX2J1c19hZGRyKHUzMiBhZGRyKVxuIHtcbkBAIC01NDgsMTIgKzU1OSwxMjIgQEAgc3RhdGljIGludCBydHdfc2Rpb19yZWFkX3BvcnQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggKmJ1Ziwgc2l6ZV90IGNvdW50KVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4rLypcbisgKiBUaGUgY2FjaGVkIGZyZWUgcGFnZSBjb3VudGVycyBhcmUgYSBmYXN0IHBhdGggaGludCBvbmx5LiBUaGV5IGFyZSB3cml0dGVuXG4rICogZnJvbSB0aGUgc2luZ2xlIHRocmVhZGVkIFRYIHdvcmsgYW5kLCBmb3IgSDJDIGFuZCByZXNlcnZlZCBwYWdlIHdyaXRlcyxcbisgKiBmcm9tIHByb2Nlc3MgY29udGV4dCwgc28gdGhleSBhcmUgYXRvbWljX3Q7IHdoZW5ldmVyIHRoZXkgY2xhaW0gdGhlcmUgaXNcbisgKiBub3QgZW5vdWdoIHJvb20gdGhleSBhcmUgcmVzeW5jaHJvbmlzZWQgZnJvbSB0aGUgY2hpcCBiZWZvcmUgdGhlIGNhbGxlclxuKyAqIGdpdmVzIHVwLCB3aGljaCBhbHNvIGFic29yYnMgYSBsb3N0IHVwZGF0ZS5cbisgKi9cbitzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfc3RvcmVfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4rXHRcdFx0XHRcdCAgICB1MzIgZnJlZV90eHBnKVxuK3tcbitcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbitcbitcdGF0b21pY19zZXQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX2hpZ2gsXG4rXHRcdCAgIHUzMl9nZXRfYml0cyhmcmVlX3R4cGcsIEJJVF9GUkVFX1RYUEdfSElHSCkpO1xuK1x0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfbm9ybWFsLFxuK1x0XHQgICB1MzJfZ2V0X2JpdHMoZnJlZV90eHBnLCBCSVRfRlJFRV9UWFBHX05PUk1BTCkpO1xuK1x0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfbG93LFxuK1x0XHQgICB1MzJfZ2V0X2JpdHMoZnJlZV90eHBnLCBCSVRfRlJFRV9UWFBHX0xPVykpO1xuK1x0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfcHViLFxuK1x0XHQgICB1MzJfZ2V0X2JpdHMoZnJlZV90eHBnLCBCSVRfRlJFRV9UWFBHX1BVQikpO1xuK31cbitcbitzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfaW5pdF9mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldilcbit7XG4rXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4rXHRjb25zdCBzdHJ1Y3QgcnR3X3BhZ2VfdGFibGUgKnBnX3RibDtcbitcdHUzMiBmcmVlX3R4cGc7XG4rXHR1MTYgcHVicV9udW07XG4rXG4rXHRmcmVlX3R4cGcgPSBydHdfcmVhZDMyKHJ0d2RldiwgUkVHX1NESU9fRlJFRV9UWFBHKTtcbitcdGlmIChmcmVlX3R4cGcpIHtcbitcdFx0cnR3X3NkaW9fODcyM2JzX3N0b3JlX2ZyZWVfdHhwZyhydHdkZXYsIGZyZWVfdHhwZyk7XG4rXHR9IGVsc2Uge1xuK1x0XHRwZ190YmwgPSBcdTAwMjZydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VwYWdlX3RhYmxlWzBdO1xuK1x0XHRwdWJxX251bSA9IHJ0d2Rldi1cdTAwM2VmaWZvLmFjcV9wZ19udW0gLSBwZ190YmwtXHUwMDNlaHFfbnVtIC1cbitcdFx0XHQgICBwZ190YmwtXHUwMDNlbHFfbnVtIC0gcGdfdGJsLVx1MDAzZW5xX251bSAtIHBnX3RibC1cdTAwM2VleHFfbnVtIC1cbitcdFx0XHQgICBwZ190YmwtXHUwMDNlZ2FwcV9udW07XG4rXG4rXHRcdGF0b21pY19zZXQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX2hpZ2gsIHBnX3RibC1cdTAwM2VocV9udW0pO1xuK1x0XHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19ub3JtYWwsIHBnX3RibC1cdTAwM2VucV9udW0pO1xuK1x0XHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19sb3csIHBnX3RibC1cdTAwM2VscV9udW0pO1xuK1x0XHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19wdWIsIHB1YnFfbnVtKTtcbitcdH1cbitcbitcdGF0b21pY19zZXQoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9vcXRfZnJlZSxcbitcdFx0ICAgcnR3X3JlYWQ4KHJ0d2RldiwgUkVHX1NESU9fT1FUX0ZSRUVfUEcpKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcnR3X3NkaW9fODcyM2JzX3N5bmNfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4re1xuK1x0dTMyIGZyZWVfdHhwZyA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19GUkVFX1RYUEcpO1xuK1xuK1x0aWYgKGZyZWVfdHhwZylcbitcdFx0cnR3X3NkaW9fODcyM2JzX3N0b3JlX2ZyZWVfdHhwZyhydHdkZXYsIGZyZWVfdHhwZyk7XG4rfVxuK1xuKy8qXG4rICogU3VtIG9mIHRoZSBxdWV1ZSdzIGRlZGljYXRlZCBjb3VudGVyIGFuZCB0aGUgcHVibGljIHBvb2wsIGNsYW1wZWQgYXQgemVybzpcbisgKiBhIGxvc3QgdXBkYXRlIGJldHdlZW4gdGhlIGNoZWNrIGJlbG93IGFuZCBydHdfc2Rpb184NzIzYnNfY29uc3VtZV90eHBnKClcbisgKiBjYW4gYnJpZWZseSBkcml2ZSBhIGNvdW50ZXIgbmVnYXRpdmUsIGFuZCBsZXR0aW5nIHRoYXQgd3JhcCB3b3VsZCBoaWRlIHRoZVxuKyAqIHNob3J0YWdlIGluc3RlYWQgb2YgdHJpZ2dlcmluZyBhIHJlc3luYyBmcm9tIHRoZSBjaGlwLlxuKyAqL1xuK3N0YXRpYyB1bnNpZ25lZCBpbnQgcnR3X3NkaW9fODcyM2JzX3BhZ2VzX2ZyZWUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcbitcdFx0XHRcdFx0ICAgICAgIGF0b21pY190ICpkZWRpY2F0ZWQpXG4re1xuK1x0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuK1x0aW50IGZyZWU7XG4rXG4rXHRmcmVlID0gYXRvbWljX3JlYWQoZGVkaWNhdGVkKSArIGF0b21pY19yZWFkKFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19wdWIpO1xuK1xuK1x0cmV0dXJuIGZyZWUgXHUwMDNlIDAgPyBmcmVlIDogMDtcbit9XG4rXG4rc3RhdGljIGF0b21pY190ICpydHdfc2Rpb184NzIzYnNfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IHF1ZXVlKVxuK3tcbitcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbitcbitcdHN3aXRjaCAocXVldWUpIHtcbitcdGNhc2UgUlRXX1RYX1FVRVVFX1ZJOlxuK1x0XHRyZXR1cm4gXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX25vcm1hbDtcbitcdGNhc2UgUlRXX1RYX1FVRVVFX0JFOlxuK1x0Y2FzZSBSVFdfVFhfUVVFVUVfQks6XG4rXHRcdHJldHVybiBcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfbG93O1xuK1x0Y2FzZSBSVFdfVFhfUVVFVUVfQkNOOlxuK1x0Y2FzZSBSVFdfVFhfUVVFVUVfSDJDOlxuK1x0Y2FzZSBSVFdfVFhfUVVFVUVfSEkwOlxuK1x0Y2FzZSBSVFdfVFhfUVVFVUVfTUdNVDpcbitcdGNhc2UgUlRXX1RYX1FVRVVFX1ZPOlxuK1x0XHRyZXR1cm4gXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX2hpZ2g7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gTlVMTDtcbitcdH1cbit9XG4rXG4gc3RhdGljIGludCBydHdfc2Rpb19jaGVja19mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggcXVldWUsXG4gXHRcdFx0XHQgICAgc2l6ZV90IGNvdW50KVxuIHtcbiBcdHVuc2lnbmVkIGludCBwYWdlc19mcmVlLCBwYWdlc19uZWVkZWQ7XG4gXG4tXHRpZiAocnR3X2NoaXBfd2NwdV84MDUxKHJ0d2RldikpIHtcbitcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpIHtcbitcdFx0YXRvbWljX3QgKmRlZGljYXRlZDtcbitcbitcdFx0ZGVkaWNhdGVkID0gcnR3X3NkaW9fODcyM2JzX2ZyZWVfdHhwZyhydHdkZXYsIHF1ZXVlKTtcbitcdFx0aWYgKCFkZWRpY2F0ZWQpIHtcbitcdFx0XHRydHdfd2FybihydHdkZXYsIFwiVW5rbm93biBtYXBwaW5nIGZvciBxdWV1ZSAldVxcblwiLCBxdWV1ZSk7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcbitcdFx0cGFnZXNfZnJlZSA9IHJ0d19zZGlvXzg3MjNic19wYWdlc19mcmVlKHJ0d2RldiwgZGVkaWNhdGVkKTtcbitcdFx0cGFnZXNfbmVlZGVkID0gRElWX1JPVU5EX1VQKGNvdW50LCBydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VwYWdlX3NpemUpO1xuK1x0XHRpZiAocGFnZXNfbmVlZGVkIFx1MDAzYz0gcGFnZXNfZnJlZSlcbitcdFx0XHRyZXR1cm4gMDtcbitcbitcdFx0cnR3X3NkaW9fODcyM2JzX3N5bmNfZnJlZV90eHBnKHJ0d2Rldik7XG4rXHRcdHBhZ2VzX2ZyZWUgPSBydHdfc2Rpb184NzIzYnNfcGFnZXNfZnJlZShydHdkZXYsIGRlZGljYXRlZCk7XG4rXHR9IGVsc2UgaWYgKHJ0d19jaGlwX3djcHVfODA1MShydHdkZXYpKSB7XG4gXHRcdHUzMiBmcmVlX3R4cGc7XG4gXG4gXHRcdGZyZWVfdHhwZyA9IHJ0d19zZGlvX3JlYWQzMihydHdkZXYsIFJFR19TRElPX0ZSRUVfVFhQRyk7XG5AQCAtNjMyLDQ0ICs3NTMsMTIzIEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9fY2hlY2tfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IHF1ZXVlLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBpbnQgcnR3X3NkaW9fODcyM2JzX3dhaXRfdHhfb3F0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4re1xuK1x0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuK1x0dTggZnJlZTtcbitcdGludCBpO1xuK1xuK1x0aWYgKGF0b21pY19hZGRfdW5sZXNzKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfb3F0X2ZyZWUsIC0xLCAwKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBSVFdfU0RJT19PUVRfVElNRU9VVF9NUzsgaSsrKSB7XG4rXHRcdGZyZWUgPSBydHdfcmVhZDgocnR3ZGV2LCBSRUdfU0RJT19PUVRfRlJFRV9QRyk7XG4rXHRcdGlmIChmcmVlKSB7XG4rXHRcdFx0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZXR4X29xdF9mcmVlLCBmcmVlIC0gMSk7XG4rXHRcdFx0cmV0dXJuIDA7XG4rXHRcdH1cbitcdFx0dXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApO1xuK1x0fVxuK1xuK1x0cmV0dXJuIC1FQlVTWTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcnR3X3NkaW9fODcyM2JzX2NvbnN1bWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCBxdWV1ZSxcbitcdFx0XHRcdFx0IHVuc2lnbmVkIGludCBwYWdlcylcbit7XG4rXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4rXHRhdG9taWNfdCAqZGVkaWNhdGVkO1xuK1x0dW5zaWduZWQgaW50IHRha2VuO1xuK1x0aW50IGZyZWU7XG4rXG4rXHRkZWRpY2F0ZWQgPSBydHdfc2Rpb184NzIzYnNfZnJlZV90eHBnKHJ0d2RldiwgcXVldWUpO1xuK1x0aWYgKCFkZWRpY2F0ZWQpXG4rXHRcdHJldHVybjtcbitcbitcdGZyZWUgPSBhdG9taWNfcmVhZChkZWRpY2F0ZWQpO1xuK1x0dGFrZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHBhZ2VzLCBmcmVlIFx1MDAzZSAwID8gZnJlZSA6IDApO1xuK1x0YXRvbWljX3N1Yih0YWtlbiwgZGVkaWNhdGVkKTtcbitcbitcdHBhZ2VzIC09IHRha2VuO1xuK1x0aWYgKHBhZ2VzIFx1MDAyNlx1MDAyNiBhdG9taWNfc3ViX3JldHVybihwYWdlcywgXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX3B1YikgXHUwMDNjIDApXG4rXHRcdGF0b21pY19zZXQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX3B1YiwgMCk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgcnR3X3NkaW9fd3JpdGVfcG9ydChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdCAgICAgICBlbnVtIHJ0d190eF9xdWV1ZV90eXBlIHF1ZXVlKVxuIHtcbiBcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbitcdGJvb2wgcnRsODcyM2JzID0gcnR3X2lzXzg3MjNicyhydHdkZXYpO1xuK1x0dW5zaWduZWQgaW50IG9yaWdfbGVuID0gc2tiLVx1MDAzZWxlbjtcbitcdHVuc2lnbmVkIGludCBwYWdlcztcbitcdHNpemVfdCB3cml0ZV9zaXplO1xuIFx0Ym9vbCBidXNfY2xhaW07XG4gXHRzaXplX3QgdHhzaXplO1xuIFx0dTMyIHR4YWRkcjtcbiBcdGludCByZXQ7XG4gXG4tXHR0eGFkZHIgPSBydHdfc2Rpb19nZXRfdHhfYWRkcihydHdkZXYsIHNrYi1cdTAwM2VsZW4sIHF1ZXVlKTtcbi1cdGlmICghdHhhZGRyKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdGlmIChydGw4NzIzYnMpIHtcbitcdFx0dHhzaXplID0gcm91bmRfdXAob3JpZ19sZW4sIDQpO1xuK1x0XHR3cml0ZV9zaXplID0gdHhzaXplIFx1MDAzZSBSVFdfU0RJT19CTE9DS19TSVpFID9cbitcdFx0XHQgICAgIHJvdW5kX3VwKHR4c2l6ZSwgUlRXX1NESU9fQkxPQ0tfU0laRSkgOiB0eHNpemU7XG4rXHR9IGVsc2Uge1xuK1x0XHR0eHNpemUgPSBzZGlvX2FsaWduX3NpemUocnR3c2Rpby1cdTAwM2VzZGlvX2Z1bmMsIG9yaWdfbGVuKTtcbitcdFx0d3JpdGVfc2l6ZSA9IHR4c2l6ZTtcbitcdH1cbitcbitcdGlmICh3cml0ZV9zaXplIFx1MDAzZSBvcmlnX2xlbikge1xuK1x0XHR1bnNpZ25lZCBpbnQgcGFkZGluZyA9IHdyaXRlX3NpemUgLSBvcmlnX2xlbjtcbiBcbi1cdHR4c2l6ZSA9IHNkaW9fYWxpZ25fc2l6ZShydHdzZGlvLVx1MDAzZXNkaW9fZnVuYywgc2tiLVx1MDAzZWxlbik7XG4rXHRcdGlmIChza2JfdGFpbHJvb20oc2tiKSBcdTAwM2MgcGFkZGluZykge1xuK1x0XHRcdHJldCA9IHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLFxuK1x0XHRcdFx0XHQgICAgICAgcGFkZGluZyAtIHNrYl90YWlscm9vbShza2IpLFxuK1x0XHRcdFx0XHQgICAgICAgR0ZQX0tFUk5FTCk7XG4rXHRcdFx0aWYgKHJldClcbitcdFx0XHRcdHJldHVybiByZXQ7XG4rXHRcdH1cbitcdFx0c2tiX3B1dF96ZXJvKHNrYiwgcGFkZGluZyk7XG4rXHR9XG4rXG4rXHR0eGFkZHIgPSBydHdfc2Rpb19nZXRfdHhfYWRkcihydHdkZXYsIHR4c2l6ZSwgcXVldWUpO1xuK1x0aWYgKCF0eGFkZHIpIHtcbitcdFx0cmV0ID0gLUVJTlZBTDtcbitcdFx0Z290byBvdXRfdHJpbTtcbitcdH1cbiBcbiBcdHJldCA9IHJ0d19zZGlvX2NoZWNrX2ZyZWVfdHhwZyhydHdkZXYsIHF1ZXVlLCB0eHNpemUpO1xuIFx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbitcdFx0Z290byBvdXRfdHJpbTtcbitcbitcdGlmIChydGw4NzIzYnMpIHtcbitcdFx0cmV0ID0gcnR3X3NkaW9fODcyM2JzX3dhaXRfdHhfb3F0KHJ0d2Rldik7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0Z290byBvdXRfdHJpbTtcbitcdH1cbiBcbiBcdGlmICghSVNfQUxJR05FRCgodW5zaWduZWQgbG9uZylza2ItXHUwMDNlZGF0YSwgUlRXX1NESU9fREFUQV9QVFJfQUxJR04pKVxuIFx0XHRydHdfd2FybihydHdkZXYsIFwiR290IHVuYWxpZ25lZCBTS0IgaW4gJXMoKSBmb3IgcXVldWUgJXVcXG5cIixcbiBcdFx0XHQgX19mdW5jX18sIHF1ZXVlKTtcbiBcbiBcdGJ1c19jbGFpbSA9IHJ0d19zZGlvX2J1c19jbGFpbV9uZWVkZWQocnR3c2Rpbyk7XG4tXG4gXHRpZiAoYnVzX2NsYWltKVxuIFx0XHRzZGlvX2NsYWltX2hvc3QocnR3c2Rpby1cdTAwM2VzZGlvX2Z1bmMpO1xuLVxuLVx0cmV0ID0gc2Rpb19tZW1jcHlfdG9pbyhydHdzZGlvLVx1MDAzZXNkaW9fZnVuYywgdHhhZGRyLCBza2ItXHUwMDNlZGF0YSwgdHhzaXplKTtcbi1cbitcdHJldCA9IHNkaW9fbWVtY3B5X3RvaW8ocnR3c2Rpby1cdTAwM2VzZGlvX2Z1bmMsIHR4YWRkciwgc2tiLVx1MDAzZWRhdGEsXG4rXHRcdFx0ICAgICAgIHdyaXRlX3NpemUpO1xuIFx0aWYgKGJ1c19jbGFpbSlcbiBcdFx0c2Rpb19yZWxlYXNlX2hvc3QocnR3c2Rpby1cdTAwM2VzZGlvX2Z1bmMpO1xuIFxuLVx0aWYgKHJldClcbitcdGlmIChyZXQpIHtcbiBcdFx0cnR3X3dhcm4ocnR3ZGV2LFxuIFx0XHRcdCBcIkZhaWxlZCB0byB3cml0ZSAlenUgYnl0ZShzKSB0byBTRElPIHBvcnQgMHglMDh4XCIsXG4tXHRcdFx0IHR4c2l6ZSwgdHhhZGRyKTtcbitcdFx0XHQgd3JpdGVfc2l6ZSwgdHhhZGRyKTtcbitcdH0gZWxzZSBpZiAocnRsODcyM2JzKSB7XG4rXHRcdHBhZ2VzID0gRElWX1JPVU5EX1VQKHR4c2l6ZSwgcnR3ZGV2LVx1MDAzZWNoaXAtXHUwMDNlcGFnZV9zaXplKTtcbitcdFx0cnR3X3NkaW9fODcyM2JzX2NvbnN1bWVfdHhwZyhydHdkZXYsIHF1ZXVlLCBwYWdlcyk7XG4rXHR9XG4gXG4rb3V0X3RyaW06XG4rXHRpZiAod3JpdGVfc2l6ZSBcdTAwM2Ugb3JpZ19sZW4pXG4rXHRcdHNrYl90cmltKHNrYiwgb3JpZ19sZW4pO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtNjc3LDcgKzg3NywxMSBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19pbml0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4ge1xuIFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuIFxuLVx0cnR3c2Rpby1cdTAwM2VpcnFfbWFzayA9IFJFR19TRElPX0hJTVJfUlhfUkVRVUVTVCB8IFJFR19TRElPX0hJTVJfQ1BXTTE7XG4rXHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKVxuK1x0XHRydHdzZGlvLVx1MDAzZWlycV9tYXNrID0gUkVHX1NESU9fSElNUl9SWF9SRVFVRVNUO1xuK1x0ZWxzZVxuK1x0XHRydHdzZGlvLVx1MDAzZWlycV9tYXNrID0gUkVHX1NESU9fSElNUl9SWF9SRVFVRVNUIHxcbitcdFx0XHRcdCAgICBSRUdfU0RJT19ISU1SX0NQV00xO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBydHdfc2Rpb19lbmFibGVfcnhfYWdncmVnYXRpb24oc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbkBAIC02ODUsNiArODg5LDcgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9fZW5hYmxlX3J4X2FnZ3JlZ2F0aW9uKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4gXHR1OCBzaXplLCB0aW1lb3V0O1xuIFxuIFx0c3dpdGNoIChydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VpZCkge1xuK1x0Y2FzZSBSVFdfQ0hJUF9UWVBFXzg3MjNCOlxuIFx0Y2FzZSBSVFdfQ0hJUF9UWVBFXzg3MDNCOlxuIFx0Y2FzZSBSVFdfQ0hJUF9UWVBFXzg4MjFBOlxuIFx0Y2FzZSBSVFdfQ0hJUF9UWVBFXzg4MTJBOlxuQEAgLTcxMiw2ICs5MTcsOCBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19lbmFibGVfcnhfYWdncmVnYXRpb24oc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiBcdFx0ICAgIEZJRUxEX1BSRVAoQklUX0RNQV9BR0dfVE9fVjEsIHRpbWVvdXQpKTtcbiBcbiBcdHJ0d193cml0ZThfc2V0KHJ0d2RldiwgUkVHX1JYRE1BX01PREUsIEJJVF9ETUFfTU9ERSk7XG4rXHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKVxuK1x0XHRydHdfd3JpdGU4X21hc2socnR3ZGV2LCBSRUdfUlhETUFfTU9ERSwgQklUX0RNQV9CVVJTVF9DTlQsIDB4Myk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2VuYWJsZV9pbnRlcnJ1cHQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbkBAIC03NDksOSArOTU2LDUwIEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9fc2V0dXAoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfY2hlY2tfcnFwbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuK3tcbitcdGNvbnN0IHN0cnVjdCBydHdfY2hpcF9pbmZvICpjaGlwID0gcnR3ZGV2LVx1MDAzZWNoaXA7XG4rXHRzdHJ1Y3QgcnR3X2ZpZm9fY29uZiAqZmlmbyA9IFx1MDAyNnJ0d2Rldi1cdTAwM2VmaWZvO1xuK1x0Y29uc3Qgc3RydWN0IHJ0d19wYWdlX3RhYmxlICpwZ190Ymw7XG4rXHR1MTYgcmVzZXJ2ZWRfbnVtO1xuK1x0dTMyIGZyZWVfdHhwZztcbitcdHUxNiBwdWJxX251bTtcbitcbitcdGZyZWVfdHhwZyA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19GUkVFX1RYUEcpO1xuK1x0aWYgKGZyZWVfdHhwZyB8fCAhZmlmby1cdTAwM2VhY3FfcGdfbnVtKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRwZ190YmwgPSBcdTAwMjZjaGlwLVx1MDAzZXBhZ2VfdGFibGVbMF07XG4rXHRyZXNlcnZlZF9udW0gPSBwZ190YmwtXHUwMDNlaHFfbnVtICsgcGdfdGJsLVx1MDAzZWxxX251bSArIHBnX3RibC1cdTAwM2VucV9udW0gK1xuK1x0XHQgICAgICAgcGdfdGJsLVx1MDAzZWV4cV9udW0gKyBwZ190YmwtXHUwMDNlZ2FwcV9udW07XG4rXHRpZiAoZmlmby1cdTAwM2VhY3FfcGdfbnVtIFx1MDAzYz0gcmVzZXJ2ZWRfbnVtKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRwdWJxX251bSA9IGZpZm8tXHUwMDNlYWNxX3BnX251bSAtIHJlc2VydmVkX251bTtcbitcdHJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1JRUE5fTlBRLFxuK1x0XHQgICAgQklUX1JRUE5fTkUocGdfdGJsLVx1MDAzZW5xX251bSwgcGdfdGJsLVx1MDAzZWV4cV9udW0pKTtcbitcdHJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1JRUE4sXG4rXHRcdCAgICBCSVRfUlFQTl9ITFAocGdfdGJsLVx1MDAzZWhxX251bSwgcGdfdGJsLVx1MDAzZWxxX251bSwgcHVicV9udW0pKTtcbit9XG4rXG4gc3RhdGljIGludCBydHdfc2Rpb19zdGFydChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIHtcbitcdHUzMiBjbGVhcjtcbitcbitcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpIHtcbitcdFx0cnR3X3NkaW9fODcyM2JzX2NoZWNrX3JxcG4ocnR3ZGV2KTtcbitcdFx0cnR3X3NkaW9fODcyM2JzX2luaXRfZnJlZV90eHBnKHJ0d2Rldik7XG4rXHR9XG4rXG4gXHRydHdfc2Rpb19lbmFibGVfcnhfYWdncmVnYXRpb24ocnR3ZGV2KTtcbitcbitcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpIHtcbitcdFx0Y2xlYXIgPSBydHdfcmVhZDMyKHJ0d2RldiwgUkVHX1NESU9fSElTUikgXHUwMDI2XG4rXHRcdFx0UlRXX1NESU9fSElTUl9DTEVBUl9NQVNLO1xuK1x0XHRpZiAoY2xlYXIpXG4rXHRcdFx0cnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfU0RJT19ISVNSLCBjbGVhcik7XG4rXHR9XG4rXG4gXHRydHdfc2Rpb19lbmFibGVfaW50ZXJydXB0KHJ0d2Rldik7XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC04MTUsNyArMTA2MywxMSBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb190eF9raWNrX29mZihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIHtcbiBcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbiBcbi1cdHF1ZXVlX3dvcmsocnR3c2Rpby1cdTAwM2V0eHdxLCBcdTAwMjZydHdzZGlvLVx1MDAzZXR4X2hhbmRsZXJfZGF0YS1cdTAwM2V3b3JrKTtcbitcdC8qXG4rXHQgKiBBIHJldHJ5IG1heSBhbHJlYWR5IGJlIHBlbmRpbmcgd2l0aCBhIGRlbGF5OyByZS1hcm0gaXQgc28gYSBuZXdseVxuK1x0ICogcXVldWVkIGZyYW1lIGlzIG5vdCBoZWxkIGJhY2sgYnkgaXQuXG4rXHQgKi9cbitcdG1vZF9kZWxheWVkX3dvcmsocnR3c2Rpby1cdTAwM2V0eHdxLCBcdTAwMjZydHdzZGlvLVx1MDAzZXR4X2hhbmRsZXJfZGF0YS1cdTAwM2V3b3JrLCAwKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcnR3X3NkaW9fbGlua19wcyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBib29sIGVudGVyKVxuQEAgLTgzMSw2ICsxMDgzLDggQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9faW50ZXJmYWNlX2NmZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIFxuIFx0dmFsID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19TRElPX1RYX0NUUkwpO1xuIFx0dmFsIFx1MDAyNj0gMHhmZmY4O1xuK1x0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSlcbitcdFx0dmFsIHw9IEJJVF9TRElPX1RYX0NUUkxfQUxXQVlTX1JFQ09HTklaRTtcbiBcdHJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1NESU9fVFhfQ1RSTCwgdmFsKTtcbiB9XG4gXG5AQCAtOTM3LDYgKzExOTEsMTkgQEAgc3RhdGljIGludCBydHdfc2Rpb190eF93cml0ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuIFxuIFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtxdWV1ZV0sIHNrYik7XG4gXG4rXHQvKlxuK1x0ICogQmFjay1wcmVzc3VyZSBvbiB0aGUgZGF0YSBBQ3MgKEJLL0JFL1ZJL1ZPKTogb25jZSB0aGUgRklGTyBmaWxscyBwYXN0XG4rXHQgKiB0aGUgaGlnaCB3YXRlcm1hcmssIHN0b3AgdGhlIGNvcnJlc3BvbmRpbmcgbWFjODAyMTEgcXVldWUgc28gaXQgc3RvcHNcbitcdCAqIGhhbmRpbmcgdXMgZnJhbWVzLCBib3VuZGluZyB0aGUgcXVldWVpbmcgbGF0ZW5jeS4gUmVzdW1lZCBmcm9tIHRoZSBUWFxuK1x0ICogZHJhaW4gcGF0aCBvbmNlIHRoZSBGSUZPIGRyYWlucyBiZWxvdyB0aGUgbG93IHdhdGVybWFyay5cbitcdCAqL1xuK1x0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSBcdTAwMjZcdTAwMjYgcXVldWUgXHUwMDNjIFJUV19UWF9RVUVVRV9CQ04gXHUwMDI2XHUwMDI2XG4rXHQgICAgIXJ0d3NkaW8tXHUwMDNlcXVldWVfc3RvcHBlZFtxdWV1ZV0gXHUwMDI2XHUwMDI2XG4rXHQgICAgc2tiX3F1ZXVlX2xlbihcdTAwMjZydHdzZGlvLVx1MDAzZXR4X3F1ZXVlW3F1ZXVlXSkgXHUwMDNlPSBSVFdfU0RJT19UWF9GSUZPX0hJV0FURVIpIHtcbitcdFx0cnR3c2Rpby1cdTAwM2VxdWV1ZV9zdG9wcGVkW3F1ZXVlXSA9IHRydWU7XG4rXHRcdGllZWU4MDIxMV9zdG9wX3F1ZXVlKHJ0d2Rldi1cdTAwM2Vodywgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpO1xuK1x0fVxuK1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTEwOTUsNiArMTM2MiwxNCBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19oYW5kbGVfaW50ZXJydXB0KHN0cnVjdCBzZGlvX2Z1bmMgKnNkaW9fZnVuYylcbiBcdFx0cnR3X3NkaW9fcnhfaXNyKHJ0d2Rldik7XG4gXHR9XG4gXG4rXHQvKlxuK1x0ICogUlRMODcyM0JTIGtlZXBzIHJhaXNpbmcgdGhlIGludGVycnVwdCBhZnRlciByZXN1bWUgaWYgdW5kZWZpbmVkXG4rXHQgKiBzdGF0dXMgYml0cyBhcmUgd3JpdHRlbiBiYWNrLCBzbyBhY2tub3dsZWRnZSBvbmx5IHRoZSBiaXRzIHRoYXQgYXJlXG4rXHQgKiBib3RoIGRlZmluZWQgYW5kIHVubWFza2VkLiBPdGhlciBjaGlwcyBrZWVwIHRoZSBleGlzdGluZyBiZWhhdmlvdXIuXG4rXHQgKi9cbitcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpXG4rXHRcdGhpc3IgXHUwMDI2PSBydHdzZGlvLVx1MDAzZWlycV9tYXNrIFx1MDAyNiBSVFdfU0RJT19ISVNSX0NMRUFSX01BU0s7XG4rXG4gXHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19TRElPX0hJU1IsIGhpc3IpO1xuIFxuIFx0cnR3c2Rpby1cdTAwM2VpcnFfdGhyZWFkID0gTlVMTDtcbkBAIC0xMjMxLDQzICsxNTA2LDkyIEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2luZGljYXRlX3R4X3N0YXR1cyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuIFx0aWVlZTgwMjExX3R4X3N0YXR1c19pcnFzYWZlKGh3LCBza2IpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4tXHRcdFx0XHQgICAgICBlbnVtIHJ0d190eF9xdWV1ZV90eXBlIHF1ZXVlKVxuKy8qXG4rICogU2VuZCBvbmUgZnJhbWUgZnJvbSBAcXVldWUuIFJldHVybnMgMSB3aGVuIGEgZnJhbWUgd2FzIHdyaXR0ZW4sIDAgd2hlbiB0aGVcbisgKiBxdWV1ZSB3YXMgZW1wdHkgYW5kIGEgbmVnYXRpdmUgZXJybm8gd2hlbiB0aGUgd3JpdGUgZmFpbGVkLCBpbiB3aGljaCBjYXNlXG4rICogdGhlIGZyYW1lIGlzIHB1dCBiYWNrIGF0IHRoZSBoZWFkIG9mIHRoZSBxdWV1ZS5cbisgKi9cbitzdGF0aWMgaW50IHJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcbitcdFx0XHRcdCAgICAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSlcbiB7XG4gXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuK1x0dTE2IHFfbWFwO1xuIFx0aW50IHJldDtcbiBcbiBcdHNrYiA9IHNrYl9kZXF1ZXVlKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfcXVldWVbcXVldWVdKTtcbiBcdGlmICghc2tiKVxuLVx0XHRyZXR1cm47XG4rXHRcdHJldHVybiAwO1xuIFxuK1x0cV9tYXAgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTtcbiBcdHJldCA9IHJ0d19zZGlvX3dyaXRlX3BvcnQocnR3ZGV2LCBza2IsIHF1ZXVlKTtcbiBcdGlmIChyZXQpIHtcbiBcdFx0c2tiX3F1ZXVlX2hlYWQoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtxdWV1ZV0sIHNrYik7XG4tXHRcdHJldHVybjtcbitcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbiBcdHJ0d19zZGlvX2luZGljYXRlX3R4X3N0YXR1cyhydHdkZXYsIHNrYik7XG4rXG4rXHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpIFx1MDAyNlx1MDAyNiBxdWV1ZSBcdTAwM2MgUlRXX1RYX1FVRVVFX0JDTiBcdTAwMjZcdTAwMjZcbitcdCAgICBydHdzZGlvLVx1MDAzZXF1ZXVlX3N0b3BwZWRbcXVldWVdIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHNrYl9xdWV1ZV9sZW4oXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtxdWV1ZV0pIFx1MDAzYz1cbitcdCAgICBSVFdfU0RJT19UWF9GSUZPX0xPV0FURVIpIHtcbitcdFx0cnR3c2Rpby1cdTAwM2VxdWV1ZV9zdG9wcGVkW3F1ZXVlXSA9IGZhbHNlO1xuK1x0XHRpZWVlODAyMTFfd2FrZV9xdWV1ZShydHdkZXYtXHUwMDNlaHcsIHFfbWFwKTtcbitcdH1cbitcbitcdHJldHVybiAxO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBydHdfc2Rpb190eF9oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4gXHRzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhICp3b3JrX2RhdGEgPVxuLVx0XHRjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJ0d19zZGlvX3dvcmtfZGF0YSwgd29yayk7XG4rXHRcdGNvbnRhaW5lcl9vZih0b19kZWxheWVkX3dvcmsod29yayksIHN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEsXG4rXHRcdFx0ICAgICB3b3JrKTtcbiBcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbztcbiBcdHN0cnVjdCBydHdfZGV2ICpydHdkZXY7XG4tXHRpbnQgbGltaXQsIHF1ZXVlO1xuK1x0aW50IGxpbWl0LCBxdWV1ZSwgcmV0O1xuK1x0Ym9vbCBydGw4NzIzYnM7XG4gXG4gXHRydHdkZXYgPSB3b3JrX2RhdGEtXHUwMDNlcnR3ZGV2O1xuIFx0cnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbitcdHJ0bDg3MjNicyA9IHJ0d19pc184NzIzYnMocnR3ZGV2KTtcbiBcbiBcdGlmICghcnR3X2Z3X2ZlYXR1cmVfY2hlY2soXHUwMDI2cnR3ZGV2LVx1MDAzZWZ3LCBGV19GRUFUVVJFX1RYX1dBS0UpKVxuIFx0XHRydHdfc2Rpb19kZWVwX3BzX2xlYXZlKHJ0d2Rldik7XG4gXG4gXHRmb3IgKHF1ZXVlID0gUlRLX01BWF9UWF9RVUVVRV9OVU0gLSAxOyBxdWV1ZSBcdTAwM2U9IDA7IHF1ZXVlLS0pIHtcbiBcdFx0Zm9yIChsaW1pdCA9IDA7IGxpbWl0IFx1MDAzYyAxMDAwOyBsaW1pdCsrKSB7XG4tXHRcdFx0cnR3X3NkaW9fcHJvY2Vzc190eF9xdWV1ZShydHdkZXYsIHF1ZXVlKTtcbitcdFx0XHRyZXQgPSBydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlKHJ0d2RldiwgcXVldWUpO1xuK1x0XHRcdGlmIChyZXQgPT0gMClcbitcdFx0XHRcdGJyZWFrO1xuK1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbitcdFx0XHRcdC8qXG4rXHRcdFx0XHQgKiBBIHBhZ2Ugc2hvcnRhZ2UgaXMgdHJhbnNpZW50OiBsZWF2ZSB0aGVcbitcdFx0XHRcdCAqIGZyYW1lIHF1ZXVlZCBhbmQgY29tZSBiYWNrIHNob3J0bHkgaW5zdGVhZFxuK1x0XHRcdFx0ICogb2Ygc3RhbGxpbmcgdGhpcyBBQyB1bnRpbCBzb21ldGhpbmcgZWxzZVxuK1x0XHRcdFx0ICoga2lja3MgdGhlIHdvcmtlci5cbitcdFx0XHRcdCAqL1xuK1x0XHRcdFx0aWYgKHJ0bDg3MjNicyBcdTAwMjZcdTAwMjYgcmV0ID09IC1FQlVTWSkge1xuK1x0XHRcdFx0XHRxdWV1ZV9kZWxheWVkX3dvcmsocnR3c2Rpby1cdTAwM2V0eHdxLFxuK1x0XHRcdFx0XHRcdFx0ICAgXHUwMDI2d29ya19kYXRhLVx1MDAzZXdvcmssXG4rXHRcdFx0XHRcdFx0XHQgICBSVFdfU0RJT19UWF9SRVRSWV9ERUxBWSk7XG4rXHRcdFx0XHRcdHJldHVybjtcbitcdFx0XHRcdH1cbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdH1cbitcbitcdFx0XHQvKlxuK1x0XHRcdCAqIFJlc3RhcnQgZnJvbSB0aGUgaGlnaGVzdCBwcmlvcml0eSBxdWV1ZSBhZnRlciBldmVyeVxuK1x0XHRcdCAqIG1hbmFnZW1lbnQgZnJhbWUgc28gdGhlIGpvaW4gc2VxdWVuY2UgaXMgbm90IGhlbGQgdXBcbitcdFx0XHQgKiBiZWhpbmQgYSBkYXRhIGJhY2tsb2cuXG4rXHRcdFx0ICovXG4rXHRcdFx0aWYgKHJ0bDg3MjNicyBcdTAwMjZcdTAwMjYgcXVldWUgPT0gUlRXX1RYX1FVRVVFX01HTVQpIHtcbitcdFx0XHRcdHF1ZXVlX2RlbGF5ZWRfd29yayhydHdzZGlvLVx1MDAzZXR4d3EsXG4rXHRcdFx0XHRcdFx0ICAgXHUwMDI2d29ya19kYXRhLVx1MDAzZXdvcmssIDApO1xuK1x0XHRcdFx0cmV0dXJuO1xuK1x0XHRcdH1cbiBcbiBcdFx0XHRpZiAoc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfcXVldWVbcXVldWVdKSlcbiBcdFx0XHRcdGJyZWFrO1xuQEAgLTEyOTQsMTQgKzE2MTgsMTYgQEAgc3RhdGljIGludCBydHdfc2Rpb19pbml0X3R4KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgUlRLX01BWF9UWF9RVUVVRV9OVU07IGkrKylcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFJUS19NQVhfVFhfUVVFVUVfTlVNOyBpKyspIHtcbiBcdFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZydHdzZGlvLVx1MDAzZXR4X3F1ZXVlW2ldKTtcbitcdFx0cnR3c2Rpby1cdTAwM2VxdWV1ZV9zdG9wcGVkW2ldID0gZmFsc2U7XG4rXHR9XG4gXHRydHdzZGlvLVx1MDAzZXR4X2hhbmRsZXJfZGF0YSA9IGttYWxsb2Nfb2JqKCpydHdzZGlvLVx1MDAzZXR4X2hhbmRsZXJfZGF0YSk7XG4gXHRpZiAoIXJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhKVxuIFx0XHRnb3RvIGVycl9kZXN0cm95X3dxO1xuIFxuIFx0cnR3c2Rpby1cdTAwM2V0eF9oYW5kbGVyX2RhdGEtXHUwMDNlcnR3ZGV2ID0gcnR3ZGV2O1xuLVx0SU5JVF9XT1JLKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhLVx1MDAzZXdvcmssIHJ0d19zZGlvX3R4X2hhbmRsZXIpO1xuK1x0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9oYW5kbGVyX2RhdGEtXHUwMDNld29yaywgcnR3X3NkaW9fdHhfaGFuZGxlcik7XG4gXG4gXHRyZXR1cm4gMDtcbiBcbkBAIC0xMzE1LDYgKzE2NDEsNyBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19kZWluaXRfdHgoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiBcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbiBcdGludCBpO1xuIFxuK1x0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhLVx1MDAzZXdvcmspO1xuIFx0ZGVzdHJveV93b3JrcXVldWUocnR3c2Rpby1cdTAwM2V0eHdxKTtcbiBcdGtmcmVlKHJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oXG5pbmRleCA0NTdlOGIwMjM4MGU1Li4yZjFiNjdmNGJiYzdjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmhcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oXG5AQCAtMjIsNiArMjIsNyBAQFxuIFxuIC8qIFNESU8gVHggQ29udHJvbCAqL1xuICNkZWZpbmUgUkVHX1NESU9fVFhfQ1RSTFx0XHRcdChTRElPX0xPQ0FMX09GRlNFVCArIDB4MDAwMClcbisjZGVmaW5lIEJJVF9TRElPX1RYX0NUUkxfQUxXQVlTX1JFQ09HTklaRVx0QklUKDQpXG4gXG4gLypTRElPIHN0YXR1cyB0aW1lb3V0Ki9cbiAjZGVmaW5lIFJFR19TRElPX1RJTUVPVVRcdFx0XHQoU0RJT19MT0NBTF9PRkZTRVQgKyAweDAwMDIpXG5AQCAtNzcsNiArNzgsMTQgQEBcbiAvKiB0aGUgZm9sbG93aW5nIHR3byBhcmUgUlRMODE4OCBTRElPIFNwZWNpZmljICovXG4gI2RlZmluZSBSRUdfU0RJT19ISVNSX01DVV9FUlJcdFx0XHRCSVQoMjgpXG4gI2RlZmluZSBSRUdfU0RJT19ISVNSX1RTRl9CSVQzMl9UT0dHTEVcdFx0QklUKDI5KVxuKyNkZWZpbmUgUlRXX1NESU9fSElTUl9DTEVBUl9NQVNLXHRcdFxcXG4rXHQoUkVHX1NESU9fSElTUl9UWEVSUiB8IFJFR19TRElPX0hJU1JfUlhFUlIgfCBcXFxuK1x0IFJFR19TRElPX0hJU1JfVFhGT1ZXIHwgUkVHX1NESU9fSElTUl9SWEZPVlcgfCBcXFxuK1x0IFJFR19TRElPX0hJU1JfVFhCQ05PSyB8IFJFR19TRElPX0hJU1JfVFhCQ05FUlIgfCBcXFxuK1x0IFJFR19TRElPX0hJU1JfQzJIQ01EIHwgUkVHX1NESU9fSElTUl9DUFdNMSB8IFxcXG4rXHQgUkVHX1NESU9fSElTUl9DUFdNMiB8IFJFR19TRElPX0hJU1JfSFNJU1JfSU5EIHwgXFxcbitcdCBSRUdfU0RJT19ISVNSX0dUSU5UM19JTkQgfCBSRUdfU0RJT19ISVNSX0dUSU5UNF9JTkQgfCBcXFxuK1x0IFJFR19TRElPX0hJU1JfUFNUSU1FT1VUIHwgUkVHX1NESU9fSElTUl9PQ1BJTlQpXG4gXG4gLyogSENJIEN1cnJlbnQgUG93ZXIgTW9kZSAqL1xuICNkZWZpbmUgUkVHX1NESU9fSENQV01cdFx0XHRcdChTRElPX0xPQ0FMX09GRlNFVCArIDB4MDAxOSlcbkBAIC04Niw2ICs5NSwxMCBAQFxuICNkZWZpbmUgUkVHX1NESU9fT1FUX0ZSRUVfUEdcdFx0XHQoU0RJT19MT0NBTF9PRkZTRVQgKyAweDAwMUUpXG4gLyogRnJlZSBUeCBCdWZmZXIgUGFnZSAqL1xuICNkZWZpbmUgUkVHX1NESU9fRlJFRV9UWFBHXHRcdFx0KFNESU9fTE9DQUxfT0ZGU0VUICsgMHgwMDIwKVxuKyNkZWZpbmUgQklUX0ZSRUVfVFhQR19ISUdIXHRcdFx0R0VOTUFTSyg3LCAwKVxuKyNkZWZpbmUgQklUX0ZSRUVfVFhQR19OT1JNQUxcdFx0XHRHRU5NQVNLKDE1LCA4KVxuKyNkZWZpbmUgQklUX0ZSRUVfVFhQR19MT1dcdFx0XHRHRU5NQVNLKDIzLCAxNilcbisjZGVmaW5lIEJJVF9GUkVFX1RYUEdfUFVCXHRcdFx0R0VOTUFTSygzMSwgMjQpXG4gLyogSENJIEN1cnJlbnQgUG93ZXIgTW9kZSAxICovXG4gI2RlZmluZSBSRUdfU0RJT19IQ1BXTTFcdFx0XHRcdChTRElPX0xPQ0FMX09GRlNFVCArIDB4MDAyNClcbiAvKiBIQ0kgQ3VycmVudCBQb3dlciBNb2RlIDIgKi9cbkBAIC0xNDMsNyArMTU2LDcgQEAgc3RydWN0IHJ0d19zZGlvX3R4X2RhdGEge1xuIH07XG4gXG4gc3RydWN0IHJ0d19zZGlvX3dvcmtfZGF0YSB7XG4tXHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yaztcbitcdHN0cnVjdCBkZWxheWVkX3dvcmsgd29yaztcbiBcdHN0cnVjdCBydHdfZGV2ICpydHdkZXY7XG4gfTtcbiBcbkBAIC0xNTksNiArMTcyLDEzIEBAIHN0cnVjdCBydHdfc2RpbyB7XG4gXHRzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqdHh3cTtcbiBcdHN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEgKnR4X2hhbmRsZXJfZGF0YTtcbiBcdHN0cnVjdCBza19idWZmX2hlYWQgdHhfcXVldWVbUlRLX01BWF9UWF9RVUVVRV9OVU1dO1xuK1x0Ym9vbCBxdWV1ZV9zdG9wcGVkW1JUS19NQVhfVFhfUVVFVUVfTlVNXTtcbitcbitcdGF0b21pY190IGZyZWVfcGdfaGlnaDtcbitcdGF0b21pY190IGZyZWVfcGdfbm9ybWFsO1xuK1x0YXRvbWljX3QgZnJlZV9wZ19sb3c7XG4rXHRhdG9taWNfdCBmcmVlX3BnX3B1YjtcbitcdGF0b21pY190IHR4X29xdF9mcmVlO1xuIH07XG4gXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHJ0d19zZGlvX3BtX29wcztcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3R4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3R4LmNcbmluZGV4IDg3ODZiYmI0MjFjMmIuLjRlMTEwYTQ1N2U3MWQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3R4LmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvdHguY1xuQEAgLTIwOCw4ICsyMDgsOSBAQCB2b2lkIHJ0d190eF9yZXBvcnRfZW5xdWV1ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBzbilcbiBcdF9fc2tiX3F1ZXVlX3RhaWwoXHUwMDI2dHhfcmVwb3J0LVx1MDAzZXF1ZXVlLCBza2IpO1xuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ0eF9yZXBvcnQtXHUwMDNlcV9sb2NrLCBmbGFncyk7XG4gXG4tXHRpZiAocnR3ZGV2LVx1MDAzZWNoaXAtXHUwMDNlaWQgPT0gUlRXX0NISVBfVFlQRV84NzIzRCBcdTAwMjZcdTAwMjZcbi1cdCAgICBydHdkZXYtXHUwMDNlaGNpLnR5cGUgPT0gUlRXX0hDSV9UWVBFX1VTQilcbitcdGlmICgocnR3ZGV2LVx1MDAzZWNoaXAtXHUwMDNlaWQgPT0gUlRXX0NISVBfVFlQRV84NzIzRCBcdTAwMjZcdTAwMjZcbitcdCAgICAgcnR3ZGV2LVx1MDAzZWhjaS50eXBlID09IFJUV19IQ0lfVFlQRV9VU0IpIHx8XG4rXHQgICAgcnR3X2lzXzg3MjNicyhydHdkZXYpKVxuIFx0XHR0aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcygyNTAwKTtcbiBcbiBcdG1vZF90aW1lcihcdTAwMjZ0eF9yZXBvcnQtXHUwMDNlcHVyZ2VfdGltZXIsIGppZmZpZXMgKyB0aW1lb3V0KTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjUxOjUxLjExMzIxMDQyOFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg3NzI0NTUxNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqU0RJTyBEcml2ZXIgUGF0Y2ggRXZhbHVhdGlvbioqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggc2VyaWVzIGZvciB0aGUgYHJ0dzg4YCBkcml2ZXIsIHNwZWNpZmljYWxseSBhZGRpbmcgc3VwcG9ydCBmb3IgUlRMODcyM0JTIFNESU8uIFRoaXMgaGl0cyBxdWl0ZSBhIGZldyBmaWxlczogYGZ3LmNgLCBgZncuaGAsIGBtYWluLmhgLCBgcnguY2AsIGBzZGlvLmNgLCBgc2Rpby5oYCwgYW5kIGB0eC5jYC4gVGhhdCdzIGEgd2lyZWxlc3MgZHJpdmVyIGZvciBSZWFsdGVrIDgwMi4xMWFjLzgwMi4xMW4gZGV2aWNlcywgc28gaXQncyBhIGNyaXRpY2FsIHBhcnQgb2YgdGhlIHdpcmVsZXNzIHN0YWNrLCBhbmQgdGhlIGNoYW5nZXMgYXJlIGZvY3VzZWQgb24gdGhlIFNESU8gaW50ZXJmYWNlIGFuZCBmaXJtd2FyZSBoYW5kbGluZywgcGFydGljdWxhcmx5IGFyb3VuZCBgcnR3X2lzXzg3MjNicyhydHdkZXYpYC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMsIGNhbiB3ZSBmdXp6IHRoaXM/IElzIHRoaXMgZXZlbiByZWFjaGFibGUgd2l0aGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/XG5cblNESU8gaXMgYSB0cmlja3kgb25lLiBTdGFuZGFyZCBRRU1VIGRvZXNuJ3QgdHlwaWNhbGx5IGVtdWxhdGUgU0RJTyBkZXZpY2VzLiBBcmUgdGhlcmUgYW55IHNvZnR3YXJlIGVtdWxhdGlvbnMgZm9yIFNESU8gb3IgTU1DIHRoYXQgd2UgY291bGQgbGV2ZXJhZ2U/IEkgbmVlZCB0byB0aGluayB0aGlzIHRocm91Z2ggY2FyZWZ1bGx5LiBXYWl0LCBtYWM4MDIxMV9od3NpbSBlbXVsYXRlcyBtYWM4MDIxMSwgYnV0IHRoaXMgaXMgYSBzcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIsIHNvIGRvZXMgaXQgbWF0dGVyIHRoYXQgbWFjODAyMTEgaXMgZW11bGF0ZWQgaWYgdGhpcyBpcyB0aGUgaGFyZHdhcmUgZHJpdmVyIGl0c2VsZiAocnR3ODgpPyBDYW4gKnJ0dzg4KiBiZSBmdXp6ZWQ/XG5cbkdlbmVyYWxseSwgSSBrbm93IGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlcnMsIGVzcGVjaWFsbHkgdGhvc2UgaW50ZXJhY3Rpbmcgd2l0aCBTRElPLCBVU0IsIG9yIFBDSWUsIHVzdWFsbHkgcmVxdWlyZSBhY3R1YWwgaGFyZHdhcmUgdW5sZXNzIHRoZXJlJ3MgYW4gZW11bGF0b3IuIFVTQiBkcml2ZXJzLCB3ZSBjYW4gc29tZXRpbWVzIGdldCBhd2F5IHdpdGggdXNpbmcgYGR1bW15X2hjZGAgb3IgYHJhdy1nYWRnZXRgLiBQQ0llIGRyaXZlcnMgYXJlIGEgbmlnaHRtYXJlIGluIHRoaXMgY2FzZSwgZnV6emluZyB0aGVtIGlzIHRvdWdoIHVubGVzcyB0aGVyZSdzIGEgc29mdHdhcmUgZW11bGF0aW9uLiBCdXQgd2hhdCBhYm91dCBTRElPPyBJcyB0aGVyZSBhIGR1bW15IFNESU8gaG9zdCBjb250cm9sbGVyIG91dCB0aGVyZSBzb21ld2hlcmU/IEknbGwgbmVlZCB0byBjaGVjayBpZiB0aGVyZSBpcyBhbnkgU0RJTyBmdXp6aW5nIHN1cHBvcnQsIG9yIGlmIHRoaXMgZXZlbiBpcyByZWFjaGFibGUuXG5cbkkgbmVlZCB0byBkbyBhIHF1aWNrIHNlYXJjaCBmb3IgU0RJTyBlbXVsYXRpb24gb3IsIHNwZWNpZmljYWxseSwgd2hldGhlciBgcnR3ODhgIGlzIGZ1enplZCBhdCBhbGwuXG5cbldhaXQgYSBzZWNvbmQuIFRoZSBwcm9tcHQgc2F5cywgXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOiAuLi4gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAuLi4gdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXCIgT0ssIHNvIFNESU8gaXMgYSBoYXJkd2FyZSBidXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBrbm93IGlmIHRoaXMgaXMgZnV6YWJsZSEgTGV0J3MgY2hlY2sgaWYgdGhlcmUncyBhIHdheSB0byBmdXp6IFNESU8hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjE3LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDU2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6NTE6NTkuODg1NjY4MDE0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NjEzNTc2NzYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImR1bW15X3NkaW9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjUyOjAxLjg0NzAzNjk4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzExMTIwNjc4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBzdW1tYXJpemVkIGFzIHJlcXVlc3RlZDpcblxuKipBc3Nlc3NpbmcgdGhlIExhbmRzY2FwZSBmb3IgU0RJTyBIb3N0IEVtdWxhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVyZSBhcmUgYW55IHJlYWRpbHkgYXZhaWxhYmxlIFNESU8gaG9zdCBlbXVsYXRvcnMgb3V0IHRoZXJlLiBCZWZvcmUgSSBzdGFydCBidWlsZGluZyBzb21ldGhpbmcgZnJvbSBzY3JhdGNoLCBpdCBtYWtlcyBzZW5zZSB0byBzZWUgd2hhdCdzIGFscmVhZHkgYmVlbiBjcmVhdGVkLiBUaGlzIGlzIGEgY29tbW9uIHN0YXJ0aW5nIHBvaW50IGZvciBhbnkgcHJvamVjdCwgaXNuJ3QgaXQ/IFNhdmVzIHRpbWUsIGVuZXJneSwgYW5kIHJlc291cmNlcyB0byBzZWUgaWYgc29tZW9uZSBlbHNlIGhhcyBhbHJlYWR5IHRhY2tsZWQgYSBzaW1pbGFyIGNoYWxsZW5nZS4gSSdsbCBuZWVkIHRvIGtub3cgd2hhdCdzIG91dCB0aGVyZSBzbyBJIGNhbiBkZXRlcm1pbmUgaWYgYW55IGV4aXN0aW5nIHNvbHV0aW9uIG1lZXRzIHRoZSByZXF1aXJlbWVudHMsIG9yLCBpZiBub3QsIHdoYXQgYXNwZWN0cyBtaWdodCBiZSBhcHBsaWNhYmxlLCBvciBhdCBsZWFzdCBzZXJ2ZSBhcyBhIHVzZWZ1bCBzdGFydGluZyBwb2ludCBmb3IgbXkgb3duIHdvcmsuIE15IGV4cGVyaWVuY2UgaW4gdGhpcyBmaWVsZCBoZWxwcyBtZSBhcHByZWNpYXRlIHRoYXQgZ29vZCBkZXNpZ24gcmVxdWlyZXMgYSBzb2xpZCBmb3VuZGF0aW9uIGluIHByaW9yIGFydC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM2MzgsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOTo1MjowNC45NTgyNDY0OTJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ4NTMwNjE4OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2Rpby4qZW11bFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6NTI6MDcuNDQzNTU5ODcxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc1NzM1MzE0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBSVFc4OCBEcml2ZXIgZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBjb25maXJtIGlzIHdoZXRoZXIgYHJ0dzg4YCBpcyAqYWxzbyogYSBVU0IgZHJpdmVyLiBUaGUgY29kZSBJJ20gZXhhbWluaW5nIHJlZmVyZW5jZXMgYHJ0d19pc184NzIzYnMocnR3ZGV2KWAsIGFuZCB0aGF0IG1hY3JvIHNlZW1zIHRvIHNwZWNpZmljYWxseSB0YXJnZXQgdGhlIFNESU8gaW50ZXJmYWNlIG9mIHRoZSBSVEw4NzIzQlMgY2hpcHNldC4gVGhlIGRlZmluaXRpb24gY2xlYXJseSBjaGVja3MgZm9yIGJvdGggdGhlIGNoaXAgSUQgKGBSVFdfQ0hJUF9UWVBFXzg3MjNCYCkgYW5kIHRoZSBIQ0kgdHlwZSBiZWluZyBTRElPIChgUlRXX0hDSV9UWVBFX1NESU9gKS5cblxuTm93LCB0aGF0J3MgaW50ZXJlc3RpbmcgYmVjYXVzZSBJIGtub3cgdGhhdCBgcnR3ODhgIGFjdHVhbGx5IHN1cHBvcnRzIFVTQiwgUENJLCAqYW5kKiBTRElPLiBTbyB0aGUgcXVlc3Rpb24gYmVjb21lczogQ2FuIHdlIGZ1enogdGhlIFNESU8gaW50ZXJmYWNlIHNwZWNpZmljYWxseSB3aXRoaW4gdGhpcyBkcml2ZXI/IE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBTRElPIGludGVyZmFjZXMgYXJlbid0IHVzdWFsbHkgaWRlYWwgY2FuZGlkYXRlcyBmb3IgZnV6emluZyBpbiB0aGUga2VybmVsLiBUaGUgbWFqb3IgaHVyZGxlIGlzIHRoZSBsYWNrIG9mIGEgdmlydHVhbCBTRElPIGhvc3QgY29udHJvbGxlciwgYSBjb3VudGVycGFydCB0byBzb21ldGhpbmcgbGlrZSBgZHVtbXlfaGNkYCBmb3IgVVNCIG9yIGB2aGNpYCBmb3IgSENJLiBXaXRob3V0IHRoaXMsIGNvbnN0cnVjdGluZyBhbmQgaW5qZWN0aW5nIFNESU8gdHJhZmZpYyBpbiBhIGNvbnRyb2xsZWQgZW52aXJvbm1lbnQgaXMgY2hhbGxlbmdpbmcuIFNvIEknbGwgbmVlZCB0byBjaGVjayBpZiB0aGVyZSBpcyBzb21lIGtpbmQgb2YgTU1DL1NESU8gZW11bGF0aW9uIHRoYXQgY291bGQgYmUgbGV2ZXJhZ2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzg2NCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOTo1MjoxMi4yMDA5MTUxNTNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkzMjQ4NDU4OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW1jLiplbXVsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOTo1MjoxNC4xMzM0MDcwMTNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NDM0OTg3MTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgU0RJTyBFbXVsYXRpb24gRmVhc2liaWxpdHkqKlxuXG5Pa2F5LCBzbyBRRU1VIGhhcyBTRCBjYXJkIGVtdWxhdGlvbiwgc3BlY2lmaWNhbGx5IHRoZSBzZGhjaSBpbnRlcmZhY2UuIE15IGluaXRpYWwgcXVlc3Rpb24gaXMgd2hldGhlciB0aGF0IGV4dGVuZHMgdG8gZW11bGF0aW5nICphcmJpdHJhcnkqIFNESU8gZGV2aWNlcy4gVGhlIHNob3J0IGFuc3dlciwgSSBiZWxpZXZlLCBpcyBuby4gUUVNVSBoYW5kbGVzIFNEIGNhcmRzLCBidXQgaXQgZG9lc24ndCBnZW5lcmFsbHkgcHJvdmlkZSBnZW5lcmljIFNESU8gZGV2aWNlIGVtdWxhdGlvbiB1bmxlc3MgYSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBpcyBidWlsdCBpbi5cblxuU2luY2UgSSBoYXZlbid0IGNvbWUgYWNyb3NzIFFFTVUgc3BlY2lmaWNhbGx5IGVtdWxhdGluZyB0aGlzIHBhcnRpY3VsYXIgUmVhbHRlayBTRElPIFdpRmkgY2FyZCwgSSdtIGFzc3VtaW5nIHRoZSByZWxldmFudCBjb2RlIHBhdGhzLCBzcGVjaWZpY2FsbHkgdGhlIG9uZXMgaW4gYHJ0dzg4L3NkaW8uY2AgdGhhdCBhcmUgdGllZCB0byBgUlRXX0hDSV9UWVBFX1NESU9gLCBhcmUgZWZmZWN0aXZlbHkgdW5yZWFjaGFibGUgd2hlbiBydW5uaW5nIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciwgb2YgY291cnNlLCBRRU1VLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGlzLiBJIG5lZWQgdG8gbWFrZSAqYWJzb2x1dGVseSogc3VyZSB0aGVyZSdzIG5vIHdheSB0byB0cmlnZ2VyIHRob3NlIGZ1bmN0aW9ucy4gSSBzZWUgdGhlIHBhdGNoIG1vZGlmaWVzIHNldmVyYWwgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIGZ1bmN0aW9uczogYHJ0d19md19jMmhfY21kX2hhbmRsZWAsIGBydHdfZndfYzJoX2NtZF9yeF9pcnFzYWZlYCwgYHJ0d19yeF9maWxsX3J4X3N0YXR1c2AsIGBydHdfc2Rpb19yZWFkX3BvcnRgLCBhbmQgYHJ0d19zZGlvX3dyaXRlX3BvcnRgLCBhbW9uZyBvdGhlcnMuIFRoZXNlIGFyZSAqYWxsKiBsb3ctbGV2ZWwgaGFyZHdhcmUgaW50ZXJhY3Rpb24gcG9pbnRzLiBUaGlzIHJlaW5mb3JjZXMgbXkgaW5pdGlhbCBhc3Nlc3NtZW50LlxuXG5UaGUgYmlnZ2VyIHF1ZXN0aW9uIGlzIGlmIHN5emthbGxlciBjYW4gcmVhY2ggdGhlc2UsIGFzIEkgaGF2ZSBiZWVuIHJldmlld2luZyBzeXprYWxsZXIgcmVwb3J0cy4gSSBrbm93IHN5emthbGxlciBjYW4gZnV6eiBVU0IgZGV2aWNlcyB1c2luZyB0aGUgcmF3LWdhZGdldCBvciBkdW1teV9oY2QgaW50ZXJmYWNlcy4gSXQgY2FuIGFsc28gZnV6eiBtYWM4MDIxMSBkZXZpY2VzIHVzaW5nIG1hYzgwMjExX2h3c2ltIGFuZCB2aXJ0aW8gZGV2aWNlcy4gQnV0LCBhZ2FpbiwgbXkgd29ya2luZyBhc3N1bXB0aW9uIGlzIHRoYXQgaXQgKmNhbid0KiBmdXp6IFNESU8gZGV2aWNlcy4gVGhlIGtlcm5lbCBsYWNrcyBhIGdlbmVyYWwgU0RJTyBmdXp6aW5nIGludGVyZmFjZSwgdW5saWtlIFVTQiBvciB0aGUgb3RoZXJzLlxuXG5JJ20gZ29pbmcgdG8gZG91YmxlIGNoZWNrIHRoaXMgYW5kIGNvbmZpcm0gd2hldGhlciBvciBub3QgdGhlcmUncyBhbnkgc3l6a2FsbGVyIHN1cHBvcnQgZm9yIFNESU8uIEkgaGF2ZSBhIGh1bmNoLCBhbmQgaXQncyB0aW1lIHRvIHZlcmlmeSBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQzNjAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6NTI6MjEuNTY4Mzk3NzM0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTE2OTY4Mzg1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzeXpfc2Rpb1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6NTI6MjMuMDg1MzgwNjg5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMDA4NDA3NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipBc3Nlc3NpbmcgdGhlIExhbmRzY2FwZSBmb3IgTU1DIEZ1enppbmcgT3Bwb3J0dW5pdGllcyoqXG5cbk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0J3MgdGFrZSBhIHF1aWNrIG1lbnRhbCBpbnZlbnRvcnkuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJ3MgYW55IGFjdGl2ZSBNTUMgKE11bHRpTWVkaWFDYXJkKSBmdXp6aW5nIGdvaW5nIG9uIHJpZ2h0IG5vdy4gSXQncyBhIGtleSBhcmVhIHRvIGV4cGxvcmUsIGdpdmVuIHRoZSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIGFuZCB3aWRlc3ByZWFkIHVzZSBvZiB0aGVzZSBkZXZpY2VzLiBJJ2xsIG5lZWQgdG8gY29uc2lkZXIgd2hhdCB0b29scyBhbmQgYXBwcm9hY2hlcyBhcmUgY3VycmVudGx5IGJlaW5nIGVtcGxveWVkLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIGdhcHMgb3IgdW5kZXItZXhwbG9yZWQgYXJlYXMgcmlwZSBmb3IgaW52ZXN0aWdhdGlvbi4gVGltZSB0byBzdGFydCB0aGUgZGVlcCBkaXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTE1MywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjUyOjI2LjA4NjIyMzYwMloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0NjY2MTczMiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3l6X21tY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6NTI6MjcuNjMyODk0MTc0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMDg5MDAxMjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVucmVhY2hhYmxlIENvZGUgaW4gYSBGdXp6aW5nIENvbnRleHQqKlxuXG5Pa2F5LCBzbyB0aGUgc2l0dWF0aW9uIGlzIGNsZWFyLiBTeXprYWxsZXIgY2FuJ3QgZnV6eiBTRElPIGRldmljZXMsIHBlcmlvZC4gVGhhdCBtZWFucyBhbnkgY2hhbmdlcyB0b3VjaGluZyBgZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmNgLCBvciBhbnkgU0RJTy1zcGVjaWZpYyBsb2dpYyB3aXRoaW4gYGZ3LmNgLCBgcnguY2AsIG9yIGV2ZW4gYHR4LmNgIGZvciB0aGF0IG1hdHRlciwgYXJlIGVzc2VudGlhbGx5IGluYWNjZXNzaWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGUgcHJvbXB0IHNwZWNpZmljYWxseSBjYWxscyBvdXQgY29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXNpbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgLSBubyBVU0IgZ2FkZ2V0IG9yIG1hYzgwMjExX2h3c2ltIGhlcmUuIFRoaXMgY2xlYXJseSBmYWxscyB1bmRlciB0aGF0IGNhdGVnb3J5LlxuXG5MZXQgbWUganVzdCBxdWlja2x5IHJldmlldyB0aGUgY2hhbmdlcyB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uIFRoZSBrZXkgZnVuY3Rpb24gaXMgYHJ0d19pc184NzIzYnNgLCB3aGljaCBiZWNvbWVzIHRydWUgd2hlbiB0aGUgY2hpcCBpcyBhbiA4NzIzQiBhbmQgdGhlIEhDSSB0eXBlIGlzIFNESU8uXG5cbiogICBJbiBgZncuY2AsIGEgY291cGxlIG9mIGNhc2VzIChDMkhcXF9WRU5ET1JcXF9UWFxcX1JQVCBhbmQgQzJIXFxfV0xBTlxcX1JGT04pIG5vdyB0cmlnZ2VyIGEgZGlmZmVyZW50IGhhbmRsZXIsIGBydHdfdHhfcmVwb3J0X2hhbmRsZWAsICpvbmx5KiBpZiBgcnR3X2lzXzg3MjNicyhydHdkZXYpYCBpcyB0cnVlLiBTbyBpdCdzIHZlcnkgc3BlY2lmaWMgdG8gODcyM0JTIGFuZCBTRElPLlxuKiAgIGByeC5jYCBoYXMgYSBjb25kaXRpb24gdGhhdCBnZXRzIGV4dGVuZGVkIGZyb20gUlRXXFxfQ0hJUFxcX1RZUEVcXF84NzAzQiAod2hpY2ggd2FzIGFscmVhZHkgdGhlcmUpIHRvIGluY2x1ZGUgYHJ0d19pc184NzIzYnMocnR3ZGV2KWAuIFRoZSBhZGRlZCBjb25kaXRpb24gaXMgc3BlY2lmaWNhbGx5IFNESU8sIGZvciB0aGlzIGNoaXAuXG4qICAgYHNkaW8uY2AgaGFzIGEgbG90IG9mIGRpcmVjdCBTRElPLXNwZWNpZmljIGNoYW5nZXMsIHdoaWNoIGlzIGEgYmlnIHJlZCBmbGFnLiBPYnZpb3VzLCBidXQgc3RpbGwgd29ydGggbWVudGlvbmluZy5cbiogICBJbiBgdHguY2AsIGFuIGBPUmAgY29uZGl0aW9uIGhhcyBiZWVuIGFkZGVkLCBhbGxvd2luZyBmb3IgdGhlIDg3MjNCUy5cblxuQmFzaWNhbGx5LCBhbGwgZnVuY3Rpb25hbCBjaGFuZ2VzIGJvaWwgZG93biB0byBgcnR3X2lzXzg3MjNicyhydHdkZXYpYCwgd2hpY2ggbmVlZHMgYFJUV19IQ0lfVFlQRV9TRElPYC4gU2luY2UgUUVNVSwgYW5kIHRoZXJlZm9yZSBzeXprYWxsZXIsIGRvZXNuJ3QgZW11bGF0ZSBTRElPIGhhcmR3YXJlLCBub3IgaXMgdGhlcmUgYSBzb2Z0d2FyZSBTRElPIGZyYW1ld29yayBvZiB0aGF0IHNvcnQsIHRoaXMgY29kZSBpcyBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGluIGEgZnV6emluZyBjb250ZXh0LlxuXG5UaGVyZWZvcmUsIHRoZSBvbmx5IHJlYXNvbmFibGUgY29uY2x1c2lvbiBpcyB0aGF0IEkgbmVlZCB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSByYXRpb25hbGUgaXMgc3RyYWlnaHRmb3J3YXJkOiB0aGlzIHBhdGNoICpvbmx5KiBtb2RpZmllcyBjb2RlIHNwZWNpZmljIHRvIGFuIFNESU8gV2lGaSBjaGlwICh0aGUgUlRMODcyM0JTKSwgd2hpY2ggcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgYW5kIGlzIHNpbXBseSBub3QgYWNjZXNzaWJsZSBvciBlbXVsYXRhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgYW5kIHRodXMgaW1wb3NzaWJsZSB0byByZWFjaCB3aXRoIHN5emthbGxlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzMjMsIk91dHB1dFRva2VucyI6MTA0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjUyOjM5LjcyMTg5ODM0N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGV4Y2x1c2l2ZWx5IGFkZHMgc3VwcG9ydCBhbmQgZml4ZXMgZm9yIHRoZSBSZWFsdGVrIFJUTDg3MjNCUyBTRElPIFdpRmkgY2hpcC4gU0RJTyBkZXZpY2VzIHJlcXVpcmUgcGh5c2ljYWwgaGFyZHdhcmUgb3Igc3BlY2lmaWMgUUVNVSBtYWNoaW5lIGVtdWxhdGlvbiB3aGljaCBpcyBub3QgYXZhaWxhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiBUaGVyZSBpcyBubyBzb2Z0d2FyZSBTRElPIGVtdWxhdGlvbiBmcmFtZXdvcmsgKGxpa2UgZHVtbXlfaGNkIGZvciBVU0IpIHRvIHJlYWNoIHRoZXNlIGNvZGUgcGF0aHMgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBleGNsdXNpdmVseSBhZGRzIHN1cHBvcnQgYW5kIGZpeGVzIGZvciB0aGUgUmVhbHRlayBSVEw4NzIzQlMgU0RJTyBXaUZpIGNoaXAuIFNESU8gZGV2aWNlcyByZXF1aXJlIHBoeXNpY2FsIGhhcmR3YXJlIG9yIHNwZWNpZmljIFFFTVUgbWFjaGluZSBlbXVsYXRpb24gd2hpY2ggaXMgbm90IGF2YWlsYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4gVGhlcmUgaXMgbm8gc29mdHdhcmUgU0RJTyBlbXVsYXRpb24gZnJhbWV3b3JrIChsaWtlIGR1bW15X2hjZCBmb3IgVVNCKSB0byByZWFjaCB0aGVzZSBjb2RlIHBhdGhzIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6NTI6MzkuNzIxOTI1NjA3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowxcz4h[1] Phase: Running StartedAt: 2026-08-11 09:52:50 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxcz4h[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-11 09:52:50 +0000 UTC FinishedAt: 2026-08-11 09:52:55 +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,}