Name: series-workflowjkvk2 Phase: Failed StartedAt: 2026-09-02 13:00:08 +0000 UTC FinishedAt: 2026-09-02 13:03:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjkvk2[0] Phase: Succeeded StartedAt: 2026-09-02 13:00:08 +0000 UTC FinishedAt: 2026-09-02 13:02:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjkvk2[0].run-triage Phase: Succeeded StartedAt: 2026-09-02 13:00:08 +0000 UTC FinishedAt: 2026-09-02 13:02:56 +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+CgkJCTx0ZD4yMDI2LzA5LzAyIDEzOjAyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJyb2FkY29tIE5ldFh0cmVtZS1DL0UgKGJueHQpIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBOSUMgZHJpdmVyIHJlcXVpcmluZyBwaHlzaWNhbCBCcm9hZGNvbSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTM6MDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxN2ZhNTZkZDVjZmUyMzVlNDNkMzVjMDY1ZWVhZmVmMWU5YjA5NTc1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAxMzowMjoyMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jXG5pbmRleCBkNTliY2NhNzNhMmI4Li5iMmNlNWI0ZTVlNmE1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jXG5AQCAtMTUxNCwxNCAmIzQzOzE1MTQsMTYgQEAgc3RhdGljIGludCBibnh0X2Rpc2NhcmRfcngoc3RydWN0IGJueHQgKmJwLCBzdHJ1Y3QgYm54dF9jcF9yaW5nX2luZm8gKmNwcixcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgdTE2IGJueHRfYWxsb2NfYWdnX2lkeChzdHJ1Y3QgYm54dF9yeF9yaW5nX2luZm8gKnJ4ciwgdTE2IGFnZ19pZClcbiYjNDM7c3RhdGljIHUxNiBibnh0X2FsbG9jX2FnZ19pZHgoc3RydWN0IGJueHQgKmJwLCBzdHJ1Y3QgYm54dF9yeF9yaW5nX2luZm8gKnJ4cixcbiYjNDM7XHRcdFx0ICAgICAgdTE2IGFnZ19pZClcbiB7XG4gXHRzdHJ1Y3QgYm54dF90cGFfaWR4X21hcCAqbWFwID0gcnhyLVx1MDAzZXJ4X3RwYV9pZHhfbWFwO1xuLVx0dTE2IGlkeCA9IGFnZ19pZCBcdTAwMjYgTUFYX1RQQV9QNV9NQVNLO1xuJiM0MztcdHUxNiBpZHggPSBhZ2dfaWQgXHUwMDI2IChicC1cdTAwM2VtYXhfdHBhX3JvdW5kdXBfc2l6ZSAtIDEpO1xuIFxuIFx0aWYgKHRlc3RfYml0KGlkeCwgbWFwLVx1MDAzZWFnZ19pZHhfYm1hcCkpIHtcbi1cdFx0aWR4ID0gZmluZF9maXJzdF96ZXJvX2JpdChtYXAtXHUwMDNlYWdnX2lkeF9ibWFwLCBNQVhfVFBBX1A1KTtcbi1cdFx0aWYgKGlkeCBcdTAwM2U9IE1BWF9UUEFfUDUpXG4mIzQzO1x0XHRpZHggPSBmaW5kX2ZpcnN0X3plcm9fYml0KG1hcC1cdTAwM2VhZ2dfaWR4X2JtYXAsXG4mIzQzO1x0XHRcdFx0XHQgIGJwLVx1MDAzZW1heF90cGFfcm91bmR1cF9zaXplKTtcbiYjNDM7XHRcdGlmIChpZHggXHUwMDNlPSBicC1cdTAwM2VtYXhfdHBhX3JvdW5kdXBfc2l6ZSlcbiBcdFx0XHRyZXR1cm4gSU5WQUxJRF9IV19SSU5HX0lEO1xuIFx0fVxuIFx0X19zZXRfYml0KGlkeCwgbWFwLVx1MDAzZWFnZ19pZHhfYm1hcCk7XG5AQCAtMTU4Niw3ICYjNDM7MTU4OCw3IEBAIHN0YXRpYyB2b2lkIGJueHRfdHBhX3N0YXJ0KHN0cnVjdCBibnh0ICpicCwgc3RydWN0IGJueHRfcnhfcmluZ19pbmZvICpyeHIsXG4gXG4gXHRpZiAoYnAtXHUwMDNlZmxhZ3MgXHUwMDI2IEJOWFRfRkxBR19DSElQX1A1X1BMVVMpIHtcbiBcdFx0YWdnX2lkID0gVFBBX1NUQVJUX0FHR19JRF9QNSh0cGFfc3RhcnQpO1xuLVx0XHRhZ2dfaWQgPSBibnh0X2FsbG9jX2FnZ19pZHgocnhyLCBhZ2dfaWQpO1xuJiM0MztcdFx0YWdnX2lkID0gYm54dF9hbGxvY19hZ2dfaWR4KGJwLCByeHIsIGFnZ19pZCk7XG4gXHRcdGlmICh1bmxpa2VseShhZ2dfaWQgPT0gSU5WQUxJRF9IV19SSU5HX0lEKSkge1xuIFx0XHRcdG5ldGRldl93YXJuKGJwLVx1MDAzZWRldiwgXCYjMzQ7VW5hYmxlIHRvIGFsbG9jYXRlIGFnZyBJRCBmb3IgcmluZyAlZCwgYWdnIDB4JXhcXG5cJiMzNDssXG4gXHRcdFx0XHQgICAgcnhyLVx1MDAzZWJuYXBpLVx1MDAzZWluZGV4LFxuQEAgLTM1ODQsNyAmIzQzOzM1ODYsNyBAQCBzdGF0aWMgdm9pZCBibnh0X2ZyZWVfb25lX3RwYV9pbmZvX2RhdGEoc3RydWN0IGJueHQgKmJwLFxuIHtcbiBcdGludCBpO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgYnAtXHUwMDNlbWF4X3RwYTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBicC1cdTAwM2VtYXhfdHBhX3JvdW5kdXBfc2l6ZTsgaSYjNDM7JiM0MzspIHtcbiBcdFx0c3RydWN0IGJueHRfdHBhX2luZm8gKnRwYV9pbmZvID0gXHUwMDI2cnhyLVx1MDAzZXJ4X3RwYVtpXTtcbiBcdFx0dTggKmRhdGEgPSB0cGFfaW5mby1cdTAwM2VkYXRhO1xuIFxuQEAgLTM3ODEsNyAmIzQzOzM3ODMsNyBAQCBzdGF0aWMgdm9pZCBibnh0X2ZyZWVfb25lX3RwYV9pbmZvKHN0cnVjdCBibnh0ICpicCxcbiBcdGtmcmVlKHJ4ci1cdTAwM2VyeF90cGFfaWR4X21hcCk7XG4gXHRyeHItXHUwMDNlcnhfdHBhX2lkeF9tYXAgPSBOVUxMO1xuIFx0aWYgKHJ4ci1cdTAwM2VyeF90cGEpIHtcbi1cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgYnAtXHUwMDNlbWF4X3RwYTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGJwLVx1MDAzZW1heF90cGFfcm91bmR1cF9zaXplOyBpJiM0MzsmIzQzOykge1xuIFx0XHRcdGtmcmVlKHJ4ci1cdTAwM2VyeF90cGFbaV0uYWdnX2Fycik7XG4gXHRcdFx0cnhyLVx1MDAzZXJ4X3RwYVtpXS5hZ2dfYXJyID0gTlVMTDtcbiBcdFx0fVxuQEAgLTM4MDcsMTMgJiM0MzszODA5LDE0IEBAIHN0YXRpYyBpbnQgYm54dF9hbGxvY19vbmVfdHBhX2luZm8oc3RydWN0IGJueHQgKmJwLFxuIFx0c3RydWN0IHJ4X2FnZ19jbXAgKmFnZztcbiBcdGludCBpO1xuIFxuLVx0cnhyLVx1MDAzZXJ4X3RwYSA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgYm54dF90cGFfaW5mbywgYnAtXHUwMDNlbWF4X3RwYSk7XG4mIzQzO1x0cnhyLVx1MDAzZXJ4X3RwYSA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgYm54dF90cGFfaW5mbyxcbiYjNDM7XHRcdFx0XHQgICBicC1cdTAwM2VtYXhfdHBhX3JvdW5kdXBfc2l6ZSk7XG4gXHRpZiAoIXJ4ci1cdTAwM2VyeF90cGEpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIFx0aWYgKCEoYnAtXHUwMDNlZmxhZ3MgXHUwMDI2IEJOWFRfRkxBR19DSElQX1A1X1BMVVMpKVxuIFx0XHRyZXR1cm4gMDtcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGJwLVx1MDAzZW1heF90cGE7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgYnAtXHUwMDNlbWF4X3RwYV9yb3VuZHVwX3NpemU7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdGFnZyA9IGt6YWxsb2Nfb2JqcygqYWdnLCBNQVhfU0tCX0ZSQUdTKTtcbiBcdFx0aWYgKCFhZ2cpXG4gXHRcdFx0cmV0dXJuIC1FTk9NRU07XG5AQCAtMzgzMiw2ICYjNDM7MzgzNSw5IEBAIHN0YXRpYyBpbnQgYm54dF9hbGxvY190cGFfaW5mbyhzdHJ1Y3QgYm54dCAqYnApXG4gXG4gXHRicC1cdTAwM2VtYXhfdHBhID0gTUFYX1RQQTtcbiBcdGlmIChicC1cdTAwM2VmbGFncyBcdTAwMjYgQk5YVF9GTEFHX0NISVBfUDVfUExVUykge1xuJiM0MztcdFx0LyogVFBBIGlzIG5vdCBzdXBwb3J0ZWQgYXQgYWxsLCBzbyB0aGVyZSBpcyBub3RoaW5nIHRvXG4mIzQzO1x0XHQgKiBhbGxvY2F0ZS5cbiYjNDM7XHRcdCAqL1xuIFx0XHRpZiAoIWJwLVx1MDAzZW1heF90cGFfdjIpXG4gXHRcdFx0cmV0dXJuIDA7XG4gXHRcdGJwLVx1MDAzZW1heF90cGEgPSBtaW5fdCh1MTYsIGJwLVx1MDAzZW1heF90cGFfdjIsIE1BWF9UUEFfUDUpO1xuQEAgLTM4MzksNiAmIzQzOzM4NDUsNyBAQCBzdGF0aWMgaW50IGJueHRfYWxsb2NfdHBhX2luZm8oc3RydWN0IGJueHQgKmJwKVxuIFx0XHRpZiAoYnAtXHUwMDNlbWF4X3RwYSBcdTAwM2M9IDMyIFx1MDAyNlx1MDAyNiBCTlhUX0NISVBfUDUoYnApIFx1MDAyNlx1MDAyNiAhQk5YVF9OUEFSKGJwKSlcbiBcdFx0XHRicC1cdTAwM2VtYXhfdHBhID0gTUFYX1RQQV9QNTtcbiBcdH1cbiYjNDM7XHRicC1cdTAwM2VtYXhfdHBhX3JvdW5kdXBfc2l6ZSA9IHJvdW5kdXBfcG93X29mX3R3byhicC1cdTAwM2VtYXhfdHBhKTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGJwLVx1MDAzZXJ4X25yX3JpbmdzOyBpJiM0MzsmIzQzOykge1xuIFx0XHRzdHJ1Y3QgYm54dF9yeF9yaW5nX2luZm8gKnJ4ciA9IFx1MDAyNmJwLVx1MDAzZXJ4X3JpbmdbaV07XG5AQCAtNDU1MSw3ICYjNDM7NDU1OCw3IEBAIHN0YXRpYyBpbnQgYm54dF9hbGxvY19vbmVfdHBhX2luZm9fZGF0YShzdHJ1Y3QgYm54dCAqYnAsXG4gXHR1OCAqZGF0YTtcbiBcdGludCBpO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgYnAtXHUwMDNlbWF4X3RwYTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBicC1cdTAwM2VtYXhfdHBhX3JvdW5kdXBfc2l6ZTsgaSYjNDM7JiM0MzspIHtcbiBcdFx0ZGF0YSA9IF9fYm54dF9hbGxvY19yeF9mcmFnKGJwLCBcdTAwMjZtYXBwaW5nLCByeHIsXG4gXHRcdFx0XHRcdCAgICBHRlBfS0VSTkVMKTtcbiBcdFx0aWYgKCFkYXRhKVxuQEAgLTUwMDYsNyAmIzQzOzUwMTMsOCBAQCB2b2lkIGJueHRfc2V0X3J4X3NrYl9tb2RlKHN0cnVjdCBibnh0ICpicCwgYm9vbCBwYWdlX21vZGUpXG4gXHRcdGJueHRfZ2V0X21heF9yaW5ncyhicCwgXHUwMDI2cngsIFx1MDAyNnR4LCB0cnVlKTtcbiBcdFx0aWYgKHJ4IFx1MDAzZSAxKSB7XG4gXHRcdFx0YnAtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+Qk5YVF9GTEFHX05PX0FHR19SSU5HUztcbi1cdFx0XHRicC1cdTAwM2VkZXYtXHUwMDNlaHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9MUk87XG4mIzQzO1x0XHRcdGlmIChCTlhUX1NVUFBPUlRTX1RQQShicCkpXG4mIzQzO1x0XHRcdFx0YnAtXHUwMDNlZGV2LVx1MDAzZWh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfTFJPO1xuIFx0XHR9XG4gXHR9XG4gXG5AQCAtMTEzNDAsOCAmIzQzOzExMzQ4LDEzIEBAIHN0YXRpYyBpbnQgYm54dF9zaHV0ZG93bl9uaWMoc3RydWN0IGJueHQgKmJwLCBib29sIGlycV9yZV9pbml0KVxuIFxuIHN0YXRpYyBpbnQgYm54dF9pbml0X25pYyhzdHJ1Y3QgYm54dCAqYnAsIGJvb2wgaXJxX3JlX2luaXQpXG4ge1xuJiM0MztcdGludCByYztcbiYjNDM7XG4gXHRibnh0X2luaXRfY3BfcmluZ3MoYnApO1xuLVx0Ym54dF9pbml0X3J4X3JpbmdzKGJwKTtcbiYjNDM7XHRyYyA9IGJueHRfaW5pdF9yeF9yaW5ncyhicCk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiBcdGJueHRfaW5pdF90eF9yaW5ncyhicCk7XG4gXHRibnh0X2luaXRfcmluZ19ncnBzKGJwLCBpcnFfcmVfaW5pdCk7XG4gXHRibnh0X2luaXRfdm5pY3MoYnApO1xuQEAgLTE0NjAzLDcgJiM0MzsxNDYxNiwxNCBAQCBzdGF0aWMgdm9pZCBibnh0X3J4X3JpbmdfcmVzZXQoc3RydWN0IGJueHQgKmJwKVxuIFx0XHRyeHItXHUwMDNlcnhfc3dfYWdnX3Byb2QgPSAwO1xuIFx0XHRyeHItXHUwMDNlcnhfbmV4dF9jb25zID0gMDtcbiBcdFx0cnhyLVx1MDAzZWJuYXBpLVx1MDAzZWluX3Jlc2V0ID0gZmFsc2U7XG4tXHRcdGJueHRfYWxsb2Nfb25lX3J4X3JpbmcoYnAsIGkpO1xuJiM0MztcdFx0cmMgPSBibnh0X2FsbG9jX29uZV9yeF9yaW5nKGJwLCBpKTtcbiYjNDM7XHRcdGlmIChyYykge1xuJiM0MztcdFx0XHRuZXRkZXZfd2FybihicC1cdTAwM2VkZXYsIFwmIzM0O1JYIHJpbmcgcmVzZXQgZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlcnMsIHJjID0gJWQsIGZhbGxpbmcgYmFjayB0byBnbG9iYWwgcmVzZXRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgIHJjKTtcbiYjNDM7XHRcdFx0Ym54dF9yZXNldF90YXNrKGJwLCB0cnVlKTtcbiYjNDM7XHRcdFx0Ym54dF9ydG5sX3VubG9ja19zcChicCk7XG4mIzQzO1x0XHRcdHJldHVybjtcbiYjNDM7XHRcdH1cbiBcdFx0Y3ByID0gXHUwMDI2cnhyLVx1MDAzZWJuYXBpLVx1MDAzZWNwX3Jpbmc7XG4gXHRcdGNwci1cdTAwM2Vzd19zdGF0cy1cdTAwM2VyeC5yeF9yZXNldHMmIzQzOyYjNDM7O1xuIFx0XHRpZiAoYnAtXHUwMDNlZmxhZ3MgXHUwMDI2IEJOWFRfRkxBR19BR0dfUklOR1MpXG5AQCAtMTYzMzIsNiAmIzQzOzE2MzUyLDggQEAgc3RhdGljIGludCBibnh0X3F1ZXVlX21lbV9hbGxvYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0Y2xvbmUtXHUwMDNlbmVlZF9oZWFkX3Bvb2wgPSBmYWxzZTtcbiBcdGNsb25lLVx1MDAzZXJ4X3BhZ2Vfc2l6ZSA9IHFjZmctXHUwMDNlcnhfcGFnZV9zaXplO1xuIFx0Y2xvbmUtXHUwMDNlcnhfYWdnX2JtYXAgPSBOVUxMO1xuJiM0MztcdGNsb25lLVx1MDAzZXJ4X3RwYSA9IE5VTEw7XG4mIzQzO1x0Y2xvbmUtXHUwMDNlcnhfdHBhX2lkeF9tYXAgPSBOVUxMO1xuIFxuIFx0cmMgPSBibnh0X2FsbG9jX3J4X3BhZ2VfcG9vbChicCwgY2xvbmUsIHJ4ci1cdTAwM2VwYWdlX3Bvb2wtXHUwMDNlcC5uaWQpO1xuIFx0aWYgKHJjKVxuQEAgLTE2Mzc1LDExICYjNDM7MTYzOTcsMTYgQEAgc3RhdGljIGludCBibnh0X3F1ZXVlX21lbV9hbGxvYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0Ym54dF9hbGxvY19vbmVfcnhfcmluZ19za2IoYnAsIGNsb25lLCBpZHgpO1xuIFx0aWYgKGJwLVx1MDAzZWZsYWdzIFx1MDAyNiBCTlhUX0ZMQUdfQUdHX1JJTkdTKVxuIFx0XHRibnh0X2FsbG9jX29uZV9yeF9yaW5nX25ldG1lbShicCwgY2xvbmUsIGlkeCk7XG4tXHRpZiAoYnAtXHUwMDNlZmxhZ3MgXHUwMDI2IEJOWFRfRkxBR19UUEEpXG4tXHRcdGJueHRfYWxsb2Nfb25lX3RwYV9pbmZvX2RhdGEoYnAsIGNsb25lKTtcbiYjNDM7XHRpZiAoYnAtXHUwMDNlZmxhZ3MgXHUwMDI2IEJOWFRfRkxBR19UUEEpIHtcbiYjNDM7XHRcdHJjID0gYm54dF9hbGxvY19vbmVfdHBhX2luZm9fZGF0YShicCwgY2xvbmUpO1xuJiM0MztcdFx0aWYgKHJjKVxuJiM0MztcdFx0XHRnb3RvIGVycl9mcmVlX3J4X3Jpbmdfc2ticztcbiYjNDM7XHR9XG4gXG4gXHRyZXR1cm4gMDtcbiBcbiYjNDM7ZXJyX2ZyZWVfcnhfcmluZ19za2JzOlxuJiM0MztcdGJueHRfZnJlZV9vbmVfcnhfcmluZ19za2JzKGJwLCBjbG9uZSk7XG4gZXJyX2ZyZWVfdHBhX2luZm86XG4gXHRibnh0X2ZyZWVfb25lX3RwYV9pbmZvKGJwLCBjbG9uZSk7XG4gZXJyX2ZyZWVfcnhfYWdnX3Jpbmc6XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuaFxuaW5kZXggYWI4OTRmOGFkZGVmNS4uZGU0NmI0MmQ3Yzk4YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuaFxuQEAgLTc4OSw3ICYjNDM7Nzg5LDYgQEAgc3RydWN0IG5xZV9jbiB7XG4gXG4gI2RlZmluZSBNQVhfVFBBXHRcdDY0XG4gI2RlZmluZSBNQVhfVFBBX1A1XHQyNTZcbi0jZGVmaW5lIE1BWF9UUEFfUDVfTUFTS1x0KE1BWF9UUEFfUDUgLSAxKVxuICNkZWZpbmUgTUFYX1RQQV9TRUdTX1A1XHQweDNmXG4gXG4gI2lmIChCTlhUX1BBR0VfU0hJRlQgPT0gMTYpXG5AQCAtMjM4MCw2ICYjNDM7MjM3OSw3IEBAIHN0cnVjdCBibnh0IHtcbiBcbiBcdHUxNlx0XHRcdG1heF90cGFfdjI7XG4gXHR1MTZcdFx0XHRtYXhfdHBhO1xuJiM0MztcdHUxNlx0XHRcdG1heF90cGFfcm91bmR1cF9zaXplO1xuIFx0dTMyXHRcdFx0cnhfYnVmX3NpemU7XG4gXHR1MzJcdFx0XHRyeF9idWZfdXNlX3NpemU7XHQvKiB1c2VhYmxlIHNpemUgKi9cbiBcdHUxNlx0XHRcdHJ4X29mZnNldDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMzowMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQnJvYWRjb20gTmV0WHRyZW1lLUMvRSAoYm54dCkgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIE5JQyBkcml2ZXIgcmVxdWlyaW5nIHBoeXNpY2FsIEJyb2FkY29tIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDE3ZmE1NmRkNWNmZTIzNWU0M2QzNWMwNjVlZWFmZWYxZTliMDk1NzUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCAyIDEzOjAyOjIwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYwppbmRleCBkNTliY2NhNzNhMmI4Li5iMmNlNWI0ZTVlNmE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYwpAQCAtMTUxNCwxNCAmIzQzOzE1MTQsMTYgQEAgc3RhdGljIGludCBibnh0X2Rpc2NhcmRfcngoc3RydWN0IGJueHQgKmJwLCBzdHJ1Y3QgYm54dF9jcF9yaW5nX2luZm8gKmNwciwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHUxNiBibnh0X2FsbG9jX2FnZ19pZHgoc3RydWN0IGJueHRfcnhfcmluZ19pbmZvICpyeHIsIHUxNiBhZ2dfaWQpCiYjNDM7c3RhdGljIHUxNiBibnh0X2FsbG9jX2FnZ19pZHgoc3RydWN0IGJueHQgKmJwLCBzdHJ1Y3QgYm54dF9yeF9yaW5nX2luZm8gKnJ4ciwKJiM0MzsJCQkgICAgICB1MTYgYWdnX2lkKQogewogCXN0cnVjdCBibnh0X3RwYV9pZHhfbWFwICptYXAgPSByeHItJmd0O3J4X3RwYV9pZHhfbWFwOwotCXUxNiBpZHggPSBhZ2dfaWQgJmFtcDsgTUFYX1RQQV9QNV9NQVNLOwomIzQzOwl1MTYgaWR4ID0gYWdnX2lkICZhbXA7IChicC0mZ3Q7bWF4X3RwYV9yb3VuZHVwX3NpemUgLSAxKTsKIAogCWlmICh0ZXN0X2JpdChpZHgsIG1hcC0mZ3Q7YWdnX2lkeF9ibWFwKSkgewotCQlpZHggPSBmaW5kX2ZpcnN0X3plcm9fYml0KG1hcC0mZ3Q7YWdnX2lkeF9ibWFwLCBNQVhfVFBBX1A1KTsKLQkJaWYgKGlkeCAmZ3Q7PSBNQVhfVFBBX1A1KQomIzQzOwkJaWR4ID0gZmluZF9maXJzdF96ZXJvX2JpdChtYXAtJmd0O2FnZ19pZHhfYm1hcCwKJiM0MzsJCQkJCSAgYnAtJmd0O21heF90cGFfcm91bmR1cF9zaXplKTsKJiM0MzsJCWlmIChpZHggJmd0Oz0gYnAtJmd0O21heF90cGFfcm91bmR1cF9zaXplKQogCQkJcmV0dXJuIElOVkFMSURfSFdfUklOR19JRDsKIAl9CiAJX19zZXRfYml0KGlkeCwgbWFwLSZndDthZ2dfaWR4X2JtYXApOwpAQCAtMTU4Niw3ICYjNDM7MTU4OCw3IEBAIHN0YXRpYyB2b2lkIGJueHRfdHBhX3N0YXJ0KHN0cnVjdCBibnh0ICpicCwgc3RydWN0IGJueHRfcnhfcmluZ19pbmZvICpyeHIsCiAKIAlpZiAoYnAtJmd0O2ZsYWdzICZhbXA7IEJOWFRfRkxBR19DSElQX1A1X1BMVVMpIHsKIAkJYWdnX2lkID0gVFBBX1NUQVJUX0FHR19JRF9QNSh0cGFfc3RhcnQpOwotCQlhZ2dfaWQgPSBibnh0X2FsbG9jX2FnZ19pZHgocnhyLCBhZ2dfaWQpOwomIzQzOwkJYWdnX2lkID0gYm54dF9hbGxvY19hZ2dfaWR4KGJwLCByeHIsIGFnZ19pZCk7CiAJCWlmICh1bmxpa2VseShhZ2dfaWQgPT0gSU5WQUxJRF9IV19SSU5HX0lEKSkgewogCQkJbmV0ZGV2X3dhcm4oYnAtJmd0O2RldiwgJiMzNDtVbmFibGUgdG8gYWxsb2NhdGUgYWdnIElEIGZvciByaW5nICVkLCBhZ2cgMHgleFxuJiMzNDssCiAJCQkJICAgIHJ4ci0mZ3Q7Ym5hcGktJmd0O2luZGV4LApAQCAtMzU4NCw3ICYjNDM7MzU4Niw3IEBAIHN0YXRpYyB2b2lkIGJueHRfZnJlZV9vbmVfdHBhX2luZm9fZGF0YShzdHJ1Y3QgYm54dCAqYnAsCiB7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgYnAtJmd0O21heF90cGE7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBicC0mZ3Q7bWF4X3RwYV9yb3VuZHVwX3NpemU7IGkmIzQzOyYjNDM7KSB7CiAJCXN0cnVjdCBibnh0X3RwYV9pbmZvICp0cGFfaW5mbyA9ICZhbXA7cnhyLSZndDtyeF90cGFbaV07CiAJCXU4ICpkYXRhID0gdHBhX2luZm8tJmd0O2RhdGE7CiAKQEAgLTM3ODEsNyAmIzQzOzM3ODMsNyBAQCBzdGF0aWMgdm9pZCBibnh0X2ZyZWVfb25lX3RwYV9pbmZvKHN0cnVjdCBibnh0ICpicCwKIAlrZnJlZShyeHItJmd0O3J4X3RwYV9pZHhfbWFwKTsKIAlyeHItJmd0O3J4X3RwYV9pZHhfbWFwID0gTlVMTDsKIAlpZiAocnhyLSZndDtyeF90cGEpIHsKLQkJZm9yIChpID0gMDsgaSAmbHQ7IGJwLSZndDttYXhfdHBhOyBpJiM0MzsmIzQzOykgewomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IGJwLSZndDttYXhfdHBhX3JvdW5kdXBfc2l6ZTsgaSYjNDM7JiM0MzspIHsKIAkJCWtmcmVlKHJ4ci0mZ3Q7cnhfdHBhW2ldLmFnZ19hcnIpOwogCQkJcnhyLSZndDtyeF90cGFbaV0uYWdnX2FyciA9IE5VTEw7CiAJCX0KQEAgLTM4MDcsMTMgJiM0MzszODA5LDE0IEBAIHN0YXRpYyBpbnQgYm54dF9hbGxvY19vbmVfdHBhX2luZm8oc3RydWN0IGJueHQgKmJwLAogCXN0cnVjdCByeF9hZ2dfY21wICphZ2c7CiAJaW50IGk7CiAKLQlyeHItJmd0O3J4X3RwYSA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgYm54dF90cGFfaW5mbywgYnAtJmd0O21heF90cGEpOwomIzQzOwlyeHItJmd0O3J4X3RwYSA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgYm54dF90cGFfaW5mbywKJiM0MzsJCQkJICAgYnAtJmd0O21heF90cGFfcm91bmR1cF9zaXplKTsKIAlpZiAoIXJ4ci0mZ3Q7cnhfdHBhKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCWlmICghKGJwLSZndDtmbGFncyAmYW1wOyBCTlhUX0ZMQUdfQ0hJUF9QNV9QTFVTKSkKIAkJcmV0dXJuIDA7Ci0JZm9yIChpID0gMDsgaSAmbHQ7IGJwLSZndDttYXhfdHBhOyBpJiM0MzsmIzQzOykgewomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgYnAtJmd0O21heF90cGFfcm91bmR1cF9zaXplOyBpJiM0MzsmIzQzOykgewogCQlhZ2cgPSBremFsbG9jX29ianMoKmFnZywgTUFYX1NLQl9GUkFHUyk7CiAJCWlmICghYWdnKQogCQkJcmV0dXJuIC1FTk9NRU07CkBAIC0zODMyLDYgJiM0MzszODM1LDkgQEAgc3RhdGljIGludCBibnh0X2FsbG9jX3RwYV9pbmZvKHN0cnVjdCBibnh0ICpicCkKIAogCWJwLSZndDttYXhfdHBhID0gTUFYX1RQQTsKIAlpZiAoYnAtJmd0O2ZsYWdzICZhbXA7IEJOWFRfRkxBR19DSElQX1A1X1BMVVMpIHsKJiM0MzsJCS8qIFRQQSBpcyBub3Qgc3VwcG9ydGVkIGF0IGFsbCwgc28gdGhlcmUgaXMgbm90aGluZyB0bwomIzQzOwkJICogYWxsb2NhdGUuCiYjNDM7CQkgKi8KIAkJaWYgKCFicC0mZ3Q7bWF4X3RwYV92MikKIAkJCXJldHVybiAwOwogCQlicC0mZ3Q7bWF4X3RwYSA9IG1pbl90KHUxNiwgYnAtJmd0O21heF90cGFfdjIsIE1BWF9UUEFfUDUpOwpAQCAtMzgzOSw2ICYjNDM7Mzg0NSw3IEBAIHN0YXRpYyBpbnQgYm54dF9hbGxvY190cGFfaW5mbyhzdHJ1Y3QgYm54dCAqYnApCiAJCWlmIChicC0mZ3Q7bWF4X3RwYSAmbHQ7PSAzMiAmYW1wOyZhbXA7IEJOWFRfQ0hJUF9QNShicCkgJmFtcDsmYW1wOyAhQk5YVF9OUEFSKGJwKSkKIAkJCWJwLSZndDttYXhfdHBhID0gTUFYX1RQQV9QNTsKIAl9CiYjNDM7CWJwLSZndDttYXhfdHBhX3JvdW5kdXBfc2l6ZSA9IHJvdW5kdXBfcG93X29mX3R3byhicC0mZ3Q7bWF4X3RwYSk7CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgYnAtJmd0O3J4X25yX3JpbmdzOyBpJiM0MzsmIzQzOykgewogCQlzdHJ1Y3QgYm54dF9yeF9yaW5nX2luZm8gKnJ4ciA9ICZhbXA7YnAtJmd0O3J4X3JpbmdbaV07CkBAIC00NTUxLDcgJiM0Mzs0NTU4LDcgQEAgc3RhdGljIGludCBibnh0X2FsbG9jX29uZV90cGFfaW5mb19kYXRhKHN0cnVjdCBibnh0ICpicCwKIAl1OCAqZGF0YTsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgJmx0OyBicC0mZ3Q7bWF4X3RwYTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGJwLSZndDttYXhfdHBhX3JvdW5kdXBfc2l6ZTsgaSYjNDM7JiM0MzspIHsKIAkJZGF0YSA9IF9fYm54dF9hbGxvY19yeF9mcmFnKGJwLCAmYW1wO21hcHBpbmcsIHJ4ciwKIAkJCQkJICAgIEdGUF9LRVJORUwpOwogCQlpZiAoIWRhdGEpCkBAIC01MDA2LDcgJiM0Mzs1MDEzLDggQEAgdm9pZCBibnh0X3NldF9yeF9za2JfbW9kZShzdHJ1Y3QgYm54dCAqYnAsIGJvb2wgcGFnZV9tb2RlKQogCQlibnh0X2dldF9tYXhfcmluZ3MoYnAsICZhbXA7cngsICZhbXA7dHgsIHRydWUpOwogCQlpZiAocnggJmd0OyAxKSB7CiAJCQlicC0mZ3Q7ZmxhZ3MgJmFtcDs9IH5CTlhUX0ZMQUdfTk9fQUdHX1JJTkdTOwotCQkJYnAtJmd0O2Rldi0mZ3Q7aHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9MUk87CiYjNDM7CQkJaWYgKEJOWFRfU1VQUE9SVFNfVFBBKGJwKSkKJiM0MzsJCQkJYnAtJmd0O2Rldi0mZ3Q7aHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9MUk87CiAJCX0KIAl9CiAKQEAgLTExMzQwLDggJiM0MzsxMTM0OCwxMyBAQCBzdGF0aWMgaW50IGJueHRfc2h1dGRvd25fbmljKHN0cnVjdCBibnh0ICpicCwgYm9vbCBpcnFfcmVfaW5pdCkKIAogc3RhdGljIGludCBibnh0X2luaXRfbmljKHN0cnVjdCBibnh0ICpicCwgYm9vbCBpcnFfcmVfaW5pdCkKIHsKJiM0MzsJaW50IHJjOwomIzQzOwogCWJueHRfaW5pdF9jcF9yaW5ncyhicCk7Ci0JYm54dF9pbml0X3J4X3JpbmdzKGJwKTsKJiM0MzsJcmMgPSBibnh0X2luaXRfcnhfcmluZ3MoYnApOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiAJYm54dF9pbml0X3R4X3JpbmdzKGJwKTsKIAlibnh0X2luaXRfcmluZ19ncnBzKGJwLCBpcnFfcmVfaW5pdCk7CiAJYm54dF9pbml0X3ZuaWNzKGJwKTsKQEAgLTE0NjAzLDcgJiM0MzsxNDYxNiwxNCBAQCBzdGF0aWMgdm9pZCBibnh0X3J4X3JpbmdfcmVzZXQoc3RydWN0IGJueHQgKmJwKQogCQlyeHItJmd0O3J4X3N3X2FnZ19wcm9kID0gMDsKIAkJcnhyLSZndDtyeF9uZXh0X2NvbnMgPSAwOwogCQlyeHItJmd0O2JuYXBpLSZndDtpbl9yZXNldCA9IGZhbHNlOwotCQlibnh0X2FsbG9jX29uZV9yeF9yaW5nKGJwLCBpKTsKJiM0MzsJCXJjID0gYm54dF9hbGxvY19vbmVfcnhfcmluZyhicCwgaSk7CiYjNDM7CQlpZiAocmMpIHsKJiM0MzsJCQluZXRkZXZfd2FybihicC0mZ3Q7ZGV2LCAmIzM0O1JYIHJpbmcgcmVzZXQgZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlcnMsIHJjID0gJWQsIGZhbGxpbmcgYmFjayB0byBnbG9iYWwgcmVzZXRcbiYjMzQ7LAomIzQzOwkJCQkgICAgcmMpOwomIzQzOwkJCWJueHRfcmVzZXRfdGFzayhicCwgdHJ1ZSk7CiYjNDM7CQkJYm54dF9ydG5sX3VubG9ja19zcChicCk7CiYjNDM7CQkJcmV0dXJuOwomIzQzOwkJfQogCQljcHIgPSAmYW1wO3J4ci0mZ3Q7Ym5hcGktJmd0O2NwX3Jpbmc7CiAJCWNwci0mZ3Q7c3dfc3RhdHMtJmd0O3J4LnJ4X3Jlc2V0cyYjNDM7JiM0Mzs7CiAJCWlmIChicC0mZ3Q7ZmxhZ3MgJmFtcDsgQk5YVF9GTEFHX0FHR19SSU5HUykKQEAgLTE2MzMyLDYgJiM0MzsxNjM1Miw4IEBAIHN0YXRpYyBpbnQgYm54dF9xdWV1ZV9tZW1fYWxsb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAljbG9uZS0mZ3Q7bmVlZF9oZWFkX3Bvb2wgPSBmYWxzZTsKIAljbG9uZS0mZ3Q7cnhfcGFnZV9zaXplID0gcWNmZy0mZ3Q7cnhfcGFnZV9zaXplOwogCWNsb25lLSZndDtyeF9hZ2dfYm1hcCA9IE5VTEw7CiYjNDM7CWNsb25lLSZndDtyeF90cGEgPSBOVUxMOwomIzQzOwljbG9uZS0mZ3Q7cnhfdHBhX2lkeF9tYXAgPSBOVUxMOwogCiAJcmMgPSBibnh0X2FsbG9jX3J4X3BhZ2VfcG9vbChicCwgY2xvbmUsIHJ4ci0mZ3Q7cGFnZV9wb29sLSZndDtwLm5pZCk7CiAJaWYgKHJjKQpAQCAtMTYzNzUsMTEgJiM0MzsxNjM5NywxNiBAQCBzdGF0aWMgaW50IGJueHRfcXVldWVfbWVtX2FsbG9jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJYm54dF9hbGxvY19vbmVfcnhfcmluZ19za2IoYnAsIGNsb25lLCBpZHgpOwogCWlmIChicC0mZ3Q7ZmxhZ3MgJmFtcDsgQk5YVF9GTEFHX0FHR19SSU5HUykKIAkJYm54dF9hbGxvY19vbmVfcnhfcmluZ19uZXRtZW0oYnAsIGNsb25lLCBpZHgpOwotCWlmIChicC0mZ3Q7ZmxhZ3MgJmFtcDsgQk5YVF9GTEFHX1RQQSkKLQkJYm54dF9hbGxvY19vbmVfdHBhX2luZm9fZGF0YShicCwgY2xvbmUpOwomIzQzOwlpZiAoYnAtJmd0O2ZsYWdzICZhbXA7IEJOWFRfRkxBR19UUEEpIHsKJiM0MzsJCXJjID0gYm54dF9hbGxvY19vbmVfdHBhX2luZm9fZGF0YShicCwgY2xvbmUpOwomIzQzOwkJaWYgKHJjKQomIzQzOwkJCWdvdG8gZXJyX2ZyZWVfcnhfcmluZ19za2JzOwomIzQzOwl9CiAKIAlyZXR1cm4gMDsKIAomIzQzO2Vycl9mcmVlX3J4X3Jpbmdfc2ticzoKJiM0MzsJYm54dF9mcmVlX29uZV9yeF9yaW5nX3NrYnMoYnAsIGNsb25lKTsKIGVycl9mcmVlX3RwYV9pbmZvOgogCWJueHRfZnJlZV9vbmVfdHBhX2luZm8oYnAsIGNsb25lKTsKIGVycl9mcmVlX3J4X2FnZ19yaW5nOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuaAppbmRleCBhYjg5NGY4YWRkZWY1Li5kZTQ2YjQyZDdjOThiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuaApAQCAtNzg5LDcgJiM0Mzs3ODksNiBAQCBzdHJ1Y3QgbnFlX2NuIHsKIAogI2RlZmluZSBNQVhfVFBBCQk2NAogI2RlZmluZSBNQVhfVFBBX1A1CTI1NgotI2RlZmluZSBNQVhfVFBBX1A1X01BU0sJKE1BWF9UUEFfUDUgLSAxKQogI2RlZmluZSBNQVhfVFBBX1NFR1NfUDUJMHgzZgogCiAjaWYgKEJOWFRfUEFHRV9TSElGVCA9PSAxNikKQEAgLTIzODAsNiAmIzQzOzIzNzksNyBAQCBzdHJ1Y3QgYm54dCB7CiAKIAl1MTYJCQltYXhfdHBhX3YyOwogCXUxNgkJCW1heF90cGE7CiYjNDM7CXUxNgkJCW1heF90cGFfcm91bmR1cF9zaXplOwogCXUzMgkJCXJ4X2J1Zl9zaXplOwogCXUzMgkJCXJ4X2J1Zl91c2Vfc2l6ZTsJLyogdXNlYWJsZSBzaXplICovCiAJdTE2CQkJcnhfb2Zmc2V0Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMzowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDIzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNjY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2g6IEEgUXVpY2sgQXNzZXNzbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBwYXRjaCBpcyB3b3J0aCBmdXp6aW5nLCBhbmQgdGhlIGNyaXRlcmlhIGFyZSBwcmV0dHkgY2xlYXIuIEkmIzM5O3ZlIGdvdCBhIHNldCBvZiBydWxlczogaWYgdGhlIGNoYW5nZXMgYXJlIGp1c3QgZG9jdW1lbnRhdGlvbiwgbG9nZ2luZywgZGVjb3JhdGl2ZSB0d2Vha3MsIHVucmVhY2hhYmxlIGNvZGUsIG9yIHRlYXJkb3duIGNhbGxiYWNrcywgaXQmIzM5O3MgYSAmIzM0O25vLWdvJiMzNDsuIFRoZSBiaWcgb25lIGhlcmUgaXMgJiMzNDt2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyB0aGF0IG5lZWQgcGh5c2ljYWwgaGFyZHdhcmUmIzM0Oy4gSSAqcmVhbGx5KiBuZWVkIHRvIGZvY3VzIG9uIHRoaXMgb25lLgoKTG9va2luZyBhdCB0aGUgZmlsZSBsaXN0LCBpdCYjMzk7cyBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmNgIGFuZCBgYm54dC5oYC4gU28sIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIGBibnh0YCBkcml2ZXIsIHdoaWNoIGZyb20gbWVtb3J5LCBpcyB0aGUgQnJvYWRjb20gTmV0WHRyZW1lLiBJIGtub3cgdGhhdCBmYW1pbHkgb2YgTklDcyBwcmV0dHkgd2VsbCwgaXQgY292ZXJzIHRoZSBCQ001NzN4eC81NzR4eC81NzV4eCBjaGlwcy4gVGhvc2UgYXJlIHRoZSAxMC8yNS80MC81MC8xMDAvMjAwLzQwMEdiIEV0aGVybmV0IE5JQ3MuCgpOb3csIHRoZSBxdWVzdGlvbiBpczogaXMgYGJueHRgIGEgdmVuZG9yLXNwZWNpZmljIGRyaXZlciB0aGF0IG5lZWRzIGEgcGh5c2ljYWwgUENJZSBjYXJkPyBUaGF0JiMzOTtzIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBoZXJlLiBMZXQmIzM5O3MgcmVtZW1iZXIgd2hhdCBRRU1VICpkb2VzKiBlbXVsYXRlLCB0aG9zZSBhcmUgdGhlIGNvbW1vbiBvbmVzLCBsaWtlIGUxMDAwLCB2aXJ0aW8sIGFuZCBydGw4MTM5LgoKT2theSwgaXMgYm54dCBlbXVsYXRlZCBieSBzdGFuZGFyZCBRRU1VPyBObyEgRGVmaW5pdGVseSBub3QuIEJyb2FkY29tIE5ldFh0cmVtZSBCQ001NzMweC9CQ001NzQweCAoTmV0WHRyZW1lLUUgLyBOZXRYdHJlbWUtQykgYXJlIGVudGVycHJpc2UvU21hcnROSUMvaGlnaC1zcGVlZCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBRRU1VIG9yIEdDRS4KCkFscmlnaHQsIGJhY2sgdG8gdGhlIHJ1bGVzLiAmIzM0O1ZlbmRvci1zcGVjaWZpYyBQQ0llLi4uJiMzNDsuIEFuZCAqYm54dCogaXMgYSB2ZW5kb3Itc3BlY2lmaWMgQnJvYWRjb20gRXRoZXJuZXQgZHJpdmVyIGZvciB0aGVpciBOZXRYdHJlbWUgbGluZS4KClNvLCB0aGlzIHBhdGNoIG1vZGlmaWVzIGNvZGUgdGhhdCBmYWxscyBkaXJlY3RseSB1bmRlciB0aGF0IGNhdGVnb3J5OiB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgcmVxdWlyaW5nIHBoeXNpY2FsIFBDSWUuIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGlzIGNvcnJlY3QsIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLiBMZXQmIzM5O3MgbG9vayBhdCB0aGUgS2NvbmZpZyBmaWxlIGZvciBgYm54dGAgdG8gdmVyaWZ5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEzOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTlhUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc9MTk1PWNvbmZpZyBTWVNURU1QT1JUXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yMDYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnOjIwNzpjb25maWcgQk5YVFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yMDgtXHR0cmlzdGF0ZSBcJiMzNDtCcm9hZGNvbSBOZXRYdHJlbWUtQy9FIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTIyMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc6MjIyOmNvbmZpZyBCTlhUX1NSSU9WXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTIyMy1cdGJvb2wgXCYjMzQ7QnJvYWRjb20gTmV0WHRyZW1lLUMvRSBTUi1JT1Ygc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjMwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZzoyMzE6Y29uZmlnIEJOWFRfRkxPV0VSX09GRkxPQURcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjMyLVx0Ym9vbCBcJiMzNDtUQyBGbG93ZXIgb2ZmbG9hZCBzdXBwb3J0IGZvciBOZXRYdHJlbWUtQy9FXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yMzktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnOjI0MDpjb25maWcgQk5YVF9EQ0JcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjQxLVx0Ym9vbCBcJiMzNDtEYXRhIENlbnRlciBCcmlkZ2luZyAoRENCKSBTdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yNDktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnOjI1MDpjb25maWcgQk5YVF9IV01PTlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yNTEtXHRib29sIFwmIzM0O0Jyb2FkY29tIE5ldFh0cmVtZS1DL0UgSFdNT04gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEzOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2MTkKCQkJCQkJCW91dHB1dDogNzkKCQkJCQkJCXRob3VnaHRzOiAyMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQk5YVCBEcml2ZXIgRnV6emluZyBBc3Nlc3NtZW50KioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGlzLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHNwZWNpZmljIGRyaXZlciBpbiBxdWVzdGlvbiDigJMgeWVwLCBpdCYjMzk7cyBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZ2AsIGFuZCB0aGUgZHJpdmVyIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaXMgYENPTkZJR19CTlhUYCwgdGhlIEJyb2FkY29tIE5ldFh0cmVtZS1DL0UgZHJpdmVyLiBUaGF0JiMzOTtzIGEgdmVuZG9yLXNwZWNpZmljIGRyaXZlciwgZm9jdXNpbmcgb24gUENJZSBOSUNzIGZyb20gQnJvYWRjb20sIG5hbWVseSB0aGUgQkNNNTczeHgsIEJDTTU3NHh4LCBCQ001NzV4eCwgYW5kIHNpbWlsYXIgaGFyZHdhcmUuCgpUaGUgY3J1Y2lhbCBwb2ludCBoZXJlIGlzIHRoYXQgdGhpcyBkcml2ZXIgKnJlcXVpcmVzKiBwaHlzaWNhbCBCcm9hZGNvbSBQQ0llIGhhcmR3YXJlLiBUaGlzIGltbWVkaWF0ZWx5IGZsYWdzIGEgc2lnbmlmaWNhbnQgaHVyZGxlLiBTdGFuZGFyZCBRRU1VIHNldHVwcywgYW5kIGNlcnRhaW5seSB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyBsaWtlIHRob3NlIG9uIEdDRSwgKmRvIG5vdCogZW11bGF0ZSB0aGlzIHNwZWNpZmljIGhhcmR3YXJlLiBXZSYjMzk7ZCBiZSB0cnlpbmcgdG8gdGVzdCBzb21ldGhpbmcgdGhhdCBmdW5kYW1lbnRhbGx5IGlzbiYjMzk7dCBwcmVzZW50IGluIHRoZSBmdXp6aW5nIGVudmlyb25tZW50LCB3aGljaCBpcyBhIG5vbi1zdGFydGVyLgoKU28sIGxldCBtZSBydW4gdGhyb3VnaCB0aGUgcHJvbXB0IHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZzogYFdvcnRoRnV6emluZzogZmFsc2VgLCBgRm9jdXNTeW1ib2xzOiBbXWAsIGBFbmFibGVDb25maWdzOiBbXWAsIGFuZCB0aGUgcmVhc29uaW5nIGlzIGNvbmNpc2UgYW5kIGFjY3VyYXRlOiB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgcmVxdWlyaW5nIHBoeXNpY2FsIFBDSWUgQnJvYWRjb20gY2FyZHMgbm90IGVtdWxhdGVkIGluIHRoZSBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50cy4KCkFscmlnaHQsIHdpdGggdGhhdCBjb25maXJtZWQsIEkmIzM5O20gY29uZmlkZW50IGluIHRoZSBhc3Nlc3NtZW50LiBUaW1lIHRvIHJ1biBhIHNhbml0eSBjaGVjayBvbiB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzIGFuZCBmaW5hbGl6ZSB0aGUgY2FsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCcm9hZGNvbSBOZXRYdHJlbWUtQy9FIChibnh0KSBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgTklDIGRyaXZlciByZXF1aXJpbmcgcGh5c2ljYWwgQnJvYWRjb20gaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQnJvYWRjb20gTmV0WHRyZW1lLUMvRSAoYm54dCkgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIE5JQyBkcml2ZXIgcmVxdWlyaW5nIHBoeXNpY2FsIEJyb2FkY29tIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMzowMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDJUMTM6MDI6MjEuMTY2MzIxMjI3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQwMjQyMDIxMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQnJvYWRjb20gTmV0WHRyZW1lLUMvRSAoYm54dCkgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIE5JQyBkcml2ZXIgcmVxdWlyaW5nIHBoeXNpY2FsIEJyb2FkY29tIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTM6MDI6MjEuMTY2MzMzNjQ3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTAzMTkxMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxN2ZhNTZkZDVjZmUyMzVlNDNkMzVjMDY1ZWVhZmVmMWU5YjA5NTc1XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgU2VwIDIgMTM6MDI6MjAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuY1xcbmluZGV4IGQ1OWJjY2E3M2EyYjguLmIyY2U1YjRlNWU2YTUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuY1xcbkBAIC0xNTE0LDE0ICsxNTE0LDE2IEBAIHN0YXRpYyBpbnQgYm54dF9kaXNjYXJkX3J4KHN0cnVjdCBibnh0ICpicCwgc3RydWN0IGJueHRfY3BfcmluZ19pbmZvICpjcHIsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgdTE2IGJueHRfYWxsb2NfYWdnX2lkeChzdHJ1Y3QgYm54dF9yeF9yaW5nX2luZm8gKnJ4ciwgdTE2IGFnZ19pZClcXG4rc3RhdGljIHUxNiBibnh0X2FsbG9jX2FnZ19pZHgoc3RydWN0IGJueHQgKmJwLCBzdHJ1Y3QgYm54dF9yeF9yaW5nX2luZm8gKnJ4cixcXG4rXFx0XFx0XFx0ICAgICAgdTE2IGFnZ19pZClcXG4ge1xcbiBcXHRzdHJ1Y3QgYm54dF90cGFfaWR4X21hcCAqbWFwID0gcnhyLVxcdTAwM2VyeF90cGFfaWR4X21hcDtcXG4tXFx0dTE2IGlkeCA9IGFnZ19pZCBcXHUwMDI2IE1BWF9UUEFfUDVfTUFTSztcXG4rXFx0dTE2IGlkeCA9IGFnZ19pZCBcXHUwMDI2IChicC1cXHUwMDNlbWF4X3RwYV9yb3VuZHVwX3NpemUgLSAxKTtcXG4gXFxuIFxcdGlmICh0ZXN0X2JpdChpZHgsIG1hcC1cXHUwMDNlYWdnX2lkeF9ibWFwKSkge1xcbi1cXHRcXHRpZHggPSBmaW5kX2ZpcnN0X3plcm9fYml0KG1hcC1cXHUwMDNlYWdnX2lkeF9ibWFwLCBNQVhfVFBBX1A1KTtcXG4tXFx0XFx0aWYgKGlkeCBcXHUwMDNlPSBNQVhfVFBBX1A1KVxcbitcXHRcXHRpZHggPSBmaW5kX2ZpcnN0X3plcm9fYml0KG1hcC1cXHUwMDNlYWdnX2lkeF9ibWFwLFxcbitcXHRcXHRcXHRcXHRcXHQgIGJwLVxcdTAwM2VtYXhfdHBhX3JvdW5kdXBfc2l6ZSk7XFxuK1xcdFxcdGlmIChpZHggXFx1MDAzZT0gYnAtXFx1MDAzZW1heF90cGFfcm91bmR1cF9zaXplKVxcbiBcXHRcXHRcXHRyZXR1cm4gSU5WQUxJRF9IV19SSU5HX0lEO1xcbiBcXHR9XFxuIFxcdF9fc2V0X2JpdChpZHgsIG1hcC1cXHUwMDNlYWdnX2lkeF9ibWFwKTtcXG5AQCAtMTU4Niw3ICsxNTg4LDcgQEAgc3RhdGljIHZvaWQgYm54dF90cGFfc3RhcnQoc3RydWN0IGJueHQgKmJwLCBzdHJ1Y3QgYm54dF9yeF9yaW5nX2luZm8gKnJ4cixcXG4gXFxuIFxcdGlmIChicC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBCTlhUX0ZMQUdfQ0hJUF9QNV9QTFVTKSB7XFxuIFxcdFxcdGFnZ19pZCA9IFRQQV9TVEFSVF9BR0dfSURfUDUodHBhX3N0YXJ0KTtcXG4tXFx0XFx0YWdnX2lkID0gYm54dF9hbGxvY19hZ2dfaWR4KHJ4ciwgYWdnX2lkKTtcXG4rXFx0XFx0YWdnX2lkID0gYm54dF9hbGxvY19hZ2dfaWR4KGJwLCByeHIsIGFnZ19pZCk7XFxuIFxcdFxcdGlmICh1bmxpa2VseShhZ2dfaWQgPT0gSU5WQUxJRF9IV19SSU5HX0lEKSkge1xcbiBcXHRcXHRcXHRuZXRkZXZfd2FybihicC1cXHUwMDNlZGV2LCBcXFwiVW5hYmxlIHRvIGFsbG9jYXRlIGFnZyBJRCBmb3IgcmluZyAlZCwgYWdnIDB4JXhcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdCAgICByeHItXFx1MDAzZWJuYXBpLVxcdTAwM2VpbmRleCxcXG5AQCAtMzU4NCw3ICszNTg2LDcgQEAgc3RhdGljIHZvaWQgYm54dF9mcmVlX29uZV90cGFfaW5mb19kYXRhKHN0cnVjdCBibnh0ICpicCxcXG4ge1xcbiBcXHRpbnQgaTtcXG4gXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBicC1cXHUwMDNlbWF4X3RwYTsgaSsrKSB7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBicC1cXHUwMDNlbWF4X3RwYV9yb3VuZHVwX3NpemU7IGkrKykge1xcbiBcXHRcXHRzdHJ1Y3QgYm54dF90cGFfaW5mbyAqdHBhX2luZm8gPSBcXHUwMDI2cnhyLVxcdTAwM2VyeF90cGFbaV07XFxuIFxcdFxcdHU4ICpkYXRhID0gdHBhX2luZm8tXFx1MDAzZWRhdGE7XFxuIFxcbkBAIC0zNzgxLDcgKzM3ODMsNyBAQCBzdGF0aWMgdm9pZCBibnh0X2ZyZWVfb25lX3RwYV9pbmZvKHN0cnVjdCBibnh0ICpicCxcXG4gXFx0a2ZyZWUocnhyLVxcdTAwM2VyeF90cGFfaWR4X21hcCk7XFxuIFxcdHJ4ci1cXHUwMDNlcnhfdHBhX2lkeF9tYXAgPSBOVUxMO1xcbiBcXHRpZiAocnhyLVxcdTAwM2VyeF90cGEpIHtcXG4tXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGJwLVxcdTAwM2VtYXhfdHBhOyBpKyspIHtcXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGJwLVxcdTAwM2VtYXhfdHBhX3JvdW5kdXBfc2l6ZTsgaSsrKSB7XFxuIFxcdFxcdFxcdGtmcmVlKHJ4ci1cXHUwMDNlcnhfdHBhW2ldLmFnZ19hcnIpO1xcbiBcXHRcXHRcXHRyeHItXFx1MDAzZXJ4X3RwYVtpXS5hZ2dfYXJyID0gTlVMTDtcXG4gXFx0XFx0fVxcbkBAIC0zODA3LDEzICszODA5LDE0IEBAIHN0YXRpYyBpbnQgYm54dF9hbGxvY19vbmVfdHBhX2luZm8oc3RydWN0IGJueHQgKmJwLFxcbiBcXHRzdHJ1Y3QgcnhfYWdnX2NtcCAqYWdnO1xcbiBcXHRpbnQgaTtcXG4gXFxuLVxcdHJ4ci1cXHUwMDNlcnhfdHBhID0ga3phbGxvY19vYmpzKHN0cnVjdCBibnh0X3RwYV9pbmZvLCBicC1cXHUwMDNlbWF4X3RwYSk7XFxuK1xcdHJ4ci1cXHUwMDNlcnhfdHBhID0ga3phbGxvY19vYmpzKHN0cnVjdCBibnh0X3RwYV9pbmZvLFxcbitcXHRcXHRcXHRcXHQgICBicC1cXHUwMDNlbWF4X3RwYV9yb3VuZHVwX3NpemUpO1xcbiBcXHRpZiAoIXJ4ci1cXHUwMDNlcnhfdHBhKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuIFxcdGlmICghKGJwLVxcdTAwM2VmbGFncyBcXHUwMDI2IEJOWFRfRkxBR19DSElQX1A1X1BMVVMpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGJwLVxcdTAwM2VtYXhfdHBhOyBpKyspIHtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGJwLVxcdTAwM2VtYXhfdHBhX3JvdW5kdXBfc2l6ZTsgaSsrKSB7XFxuIFxcdFxcdGFnZyA9IGt6YWxsb2Nfb2JqcygqYWdnLCBNQVhfU0tCX0ZSQUdTKTtcXG4gXFx0XFx0aWYgKCFhZ2cpXFxuIFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbkBAIC0zODMyLDYgKzM4MzUsOSBAQCBzdGF0aWMgaW50IGJueHRfYWxsb2NfdHBhX2luZm8oc3RydWN0IGJueHQgKmJwKVxcbiBcXG4gXFx0YnAtXFx1MDAzZW1heF90cGEgPSBNQVhfVFBBO1xcbiBcXHRpZiAoYnAtXFx1MDAzZWZsYWdzIFxcdTAwMjYgQk5YVF9GTEFHX0NISVBfUDVfUExVUykge1xcbitcXHRcXHQvKiBUUEEgaXMgbm90IHN1cHBvcnRlZCBhdCBhbGwsIHNvIHRoZXJlIGlzIG5vdGhpbmcgdG9cXG4rXFx0XFx0ICogYWxsb2NhdGUuXFxuK1xcdFxcdCAqL1xcbiBcXHRcXHRpZiAoIWJwLVxcdTAwM2VtYXhfdHBhX3YyKVxcbiBcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFx0XFx0YnAtXFx1MDAzZW1heF90cGEgPSBtaW5fdCh1MTYsIGJwLVxcdTAwM2VtYXhfdHBhX3YyLCBNQVhfVFBBX1A1KTtcXG5AQCAtMzgzOSw2ICszODQ1LDcgQEAgc3RhdGljIGludCBibnh0X2FsbG9jX3RwYV9pbmZvKHN0cnVjdCBibnh0ICpicClcXG4gXFx0XFx0aWYgKGJwLVxcdTAwM2VtYXhfdHBhIFxcdTAwM2M9IDMyIFxcdTAwMjZcXHUwMDI2IEJOWFRfQ0hJUF9QNShicCkgXFx1MDAyNlxcdTAwMjYgIUJOWFRfTlBBUihicCkpXFxuIFxcdFxcdFxcdGJwLVxcdTAwM2VtYXhfdHBhID0gTUFYX1RQQV9QNTtcXG4gXFx0fVxcbitcXHRicC1cXHUwMDNlbWF4X3RwYV9yb3VuZHVwX3NpemUgPSByb3VuZHVwX3Bvd19vZl90d28oYnAtXFx1MDAzZW1heF90cGEpO1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGJwLVxcdTAwM2VyeF9ucl9yaW5nczsgaSsrKSB7XFxuIFxcdFxcdHN0cnVjdCBibnh0X3J4X3JpbmdfaW5mbyAqcnhyID0gXFx1MDAyNmJwLVxcdTAwM2VyeF9yaW5nW2ldO1xcbkBAIC00NTUxLDcgKzQ1NTgsNyBAQCBzdGF0aWMgaW50IGJueHRfYWxsb2Nfb25lX3RwYV9pbmZvX2RhdGEoc3RydWN0IGJueHQgKmJwLFxcbiBcXHR1OCAqZGF0YTtcXG4gXFx0aW50IGk7XFxuIFxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgYnAtXFx1MDAzZW1heF90cGE7IGkrKykge1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgYnAtXFx1MDAzZW1heF90cGFfcm91bmR1cF9zaXplOyBpKyspIHtcXG4gXFx0XFx0ZGF0YSA9IF9fYm54dF9hbGxvY19yeF9mcmFnKGJwLCBcXHUwMDI2bWFwcGluZywgcnhyLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgR0ZQX0tFUk5FTCk7XFxuIFxcdFxcdGlmICghZGF0YSlcXG5AQCAtNTAwNiw3ICs1MDEzLDggQEAgdm9pZCBibnh0X3NldF9yeF9za2JfbW9kZShzdHJ1Y3QgYm54dCAqYnAsIGJvb2wgcGFnZV9tb2RlKVxcbiBcXHRcXHRibnh0X2dldF9tYXhfcmluZ3MoYnAsIFxcdTAwMjZyeCwgXFx1MDAyNnR4LCB0cnVlKTtcXG4gXFx0XFx0aWYgKHJ4IFxcdTAwM2UgMSkge1xcbiBcXHRcXHRcXHRicC1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gfkJOWFRfRkxBR19OT19BR0dfUklOR1M7XFxuLVxcdFxcdFxcdGJwLVxcdTAwM2VkZXYtXFx1MDAzZWh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfTFJPO1xcbitcXHRcXHRcXHRpZiAoQk5YVF9TVVBQT1JUU19UUEEoYnApKVxcbitcXHRcXHRcXHRcXHRicC1cXHUwMDNlZGV2LVxcdTAwM2Vod19mZWF0dXJlcyB8PSBORVRJRl9GX0xSTztcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbkBAIC0xMTM0MCw4ICsxMTM0OCwxMyBAQCBzdGF0aWMgaW50IGJueHRfc2h1dGRvd25fbmljKHN0cnVjdCBibnh0ICpicCwgYm9vbCBpcnFfcmVfaW5pdClcXG4gXFxuIHN0YXRpYyBpbnQgYm54dF9pbml0X25pYyhzdHJ1Y3QgYm54dCAqYnAsIGJvb2wgaXJxX3JlX2luaXQpXFxuIHtcXG4rXFx0aW50IHJjO1xcbitcXG4gXFx0Ym54dF9pbml0X2NwX3JpbmdzKGJwKTtcXG4tXFx0Ym54dF9pbml0X3J4X3JpbmdzKGJwKTtcXG4rXFx0cmMgPSBibnh0X2luaXRfcnhfcmluZ3MoYnApO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuIFxcdGJueHRfaW5pdF90eF9yaW5ncyhicCk7XFxuIFxcdGJueHRfaW5pdF9yaW5nX2dycHMoYnAsIGlycV9yZV9pbml0KTtcXG4gXFx0Ym54dF9pbml0X3ZuaWNzKGJwKTtcXG5AQCAtMTQ2MDMsNyArMTQ2MTYsMTQgQEAgc3RhdGljIHZvaWQgYm54dF9yeF9yaW5nX3Jlc2V0KHN0cnVjdCBibnh0ICpicClcXG4gXFx0XFx0cnhyLVxcdTAwM2VyeF9zd19hZ2dfcHJvZCA9IDA7XFxuIFxcdFxcdHJ4ci1cXHUwMDNlcnhfbmV4dF9jb25zID0gMDtcXG4gXFx0XFx0cnhyLVxcdTAwM2VibmFwaS1cXHUwMDNlaW5fcmVzZXQgPSBmYWxzZTtcXG4tXFx0XFx0Ym54dF9hbGxvY19vbmVfcnhfcmluZyhicCwgaSk7XFxuK1xcdFxcdHJjID0gYm54dF9hbGxvY19vbmVfcnhfcmluZyhicCwgaSk7XFxuK1xcdFxcdGlmIChyYykge1xcbitcXHRcXHRcXHRuZXRkZXZfd2FybihicC1cXHUwMDNlZGV2LCBcXFwiUlggcmluZyByZXNldCBmYWlsZWQgdG8gYWxsb2NhdGUgYnVmZmVycywgcmMgPSAlZCwgZmFsbGluZyBiYWNrIHRvIGdsb2JhbCByZXNldFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgIHJjKTtcXG4rXFx0XFx0XFx0Ym54dF9yZXNldF90YXNrKGJwLCB0cnVlKTtcXG4rXFx0XFx0XFx0Ym54dF9ydG5sX3VubG9ja19zcChicCk7XFxuK1xcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0fVxcbiBcXHRcXHRjcHIgPSBcXHUwMDI2cnhyLVxcdTAwM2VibmFwaS1cXHUwMDNlY3BfcmluZztcXG4gXFx0XFx0Y3ByLVxcdTAwM2Vzd19zdGF0cy1cXHUwMDNlcngucnhfcmVzZXRzKys7XFxuIFxcdFxcdGlmIChicC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBCTlhUX0ZMQUdfQUdHX1JJTkdTKVxcbkBAIC0xNjMzMiw2ICsxNjM1Miw4IEBAIHN0YXRpYyBpbnQgYm54dF9xdWV1ZV9tZW1fYWxsb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0Y2xvbmUtXFx1MDAzZW5lZWRfaGVhZF9wb29sID0gZmFsc2U7XFxuIFxcdGNsb25lLVxcdTAwM2VyeF9wYWdlX3NpemUgPSBxY2ZnLVxcdTAwM2VyeF9wYWdlX3NpemU7XFxuIFxcdGNsb25lLVxcdTAwM2VyeF9hZ2dfYm1hcCA9IE5VTEw7XFxuK1xcdGNsb25lLVxcdTAwM2VyeF90cGEgPSBOVUxMO1xcbitcXHRjbG9uZS1cXHUwMDNlcnhfdHBhX2lkeF9tYXAgPSBOVUxMO1xcbiBcXG4gXFx0cmMgPSBibnh0X2FsbG9jX3J4X3BhZ2VfcG9vbChicCwgY2xvbmUsIHJ4ci1cXHUwMDNlcGFnZV9wb29sLVxcdTAwM2VwLm5pZCk7XFxuIFxcdGlmIChyYylcXG5AQCAtMTYzNzUsMTEgKzE2Mzk3LDE2IEBAIHN0YXRpYyBpbnQgYm54dF9xdWV1ZV9tZW1fYWxsb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0Ym54dF9hbGxvY19vbmVfcnhfcmluZ19za2IoYnAsIGNsb25lLCBpZHgpO1xcbiBcXHRpZiAoYnAtXFx1MDAzZWZsYWdzIFxcdTAwMjYgQk5YVF9GTEFHX0FHR19SSU5HUylcXG4gXFx0XFx0Ym54dF9hbGxvY19vbmVfcnhfcmluZ19uZXRtZW0oYnAsIGNsb25lLCBpZHgpO1xcbi1cXHRpZiAoYnAtXFx1MDAzZWZsYWdzIFxcdTAwMjYgQk5YVF9GTEFHX1RQQSlcXG4tXFx0XFx0Ym54dF9hbGxvY19vbmVfdHBhX2luZm9fZGF0YShicCwgY2xvbmUpO1xcbitcXHRpZiAoYnAtXFx1MDAzZWZsYWdzIFxcdTAwMjYgQk5YVF9GTEFHX1RQQSkge1xcbitcXHRcXHRyYyA9IGJueHRfYWxsb2Nfb25lX3RwYV9pbmZvX2RhdGEoYnAsIGNsb25lKTtcXG4rXFx0XFx0aWYgKHJjKVxcbitcXHRcXHRcXHRnb3RvIGVycl9mcmVlX3J4X3Jpbmdfc2ticztcXG4rXFx0fVxcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbitlcnJfZnJlZV9yeF9yaW5nX3NrYnM6XFxuK1xcdGJueHRfZnJlZV9vbmVfcnhfcmluZ19za2JzKGJwLCBjbG9uZSk7XFxuIGVycl9mcmVlX3RwYV9pbmZvOlxcbiBcXHRibnh0X2ZyZWVfb25lX3RwYV9pbmZvKGJwLCBjbG9uZSk7XFxuIGVycl9mcmVlX3J4X2FnZ19yaW5nOlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5oXFxuaW5kZXggYWI4OTRmOGFkZGVmNS4uZGU0NmI0MmQ3Yzk4YiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5oXFxuQEAgLTc4OSw3ICs3ODksNiBAQCBzdHJ1Y3QgbnFlX2NuIHtcXG4gXFxuICNkZWZpbmUgTUFYX1RQQVxcdFxcdDY0XFxuICNkZWZpbmUgTUFYX1RQQV9QNVxcdDI1Nlxcbi0jZGVmaW5lIE1BWF9UUEFfUDVfTUFTS1xcdChNQVhfVFBBX1A1IC0gMSlcXG4gI2RlZmluZSBNQVhfVFBBX1NFR1NfUDVcXHQweDNmXFxuIFxcbiAjaWYgKEJOWFRfUEFHRV9TSElGVCA9PSAxNilcXG5AQCAtMjM4MCw2ICsyMzc5LDcgQEAgc3RydWN0IGJueHQge1xcbiBcXG4gXFx0dTE2XFx0XFx0XFx0bWF4X3RwYV92MjtcXG4gXFx0dTE2XFx0XFx0XFx0bWF4X3RwYTtcXG4rXFx0dTE2XFx0XFx0XFx0bWF4X3RwYV9yb3VuZHVwX3NpemU7XFxuIFxcdHUzMlxcdFxcdFxcdHJ4X2J1Zl9zaXplO1xcbiBcXHR1MzJcXHRcXHRcXHRyeF9idWZfdXNlX3NpemU7XFx0LyogdXNlYWJsZSBzaXplICovXFxuIFxcdHUxNlxcdFxcdFxcdHJ4X29mZnNldDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTM6MDI6MjEuNjc3MjMwODU5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyMzUxMzI3NjEwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJyb2FkY29tIE5ldFh0cmVtZS1DL0UgKGJueHQpIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBOSUMgZHJpdmVyIHJlcXVpcmluZyBwaHlzaWNhbCBCcm9hZGNvbSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDE3ZmE1NmRkNWNmZTIzNWU0M2QzNWMwNjVlZWFmZWYxZTliMDk1NzVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCAyIDEzOjAyOjIwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuY1xuaW5kZXggZDU5YmNjYTczYTJiOC4uYjJjZTViNGU1ZTZhNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuY1xuQEAgLTE1MTQsMTQgKzE1MTQsMTYgQEAgc3RhdGljIGludCBibnh0X2Rpc2NhcmRfcngoc3RydWN0IGJueHQgKmJwLCBzdHJ1Y3QgYm54dF9jcF9yaW5nX2luZm8gKmNwcixcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgdTE2IGJueHRfYWxsb2NfYWdnX2lkeChzdHJ1Y3QgYm54dF9yeF9yaW5nX2luZm8gKnJ4ciwgdTE2IGFnZ19pZClcbitzdGF0aWMgdTE2IGJueHRfYWxsb2NfYWdnX2lkeChzdHJ1Y3QgYm54dCAqYnAsIHN0cnVjdCBibnh0X3J4X3JpbmdfaW5mbyAqcnhyLFxuK1x0XHRcdCAgICAgIHUxNiBhZ2dfaWQpXG4ge1xuIFx0c3RydWN0IGJueHRfdHBhX2lkeF9tYXAgKm1hcCA9IHJ4ci1cdTAwM2VyeF90cGFfaWR4X21hcDtcbi1cdHUxNiBpZHggPSBhZ2dfaWQgXHUwMDI2IE1BWF9UUEFfUDVfTUFTSztcbitcdHUxNiBpZHggPSBhZ2dfaWQgXHUwMDI2IChicC1cdTAwM2VtYXhfdHBhX3JvdW5kdXBfc2l6ZSAtIDEpO1xuIFxuIFx0aWYgKHRlc3RfYml0KGlkeCwgbWFwLVx1MDAzZWFnZ19pZHhfYm1hcCkpIHtcbi1cdFx0aWR4ID0gZmluZF9maXJzdF96ZXJvX2JpdChtYXAtXHUwMDNlYWdnX2lkeF9ibWFwLCBNQVhfVFBBX1A1KTtcbi1cdFx0aWYgKGlkeCBcdTAwM2U9IE1BWF9UUEFfUDUpXG4rXHRcdGlkeCA9IGZpbmRfZmlyc3RfemVyb19iaXQobWFwLVx1MDAzZWFnZ19pZHhfYm1hcCxcbitcdFx0XHRcdFx0ICBicC1cdTAwM2VtYXhfdHBhX3JvdW5kdXBfc2l6ZSk7XG4rXHRcdGlmIChpZHggXHUwMDNlPSBicC1cdTAwM2VtYXhfdHBhX3JvdW5kdXBfc2l6ZSlcbiBcdFx0XHRyZXR1cm4gSU5WQUxJRF9IV19SSU5HX0lEO1xuIFx0fVxuIFx0X19zZXRfYml0KGlkeCwgbWFwLVx1MDAzZWFnZ19pZHhfYm1hcCk7XG5AQCAtMTU4Niw3ICsxNTg4LDcgQEAgc3RhdGljIHZvaWQgYm54dF90cGFfc3RhcnQoc3RydWN0IGJueHQgKmJwLCBzdHJ1Y3QgYm54dF9yeF9yaW5nX2luZm8gKnJ4cixcbiBcbiBcdGlmIChicC1cdTAwM2VmbGFncyBcdTAwMjYgQk5YVF9GTEFHX0NISVBfUDVfUExVUykge1xuIFx0XHRhZ2dfaWQgPSBUUEFfU1RBUlRfQUdHX0lEX1A1KHRwYV9zdGFydCk7XG4tXHRcdGFnZ19pZCA9IGJueHRfYWxsb2NfYWdnX2lkeChyeHIsIGFnZ19pZCk7XG4rXHRcdGFnZ19pZCA9IGJueHRfYWxsb2NfYWdnX2lkeChicCwgcnhyLCBhZ2dfaWQpO1xuIFx0XHRpZiAodW5saWtlbHkoYWdnX2lkID09IElOVkFMSURfSFdfUklOR19JRCkpIHtcbiBcdFx0XHRuZXRkZXZfd2FybihicC1cdTAwM2VkZXYsIFwiVW5hYmxlIHRvIGFsbG9jYXRlIGFnZyBJRCBmb3IgcmluZyAlZCwgYWdnIDB4JXhcXG5cIixcbiBcdFx0XHRcdCAgICByeHItXHUwMDNlYm5hcGktXHUwMDNlaW5kZXgsXG5AQCAtMzU4NCw3ICszNTg2LDcgQEAgc3RhdGljIHZvaWQgYm54dF9mcmVlX29uZV90cGFfaW5mb19kYXRhKHN0cnVjdCBibnh0ICpicCxcbiB7XG4gXHRpbnQgaTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGJwLVx1MDAzZW1heF90cGE7IGkrKykge1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgYnAtXHUwMDNlbWF4X3RwYV9yb3VuZHVwX3NpemU7IGkrKykge1xuIFx0XHRzdHJ1Y3QgYm54dF90cGFfaW5mbyAqdHBhX2luZm8gPSBcdTAwMjZyeHItXHUwMDNlcnhfdHBhW2ldO1xuIFx0XHR1OCAqZGF0YSA9IHRwYV9pbmZvLVx1MDAzZWRhdGE7XG4gXG5AQCAtMzc4MSw3ICszNzgzLDcgQEAgc3RhdGljIHZvaWQgYm54dF9mcmVlX29uZV90cGFfaW5mbyhzdHJ1Y3QgYm54dCAqYnAsXG4gXHRrZnJlZShyeHItXHUwMDNlcnhfdHBhX2lkeF9tYXApO1xuIFx0cnhyLVx1MDAzZXJ4X3RwYV9pZHhfbWFwID0gTlVMTDtcbiBcdGlmIChyeHItXHUwMDNlcnhfdHBhKSB7XG4tXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGJwLVx1MDAzZW1heF90cGE7IGkrKykge1xuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBicC1cdTAwM2VtYXhfdHBhX3JvdW5kdXBfc2l6ZTsgaSsrKSB7XG4gXHRcdFx0a2ZyZWUocnhyLVx1MDAzZXJ4X3RwYVtpXS5hZ2dfYXJyKTtcbiBcdFx0XHRyeHItXHUwMDNlcnhfdHBhW2ldLmFnZ19hcnIgPSBOVUxMO1xuIFx0XHR9XG5AQCAtMzgwNywxMyArMzgwOSwxNCBAQCBzdGF0aWMgaW50IGJueHRfYWxsb2Nfb25lX3RwYV9pbmZvKHN0cnVjdCBibnh0ICpicCxcbiBcdHN0cnVjdCByeF9hZ2dfY21wICphZ2c7XG4gXHRpbnQgaTtcbiBcbi1cdHJ4ci1cdTAwM2VyeF90cGEgPSBremFsbG9jX29ianMoc3RydWN0IGJueHRfdHBhX2luZm8sIGJwLVx1MDAzZW1heF90cGEpO1xuK1x0cnhyLVx1MDAzZXJ4X3RwYSA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgYm54dF90cGFfaW5mbyxcbitcdFx0XHRcdCAgIGJwLVx1MDAzZW1heF90cGFfcm91bmR1cF9zaXplKTtcbiBcdGlmICghcnhyLVx1MDAzZXJ4X3RwYSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4gXHRpZiAoIShicC1cdTAwM2VmbGFncyBcdTAwMjYgQk5YVF9GTEFHX0NISVBfUDVfUExVUykpXG4gXHRcdHJldHVybiAwO1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgYnAtXHUwMDNlbWF4X3RwYTsgaSsrKSB7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBicC1cdTAwM2VtYXhfdHBhX3JvdW5kdXBfc2l6ZTsgaSsrKSB7XG4gXHRcdGFnZyA9IGt6YWxsb2Nfb2JqcygqYWdnLCBNQVhfU0tCX0ZSQUdTKTtcbiBcdFx0aWYgKCFhZ2cpXG4gXHRcdFx0cmV0dXJuIC1FTk9NRU07XG5AQCAtMzgzMiw2ICszODM1LDkgQEAgc3RhdGljIGludCBibnh0X2FsbG9jX3RwYV9pbmZvKHN0cnVjdCBibnh0ICpicClcbiBcbiBcdGJwLVx1MDAzZW1heF90cGEgPSBNQVhfVFBBO1xuIFx0aWYgKGJwLVx1MDAzZWZsYWdzIFx1MDAyNiBCTlhUX0ZMQUdfQ0hJUF9QNV9QTFVTKSB7XG4rXHRcdC8qIFRQQSBpcyBub3Qgc3VwcG9ydGVkIGF0IGFsbCwgc28gdGhlcmUgaXMgbm90aGluZyB0b1xuK1x0XHQgKiBhbGxvY2F0ZS5cbitcdFx0ICovXG4gXHRcdGlmICghYnAtXHUwMDNlbWF4X3RwYV92MilcbiBcdFx0XHRyZXR1cm4gMDtcbiBcdFx0YnAtXHUwMDNlbWF4X3RwYSA9IG1pbl90KHUxNiwgYnAtXHUwMDNlbWF4X3RwYV92MiwgTUFYX1RQQV9QNSk7XG5AQCAtMzgzOSw2ICszODQ1LDcgQEAgc3RhdGljIGludCBibnh0X2FsbG9jX3RwYV9pbmZvKHN0cnVjdCBibnh0ICpicClcbiBcdFx0aWYgKGJwLVx1MDAzZW1heF90cGEgXHUwMDNjPSAzMiBcdTAwMjZcdTAwMjYgQk5YVF9DSElQX1A1KGJwKSBcdTAwMjZcdTAwMjYgIUJOWFRfTlBBUihicCkpXG4gXHRcdFx0YnAtXHUwMDNlbWF4X3RwYSA9IE1BWF9UUEFfUDU7XG4gXHR9XG4rXHRicC1cdTAwM2VtYXhfdHBhX3JvdW5kdXBfc2l6ZSA9IHJvdW5kdXBfcG93X29mX3R3byhicC1cdTAwM2VtYXhfdHBhKTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGJwLVx1MDAzZXJ4X25yX3JpbmdzOyBpKyspIHtcbiBcdFx0c3RydWN0IGJueHRfcnhfcmluZ19pbmZvICpyeHIgPSBcdTAwMjZicC1cdTAwM2VyeF9yaW5nW2ldO1xuQEAgLTQ1NTEsNyArNDU1OCw3IEBAIHN0YXRpYyBpbnQgYm54dF9hbGxvY19vbmVfdHBhX2luZm9fZGF0YShzdHJ1Y3QgYm54dCAqYnAsXG4gXHR1OCAqZGF0YTtcbiBcdGludCBpO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgYnAtXHUwMDNlbWF4X3RwYTsgaSsrKSB7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBicC1cdTAwM2VtYXhfdHBhX3JvdW5kdXBfc2l6ZTsgaSsrKSB7XG4gXHRcdGRhdGEgPSBfX2JueHRfYWxsb2NfcnhfZnJhZyhicCwgXHUwMDI2bWFwcGluZywgcnhyLFxuIFx0XHRcdFx0XHQgICAgR0ZQX0tFUk5FTCk7XG4gXHRcdGlmICghZGF0YSlcbkBAIC01MDA2LDcgKzUwMTMsOCBAQCB2b2lkIGJueHRfc2V0X3J4X3NrYl9tb2RlKHN0cnVjdCBibnh0ICpicCwgYm9vbCBwYWdlX21vZGUpXG4gXHRcdGJueHRfZ2V0X21heF9yaW5ncyhicCwgXHUwMDI2cngsIFx1MDAyNnR4LCB0cnVlKTtcbiBcdFx0aWYgKHJ4IFx1MDAzZSAxKSB7XG4gXHRcdFx0YnAtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+Qk5YVF9GTEFHX05PX0FHR19SSU5HUztcbi1cdFx0XHRicC1cdTAwM2VkZXYtXHUwMDNlaHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9MUk87XG4rXHRcdFx0aWYgKEJOWFRfU1VQUE9SVFNfVFBBKGJwKSlcbitcdFx0XHRcdGJwLVx1MDAzZWRldi1cdTAwM2Vod19mZWF0dXJlcyB8PSBORVRJRl9GX0xSTztcbiBcdFx0fVxuIFx0fVxuIFxuQEAgLTExMzQwLDggKzExMzQ4LDEzIEBAIHN0YXRpYyBpbnQgYm54dF9zaHV0ZG93bl9uaWMoc3RydWN0IGJueHQgKmJwLCBib29sIGlycV9yZV9pbml0KVxuIFxuIHN0YXRpYyBpbnQgYm54dF9pbml0X25pYyhzdHJ1Y3QgYm54dCAqYnAsIGJvb2wgaXJxX3JlX2luaXQpXG4ge1xuK1x0aW50IHJjO1xuK1xuIFx0Ym54dF9pbml0X2NwX3JpbmdzKGJwKTtcbi1cdGJueHRfaW5pdF9yeF9yaW5ncyhicCk7XG4rXHRyYyA9IGJueHRfaW5pdF9yeF9yaW5ncyhicCk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbiBcdGJueHRfaW5pdF90eF9yaW5ncyhicCk7XG4gXHRibnh0X2luaXRfcmluZ19ncnBzKGJwLCBpcnFfcmVfaW5pdCk7XG4gXHRibnh0X2luaXRfdm5pY3MoYnApO1xuQEAgLTE0NjAzLDcgKzE0NjE2LDE0IEBAIHN0YXRpYyB2b2lkIGJueHRfcnhfcmluZ19yZXNldChzdHJ1Y3QgYm54dCAqYnApXG4gXHRcdHJ4ci1cdTAwM2VyeF9zd19hZ2dfcHJvZCA9IDA7XG4gXHRcdHJ4ci1cdTAwM2VyeF9uZXh0X2NvbnMgPSAwO1xuIFx0XHRyeHItXHUwMDNlYm5hcGktXHUwMDNlaW5fcmVzZXQgPSBmYWxzZTtcbi1cdFx0Ym54dF9hbGxvY19vbmVfcnhfcmluZyhicCwgaSk7XG4rXHRcdHJjID0gYm54dF9hbGxvY19vbmVfcnhfcmluZyhicCwgaSk7XG4rXHRcdGlmIChyYykge1xuK1x0XHRcdG5ldGRldl93YXJuKGJwLVx1MDAzZWRldiwgXCJSWCByaW5nIHJlc2V0IGZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXJzLCByYyA9ICVkLCBmYWxsaW5nIGJhY2sgdG8gZ2xvYmFsIHJlc2V0XFxuXCIsXG4rXHRcdFx0XHQgICAgcmMpO1xuK1x0XHRcdGJueHRfcmVzZXRfdGFzayhicCwgdHJ1ZSk7XG4rXHRcdFx0Ym54dF9ydG5sX3VubG9ja19zcChicCk7XG4rXHRcdFx0cmV0dXJuO1xuK1x0XHR9XG4gXHRcdGNwciA9IFx1MDAyNnJ4ci1cdTAwM2VibmFwaS1cdTAwM2VjcF9yaW5nO1xuIFx0XHRjcHItXHUwMDNlc3dfc3RhdHMtXHUwMDNlcngucnhfcmVzZXRzKys7XG4gXHRcdGlmIChicC1cdTAwM2VmbGFncyBcdTAwMjYgQk5YVF9GTEFHX0FHR19SSU5HUylcbkBAIC0xNjMzMiw2ICsxNjM1Miw4IEBAIHN0YXRpYyBpbnQgYm54dF9xdWV1ZV9tZW1fYWxsb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdGNsb25lLVx1MDAzZW5lZWRfaGVhZF9wb29sID0gZmFsc2U7XG4gXHRjbG9uZS1cdTAwM2VyeF9wYWdlX3NpemUgPSBxY2ZnLVx1MDAzZXJ4X3BhZ2Vfc2l6ZTtcbiBcdGNsb25lLVx1MDAzZXJ4X2FnZ19ibWFwID0gTlVMTDtcbitcdGNsb25lLVx1MDAzZXJ4X3RwYSA9IE5VTEw7XG4rXHRjbG9uZS1cdTAwM2VyeF90cGFfaWR4X21hcCA9IE5VTEw7XG4gXG4gXHRyYyA9IGJueHRfYWxsb2NfcnhfcGFnZV9wb29sKGJwLCBjbG9uZSwgcnhyLVx1MDAzZXBhZ2VfcG9vbC1cdTAwM2VwLm5pZCk7XG4gXHRpZiAocmMpXG5AQCAtMTYzNzUsMTEgKzE2Mzk3LDE2IEBAIHN0YXRpYyBpbnQgYm54dF9xdWV1ZV9tZW1fYWxsb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdGJueHRfYWxsb2Nfb25lX3J4X3Jpbmdfc2tiKGJwLCBjbG9uZSwgaWR4KTtcbiBcdGlmIChicC1cdTAwM2VmbGFncyBcdTAwMjYgQk5YVF9GTEFHX0FHR19SSU5HUylcbiBcdFx0Ym54dF9hbGxvY19vbmVfcnhfcmluZ19uZXRtZW0oYnAsIGNsb25lLCBpZHgpO1xuLVx0aWYgKGJwLVx1MDAzZWZsYWdzIFx1MDAyNiBCTlhUX0ZMQUdfVFBBKVxuLVx0XHRibnh0X2FsbG9jX29uZV90cGFfaW5mb19kYXRhKGJwLCBjbG9uZSk7XG4rXHRpZiAoYnAtXHUwMDNlZmxhZ3MgXHUwMDI2IEJOWFRfRkxBR19UUEEpIHtcbitcdFx0cmMgPSBibnh0X2FsbG9jX29uZV90cGFfaW5mb19kYXRhKGJwLCBjbG9uZSk7XG4rXHRcdGlmIChyYylcbitcdFx0XHRnb3RvIGVycl9mcmVlX3J4X3Jpbmdfc2ticztcbitcdH1cbiBcbiBcdHJldHVybiAwO1xuIFxuK2Vycl9mcmVlX3J4X3Jpbmdfc2ticzpcbitcdGJueHRfZnJlZV9vbmVfcnhfcmluZ19za2JzKGJwLCBjbG9uZSk7XG4gZXJyX2ZyZWVfdHBhX2luZm86XG4gXHRibnh0X2ZyZWVfb25lX3RwYV9pbmZvKGJwLCBjbG9uZSk7XG4gZXJyX2ZyZWVfcnhfYWdnX3Jpbmc6XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuaFxuaW5kZXggYWI4OTRmOGFkZGVmNS4uZGU0NmI0MmQ3Yzk4YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuaFxuQEAgLTc4OSw3ICs3ODksNiBAQCBzdHJ1Y3QgbnFlX2NuIHtcbiBcbiAjZGVmaW5lIE1BWF9UUEFcdFx0NjRcbiAjZGVmaW5lIE1BWF9UUEFfUDVcdDI1NlxuLSNkZWZpbmUgTUFYX1RQQV9QNV9NQVNLXHQoTUFYX1RQQV9QNSAtIDEpXG4gI2RlZmluZSBNQVhfVFBBX1NFR1NfUDVcdDB4M2ZcbiBcbiAjaWYgKEJOWFRfUEFHRV9TSElGVCA9PSAxNilcbkBAIC0yMzgwLDYgKzIzNzksNyBAQCBzdHJ1Y3QgYm54dCB7XG4gXG4gXHR1MTZcdFx0XHRtYXhfdHBhX3YyO1xuIFx0dTE2XHRcdFx0bWF4X3RwYTtcbitcdHUxNlx0XHRcdG1heF90cGFfcm91bmR1cF9zaXplO1xuIFx0dTMyXHRcdFx0cnhfYnVmX3NpemU7XG4gXHR1MzJcdFx0XHRyeF9idWZfdXNlX3NpemU7XHQvKiB1c2VhYmxlIHNpemUgKi9cbiBcdHUxNlx0XHRcdHJ4X29mZnNldDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEzOjAyOjIxLjY3NzIzMjM3OVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwNjQ1MjY4MjIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2g6IEEgUXVpY2sgQXNzZXNzbWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgcGF0Y2ggaXMgd29ydGggZnV6emluZywgYW5kIHRoZSBjcml0ZXJpYSBhcmUgcHJldHR5IGNsZWFyLiBJJ3ZlIGdvdCBhIHNldCBvZiBydWxlczogaWYgdGhlIGNoYW5nZXMgYXJlIGp1c3QgZG9jdW1lbnRhdGlvbiwgbG9nZ2luZywgZGVjb3JhdGl2ZSB0d2Vha3MsIHVucmVhY2hhYmxlIGNvZGUsIG9yIHRlYXJkb3duIGNhbGxiYWNrcywgaXQncyBhIFwibm8tZ29cIi4gVGhlIGJpZyBvbmUgaGVyZSBpcyBcInZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIHRoYXQgbmVlZCBwaHlzaWNhbCBoYXJkd2FyZVwiLiBJICpyZWFsbHkqIG5lZWQgdG8gZm9jdXMgb24gdGhpcyBvbmUuXG5cbkxvb2tpbmcgYXQgdGhlIGZpbGUgbGlzdCwgaXQncyBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmNgIGFuZCBgYm54dC5oYC4gU28sIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgYGJueHRgIGRyaXZlciwgd2hpY2ggZnJvbSBtZW1vcnksIGlzIHRoZSBCcm9hZGNvbSBOZXRYdHJlbWUuIEkga25vdyB0aGF0IGZhbWlseSBvZiBOSUNzIHByZXR0eSB3ZWxsLCBpdCBjb3ZlcnMgdGhlIEJDTTU3M3h4LzU3NHh4LzU3NXh4IGNoaXBzLiBUaG9zZSBhcmUgdGhlIDEwLzI1LzQwLzUwLzEwMC8yMDAvNDAwR2IgRXRoZXJuZXQgTklDcy5cblxuTm93LCB0aGUgcXVlc3Rpb24gaXM6IGlzIGBibnh0YCBhIHZlbmRvci1zcGVjaWZpYyBkcml2ZXIgdGhhdCBuZWVkcyBhIHBoeXNpY2FsIFBDSWUgY2FyZD8gVGhhdCdzIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBoZXJlLiBMZXQncyByZW1lbWJlciB3aGF0IFFFTVUgKmRvZXMqIGVtdWxhdGUsIHRob3NlIGFyZSB0aGUgY29tbW9uIG9uZXMsIGxpa2UgZTEwMDAsIHZpcnRpbywgYW5kIHJ0bDgxMzkuXG5cbk9rYXksIGlzIGJueHQgZW11bGF0ZWQgYnkgc3RhbmRhcmQgUUVNVT8gTm8hIERlZmluaXRlbHkgbm90LiBCcm9hZGNvbSBOZXRYdHJlbWUgQkNNNTczMHgvQkNNNTc0MHggKE5ldFh0cmVtZS1FIC8gTmV0WHRyZW1lLUMpIGFyZSBlbnRlcnByaXNlL1NtYXJ0TklDL2hpZ2gtc3BlZWQgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gUUVNVSBvciBHQ0UuXG5cbkFscmlnaHQsIGJhY2sgdG8gdGhlIHJ1bGVzLiBcIlZlbmRvci1zcGVjaWZpYyBQQ0llLi4uXCIuIEFuZCAqYm54dCogaXMgYSB2ZW5kb3Itc3BlY2lmaWMgQnJvYWRjb20gRXRoZXJuZXQgZHJpdmVyIGZvciB0aGVpciBOZXRYdHJlbWUgbGluZS5cblxuU28sIHRoaXMgcGF0Y2ggbW9kaWZpZXMgY29kZSB0aGF0IGZhbGxzIGRpcmVjdGx5IHVuZGVyIHRoYXQgY2F0ZWdvcnk6IHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSByZXF1aXJpbmcgcGh5c2ljYWwgUENJZS4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgY29ycmVjdCwganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIExldCdzIGxvb2sgYXQgdGhlIEtjb25maWcgZmlsZSBmb3IgYGJueHRgIHRvIHZlcmlmeS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTAyMywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEzOjAyOjMyLjMyMjUwMjk2MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTc4ODA5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQk5YVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZz0xOTU9Y29uZmlnIFNZU1RFTVBPUlRcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjA2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc6MjA3OmNvbmZpZyBCTlhUXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yMDgtXFx0dHJpc3RhdGUgXFxcIkJyb2FkY29tIE5ldFh0cmVtZS1DL0Ugc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjIxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc6MjIyOmNvbmZpZyBCTlhUX1NSSU9WXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yMjMtXFx0Ym9vbCBcXFwiQnJvYWRjb20gTmV0WHRyZW1lLUMvRSBTUi1JT1Ygc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjMwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc6MjMxOmNvbmZpZyBCTlhUX0ZMT1dFUl9PRkZMT0FEXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yMzItXFx0Ym9vbCBcXFwiVEMgRmxvd2VyIG9mZmxvYWQgc3VwcG9ydCBmb3IgTmV0WHRyZW1lLUMvRVxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjM5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc6MjQwOmNvbmZpZyBCTlhUX0RDQlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjQxLVxcdGJvb2wgXFxcIkRhdGEgQ2VudGVyIEJyaWRnaW5nIChEQ0IpIFN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTI0OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnOjI1MDpjb25maWcgQk5YVF9IV01PTlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjUxLVxcdGJvb2wgXFxcIkJyb2FkY29tIE5ldFh0cmVtZS1DL0UgSFdNT04gc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTM6MDI6MzIuMzc4Mjk3Mzg3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTI4MTIxODAzMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQk5YVCBEcml2ZXIgRnV6emluZyBBc3Nlc3NtZW50KipcblxuT2theSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhpcy4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoZSBzcGVjaWZpYyBkcml2ZXIgaW4gcXVlc3Rpb24g4oCTIHllcCwgaXQncyBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZ2AsIGFuZCB0aGUgZHJpdmVyIHdlJ3JlIGRlYWxpbmcgd2l0aCBpcyBgQ09ORklHX0JOWFRgLCB0aGUgQnJvYWRjb20gTmV0WHRyZW1lLUMvRSBkcml2ZXIuIFRoYXQncyBhIHZlbmRvci1zcGVjaWZpYyBkcml2ZXIsIGZvY3VzaW5nIG9uIFBDSWUgTklDcyBmcm9tIEJyb2FkY29tLCBuYW1lbHkgdGhlIEJDTTU3M3h4LCBCQ001NzR4eCwgQkNNNTc1eHgsIGFuZCBzaW1pbGFyIGhhcmR3YXJlLlxuXG5UaGUgY3J1Y2lhbCBwb2ludCBoZXJlIGlzIHRoYXQgdGhpcyBkcml2ZXIgKnJlcXVpcmVzKiBwaHlzaWNhbCBCcm9hZGNvbSBQQ0llIGhhcmR3YXJlLiBUaGlzIGltbWVkaWF0ZWx5IGZsYWdzIGEgc2lnbmlmaWNhbnQgaHVyZGxlLiBTdGFuZGFyZCBRRU1VIHNldHVwcywgYW5kIGNlcnRhaW5seSB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyBsaWtlIHRob3NlIG9uIEdDRSwgKmRvIG5vdCogZW11bGF0ZSB0aGlzIHNwZWNpZmljIGhhcmR3YXJlLiBXZSdkIGJlIHRyeWluZyB0byB0ZXN0IHNvbWV0aGluZyB0aGF0IGZ1bmRhbWVudGFsbHkgaXNuJ3QgcHJlc2VudCBpbiB0aGUgZnV6emluZyBlbnZpcm9ubWVudCwgd2hpY2ggaXMgYSBub24tc3RhcnRlci5cblxuU28sIGxldCBtZSBydW4gdGhyb3VnaCB0aGUgcHJvbXB0IHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nOiBgV29ydGhGdXp6aW5nOiBmYWxzZWAsIGBGb2N1c1N5bWJvbHM6IFtdYCwgYEVuYWJsZUNvbmZpZ3M6IFtdYCwgYW5kIHRoZSByZWFzb25pbmcgaXMgY29uY2lzZSBhbmQgYWNjdXJhdGU6IHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSByZXF1aXJpbmcgcGh5c2ljYWwgUENJZSBCcm9hZGNvbSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gdGhlIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzLlxuXG5BbHJpZ2h0LCB3aXRoIHRoYXQgY29uZmlybWVkLCBJJ20gY29uZmlkZW50IGluIHRoZSBhc3Nlc3NtZW50LiBUaW1lIHRvIHJ1biBhIHNhbml0eSBjaGVjayBvbiB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzIGFuZCBmaW5hbGl6ZSB0aGUgY2FsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjYxOSwiT3V0cHV0VG9rZW5zIjo3OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMzowMjo0NS4xOTA0ODAyNjhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCcm9hZGNvbSBOZXRYdHJlbWUtQy9FIChibnh0KSBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgTklDIGRyaXZlciByZXF1aXJpbmcgcGh5c2ljYWwgQnJvYWRjb20gaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQnJvYWRjb20gTmV0WHRyZW1lLUMvRSAoYm54dCkgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIE5JQyBkcml2ZXIgcmVxdWlyaW5nIHBoeXNpY2FsIEJyb2FkY29tIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTM6MDI6NDUuMTkwNTEwOTc5WiIsIlNlcSI6NywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowjkvk2[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-02 13:00:08 +0000 UTC FinishedAt: 2026-09-02 13:02:47 +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+CgkJCTx0ZD4yMDI2LzA5LzAyIDEzOjAyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJyb2FkY29tIE5ldFh0cmVtZS1DL0UgKGJueHQpIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBOSUMgZHJpdmVyIHJlcXVpcmluZyBwaHlzaWNhbCBCcm9hZGNvbSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTM6MDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxN2ZhNTZkZDVjZmUyMzVlNDNkMzVjMDY1ZWVhZmVmMWU5YjA5NTc1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAxMzowMjoyMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jXG5pbmRleCBkNTliY2NhNzNhMmI4Li5iMmNlNWI0ZTVlNmE1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jXG5AQCAtMTUxNCwxNCAmIzQzOzE1MTQsMTYgQEAgc3RhdGljIGludCBibnh0X2Rpc2NhcmRfcngoc3RydWN0IGJueHQgKmJwLCBzdHJ1Y3QgYm54dF9jcF9yaW5nX2luZm8gKmNwcixcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgdTE2IGJueHRfYWxsb2NfYWdnX2lkeChzdHJ1Y3QgYm54dF9yeF9yaW5nX2luZm8gKnJ4ciwgdTE2IGFnZ19pZClcbiYjNDM7c3RhdGljIHUxNiBibnh0X2FsbG9jX2FnZ19pZHgoc3RydWN0IGJueHQgKmJwLCBzdHJ1Y3QgYm54dF9yeF9yaW5nX2luZm8gKnJ4cixcbiYjNDM7XHRcdFx0ICAgICAgdTE2IGFnZ19pZClcbiB7XG4gXHRzdHJ1Y3QgYm54dF90cGFfaWR4X21hcCAqbWFwID0gcnhyLVx1MDAzZXJ4X3RwYV9pZHhfbWFwO1xuLVx0dTE2IGlkeCA9IGFnZ19pZCBcdTAwMjYgTUFYX1RQQV9QNV9NQVNLO1xuJiM0MztcdHUxNiBpZHggPSBhZ2dfaWQgXHUwMDI2IChicC1cdTAwM2VtYXhfdHBhX3JvdW5kdXBfc2l6ZSAtIDEpO1xuIFxuIFx0aWYgKHRlc3RfYml0KGlkeCwgbWFwLVx1MDAzZWFnZ19pZHhfYm1hcCkpIHtcbi1cdFx0aWR4ID0gZmluZF9maXJzdF96ZXJvX2JpdChtYXAtXHUwMDNlYWdnX2lkeF9ibWFwLCBNQVhfVFBBX1A1KTtcbi1cdFx0aWYgKGlkeCBcdTAwM2U9IE1BWF9UUEFfUDUpXG4mIzQzO1x0XHRpZHggPSBmaW5kX2ZpcnN0X3plcm9fYml0KG1hcC1cdTAwM2VhZ2dfaWR4X2JtYXAsXG4mIzQzO1x0XHRcdFx0XHQgIGJwLVx1MDAzZW1heF90cGFfcm91bmR1cF9zaXplKTtcbiYjNDM7XHRcdGlmIChpZHggXHUwMDNlPSBicC1cdTAwM2VtYXhfdHBhX3JvdW5kdXBfc2l6ZSlcbiBcdFx0XHRyZXR1cm4gSU5WQUxJRF9IV19SSU5HX0lEO1xuIFx0fVxuIFx0X19zZXRfYml0KGlkeCwgbWFwLVx1MDAzZWFnZ19pZHhfYm1hcCk7XG5AQCAtMTU4Niw3ICYjNDM7MTU4OCw3IEBAIHN0YXRpYyB2b2lkIGJueHRfdHBhX3N0YXJ0KHN0cnVjdCBibnh0ICpicCwgc3RydWN0IGJueHRfcnhfcmluZ19pbmZvICpyeHIsXG4gXG4gXHRpZiAoYnAtXHUwMDNlZmxhZ3MgXHUwMDI2IEJOWFRfRkxBR19DSElQX1A1X1BMVVMpIHtcbiBcdFx0YWdnX2lkID0gVFBBX1NUQVJUX0FHR19JRF9QNSh0cGFfc3RhcnQpO1xuLVx0XHRhZ2dfaWQgPSBibnh0X2FsbG9jX2FnZ19pZHgocnhyLCBhZ2dfaWQpO1xuJiM0MztcdFx0YWdnX2lkID0gYm54dF9hbGxvY19hZ2dfaWR4KGJwLCByeHIsIGFnZ19pZCk7XG4gXHRcdGlmICh1bmxpa2VseShhZ2dfaWQgPT0gSU5WQUxJRF9IV19SSU5HX0lEKSkge1xuIFx0XHRcdG5ldGRldl93YXJuKGJwLVx1MDAzZWRldiwgXCYjMzQ7VW5hYmxlIHRvIGFsbG9jYXRlIGFnZyBJRCBmb3IgcmluZyAlZCwgYWdnIDB4JXhcXG5cJiMzNDssXG4gXHRcdFx0XHQgICAgcnhyLVx1MDAzZWJuYXBpLVx1MDAzZWluZGV4LFxuQEAgLTM1ODQsNyAmIzQzOzM1ODYsNyBAQCBzdGF0aWMgdm9pZCBibnh0X2ZyZWVfb25lX3RwYV9pbmZvX2RhdGEoc3RydWN0IGJueHQgKmJwLFxuIHtcbiBcdGludCBpO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgYnAtXHUwMDNlbWF4X3RwYTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBicC1cdTAwM2VtYXhfdHBhX3JvdW5kdXBfc2l6ZTsgaSYjNDM7JiM0MzspIHtcbiBcdFx0c3RydWN0IGJueHRfdHBhX2luZm8gKnRwYV9pbmZvID0gXHUwMDI2cnhyLVx1MDAzZXJ4X3RwYVtpXTtcbiBcdFx0dTggKmRhdGEgPSB0cGFfaW5mby1cdTAwM2VkYXRhO1xuIFxuQEAgLTM3ODEsNyAmIzQzOzM3ODMsNyBAQCBzdGF0aWMgdm9pZCBibnh0X2ZyZWVfb25lX3RwYV9pbmZvKHN0cnVjdCBibnh0ICpicCxcbiBcdGtmcmVlKHJ4ci1cdTAwM2VyeF90cGFfaWR4X21hcCk7XG4gXHRyeHItXHUwMDNlcnhfdHBhX2lkeF9tYXAgPSBOVUxMO1xuIFx0aWYgKHJ4ci1cdTAwM2VyeF90cGEpIHtcbi1cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgYnAtXHUwMDNlbWF4X3RwYTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGJwLVx1MDAzZW1heF90cGFfcm91bmR1cF9zaXplOyBpJiM0MzsmIzQzOykge1xuIFx0XHRcdGtmcmVlKHJ4ci1cdTAwM2VyeF90cGFbaV0uYWdnX2Fycik7XG4gXHRcdFx0cnhyLVx1MDAzZXJ4X3RwYVtpXS5hZ2dfYXJyID0gTlVMTDtcbiBcdFx0fVxuQEAgLTM4MDcsMTMgJiM0MzszODA5LDE0IEBAIHN0YXRpYyBpbnQgYm54dF9hbGxvY19vbmVfdHBhX2luZm8oc3RydWN0IGJueHQgKmJwLFxuIFx0c3RydWN0IHJ4X2FnZ19jbXAgKmFnZztcbiBcdGludCBpO1xuIFxuLVx0cnhyLVx1MDAzZXJ4X3RwYSA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgYm54dF90cGFfaW5mbywgYnAtXHUwMDNlbWF4X3RwYSk7XG4mIzQzO1x0cnhyLVx1MDAzZXJ4X3RwYSA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgYm54dF90cGFfaW5mbyxcbiYjNDM7XHRcdFx0XHQgICBicC1cdTAwM2VtYXhfdHBhX3JvdW5kdXBfc2l6ZSk7XG4gXHRpZiAoIXJ4ci1cdTAwM2VyeF90cGEpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIFx0aWYgKCEoYnAtXHUwMDNlZmxhZ3MgXHUwMDI2IEJOWFRfRkxBR19DSElQX1A1X1BMVVMpKVxuIFx0XHRyZXR1cm4gMDtcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGJwLVx1MDAzZW1heF90cGE7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgYnAtXHUwMDNlbWF4X3RwYV9yb3VuZHVwX3NpemU7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdGFnZyA9IGt6YWxsb2Nfb2JqcygqYWdnLCBNQVhfU0tCX0ZSQUdTKTtcbiBcdFx0aWYgKCFhZ2cpXG4gXHRcdFx0cmV0dXJuIC1FTk9NRU07XG5AQCAtMzgzMiw2ICYjNDM7MzgzNSw5IEBAIHN0YXRpYyBpbnQgYm54dF9hbGxvY190cGFfaW5mbyhzdHJ1Y3QgYm54dCAqYnApXG4gXG4gXHRicC1cdTAwM2VtYXhfdHBhID0gTUFYX1RQQTtcbiBcdGlmIChicC1cdTAwM2VmbGFncyBcdTAwMjYgQk5YVF9GTEFHX0NISVBfUDVfUExVUykge1xuJiM0MztcdFx0LyogVFBBIGlzIG5vdCBzdXBwb3J0ZWQgYXQgYWxsLCBzbyB0aGVyZSBpcyBub3RoaW5nIHRvXG4mIzQzO1x0XHQgKiBhbGxvY2F0ZS5cbiYjNDM7XHRcdCAqL1xuIFx0XHRpZiAoIWJwLVx1MDAzZW1heF90cGFfdjIpXG4gXHRcdFx0cmV0dXJuIDA7XG4gXHRcdGJwLVx1MDAzZW1heF90cGEgPSBtaW5fdCh1MTYsIGJwLVx1MDAzZW1heF90cGFfdjIsIE1BWF9UUEFfUDUpO1xuQEAgLTM4MzksNiAmIzQzOzM4NDUsNyBAQCBzdGF0aWMgaW50IGJueHRfYWxsb2NfdHBhX2luZm8oc3RydWN0IGJueHQgKmJwKVxuIFx0XHRpZiAoYnAtXHUwMDNlbWF4X3RwYSBcdTAwM2M9IDMyIFx1MDAyNlx1MDAyNiBCTlhUX0NISVBfUDUoYnApIFx1MDAyNlx1MDAyNiAhQk5YVF9OUEFSKGJwKSlcbiBcdFx0XHRicC1cdTAwM2VtYXhfdHBhID0gTUFYX1RQQV9QNTtcbiBcdH1cbiYjNDM7XHRicC1cdTAwM2VtYXhfdHBhX3JvdW5kdXBfc2l6ZSA9IHJvdW5kdXBfcG93X29mX3R3byhicC1cdTAwM2VtYXhfdHBhKTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGJwLVx1MDAzZXJ4X25yX3JpbmdzOyBpJiM0MzsmIzQzOykge1xuIFx0XHRzdHJ1Y3QgYm54dF9yeF9yaW5nX2luZm8gKnJ4ciA9IFx1MDAyNmJwLVx1MDAzZXJ4X3JpbmdbaV07XG5AQCAtNDU1MSw3ICYjNDM7NDU1OCw3IEBAIHN0YXRpYyBpbnQgYm54dF9hbGxvY19vbmVfdHBhX2luZm9fZGF0YShzdHJ1Y3QgYm54dCAqYnAsXG4gXHR1OCAqZGF0YTtcbiBcdGludCBpO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgYnAtXHUwMDNlbWF4X3RwYTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBicC1cdTAwM2VtYXhfdHBhX3JvdW5kdXBfc2l6ZTsgaSYjNDM7JiM0MzspIHtcbiBcdFx0ZGF0YSA9IF9fYm54dF9hbGxvY19yeF9mcmFnKGJwLCBcdTAwMjZtYXBwaW5nLCByeHIsXG4gXHRcdFx0XHRcdCAgICBHRlBfS0VSTkVMKTtcbiBcdFx0aWYgKCFkYXRhKVxuQEAgLTUwMDYsNyAmIzQzOzUwMTMsOCBAQCB2b2lkIGJueHRfc2V0X3J4X3NrYl9tb2RlKHN0cnVjdCBibnh0ICpicCwgYm9vbCBwYWdlX21vZGUpXG4gXHRcdGJueHRfZ2V0X21heF9yaW5ncyhicCwgXHUwMDI2cngsIFx1MDAyNnR4LCB0cnVlKTtcbiBcdFx0aWYgKHJ4IFx1MDAzZSAxKSB7XG4gXHRcdFx0YnAtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+Qk5YVF9GTEFHX05PX0FHR19SSU5HUztcbi1cdFx0XHRicC1cdTAwM2VkZXYtXHUwMDNlaHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9MUk87XG4mIzQzO1x0XHRcdGlmIChCTlhUX1NVUFBPUlRTX1RQQShicCkpXG4mIzQzO1x0XHRcdFx0YnAtXHUwMDNlZGV2LVx1MDAzZWh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfTFJPO1xuIFx0XHR9XG4gXHR9XG4gXG5AQCAtMTEzNDAsOCAmIzQzOzExMzQ4LDEzIEBAIHN0YXRpYyBpbnQgYm54dF9zaHV0ZG93bl9uaWMoc3RydWN0IGJueHQgKmJwLCBib29sIGlycV9yZV9pbml0KVxuIFxuIHN0YXRpYyBpbnQgYm54dF9pbml0X25pYyhzdHJ1Y3QgYm54dCAqYnAsIGJvb2wgaXJxX3JlX2luaXQpXG4ge1xuJiM0MztcdGludCByYztcbiYjNDM7XG4gXHRibnh0X2luaXRfY3BfcmluZ3MoYnApO1xuLVx0Ym54dF9pbml0X3J4X3JpbmdzKGJwKTtcbiYjNDM7XHRyYyA9IGJueHRfaW5pdF9yeF9yaW5ncyhicCk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiBcdGJueHRfaW5pdF90eF9yaW5ncyhicCk7XG4gXHRibnh0X2luaXRfcmluZ19ncnBzKGJwLCBpcnFfcmVfaW5pdCk7XG4gXHRibnh0X2luaXRfdm5pY3MoYnApO1xuQEAgLTE0NjAzLDcgJiM0MzsxNDYxNiwxNCBAQCBzdGF0aWMgdm9pZCBibnh0X3J4X3JpbmdfcmVzZXQoc3RydWN0IGJueHQgKmJwKVxuIFx0XHRyeHItXHUwMDNlcnhfc3dfYWdnX3Byb2QgPSAwO1xuIFx0XHRyeHItXHUwMDNlcnhfbmV4dF9jb25zID0gMDtcbiBcdFx0cnhyLVx1MDAzZWJuYXBpLVx1MDAzZWluX3Jlc2V0ID0gZmFsc2U7XG4tXHRcdGJueHRfYWxsb2Nfb25lX3J4X3JpbmcoYnAsIGkpO1xuJiM0MztcdFx0cmMgPSBibnh0X2FsbG9jX29uZV9yeF9yaW5nKGJwLCBpKTtcbiYjNDM7XHRcdGlmIChyYykge1xuJiM0MztcdFx0XHRuZXRkZXZfd2FybihicC1cdTAwM2VkZXYsIFwmIzM0O1JYIHJpbmcgcmVzZXQgZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlcnMsIHJjID0gJWQsIGZhbGxpbmcgYmFjayB0byBnbG9iYWwgcmVzZXRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgIHJjKTtcbiYjNDM7XHRcdFx0Ym54dF9yZXNldF90YXNrKGJwLCB0cnVlKTtcbiYjNDM7XHRcdFx0Ym54dF9ydG5sX3VubG9ja19zcChicCk7XG4mIzQzO1x0XHRcdHJldHVybjtcbiYjNDM7XHRcdH1cbiBcdFx0Y3ByID0gXHUwMDI2cnhyLVx1MDAzZWJuYXBpLVx1MDAzZWNwX3Jpbmc7XG4gXHRcdGNwci1cdTAwM2Vzd19zdGF0cy1cdTAwM2VyeC5yeF9yZXNldHMmIzQzOyYjNDM7O1xuIFx0XHRpZiAoYnAtXHUwMDNlZmxhZ3MgXHUwMDI2IEJOWFRfRkxBR19BR0dfUklOR1MpXG5AQCAtMTYzMzIsNiAmIzQzOzE2MzUyLDggQEAgc3RhdGljIGludCBibnh0X3F1ZXVlX21lbV9hbGxvYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0Y2xvbmUtXHUwMDNlbmVlZF9oZWFkX3Bvb2wgPSBmYWxzZTtcbiBcdGNsb25lLVx1MDAzZXJ4X3BhZ2Vfc2l6ZSA9IHFjZmctXHUwMDNlcnhfcGFnZV9zaXplO1xuIFx0Y2xvbmUtXHUwMDNlcnhfYWdnX2JtYXAgPSBOVUxMO1xuJiM0MztcdGNsb25lLVx1MDAzZXJ4X3RwYSA9IE5VTEw7XG4mIzQzO1x0Y2xvbmUtXHUwMDNlcnhfdHBhX2lkeF9tYXAgPSBOVUxMO1xuIFxuIFx0cmMgPSBibnh0X2FsbG9jX3J4X3BhZ2VfcG9vbChicCwgY2xvbmUsIHJ4ci1cdTAwM2VwYWdlX3Bvb2wtXHUwMDNlcC5uaWQpO1xuIFx0aWYgKHJjKVxuQEAgLTE2Mzc1LDExICYjNDM7MTYzOTcsMTYgQEAgc3RhdGljIGludCBibnh0X3F1ZXVlX21lbV9hbGxvYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0Ym54dF9hbGxvY19vbmVfcnhfcmluZ19za2IoYnAsIGNsb25lLCBpZHgpO1xuIFx0aWYgKGJwLVx1MDAzZWZsYWdzIFx1MDAyNiBCTlhUX0ZMQUdfQUdHX1JJTkdTKVxuIFx0XHRibnh0X2FsbG9jX29uZV9yeF9yaW5nX25ldG1lbShicCwgY2xvbmUsIGlkeCk7XG4tXHRpZiAoYnAtXHUwMDNlZmxhZ3MgXHUwMDI2IEJOWFRfRkxBR19UUEEpXG4tXHRcdGJueHRfYWxsb2Nfb25lX3RwYV9pbmZvX2RhdGEoYnAsIGNsb25lKTtcbiYjNDM7XHRpZiAoYnAtXHUwMDNlZmxhZ3MgXHUwMDI2IEJOWFRfRkxBR19UUEEpIHtcbiYjNDM7XHRcdHJjID0gYm54dF9hbGxvY19vbmVfdHBhX2luZm9fZGF0YShicCwgY2xvbmUpO1xuJiM0MztcdFx0aWYgKHJjKVxuJiM0MztcdFx0XHRnb3RvIGVycl9mcmVlX3J4X3Jpbmdfc2ticztcbiYjNDM7XHR9XG4gXG4gXHRyZXR1cm4gMDtcbiBcbiYjNDM7ZXJyX2ZyZWVfcnhfcmluZ19za2JzOlxuJiM0MztcdGJueHRfZnJlZV9vbmVfcnhfcmluZ19za2JzKGJwLCBjbG9uZSk7XG4gZXJyX2ZyZWVfdHBhX2luZm86XG4gXHRibnh0X2ZyZWVfb25lX3RwYV9pbmZvKGJwLCBjbG9uZSk7XG4gZXJyX2ZyZWVfcnhfYWdnX3Jpbmc6XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuaFxuaW5kZXggYWI4OTRmOGFkZGVmNS4uZGU0NmI0MmQ3Yzk4YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuaFxuQEAgLTc4OSw3ICYjNDM7Nzg5LDYgQEAgc3RydWN0IG5xZV9jbiB7XG4gXG4gI2RlZmluZSBNQVhfVFBBXHRcdDY0XG4gI2RlZmluZSBNQVhfVFBBX1A1XHQyNTZcbi0jZGVmaW5lIE1BWF9UUEFfUDVfTUFTS1x0KE1BWF9UUEFfUDUgLSAxKVxuICNkZWZpbmUgTUFYX1RQQV9TRUdTX1A1XHQweDNmXG4gXG4gI2lmIChCTlhUX1BBR0VfU0hJRlQgPT0gMTYpXG5AQCAtMjM4MCw2ICYjNDM7MjM3OSw3IEBAIHN0cnVjdCBibnh0IHtcbiBcbiBcdHUxNlx0XHRcdG1heF90cGFfdjI7XG4gXHR1MTZcdFx0XHRtYXhfdHBhO1xuJiM0MztcdHUxNlx0XHRcdG1heF90cGFfcm91bmR1cF9zaXplO1xuIFx0dTMyXHRcdFx0cnhfYnVmX3NpemU7XG4gXHR1MzJcdFx0XHRyeF9idWZfdXNlX3NpemU7XHQvKiB1c2VhYmxlIHNpemUgKi9cbiBcdHUxNlx0XHRcdHJ4X29mZnNldDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMzowMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQnJvYWRjb20gTmV0WHRyZW1lLUMvRSAoYm54dCkgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIE5JQyBkcml2ZXIgcmVxdWlyaW5nIHBoeXNpY2FsIEJyb2FkY29tIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDE3ZmE1NmRkNWNmZTIzNWU0M2QzNWMwNjVlZWFmZWYxZTliMDk1NzUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCAyIDEzOjAyOjIwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYwppbmRleCBkNTliY2NhNzNhMmI4Li5iMmNlNWI0ZTVlNmE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYwpAQCAtMTUxNCwxNCAmIzQzOzE1MTQsMTYgQEAgc3RhdGljIGludCBibnh0X2Rpc2NhcmRfcngoc3RydWN0IGJueHQgKmJwLCBzdHJ1Y3QgYm54dF9jcF9yaW5nX2luZm8gKmNwciwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHUxNiBibnh0X2FsbG9jX2FnZ19pZHgoc3RydWN0IGJueHRfcnhfcmluZ19pbmZvICpyeHIsIHUxNiBhZ2dfaWQpCiYjNDM7c3RhdGljIHUxNiBibnh0X2FsbG9jX2FnZ19pZHgoc3RydWN0IGJueHQgKmJwLCBzdHJ1Y3QgYm54dF9yeF9yaW5nX2luZm8gKnJ4ciwKJiM0MzsJCQkgICAgICB1MTYgYWdnX2lkKQogewogCXN0cnVjdCBibnh0X3RwYV9pZHhfbWFwICptYXAgPSByeHItJmd0O3J4X3RwYV9pZHhfbWFwOwotCXUxNiBpZHggPSBhZ2dfaWQgJmFtcDsgTUFYX1RQQV9QNV9NQVNLOwomIzQzOwl1MTYgaWR4ID0gYWdnX2lkICZhbXA7IChicC0mZ3Q7bWF4X3RwYV9yb3VuZHVwX3NpemUgLSAxKTsKIAogCWlmICh0ZXN0X2JpdChpZHgsIG1hcC0mZ3Q7YWdnX2lkeF9ibWFwKSkgewotCQlpZHggPSBmaW5kX2ZpcnN0X3plcm9fYml0KG1hcC0mZ3Q7YWdnX2lkeF9ibWFwLCBNQVhfVFBBX1A1KTsKLQkJaWYgKGlkeCAmZ3Q7PSBNQVhfVFBBX1A1KQomIzQzOwkJaWR4ID0gZmluZF9maXJzdF96ZXJvX2JpdChtYXAtJmd0O2FnZ19pZHhfYm1hcCwKJiM0MzsJCQkJCSAgYnAtJmd0O21heF90cGFfcm91bmR1cF9zaXplKTsKJiM0MzsJCWlmIChpZHggJmd0Oz0gYnAtJmd0O21heF90cGFfcm91bmR1cF9zaXplKQogCQkJcmV0dXJuIElOVkFMSURfSFdfUklOR19JRDsKIAl9CiAJX19zZXRfYml0KGlkeCwgbWFwLSZndDthZ2dfaWR4X2JtYXApOwpAQCAtMTU4Niw3ICYjNDM7MTU4OCw3IEBAIHN0YXRpYyB2b2lkIGJueHRfdHBhX3N0YXJ0KHN0cnVjdCBibnh0ICpicCwgc3RydWN0IGJueHRfcnhfcmluZ19pbmZvICpyeHIsCiAKIAlpZiAoYnAtJmd0O2ZsYWdzICZhbXA7IEJOWFRfRkxBR19DSElQX1A1X1BMVVMpIHsKIAkJYWdnX2lkID0gVFBBX1NUQVJUX0FHR19JRF9QNSh0cGFfc3RhcnQpOwotCQlhZ2dfaWQgPSBibnh0X2FsbG9jX2FnZ19pZHgocnhyLCBhZ2dfaWQpOwomIzQzOwkJYWdnX2lkID0gYm54dF9hbGxvY19hZ2dfaWR4KGJwLCByeHIsIGFnZ19pZCk7CiAJCWlmICh1bmxpa2VseShhZ2dfaWQgPT0gSU5WQUxJRF9IV19SSU5HX0lEKSkgewogCQkJbmV0ZGV2X3dhcm4oYnAtJmd0O2RldiwgJiMzNDtVbmFibGUgdG8gYWxsb2NhdGUgYWdnIElEIGZvciByaW5nICVkLCBhZ2cgMHgleFxuJiMzNDssCiAJCQkJICAgIHJ4ci0mZ3Q7Ym5hcGktJmd0O2luZGV4LApAQCAtMzU4NCw3ICYjNDM7MzU4Niw3IEBAIHN0YXRpYyB2b2lkIGJueHRfZnJlZV9vbmVfdHBhX2luZm9fZGF0YShzdHJ1Y3QgYm54dCAqYnAsCiB7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgYnAtJmd0O21heF90cGE7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBicC0mZ3Q7bWF4X3RwYV9yb3VuZHVwX3NpemU7IGkmIzQzOyYjNDM7KSB7CiAJCXN0cnVjdCBibnh0X3RwYV9pbmZvICp0cGFfaW5mbyA9ICZhbXA7cnhyLSZndDtyeF90cGFbaV07CiAJCXU4ICpkYXRhID0gdHBhX2luZm8tJmd0O2RhdGE7CiAKQEAgLTM3ODEsNyAmIzQzOzM3ODMsNyBAQCBzdGF0aWMgdm9pZCBibnh0X2ZyZWVfb25lX3RwYV9pbmZvKHN0cnVjdCBibnh0ICpicCwKIAlrZnJlZShyeHItJmd0O3J4X3RwYV9pZHhfbWFwKTsKIAlyeHItJmd0O3J4X3RwYV9pZHhfbWFwID0gTlVMTDsKIAlpZiAocnhyLSZndDtyeF90cGEpIHsKLQkJZm9yIChpID0gMDsgaSAmbHQ7IGJwLSZndDttYXhfdHBhOyBpJiM0MzsmIzQzOykgewomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IGJwLSZndDttYXhfdHBhX3JvdW5kdXBfc2l6ZTsgaSYjNDM7JiM0MzspIHsKIAkJCWtmcmVlKHJ4ci0mZ3Q7cnhfdHBhW2ldLmFnZ19hcnIpOwogCQkJcnhyLSZndDtyeF90cGFbaV0uYWdnX2FyciA9IE5VTEw7CiAJCX0KQEAgLTM4MDcsMTMgJiM0MzszODA5LDE0IEBAIHN0YXRpYyBpbnQgYm54dF9hbGxvY19vbmVfdHBhX2luZm8oc3RydWN0IGJueHQgKmJwLAogCXN0cnVjdCByeF9hZ2dfY21wICphZ2c7CiAJaW50IGk7CiAKLQlyeHItJmd0O3J4X3RwYSA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgYm54dF90cGFfaW5mbywgYnAtJmd0O21heF90cGEpOwomIzQzOwlyeHItJmd0O3J4X3RwYSA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgYm54dF90cGFfaW5mbywKJiM0MzsJCQkJICAgYnAtJmd0O21heF90cGFfcm91bmR1cF9zaXplKTsKIAlpZiAoIXJ4ci0mZ3Q7cnhfdHBhKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCWlmICghKGJwLSZndDtmbGFncyAmYW1wOyBCTlhUX0ZMQUdfQ0hJUF9QNV9QTFVTKSkKIAkJcmV0dXJuIDA7Ci0JZm9yIChpID0gMDsgaSAmbHQ7IGJwLSZndDttYXhfdHBhOyBpJiM0MzsmIzQzOykgewomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgYnAtJmd0O21heF90cGFfcm91bmR1cF9zaXplOyBpJiM0MzsmIzQzOykgewogCQlhZ2cgPSBremFsbG9jX29ianMoKmFnZywgTUFYX1NLQl9GUkFHUyk7CiAJCWlmICghYWdnKQogCQkJcmV0dXJuIC1FTk9NRU07CkBAIC0zODMyLDYgJiM0MzszODM1LDkgQEAgc3RhdGljIGludCBibnh0X2FsbG9jX3RwYV9pbmZvKHN0cnVjdCBibnh0ICpicCkKIAogCWJwLSZndDttYXhfdHBhID0gTUFYX1RQQTsKIAlpZiAoYnAtJmd0O2ZsYWdzICZhbXA7IEJOWFRfRkxBR19DSElQX1A1X1BMVVMpIHsKJiM0MzsJCS8qIFRQQSBpcyBub3Qgc3VwcG9ydGVkIGF0IGFsbCwgc28gdGhlcmUgaXMgbm90aGluZyB0bwomIzQzOwkJICogYWxsb2NhdGUuCiYjNDM7CQkgKi8KIAkJaWYgKCFicC0mZ3Q7bWF4X3RwYV92MikKIAkJCXJldHVybiAwOwogCQlicC0mZ3Q7bWF4X3RwYSA9IG1pbl90KHUxNiwgYnAtJmd0O21heF90cGFfdjIsIE1BWF9UUEFfUDUpOwpAQCAtMzgzOSw2ICYjNDM7Mzg0NSw3IEBAIHN0YXRpYyBpbnQgYm54dF9hbGxvY190cGFfaW5mbyhzdHJ1Y3QgYm54dCAqYnApCiAJCWlmIChicC0mZ3Q7bWF4X3RwYSAmbHQ7PSAzMiAmYW1wOyZhbXA7IEJOWFRfQ0hJUF9QNShicCkgJmFtcDsmYW1wOyAhQk5YVF9OUEFSKGJwKSkKIAkJCWJwLSZndDttYXhfdHBhID0gTUFYX1RQQV9QNTsKIAl9CiYjNDM7CWJwLSZndDttYXhfdHBhX3JvdW5kdXBfc2l6ZSA9IHJvdW5kdXBfcG93X29mX3R3byhicC0mZ3Q7bWF4X3RwYSk7CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgYnAtJmd0O3J4X25yX3JpbmdzOyBpJiM0MzsmIzQzOykgewogCQlzdHJ1Y3QgYm54dF9yeF9yaW5nX2luZm8gKnJ4ciA9ICZhbXA7YnAtJmd0O3J4X3JpbmdbaV07CkBAIC00NTUxLDcgJiM0Mzs0NTU4LDcgQEAgc3RhdGljIGludCBibnh0X2FsbG9jX29uZV90cGFfaW5mb19kYXRhKHN0cnVjdCBibnh0ICpicCwKIAl1OCAqZGF0YTsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgJmx0OyBicC0mZ3Q7bWF4X3RwYTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGJwLSZndDttYXhfdHBhX3JvdW5kdXBfc2l6ZTsgaSYjNDM7JiM0MzspIHsKIAkJZGF0YSA9IF9fYm54dF9hbGxvY19yeF9mcmFnKGJwLCAmYW1wO21hcHBpbmcsIHJ4ciwKIAkJCQkJICAgIEdGUF9LRVJORUwpOwogCQlpZiAoIWRhdGEpCkBAIC01MDA2LDcgJiM0Mzs1MDEzLDggQEAgdm9pZCBibnh0X3NldF9yeF9za2JfbW9kZShzdHJ1Y3QgYm54dCAqYnAsIGJvb2wgcGFnZV9tb2RlKQogCQlibnh0X2dldF9tYXhfcmluZ3MoYnAsICZhbXA7cngsICZhbXA7dHgsIHRydWUpOwogCQlpZiAocnggJmd0OyAxKSB7CiAJCQlicC0mZ3Q7ZmxhZ3MgJmFtcDs9IH5CTlhUX0ZMQUdfTk9fQUdHX1JJTkdTOwotCQkJYnAtJmd0O2Rldi0mZ3Q7aHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9MUk87CiYjNDM7CQkJaWYgKEJOWFRfU1VQUE9SVFNfVFBBKGJwKSkKJiM0MzsJCQkJYnAtJmd0O2Rldi0mZ3Q7aHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9MUk87CiAJCX0KIAl9CiAKQEAgLTExMzQwLDggJiM0MzsxMTM0OCwxMyBAQCBzdGF0aWMgaW50IGJueHRfc2h1dGRvd25fbmljKHN0cnVjdCBibnh0ICpicCwgYm9vbCBpcnFfcmVfaW5pdCkKIAogc3RhdGljIGludCBibnh0X2luaXRfbmljKHN0cnVjdCBibnh0ICpicCwgYm9vbCBpcnFfcmVfaW5pdCkKIHsKJiM0MzsJaW50IHJjOwomIzQzOwogCWJueHRfaW5pdF9jcF9yaW5ncyhicCk7Ci0JYm54dF9pbml0X3J4X3JpbmdzKGJwKTsKJiM0MzsJcmMgPSBibnh0X2luaXRfcnhfcmluZ3MoYnApOwomIzQzOwlpZiAocmMpCiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CiAJYm54dF9pbml0X3R4X3JpbmdzKGJwKTsKIAlibnh0X2luaXRfcmluZ19ncnBzKGJwLCBpcnFfcmVfaW5pdCk7CiAJYm54dF9pbml0X3ZuaWNzKGJwKTsKQEAgLTE0NjAzLDcgJiM0MzsxNDYxNiwxNCBAQCBzdGF0aWMgdm9pZCBibnh0X3J4X3JpbmdfcmVzZXQoc3RydWN0IGJueHQgKmJwKQogCQlyeHItJmd0O3J4X3N3X2FnZ19wcm9kID0gMDsKIAkJcnhyLSZndDtyeF9uZXh0X2NvbnMgPSAwOwogCQlyeHItJmd0O2JuYXBpLSZndDtpbl9yZXNldCA9IGZhbHNlOwotCQlibnh0X2FsbG9jX29uZV9yeF9yaW5nKGJwLCBpKTsKJiM0MzsJCXJjID0gYm54dF9hbGxvY19vbmVfcnhfcmluZyhicCwgaSk7CiYjNDM7CQlpZiAocmMpIHsKJiM0MzsJCQluZXRkZXZfd2FybihicC0mZ3Q7ZGV2LCAmIzM0O1JYIHJpbmcgcmVzZXQgZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlcnMsIHJjID0gJWQsIGZhbGxpbmcgYmFjayB0byBnbG9iYWwgcmVzZXRcbiYjMzQ7LAomIzQzOwkJCQkgICAgcmMpOwomIzQzOwkJCWJueHRfcmVzZXRfdGFzayhicCwgdHJ1ZSk7CiYjNDM7CQkJYm54dF9ydG5sX3VubG9ja19zcChicCk7CiYjNDM7CQkJcmV0dXJuOwomIzQzOwkJfQogCQljcHIgPSAmYW1wO3J4ci0mZ3Q7Ym5hcGktJmd0O2NwX3Jpbmc7CiAJCWNwci0mZ3Q7c3dfc3RhdHMtJmd0O3J4LnJ4X3Jlc2V0cyYjNDM7JiM0Mzs7CiAJCWlmIChicC0mZ3Q7ZmxhZ3MgJmFtcDsgQk5YVF9GTEFHX0FHR19SSU5HUykKQEAgLTE2MzMyLDYgJiM0MzsxNjM1Miw4IEBAIHN0YXRpYyBpbnQgYm54dF9xdWV1ZV9tZW1fYWxsb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAljbG9uZS0mZ3Q7bmVlZF9oZWFkX3Bvb2wgPSBmYWxzZTsKIAljbG9uZS0mZ3Q7cnhfcGFnZV9zaXplID0gcWNmZy0mZ3Q7cnhfcGFnZV9zaXplOwogCWNsb25lLSZndDtyeF9hZ2dfYm1hcCA9IE5VTEw7CiYjNDM7CWNsb25lLSZndDtyeF90cGEgPSBOVUxMOwomIzQzOwljbG9uZS0mZ3Q7cnhfdHBhX2lkeF9tYXAgPSBOVUxMOwogCiAJcmMgPSBibnh0X2FsbG9jX3J4X3BhZ2VfcG9vbChicCwgY2xvbmUsIHJ4ci0mZ3Q7cGFnZV9wb29sLSZndDtwLm5pZCk7CiAJaWYgKHJjKQpAQCAtMTYzNzUsMTEgJiM0MzsxNjM5NywxNiBAQCBzdGF0aWMgaW50IGJueHRfcXVldWVfbWVtX2FsbG9jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJYm54dF9hbGxvY19vbmVfcnhfcmluZ19za2IoYnAsIGNsb25lLCBpZHgpOwogCWlmIChicC0mZ3Q7ZmxhZ3MgJmFtcDsgQk5YVF9GTEFHX0FHR19SSU5HUykKIAkJYm54dF9hbGxvY19vbmVfcnhfcmluZ19uZXRtZW0oYnAsIGNsb25lLCBpZHgpOwotCWlmIChicC0mZ3Q7ZmxhZ3MgJmFtcDsgQk5YVF9GTEFHX1RQQSkKLQkJYm54dF9hbGxvY19vbmVfdHBhX2luZm9fZGF0YShicCwgY2xvbmUpOwomIzQzOwlpZiAoYnAtJmd0O2ZsYWdzICZhbXA7IEJOWFRfRkxBR19UUEEpIHsKJiM0MzsJCXJjID0gYm54dF9hbGxvY19vbmVfdHBhX2luZm9fZGF0YShicCwgY2xvbmUpOwomIzQzOwkJaWYgKHJjKQomIzQzOwkJCWdvdG8gZXJyX2ZyZWVfcnhfcmluZ19za2JzOwomIzQzOwl9CiAKIAlyZXR1cm4gMDsKIAomIzQzO2Vycl9mcmVlX3J4X3Jpbmdfc2ticzoKJiM0MzsJYm54dF9mcmVlX29uZV9yeF9yaW5nX3NrYnMoYnAsIGNsb25lKTsKIGVycl9mcmVlX3RwYV9pbmZvOgogCWJueHRfZnJlZV9vbmVfdHBhX2luZm8oYnAsIGNsb25lKTsKIGVycl9mcmVlX3J4X2FnZ19yaW5nOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuaAppbmRleCBhYjg5NGY4YWRkZWY1Li5kZTQ2YjQyZDdjOThiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuaApAQCAtNzg5LDcgJiM0Mzs3ODksNiBAQCBzdHJ1Y3QgbnFlX2NuIHsKIAogI2RlZmluZSBNQVhfVFBBCQk2NAogI2RlZmluZSBNQVhfVFBBX1A1CTI1NgotI2RlZmluZSBNQVhfVFBBX1A1X01BU0sJKE1BWF9UUEFfUDUgLSAxKQogI2RlZmluZSBNQVhfVFBBX1NFR1NfUDUJMHgzZgogCiAjaWYgKEJOWFRfUEFHRV9TSElGVCA9PSAxNikKQEAgLTIzODAsNiAmIzQzOzIzNzksNyBAQCBzdHJ1Y3QgYm54dCB7CiAKIAl1MTYJCQltYXhfdHBhX3YyOwogCXUxNgkJCW1heF90cGE7CiYjNDM7CXUxNgkJCW1heF90cGFfcm91bmR1cF9zaXplOwogCXUzMgkJCXJ4X2J1Zl9zaXplOwogCXUzMgkJCXJ4X2J1Zl91c2Vfc2l6ZTsJLyogdXNlYWJsZSBzaXplICovCiAJdTE2CQkJcnhfb2Zmc2V0Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMzowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDIzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNjY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2g6IEEgUXVpY2sgQXNzZXNzbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBwYXRjaCBpcyB3b3J0aCBmdXp6aW5nLCBhbmQgdGhlIGNyaXRlcmlhIGFyZSBwcmV0dHkgY2xlYXIuIEkmIzM5O3ZlIGdvdCBhIHNldCBvZiBydWxlczogaWYgdGhlIGNoYW5nZXMgYXJlIGp1c3QgZG9jdW1lbnRhdGlvbiwgbG9nZ2luZywgZGVjb3JhdGl2ZSB0d2Vha3MsIHVucmVhY2hhYmxlIGNvZGUsIG9yIHRlYXJkb3duIGNhbGxiYWNrcywgaXQmIzM5O3MgYSAmIzM0O25vLWdvJiMzNDsuIFRoZSBiaWcgb25lIGhlcmUgaXMgJiMzNDt2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyB0aGF0IG5lZWQgcGh5c2ljYWwgaGFyZHdhcmUmIzM0Oy4gSSAqcmVhbGx5KiBuZWVkIHRvIGZvY3VzIG9uIHRoaXMgb25lLgoKTG9va2luZyBhdCB0aGUgZmlsZSBsaXN0LCBpdCYjMzk7cyBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmNgIGFuZCBgYm54dC5oYC4gU28sIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIGBibnh0YCBkcml2ZXIsIHdoaWNoIGZyb20gbWVtb3J5LCBpcyB0aGUgQnJvYWRjb20gTmV0WHRyZW1lLiBJIGtub3cgdGhhdCBmYW1pbHkgb2YgTklDcyBwcmV0dHkgd2VsbCwgaXQgY292ZXJzIHRoZSBCQ001NzN4eC81NzR4eC81NzV4eCBjaGlwcy4gVGhvc2UgYXJlIHRoZSAxMC8yNS80MC81MC8xMDAvMjAwLzQwMEdiIEV0aGVybmV0IE5JQ3MuCgpOb3csIHRoZSBxdWVzdGlvbiBpczogaXMgYGJueHRgIGEgdmVuZG9yLXNwZWNpZmljIGRyaXZlciB0aGF0IG5lZWRzIGEgcGh5c2ljYWwgUENJZSBjYXJkPyBUaGF0JiMzOTtzIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBoZXJlLiBMZXQmIzM5O3MgcmVtZW1iZXIgd2hhdCBRRU1VICpkb2VzKiBlbXVsYXRlLCB0aG9zZSBhcmUgdGhlIGNvbW1vbiBvbmVzLCBsaWtlIGUxMDAwLCB2aXJ0aW8sIGFuZCBydGw4MTM5LgoKT2theSwgaXMgYm54dCBlbXVsYXRlZCBieSBzdGFuZGFyZCBRRU1VPyBObyEgRGVmaW5pdGVseSBub3QuIEJyb2FkY29tIE5ldFh0cmVtZSBCQ001NzMweC9CQ001NzQweCAoTmV0WHRyZW1lLUUgLyBOZXRYdHJlbWUtQykgYXJlIGVudGVycHJpc2UvU21hcnROSUMvaGlnaC1zcGVlZCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBRRU1VIG9yIEdDRS4KCkFscmlnaHQsIGJhY2sgdG8gdGhlIHJ1bGVzLiAmIzM0O1ZlbmRvci1zcGVjaWZpYyBQQ0llLi4uJiMzNDsuIEFuZCAqYm54dCogaXMgYSB2ZW5kb3Itc3BlY2lmaWMgQnJvYWRjb20gRXRoZXJuZXQgZHJpdmVyIGZvciB0aGVpciBOZXRYdHJlbWUgbGluZS4KClNvLCB0aGlzIHBhdGNoIG1vZGlmaWVzIGNvZGUgdGhhdCBmYWxscyBkaXJlY3RseSB1bmRlciB0aGF0IGNhdGVnb3J5OiB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgcmVxdWlyaW5nIHBoeXNpY2FsIFBDSWUuIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGlzIGNvcnJlY3QsIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLiBMZXQmIzM5O3MgbG9vayBhdCB0aGUgS2NvbmZpZyBmaWxlIGZvciBgYm54dGAgdG8gdmVyaWZ5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEzOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTlhUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc9MTk1PWNvbmZpZyBTWVNURU1QT1JUXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yMDYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnOjIwNzpjb25maWcgQk5YVFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yMDgtXHR0cmlzdGF0ZSBcJiMzNDtCcm9hZGNvbSBOZXRYdHJlbWUtQy9FIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTIyMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc6MjIyOmNvbmZpZyBCTlhUX1NSSU9WXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTIyMy1cdGJvb2wgXCYjMzQ7QnJvYWRjb20gTmV0WHRyZW1lLUMvRSBTUi1JT1Ygc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjMwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZzoyMzE6Y29uZmlnIEJOWFRfRkxPV0VSX09GRkxPQURcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjMyLVx0Ym9vbCBcJiMzNDtUQyBGbG93ZXIgb2ZmbG9hZCBzdXBwb3J0IGZvciBOZXRYdHJlbWUtQy9FXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yMzktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnOjI0MDpjb25maWcgQk5YVF9EQ0JcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjQxLVx0Ym9vbCBcJiMzNDtEYXRhIENlbnRlciBCcmlkZ2luZyAoRENCKSBTdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yNDktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnOjI1MDpjb25maWcgQk5YVF9IV01PTlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yNTEtXHRib29sIFwmIzM0O0Jyb2FkY29tIE5ldFh0cmVtZS1DL0UgSFdNT04gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEzOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2MTkKCQkJCQkJCW91dHB1dDogNzkKCQkJCQkJCXRob3VnaHRzOiAyMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQk5YVCBEcml2ZXIgRnV6emluZyBBc3Nlc3NtZW50KioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGlzLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHNwZWNpZmljIGRyaXZlciBpbiBxdWVzdGlvbiDigJMgeWVwLCBpdCYjMzk7cyBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZ2AsIGFuZCB0aGUgZHJpdmVyIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaXMgYENPTkZJR19CTlhUYCwgdGhlIEJyb2FkY29tIE5ldFh0cmVtZS1DL0UgZHJpdmVyLiBUaGF0JiMzOTtzIGEgdmVuZG9yLXNwZWNpZmljIGRyaXZlciwgZm9jdXNpbmcgb24gUENJZSBOSUNzIGZyb20gQnJvYWRjb20sIG5hbWVseSB0aGUgQkNNNTczeHgsIEJDTTU3NHh4LCBCQ001NzV4eCwgYW5kIHNpbWlsYXIgaGFyZHdhcmUuCgpUaGUgY3J1Y2lhbCBwb2ludCBoZXJlIGlzIHRoYXQgdGhpcyBkcml2ZXIgKnJlcXVpcmVzKiBwaHlzaWNhbCBCcm9hZGNvbSBQQ0llIGhhcmR3YXJlLiBUaGlzIGltbWVkaWF0ZWx5IGZsYWdzIGEgc2lnbmlmaWNhbnQgaHVyZGxlLiBTdGFuZGFyZCBRRU1VIHNldHVwcywgYW5kIGNlcnRhaW5seSB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyBsaWtlIHRob3NlIG9uIEdDRSwgKmRvIG5vdCogZW11bGF0ZSB0aGlzIHNwZWNpZmljIGhhcmR3YXJlLiBXZSYjMzk7ZCBiZSB0cnlpbmcgdG8gdGVzdCBzb21ldGhpbmcgdGhhdCBmdW5kYW1lbnRhbGx5IGlzbiYjMzk7dCBwcmVzZW50IGluIHRoZSBmdXp6aW5nIGVudmlyb25tZW50LCB3aGljaCBpcyBhIG5vbi1zdGFydGVyLgoKU28sIGxldCBtZSBydW4gdGhyb3VnaCB0aGUgcHJvbXB0IHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZzogYFdvcnRoRnV6emluZzogZmFsc2VgLCBgRm9jdXNTeW1ib2xzOiBbXWAsIGBFbmFibGVDb25maWdzOiBbXWAsIGFuZCB0aGUgcmVhc29uaW5nIGlzIGNvbmNpc2UgYW5kIGFjY3VyYXRlOiB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgcmVxdWlyaW5nIHBoeXNpY2FsIFBDSWUgQnJvYWRjb20gY2FyZHMgbm90IGVtdWxhdGVkIGluIHRoZSBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50cy4KCkFscmlnaHQsIHdpdGggdGhhdCBjb25maXJtZWQsIEkmIzM5O20gY29uZmlkZW50IGluIHRoZSBhc3Nlc3NtZW50LiBUaW1lIHRvIHJ1biBhIHNhbml0eSBjaGVjayBvbiB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzIGFuZCBmaW5hbGl6ZSB0aGUgY2FsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCcm9hZGNvbSBOZXRYdHJlbWUtQy9FIChibnh0KSBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgTklDIGRyaXZlciByZXF1aXJpbmcgcGh5c2ljYWwgQnJvYWRjb20gaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQnJvYWRjb20gTmV0WHRyZW1lLUMvRSAoYm54dCkgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIE5JQyBkcml2ZXIgcmVxdWlyaW5nIHBoeXNpY2FsIEJyb2FkY29tIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMzowMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDJUMTM6MDI6MjEuMTY2MzIxMjI3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQwMjQyMDIxMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQnJvYWRjb20gTmV0WHRyZW1lLUMvRSAoYm54dCkgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIE5JQyBkcml2ZXIgcmVxdWlyaW5nIHBoeXNpY2FsIEJyb2FkY29tIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTM6MDI6MjEuMTY2MzMzNjQ3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTAzMTkxMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxN2ZhNTZkZDVjZmUyMzVlNDNkMzVjMDY1ZWVhZmVmMWU5YjA5NTc1XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgU2VwIDIgMTM6MDI6MjAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuY1xcbmluZGV4IGQ1OWJjY2E3M2EyYjguLmIyY2U1YjRlNWU2YTUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuY1xcbkBAIC0xNTE0LDE0ICsxNTE0LDE2IEBAIHN0YXRpYyBpbnQgYm54dF9kaXNjYXJkX3J4KHN0cnVjdCBibnh0ICpicCwgc3RydWN0IGJueHRfY3BfcmluZ19pbmZvICpjcHIsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgdTE2IGJueHRfYWxsb2NfYWdnX2lkeChzdHJ1Y3QgYm54dF9yeF9yaW5nX2luZm8gKnJ4ciwgdTE2IGFnZ19pZClcXG4rc3RhdGljIHUxNiBibnh0X2FsbG9jX2FnZ19pZHgoc3RydWN0IGJueHQgKmJwLCBzdHJ1Y3QgYm54dF9yeF9yaW5nX2luZm8gKnJ4cixcXG4rXFx0XFx0XFx0ICAgICAgdTE2IGFnZ19pZClcXG4ge1xcbiBcXHRzdHJ1Y3QgYm54dF90cGFfaWR4X21hcCAqbWFwID0gcnhyLVxcdTAwM2VyeF90cGFfaWR4X21hcDtcXG4tXFx0dTE2IGlkeCA9IGFnZ19pZCBcXHUwMDI2IE1BWF9UUEFfUDVfTUFTSztcXG4rXFx0dTE2IGlkeCA9IGFnZ19pZCBcXHUwMDI2IChicC1cXHUwMDNlbWF4X3RwYV9yb3VuZHVwX3NpemUgLSAxKTtcXG4gXFxuIFxcdGlmICh0ZXN0X2JpdChpZHgsIG1hcC1cXHUwMDNlYWdnX2lkeF9ibWFwKSkge1xcbi1cXHRcXHRpZHggPSBmaW5kX2ZpcnN0X3plcm9fYml0KG1hcC1cXHUwMDNlYWdnX2lkeF9ibWFwLCBNQVhfVFBBX1A1KTtcXG4tXFx0XFx0aWYgKGlkeCBcXHUwMDNlPSBNQVhfVFBBX1A1KVxcbitcXHRcXHRpZHggPSBmaW5kX2ZpcnN0X3plcm9fYml0KG1hcC1cXHUwMDNlYWdnX2lkeF9ibWFwLFxcbitcXHRcXHRcXHRcXHRcXHQgIGJwLVxcdTAwM2VtYXhfdHBhX3JvdW5kdXBfc2l6ZSk7XFxuK1xcdFxcdGlmIChpZHggXFx1MDAzZT0gYnAtXFx1MDAzZW1heF90cGFfcm91bmR1cF9zaXplKVxcbiBcXHRcXHRcXHRyZXR1cm4gSU5WQUxJRF9IV19SSU5HX0lEO1xcbiBcXHR9XFxuIFxcdF9fc2V0X2JpdChpZHgsIG1hcC1cXHUwMDNlYWdnX2lkeF9ibWFwKTtcXG5AQCAtMTU4Niw3ICsxNTg4LDcgQEAgc3RhdGljIHZvaWQgYm54dF90cGFfc3RhcnQoc3RydWN0IGJueHQgKmJwLCBzdHJ1Y3QgYm54dF9yeF9yaW5nX2luZm8gKnJ4cixcXG4gXFxuIFxcdGlmIChicC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBCTlhUX0ZMQUdfQ0hJUF9QNV9QTFVTKSB7XFxuIFxcdFxcdGFnZ19pZCA9IFRQQV9TVEFSVF9BR0dfSURfUDUodHBhX3N0YXJ0KTtcXG4tXFx0XFx0YWdnX2lkID0gYm54dF9hbGxvY19hZ2dfaWR4KHJ4ciwgYWdnX2lkKTtcXG4rXFx0XFx0YWdnX2lkID0gYm54dF9hbGxvY19hZ2dfaWR4KGJwLCByeHIsIGFnZ19pZCk7XFxuIFxcdFxcdGlmICh1bmxpa2VseShhZ2dfaWQgPT0gSU5WQUxJRF9IV19SSU5HX0lEKSkge1xcbiBcXHRcXHRcXHRuZXRkZXZfd2FybihicC1cXHUwMDNlZGV2LCBcXFwiVW5hYmxlIHRvIGFsbG9jYXRlIGFnZyBJRCBmb3IgcmluZyAlZCwgYWdnIDB4JXhcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdCAgICByeHItXFx1MDAzZWJuYXBpLVxcdTAwM2VpbmRleCxcXG5AQCAtMzU4NCw3ICszNTg2LDcgQEAgc3RhdGljIHZvaWQgYm54dF9mcmVlX29uZV90cGFfaW5mb19kYXRhKHN0cnVjdCBibnh0ICpicCxcXG4ge1xcbiBcXHRpbnQgaTtcXG4gXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBicC1cXHUwMDNlbWF4X3RwYTsgaSsrKSB7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBicC1cXHUwMDNlbWF4X3RwYV9yb3VuZHVwX3NpemU7IGkrKykge1xcbiBcXHRcXHRzdHJ1Y3QgYm54dF90cGFfaW5mbyAqdHBhX2luZm8gPSBcXHUwMDI2cnhyLVxcdTAwM2VyeF90cGFbaV07XFxuIFxcdFxcdHU4ICpkYXRhID0gdHBhX2luZm8tXFx1MDAzZWRhdGE7XFxuIFxcbkBAIC0zNzgxLDcgKzM3ODMsNyBAQCBzdGF0aWMgdm9pZCBibnh0X2ZyZWVfb25lX3RwYV9pbmZvKHN0cnVjdCBibnh0ICpicCxcXG4gXFx0a2ZyZWUocnhyLVxcdTAwM2VyeF90cGFfaWR4X21hcCk7XFxuIFxcdHJ4ci1cXHUwMDNlcnhfdHBhX2lkeF9tYXAgPSBOVUxMO1xcbiBcXHRpZiAocnhyLVxcdTAwM2VyeF90cGEpIHtcXG4tXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGJwLVxcdTAwM2VtYXhfdHBhOyBpKyspIHtcXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGJwLVxcdTAwM2VtYXhfdHBhX3JvdW5kdXBfc2l6ZTsgaSsrKSB7XFxuIFxcdFxcdFxcdGtmcmVlKHJ4ci1cXHUwMDNlcnhfdHBhW2ldLmFnZ19hcnIpO1xcbiBcXHRcXHRcXHRyeHItXFx1MDAzZXJ4X3RwYVtpXS5hZ2dfYXJyID0gTlVMTDtcXG4gXFx0XFx0fVxcbkBAIC0zODA3LDEzICszODA5LDE0IEBAIHN0YXRpYyBpbnQgYm54dF9hbGxvY19vbmVfdHBhX2luZm8oc3RydWN0IGJueHQgKmJwLFxcbiBcXHRzdHJ1Y3QgcnhfYWdnX2NtcCAqYWdnO1xcbiBcXHRpbnQgaTtcXG4gXFxuLVxcdHJ4ci1cXHUwMDNlcnhfdHBhID0ga3phbGxvY19vYmpzKHN0cnVjdCBibnh0X3RwYV9pbmZvLCBicC1cXHUwMDNlbWF4X3RwYSk7XFxuK1xcdHJ4ci1cXHUwMDNlcnhfdHBhID0ga3phbGxvY19vYmpzKHN0cnVjdCBibnh0X3RwYV9pbmZvLFxcbitcXHRcXHRcXHRcXHQgICBicC1cXHUwMDNlbWF4X3RwYV9yb3VuZHVwX3NpemUpO1xcbiBcXHRpZiAoIXJ4ci1cXHUwMDNlcnhfdHBhKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuIFxcdGlmICghKGJwLVxcdTAwM2VmbGFncyBcXHUwMDI2IEJOWFRfRkxBR19DSElQX1A1X1BMVVMpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGJwLVxcdTAwM2VtYXhfdHBhOyBpKyspIHtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGJwLVxcdTAwM2VtYXhfdHBhX3JvdW5kdXBfc2l6ZTsgaSsrKSB7XFxuIFxcdFxcdGFnZyA9IGt6YWxsb2Nfb2JqcygqYWdnLCBNQVhfU0tCX0ZSQUdTKTtcXG4gXFx0XFx0aWYgKCFhZ2cpXFxuIFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbkBAIC0zODMyLDYgKzM4MzUsOSBAQCBzdGF0aWMgaW50IGJueHRfYWxsb2NfdHBhX2luZm8oc3RydWN0IGJueHQgKmJwKVxcbiBcXG4gXFx0YnAtXFx1MDAzZW1heF90cGEgPSBNQVhfVFBBO1xcbiBcXHRpZiAoYnAtXFx1MDAzZWZsYWdzIFxcdTAwMjYgQk5YVF9GTEFHX0NISVBfUDVfUExVUykge1xcbitcXHRcXHQvKiBUUEEgaXMgbm90IHN1cHBvcnRlZCBhdCBhbGwsIHNvIHRoZXJlIGlzIG5vdGhpbmcgdG9cXG4rXFx0XFx0ICogYWxsb2NhdGUuXFxuK1xcdFxcdCAqL1xcbiBcXHRcXHRpZiAoIWJwLVxcdTAwM2VtYXhfdHBhX3YyKVxcbiBcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFx0XFx0YnAtXFx1MDAzZW1heF90cGEgPSBtaW5fdCh1MTYsIGJwLVxcdTAwM2VtYXhfdHBhX3YyLCBNQVhfVFBBX1A1KTtcXG5AQCAtMzgzOSw2ICszODQ1LDcgQEAgc3RhdGljIGludCBibnh0X2FsbG9jX3RwYV9pbmZvKHN0cnVjdCBibnh0ICpicClcXG4gXFx0XFx0aWYgKGJwLVxcdTAwM2VtYXhfdHBhIFxcdTAwM2M9IDMyIFxcdTAwMjZcXHUwMDI2IEJOWFRfQ0hJUF9QNShicCkgXFx1MDAyNlxcdTAwMjYgIUJOWFRfTlBBUihicCkpXFxuIFxcdFxcdFxcdGJwLVxcdTAwM2VtYXhfdHBhID0gTUFYX1RQQV9QNTtcXG4gXFx0fVxcbitcXHRicC1cXHUwMDNlbWF4X3RwYV9yb3VuZHVwX3NpemUgPSByb3VuZHVwX3Bvd19vZl90d28oYnAtXFx1MDAzZW1heF90cGEpO1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGJwLVxcdTAwM2VyeF9ucl9yaW5nczsgaSsrKSB7XFxuIFxcdFxcdHN0cnVjdCBibnh0X3J4X3JpbmdfaW5mbyAqcnhyID0gXFx1MDAyNmJwLVxcdTAwM2VyeF9yaW5nW2ldO1xcbkBAIC00NTUxLDcgKzQ1NTgsNyBAQCBzdGF0aWMgaW50IGJueHRfYWxsb2Nfb25lX3RwYV9pbmZvX2RhdGEoc3RydWN0IGJueHQgKmJwLFxcbiBcXHR1OCAqZGF0YTtcXG4gXFx0aW50IGk7XFxuIFxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgYnAtXFx1MDAzZW1heF90cGE7IGkrKykge1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgYnAtXFx1MDAzZW1heF90cGFfcm91bmR1cF9zaXplOyBpKyspIHtcXG4gXFx0XFx0ZGF0YSA9IF9fYm54dF9hbGxvY19yeF9mcmFnKGJwLCBcXHUwMDI2bWFwcGluZywgcnhyLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgR0ZQX0tFUk5FTCk7XFxuIFxcdFxcdGlmICghZGF0YSlcXG5AQCAtNTAwNiw3ICs1MDEzLDggQEAgdm9pZCBibnh0X3NldF9yeF9za2JfbW9kZShzdHJ1Y3QgYm54dCAqYnAsIGJvb2wgcGFnZV9tb2RlKVxcbiBcXHRcXHRibnh0X2dldF9tYXhfcmluZ3MoYnAsIFxcdTAwMjZyeCwgXFx1MDAyNnR4LCB0cnVlKTtcXG4gXFx0XFx0aWYgKHJ4IFxcdTAwM2UgMSkge1xcbiBcXHRcXHRcXHRicC1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gfkJOWFRfRkxBR19OT19BR0dfUklOR1M7XFxuLVxcdFxcdFxcdGJwLVxcdTAwM2VkZXYtXFx1MDAzZWh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfTFJPO1xcbitcXHRcXHRcXHRpZiAoQk5YVF9TVVBQT1JUU19UUEEoYnApKVxcbitcXHRcXHRcXHRcXHRicC1cXHUwMDNlZGV2LVxcdTAwM2Vod19mZWF0dXJlcyB8PSBORVRJRl9GX0xSTztcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbkBAIC0xMTM0MCw4ICsxMTM0OCwxMyBAQCBzdGF0aWMgaW50IGJueHRfc2h1dGRvd25fbmljKHN0cnVjdCBibnh0ICpicCwgYm9vbCBpcnFfcmVfaW5pdClcXG4gXFxuIHN0YXRpYyBpbnQgYm54dF9pbml0X25pYyhzdHJ1Y3QgYm54dCAqYnAsIGJvb2wgaXJxX3JlX2luaXQpXFxuIHtcXG4rXFx0aW50IHJjO1xcbitcXG4gXFx0Ym54dF9pbml0X2NwX3JpbmdzKGJwKTtcXG4tXFx0Ym54dF9pbml0X3J4X3JpbmdzKGJwKTtcXG4rXFx0cmMgPSBibnh0X2luaXRfcnhfcmluZ3MoYnApO1xcbitcXHRpZiAocmMpXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuIFxcdGJueHRfaW5pdF90eF9yaW5ncyhicCk7XFxuIFxcdGJueHRfaW5pdF9yaW5nX2dycHMoYnAsIGlycV9yZV9pbml0KTtcXG4gXFx0Ym54dF9pbml0X3ZuaWNzKGJwKTtcXG5AQCAtMTQ2MDMsNyArMTQ2MTYsMTQgQEAgc3RhdGljIHZvaWQgYm54dF9yeF9yaW5nX3Jlc2V0KHN0cnVjdCBibnh0ICpicClcXG4gXFx0XFx0cnhyLVxcdTAwM2VyeF9zd19hZ2dfcHJvZCA9IDA7XFxuIFxcdFxcdHJ4ci1cXHUwMDNlcnhfbmV4dF9jb25zID0gMDtcXG4gXFx0XFx0cnhyLVxcdTAwM2VibmFwaS1cXHUwMDNlaW5fcmVzZXQgPSBmYWxzZTtcXG4tXFx0XFx0Ym54dF9hbGxvY19vbmVfcnhfcmluZyhicCwgaSk7XFxuK1xcdFxcdHJjID0gYm54dF9hbGxvY19vbmVfcnhfcmluZyhicCwgaSk7XFxuK1xcdFxcdGlmIChyYykge1xcbitcXHRcXHRcXHRuZXRkZXZfd2FybihicC1cXHUwMDNlZGV2LCBcXFwiUlggcmluZyByZXNldCBmYWlsZWQgdG8gYWxsb2NhdGUgYnVmZmVycywgcmMgPSAlZCwgZmFsbGluZyBiYWNrIHRvIGdsb2JhbCByZXNldFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgIHJjKTtcXG4rXFx0XFx0XFx0Ym54dF9yZXNldF90YXNrKGJwLCB0cnVlKTtcXG4rXFx0XFx0XFx0Ym54dF9ydG5sX3VubG9ja19zcChicCk7XFxuK1xcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0fVxcbiBcXHRcXHRjcHIgPSBcXHUwMDI2cnhyLVxcdTAwM2VibmFwaS1cXHUwMDNlY3BfcmluZztcXG4gXFx0XFx0Y3ByLVxcdTAwM2Vzd19zdGF0cy1cXHUwMDNlcngucnhfcmVzZXRzKys7XFxuIFxcdFxcdGlmIChicC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBCTlhUX0ZMQUdfQUdHX1JJTkdTKVxcbkBAIC0xNjMzMiw2ICsxNjM1Miw4IEBAIHN0YXRpYyBpbnQgYm54dF9xdWV1ZV9tZW1fYWxsb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0Y2xvbmUtXFx1MDAzZW5lZWRfaGVhZF9wb29sID0gZmFsc2U7XFxuIFxcdGNsb25lLVxcdTAwM2VyeF9wYWdlX3NpemUgPSBxY2ZnLVxcdTAwM2VyeF9wYWdlX3NpemU7XFxuIFxcdGNsb25lLVxcdTAwM2VyeF9hZ2dfYm1hcCA9IE5VTEw7XFxuK1xcdGNsb25lLVxcdTAwM2VyeF90cGEgPSBOVUxMO1xcbitcXHRjbG9uZS1cXHUwMDNlcnhfdHBhX2lkeF9tYXAgPSBOVUxMO1xcbiBcXG4gXFx0cmMgPSBibnh0X2FsbG9jX3J4X3BhZ2VfcG9vbChicCwgY2xvbmUsIHJ4ci1cXHUwMDNlcGFnZV9wb29sLVxcdTAwM2VwLm5pZCk7XFxuIFxcdGlmIChyYylcXG5AQCAtMTYzNzUsMTEgKzE2Mzk3LDE2IEBAIHN0YXRpYyBpbnQgYm54dF9xdWV1ZV9tZW1fYWxsb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0Ym54dF9hbGxvY19vbmVfcnhfcmluZ19za2IoYnAsIGNsb25lLCBpZHgpO1xcbiBcXHRpZiAoYnAtXFx1MDAzZWZsYWdzIFxcdTAwMjYgQk5YVF9GTEFHX0FHR19SSU5HUylcXG4gXFx0XFx0Ym54dF9hbGxvY19vbmVfcnhfcmluZ19uZXRtZW0oYnAsIGNsb25lLCBpZHgpO1xcbi1cXHRpZiAoYnAtXFx1MDAzZWZsYWdzIFxcdTAwMjYgQk5YVF9GTEFHX1RQQSlcXG4tXFx0XFx0Ym54dF9hbGxvY19vbmVfdHBhX2luZm9fZGF0YShicCwgY2xvbmUpO1xcbitcXHRpZiAoYnAtXFx1MDAzZWZsYWdzIFxcdTAwMjYgQk5YVF9GTEFHX1RQQSkge1xcbitcXHRcXHRyYyA9IGJueHRfYWxsb2Nfb25lX3RwYV9pbmZvX2RhdGEoYnAsIGNsb25lKTtcXG4rXFx0XFx0aWYgKHJjKVxcbitcXHRcXHRcXHRnb3RvIGVycl9mcmVlX3J4X3Jpbmdfc2ticztcXG4rXFx0fVxcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbitlcnJfZnJlZV9yeF9yaW5nX3NrYnM6XFxuK1xcdGJueHRfZnJlZV9vbmVfcnhfcmluZ19za2JzKGJwLCBjbG9uZSk7XFxuIGVycl9mcmVlX3RwYV9pbmZvOlxcbiBcXHRibnh0X2ZyZWVfb25lX3RwYV9pbmZvKGJwLCBjbG9uZSk7XFxuIGVycl9mcmVlX3J4X2FnZ19yaW5nOlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5oXFxuaW5kZXggYWI4OTRmOGFkZGVmNS4uZGU0NmI0MmQ3Yzk4YiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5oXFxuQEAgLTc4OSw3ICs3ODksNiBAQCBzdHJ1Y3QgbnFlX2NuIHtcXG4gXFxuICNkZWZpbmUgTUFYX1RQQVxcdFxcdDY0XFxuICNkZWZpbmUgTUFYX1RQQV9QNVxcdDI1Nlxcbi0jZGVmaW5lIE1BWF9UUEFfUDVfTUFTS1xcdChNQVhfVFBBX1A1IC0gMSlcXG4gI2RlZmluZSBNQVhfVFBBX1NFR1NfUDVcXHQweDNmXFxuIFxcbiAjaWYgKEJOWFRfUEFHRV9TSElGVCA9PSAxNilcXG5AQCAtMjM4MCw2ICsyMzc5LDcgQEAgc3RydWN0IGJueHQge1xcbiBcXG4gXFx0dTE2XFx0XFx0XFx0bWF4X3RwYV92MjtcXG4gXFx0dTE2XFx0XFx0XFx0bWF4X3RwYTtcXG4rXFx0dTE2XFx0XFx0XFx0bWF4X3RwYV9yb3VuZHVwX3NpemU7XFxuIFxcdHUzMlxcdFxcdFxcdHJ4X2J1Zl9zaXplO1xcbiBcXHR1MzJcXHRcXHRcXHRyeF9idWZfdXNlX3NpemU7XFx0LyogdXNlYWJsZSBzaXplICovXFxuIFxcdHUxNlxcdFxcdFxcdHJ4X29mZnNldDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTM6MDI6MjEuNjc3MjMwODU5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyMzUxMzI3NjEwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJyb2FkY29tIE5ldFh0cmVtZS1DL0UgKGJueHQpIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBOSUMgZHJpdmVyIHJlcXVpcmluZyBwaHlzaWNhbCBCcm9hZGNvbSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDE3ZmE1NmRkNWNmZTIzNWU0M2QzNWMwNjVlZWFmZWYxZTliMDk1NzVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCAyIDEzOjAyOjIwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuY1xuaW5kZXggZDU5YmNjYTczYTJiOC4uYjJjZTViNGU1ZTZhNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuY1xuQEAgLTE1MTQsMTQgKzE1MTQsMTYgQEAgc3RhdGljIGludCBibnh0X2Rpc2NhcmRfcngoc3RydWN0IGJueHQgKmJwLCBzdHJ1Y3QgYm54dF9jcF9yaW5nX2luZm8gKmNwcixcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgdTE2IGJueHRfYWxsb2NfYWdnX2lkeChzdHJ1Y3QgYm54dF9yeF9yaW5nX2luZm8gKnJ4ciwgdTE2IGFnZ19pZClcbitzdGF0aWMgdTE2IGJueHRfYWxsb2NfYWdnX2lkeChzdHJ1Y3QgYm54dCAqYnAsIHN0cnVjdCBibnh0X3J4X3JpbmdfaW5mbyAqcnhyLFxuK1x0XHRcdCAgICAgIHUxNiBhZ2dfaWQpXG4ge1xuIFx0c3RydWN0IGJueHRfdHBhX2lkeF9tYXAgKm1hcCA9IHJ4ci1cdTAwM2VyeF90cGFfaWR4X21hcDtcbi1cdHUxNiBpZHggPSBhZ2dfaWQgXHUwMDI2IE1BWF9UUEFfUDVfTUFTSztcbitcdHUxNiBpZHggPSBhZ2dfaWQgXHUwMDI2IChicC1cdTAwM2VtYXhfdHBhX3JvdW5kdXBfc2l6ZSAtIDEpO1xuIFxuIFx0aWYgKHRlc3RfYml0KGlkeCwgbWFwLVx1MDAzZWFnZ19pZHhfYm1hcCkpIHtcbi1cdFx0aWR4ID0gZmluZF9maXJzdF96ZXJvX2JpdChtYXAtXHUwMDNlYWdnX2lkeF9ibWFwLCBNQVhfVFBBX1A1KTtcbi1cdFx0aWYgKGlkeCBcdTAwM2U9IE1BWF9UUEFfUDUpXG4rXHRcdGlkeCA9IGZpbmRfZmlyc3RfemVyb19iaXQobWFwLVx1MDAzZWFnZ19pZHhfYm1hcCxcbitcdFx0XHRcdFx0ICBicC1cdTAwM2VtYXhfdHBhX3JvdW5kdXBfc2l6ZSk7XG4rXHRcdGlmIChpZHggXHUwMDNlPSBicC1cdTAwM2VtYXhfdHBhX3JvdW5kdXBfc2l6ZSlcbiBcdFx0XHRyZXR1cm4gSU5WQUxJRF9IV19SSU5HX0lEO1xuIFx0fVxuIFx0X19zZXRfYml0KGlkeCwgbWFwLVx1MDAzZWFnZ19pZHhfYm1hcCk7XG5AQCAtMTU4Niw3ICsxNTg4LDcgQEAgc3RhdGljIHZvaWQgYm54dF90cGFfc3RhcnQoc3RydWN0IGJueHQgKmJwLCBzdHJ1Y3QgYm54dF9yeF9yaW5nX2luZm8gKnJ4cixcbiBcbiBcdGlmIChicC1cdTAwM2VmbGFncyBcdTAwMjYgQk5YVF9GTEFHX0NISVBfUDVfUExVUykge1xuIFx0XHRhZ2dfaWQgPSBUUEFfU1RBUlRfQUdHX0lEX1A1KHRwYV9zdGFydCk7XG4tXHRcdGFnZ19pZCA9IGJueHRfYWxsb2NfYWdnX2lkeChyeHIsIGFnZ19pZCk7XG4rXHRcdGFnZ19pZCA9IGJueHRfYWxsb2NfYWdnX2lkeChicCwgcnhyLCBhZ2dfaWQpO1xuIFx0XHRpZiAodW5saWtlbHkoYWdnX2lkID09IElOVkFMSURfSFdfUklOR19JRCkpIHtcbiBcdFx0XHRuZXRkZXZfd2FybihicC1cdTAwM2VkZXYsIFwiVW5hYmxlIHRvIGFsbG9jYXRlIGFnZyBJRCBmb3IgcmluZyAlZCwgYWdnIDB4JXhcXG5cIixcbiBcdFx0XHRcdCAgICByeHItXHUwMDNlYm5hcGktXHUwMDNlaW5kZXgsXG5AQCAtMzU4NCw3ICszNTg2LDcgQEAgc3RhdGljIHZvaWQgYm54dF9mcmVlX29uZV90cGFfaW5mb19kYXRhKHN0cnVjdCBibnh0ICpicCxcbiB7XG4gXHRpbnQgaTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGJwLVx1MDAzZW1heF90cGE7IGkrKykge1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgYnAtXHUwMDNlbWF4X3RwYV9yb3VuZHVwX3NpemU7IGkrKykge1xuIFx0XHRzdHJ1Y3QgYm54dF90cGFfaW5mbyAqdHBhX2luZm8gPSBcdTAwMjZyeHItXHUwMDNlcnhfdHBhW2ldO1xuIFx0XHR1OCAqZGF0YSA9IHRwYV9pbmZvLVx1MDAzZWRhdGE7XG4gXG5AQCAtMzc4MSw3ICszNzgzLDcgQEAgc3RhdGljIHZvaWQgYm54dF9mcmVlX29uZV90cGFfaW5mbyhzdHJ1Y3QgYm54dCAqYnAsXG4gXHRrZnJlZShyeHItXHUwMDNlcnhfdHBhX2lkeF9tYXApO1xuIFx0cnhyLVx1MDAzZXJ4X3RwYV9pZHhfbWFwID0gTlVMTDtcbiBcdGlmIChyeHItXHUwMDNlcnhfdHBhKSB7XG4tXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGJwLVx1MDAzZW1heF90cGE7IGkrKykge1xuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBicC1cdTAwM2VtYXhfdHBhX3JvdW5kdXBfc2l6ZTsgaSsrKSB7XG4gXHRcdFx0a2ZyZWUocnhyLVx1MDAzZXJ4X3RwYVtpXS5hZ2dfYXJyKTtcbiBcdFx0XHRyeHItXHUwMDNlcnhfdHBhW2ldLmFnZ19hcnIgPSBOVUxMO1xuIFx0XHR9XG5AQCAtMzgwNywxMyArMzgwOSwxNCBAQCBzdGF0aWMgaW50IGJueHRfYWxsb2Nfb25lX3RwYV9pbmZvKHN0cnVjdCBibnh0ICpicCxcbiBcdHN0cnVjdCByeF9hZ2dfY21wICphZ2c7XG4gXHRpbnQgaTtcbiBcbi1cdHJ4ci1cdTAwM2VyeF90cGEgPSBremFsbG9jX29ianMoc3RydWN0IGJueHRfdHBhX2luZm8sIGJwLVx1MDAzZW1heF90cGEpO1xuK1x0cnhyLVx1MDAzZXJ4X3RwYSA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgYm54dF90cGFfaW5mbyxcbitcdFx0XHRcdCAgIGJwLVx1MDAzZW1heF90cGFfcm91bmR1cF9zaXplKTtcbiBcdGlmICghcnhyLVx1MDAzZXJ4X3RwYSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4gXHRpZiAoIShicC1cdTAwM2VmbGFncyBcdTAwMjYgQk5YVF9GTEFHX0NISVBfUDVfUExVUykpXG4gXHRcdHJldHVybiAwO1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgYnAtXHUwMDNlbWF4X3RwYTsgaSsrKSB7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBicC1cdTAwM2VtYXhfdHBhX3JvdW5kdXBfc2l6ZTsgaSsrKSB7XG4gXHRcdGFnZyA9IGt6YWxsb2Nfb2JqcygqYWdnLCBNQVhfU0tCX0ZSQUdTKTtcbiBcdFx0aWYgKCFhZ2cpXG4gXHRcdFx0cmV0dXJuIC1FTk9NRU07XG5AQCAtMzgzMiw2ICszODM1LDkgQEAgc3RhdGljIGludCBibnh0X2FsbG9jX3RwYV9pbmZvKHN0cnVjdCBibnh0ICpicClcbiBcbiBcdGJwLVx1MDAzZW1heF90cGEgPSBNQVhfVFBBO1xuIFx0aWYgKGJwLVx1MDAzZWZsYWdzIFx1MDAyNiBCTlhUX0ZMQUdfQ0hJUF9QNV9QTFVTKSB7XG4rXHRcdC8qIFRQQSBpcyBub3Qgc3VwcG9ydGVkIGF0IGFsbCwgc28gdGhlcmUgaXMgbm90aGluZyB0b1xuK1x0XHQgKiBhbGxvY2F0ZS5cbitcdFx0ICovXG4gXHRcdGlmICghYnAtXHUwMDNlbWF4X3RwYV92MilcbiBcdFx0XHRyZXR1cm4gMDtcbiBcdFx0YnAtXHUwMDNlbWF4X3RwYSA9IG1pbl90KHUxNiwgYnAtXHUwMDNlbWF4X3RwYV92MiwgTUFYX1RQQV9QNSk7XG5AQCAtMzgzOSw2ICszODQ1LDcgQEAgc3RhdGljIGludCBibnh0X2FsbG9jX3RwYV9pbmZvKHN0cnVjdCBibnh0ICpicClcbiBcdFx0aWYgKGJwLVx1MDAzZW1heF90cGEgXHUwMDNjPSAzMiBcdTAwMjZcdTAwMjYgQk5YVF9DSElQX1A1KGJwKSBcdTAwMjZcdTAwMjYgIUJOWFRfTlBBUihicCkpXG4gXHRcdFx0YnAtXHUwMDNlbWF4X3RwYSA9IE1BWF9UUEFfUDU7XG4gXHR9XG4rXHRicC1cdTAwM2VtYXhfdHBhX3JvdW5kdXBfc2l6ZSA9IHJvdW5kdXBfcG93X29mX3R3byhicC1cdTAwM2VtYXhfdHBhKTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGJwLVx1MDAzZXJ4X25yX3JpbmdzOyBpKyspIHtcbiBcdFx0c3RydWN0IGJueHRfcnhfcmluZ19pbmZvICpyeHIgPSBcdTAwMjZicC1cdTAwM2VyeF9yaW5nW2ldO1xuQEAgLTQ1NTEsNyArNDU1OCw3IEBAIHN0YXRpYyBpbnQgYm54dF9hbGxvY19vbmVfdHBhX2luZm9fZGF0YShzdHJ1Y3QgYm54dCAqYnAsXG4gXHR1OCAqZGF0YTtcbiBcdGludCBpO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgYnAtXHUwMDNlbWF4X3RwYTsgaSsrKSB7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBicC1cdTAwM2VtYXhfdHBhX3JvdW5kdXBfc2l6ZTsgaSsrKSB7XG4gXHRcdGRhdGEgPSBfX2JueHRfYWxsb2NfcnhfZnJhZyhicCwgXHUwMDI2bWFwcGluZywgcnhyLFxuIFx0XHRcdFx0XHQgICAgR0ZQX0tFUk5FTCk7XG4gXHRcdGlmICghZGF0YSlcbkBAIC01MDA2LDcgKzUwMTMsOCBAQCB2b2lkIGJueHRfc2V0X3J4X3NrYl9tb2RlKHN0cnVjdCBibnh0ICpicCwgYm9vbCBwYWdlX21vZGUpXG4gXHRcdGJueHRfZ2V0X21heF9yaW5ncyhicCwgXHUwMDI2cngsIFx1MDAyNnR4LCB0cnVlKTtcbiBcdFx0aWYgKHJ4IFx1MDAzZSAxKSB7XG4gXHRcdFx0YnAtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+Qk5YVF9GTEFHX05PX0FHR19SSU5HUztcbi1cdFx0XHRicC1cdTAwM2VkZXYtXHUwMDNlaHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9MUk87XG4rXHRcdFx0aWYgKEJOWFRfU1VQUE9SVFNfVFBBKGJwKSlcbitcdFx0XHRcdGJwLVx1MDAzZWRldi1cdTAwM2Vod19mZWF0dXJlcyB8PSBORVRJRl9GX0xSTztcbiBcdFx0fVxuIFx0fVxuIFxuQEAgLTExMzQwLDggKzExMzQ4LDEzIEBAIHN0YXRpYyBpbnQgYm54dF9zaHV0ZG93bl9uaWMoc3RydWN0IGJueHQgKmJwLCBib29sIGlycV9yZV9pbml0KVxuIFxuIHN0YXRpYyBpbnQgYm54dF9pbml0X25pYyhzdHJ1Y3QgYm54dCAqYnAsIGJvb2wgaXJxX3JlX2luaXQpXG4ge1xuK1x0aW50IHJjO1xuK1xuIFx0Ym54dF9pbml0X2NwX3JpbmdzKGJwKTtcbi1cdGJueHRfaW5pdF9yeF9yaW5ncyhicCk7XG4rXHRyYyA9IGJueHRfaW5pdF9yeF9yaW5ncyhicCk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbiBcdGJueHRfaW5pdF90eF9yaW5ncyhicCk7XG4gXHRibnh0X2luaXRfcmluZ19ncnBzKGJwLCBpcnFfcmVfaW5pdCk7XG4gXHRibnh0X2luaXRfdm5pY3MoYnApO1xuQEAgLTE0NjAzLDcgKzE0NjE2LDE0IEBAIHN0YXRpYyB2b2lkIGJueHRfcnhfcmluZ19yZXNldChzdHJ1Y3QgYm54dCAqYnApXG4gXHRcdHJ4ci1cdTAwM2VyeF9zd19hZ2dfcHJvZCA9IDA7XG4gXHRcdHJ4ci1cdTAwM2VyeF9uZXh0X2NvbnMgPSAwO1xuIFx0XHRyeHItXHUwMDNlYm5hcGktXHUwMDNlaW5fcmVzZXQgPSBmYWxzZTtcbi1cdFx0Ym54dF9hbGxvY19vbmVfcnhfcmluZyhicCwgaSk7XG4rXHRcdHJjID0gYm54dF9hbGxvY19vbmVfcnhfcmluZyhicCwgaSk7XG4rXHRcdGlmIChyYykge1xuK1x0XHRcdG5ldGRldl93YXJuKGJwLVx1MDAzZWRldiwgXCJSWCByaW5nIHJlc2V0IGZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXJzLCByYyA9ICVkLCBmYWxsaW5nIGJhY2sgdG8gZ2xvYmFsIHJlc2V0XFxuXCIsXG4rXHRcdFx0XHQgICAgcmMpO1xuK1x0XHRcdGJueHRfcmVzZXRfdGFzayhicCwgdHJ1ZSk7XG4rXHRcdFx0Ym54dF9ydG5sX3VubG9ja19zcChicCk7XG4rXHRcdFx0cmV0dXJuO1xuK1x0XHR9XG4gXHRcdGNwciA9IFx1MDAyNnJ4ci1cdTAwM2VibmFwaS1cdTAwM2VjcF9yaW5nO1xuIFx0XHRjcHItXHUwMDNlc3dfc3RhdHMtXHUwMDNlcngucnhfcmVzZXRzKys7XG4gXHRcdGlmIChicC1cdTAwM2VmbGFncyBcdTAwMjYgQk5YVF9GTEFHX0FHR19SSU5HUylcbkBAIC0xNjMzMiw2ICsxNjM1Miw4IEBAIHN0YXRpYyBpbnQgYm54dF9xdWV1ZV9tZW1fYWxsb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdGNsb25lLVx1MDAzZW5lZWRfaGVhZF9wb29sID0gZmFsc2U7XG4gXHRjbG9uZS1cdTAwM2VyeF9wYWdlX3NpemUgPSBxY2ZnLVx1MDAzZXJ4X3BhZ2Vfc2l6ZTtcbiBcdGNsb25lLVx1MDAzZXJ4X2FnZ19ibWFwID0gTlVMTDtcbitcdGNsb25lLVx1MDAzZXJ4X3RwYSA9IE5VTEw7XG4rXHRjbG9uZS1cdTAwM2VyeF90cGFfaWR4X21hcCA9IE5VTEw7XG4gXG4gXHRyYyA9IGJueHRfYWxsb2NfcnhfcGFnZV9wb29sKGJwLCBjbG9uZSwgcnhyLVx1MDAzZXBhZ2VfcG9vbC1cdTAwM2VwLm5pZCk7XG4gXHRpZiAocmMpXG5AQCAtMTYzNzUsMTEgKzE2Mzk3LDE2IEBAIHN0YXRpYyBpbnQgYm54dF9xdWV1ZV9tZW1fYWxsb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdGJueHRfYWxsb2Nfb25lX3J4X3Jpbmdfc2tiKGJwLCBjbG9uZSwgaWR4KTtcbiBcdGlmIChicC1cdTAwM2VmbGFncyBcdTAwMjYgQk5YVF9GTEFHX0FHR19SSU5HUylcbiBcdFx0Ym54dF9hbGxvY19vbmVfcnhfcmluZ19uZXRtZW0oYnAsIGNsb25lLCBpZHgpO1xuLVx0aWYgKGJwLVx1MDAzZWZsYWdzIFx1MDAyNiBCTlhUX0ZMQUdfVFBBKVxuLVx0XHRibnh0X2FsbG9jX29uZV90cGFfaW5mb19kYXRhKGJwLCBjbG9uZSk7XG4rXHRpZiAoYnAtXHUwMDNlZmxhZ3MgXHUwMDI2IEJOWFRfRkxBR19UUEEpIHtcbitcdFx0cmMgPSBibnh0X2FsbG9jX29uZV90cGFfaW5mb19kYXRhKGJwLCBjbG9uZSk7XG4rXHRcdGlmIChyYylcbitcdFx0XHRnb3RvIGVycl9mcmVlX3J4X3Jpbmdfc2ticztcbitcdH1cbiBcbiBcdHJldHVybiAwO1xuIFxuK2Vycl9mcmVlX3J4X3Jpbmdfc2ticzpcbitcdGJueHRfZnJlZV9vbmVfcnhfcmluZ19za2JzKGJwLCBjbG9uZSk7XG4gZXJyX2ZyZWVfdHBhX2luZm86XG4gXHRibnh0X2ZyZWVfb25lX3RwYV9pbmZvKGJwLCBjbG9uZSk7XG4gZXJyX2ZyZWVfcnhfYWdnX3Jpbmc6XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuaFxuaW5kZXggYWI4OTRmOGFkZGVmNS4uZGU0NmI0MmQ3Yzk4YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuaFxuQEAgLTc4OSw3ICs3ODksNiBAQCBzdHJ1Y3QgbnFlX2NuIHtcbiBcbiAjZGVmaW5lIE1BWF9UUEFcdFx0NjRcbiAjZGVmaW5lIE1BWF9UUEFfUDVcdDI1NlxuLSNkZWZpbmUgTUFYX1RQQV9QNV9NQVNLXHQoTUFYX1RQQV9QNSAtIDEpXG4gI2RlZmluZSBNQVhfVFBBX1NFR1NfUDVcdDB4M2ZcbiBcbiAjaWYgKEJOWFRfUEFHRV9TSElGVCA9PSAxNilcbkBAIC0yMzgwLDYgKzIzNzksNyBAQCBzdHJ1Y3QgYm54dCB7XG4gXG4gXHR1MTZcdFx0XHRtYXhfdHBhX3YyO1xuIFx0dTE2XHRcdFx0bWF4X3RwYTtcbitcdHUxNlx0XHRcdG1heF90cGFfcm91bmR1cF9zaXplO1xuIFx0dTMyXHRcdFx0cnhfYnVmX3NpemU7XG4gXHR1MzJcdFx0XHRyeF9idWZfdXNlX3NpemU7XHQvKiB1c2VhYmxlIHNpemUgKi9cbiBcdHUxNlx0XHRcdHJ4X29mZnNldDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEzOjAyOjIxLjY3NzIzMjM3OVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwNjQ1MjY4MjIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2g6IEEgUXVpY2sgQXNzZXNzbWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgcGF0Y2ggaXMgd29ydGggZnV6emluZywgYW5kIHRoZSBjcml0ZXJpYSBhcmUgcHJldHR5IGNsZWFyLiBJJ3ZlIGdvdCBhIHNldCBvZiBydWxlczogaWYgdGhlIGNoYW5nZXMgYXJlIGp1c3QgZG9jdW1lbnRhdGlvbiwgbG9nZ2luZywgZGVjb3JhdGl2ZSB0d2Vha3MsIHVucmVhY2hhYmxlIGNvZGUsIG9yIHRlYXJkb3duIGNhbGxiYWNrcywgaXQncyBhIFwibm8tZ29cIi4gVGhlIGJpZyBvbmUgaGVyZSBpcyBcInZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIHRoYXQgbmVlZCBwaHlzaWNhbCBoYXJkd2FyZVwiLiBJICpyZWFsbHkqIG5lZWQgdG8gZm9jdXMgb24gdGhpcyBvbmUuXG5cbkxvb2tpbmcgYXQgdGhlIGZpbGUgbGlzdCwgaXQncyBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmNgIGFuZCBgYm54dC5oYC4gU28sIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgYGJueHRgIGRyaXZlciwgd2hpY2ggZnJvbSBtZW1vcnksIGlzIHRoZSBCcm9hZGNvbSBOZXRYdHJlbWUuIEkga25vdyB0aGF0IGZhbWlseSBvZiBOSUNzIHByZXR0eSB3ZWxsLCBpdCBjb3ZlcnMgdGhlIEJDTTU3M3h4LzU3NHh4LzU3NXh4IGNoaXBzLiBUaG9zZSBhcmUgdGhlIDEwLzI1LzQwLzUwLzEwMC8yMDAvNDAwR2IgRXRoZXJuZXQgTklDcy5cblxuTm93LCB0aGUgcXVlc3Rpb24gaXM6IGlzIGBibnh0YCBhIHZlbmRvci1zcGVjaWZpYyBkcml2ZXIgdGhhdCBuZWVkcyBhIHBoeXNpY2FsIFBDSWUgY2FyZD8gVGhhdCdzIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBoZXJlLiBMZXQncyByZW1lbWJlciB3aGF0IFFFTVUgKmRvZXMqIGVtdWxhdGUsIHRob3NlIGFyZSB0aGUgY29tbW9uIG9uZXMsIGxpa2UgZTEwMDAsIHZpcnRpbywgYW5kIHJ0bDgxMzkuXG5cbk9rYXksIGlzIGJueHQgZW11bGF0ZWQgYnkgc3RhbmRhcmQgUUVNVT8gTm8hIERlZmluaXRlbHkgbm90LiBCcm9hZGNvbSBOZXRYdHJlbWUgQkNNNTczMHgvQkNNNTc0MHggKE5ldFh0cmVtZS1FIC8gTmV0WHRyZW1lLUMpIGFyZSBlbnRlcnByaXNlL1NtYXJ0TklDL2hpZ2gtc3BlZWQgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gUUVNVSBvciBHQ0UuXG5cbkFscmlnaHQsIGJhY2sgdG8gdGhlIHJ1bGVzLiBcIlZlbmRvci1zcGVjaWZpYyBQQ0llLi4uXCIuIEFuZCAqYm54dCogaXMgYSB2ZW5kb3Itc3BlY2lmaWMgQnJvYWRjb20gRXRoZXJuZXQgZHJpdmVyIGZvciB0aGVpciBOZXRYdHJlbWUgbGluZS5cblxuU28sIHRoaXMgcGF0Y2ggbW9kaWZpZXMgY29kZSB0aGF0IGZhbGxzIGRpcmVjdGx5IHVuZGVyIHRoYXQgY2F0ZWdvcnk6IHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSByZXF1aXJpbmcgcGh5c2ljYWwgUENJZS4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgY29ycmVjdCwganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIExldCdzIGxvb2sgYXQgdGhlIEtjb25maWcgZmlsZSBmb3IgYGJueHRgIHRvIHZlcmlmeS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTAyMywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEzOjAyOjMyLjMyMjUwMjk2MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTc4ODA5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQk5YVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZz0xOTU9Y29uZmlnIFNZU1RFTVBPUlRcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjA2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc6MjA3OmNvbmZpZyBCTlhUXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yMDgtXFx0dHJpc3RhdGUgXFxcIkJyb2FkY29tIE5ldFh0cmVtZS1DL0Ugc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjIxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc6MjIyOmNvbmZpZyBCTlhUX1NSSU9WXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yMjMtXFx0Ym9vbCBcXFwiQnJvYWRjb20gTmV0WHRyZW1lLUMvRSBTUi1JT1Ygc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjMwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc6MjMxOmNvbmZpZyBCTlhUX0ZMT1dFUl9PRkZMT0FEXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yMzItXFx0Ym9vbCBcXFwiVEMgRmxvd2VyIG9mZmxvYWQgc3VwcG9ydCBmb3IgTmV0WHRyZW1lLUMvRVxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjM5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc6MjQwOmNvbmZpZyBCTlhUX0RDQlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjQxLVxcdGJvb2wgXFxcIkRhdGEgQ2VudGVyIEJyaWRnaW5nIChEQ0IpIFN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTI0OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnOjI1MDpjb25maWcgQk5YVF9IV01PTlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjUxLVxcdGJvb2wgXFxcIkJyb2FkY29tIE5ldFh0cmVtZS1DL0UgSFdNT04gc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTM6MDI6MzIuMzc4Mjk3Mzg3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTI4MTIxODAzMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQk5YVCBEcml2ZXIgRnV6emluZyBBc3Nlc3NtZW50KipcblxuT2theSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhpcy4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoZSBzcGVjaWZpYyBkcml2ZXIgaW4gcXVlc3Rpb24g4oCTIHllcCwgaXQncyBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZ2AsIGFuZCB0aGUgZHJpdmVyIHdlJ3JlIGRlYWxpbmcgd2l0aCBpcyBgQ09ORklHX0JOWFRgLCB0aGUgQnJvYWRjb20gTmV0WHRyZW1lLUMvRSBkcml2ZXIuIFRoYXQncyBhIHZlbmRvci1zcGVjaWZpYyBkcml2ZXIsIGZvY3VzaW5nIG9uIFBDSWUgTklDcyBmcm9tIEJyb2FkY29tLCBuYW1lbHkgdGhlIEJDTTU3M3h4LCBCQ001NzR4eCwgQkNNNTc1eHgsIGFuZCBzaW1pbGFyIGhhcmR3YXJlLlxuXG5UaGUgY3J1Y2lhbCBwb2ludCBoZXJlIGlzIHRoYXQgdGhpcyBkcml2ZXIgKnJlcXVpcmVzKiBwaHlzaWNhbCBCcm9hZGNvbSBQQ0llIGhhcmR3YXJlLiBUaGlzIGltbWVkaWF0ZWx5IGZsYWdzIGEgc2lnbmlmaWNhbnQgaHVyZGxlLiBTdGFuZGFyZCBRRU1VIHNldHVwcywgYW5kIGNlcnRhaW5seSB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyBsaWtlIHRob3NlIG9uIEdDRSwgKmRvIG5vdCogZW11bGF0ZSB0aGlzIHNwZWNpZmljIGhhcmR3YXJlLiBXZSdkIGJlIHRyeWluZyB0byB0ZXN0IHNvbWV0aGluZyB0aGF0IGZ1bmRhbWVudGFsbHkgaXNuJ3QgcHJlc2VudCBpbiB0aGUgZnV6emluZyBlbnZpcm9ubWVudCwgd2hpY2ggaXMgYSBub24tc3RhcnRlci5cblxuU28sIGxldCBtZSBydW4gdGhyb3VnaCB0aGUgcHJvbXB0IHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nOiBgV29ydGhGdXp6aW5nOiBmYWxzZWAsIGBGb2N1c1N5bWJvbHM6IFtdYCwgYEVuYWJsZUNvbmZpZ3M6IFtdYCwgYW5kIHRoZSByZWFzb25pbmcgaXMgY29uY2lzZSBhbmQgYWNjdXJhdGU6IHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSByZXF1aXJpbmcgcGh5c2ljYWwgUENJZSBCcm9hZGNvbSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gdGhlIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzLlxuXG5BbHJpZ2h0LCB3aXRoIHRoYXQgY29uZmlybWVkLCBJJ20gY29uZmlkZW50IGluIHRoZSBhc3Nlc3NtZW50LiBUaW1lIHRvIHJ1biBhIHNhbml0eSBjaGVjayBvbiB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzIGFuZCBmaW5hbGl6ZSB0aGUgY2FsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjYxOSwiT3V0cHV0VG9rZW5zIjo3OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMzowMjo0NS4xOTA0ODAyNjhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCcm9hZGNvbSBOZXRYdHJlbWUtQy9FIChibnh0KSBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgTklDIGRyaXZlciByZXF1aXJpbmcgcGh5c2ljYWwgQnJvYWRjb20gaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQnJvYWRjb20gTmV0WHRyZW1lLUMvRSAoYm54dCkgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIE5JQyBkcml2ZXIgcmVxdWlyaW5nIHBoeXNpY2FsIEJyb2FkY29tIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTM6MDI6NDUuMTkwNTEwOTc5WiIsIlNlcSI6NywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowjkvk2[1] Phase: Running StartedAt: 2026-09-02 13:02:56 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjkvk2[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-02 13:02:56 +0000 UTC FinishedAt: 2026-09-02 13:03:01 +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,}