Name: series-workflow9p4jl Phase: Failed StartedAt: 2026-08-07 21:43:46 +0000 UTC FinishedAt: 2026-08-07 22:04:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9p4jl[0] Phase: Succeeded StartedAt: 2026-08-07 21:43:46 +0000 UTC FinishedAt: 2026-08-07 22:04:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9p4jl[0].run-triage Phase: Succeeded StartedAt: 2026-08-07 21:43:46 +0000 UTC FinishedAt: 2026-08-07 22:04:43 +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+CgkJCTx0ZD4yMDI2LzA4LzA3IDIyOjAzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1pY3Jvc29mdCBBenVyZSBOZXR3b3JrIEFkYXB0ZXIgKE1BTkEpIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBkZXZpY2UgZHJpdmVyLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudHMgdXNlZCBieSBzeXprYWxsZXIsIG1ha2luZyB0aGUgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBkdXJpbmcgc3RhbmRhcmQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjI6MDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiZDhiZWNkMDViMjIwZWU0YzBjYzBmMzJkNDE4MmQ1OGMyNTZmZWVhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAyMjowMzo0NCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jXG5pbmRleCBhMzhkNGJiNzQ2MjFmLi5lZDlhZjMxNGU0ZWRlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jXG5AQCAtMTEsNiAmIzQzOzExLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tc2kuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lycWRvbWFpbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXhwb3J0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdWFjY2Vzcy5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjbmV0L21hbmEvbWFuYS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L21hbmEvaHdfY2hhbm5lbC5oXHUwMDNlXG5AQCAtMzc0LDI4ICYjNDM7Mzc1LDk2IEBAIGludCBtYW5hX2dkX3NlbmRfcmVxdWVzdChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYywgdTMyIHJlcV9sZW4sIGNvbnN0IHZvaWQgKnJlcSxcbiBFWFBPUlRfU1lNQk9MX05TKG1hbmFfZ2Rfc2VuZF9yZXF1ZXN0LCBcJiMzNDtORVRfTUFOQVwmIzM0Oyk7XG4gXG4gaW50IG1hbmFfZ2RfYWxsb2NfbWVtb3J5KHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjLCB1bnNpZ25lZCBpbnQgbGVuZ3RoLFxuLVx0XHRcdCBzdHJ1Y3QgZ2RtYV9tZW1faW5mbyAqZ21pKVxuJiM0MztcdFx0XHQgc3RydWN0IGdkbWFfbWVtX2luZm8gKmdtaSwgYm9vbCBhbGxvd19zY2F0dGVyKVxuIHtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgbnBhZ2VzLCBpO1xuIFx0ZG1hX2FkZHJfdCBkbWFfaGFuZGxlO1xuJiM0MztcdGJvb2wgY2FuX2ZhbGxiYWNrO1xuIFx0dm9pZCAqYnVmO1xuIFxuIFx0aWYgKGxlbmd0aCBcdTAwM2MgTUFOQV9QQUdFX1NJWkUgfHwgIWlzX3Bvd2VyX29mXzIobGVuZ3RoKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRnbWktXHUwMDNlZGV2ID0gZ2MtXHUwMDNlZGV2O1xuLVx0YnVmID0gZG1hX2FsbG9jX2NvaGVyZW50KGdtaS1cdTAwM2VkZXYsIGxlbmd0aCwgXHUwMDI2ZG1hX2hhbmRsZSwgR0ZQX0tFUk5FTCk7XG4tXHRpZiAoIWJ1ZilcbiYjNDM7XG4mIzQzO1x0LyogQW4gYWxsb2NhdGlvbiB0aGF0IGZpdHMgaW4gb25lIHBhZ2UgZG9lcyBub3QgYmVuZWZpdCBmcm9tXG4mIzQzO1x0ICogZmFsbGJhY2suXG4mIzQzO1x0ICovXG4mIzQzO1x0Y2FuX2ZhbGxiYWNrID0gYWxsb3dfc2NhdHRlciBcdTAwMjZcdTAwMjYgbGVuZ3RoIFx1MDAzZSBQQUdFX1NJWkU7XG4mIzQzO1xuJiM0MztcdC8qIFdhcm4gb25seSB3aGVuIHRoZXJlIGlzIG5vIGZhbGxiYWNrIHRvIHJlc2N1ZSB0aGUgZmFpbHVyZS4gKi9cbiYjNDM7XHRidWYgPSBkbWFfYWxsb2NfY29oZXJlbnQoZ21pLVx1MDAzZWRldiwgbGVuZ3RoLCBcdTAwMjZkbWFfaGFuZGxlLFxuJiM0MztcdFx0XHRcdCBHRlBfS0VSTkVMIHxcbiYjNDM7XHRcdFx0XHQgKGNhbl9mYWxsYmFjayA/IF9fR0ZQX05PV0FSTiA6IDApKTtcbiYjNDM7XHRpZiAoYnVmKSB7XG4mIzQzO1x0XHRnbWktXHUwMDNlZG1hX2hhbmRsZSA9IGRtYV9oYW5kbGU7XG4mIzQzO1x0XHRnbWktXHUwMDNldmlydF9hZGRyID0gYnVmO1xuJiM0MztcdFx0Z21pLVx1MDAzZWxlbmd0aCA9IGxlbmd0aDtcbiYjNDM7XHRcdGdtaS1cdTAwM2Vucl9wYWdlcyA9IDA7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghY2FuX2ZhbGxiYWNrKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdGdtaS1cdTAwM2VkbWFfaGFuZGxlID0gZG1hX2hhbmRsZTtcbi1cdGdtaS1cdTAwM2V2aXJ0X2FkZHIgPSBidWY7XG4mIzQzO1x0LyogbGVuZ3RoIGlzIGEgcG93ZXIgb2YgMiBhYm92ZSBQQUdFX1NJWkUsIHNvIHRoaXMgZGl2aWRlcyBleGFjdGx5LiAqL1xuJiM0MztcdG5wYWdlcyA9IGxlbmd0aCAvIFBBR0VfU0laRTtcbiYjNDM7XG4mIzQzO1x0Z21pLVx1MDAzZXBhZ2VzX3ZhID0ga3ZjYWxsb2MobnBhZ2VzLCBzaXplb2YoKmdtaS1cdTAwM2VwYWdlc192YSksIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghZ21pLVx1MDAzZXBhZ2VzX3ZhKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdGdtaS1cdTAwM2VwYWdlc19kbWEgPSBrdmNhbGxvYyhucGFnZXMsIHNpemVvZigqZ21pLVx1MDAzZXBhZ2VzX2RtYSksIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghZ21pLVx1MDAzZXBhZ2VzX2RtYSlcbiYjNDM7XHRcdGdvdG8gZnJlZV92YTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnBhZ2VzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0Z21pLVx1MDAzZXBhZ2VzX3ZhW2ldID0gZG1hX2FsbG9jX2NvaGVyZW50KGdtaS1cdTAwM2VkZXYsIFBBR0VfU0laRSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgXHUwMDI2Z21pLVx1MDAzZXBhZ2VzX2RtYVtpXSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0XHRpZiAoIWdtaS1cdTAwM2VwYWdlc192YVtpXSlcbiYjNDM7XHRcdFx0Z290byBmcmVlX3BhZ2VzO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZGV2X2luZm9fcmF0ZWxpbWl0ZWQoZ21pLVx1MDAzZWRldixcbiYjNDM7XHRcdFx0ICAgICBcJiMzNDtjb250aWd1b3VzICV1LWJ5dGUgRE1BIGFsbG9jIGZhaWxlZDsgdXNpbmcgJXUgc2NhdHRlcmVkIHBhZ2VzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgIGxlbmd0aCwgbnBhZ2VzKTtcbiYjNDM7XG4mIzQzO1x0Z21pLVx1MDAzZXZpcnRfYWRkciA9IE5VTEw7XG4mIzQzO1x0Z21pLVx1MDAzZWRtYV9oYW5kbGUgPSAwO1xuIFx0Z21pLVx1MDAzZWxlbmd0aCA9IGxlbmd0aDtcbiYjNDM7XHRnbWktXHUwMDNlbnJfcGFnZXMgPSBucGFnZXM7XG4gXG4gXHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2ZyZWVfcGFnZXM6XG4mIzQzO1x0d2hpbGUgKGktLSlcbiYjNDM7XHRcdGRtYV9mcmVlX2NvaGVyZW50KGdtaS1cdTAwM2VkZXYsIFBBR0VfU0laRSwgZ21pLVx1MDAzZXBhZ2VzX3ZhW2ldLFxuJiM0MztcdFx0XHRcdCAgZ21pLVx1MDAzZXBhZ2VzX2RtYVtpXSk7XG4mIzQzO1x0a3ZmcmVlKGdtaS1cdTAwM2VwYWdlc19kbWEpO1xuJiM0MztcdGdtaS1cdTAwM2VwYWdlc19kbWEgPSBOVUxMO1xuJiM0MztmcmVlX3ZhOlxuJiM0MztcdGt2ZnJlZShnbWktXHUwMDNlcGFnZXNfdmEpO1xuJiM0MztcdGdtaS1cdTAwM2VwYWdlc192YSA9IE5VTEw7XG4mIzQzO1x0cmV0dXJuIC1FTk9NRU07XG4gfVxuIFxuIHZvaWQgbWFuYV9nZF9mcmVlX21lbW9yeShzdHJ1Y3QgZ2RtYV9tZW1faW5mbyAqZ21pKVxuIHtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaTtcbiYjNDM7XG4mIzQzO1x0aWYgKGdtaS1cdTAwM2Vucl9wYWdlcyBcdTAwM2UgMCkge1xuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZ21pLVx1MDAzZW5yX3BhZ2VzOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdFx0ZG1hX2ZyZWVfY29oZXJlbnQoZ21pLVx1MDAzZWRldiwgUEFHRV9TSVpFLCBnbWktXHUwMDNlcGFnZXNfdmFbaV0sXG4mIzQzO1x0XHRcdFx0XHQgIGdtaS1cdTAwM2VwYWdlc19kbWFbaV0pO1xuJiM0MztcdFx0a3ZmcmVlKGdtaS1cdTAwM2VwYWdlc192YSk7XG4mIzQzO1x0XHRrdmZyZWUoZ21pLVx1MDAzZXBhZ2VzX2RtYSk7XG4mIzQzO1x0XHRnbWktXHUwMDNlcGFnZXNfdmEgPSBOVUxMO1xuJiM0MztcdFx0Z21pLVx1MDAzZXBhZ2VzX2RtYSA9IE5VTEw7XG4mIzQzO1x0XHRnbWktXHUwMDNlbnJfcGFnZXMgPSAwO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRkbWFfZnJlZV9jb2hlcmVudChnbWktXHUwMDNlZGV2LCBnbWktXHUwMDNlbGVuZ3RoLCBnbWktXHUwMDNldmlydF9hZGRyLFxuIFx0XHRcdCAgZ21pLVx1MDAzZWRtYV9oYW5kbGUpO1xuIH1cbkBAIC03NTMsMTEgJiM0Mzs4MjIsNzMgQEAgaW50IG1hbmFfc2NoZWR1bGVfc2Vydl93b3JrKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjLCBlbnVtIGdkbWFfZXFlX3R5cGUgdHlwZSlcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7LyogUmV0dXJuIHRoZSBDUFUgYWRkcmVzcyBvZiBieXRlIEBvZmZzZXQgd2l0aGluIGEgcXVldWUmIzM5O3MgcmluZyBidWZmZXIuICovXG4mIzQzO3N0YXRpYyB2b2lkICptYW5hX2dkX3JpbmdfcHRyKGNvbnN0IHN0cnVjdCBnZG1hX3F1ZXVlICpxLCB1MzIgb2Zmc2V0KVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGdkbWFfbWVtX2luZm8gKmdtaSA9IFx1MDAyNnEtXHUwMDNlbWVtX2luZm87XG4mIzQzO1xuJiM0MztcdGlmIChnbWktXHUwMDNlbnJfcGFnZXMgXHUwMDNlIDApXG4mIzQzO1x0XHRyZXR1cm4gKHU4ICopZ21pLVx1MDAzZXBhZ2VzX3ZhW29mZnNldCAvIFBBR0VfU0laRV0gJiM0MztcbiYjNDM7XHRcdCAgICAgICAob2Zmc2V0IFx1MDAyNiAoUEFHRV9TSVpFIC0gMSkpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcS1cdTAwM2VxdWV1ZV9tZW1fcHRyICYjNDM7IG9mZnNldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogTnVtYmVyIG9mIGJ5dGVzIGZyb20gQG9mZnNldCB0byB0aGUgZW5kIG9mIHRoZSBDUFUtY29udGlndW91cyByZWdpb246IHRoZVxuJiM0MzsgKiByZXN0IG9mIHRoZSByaW5nLCBvciB0aGUgcmVzdCBvZiB0aGUgY3VycmVudCBwYWdlIHdoZW4gc2NhdHRlcmVkLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHUzMiBtYW5hX2dkX3JpbmdfY29udGlnX2F2YWlsKGNvbnN0IHN0cnVjdCBnZG1hX3F1ZXVlICpxLCB1MzIgb2Zmc2V0KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHEtXHUwMDNlbWVtX2luZm8ubnJfcGFnZXMgXHUwMDNlIDApXG4mIzQzO1x0XHRyZXR1cm4gUEFHRV9TSVpFIC0gKG9mZnNldCBcdTAwMjYgKFBBR0VfU0laRSAtIDEpKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHEtXHUwMDNlcXVldWVfc2l6ZSAtIG9mZnNldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogQ29weSB1cCB0byBAY291bnQgYnl0ZXMgZnJvbSByaW5nIG9mZnNldCAqQHBvcyBvZiBAcSBpbnRvIHVzZXIgYnVmZmVyIEBidWYsXG4mIzQzOyAqIHNvIGEgc2NhdHRlcmVkIHJpbmcgcmVhZHMgYmFjayBhcyBpZiBpdCB3ZXJlIGNvbnRpZ3VvdXMuIFJldHVybnMgYnl0ZXNcbiYjNDM7ICogY29waWVkLCAwIGF0IGVuZCBvZiByaW5nLCBvciBhIG5lZ2F0aXZlIGVycm5vLlxuJiM0MzsgKi9cbiYjNDM7c3NpemVfdCBtYW5hX2dkX3JlYWRfcmluZyhzdHJ1Y3QgZ2RtYV9xdWV1ZSAqcSwgY2hhciBfX3VzZXIgKmJ1ZixcbiYjNDM7XHRcdFx0ICBzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIHNpemUgPSBxLVx1MDAzZXF1ZXVlX3NpemU7XG4mIzQzO1x0bG9mZl90IG9mZiA9ICpwb3M7XG4mIzQzO1x0c2l6ZV90IGNvcGllZCA9IDA7XG4mIzQzO1xuJiM0MztcdGlmIChvZmYgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRpZiAob2ZmIFx1MDAzZT0gc2l6ZSB8fCAhY291bnQpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRjb3VudCA9IG1pbl90KHNpemVfdCwgY291bnQsIHNpemUgLSBvZmYpO1xuJiM0MztcbiYjNDM7XHR3aGlsZSAoY291bnQpIHtcbiYjNDM7XHRcdHUzMiBvZmZzZXQgPSBvZmY7XG4mIzQzO1x0XHR1MzIgYXZhaWwgPSBtYW5hX2dkX3JpbmdfY29udGlnX2F2YWlsKHEsIG9mZnNldCk7XG4mIzQzO1x0XHRzaXplX3QgY2h1bmsgPSBtaW5fdChzaXplX3QsIGNvdW50LCBhdmFpbCk7XG4mIzQzO1x0XHRzaXplX3QgbGVmdCA9IGNvcHlfdG9fdXNlcihidWYsIG1hbmFfZ2RfcmluZ19wdHIocSwgb2Zmc2V0KSxcbiYjNDM7XHRcdFx0XHRcdCAgIGNodW5rKTtcbiYjNDM7XG4mIzQzO1x0XHRjaHVuayAtPSBsZWZ0O1xuJiM0MztcdFx0YnVmICYjNDM7PSBjaHVuaztcbiYjNDM7XHRcdG9mZiAmIzQzOz0gY2h1bms7XG4mIzQzO1x0XHRjb3BpZWQgJiM0Mzs9IGNodW5rO1xuJiM0MztcdFx0Y291bnQgLT0gY2h1bms7XG4mIzQzO1x0XHRpZiAobGVmdClcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIWNvcGllZClcbiYjNDM7XHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcbiYjNDM7XHQqcG9zID0gb2ZmO1xuJiM0MztcdHJldHVybiBjb3BpZWQ7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgbWFuYV9nZF9wcm9jZXNzX2VxZShzdHJ1Y3QgZ2RtYV9xdWV1ZSAqZXEpXG4ge1xuIFx0dTMyIGhlYWQgPSBlcS1cdTAwM2VoZWFkICUgKGVxLVx1MDAzZXF1ZXVlX3NpemUgLyBHRE1BX0VRRV9TSVpFKTtcbiBcdHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjID0gZXEtXHUwMDNlZ2RtYV9kZXYtXHUwMDNlZ2RtYV9jb250ZXh0O1xuLVx0c3RydWN0IGdkbWFfZXFlICplcV9lcWVfcHRyID0gZXEtXHUwMDNlcXVldWVfbWVtX3B0cjtcbiBcdHVuaW9uIGdkbWFfZXFlX2luZm8gZXFlX2luZm87XG4gXHRlbnVtIGdkbWFfZXFlX3R5cGUgdHlwZTtcbiBcdHN0cnVjdCBnZG1hX2V2ZW50IGV2ZW50O1xuQEAgLTc2NSw3ICYjNDM7ODk2LDcgQEAgc3RhdGljIHZvaWQgbWFuYV9nZF9wcm9jZXNzX2VxZShzdHJ1Y3QgZ2RtYV9xdWV1ZSAqZXEpXG4gXHRzdHJ1Y3QgZ2RtYV9lcWUgKmVxZTtcbiBcdHUzMiBjcV9pZDtcbiBcbi1cdGVxZSA9IFx1MDAyNmVxX2VxZV9wdHJbaGVhZF07XG4mIzQzO1x0ZXFlID0gbWFuYV9nZF9yaW5nX3B0cihlcSwgaGVhZCAqIHNpemVvZigqZXFlKSk7XG4gXHRlcWVfaW5mby5hc191aW50MzIgPSBlcWUtXHUwMDNlZXFlX2luZm87XG4gXHR0eXBlID0gZXFlX2luZm8udHlwZTtcbiBcbkBAIC04MjksNyAmIzQzOzk2MCw2IEBAIHN0YXRpYyB2b2lkIG1hbmFfZ2RfcHJvY2Vzc19lcV9ldmVudHModm9pZCAqYXJnKVxuIHtcbiBcdHUzMiBvd25lcl9iaXRzLCBuZXdfYml0cywgb2xkX2JpdHM7XG4gXHR1bmlvbiBnZG1hX2VxZV9pbmZvIGVxZV9pbmZvO1xuLVx0c3RydWN0IGdkbWFfZXFlICplcV9lcWVfcHRyO1xuIFx0c3RydWN0IGdkbWFfcXVldWUgKmVxID0gYXJnO1xuIFx0c3RydWN0IGdkbWFfY29udGV4dCAqZ2M7XG4gXHRzdHJ1Y3QgZ2RtYV9lcWUgKmVxZTtcbkBAIC04MzksMTEgJiM0Mzs5NjksMTAgQEAgc3RhdGljIHZvaWQgbWFuYV9nZF9wcm9jZXNzX2VxX2V2ZW50cyh2b2lkICphcmcpXG4gXHRnYyA9IGVxLVx1MDAzZWdkbWFfZGV2LVx1MDAzZWdkbWFfY29udGV4dDtcbiBcbiBcdG51bV9lcWUgPSBlcS1cdTAwM2VxdWV1ZV9zaXplIC8gR0RNQV9FUUVfU0laRTtcbi1cdGVxX2VxZV9wdHIgPSBlcS1cdTAwM2VxdWV1ZV9tZW1fcHRyO1xuIFxuIFx0LyogUHJvY2VzcyB1cCB0byA1IEVRRXMgYXQgYSB0aW1lLCBhbmQgdXBkYXRlIHRoZSBIVyBoZWFkLiAqL1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgNTsgaSYjNDM7JiM0MzspIHtcbi1cdFx0ZXFlID0gXHUwMDI2ZXFfZXFlX3B0cltlcS1cdTAwM2VoZWFkICUgbnVtX2VxZV07XG4mIzQzO1x0XHRlcWUgPSBtYW5hX2dkX3JpbmdfcHRyKGVxLCAoZXEtXHUwMDNlaGVhZCAlIG51bV9lcWUpICogc2l6ZW9mKCplcWUpKTtcbiBcdFx0ZXFlX2luZm8uYXNfdWludDMyID0gZXFlLVx1MDAzZWVxZV9pbmZvO1xuIFx0XHRvd25lcl9iaXRzID0gZXFlX2luZm8ub3duZXJfYml0cztcbiBcbkBAIC0xMTA3LDcgJiM0MzsxMjM2LDcgQEAgaW50IG1hbmFfZ2RfY3JlYXRlX2h3Y19xdWV1ZShzdHJ1Y3QgZ2RtYV9kZXYgKmdkLFxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiBcdGdtaSA9IFx1MDAyNnF1ZXVlLVx1MDAzZW1lbV9pbmZvO1xuLVx0ZXJyID0gbWFuYV9nZF9hbGxvY19tZW1vcnkoZ2MsIHNwZWMtXHUwMDNlcXVldWVfc2l6ZSwgZ21pKTtcbiYjNDM7XHRlcnIgPSBtYW5hX2dkX2FsbG9jX21lbW9yeShnYywgc3BlYy1cdTAwM2VxdWV1ZV9zaXplLCBnbWksIGZhbHNlKTtcbiBcdGlmIChlcnIpIHtcbiBcdFx0ZGV2X2VycihnYy1cdTAwM2VkZXYsIFwmIzM0O0dETUEgcXVldWUgdHlwZTogJWQsIHNpemU6ICV1LCBnZG1hIG1lbW9yeSBhbGxvY2F0aW9uIGVycjogJWRcXG5cJiMzNDssXG4gXHRcdFx0c3BlYy1cdTAwM2V0eXBlLCBzcGVjLVx1MDAzZXF1ZXVlX3NpemUsIGVycik7XG5AQCAtMTE4Miw3ICYjNDM7MTMxMSw3IEBAIHN0YXRpYyBpbnQgbWFuYV9nZF9jcmVhdGVfZG1hX3JlZ2lvbihzdHJ1Y3QgZ2RtYV9kZXYgKmdkLFxuIFx0aWYgKGxlbmd0aCBcdTAwM2MgTUFOQV9QQUdFX1NJWkUgfHwgIWlzX3Bvd2VyX29mXzIobGVuZ3RoKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRpZiAoIU1BTkFfUEFHRV9BTElHTkVEKGdtaS1cdTAwM2V2aXJ0X2FkZHIpKVxuJiM0MztcdGlmIChnbWktXHUwMDNlbnJfcGFnZXMgPT0gMCBcdTAwMjZcdTAwMjYgIU1BTkFfUEFHRV9BTElHTkVEKGdtaS1cdTAwM2V2aXJ0X2FkZHIpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdGh3YyA9IGdjLVx1MDAzZWh3Yy5kcml2ZXJfZGF0YTtcbkBAIC0xMjAyLDggJiM0MzsxMzMxLDI0IEBAIHN0YXRpYyBpbnQgbWFuYV9nZF9jcmVhdGVfZG1hX3JlZ2lvbihzdHJ1Y3QgZ2RtYV9kZXYgKmdkLFxuIFx0cmVxLVx1MDAzZXBhZ2VfY291bnQgPSBudW1fcGFnZTtcbiBcdHJlcS1cdTAwM2VwYWdlX2FkZHJfbGlzdF9sZW4gPSBudW1fcGFnZTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV9wYWdlOyBpJiM0MzsmIzQzOylcbi1cdFx0cmVxLVx1MDAzZXBhZ2VfYWRkcl9saXN0W2ldID0gZ21pLVx1MDAzZWRtYV9oYW5kbGUgJiM0MzsgIGkgKiBNQU5BX1BBR0VfU0laRTtcbiYjNDM7XHRpZiAoZ21pLVx1MDAzZW5yX3BhZ2VzIFx1MDAzZSAwKSB7XG4mIzQzO1x0XHR1bnNpZ25lZCBpbnQgc3VicGFnZXMgPSBQQUdFX1NJWkUgLyBNQU5BX1BBR0VfU0laRTtcbiYjNDM7XHRcdHVuc2lnbmVkIGludCBpZHggPSAwO1xuJiM0MztcdFx0dW5zaWduZWQgaW50IHBnLCBzdWI7XG4mIzQzO1xuJiM0MztcdFx0LyogRWFjaCBQQUdFX1NJWkUgY2h1bmsgaXMgcGh5c2ljYWxseSBjb250aWd1b3VzIGFuZCBjb250YWluc1xuJiM0MztcdFx0ICogUEFHRV9TSVpFIC8gTUFOQV9QQUdFX1NJWkUgY29uc2VjdXRpdmUgZGV2aWNlIHBhZ2VzLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRmb3IgKHBnID0gMDsgcGcgXHUwMDNjIGdtaS1cdTAwM2Vucl9wYWdlczsgcGcmIzQzOyYjNDM7KVxuJiM0MztcdFx0XHRmb3IgKHN1YiA9IDA7IHN1YiBcdTAwM2Mgc3VicGFnZXM7IHN1YiYjNDM7JiM0MzspXG4mIzQzO1x0XHRcdFx0cmVxLVx1MDAzZXBhZ2VfYWRkcl9saXN0W2lkeCYjNDM7JiM0MztdID1cbiYjNDM7XHRcdFx0XHRcdGdtaS1cdTAwM2VwYWdlc19kbWFbcGddICYjNDM7XG4mIzQzO1x0XHRcdFx0XHRzdWIgKiBNQU5BX1BBR0VfU0laRTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX3BhZ2U7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0XHRyZXEtXHUwMDNlcGFnZV9hZGRyX2xpc3RbaV0gPVxuJiM0MztcdFx0XHRcdGdtaS1cdTAwM2VkbWFfaGFuZGxlICYjNDM7IGkgKiBNQU5BX1BBR0VfU0laRTtcbiYjNDM7XHR9XG4gXG4gXHRlcnIgPSBtYW5hX2dkX3NlbmRfcmVxdWVzdChnYywgcmVxX21zZ19zaXplLCByZXEsIHNpemVvZihyZXNwKSwgXHUwMDI2cmVzcCk7XG4gXHRpZiAoZXJyKVxuQEAgLTEyNDYsNyAmIzQzOzEzOTEsNyBAQCBpbnQgbWFuYV9nZF9jcmVhdGVfbWFuYV9lcShzdHJ1Y3QgZ2RtYV9kZXYgKmdkLFxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiBcdGdtaSA9IFx1MDAyNnF1ZXVlLVx1MDAzZW1lbV9pbmZvO1xuLVx0ZXJyID0gbWFuYV9nZF9hbGxvY19tZW1vcnkoZ2MsIHNwZWMtXHUwMDNlcXVldWVfc2l6ZSwgZ21pKTtcbiYjNDM7XHRlcnIgPSBtYW5hX2dkX2FsbG9jX21lbW9yeShnYywgc3BlYy1cdTAwM2VxdWV1ZV9zaXplLCBnbWksIHRydWUpO1xuIFx0aWYgKGVycikge1xuIFx0XHRkZXZfZXJyKGdjLVx1MDAzZWRldiwgXCYjMzQ7R0RNQSBxdWV1ZSB0eXBlOiAlZCwgc2l6ZTogJXUsIGdkbWEgbWVtb3J5IGFsbG9jYXRpb24gZXJyOiAlZFxcblwmIzM0OyxcbiBcdFx0XHRzcGVjLVx1MDAzZXR5cGUsIHNwZWMtXHUwMDNlcXVldWVfc2l6ZSwgZXJyKTtcbkBAIC0xMzAxLDcgJiM0MzsxNDQ2LDcgQEAgaW50IG1hbmFfZ2RfY3JlYXRlX21hbmFfd3FfY3Eoc3RydWN0IGdkbWFfZGV2ICpnZCxcbiBcdHF1ZXVlLVx1MDAzZWlkID0gSU5WQUxJRF9RVUVVRV9JRDtcbiBcbiBcdGdtaSA9IFx1MDAyNnF1ZXVlLVx1MDAzZW1lbV9pbmZvO1xuLVx0ZXJyID0gbWFuYV9nZF9hbGxvY19tZW1vcnkoZ2MsIHNwZWMtXHUwMDNlcXVldWVfc2l6ZSwgZ21pKTtcbiYjNDM7XHRlcnIgPSBtYW5hX2dkX2FsbG9jX21lbW9yeShnYywgc3BlYy1cdTAwM2VxdWV1ZV9zaXplLCBnbWksIHRydWUpO1xuIFx0aWYgKGVycikge1xuIFx0XHRkZXZfZXJyKGdjLVx1MDAzZWRldiwgXCYjMzQ7R0RNQSBxdWV1ZSB0eXBlOiAlZCwgc2l6ZTogJXUsIG1lbW9yeSBhbGxvY2F0aW9uIGVycjogJWRcXG5cJiMzNDssXG4gXHRcdFx0c3BlYy1cdTAwM2V0eXBlLCBzcGVjLVx1MDAzZXF1ZXVlX3NpemUsIGVycik7XG5AQCAtMTUwOCw3ICYjNDM7MTY1Myw3IEBAIHU4ICptYW5hX2dkX2dldF93cWVfcHRyKGNvbnN0IHN0cnVjdCBnZG1hX3F1ZXVlICp3cSwgdTMyIHdxZV9vZmZzZXQpXG4gXG4gXHRXQVJOX09OX09OQ0UoKG9mZnNldCAmIzQzOyBHRE1BX1dRRV9CVV9TSVpFKSBcdTAwM2Ugd3EtXHUwMDNlcXVldWVfc2l6ZSk7XG4gXG4tXHRyZXR1cm4gd3EtXHUwMDNlcXVldWVfbWVtX3B0ciAmIzQzOyBvZmZzZXQ7XG4mIzQzO1x0cmV0dXJuIG1hbmFfZ2RfcmluZ19wdHIod3EsIG9mZnNldCk7XG4gfVxuIFxuIHN0YXRpYyB1MzIgbWFuYV9nZF93cml0ZV9jbGllbnRfb29iKGNvbnN0IHN0cnVjdCBnZG1hX3dxZV9yZXF1ZXN0ICp3cWVfcmVxLFxuQEAgLTE1NTQsMjcgJiM0MzsxNjk5LDI0IEBAIHN0YXRpYyB1MzIgbWFuYV9nZF93cml0ZV9jbGllbnRfb29iKGNvbnN0IHN0cnVjdCBnZG1hX3dxZV9yZXF1ZXN0ICp3cWVfcmVxLFxuIFx0cmV0dXJuIHNpemVvZihoZWFkZXIpICYjNDM7IGNsaWVudF9vb2Jfc2l6ZTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgbWFuYV9nZF93cml0ZV9zZ2woc3RydWN0IGdkbWFfcXVldWUgKndxLCB1OCAqd3FlX3B0cixcbiYjNDM7c3RhdGljIHZvaWQgbWFuYV9nZF93cml0ZV9zZ2woc3RydWN0IGdkbWFfcXVldWUgKndxLCB1MzIgc2dsX29mZnNldCxcbiBcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgZ2RtYV93cWVfcmVxdWVzdCAqd3FlX3JlcSlcbiB7XG4mIzQzO1x0dTMyIHNpemVfdG9fZW5kID0gbWFuYV9nZF9yaW5nX2NvbnRpZ19hdmFpbCh3cSwgc2dsX29mZnNldCk7XG4gXHR1MzIgc2dsX3NpemUgPSBzaXplb2Yoc3RydWN0IGdkbWFfc2dlKSAqIHdxZV9yZXEtXHUwMDNlbnVtX3NnZTtcbiBcdGNvbnN0IHU4ICphZGRyZXNzID0gKHU4ICopd3FlX3JlcS1cdTAwM2VzZ2w7XG4tXHR1OCAqYmFzZV9wdHIsICplbmRfcHRyO1xuLVx0dTMyIHNpemVfdG9fZW5kO1xuLVxuLVx0YmFzZV9wdHIgPSB3cS1cdTAwM2VxdWV1ZV9tZW1fcHRyO1xuLVx0ZW5kX3B0ciA9IGJhc2VfcHRyICYjNDM7IHdxLVx1MDAzZXF1ZXVlX3NpemU7XG4tXHRzaXplX3RvX2VuZCA9ICh1MzIpKGVuZF9wdHIgLSB3cWVfcHRyKTtcbiBcbiBcdGlmIChzaXplX3RvX2VuZCBcdTAwM2Mgc2dsX3NpemUpIHtcbi1cdFx0bWVtY3B5KHdxZV9wdHIsIGFkZHJlc3MsIHNpemVfdG9fZW5kKTtcbiYjNDM7XHRcdG1lbWNweShtYW5hX2dkX3JpbmdfcHRyKHdxLCBzZ2xfb2Zmc2V0KSwgYWRkcmVzcywgc2l6ZV90b19lbmQpO1xuIFxuLVx0XHR3cWVfcHRyID0gYmFzZV9wdHI7XG4gXHRcdGFkZHJlc3MgJiM0Mzs9IHNpemVfdG9fZW5kO1xuIFx0XHRzZ2xfc2l6ZSAtPSBzaXplX3RvX2VuZDtcbiYjNDM7XHRcdHNnbF9vZmZzZXQgJiM0Mzs9IHNpemVfdG9fZW5kO1xuJiM0MztcdFx0aWYgKHNnbF9vZmZzZXQgPT0gd3EtXHUwMDNlcXVldWVfc2l6ZSlcbiYjNDM7XHRcdFx0c2dsX29mZnNldCA9IDA7XG4gXHR9XG4gXG4tXHRtZW1jcHkod3FlX3B0ciwgYWRkcmVzcywgc2dsX3NpemUpO1xuJiM0MztcdG1lbWNweShtYW5hX2dkX3JpbmdfcHRyKHdxLCBzZ2xfb2Zmc2V0KSwgYWRkcmVzcywgc2dsX3NpemUpO1xuIH1cbiBcbiBpbnQgbWFuYV9nZF9wb3N0X3dvcmtfcmVxdWVzdChzdHJ1Y3QgZ2RtYV9xdWV1ZSAqd3EsXG5AQCAtMTU4NCw4ICYjNDM7MTcyNiwxMiBAQCBpbnQgbWFuYV9nZF9wb3N0X3dvcmtfcmVxdWVzdChzdHJ1Y3QgZ2RtYV9xdWV1ZSAqd3EsXG4gXHR1MzIgY2xpZW50X29vYl9zaXplID0gd3FlX3JlcS1cdTAwM2VpbmxpbmVfb29iX3NpemU7XG4gXHR1MzIgc2dsX2RhdGFfc2l6ZTtcbiBcdHUzMiBtYXhfd3FlX3NpemU7XG4mIzQzO1x0dTMyIHdxZV9vZmZzZXQ7XG4mIzQzO1x0dTMyIHNnbF9vZmZzZXQ7XG4gXHR1MzIgd3FlX3NpemU7XG4mIzQzO1x0dTMyIG9vYl9sZW47XG4gXHR1OCAqd3FlX3B0cjtcbiYjNDM7XHR1MzIgaGVhZDtcbiBcbiBcdGlmICh3cWVfcmVxLVx1MDAzZW51bV9zZ2UgPT0gMClcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtMTYxNywxMyAmIzQzOzE3NjMsMTcgQEAgaW50IG1hbmFfZ2RfcG9zdF93b3JrX3JlcXVlc3Qoc3RydWN0IGdkbWFfcXVldWUgKndxLFxuIFx0aWYgKHdxZV9pbmZvKVxuIFx0XHR3cWVfaW5mby1cdTAwM2V3cWVfc2l6ZV9pbl9idSA9IHdxZV9zaXplIC8gR0RNQV9XUUVfQlVfU0laRTtcbiBcbi1cdHdxZV9wdHIgPSBtYW5hX2dkX2dldF93cWVfcHRyKHdxLCB3cS1cdTAwM2VoZWFkKTtcbi1cdHdxZV9wdHIgJiM0Mzs9IG1hbmFfZ2Rfd3JpdGVfY2xpZW50X29vYih3cWVfcmVxLCB3cS1cdTAwM2V0eXBlLCBjbGllbnRfb29iX3NpemUsXG4tXHRcdFx0XHRcdCAgICBzZ2xfZGF0YV9zaXplLCB3cWVfcHRyKTtcbi1cdGlmICh3cWVfcHRyIFx1MDAzZT0gKHU4ICopd3EtXHUwMDNlcXVldWVfbWVtX3B0ciAmIzQzOyB3cS1cdTAwM2VxdWV1ZV9zaXplKVxuLVx0XHR3cWVfcHRyIC09IHdxLVx1MDAzZXF1ZXVlX3NpemU7XG4mIzQzO1x0aGVhZCA9IHdxLVx1MDAzZWhlYWQ7XG4mIzQzO1x0d3FlX29mZnNldCA9IChoZWFkICogR0RNQV9XUUVfQlVfU0laRSkgXHUwMDI2ICh3cS1cdTAwM2VxdWV1ZV9zaXplIC0gMSk7XG4mIzQzO1x0d3FlX3B0ciA9IG1hbmFfZ2RfZ2V0X3dxZV9wdHIod3EsIGhlYWQpO1xuJiM0MztcdG9vYl9sZW4gPSBtYW5hX2dkX3dyaXRlX2NsaWVudF9vb2Iod3FlX3JlcSwgd3EtXHUwMDNldHlwZSwgY2xpZW50X29vYl9zaXplLFxuJiM0MztcdFx0XHRcdFx0ICAgc2dsX2RhdGFfc2l6ZSwgd3FlX3B0cik7XG4mIzQzO1xuJiM0MztcdHNnbF9vZmZzZXQgPSB3cWVfb2Zmc2V0ICYjNDM7IG9vYl9sZW47XG4mIzQzO1x0aWYgKHNnbF9vZmZzZXQgXHUwMDNlPSB3cS1cdTAwM2VxdWV1ZV9zaXplKVxuJiM0MztcdFx0c2dsX29mZnNldCAtPSB3cS1cdTAwM2VxdWV1ZV9zaXplO1xuIFxuLVx0bWFuYV9nZF93cml0ZV9zZ2wod3EsIHdxZV9wdHIsIHdxZV9yZXEpO1xuJiM0MztcdG1hbmFfZ2Rfd3JpdGVfc2dsKHdxLCBzZ2xfb2Zmc2V0LCB3cWVfcmVxKTtcbiBcbiBcdHdxLVx1MDAzZWhlYWQgJiM0Mzs9IHdxZV9zaXplIC8gR0RNQV9XUUVfQlVfU0laRTtcbiBcbkBAIC0xNjUzLDExICYjNDM7MTgwMywxMCBAQCBpbnQgbWFuYV9nZF9wb3N0X2FuZF9yaW5nKHN0cnVjdCBnZG1hX3F1ZXVlICpxdWV1ZSxcbiBzdGF0aWMgaW50IG1hbmFfZ2RfcmVhZF9jcWUoc3RydWN0IGdkbWFfcXVldWUgKmNxLCBzdHJ1Y3QgZ2RtYV9jb21wICpjb21wKVxuIHtcbiBcdHVuc2lnbmVkIGludCBudW1fY3FlID0gY3EtXHUwMDNlcXVldWVfc2l6ZSAvIHNpemVvZihzdHJ1Y3QgZ2RtYV9jcWUpO1xuLVx0c3RydWN0IGdkbWFfY3FlICpjcV9jcWUgPSBjcS1cdTAwM2VxdWV1ZV9tZW1fcHRyO1xuIFx0dTMyIG93bmVyX2JpdHMsIG5ld19iaXRzLCBvbGRfYml0cztcbiBcdHN0cnVjdCBnZG1hX2NxZSAqY3FlO1xuIFxuLVx0Y3FlID0gXHUwMDI2Y3FfY3FlW2NxLVx1MDAzZWhlYWQgJSBudW1fY3FlXTtcbiYjNDM7XHRjcWUgPSBtYW5hX2dkX3JpbmdfcHRyKGNxLCAoY3EtXHUwMDNlaGVhZCAlIG51bV9jcWUpICogc2l6ZW9mKCpjcWUpKTtcbiBcdG93bmVyX2JpdHMgPSBjcWUtXHUwMDNlY3FlX2luZm8ub3duZXJfYml0cztcbiBcbiBcdG9sZF9iaXRzID0gKGNxLVx1MDAzZWhlYWQgLyBudW1fY3FlIC0gMSkgXHUwMDI2IEdETUFfQ1FFX09XTkVSX01BU0s7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvaHdfY2hhbm5lbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvaHdfY2hhbm5lbC5jXG5pbmRleCBlM2MyNGQ1MGRhZDA3Li4yNjNlN2M0ZTI5MzQxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvaHdfY2hhbm5lbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9od19jaGFubmVsLmNcbkBAIC00NzksNyAmIzQzOzQ3OSw3IEBAIHN0YXRpYyBpbnQgbWFuYV9od2NfYWxsb2NfZG1hX2J1ZihzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUxNiBxX2RlcHRoLFxuIFx0YnVmX3NpemUgPSBNQU5BX1BBR0VfQUxJR04ocV9kZXB0aCAqIG1heF9tc2dfc2l6ZSk7XG4gXG4gXHRnbWkgPSBcdTAwMjZkbWFfYnVmLVx1MDAzZW1lbV9pbmZvO1xuLVx0ZXJyID0gbWFuYV9nZF9hbGxvY19tZW1vcnkoZ2MsIGJ1Zl9zaXplLCBnbWkpO1xuJiM0MztcdGVyciA9IG1hbmFfZ2RfYWxsb2NfbWVtb3J5KGdjLCBidWZfc2l6ZSwgZ21pLCBmYWxzZSk7XG4gXHRpZiAoZXJyKSB7XG4gXHRcdGRldl9lcnIoaHdjLVx1MDAzZWRldiwgXCYjMzQ7RmFpbGVkIHRvIGFsbG9jYXRlIERNQSBidWZmZXIgc2l6ZTogJXUsIGVyciAlZFxcblwmIzM0OyxcbiBcdFx0XHRidWZfc2l6ZSwgZXJyKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmNcbmluZGV4IDI1MTlhOThhZDAwYjAuLmI4MDM3MTE5NjgwNDIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uY1xuQEAgLTQwLDYgJiM0Mzs0MCw5IEBAIHN0YXRpYyBzc2l6ZV90IG1hbmFfZGJnX3FfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50XG4ge1xuIFx0c3RydWN0IGdkbWFfcXVldWUgKmdkbWFfcSA9IGZpbHAtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuIFxuJiM0MztcdGlmIChnZG1hX3EtXHUwMDNlbWVtX2luZm8ubnJfcGFnZXMpXG4mIzQzO1x0XHRyZXR1cm4gbWFuYV9nZF9yZWFkX3JpbmcoZ2RtYV9xLCBidWYsIGNvdW50LCBwb3MpO1xuJiM0MztcbiBcdHJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcihidWYsIGNvdW50LCBwb3MsIGdkbWFfcS1cdTAwM2VxdWV1ZV9tZW1fcHRyLFxuIFx0XHRcdFx0ICAgICAgIGdkbWFfcS1cdTAwM2VxdWV1ZV9zaXplKTtcbiB9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbWFuYS9nZG1hLmggYi9pbmNsdWRlL25ldC9tYW5hL2dkbWEuaFxuaW5kZXggODUyOWNlZjBkN2M0NS4uYjBiMzIyYTgwYjYyOSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L21hbmEvZ2RtYS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9tYW5hL2dkbWEuaFxuQEAgLTI0MCw2ICYjNDM7MjQwLDE0IEBAIHN0cnVjdCBnZG1hX21lbV9pbmZvIHtcbiBcdHZvaWQgKnZpcnRfYWRkcjtcbiBcdHU2NCBsZW5ndGg7XG4gXG4mIzQzO1x0LyogU2NhdHRlcmVkIGZhbGxiYWNrOiB3aGVuIEBucl9wYWdlcyBcdTAwM2UgMCB0aGUgcmluZyBpcyB0aGF0IG1hbnlcbiYjNDM7XHQgKiBQQUdFX1NJWkUgY29oZXJlbnQgYWxsb2NhdGlvbnMgaW4gQHBhZ2VzX3ZhL0BwYWdlc19kbWEsIG5vdFxuJiM0MztcdCAqIEB2aXJ0X2FkZHIvQGRtYV9oYW5kbGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0dm9pZCAqKnBhZ2VzX3ZhO1xuJiM0MztcdGRtYV9hZGRyX3QgKnBhZ2VzX2RtYTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgbnJfcGFnZXM7XG4mIzQzO1xuIFx0LyogQWxsb2NhdGVkIGJ5IHRoZSBQRiBkcml2ZXIgKi9cbiBcdHU2NCBkbWFfcmVnaW9uX2hhbmRsZTtcbiB9O1xuQEAgLTUxMiw2ICYjNDM7NTIwLDkgQEAgaW50IG1hbmFfZ2RfcG9sbF9jcShzdHJ1Y3QgZ2RtYV9xdWV1ZSAqY3EsIHN0cnVjdCBnZG1hX2NvbXAgKmNvbXAsIGludCBudW1fY3FlKTtcbiBcbiB2b2lkIG1hbmFfZ2RfcmluZ19jcShzdHJ1Y3QgZ2RtYV9xdWV1ZSAqY3EsIHU4IGFybV9iaXQpO1xuIFxuJiM0Mztzc2l6ZV90IG1hbmFfZ2RfcmVhZF9yaW5nKHN0cnVjdCBnZG1hX3F1ZXVlICpxLCBjaGFyIF9fdXNlciAqYnVmLFxuJiM0MztcdFx0XHQgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpO1xuJiM0MztcbiBpbnQgbWFuYV9zY2hlZHVsZV9zZXJ2X3dvcmsoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MsIGVudW0gZ2RtYV9lcWVfdHlwZSB0eXBlKTtcbiBcbiB2b2lkIG1hbmFfZ2RfcmluZ19kaW0oc3RydWN0IGdkbWFfcXVldWUgKmNxLCB1MzIgbW9kX3VzZWMsIGJvb2wgbW9kX3VzZWNfdmxkLFxuQEAgLTY2OCw2ICYjNDM7Njc5LDkgQEAgZW51bSB7XG4gLyogRHJpdmVyIHN1cHBvcnRzIGR5bmFtaWMgaW50ZXJydXB0IG1vZGVyYXRpb24gLSBESU0gKi9cbiAjZGVmaW5lIEdETUFfRFJWX0NBUF9GTEFHXzFfRFlOX0lOVEVSUlVQVF9NT0RFUkFUSU9OIEJJVCgyOClcbiBcbiYjNDM7LyogRHJpdmVyIHN1cHBvcnRzIG5vbi1jb250aWd1b3VzIHF1ZXVlIGJ1ZmZlcnMgKi9cbiYjNDM7I2RlZmluZSBHRE1BX0RSVl9DQVBfRkxBR18xX05PTl9DT05USUdVT1VTX0JVRkZFUlMgQklUKDMwKVxuJiM0MztcbiAjZGVmaW5lIEdETUFfRFJWX0NBUF9GTEFHUzEgXFxcbiBcdChHRE1BX0RSVl9DQVBfRkxBR18xX0VRX1NIQVJJTkdfTVVMVElfVlBPUlQgfCBcXFxuIFx0IEdETUFfRFJWX0NBUF9GTEFHXzFfTkFQSV9XS0RPTkVfRklYIHwgXFxcbkBAIC02ODQsNyAmIzQzOzY5OCw4IEBAIGVudW0ge1xuIFx0IEdETUFfRFJWX0NBUF9GTEFHXzFfSEFORExFX1NUQUxMX1NRX1JFQ09WRVJZIHwgXFxcbiBcdCBHRE1BX0RSVl9DQVBfRkxBR18xX0hXQ19USU1FT1VUX1JFQ09WRVJZIHwgXFxcbiBcdCBHRE1BX0RSVl9DQVBfRkxBR18xX0VRX01TSV9VTlNIQVJFX01VTFRJX1ZQT1JUIHwgXFxcbi1cdCBHRE1BX0RSVl9DQVBfRkxBR18xX0RZTl9JTlRFUlJVUFRfTU9ERVJBVElPTilcbiYjNDM7XHQgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9EWU5fSU5URVJSVVBUX01PREVSQVRJT04gfCBcXFxuJiM0MztcdCBHRE1BX0RSVl9DQVBfRkxBR18xX05PTl9DT05USUdVT1VTX0JVRkZFUlMpXG4gXG4gI2RlZmluZSBHRE1BX0RSVl9DQVBfRkxBR1MyIDBcbiBcbkBAIC0xMDQ1LDcgJiM0MzsxMDYwLDcgQEAgdm9pZCBtYW5hX2dkX3dxX3JpbmdfZG9vcmJlbGwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MsXG4gXHRcdFx0ICAgICAgc3RydWN0IGdkbWFfcXVldWUgKnF1ZXVlKTtcbiBcbiBpbnQgbWFuYV9nZF9hbGxvY19tZW1vcnkoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MsIHVuc2lnbmVkIGludCBsZW5ndGgsXG4tXHRcdFx0IHN0cnVjdCBnZG1hX21lbV9pbmZvICpnbWkpO1xuJiM0MztcdFx0XHQgc3RydWN0IGdkbWFfbWVtX2luZm8gKmdtaSwgYm9vbCBhbGxvd19zY2F0dGVyKTtcbiBcbiB2b2lkIG1hbmFfZ2RfZnJlZV9tZW1vcnkoc3RydWN0IGdkbWFfbWVtX2luZm8gKmdtaSk7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjI6MDM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyIChNQU5BKSBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgZGV2aWNlIGRyaXZlci4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgZW52aXJvbm1lbnRzIHVzZWQgYnkgc3l6a2FsbGVyLCBtYWtpbmcgdGhlIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIHN0YW5kYXJkIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYmQ4YmVjZDA1YjIyMGVlNGMwY2MwZjMyZDQxODJkNThjMjU2ZmVlYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDcgMjI6MDM6NDQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jCmluZGV4IGEzOGQ0YmI3NDYyMWYuLmVkOWFmMzE0ZTRlZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jCkBAIC0xMSw2ICYjNDM7MTEsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L21zaS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lycWRvbWFpbi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2V4cG9ydC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC91YWNjZXNzLmgmZ3Q7CiAKICNpbmNsdWRlICZsdDtuZXQvbWFuYS9tYW5hLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L21hbmEvaHdfY2hhbm5lbC5oJmd0OwpAQCAtMzc0LDI4ICYjNDM7Mzc1LDk2IEBAIGludCBtYW5hX2dkX3NlbmRfcmVxdWVzdChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYywgdTMyIHJlcV9sZW4sIGNvbnN0IHZvaWQgKnJlcSwKIEVYUE9SVF9TWU1CT0xfTlMobWFuYV9nZF9zZW5kX3JlcXVlc3QsICYjMzQ7TkVUX01BTkEmIzM0Oyk7CiAKIGludCBtYW5hX2dkX2FsbG9jX21lbW9yeShzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYywgdW5zaWduZWQgaW50IGxlbmd0aCwKLQkJCSBzdHJ1Y3QgZ2RtYV9tZW1faW5mbyAqZ21pKQomIzQzOwkJCSBzdHJ1Y3QgZ2RtYV9tZW1faW5mbyAqZ21pLCBib29sIGFsbG93X3NjYXR0ZXIpCiB7CiYjNDM7CXVuc2lnbmVkIGludCBucGFnZXMsIGk7CiAJZG1hX2FkZHJfdCBkbWFfaGFuZGxlOwomIzQzOwlib29sIGNhbl9mYWxsYmFjazsKIAl2b2lkICpidWY7CiAKIAlpZiAobGVuZ3RoICZsdDsgTUFOQV9QQUdFX1NJWkUgfHwgIWlzX3Bvd2VyX29mXzIobGVuZ3RoKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlnbWktJmd0O2RldiA9IGdjLSZndDtkZXY7Ci0JYnVmID0gZG1hX2FsbG9jX2NvaGVyZW50KGdtaS0mZ3Q7ZGV2LCBsZW5ndGgsICZhbXA7ZG1hX2hhbmRsZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFidWYpCiYjNDM7CiYjNDM7CS8qIEFuIGFsbG9jYXRpb24gdGhhdCBmaXRzIGluIG9uZSBwYWdlIGRvZXMgbm90IGJlbmVmaXQgZnJvbQomIzQzOwkgKiBmYWxsYmFjay4KJiM0MzsJICovCiYjNDM7CWNhbl9mYWxsYmFjayA9IGFsbG93X3NjYXR0ZXIgJmFtcDsmYW1wOyBsZW5ndGggJmd0OyBQQUdFX1NJWkU7CiYjNDM7CiYjNDM7CS8qIFdhcm4gb25seSB3aGVuIHRoZXJlIGlzIG5vIGZhbGxiYWNrIHRvIHJlc2N1ZSB0aGUgZmFpbHVyZS4gKi8KJiM0MzsJYnVmID0gZG1hX2FsbG9jX2NvaGVyZW50KGdtaS0mZ3Q7ZGV2LCBsZW5ndGgsICZhbXA7ZG1hX2hhbmRsZSwKJiM0MzsJCQkJIEdGUF9LRVJORUwgfAomIzQzOwkJCQkgKGNhbl9mYWxsYmFjayA/IF9fR0ZQX05PV0FSTiA6IDApKTsKJiM0MzsJaWYgKGJ1ZikgewomIzQzOwkJZ21pLSZndDtkbWFfaGFuZGxlID0gZG1hX2hhbmRsZTsKJiM0MzsJCWdtaS0mZ3Q7dmlydF9hZGRyID0gYnVmOwomIzQzOwkJZ21pLSZndDtsZW5ndGggPSBsZW5ndGg7CiYjNDM7CQlnbWktJmd0O25yX3BhZ2VzID0gMDsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghY2FuX2ZhbGxiYWNrKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWdtaS0mZ3Q7ZG1hX2hhbmRsZSA9IGRtYV9oYW5kbGU7Ci0JZ21pLSZndDt2aXJ0X2FkZHIgPSBidWY7CiYjNDM7CS8qIGxlbmd0aCBpcyBhIHBvd2VyIG9mIDIgYWJvdmUgUEFHRV9TSVpFLCBzbyB0aGlzIGRpdmlkZXMgZXhhY3RseS4gKi8KJiM0MzsJbnBhZ2VzID0gbGVuZ3RoIC8gUEFHRV9TSVpFOwomIzQzOwomIzQzOwlnbWktJmd0O3BhZ2VzX3ZhID0ga3ZjYWxsb2MobnBhZ2VzLCBzaXplb2YoKmdtaS0mZ3Q7cGFnZXNfdmEpLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFnbWktJmd0O3BhZ2VzX3ZhKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CWdtaS0mZ3Q7cGFnZXNfZG1hID0ga3ZjYWxsb2MobnBhZ2VzLCBzaXplb2YoKmdtaS0mZ3Q7cGFnZXNfZG1hKSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghZ21pLSZndDtwYWdlc19kbWEpCiYjNDM7CQlnb3RvIGZyZWVfdmE7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBucGFnZXM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlnbWktJmd0O3BhZ2VzX3ZhW2ldID0gZG1hX2FsbG9jX2NvaGVyZW50KGdtaS0mZ3Q7ZGV2LCBQQUdFX1NJWkUsCiYjNDM7CQkJCQkJICAgICAgJmFtcDtnbWktJmd0O3BhZ2VzX2RtYVtpXSwKJiM0MzsJCQkJCQkgICAgICBHRlBfS0VSTkVMKTsKJiM0MzsJCWlmICghZ21pLSZndDtwYWdlc192YVtpXSkKJiM0MzsJCQlnb3RvIGZyZWVfcGFnZXM7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZGV2X2luZm9fcmF0ZWxpbWl0ZWQoZ21pLSZndDtkZXYsCiYjNDM7CQkJICAgICAmIzM0O2NvbnRpZ3VvdXMgJXUtYnl0ZSBETUEgYWxsb2MgZmFpbGVkOyB1c2luZyAldSBzY2F0dGVyZWQgcGFnZXNcbiYjMzQ7LAomIzQzOwkJCSAgICAgbGVuZ3RoLCBucGFnZXMpOwomIzQzOwomIzQzOwlnbWktJmd0O3ZpcnRfYWRkciA9IE5VTEw7CiYjNDM7CWdtaS0mZ3Q7ZG1hX2hhbmRsZSA9IDA7CiAJZ21pLSZndDtsZW5ndGggPSBsZW5ndGg7CiYjNDM7CWdtaS0mZ3Q7bnJfcGFnZXMgPSBucGFnZXM7CiAKIAlyZXR1cm4gMDsKJiM0MzsKJiM0MztmcmVlX3BhZ2VzOgomIzQzOwl3aGlsZSAoaS0tKQomIzQzOwkJZG1hX2ZyZWVfY29oZXJlbnQoZ21pLSZndDtkZXYsIFBBR0VfU0laRSwgZ21pLSZndDtwYWdlc192YVtpXSwKJiM0MzsJCQkJICBnbWktJmd0O3BhZ2VzX2RtYVtpXSk7CiYjNDM7CWt2ZnJlZShnbWktJmd0O3BhZ2VzX2RtYSk7CiYjNDM7CWdtaS0mZ3Q7cGFnZXNfZG1hID0gTlVMTDsKJiM0MztmcmVlX3ZhOgomIzQzOwlrdmZyZWUoZ21pLSZndDtwYWdlc192YSk7CiYjNDM7CWdtaS0mZ3Q7cGFnZXNfdmEgPSBOVUxMOwomIzQzOwlyZXR1cm4gLUVOT01FTTsKIH0KIAogdm9pZCBtYW5hX2dkX2ZyZWVfbWVtb3J5KHN0cnVjdCBnZG1hX21lbV9pbmZvICpnbWkpCiB7CiYjNDM7CXVuc2lnbmVkIGludCBpOwomIzQzOwomIzQzOwlpZiAoZ21pLSZndDtucl9wYWdlcyAmZ3Q7IDApIHsKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyBnbWktJmd0O25yX3BhZ2VzOyBpJiM0MzsmIzQzOykKJiM0MzsJCQlkbWFfZnJlZV9jb2hlcmVudChnbWktJmd0O2RldiwgUEFHRV9TSVpFLCBnbWktJmd0O3BhZ2VzX3ZhW2ldLAomIzQzOwkJCQkJICBnbWktJmd0O3BhZ2VzX2RtYVtpXSk7CiYjNDM7CQlrdmZyZWUoZ21pLSZndDtwYWdlc192YSk7CiYjNDM7CQlrdmZyZWUoZ21pLSZndDtwYWdlc19kbWEpOwomIzQzOwkJZ21pLSZndDtwYWdlc192YSA9IE5VTEw7CiYjNDM7CQlnbWktJmd0O3BhZ2VzX2RtYSA9IE5VTEw7CiYjNDM7CQlnbWktJmd0O25yX3BhZ2VzID0gMDsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwogCWRtYV9mcmVlX2NvaGVyZW50KGdtaS0mZ3Q7ZGV2LCBnbWktJmd0O2xlbmd0aCwgZ21pLSZndDt2aXJ0X2FkZHIsCiAJCQkgIGdtaS0mZ3Q7ZG1hX2hhbmRsZSk7CiB9CkBAIC03NTMsMTEgJiM0Mzs4MjIsNzMgQEAgaW50IG1hbmFfc2NoZWR1bGVfc2Vydl93b3JrKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjLCBlbnVtIGdkbWFfZXFlX3R5cGUgdHlwZSkKIAlyZXR1cm4gMDsKIH0KIAomIzQzOy8qIFJldHVybiB0aGUgQ1BVIGFkZHJlc3Mgb2YgYnl0ZSBAb2Zmc2V0IHdpdGhpbiBhIHF1ZXVlJiMzOTtzIHJpbmcgYnVmZmVyLiAqLwomIzQzO3N0YXRpYyB2b2lkICptYW5hX2dkX3JpbmdfcHRyKGNvbnN0IHN0cnVjdCBnZG1hX3F1ZXVlICpxLCB1MzIgb2Zmc2V0KQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IGdkbWFfbWVtX2luZm8gKmdtaSA9ICZhbXA7cS0mZ3Q7bWVtX2luZm87CiYjNDM7CiYjNDM7CWlmIChnbWktJmd0O25yX3BhZ2VzICZndDsgMCkKJiM0MzsJCXJldHVybiAodTggKilnbWktJmd0O3BhZ2VzX3ZhW29mZnNldCAvIFBBR0VfU0laRV0gJiM0MzsKJiM0MzsJCSAgICAgICAob2Zmc2V0ICZhbXA7IChQQUdFX1NJWkUgLSAxKSk7CiYjNDM7CiYjNDM7CXJldHVybiBxLSZndDtxdWV1ZV9tZW1fcHRyICYjNDM7IG9mZnNldDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogTnVtYmVyIG9mIGJ5dGVzIGZyb20gQG9mZnNldCB0byB0aGUgZW5kIG9mIHRoZSBDUFUtY29udGlndW91cyByZWdpb246IHRoZQomIzQzOyAqIHJlc3Qgb2YgdGhlIHJpbmcsIG9yIHRoZSByZXN0IG9mIHRoZSBjdXJyZW50IHBhZ2Ugd2hlbiBzY2F0dGVyZWQuCiYjNDM7ICovCiYjNDM7c3RhdGljIHUzMiBtYW5hX2dkX3JpbmdfY29udGlnX2F2YWlsKGNvbnN0IHN0cnVjdCBnZG1hX3F1ZXVlICpxLCB1MzIgb2Zmc2V0KQomIzQzO3sKJiM0MzsJaWYgKHEtJmd0O21lbV9pbmZvLm5yX3BhZ2VzICZndDsgMCkKJiM0MzsJCXJldHVybiBQQUdFX1NJWkUgLSAob2Zmc2V0ICZhbXA7IChQQUdFX1NJWkUgLSAxKSk7CiYjNDM7CiYjNDM7CXJldHVybiBxLSZndDtxdWV1ZV9zaXplIC0gb2Zmc2V0OwomIzQzO30KJiM0MzsKJiM0MzsvKiBDb3B5IHVwIHRvIEBjb3VudCBieXRlcyBmcm9tIHJpbmcgb2Zmc2V0ICpAcG9zIG9mIEBxIGludG8gdXNlciBidWZmZXIgQGJ1ZiwKJiM0MzsgKiBzbyBhIHNjYXR0ZXJlZCByaW5nIHJlYWRzIGJhY2sgYXMgaWYgaXQgd2VyZSBjb250aWd1b3VzLiBSZXR1cm5zIGJ5dGVzCiYjNDM7ICogY29waWVkLCAwIGF0IGVuZCBvZiByaW5nLCBvciBhIG5lZ2F0aXZlIGVycm5vLgomIzQzOyAqLwomIzQzO3NzaXplX3QgbWFuYV9nZF9yZWFkX3Jpbmcoc3RydWN0IGdkbWFfcXVldWUgKnEsIGNoYXIgX191c2VyICpidWYsCiYjNDM7CQkJICBzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKQomIzQzO3sKJiM0MzsJdTMyIHNpemUgPSBxLSZndDtxdWV1ZV9zaXplOwomIzQzOwlsb2ZmX3Qgb2ZmID0gKnBvczsKJiM0MzsJc2l6ZV90IGNvcGllZCA9IDA7CiYjNDM7CiYjNDM7CWlmIChvZmYgJmx0OyAwKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CWlmIChvZmYgJmd0Oz0gc2l6ZSB8fCAhY291bnQpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJY291bnQgPSBtaW5fdChzaXplX3QsIGNvdW50LCBzaXplIC0gb2ZmKTsKJiM0MzsKJiM0MzsJd2hpbGUgKGNvdW50KSB7CiYjNDM7CQl1MzIgb2Zmc2V0ID0gb2ZmOwomIzQzOwkJdTMyIGF2YWlsID0gbWFuYV9nZF9yaW5nX2NvbnRpZ19hdmFpbChxLCBvZmZzZXQpOwomIzQzOwkJc2l6ZV90IGNodW5rID0gbWluX3Qoc2l6ZV90LCBjb3VudCwgYXZhaWwpOwomIzQzOwkJc2l6ZV90IGxlZnQgPSBjb3B5X3RvX3VzZXIoYnVmLCBtYW5hX2dkX3JpbmdfcHRyKHEsIG9mZnNldCksCiYjNDM7CQkJCQkgICBjaHVuayk7CiYjNDM7CiYjNDM7CQljaHVuayAtPSBsZWZ0OwomIzQzOwkJYnVmICYjNDM7PSBjaHVuazsKJiM0MzsJCW9mZiAmIzQzOz0gY2h1bms7CiYjNDM7CQljb3BpZWQgJiM0Mzs9IGNodW5rOwomIzQzOwkJY291bnQgLT0gY2h1bms7CiYjNDM7CQlpZiAobGVmdCkKJiM0MzsJCQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWNvcGllZCkKJiM0MzsJCXJldHVybiAtRUZBVUxUOwomIzQzOwomIzQzOwkqcG9zID0gb2ZmOwomIzQzOwlyZXR1cm4gY29waWVkOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIG1hbmFfZ2RfcHJvY2Vzc19lcWUoc3RydWN0IGdkbWFfcXVldWUgKmVxKQogewogCXUzMiBoZWFkID0gZXEtJmd0O2hlYWQgJSAoZXEtJmd0O3F1ZXVlX3NpemUgLyBHRE1BX0VRRV9TSVpFKTsKIAlzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyA9IGVxLSZndDtnZG1hX2Rldi0mZ3Q7Z2RtYV9jb250ZXh0OwotCXN0cnVjdCBnZG1hX2VxZSAqZXFfZXFlX3B0ciA9IGVxLSZndDtxdWV1ZV9tZW1fcHRyOwogCXVuaW9uIGdkbWFfZXFlX2luZm8gZXFlX2luZm87CiAJZW51bSBnZG1hX2VxZV90eXBlIHR5cGU7CiAJc3RydWN0IGdkbWFfZXZlbnQgZXZlbnQ7CkBAIC03NjUsNyAmIzQzOzg5Niw3IEBAIHN0YXRpYyB2b2lkIG1hbmFfZ2RfcHJvY2Vzc19lcWUoc3RydWN0IGdkbWFfcXVldWUgKmVxKQogCXN0cnVjdCBnZG1hX2VxZSAqZXFlOwogCXUzMiBjcV9pZDsKIAotCWVxZSA9ICZhbXA7ZXFfZXFlX3B0cltoZWFkXTsKJiM0MzsJZXFlID0gbWFuYV9nZF9yaW5nX3B0cihlcSwgaGVhZCAqIHNpemVvZigqZXFlKSk7CiAJZXFlX2luZm8uYXNfdWludDMyID0gZXFlLSZndDtlcWVfaW5mbzsKIAl0eXBlID0gZXFlX2luZm8udHlwZTsKIApAQCAtODI5LDcgJiM0Mzs5NjAsNiBAQCBzdGF0aWMgdm9pZCBtYW5hX2dkX3Byb2Nlc3NfZXFfZXZlbnRzKHZvaWQgKmFyZykKIHsKIAl1MzIgb3duZXJfYml0cywgbmV3X2JpdHMsIG9sZF9iaXRzOwogCXVuaW9uIGdkbWFfZXFlX2luZm8gZXFlX2luZm87Ci0Jc3RydWN0IGdkbWFfZXFlICplcV9lcWVfcHRyOwogCXN0cnVjdCBnZG1hX3F1ZXVlICplcSA9IGFyZzsKIAlzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYzsKIAlzdHJ1Y3QgZ2RtYV9lcWUgKmVxZTsKQEAgLTgzOSwxMSAmIzQzOzk2OSwxMCBAQCBzdGF0aWMgdm9pZCBtYW5hX2dkX3Byb2Nlc3NfZXFfZXZlbnRzKHZvaWQgKmFyZykKIAlnYyA9IGVxLSZndDtnZG1hX2Rldi0mZ3Q7Z2RtYV9jb250ZXh0OwogCiAJbnVtX2VxZSA9IGVxLSZndDtxdWV1ZV9zaXplIC8gR0RNQV9FUUVfU0laRTsKLQllcV9lcWVfcHRyID0gZXEtJmd0O3F1ZXVlX21lbV9wdHI7CiAKIAkvKiBQcm9jZXNzIHVwIHRvIDUgRVFFcyBhdCBhIHRpbWUsIGFuZCB1cGRhdGUgdGhlIEhXIGhlYWQuICovCiAJZm9yIChpID0gMDsgaSAmbHQ7IDU7IGkmIzQzOyYjNDM7KSB7Ci0JCWVxZSA9ICZhbXA7ZXFfZXFlX3B0cltlcS0mZ3Q7aGVhZCAlIG51bV9lcWVdOwomIzQzOwkJZXFlID0gbWFuYV9nZF9yaW5nX3B0cihlcSwgKGVxLSZndDtoZWFkICUgbnVtX2VxZSkgKiBzaXplb2YoKmVxZSkpOwogCQllcWVfaW5mby5hc191aW50MzIgPSBlcWUtJmd0O2VxZV9pbmZvOwogCQlvd25lcl9iaXRzID0gZXFlX2luZm8ub3duZXJfYml0czsKIApAQCAtMTEwNyw3ICYjNDM7MTIzNiw3IEBAIGludCBtYW5hX2dkX2NyZWF0ZV9od2NfcXVldWUoc3RydWN0IGdkbWFfZGV2ICpnZCwKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlnbWkgPSAmYW1wO3F1ZXVlLSZndDttZW1faW5mbzsKLQllcnIgPSBtYW5hX2dkX2FsbG9jX21lbW9yeShnYywgc3BlYy0mZ3Q7cXVldWVfc2l6ZSwgZ21pKTsKJiM0MzsJZXJyID0gbWFuYV9nZF9hbGxvY19tZW1vcnkoZ2MsIHNwZWMtJmd0O3F1ZXVlX3NpemUsIGdtaSwgZmFsc2UpOwogCWlmIChlcnIpIHsKIAkJZGV2X2VycihnYy0mZ3Q7ZGV2LCAmIzM0O0dETUEgcXVldWUgdHlwZTogJWQsIHNpemU6ICV1LCBnZG1hIG1lbW9yeSBhbGxvY2F0aW9uIGVycjogJWRcbiYjMzQ7LAogCQkJc3BlYy0mZ3Q7dHlwZSwgc3BlYy0mZ3Q7cXVldWVfc2l6ZSwgZXJyKTsKQEAgLTExODIsNyAmIzQzOzEzMTEsNyBAQCBzdGF0aWMgaW50IG1hbmFfZ2RfY3JlYXRlX2RtYV9yZWdpb24oc3RydWN0IGdkbWFfZGV2ICpnZCwKIAlpZiAobGVuZ3RoICZsdDsgTUFOQV9QQUdFX1NJWkUgfHwgIWlzX3Bvd2VyX29mXzIobGVuZ3RoKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoIU1BTkFfUEFHRV9BTElHTkVEKGdtaS0mZ3Q7dmlydF9hZGRyKSkKJiM0MzsJaWYgKGdtaS0mZ3Q7bnJfcGFnZXMgPT0gMCAmYW1wOyZhbXA7ICFNQU5BX1BBR0VfQUxJR05FRChnbWktJmd0O3ZpcnRfYWRkcikpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaHdjID0gZ2MtJmd0O2h3Yy5kcml2ZXJfZGF0YTsKQEAgLTEyMDIsOCAmIzQzOzEzMzEsMjQgQEAgc3RhdGljIGludCBtYW5hX2dkX2NyZWF0ZV9kbWFfcmVnaW9uKHN0cnVjdCBnZG1hX2RldiAqZ2QsCiAJcmVxLSZndDtwYWdlX2NvdW50ID0gbnVtX3BhZ2U7CiAJcmVxLSZndDtwYWdlX2FkZHJfbGlzdF9sZW4gPSBudW1fcGFnZTsKIAotCWZvciAoaSA9IDA7IGkgJmx0OyBudW1fcGFnZTsgaSYjNDM7JiM0MzspCi0JCXJlcS0mZ3Q7cGFnZV9hZGRyX2xpc3RbaV0gPSBnbWktJmd0O2RtYV9oYW5kbGUgJiM0MzsgIGkgKiBNQU5BX1BBR0VfU0laRTsKJiM0MzsJaWYgKGdtaS0mZ3Q7bnJfcGFnZXMgJmd0OyAwKSB7CiYjNDM7CQl1bnNpZ25lZCBpbnQgc3VicGFnZXMgPSBQQUdFX1NJWkUgLyBNQU5BX1BBR0VfU0laRTsKJiM0MzsJCXVuc2lnbmVkIGludCBpZHggPSAwOwomIzQzOwkJdW5zaWduZWQgaW50IHBnLCBzdWI7CiYjNDM7CiYjNDM7CQkvKiBFYWNoIFBBR0VfU0laRSBjaHVuayBpcyBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgYW5kIGNvbnRhaW5zCiYjNDM7CQkgKiBQQUdFX1NJWkUgLyBNQU5BX1BBR0VfU0laRSBjb25zZWN1dGl2ZSBkZXZpY2UgcGFnZXMuCiYjNDM7CQkgKi8KJiM0MzsJCWZvciAocGcgPSAwOyBwZyAmbHQ7IGdtaS0mZ3Q7bnJfcGFnZXM7IHBnJiM0MzsmIzQzOykKJiM0MzsJCQlmb3IgKHN1YiA9IDA7IHN1YiAmbHQ7IHN1YnBhZ2VzOyBzdWImIzQzOyYjNDM7KQomIzQzOwkJCQlyZXEtJmd0O3BhZ2VfYWRkcl9saXN0W2lkeCYjNDM7JiM0MztdID0KJiM0MzsJCQkJCWdtaS0mZ3Q7cGFnZXNfZG1hW3BnXSAmIzQzOwomIzQzOwkJCQkJc3ViICogTUFOQV9QQUdFX1NJWkU7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlmb3IgKGkgPSAwOyBpICZsdDsgbnVtX3BhZ2U7IGkmIzQzOyYjNDM7KQomIzQzOwkJCXJlcS0mZ3Q7cGFnZV9hZGRyX2xpc3RbaV0gPQomIzQzOwkJCQlnbWktJmd0O2RtYV9oYW5kbGUgJiM0MzsgaSAqIE1BTkFfUEFHRV9TSVpFOwomIzQzOwl9CiAKIAllcnIgPSBtYW5hX2dkX3NlbmRfcmVxdWVzdChnYywgcmVxX21zZ19zaXplLCByZXEsIHNpemVvZihyZXNwKSwgJmFtcDtyZXNwKTsKIAlpZiAoZXJyKQpAQCAtMTI0Niw3ICYjNDM7MTM5MSw3IEBAIGludCBtYW5hX2dkX2NyZWF0ZV9tYW5hX2VxKHN0cnVjdCBnZG1hX2RldiAqZ2QsCiAJCXJldHVybiAtRU5PTUVNOwogCiAJZ21pID0gJmFtcDtxdWV1ZS0mZ3Q7bWVtX2luZm87Ci0JZXJyID0gbWFuYV9nZF9hbGxvY19tZW1vcnkoZ2MsIHNwZWMtJmd0O3F1ZXVlX3NpemUsIGdtaSk7CiYjNDM7CWVyciA9IG1hbmFfZ2RfYWxsb2NfbWVtb3J5KGdjLCBzcGVjLSZndDtxdWV1ZV9zaXplLCBnbWksIHRydWUpOwogCWlmIChlcnIpIHsKIAkJZGV2X2VycihnYy0mZ3Q7ZGV2LCAmIzM0O0dETUEgcXVldWUgdHlwZTogJWQsIHNpemU6ICV1LCBnZG1hIG1lbW9yeSBhbGxvY2F0aW9uIGVycjogJWRcbiYjMzQ7LAogCQkJc3BlYy0mZ3Q7dHlwZSwgc3BlYy0mZ3Q7cXVldWVfc2l6ZSwgZXJyKTsKQEAgLTEzMDEsNyAmIzQzOzE0NDYsNyBAQCBpbnQgbWFuYV9nZF9jcmVhdGVfbWFuYV93cV9jcShzdHJ1Y3QgZ2RtYV9kZXYgKmdkLAogCXF1ZXVlLSZndDtpZCA9IElOVkFMSURfUVVFVUVfSUQ7CiAKIAlnbWkgPSAmYW1wO3F1ZXVlLSZndDttZW1faW5mbzsKLQllcnIgPSBtYW5hX2dkX2FsbG9jX21lbW9yeShnYywgc3BlYy0mZ3Q7cXVldWVfc2l6ZSwgZ21pKTsKJiM0MzsJZXJyID0gbWFuYV9nZF9hbGxvY19tZW1vcnkoZ2MsIHNwZWMtJmd0O3F1ZXVlX3NpemUsIGdtaSwgdHJ1ZSk7CiAJaWYgKGVycikgewogCQlkZXZfZXJyKGdjLSZndDtkZXYsICYjMzQ7R0RNQSBxdWV1ZSB0eXBlOiAlZCwgc2l6ZTogJXUsIG1lbW9yeSBhbGxvY2F0aW9uIGVycjogJWRcbiYjMzQ7LAogCQkJc3BlYy0mZ3Q7dHlwZSwgc3BlYy0mZ3Q7cXVldWVfc2l6ZSwgZXJyKTsKQEAgLTE1MDgsNyAmIzQzOzE2NTMsNyBAQCB1OCAqbWFuYV9nZF9nZXRfd3FlX3B0cihjb25zdCBzdHJ1Y3QgZ2RtYV9xdWV1ZSAqd3EsIHUzMiB3cWVfb2Zmc2V0KQogCiAJV0FSTl9PTl9PTkNFKChvZmZzZXQgJiM0MzsgR0RNQV9XUUVfQlVfU0laRSkgJmd0OyB3cS0mZ3Q7cXVldWVfc2l6ZSk7CiAKLQlyZXR1cm4gd3EtJmd0O3F1ZXVlX21lbV9wdHIgJiM0Mzsgb2Zmc2V0OwomIzQzOwlyZXR1cm4gbWFuYV9nZF9yaW5nX3B0cih3cSwgb2Zmc2V0KTsKIH0KIAogc3RhdGljIHUzMiBtYW5hX2dkX3dyaXRlX2NsaWVudF9vb2IoY29uc3Qgc3RydWN0IGdkbWFfd3FlX3JlcXVlc3QgKndxZV9yZXEsCkBAIC0xNTU0LDI3ICYjNDM7MTY5OSwyNCBAQCBzdGF0aWMgdTMyIG1hbmFfZ2Rfd3JpdGVfY2xpZW50X29vYihjb25zdCBzdHJ1Y3QgZ2RtYV93cWVfcmVxdWVzdCAqd3FlX3JlcSwKIAlyZXR1cm4gc2l6ZW9mKGhlYWRlcikgJiM0MzsgY2xpZW50X29vYl9zaXplOwogfQogCi1zdGF0aWMgdm9pZCBtYW5hX2dkX3dyaXRlX3NnbChzdHJ1Y3QgZ2RtYV9xdWV1ZSAqd3EsIHU4ICp3cWVfcHRyLAomIzQzO3N0YXRpYyB2b2lkIG1hbmFfZ2Rfd3JpdGVfc2dsKHN0cnVjdCBnZG1hX3F1ZXVlICp3cSwgdTMyIHNnbF9vZmZzZXQsCiAJCQkgICAgICBjb25zdCBzdHJ1Y3QgZ2RtYV93cWVfcmVxdWVzdCAqd3FlX3JlcSkKIHsKJiM0MzsJdTMyIHNpemVfdG9fZW5kID0gbWFuYV9nZF9yaW5nX2NvbnRpZ19hdmFpbCh3cSwgc2dsX29mZnNldCk7CiAJdTMyIHNnbF9zaXplID0gc2l6ZW9mKHN0cnVjdCBnZG1hX3NnZSkgKiB3cWVfcmVxLSZndDtudW1fc2dlOwogCWNvbnN0IHU4ICphZGRyZXNzID0gKHU4ICopd3FlX3JlcS0mZ3Q7c2dsOwotCXU4ICpiYXNlX3B0ciwgKmVuZF9wdHI7Ci0JdTMyIHNpemVfdG9fZW5kOwotCi0JYmFzZV9wdHIgPSB3cS0mZ3Q7cXVldWVfbWVtX3B0cjsKLQllbmRfcHRyID0gYmFzZV9wdHIgJiM0Mzsgd3EtJmd0O3F1ZXVlX3NpemU7Ci0Jc2l6ZV90b19lbmQgPSAodTMyKShlbmRfcHRyIC0gd3FlX3B0cik7CiAKIAlpZiAoc2l6ZV90b19lbmQgJmx0OyBzZ2xfc2l6ZSkgewotCQltZW1jcHkod3FlX3B0ciwgYWRkcmVzcywgc2l6ZV90b19lbmQpOwomIzQzOwkJbWVtY3B5KG1hbmFfZ2RfcmluZ19wdHIod3EsIHNnbF9vZmZzZXQpLCBhZGRyZXNzLCBzaXplX3RvX2VuZCk7CiAKLQkJd3FlX3B0ciA9IGJhc2VfcHRyOwogCQlhZGRyZXNzICYjNDM7PSBzaXplX3RvX2VuZDsKIAkJc2dsX3NpemUgLT0gc2l6ZV90b19lbmQ7CiYjNDM7CQlzZ2xfb2Zmc2V0ICYjNDM7PSBzaXplX3RvX2VuZDsKJiM0MzsJCWlmIChzZ2xfb2Zmc2V0ID09IHdxLSZndDtxdWV1ZV9zaXplKQomIzQzOwkJCXNnbF9vZmZzZXQgPSAwOwogCX0KIAotCW1lbWNweSh3cWVfcHRyLCBhZGRyZXNzLCBzZ2xfc2l6ZSk7CiYjNDM7CW1lbWNweShtYW5hX2dkX3JpbmdfcHRyKHdxLCBzZ2xfb2Zmc2V0KSwgYWRkcmVzcywgc2dsX3NpemUpOwogfQogCiBpbnQgbWFuYV9nZF9wb3N0X3dvcmtfcmVxdWVzdChzdHJ1Y3QgZ2RtYV9xdWV1ZSAqd3EsCkBAIC0xNTg0LDggJiM0MzsxNzI2LDEyIEBAIGludCBtYW5hX2dkX3Bvc3Rfd29ya19yZXF1ZXN0KHN0cnVjdCBnZG1hX3F1ZXVlICp3cSwKIAl1MzIgY2xpZW50X29vYl9zaXplID0gd3FlX3JlcS0mZ3Q7aW5saW5lX29vYl9zaXplOwogCXUzMiBzZ2xfZGF0YV9zaXplOwogCXUzMiBtYXhfd3FlX3NpemU7CiYjNDM7CXUzMiB3cWVfb2Zmc2V0OwomIzQzOwl1MzIgc2dsX29mZnNldDsKIAl1MzIgd3FlX3NpemU7CiYjNDM7CXUzMiBvb2JfbGVuOwogCXU4ICp3cWVfcHRyOwomIzQzOwl1MzIgaGVhZDsKIAogCWlmICh3cWVfcmVxLSZndDtudW1fc2dlID09IDApCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTYxNywxMyAmIzQzOzE3NjMsMTcgQEAgaW50IG1hbmFfZ2RfcG9zdF93b3JrX3JlcXVlc3Qoc3RydWN0IGdkbWFfcXVldWUgKndxLAogCWlmICh3cWVfaW5mbykKIAkJd3FlX2luZm8tJmd0O3dxZV9zaXplX2luX2J1ID0gd3FlX3NpemUgLyBHRE1BX1dRRV9CVV9TSVpFOwogCi0Jd3FlX3B0ciA9IG1hbmFfZ2RfZ2V0X3dxZV9wdHIod3EsIHdxLSZndDtoZWFkKTsKLQl3cWVfcHRyICYjNDM7PSBtYW5hX2dkX3dyaXRlX2NsaWVudF9vb2Iod3FlX3JlcSwgd3EtJmd0O3R5cGUsIGNsaWVudF9vb2Jfc2l6ZSwKLQkJCQkJICAgIHNnbF9kYXRhX3NpemUsIHdxZV9wdHIpOwotCWlmICh3cWVfcHRyICZndDs9ICh1OCAqKXdxLSZndDtxdWV1ZV9tZW1fcHRyICYjNDM7IHdxLSZndDtxdWV1ZV9zaXplKQotCQl3cWVfcHRyIC09IHdxLSZndDtxdWV1ZV9zaXplOwomIzQzOwloZWFkID0gd3EtJmd0O2hlYWQ7CiYjNDM7CXdxZV9vZmZzZXQgPSAoaGVhZCAqIEdETUFfV1FFX0JVX1NJWkUpICZhbXA7ICh3cS0mZ3Q7cXVldWVfc2l6ZSAtIDEpOwomIzQzOwl3cWVfcHRyID0gbWFuYV9nZF9nZXRfd3FlX3B0cih3cSwgaGVhZCk7CiYjNDM7CW9vYl9sZW4gPSBtYW5hX2dkX3dyaXRlX2NsaWVudF9vb2Iod3FlX3JlcSwgd3EtJmd0O3R5cGUsIGNsaWVudF9vb2Jfc2l6ZSwKJiM0MzsJCQkJCSAgIHNnbF9kYXRhX3NpemUsIHdxZV9wdHIpOwomIzQzOwomIzQzOwlzZ2xfb2Zmc2V0ID0gd3FlX29mZnNldCAmIzQzOyBvb2JfbGVuOwomIzQzOwlpZiAoc2dsX29mZnNldCAmZ3Q7PSB3cS0mZ3Q7cXVldWVfc2l6ZSkKJiM0MzsJCXNnbF9vZmZzZXQgLT0gd3EtJmd0O3F1ZXVlX3NpemU7CiAKLQltYW5hX2dkX3dyaXRlX3NnbCh3cSwgd3FlX3B0ciwgd3FlX3JlcSk7CiYjNDM7CW1hbmFfZ2Rfd3JpdGVfc2dsKHdxLCBzZ2xfb2Zmc2V0LCB3cWVfcmVxKTsKIAogCXdxLSZndDtoZWFkICYjNDM7PSB3cWVfc2l6ZSAvIEdETUFfV1FFX0JVX1NJWkU7CiAKQEAgLTE2NTMsMTEgJiM0MzsxODAzLDEwIEBAIGludCBtYW5hX2dkX3Bvc3RfYW5kX3Jpbmcoc3RydWN0IGdkbWFfcXVldWUgKnF1ZXVlLAogc3RhdGljIGludCBtYW5hX2dkX3JlYWRfY3FlKHN0cnVjdCBnZG1hX3F1ZXVlICpjcSwgc3RydWN0IGdkbWFfY29tcCAqY29tcCkKIHsKIAl1bnNpZ25lZCBpbnQgbnVtX2NxZSA9IGNxLSZndDtxdWV1ZV9zaXplIC8gc2l6ZW9mKHN0cnVjdCBnZG1hX2NxZSk7Ci0Jc3RydWN0IGdkbWFfY3FlICpjcV9jcWUgPSBjcS0mZ3Q7cXVldWVfbWVtX3B0cjsKIAl1MzIgb3duZXJfYml0cywgbmV3X2JpdHMsIG9sZF9iaXRzOwogCXN0cnVjdCBnZG1hX2NxZSAqY3FlOwogCi0JY3FlID0gJmFtcDtjcV9jcWVbY3EtJmd0O2hlYWQgJSBudW1fY3FlXTsKJiM0MzsJY3FlID0gbWFuYV9nZF9yaW5nX3B0cihjcSwgKGNxLSZndDtoZWFkICUgbnVtX2NxZSkgKiBzaXplb2YoKmNxZSkpOwogCW93bmVyX2JpdHMgPSBjcWUtJmd0O2NxZV9pbmZvLm93bmVyX2JpdHM7CiAKIAlvbGRfYml0cyA9IChjcS0mZ3Q7aGVhZCAvIG51bV9jcWUgLSAxKSAmYW1wOyBHRE1BX0NRRV9PV05FUl9NQVNLOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvaHdfY2hhbm5lbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvaHdfY2hhbm5lbC5jCmluZGV4IGUzYzI0ZDUwZGFkMDcuLjI2M2U3YzRlMjkzNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2h3X2NoYW5uZWwuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9od19jaGFubmVsLmMKQEAgLTQ3OSw3ICYjNDM7NDc5LDcgQEAgc3RhdGljIGludCBtYW5hX2h3Y19hbGxvY19kbWFfYnVmKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTE2IHFfZGVwdGgsCiAJYnVmX3NpemUgPSBNQU5BX1BBR0VfQUxJR04ocV9kZXB0aCAqIG1heF9tc2dfc2l6ZSk7CiAKIAlnbWkgPSAmYW1wO2RtYV9idWYtJmd0O21lbV9pbmZvOwotCWVyciA9IG1hbmFfZ2RfYWxsb2NfbWVtb3J5KGdjLCBidWZfc2l6ZSwgZ21pKTsKJiM0MzsJZXJyID0gbWFuYV9nZF9hbGxvY19tZW1vcnkoZ2MsIGJ1Zl9zaXplLCBnbWksIGZhbHNlKTsKIAlpZiAoZXJyKSB7CiAJCWRldl9lcnIoaHdjLSZndDtkZXYsICYjMzQ7RmFpbGVkIHRvIGFsbG9jYXRlIERNQSBidWZmZXIgc2l6ZTogJXUsIGVyciAlZFxuJiMzNDssCiAJCQlidWZfc2l6ZSwgZXJyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYwppbmRleCAyNTE5YTk4YWQwMGIwLi5iODAzNzExOTY4MDQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jCkBAIC00MCw2ICYjNDM7NDAsOSBAQCBzdGF0aWMgc3NpemVfdCBtYW5hX2RiZ19xX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudAogewogCXN0cnVjdCBnZG1hX3F1ZXVlICpnZG1hX3EgPSBmaWxwLSZndDtwcml2YXRlX2RhdGE7CiAKJiM0MzsJaWYgKGdkbWFfcS0mZ3Q7bWVtX2luZm8ubnJfcGFnZXMpCiYjNDM7CQlyZXR1cm4gbWFuYV9nZF9yZWFkX3JpbmcoZ2RtYV9xLCBidWYsIGNvdW50LCBwb3MpOwomIzQzOwogCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcihidWYsIGNvdW50LCBwb3MsIGdkbWFfcS0mZ3Q7cXVldWVfbWVtX3B0ciwKIAkJCQkgICAgICAgZ2RtYV9xLSZndDtxdWV1ZV9zaXplKTsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21hbmEvZ2RtYS5oIGIvaW5jbHVkZS9uZXQvbWFuYS9nZG1hLmgKaW5kZXggODUyOWNlZjBkN2M0NS4uYjBiMzIyYTgwYjYyOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbWFuYS9nZG1hLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbWFuYS9nZG1hLmgKQEAgLTI0MCw2ICYjNDM7MjQwLDE0IEBAIHN0cnVjdCBnZG1hX21lbV9pbmZvIHsKIAl2b2lkICp2aXJ0X2FkZHI7CiAJdTY0IGxlbmd0aDsKIAomIzQzOwkvKiBTY2F0dGVyZWQgZmFsbGJhY2s6IHdoZW4gQG5yX3BhZ2VzICZndDsgMCB0aGUgcmluZyBpcyB0aGF0IG1hbnkKJiM0MzsJICogUEFHRV9TSVpFIGNvaGVyZW50IGFsbG9jYXRpb25zIGluIEBwYWdlc192YS9AcGFnZXNfZG1hLCBub3QKJiM0MzsJICogQHZpcnRfYWRkci9AZG1hX2hhbmRsZS4KJiM0MzsJICovCiYjNDM7CXZvaWQgKipwYWdlc192YTsKJiM0MzsJZG1hX2FkZHJfdCAqcGFnZXNfZG1hOwomIzQzOwl1bnNpZ25lZCBpbnQgbnJfcGFnZXM7CiYjNDM7CiAJLyogQWxsb2NhdGVkIGJ5IHRoZSBQRiBkcml2ZXIgKi8KIAl1NjQgZG1hX3JlZ2lvbl9oYW5kbGU7CiB9OwpAQCAtNTEyLDYgJiM0Mzs1MjAsOSBAQCBpbnQgbWFuYV9nZF9wb2xsX2NxKHN0cnVjdCBnZG1hX3F1ZXVlICpjcSwgc3RydWN0IGdkbWFfY29tcCAqY29tcCwgaW50IG51bV9jcWUpOwogCiB2b2lkIG1hbmFfZ2RfcmluZ19jcShzdHJ1Y3QgZ2RtYV9xdWV1ZSAqY3EsIHU4IGFybV9iaXQpOwogCiYjNDM7c3NpemVfdCBtYW5hX2dkX3JlYWRfcmluZyhzdHJ1Y3QgZ2RtYV9xdWV1ZSAqcSwgY2hhciBfX3VzZXIgKmJ1ZiwKJiM0MzsJCQkgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpOwomIzQzOwogaW50IG1hbmFfc2NoZWR1bGVfc2Vydl93b3JrKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjLCBlbnVtIGdkbWFfZXFlX3R5cGUgdHlwZSk7CiAKIHZvaWQgbWFuYV9nZF9yaW5nX2RpbShzdHJ1Y3QgZ2RtYV9xdWV1ZSAqY3EsIHUzMiBtb2RfdXNlYywgYm9vbCBtb2RfdXNlY192bGQsCkBAIC02NjgsNiAmIzQzOzY3OSw5IEBAIGVudW0gewogLyogRHJpdmVyIHN1cHBvcnRzIGR5bmFtaWMgaW50ZXJydXB0IG1vZGVyYXRpb24gLSBESU0gKi8KICNkZWZpbmUgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9EWU5fSU5URVJSVVBUX01PREVSQVRJT04gQklUKDI4KQogCiYjNDM7LyogRHJpdmVyIHN1cHBvcnRzIG5vbi1jb250aWd1b3VzIHF1ZXVlIGJ1ZmZlcnMgKi8KJiM0MzsjZGVmaW5lIEdETUFfRFJWX0NBUF9GTEFHXzFfTk9OX0NPTlRJR1VPVVNfQlVGRkVSUyBCSVQoMzApCiYjNDM7CiAjZGVmaW5lIEdETUFfRFJWX0NBUF9GTEFHUzEgXAogCShHRE1BX0RSVl9DQVBfRkxBR18xX0VRX1NIQVJJTkdfTVVMVElfVlBPUlQgfCBcCiAJIEdETUFfRFJWX0NBUF9GTEFHXzFfTkFQSV9XS0RPTkVfRklYIHwgXApAQCAtNjg0LDcgJiM0Mzs2OTgsOCBAQCBlbnVtIHsKIAkgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9IQU5ETEVfU1RBTExfU1FfUkVDT1ZFUlkgfCBcCiAJIEdETUFfRFJWX0NBUF9GTEFHXzFfSFdDX1RJTUVPVVRfUkVDT1ZFUlkgfCBcCiAJIEdETUFfRFJWX0NBUF9GTEFHXzFfRVFfTVNJX1VOU0hBUkVfTVVMVElfVlBPUlQgfCBcCi0JIEdETUFfRFJWX0NBUF9GTEFHXzFfRFlOX0lOVEVSUlVQVF9NT0RFUkFUSU9OKQomIzQzOwkgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9EWU5fSU5URVJSVVBUX01PREVSQVRJT04gfCBcCiYjNDM7CSBHRE1BX0RSVl9DQVBfRkxBR18xX05PTl9DT05USUdVT1VTX0JVRkZFUlMpCiAKICNkZWZpbmUgR0RNQV9EUlZfQ0FQX0ZMQUdTMiAwCiAKQEAgLTEwNDUsNyAmIzQzOzEwNjAsNyBAQCB2b2lkIG1hbmFfZ2Rfd3FfcmluZ19kb29yYmVsbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYywKIAkJCSAgICAgIHN0cnVjdCBnZG1hX3F1ZXVlICpxdWV1ZSk7CiAKIGludCBtYW5hX2dkX2FsbG9jX21lbW9yeShzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYywgdW5zaWduZWQgaW50IGxlbmd0aCwKLQkJCSBzdHJ1Y3QgZ2RtYV9tZW1faW5mbyAqZ21pKTsKJiM0MzsJCQkgc3RydWN0IGdkbWFfbWVtX2luZm8gKmdtaSwgYm9vbCBhbGxvd19zY2F0dGVyKTsKIAogdm9pZCBtYW5hX2dkX2ZyZWVfbWVtb3J5KHN0cnVjdCBnZG1hX21lbV9pbmZvICpnbWkpOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIyOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2MDkKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAzOTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGdXp6aW5nIFBvdGVudGlhbCBvZiBUaGlzIE1BTkEgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdG91Y2hlcyBgZ2RtYV9tYWluLmNgLCBgaHdfY2hhbm5lbC5jYCwgYG1hbmFfZW4uY2AsIGFuZCBgZ2RtYS5oYCDigJMgYWxsIHdpdGhpbiB0aGUgTUFOQSBkcml2ZXIsIHdoaWNoIHNlZW1zIHRvIGJlIHRoZSBNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyLiBJdCYjMzk7cyBhZGRpbmcgc3VwcG9ydCBmb3Igc2NhdHRlcmVkIGZhbGxiYWNrIG1lbW9yeSBhbGxvY2F0aW9uLCB3aGljaCBpcyBpbnRlcmVzdGluZyBpbiBpdHNlbGYuIEJ1dCBoZXJlJiMzOTtzIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBpcyB0aGlzIHBhdGNoIHdvcnRoIGZ1enppbmcsIGJhc2VkIG9uIHRoZSBzcGVjaWZpYyBjcml0ZXJpYT8KCkxldCYjMzk7cyBzZWUsIHRoZSBpbnN0cnVjdGlvbnMgc3RhdGUgdGhhdCBhIHBhdGNoIGlzbiYjMzk7dCB3b3J0aCBmdXp6aW5nIGlmIGl0JiMzOTtzIGdvdCBjb2RlIHRoYXQmIzM5O3MgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciByZWxpZXMgb24gc3BlY2lhbGl6ZWQgaGFyZHdhcmUuIFNvLCBteSBpbml0aWFsIHRob3VnaHQgaXMsIE1BTkEgaXMgYSB2aXJ0dWFsaXplZCBuZXR3b3JrIGRyaXZlciwgdXNlZCBpbiBBenVyZSwgc3BlY2lmaWNhbGx5IEh5cGVyLVYsIGFuZCBJJiMzOTttIHByZXR0eSBzdXJlIGl0IGRvZXNuJiMzOTt0IHJ1biBpbiBzdGFuZGFyZCBRRU1VLiBUaGF0JiMzOTtzIGEgcmVkIGZsYWcuIEJ1dCB3YWl0LCBjYW4gSHlwZXItViBndWVzdHMgcnVuIGluIFFFTVU/IEhtbSwgbm90IHdpdGggdGhpcyBNQU5BIGhhcmR3YXJlLCBpdCYjMzk7cyBhIHNwZWNpZmljIEF6dXJlIFNSLUlPViBhZGFwdGVyLiBJdCYjMzk7cyBhbiBBenVyZS1zcGVjaWZpYyBoYXJkd2FyZS4gU28sIE1BTkEgaXMgdmVuZG9yLXNwZWNpZmljLCBidXQgbm90IGEgU21hcnROSUMgb3IgR1BVIGRyaXZlciBsaWtlIHRoZSBjcml0ZXJpYSBkZXNjcmliZSwgYW5kIEkmIzM5O20gY2VydGFpbiBpdCBpc24mIzM5O3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KCkl0IGlzIGEgUENJIGRldmljZSwgc3BlY2lmaWNhbGx5IHRoZSBNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyLiBDYW4gc3l6a2FsbGVyIGV2ZW4gdG91Y2ggaXQ/IFN5emthbGxlciBydW5zIGluIFFFTVUvR0NFLCByaWdodD8gQW5kIGl0IHN1cmUgZG9lc24mIzM5O3QgaGF2ZSBNQU5BIGhhcmR3YXJlLi4uIHRoYXQmIzM5O3MgYSBwcm9ibGVtLiBTeXprYWxsZXIgZG9lc24mIzM5O3QgZW11bGF0ZSBNQU5BLiBUaGlzIGxvb2tzIGxpa2UgYSBkZWZpbml0ZSBuby1nbyBmb3Igc3RhbmRhcmQgZnV6emluZy4gSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkmIzM5O2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIGlmIHRoZSBNQU5BIGNvZGUgaXMgcmVhY2hhYmxlLCBvciBkZXBlbmRlbnQgb24gYW55IHNwZWNpZmljIGhhcmR3YXJlIHRoYXQgbWFrZXMgaXQgaW5hY2Nlc3NpYmxlIHRvIHRoZSBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50LiBBIHF1aWNrIGBtYW5hYCBzZWFyY2ggaW4gdGhlIGtlcm5lbCBzaG91bGQgcHJvdmlkZSBjb25maXJtYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjI6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX01JQ1JPU09GVF9NQU5BJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9NYWtlZmlsZS00LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX01JQ1JPU09GVF9NQU5BKSAmIzQzOz0gbWFuYS9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9NYWtlZmlsZS00LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvTWFrZWZpbGU6NTpvYmotJChDT05GSUdfTUlDUk9TT0ZUX01BTkEpICYjNDM7PSBtYW5hLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL01ha2VmaWxlLTYtbWFuYS1vYmpzIDo9IGdkbWFfbWFpbi5vIHNobV9jaGFubmVsLm8gaHdfY2hhbm5lbC5vIG1hbmFfZW4ubyBtYW5hX2V0aHRvb2wubyBtYW5hX2JwZi5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjI6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTU5MgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIENvZGUgUGF0aHMgaW4gdGhlIE1BTkEgRHJpdmVyKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgbmVlZCB0byByZXRoaW5rIHRoaXMuIEl0IGp1c3QgaGl0IG1lOiBzeXprYWxsZXIsIGFzIGZhciBhcyBJIHVuZGVyc3RhbmQgaXQsIGRvZXNuJiMzOTt0IGFjdHVhbGx5IGVtdWxhdGUgdGhlIE1BTkEgUENJIGRldmljZXMuIFRoYXQgcHJlc2VudHMgYSBzZXJpb3VzIGh1cmRsZS4gSSB3YXMgYXNzdW1pbmcgaXQgY291bGQsIGJ1dCBub3cgSSYjMzk7bSBxdWVzdGlvbmluZyB0aGUgYmFzaXMgb2YgbXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MuCgpTbywgaWYgc3l6a2FsbGVyIGlzbiYjMzk7dCBvdXIgcm91dGUgaW4sIGhvdyAqZWxzZSogY2FuIHdlIGV4ZXJjaXNlIHRoaXMgc3BlY2lmaWMgY29kZT8gVGhlIGRyaXZlciYjMzk7cyBhcmNoaXRlY3R1cmUgbGVhbnMgb24gYmVpbmcgYSBQQ0kgZHJpdmVyLCB3aGljaCBtZWFucyBpdCBzaG91bGQgYmUgbG9hZGVkIGFuZCBtYW5hZ2VkIHRocm91Z2ggdGhlIFBDSSBzdWJzeXN0ZW0uIEkgbmVlZCB0byBjb25maXJtIGlmIHRoZXJlIGFyZSBhbHRlcm5hdGl2ZSBlbnRyeSBwb2ludHMgYmV5b25kIHRoZSBzaW11bGF0ZWQgZW52aXJvbm1lbnQuCgpUbyBzdGFydCwgbGV0IG1lIHF1aWNrbHkgcGl2b3QgdG8gYGRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jYCBhbmQgc3BlY2lmaWNhbGx5IGxvb2sgZm9yIHJlZmVyZW5jZXMgdG8gYHBjaV9kcml2ZXJgLiBUaGlzIHNob3VsZCBwcm92aWRlIGNydWNpYWwgaW5zaWdodHMuIEJ5IGV4YW1pbmluZyBob3cgdGhlIGRyaXZlciByZWdpc3RlcnMgd2l0aCBhbmQgaW50ZXJhY3RzIHdpdGggdGhlIFBDSSBidXMsIEkgY2FuIGdldCBhIGJldHRlciBncmlwIG9uIHdoZXRoZXIgdGhpcyBjb2RlIGlzIGV2ZW4gcmVtb3RlbHkgcmVhY2hhYmxlIGdpdmVuIG91ciBjdXJyZW50IGNvbnN0cmFpbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIyOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BjaV9kcml2ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmM9MjcwMD1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgbWFuYV9pZF90YWJsZVtdID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jLTI3MDYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYzoyNzA3OnN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBtYW5hX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jLTI3MDgtXHQubmFtZVx0XHQ9IFwmIzM0O21hbmFcJiMzNDssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjI6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwNjQKCQkJCQkJCW91dHB1dDogODYKCQkJCQkJCXRob3VnaHRzOiAyNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudDogTUFOQSBEcml2ZXIgRnV6emluZyBJbmZlYXNpYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyB0aGluayB0aGlzIHRocm91Z2guIFRoaXMgaXMgYSBQQ0kgZHJpdmVyIHNwZWNpZmljYWxseSBmb3IgdGhlIE1pY3Jvc29mdCBBenVyZSBOZXR3b3JrIEFkYXB0ZXIsIE1BTkEuIEFuZCBmcm9tIHdoYXQgSSB1bmRlcnN0YW5kLCBpdCYjMzk7cyBub3Qgc29tZXRoaW5nIHlvdSBjYW4ganVzdCBzcGluIHVwIGFuZCBwbGF5IHdpdGggaW4gYSBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudC4gSXQmIzM5O3MgYSB2ZW5kb3Itc3BlY2lmaWMgcGllY2Ugb2YgaGFyZHdhcmUgdGhhdCBuZWNlc3NpdGF0ZXMgYWN0dWFsLCBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlLCBvciBhdCBsZWFzdCBhIHZlcnkgc3BlY2lhbGl6ZWQgZW11bGF0aW9uLgoKR2l2ZW4gdGhhdCwgdGhpcyBpbW1lZGlhdGVseSBzY3JlYW1zICYjMzQ7V29ydGhGdXp6aW5nPWZhbHNlJiMzNDsuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhlIGluc3RydWN0aW9ucyBmb3IgZXZhbHVhdGluZyB0aGUgcGF0Y2g6IGFtIEkgZGVhbGluZyB3aXRoIGNvZGUgaW1wb3NzaWJsZSB0byB0b3VjaCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IOKAkyBldmVuIGlmIHRoYXQgZW52aXJvbm1lbnQgaGFzIGNsZXZlciBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZS4gSXQgc2VlbXMgbGlrZSBhIGxvdCBvZiB0aGUgZXhhbXBsZXMgd2VyZSBQQ0ktYmFzZWQgYW5kL29yIFNtYXJ0TklDJiMzOTtzIC0gc2ltaWxhciB0byBteSBjdXJyZW50IHNpdHVhdGlvbi4KCkkmIzM5O3ZlIGdvbmUgdGhyb3VnaCB0aGUgZ3VpZGVsaW5lcywgYW5kIGl0JiMzOTtzIGNsZWFyOiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBkcml2ZXJzIGxpa2UgTUFOQSDigJMgZGVzaWduZWQgZm9yIHBoeXNpY2FsIGhhcmR3YXJlIHRoYXQgUUVNVSBkb2VzbiYjMzk7dCwgYW5kIHByb2JhYmx5ICpjYW4mIzM5O3QqLCBlbXVsYXRlIOKAkyBhcmUgZXhhY3RseSB0aGUgY2F0ZWdvcnkgdGhhdCBkaXNxdWFsaWZpZXMgaXQuIFRoZSBNQU5BIGRyaXZlciBpcyB0aGUgc2FtZTsgaXQmIzM5O3MgaGFyZHdhcmUtZGVwZW5kZW50LCBzbyBJIG5lZWQgdG8gc2V0IHRoZSBmdXp6aW5nIGZsYWcgdG8gZmFsc2UuIEkgd2lsbCBtYXJrIGl0IGFzIHN1Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjI6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlciAoTUFOQSkgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIGRldmljZSBkcml2ZXIuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50cyB1c2VkIGJ5IHN5emthbGxlciwgbWFraW5nIHRoZSBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBzdGFuZGFyZCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1pY3Jvc29mdCBBenVyZSBOZXR3b3JrIEFkYXB0ZXIgKE1BTkEpIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBkZXZpY2UgZHJpdmVyLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudHMgdXNlZCBieSBzeXprYWxsZXIsIG1ha2luZyB0aGUgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBkdXJpbmcgc3RhbmRhcmQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjI6MDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIyOjAzOjQ1LjE1Mjk3NjExOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMDIzMTY3NDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1pY3Jvc29mdCBBenVyZSBOZXR3b3JrIEFkYXB0ZXIgKE1BTkEpIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBkZXZpY2UgZHJpdmVyLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudHMgdXNlZCBieSBzeXprYWxsZXIsIG1ha2luZyB0aGUgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBkdXJpbmcgc3RhbmRhcmQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIyOjAzOjQ1LjE1Mjk4MTU3OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYzMzEzMzgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYmQ4YmVjZDA1YjIyMGVlNGMwY2MwZjMyZDQxODJkNThjMjU2ZmVlYVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyA3IDIyOjAzOjQ0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmNcXG5pbmRleCBhMzhkNGJiNzQ2MjFmLi5lZDlhZjMxNGU0ZWRlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmNcXG5AQCAtMTEsNiArMTEsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbXNpLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pcnFkb21haW4uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2V4cG9ydC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdWFjY2Vzcy5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9tYW5hL21hbmEuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9tYW5hL2h3X2NoYW5uZWwuaFxcdTAwM2VcXG5AQCAtMzc0LDI4ICszNzUsOTYgQEAgaW50IG1hbmFfZ2Rfc2VuZF9yZXF1ZXN0KHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjLCB1MzIgcmVxX2xlbiwgY29uc3Qgdm9pZCAqcmVxLFxcbiBFWFBPUlRfU1lNQk9MX05TKG1hbmFfZ2Rfc2VuZF9yZXF1ZXN0LCBcXFwiTkVUX01BTkFcXFwiKTtcXG4gXFxuIGludCBtYW5hX2dkX2FsbG9jX21lbW9yeShzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYywgdW5zaWduZWQgaW50IGxlbmd0aCxcXG4tXFx0XFx0XFx0IHN0cnVjdCBnZG1hX21lbV9pbmZvICpnbWkpXFxuK1xcdFxcdFxcdCBzdHJ1Y3QgZ2RtYV9tZW1faW5mbyAqZ21pLCBib29sIGFsbG93X3NjYXR0ZXIpXFxuIHtcXG4rXFx0dW5zaWduZWQgaW50IG5wYWdlcywgaTtcXG4gXFx0ZG1hX2FkZHJfdCBkbWFfaGFuZGxlO1xcbitcXHRib29sIGNhbl9mYWxsYmFjaztcXG4gXFx0dm9pZCAqYnVmO1xcbiBcXG4gXFx0aWYgKGxlbmd0aCBcXHUwMDNjIE1BTkFfUEFHRV9TSVpFIHx8ICFpc19wb3dlcl9vZl8yKGxlbmd0aCkpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4gXFx0Z21pLVxcdTAwM2VkZXYgPSBnYy1cXHUwMDNlZGV2O1xcbi1cXHRidWYgPSBkbWFfYWxsb2NfY29oZXJlbnQoZ21pLVxcdTAwM2VkZXYsIGxlbmd0aCwgXFx1MDAyNmRtYV9oYW5kbGUsIEdGUF9LRVJORUwpO1xcbi1cXHRpZiAoIWJ1ZilcXG4rXFxuK1xcdC8qIEFuIGFsbG9jYXRpb24gdGhhdCBmaXRzIGluIG9uZSBwYWdlIGRvZXMgbm90IGJlbmVmaXQgZnJvbVxcbitcXHQgKiBmYWxsYmFjay5cXG4rXFx0ICovXFxuK1xcdGNhbl9mYWxsYmFjayA9IGFsbG93X3NjYXR0ZXIgXFx1MDAyNlxcdTAwMjYgbGVuZ3RoIFxcdTAwM2UgUEFHRV9TSVpFO1xcbitcXG4rXFx0LyogV2FybiBvbmx5IHdoZW4gdGhlcmUgaXMgbm8gZmFsbGJhY2sgdG8gcmVzY3VlIHRoZSBmYWlsdXJlLiAqL1xcbitcXHRidWYgPSBkbWFfYWxsb2NfY29oZXJlbnQoZ21pLVxcdTAwM2VkZXYsIGxlbmd0aCwgXFx1MDAyNmRtYV9oYW5kbGUsXFxuK1xcdFxcdFxcdFxcdCBHRlBfS0VSTkVMIHxcXG4rXFx0XFx0XFx0XFx0IChjYW5fZmFsbGJhY2sgPyBfX0dGUF9OT1dBUk4gOiAwKSk7XFxuK1xcdGlmIChidWYpIHtcXG4rXFx0XFx0Z21pLVxcdTAwM2VkbWFfaGFuZGxlID0gZG1hX2hhbmRsZTtcXG4rXFx0XFx0Z21pLVxcdTAwM2V2aXJ0X2FkZHIgPSBidWY7XFxuK1xcdFxcdGdtaS1cXHUwMDNlbGVuZ3RoID0gbGVuZ3RoO1xcbitcXHRcXHRnbWktXFx1MDAzZW5yX3BhZ2VzID0gMDtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghY2FuX2ZhbGxiYWNrKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuLVxcdGdtaS1cXHUwMDNlZG1hX2hhbmRsZSA9IGRtYV9oYW5kbGU7XFxuLVxcdGdtaS1cXHUwMDNldmlydF9hZGRyID0gYnVmO1xcbitcXHQvKiBsZW5ndGggaXMgYSBwb3dlciBvZiAyIGFib3ZlIFBBR0VfU0laRSwgc28gdGhpcyBkaXZpZGVzIGV4YWN0bHkuICovXFxuK1xcdG5wYWdlcyA9IGxlbmd0aCAvIFBBR0VfU0laRTtcXG4rXFxuK1xcdGdtaS1cXHUwMDNlcGFnZXNfdmEgPSBrdmNhbGxvYyhucGFnZXMsIHNpemVvZigqZ21pLVxcdTAwM2VwYWdlc192YSksIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIWdtaS1cXHUwMDNlcGFnZXNfdmEpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0Z21pLVxcdTAwM2VwYWdlc19kbWEgPSBrdmNhbGxvYyhucGFnZXMsIHNpemVvZigqZ21pLVxcdTAwM2VwYWdlc19kbWEpLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFnbWktXFx1MDAzZXBhZ2VzX2RtYSlcXG4rXFx0XFx0Z290byBmcmVlX3ZhO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5wYWdlczsgaSsrKSB7XFxuK1xcdFxcdGdtaS1cXHUwMDNlcGFnZXNfdmFbaV0gPSBkbWFfYWxsb2NfY29oZXJlbnQoZ21pLVxcdTAwM2VkZXYsIFBBR0VfU0laRSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNmdtaS1cXHUwMDNlcGFnZXNfZG1hW2ldLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBHRlBfS0VSTkVMKTtcXG4rXFx0XFx0aWYgKCFnbWktXFx1MDAzZXBhZ2VzX3ZhW2ldKVxcbitcXHRcXHRcXHRnb3RvIGZyZWVfcGFnZXM7XFxuK1xcdH1cXG4rXFxuK1xcdGRldl9pbmZvX3JhdGVsaW1pdGVkKGdtaS1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHQgICAgIFxcXCJjb250aWd1b3VzICV1LWJ5dGUgRE1BIGFsbG9jIGZhaWxlZDsgdXNpbmcgJXUgc2NhdHRlcmVkIHBhZ2VzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgIGxlbmd0aCwgbnBhZ2VzKTtcXG4rXFxuK1xcdGdtaS1cXHUwMDNldmlydF9hZGRyID0gTlVMTDtcXG4rXFx0Z21pLVxcdTAwM2VkbWFfaGFuZGxlID0gMDtcXG4gXFx0Z21pLVxcdTAwM2VsZW5ndGggPSBsZW5ndGg7XFxuK1xcdGdtaS1cXHUwMDNlbnJfcGFnZXMgPSBucGFnZXM7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4rXFxuK2ZyZWVfcGFnZXM6XFxuK1xcdHdoaWxlIChpLS0pXFxuK1xcdFxcdGRtYV9mcmVlX2NvaGVyZW50KGdtaS1cXHUwMDNlZGV2LCBQQUdFX1NJWkUsIGdtaS1cXHUwMDNlcGFnZXNfdmFbaV0sXFxuK1xcdFxcdFxcdFxcdCAgZ21pLVxcdTAwM2VwYWdlc19kbWFbaV0pO1xcbitcXHRrdmZyZWUoZ21pLVxcdTAwM2VwYWdlc19kbWEpO1xcbitcXHRnbWktXFx1MDAzZXBhZ2VzX2RtYSA9IE5VTEw7XFxuK2ZyZWVfdmE6XFxuK1xcdGt2ZnJlZShnbWktXFx1MDAzZXBhZ2VzX3ZhKTtcXG4rXFx0Z21pLVxcdTAwM2VwYWdlc192YSA9IE5VTEw7XFxuK1xcdHJldHVybiAtRU5PTUVNO1xcbiB9XFxuIFxcbiB2b2lkIG1hbmFfZ2RfZnJlZV9tZW1vcnkoc3RydWN0IGdkbWFfbWVtX2luZm8gKmdtaSlcXG4ge1xcbitcXHR1bnNpZ25lZCBpbnQgaTtcXG4rXFxuK1xcdGlmIChnbWktXFx1MDAzZW5yX3BhZ2VzIFxcdTAwM2UgMCkge1xcbitcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZ21pLVxcdTAwM2Vucl9wYWdlczsgaSsrKVxcbitcXHRcXHRcXHRkbWFfZnJlZV9jb2hlcmVudChnbWktXFx1MDAzZWRldiwgUEFHRV9TSVpFLCBnbWktXFx1MDAzZXBhZ2VzX3ZhW2ldLFxcbitcXHRcXHRcXHRcXHRcXHQgIGdtaS1cXHUwMDNlcGFnZXNfZG1hW2ldKTtcXG4rXFx0XFx0a3ZmcmVlKGdtaS1cXHUwMDNlcGFnZXNfdmEpO1xcbitcXHRcXHRrdmZyZWUoZ21pLVxcdTAwM2VwYWdlc19kbWEpO1xcbitcXHRcXHRnbWktXFx1MDAzZXBhZ2VzX3ZhID0gTlVMTDtcXG4rXFx0XFx0Z21pLVxcdTAwM2VwYWdlc19kbWEgPSBOVUxMO1xcbitcXHRcXHRnbWktXFx1MDAzZW5yX3BhZ2VzID0gMDtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbiBcXHRkbWFfZnJlZV9jb2hlcmVudChnbWktXFx1MDAzZWRldiwgZ21pLVxcdTAwM2VsZW5ndGgsIGdtaS1cXHUwMDNldmlydF9hZGRyLFxcbiBcXHRcXHRcXHQgIGdtaS1cXHUwMDNlZG1hX2hhbmRsZSk7XFxuIH1cXG5AQCAtNzUzLDExICs4MjIsNzMgQEAgaW50IG1hbmFfc2NoZWR1bGVfc2Vydl93b3JrKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjLCBlbnVtIGdkbWFfZXFlX3R5cGUgdHlwZSlcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuKy8qIFJldHVybiB0aGUgQ1BVIGFkZHJlc3Mgb2YgYnl0ZSBAb2Zmc2V0IHdpdGhpbiBhIHF1ZXVlJ3MgcmluZyBidWZmZXIuICovXFxuK3N0YXRpYyB2b2lkICptYW5hX2dkX3JpbmdfcHRyKGNvbnN0IHN0cnVjdCBnZG1hX3F1ZXVlICpxLCB1MzIgb2Zmc2V0KVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBnZG1hX21lbV9pbmZvICpnbWkgPSBcXHUwMDI2cS1cXHUwMDNlbWVtX2luZm87XFxuK1xcbitcXHRpZiAoZ21pLVxcdTAwM2Vucl9wYWdlcyBcXHUwMDNlIDApXFxuK1xcdFxcdHJldHVybiAodTggKilnbWktXFx1MDAzZXBhZ2VzX3ZhW29mZnNldCAvIFBBR0VfU0laRV0gK1xcbitcXHRcXHQgICAgICAgKG9mZnNldCBcXHUwMDI2IChQQUdFX1NJWkUgLSAxKSk7XFxuK1xcbitcXHRyZXR1cm4gcS1cXHUwMDNlcXVldWVfbWVtX3B0ciArIG9mZnNldDtcXG4rfVxcbitcXG4rLyogTnVtYmVyIG9mIGJ5dGVzIGZyb20gQG9mZnNldCB0byB0aGUgZW5kIG9mIHRoZSBDUFUtY29udGlndW91cyByZWdpb246IHRoZVxcbisgKiByZXN0IG9mIHRoZSByaW5nLCBvciB0aGUgcmVzdCBvZiB0aGUgY3VycmVudCBwYWdlIHdoZW4gc2NhdHRlcmVkLlxcbisgKi9cXG4rc3RhdGljIHUzMiBtYW5hX2dkX3JpbmdfY29udGlnX2F2YWlsKGNvbnN0IHN0cnVjdCBnZG1hX3F1ZXVlICpxLCB1MzIgb2Zmc2V0KVxcbit7XFxuK1xcdGlmIChxLVxcdTAwM2VtZW1faW5mby5ucl9wYWdlcyBcXHUwMDNlIDApXFxuK1xcdFxcdHJldHVybiBQQUdFX1NJWkUgLSAob2Zmc2V0IFxcdTAwMjYgKFBBR0VfU0laRSAtIDEpKTtcXG4rXFxuK1xcdHJldHVybiBxLVxcdTAwM2VxdWV1ZV9zaXplIC0gb2Zmc2V0O1xcbit9XFxuK1xcbisvKiBDb3B5IHVwIHRvIEBjb3VudCBieXRlcyBmcm9tIHJpbmcgb2Zmc2V0ICpAcG9zIG9mIEBxIGludG8gdXNlciBidWZmZXIgQGJ1ZixcXG4rICogc28gYSBzY2F0dGVyZWQgcmluZyByZWFkcyBiYWNrIGFzIGlmIGl0IHdlcmUgY29udGlndW91cy4gUmV0dXJucyBieXRlc1xcbisgKiBjb3BpZWQsIDAgYXQgZW5kIG9mIHJpbmcsIG9yIGEgbmVnYXRpdmUgZXJybm8uXFxuKyAqL1xcbitzc2l6ZV90IG1hbmFfZ2RfcmVhZF9yaW5nKHN0cnVjdCBnZG1hX3F1ZXVlICpxLCBjaGFyIF9fdXNlciAqYnVmLFxcbitcXHRcXHRcXHQgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpXFxuK3tcXG4rXFx0dTMyIHNpemUgPSBxLVxcdTAwM2VxdWV1ZV9zaXplO1xcbitcXHRsb2ZmX3Qgb2ZmID0gKnBvcztcXG4rXFx0c2l6ZV90IGNvcGllZCA9IDA7XFxuK1xcbitcXHRpZiAob2ZmIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdGlmIChvZmYgXFx1MDAzZT0gc2l6ZSB8fCAhY291bnQpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRjb3VudCA9IG1pbl90KHNpemVfdCwgY291bnQsIHNpemUgLSBvZmYpO1xcbitcXG4rXFx0d2hpbGUgKGNvdW50KSB7XFxuK1xcdFxcdHUzMiBvZmZzZXQgPSBvZmY7XFxuK1xcdFxcdHUzMiBhdmFpbCA9IG1hbmFfZ2RfcmluZ19jb250aWdfYXZhaWwocSwgb2Zmc2V0KTtcXG4rXFx0XFx0c2l6ZV90IGNodW5rID0gbWluX3Qoc2l6ZV90LCBjb3VudCwgYXZhaWwpO1xcbitcXHRcXHRzaXplX3QgbGVmdCA9IGNvcHlfdG9fdXNlcihidWYsIG1hbmFfZ2RfcmluZ19wdHIocSwgb2Zmc2V0KSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgY2h1bmspO1xcbitcXG4rXFx0XFx0Y2h1bmsgLT0gbGVmdDtcXG4rXFx0XFx0YnVmICs9IGNodW5rO1xcbitcXHRcXHRvZmYgKz0gY2h1bms7XFxuK1xcdFxcdGNvcGllZCArPSBjaHVuaztcXG4rXFx0XFx0Y291bnQgLT0gY2h1bms7XFxuK1xcdFxcdGlmIChsZWZ0KVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCFjb3BpZWQpXFxuK1xcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXG4rXFx0KnBvcyA9IG9mZjtcXG4rXFx0cmV0dXJuIGNvcGllZDtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgbWFuYV9nZF9wcm9jZXNzX2VxZShzdHJ1Y3QgZ2RtYV9xdWV1ZSAqZXEpXFxuIHtcXG4gXFx0dTMyIGhlYWQgPSBlcS1cXHUwMDNlaGVhZCAlIChlcS1cXHUwMDNlcXVldWVfc2l6ZSAvIEdETUFfRVFFX1NJWkUpO1xcbiBcXHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyA9IGVxLVxcdTAwM2VnZG1hX2Rldi1cXHUwMDNlZ2RtYV9jb250ZXh0O1xcbi1cXHRzdHJ1Y3QgZ2RtYV9lcWUgKmVxX2VxZV9wdHIgPSBlcS1cXHUwMDNlcXVldWVfbWVtX3B0cjtcXG4gXFx0dW5pb24gZ2RtYV9lcWVfaW5mbyBlcWVfaW5mbztcXG4gXFx0ZW51bSBnZG1hX2VxZV90eXBlIHR5cGU7XFxuIFxcdHN0cnVjdCBnZG1hX2V2ZW50IGV2ZW50O1xcbkBAIC03NjUsNyArODk2LDcgQEAgc3RhdGljIHZvaWQgbWFuYV9nZF9wcm9jZXNzX2VxZShzdHJ1Y3QgZ2RtYV9xdWV1ZSAqZXEpXFxuIFxcdHN0cnVjdCBnZG1hX2VxZSAqZXFlO1xcbiBcXHR1MzIgY3FfaWQ7XFxuIFxcbi1cXHRlcWUgPSBcXHUwMDI2ZXFfZXFlX3B0cltoZWFkXTtcXG4rXFx0ZXFlID0gbWFuYV9nZF9yaW5nX3B0cihlcSwgaGVhZCAqIHNpemVvZigqZXFlKSk7XFxuIFxcdGVxZV9pbmZvLmFzX3VpbnQzMiA9IGVxZS1cXHUwMDNlZXFlX2luZm87XFxuIFxcdHR5cGUgPSBlcWVfaW5mby50eXBlO1xcbiBcXG5AQCAtODI5LDcgKzk2MCw2IEBAIHN0YXRpYyB2b2lkIG1hbmFfZ2RfcHJvY2Vzc19lcV9ldmVudHModm9pZCAqYXJnKVxcbiB7XFxuIFxcdHUzMiBvd25lcl9iaXRzLCBuZXdfYml0cywgb2xkX2JpdHM7XFxuIFxcdHVuaW9uIGdkbWFfZXFlX2luZm8gZXFlX2luZm87XFxuLVxcdHN0cnVjdCBnZG1hX2VxZSAqZXFfZXFlX3B0cjtcXG4gXFx0c3RydWN0IGdkbWFfcXVldWUgKmVxID0gYXJnO1xcbiBcXHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYztcXG4gXFx0c3RydWN0IGdkbWFfZXFlICplcWU7XFxuQEAgLTgzOSwxMSArOTY5LDEwIEBAIHN0YXRpYyB2b2lkIG1hbmFfZ2RfcHJvY2Vzc19lcV9ldmVudHModm9pZCAqYXJnKVxcbiBcXHRnYyA9IGVxLVxcdTAwM2VnZG1hX2Rldi1cXHUwMDNlZ2RtYV9jb250ZXh0O1xcbiBcXG4gXFx0bnVtX2VxZSA9IGVxLVxcdTAwM2VxdWV1ZV9zaXplIC8gR0RNQV9FUUVfU0laRTtcXG4tXFx0ZXFfZXFlX3B0ciA9IGVxLVxcdTAwM2VxdWV1ZV9tZW1fcHRyO1xcbiBcXG4gXFx0LyogUHJvY2VzcyB1cCB0byA1IEVRRXMgYXQgYSB0aW1lLCBhbmQgdXBkYXRlIHRoZSBIVyBoZWFkLiAqL1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgNTsgaSsrKSB7XFxuLVxcdFxcdGVxZSA9IFxcdTAwMjZlcV9lcWVfcHRyW2VxLVxcdTAwM2VoZWFkICUgbnVtX2VxZV07XFxuK1xcdFxcdGVxZSA9IG1hbmFfZ2RfcmluZ19wdHIoZXEsIChlcS1cXHUwMDNlaGVhZCAlIG51bV9lcWUpICogc2l6ZW9mKCplcWUpKTtcXG4gXFx0XFx0ZXFlX2luZm8uYXNfdWludDMyID0gZXFlLVxcdTAwM2VlcWVfaW5mbztcXG4gXFx0XFx0b3duZXJfYml0cyA9IGVxZV9pbmZvLm93bmVyX2JpdHM7XFxuIFxcbkBAIC0xMTA3LDcgKzEyMzYsNyBAQCBpbnQgbWFuYV9nZF9jcmVhdGVfaHdjX3F1ZXVlKHN0cnVjdCBnZG1hX2RldiAqZ2QsXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG4gXFx0Z21pID0gXFx1MDAyNnF1ZXVlLVxcdTAwM2VtZW1faW5mbztcXG4tXFx0ZXJyID0gbWFuYV9nZF9hbGxvY19tZW1vcnkoZ2MsIHNwZWMtXFx1MDAzZXF1ZXVlX3NpemUsIGdtaSk7XFxuK1xcdGVyciA9IG1hbmFfZ2RfYWxsb2NfbWVtb3J5KGdjLCBzcGVjLVxcdTAwM2VxdWV1ZV9zaXplLCBnbWksIGZhbHNlKTtcXG4gXFx0aWYgKGVycikge1xcbiBcXHRcXHRkZXZfZXJyKGdjLVxcdTAwM2VkZXYsIFxcXCJHRE1BIHF1ZXVlIHR5cGU6ICVkLCBzaXplOiAldSwgZ2RtYSBtZW1vcnkgYWxsb2NhdGlvbiBlcnI6ICVkXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRzcGVjLVxcdTAwM2V0eXBlLCBzcGVjLVxcdTAwM2VxdWV1ZV9zaXplLCBlcnIpO1xcbkBAIC0xMTgyLDcgKzEzMTEsNyBAQCBzdGF0aWMgaW50IG1hbmFfZ2RfY3JlYXRlX2RtYV9yZWdpb24oc3RydWN0IGdkbWFfZGV2ICpnZCxcXG4gXFx0aWYgKGxlbmd0aCBcXHUwMDNjIE1BTkFfUEFHRV9TSVpFIHx8ICFpc19wb3dlcl9vZl8yKGxlbmd0aCkpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0aWYgKCFNQU5BX1BBR0VfQUxJR05FRChnbWktXFx1MDAzZXZpcnRfYWRkcikpXFxuK1xcdGlmIChnbWktXFx1MDAzZW5yX3BhZ2VzID09IDAgXFx1MDAyNlxcdTAwMjYgIU1BTkFfUEFHRV9BTElHTkVEKGdtaS1cXHUwMDNldmlydF9hZGRyKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbiBcXHRod2MgPSBnYy1cXHUwMDNlaHdjLmRyaXZlcl9kYXRhO1xcbkBAIC0xMjAyLDggKzEzMzEsMjQgQEAgc3RhdGljIGludCBtYW5hX2dkX2NyZWF0ZV9kbWFfcmVnaW9uKHN0cnVjdCBnZG1hX2RldiAqZ2QsXFxuIFxcdHJlcS1cXHUwMDNlcGFnZV9jb3VudCA9IG51bV9wYWdlO1xcbiBcXHRyZXEtXFx1MDAzZXBhZ2VfYWRkcl9saXN0X2xlbiA9IG51bV9wYWdlO1xcbiBcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG51bV9wYWdlOyBpKyspXFxuLVxcdFxcdHJlcS1cXHUwMDNlcGFnZV9hZGRyX2xpc3RbaV0gPSBnbWktXFx1MDAzZWRtYV9oYW5kbGUgKyAgaSAqIE1BTkFfUEFHRV9TSVpFO1xcbitcXHRpZiAoZ21pLVxcdTAwM2Vucl9wYWdlcyBcXHUwMDNlIDApIHtcXG4rXFx0XFx0dW5zaWduZWQgaW50IHN1YnBhZ2VzID0gUEFHRV9TSVpFIC8gTUFOQV9QQUdFX1NJWkU7XFxuK1xcdFxcdHVuc2lnbmVkIGludCBpZHggPSAwO1xcbitcXHRcXHR1bnNpZ25lZCBpbnQgcGcsIHN1YjtcXG4rXFxuK1xcdFxcdC8qIEVhY2ggUEFHRV9TSVpFIGNodW5rIGlzIHBoeXNpY2FsbHkgY29udGlndW91cyBhbmQgY29udGFpbnNcXG4rXFx0XFx0ICogUEFHRV9TSVpFIC8gTUFOQV9QQUdFX1NJWkUgY29uc2VjdXRpdmUgZGV2aWNlIHBhZ2VzLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0Zm9yIChwZyA9IDA7IHBnIFxcdTAwM2MgZ21pLVxcdTAwM2Vucl9wYWdlczsgcGcrKylcXG4rXFx0XFx0XFx0Zm9yIChzdWIgPSAwOyBzdWIgXFx1MDAzYyBzdWJwYWdlczsgc3ViKyspXFxuK1xcdFxcdFxcdFxcdHJlcS1cXHUwMDNlcGFnZV9hZGRyX2xpc3RbaWR4KytdID1cXG4rXFx0XFx0XFx0XFx0XFx0Z21pLVxcdTAwM2VwYWdlc19kbWFbcGddICtcXG4rXFx0XFx0XFx0XFx0XFx0c3ViICogTUFOQV9QQUdFX1NJWkU7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudW1fcGFnZTsgaSsrKVxcbitcXHRcXHRcXHRyZXEtXFx1MDAzZXBhZ2VfYWRkcl9saXN0W2ldID1cXG4rXFx0XFx0XFx0XFx0Z21pLVxcdTAwM2VkbWFfaGFuZGxlICsgaSAqIE1BTkFfUEFHRV9TSVpFO1xcbitcXHR9XFxuIFxcbiBcXHRlcnIgPSBtYW5hX2dkX3NlbmRfcmVxdWVzdChnYywgcmVxX21zZ19zaXplLCByZXEsIHNpemVvZihyZXNwKSwgXFx1MDAyNnJlc3ApO1xcbiBcXHRpZiAoZXJyKVxcbkBAIC0xMjQ2LDcgKzEzOTEsNyBAQCBpbnQgbWFuYV9nZF9jcmVhdGVfbWFuYV9lcShzdHJ1Y3QgZ2RtYV9kZXYgKmdkLFxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuIFxcdGdtaSA9IFxcdTAwMjZxdWV1ZS1cXHUwMDNlbWVtX2luZm87XFxuLVxcdGVyciA9IG1hbmFfZ2RfYWxsb2NfbWVtb3J5KGdjLCBzcGVjLVxcdTAwM2VxdWV1ZV9zaXplLCBnbWkpO1xcbitcXHRlcnIgPSBtYW5hX2dkX2FsbG9jX21lbW9yeShnYywgc3BlYy1cXHUwMDNlcXVldWVfc2l6ZSwgZ21pLCB0cnVlKTtcXG4gXFx0aWYgKGVycikge1xcbiBcXHRcXHRkZXZfZXJyKGdjLVxcdTAwM2VkZXYsIFxcXCJHRE1BIHF1ZXVlIHR5cGU6ICVkLCBzaXplOiAldSwgZ2RtYSBtZW1vcnkgYWxsb2NhdGlvbiBlcnI6ICVkXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRzcGVjLVxcdTAwM2V0eXBlLCBzcGVjLVxcdTAwM2VxdWV1ZV9zaXplLCBlcnIpO1xcbkBAIC0xMzAxLDcgKzE0NDYsNyBAQCBpbnQgbWFuYV9nZF9jcmVhdGVfbWFuYV93cV9jcShzdHJ1Y3QgZ2RtYV9kZXYgKmdkLFxcbiBcXHRxdWV1ZS1cXHUwMDNlaWQgPSBJTlZBTElEX1FVRVVFX0lEO1xcbiBcXG4gXFx0Z21pID0gXFx1MDAyNnF1ZXVlLVxcdTAwM2VtZW1faW5mbztcXG4tXFx0ZXJyID0gbWFuYV9nZF9hbGxvY19tZW1vcnkoZ2MsIHNwZWMtXFx1MDAzZXF1ZXVlX3NpemUsIGdtaSk7XFxuK1xcdGVyciA9IG1hbmFfZ2RfYWxsb2NfbWVtb3J5KGdjLCBzcGVjLVxcdTAwM2VxdWV1ZV9zaXplLCBnbWksIHRydWUpO1xcbiBcXHRpZiAoZXJyKSB7XFxuIFxcdFxcdGRldl9lcnIoZ2MtXFx1MDAzZWRldiwgXFxcIkdETUEgcXVldWUgdHlwZTogJWQsIHNpemU6ICV1LCBtZW1vcnkgYWxsb2NhdGlvbiBlcnI6ICVkXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRzcGVjLVxcdTAwM2V0eXBlLCBzcGVjLVxcdTAwM2VxdWV1ZV9zaXplLCBlcnIpO1xcbkBAIC0xNTA4LDcgKzE2NTMsNyBAQCB1OCAqbWFuYV9nZF9nZXRfd3FlX3B0cihjb25zdCBzdHJ1Y3QgZ2RtYV9xdWV1ZSAqd3EsIHUzMiB3cWVfb2Zmc2V0KVxcbiBcXG4gXFx0V0FSTl9PTl9PTkNFKChvZmZzZXQgKyBHRE1BX1dRRV9CVV9TSVpFKSBcXHUwMDNlIHdxLVxcdTAwM2VxdWV1ZV9zaXplKTtcXG4gXFxuLVxcdHJldHVybiB3cS1cXHUwMDNlcXVldWVfbWVtX3B0ciArIG9mZnNldDtcXG4rXFx0cmV0dXJuIG1hbmFfZ2RfcmluZ19wdHIod3EsIG9mZnNldCk7XFxuIH1cXG4gXFxuIHN0YXRpYyB1MzIgbWFuYV9nZF93cml0ZV9jbGllbnRfb29iKGNvbnN0IHN0cnVjdCBnZG1hX3dxZV9yZXF1ZXN0ICp3cWVfcmVxLFxcbkBAIC0xNTU0LDI3ICsxNjk5LDI0IEBAIHN0YXRpYyB1MzIgbWFuYV9nZF93cml0ZV9jbGllbnRfb29iKGNvbnN0IHN0cnVjdCBnZG1hX3dxZV9yZXF1ZXN0ICp3cWVfcmVxLFxcbiBcXHRyZXR1cm4gc2l6ZW9mKGhlYWRlcikgKyBjbGllbnRfb29iX3NpemU7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIG1hbmFfZ2Rfd3JpdGVfc2dsKHN0cnVjdCBnZG1hX3F1ZXVlICp3cSwgdTggKndxZV9wdHIsXFxuK3N0YXRpYyB2b2lkIG1hbmFfZ2Rfd3JpdGVfc2dsKHN0cnVjdCBnZG1hX3F1ZXVlICp3cSwgdTMyIHNnbF9vZmZzZXQsXFxuIFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBnZG1hX3dxZV9yZXF1ZXN0ICp3cWVfcmVxKVxcbiB7XFxuK1xcdHUzMiBzaXplX3RvX2VuZCA9IG1hbmFfZ2RfcmluZ19jb250aWdfYXZhaWwod3EsIHNnbF9vZmZzZXQpO1xcbiBcXHR1MzIgc2dsX3NpemUgPSBzaXplb2Yoc3RydWN0IGdkbWFfc2dlKSAqIHdxZV9yZXEtXFx1MDAzZW51bV9zZ2U7XFxuIFxcdGNvbnN0IHU4ICphZGRyZXNzID0gKHU4ICopd3FlX3JlcS1cXHUwMDNlc2dsO1xcbi1cXHR1OCAqYmFzZV9wdHIsICplbmRfcHRyO1xcbi1cXHR1MzIgc2l6ZV90b19lbmQ7XFxuLVxcbi1cXHRiYXNlX3B0ciA9IHdxLVxcdTAwM2VxdWV1ZV9tZW1fcHRyO1xcbi1cXHRlbmRfcHRyID0gYmFzZV9wdHIgKyB3cS1cXHUwMDNlcXVldWVfc2l6ZTtcXG4tXFx0c2l6ZV90b19lbmQgPSAodTMyKShlbmRfcHRyIC0gd3FlX3B0cik7XFxuIFxcbiBcXHRpZiAoc2l6ZV90b19lbmQgXFx1MDAzYyBzZ2xfc2l6ZSkge1xcbi1cXHRcXHRtZW1jcHkod3FlX3B0ciwgYWRkcmVzcywgc2l6ZV90b19lbmQpO1xcbitcXHRcXHRtZW1jcHkobWFuYV9nZF9yaW5nX3B0cih3cSwgc2dsX29mZnNldCksIGFkZHJlc3MsIHNpemVfdG9fZW5kKTtcXG4gXFxuLVxcdFxcdHdxZV9wdHIgPSBiYXNlX3B0cjtcXG4gXFx0XFx0YWRkcmVzcyArPSBzaXplX3RvX2VuZDtcXG4gXFx0XFx0c2dsX3NpemUgLT0gc2l6ZV90b19lbmQ7XFxuK1xcdFxcdHNnbF9vZmZzZXQgKz0gc2l6ZV90b19lbmQ7XFxuK1xcdFxcdGlmIChzZ2xfb2Zmc2V0ID09IHdxLVxcdTAwM2VxdWV1ZV9zaXplKVxcbitcXHRcXHRcXHRzZ2xfb2Zmc2V0ID0gMDtcXG4gXFx0fVxcbiBcXG4tXFx0bWVtY3B5KHdxZV9wdHIsIGFkZHJlc3MsIHNnbF9zaXplKTtcXG4rXFx0bWVtY3B5KG1hbmFfZ2RfcmluZ19wdHIod3EsIHNnbF9vZmZzZXQpLCBhZGRyZXNzLCBzZ2xfc2l6ZSk7XFxuIH1cXG4gXFxuIGludCBtYW5hX2dkX3Bvc3Rfd29ya19yZXF1ZXN0KHN0cnVjdCBnZG1hX3F1ZXVlICp3cSxcXG5AQCAtMTU4NCw4ICsxNzI2LDEyIEBAIGludCBtYW5hX2dkX3Bvc3Rfd29ya19yZXF1ZXN0KHN0cnVjdCBnZG1hX3F1ZXVlICp3cSxcXG4gXFx0dTMyIGNsaWVudF9vb2Jfc2l6ZSA9IHdxZV9yZXEtXFx1MDAzZWlubGluZV9vb2Jfc2l6ZTtcXG4gXFx0dTMyIHNnbF9kYXRhX3NpemU7XFxuIFxcdHUzMiBtYXhfd3FlX3NpemU7XFxuK1xcdHUzMiB3cWVfb2Zmc2V0O1xcbitcXHR1MzIgc2dsX29mZnNldDtcXG4gXFx0dTMyIHdxZV9zaXplO1xcbitcXHR1MzIgb29iX2xlbjtcXG4gXFx0dTggKndxZV9wdHI7XFxuK1xcdHUzMiBoZWFkO1xcbiBcXG4gXFx0aWYgKHdxZV9yZXEtXFx1MDAzZW51bV9zZ2UgPT0gMClcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuQEAgLTE2MTcsMTMgKzE3NjMsMTcgQEAgaW50IG1hbmFfZ2RfcG9zdF93b3JrX3JlcXVlc3Qoc3RydWN0IGdkbWFfcXVldWUgKndxLFxcbiBcXHRpZiAod3FlX2luZm8pXFxuIFxcdFxcdHdxZV9pbmZvLVxcdTAwM2V3cWVfc2l6ZV9pbl9idSA9IHdxZV9zaXplIC8gR0RNQV9XUUVfQlVfU0laRTtcXG4gXFxuLVxcdHdxZV9wdHIgPSBtYW5hX2dkX2dldF93cWVfcHRyKHdxLCB3cS1cXHUwMDNlaGVhZCk7XFxuLVxcdHdxZV9wdHIgKz0gbWFuYV9nZF93cml0ZV9jbGllbnRfb29iKHdxZV9yZXEsIHdxLVxcdTAwM2V0eXBlLCBjbGllbnRfb29iX3NpemUsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBzZ2xfZGF0YV9zaXplLCB3cWVfcHRyKTtcXG4tXFx0aWYgKHdxZV9wdHIgXFx1MDAzZT0gKHU4ICopd3EtXFx1MDAzZXF1ZXVlX21lbV9wdHIgKyB3cS1cXHUwMDNlcXVldWVfc2l6ZSlcXG4tXFx0XFx0d3FlX3B0ciAtPSB3cS1cXHUwMDNlcXVldWVfc2l6ZTtcXG4rXFx0aGVhZCA9IHdxLVxcdTAwM2VoZWFkO1xcbitcXHR3cWVfb2Zmc2V0ID0gKGhlYWQgKiBHRE1BX1dRRV9CVV9TSVpFKSBcXHUwMDI2ICh3cS1cXHUwMDNlcXVldWVfc2l6ZSAtIDEpO1xcbitcXHR3cWVfcHRyID0gbWFuYV9nZF9nZXRfd3FlX3B0cih3cSwgaGVhZCk7XFxuK1xcdG9vYl9sZW4gPSBtYW5hX2dkX3dyaXRlX2NsaWVudF9vb2Iod3FlX3JlcSwgd3EtXFx1MDAzZXR5cGUsIGNsaWVudF9vb2Jfc2l6ZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgc2dsX2RhdGFfc2l6ZSwgd3FlX3B0cik7XFxuK1xcbitcXHRzZ2xfb2Zmc2V0ID0gd3FlX29mZnNldCArIG9vYl9sZW47XFxuK1xcdGlmIChzZ2xfb2Zmc2V0IFxcdTAwM2U9IHdxLVxcdTAwM2VxdWV1ZV9zaXplKVxcbitcXHRcXHRzZ2xfb2Zmc2V0IC09IHdxLVxcdTAwM2VxdWV1ZV9zaXplO1xcbiBcXG4tXFx0bWFuYV9nZF93cml0ZV9zZ2wod3EsIHdxZV9wdHIsIHdxZV9yZXEpO1xcbitcXHRtYW5hX2dkX3dyaXRlX3NnbCh3cSwgc2dsX29mZnNldCwgd3FlX3JlcSk7XFxuIFxcbiBcXHR3cS1cXHUwMDNlaGVhZCArPSB3cWVfc2l6ZSAvIEdETUFfV1FFX0JVX1NJWkU7XFxuIFxcbkBAIC0xNjUzLDExICsxODAzLDEwIEBAIGludCBtYW5hX2dkX3Bvc3RfYW5kX3Jpbmcoc3RydWN0IGdkbWFfcXVldWUgKnF1ZXVlLFxcbiBzdGF0aWMgaW50IG1hbmFfZ2RfcmVhZF9jcWUoc3RydWN0IGdkbWFfcXVldWUgKmNxLCBzdHJ1Y3QgZ2RtYV9jb21wICpjb21wKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGludCBudW1fY3FlID0gY3EtXFx1MDAzZXF1ZXVlX3NpemUgLyBzaXplb2Yoc3RydWN0IGdkbWFfY3FlKTtcXG4tXFx0c3RydWN0IGdkbWFfY3FlICpjcV9jcWUgPSBjcS1cXHUwMDNlcXVldWVfbWVtX3B0cjtcXG4gXFx0dTMyIG93bmVyX2JpdHMsIG5ld19iaXRzLCBvbGRfYml0cztcXG4gXFx0c3RydWN0IGdkbWFfY3FlICpjcWU7XFxuIFxcbi1cXHRjcWUgPSBcXHUwMDI2Y3FfY3FlW2NxLVxcdTAwM2VoZWFkICUgbnVtX2NxZV07XFxuK1xcdGNxZSA9IG1hbmFfZ2RfcmluZ19wdHIoY3EsIChjcS1cXHUwMDNlaGVhZCAlIG51bV9jcWUpICogc2l6ZW9mKCpjcWUpKTtcXG4gXFx0b3duZXJfYml0cyA9IGNxZS1cXHUwMDNlY3FlX2luZm8ub3duZXJfYml0cztcXG4gXFxuIFxcdG9sZF9iaXRzID0gKGNxLVxcdTAwM2VoZWFkIC8gbnVtX2NxZSAtIDEpIFxcdTAwMjYgR0RNQV9DUUVfT1dORVJfTUFTSztcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvaHdfY2hhbm5lbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvaHdfY2hhbm5lbC5jXFxuaW5kZXggZTNjMjRkNTBkYWQwNy4uMjYzZTdjNGUyOTM0MSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9od19jaGFubmVsLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9od19jaGFubmVsLmNcXG5AQCAtNDc5LDcgKzQ3OSw3IEBAIHN0YXRpYyBpbnQgbWFuYV9od2NfYWxsb2NfZG1hX2J1ZihzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUxNiBxX2RlcHRoLFxcbiBcXHRidWZfc2l6ZSA9IE1BTkFfUEFHRV9BTElHTihxX2RlcHRoICogbWF4X21zZ19zaXplKTtcXG4gXFxuIFxcdGdtaSA9IFxcdTAwMjZkbWFfYnVmLVxcdTAwM2VtZW1faW5mbztcXG4tXFx0ZXJyID0gbWFuYV9nZF9hbGxvY19tZW1vcnkoZ2MsIGJ1Zl9zaXplLCBnbWkpO1xcbitcXHRlcnIgPSBtYW5hX2dkX2FsbG9jX21lbW9yeShnYywgYnVmX3NpemUsIGdtaSwgZmFsc2UpO1xcbiBcXHRpZiAoZXJyKSB7XFxuIFxcdFxcdGRldl9lcnIoaHdjLVxcdTAwM2VkZXYsIFxcXCJGYWlsZWQgdG8gYWxsb2NhdGUgRE1BIGJ1ZmZlciBzaXplOiAldSwgZXJyICVkXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRidWZfc2l6ZSwgZXJyKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jXFxuaW5kZXggMjUxOWE5OGFkMDBiMC4uYjgwMzcxMTk2ODA0MiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmNcXG5AQCAtNDAsNiArNDAsOSBAQCBzdGF0aWMgc3NpemVfdCBtYW5hX2RiZ19xX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudFxcbiB7XFxuIFxcdHN0cnVjdCBnZG1hX3F1ZXVlICpnZG1hX3EgPSBmaWxwLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuIFxcbitcXHRpZiAoZ2RtYV9xLVxcdTAwM2VtZW1faW5mby5ucl9wYWdlcylcXG4rXFx0XFx0cmV0dXJuIG1hbmFfZ2RfcmVhZF9yaW5nKGdkbWFfcSwgYnVmLCBjb3VudCwgcG9zKTtcXG4rXFxuIFxcdHJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcihidWYsIGNvdW50LCBwb3MsIGdkbWFfcS1cXHUwMDNlcXVldWVfbWVtX3B0cixcXG4gXFx0XFx0XFx0XFx0ICAgICAgIGdkbWFfcS1cXHUwMDNlcXVldWVfc2l6ZSk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbWFuYS9nZG1hLmggYi9pbmNsdWRlL25ldC9tYW5hL2dkbWEuaFxcbmluZGV4IDg1MjljZWYwZDdjNDUuLmIwYjMyMmE4MGI2MjkgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvbWFuYS9nZG1hLmhcXG4rKysgYi9pbmNsdWRlL25ldC9tYW5hL2dkbWEuaFxcbkBAIC0yNDAsNiArMjQwLDE0IEBAIHN0cnVjdCBnZG1hX21lbV9pbmZvIHtcXG4gXFx0dm9pZCAqdmlydF9hZGRyO1xcbiBcXHR1NjQgbGVuZ3RoO1xcbiBcXG4rXFx0LyogU2NhdHRlcmVkIGZhbGxiYWNrOiB3aGVuIEBucl9wYWdlcyBcXHUwMDNlIDAgdGhlIHJpbmcgaXMgdGhhdCBtYW55XFxuK1xcdCAqIFBBR0VfU0laRSBjb2hlcmVudCBhbGxvY2F0aW9ucyBpbiBAcGFnZXNfdmEvQHBhZ2VzX2RtYSwgbm90XFxuK1xcdCAqIEB2aXJ0X2FkZHIvQGRtYV9oYW5kbGUuXFxuK1xcdCAqL1xcbitcXHR2b2lkICoqcGFnZXNfdmE7XFxuK1xcdGRtYV9hZGRyX3QgKnBhZ2VzX2RtYTtcXG4rXFx0dW5zaWduZWQgaW50IG5yX3BhZ2VzO1xcbitcXG4gXFx0LyogQWxsb2NhdGVkIGJ5IHRoZSBQRiBkcml2ZXIgKi9cXG4gXFx0dTY0IGRtYV9yZWdpb25faGFuZGxlO1xcbiB9O1xcbkBAIC01MTIsNiArNTIwLDkgQEAgaW50IG1hbmFfZ2RfcG9sbF9jcShzdHJ1Y3QgZ2RtYV9xdWV1ZSAqY3EsIHN0cnVjdCBnZG1hX2NvbXAgKmNvbXAsIGludCBudW1fY3FlKTtcXG4gXFxuIHZvaWQgbWFuYV9nZF9yaW5nX2NxKHN0cnVjdCBnZG1hX3F1ZXVlICpjcSwgdTggYXJtX2JpdCk7XFxuIFxcbitzc2l6ZV90IG1hbmFfZ2RfcmVhZF9yaW5nKHN0cnVjdCBnZG1hX3F1ZXVlICpxLCBjaGFyIF9fdXNlciAqYnVmLFxcbitcXHRcXHRcXHQgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpO1xcbitcXG4gaW50IG1hbmFfc2NoZWR1bGVfc2Vydl93b3JrKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjLCBlbnVtIGdkbWFfZXFlX3R5cGUgdHlwZSk7XFxuIFxcbiB2b2lkIG1hbmFfZ2RfcmluZ19kaW0oc3RydWN0IGdkbWFfcXVldWUgKmNxLCB1MzIgbW9kX3VzZWMsIGJvb2wgbW9kX3VzZWNfdmxkLFxcbkBAIC02NjgsNiArNjc5LDkgQEAgZW51bSB7XFxuIC8qIERyaXZlciBzdXBwb3J0cyBkeW5hbWljIGludGVycnVwdCBtb2RlcmF0aW9uIC0gRElNICovXFxuICNkZWZpbmUgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9EWU5fSU5URVJSVVBUX01PREVSQVRJT04gQklUKDI4KVxcbiBcXG4rLyogRHJpdmVyIHN1cHBvcnRzIG5vbi1jb250aWd1b3VzIHF1ZXVlIGJ1ZmZlcnMgKi9cXG4rI2RlZmluZSBHRE1BX0RSVl9DQVBfRkxBR18xX05PTl9DT05USUdVT1VTX0JVRkZFUlMgQklUKDMwKVxcbitcXG4gI2RlZmluZSBHRE1BX0RSVl9DQVBfRkxBR1MxIFxcXFxcXG4gXFx0KEdETUFfRFJWX0NBUF9GTEFHXzFfRVFfU0hBUklOR19NVUxUSV9WUE9SVCB8IFxcXFxcXG4gXFx0IEdETUFfRFJWX0NBUF9GTEFHXzFfTkFQSV9XS0RPTkVfRklYIHwgXFxcXFxcbkBAIC02ODQsNyArNjk4LDggQEAgZW51bSB7XFxuIFxcdCBHRE1BX0RSVl9DQVBfRkxBR18xX0hBTkRMRV9TVEFMTF9TUV9SRUNPVkVSWSB8IFxcXFxcXG4gXFx0IEdETUFfRFJWX0NBUF9GTEFHXzFfSFdDX1RJTUVPVVRfUkVDT1ZFUlkgfCBcXFxcXFxuIFxcdCBHRE1BX0RSVl9DQVBfRkxBR18xX0VRX01TSV9VTlNIQVJFX01VTFRJX1ZQT1JUIHwgXFxcXFxcbi1cXHQgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9EWU5fSU5URVJSVVBUX01PREVSQVRJT04pXFxuK1xcdCBHRE1BX0RSVl9DQVBfRkxBR18xX0RZTl9JTlRFUlJVUFRfTU9ERVJBVElPTiB8IFxcXFxcXG4rXFx0IEdETUFfRFJWX0NBUF9GTEFHXzFfTk9OX0NPTlRJR1VPVVNfQlVGRkVSUylcXG4gXFxuICNkZWZpbmUgR0RNQV9EUlZfQ0FQX0ZMQUdTMiAwXFxuIFxcbkBAIC0xMDQ1LDcgKzEwNjAsNyBAQCB2b2lkIG1hbmFfZ2Rfd3FfcmluZ19kb29yYmVsbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyxcXG4gXFx0XFx0XFx0ICAgICAgc3RydWN0IGdkbWFfcXVldWUgKnF1ZXVlKTtcXG4gXFxuIGludCBtYW5hX2dkX2FsbG9jX21lbW9yeShzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYywgdW5zaWduZWQgaW50IGxlbmd0aCxcXG4tXFx0XFx0XFx0IHN0cnVjdCBnZG1hX21lbV9pbmZvICpnbWkpO1xcbitcXHRcXHRcXHQgc3RydWN0IGdkbWFfbWVtX2luZm8gKmdtaSwgYm9vbCBhbGxvd19zY2F0dGVyKTtcXG4gXFxuIHZvaWQgbWFuYV9nZF9mcmVlX21lbW9yeShzdHJ1Y3QgZ2RtYV9tZW1faW5mbyAqZ21pKTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIyOjAzOjQ1LjYxNjg3MDI1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTk1NTkyNjA0NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyIChNQU5BKSBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgZGV2aWNlIGRyaXZlci4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgZW52aXJvbm1lbnRzIHVzZWQgYnkgc3l6a2FsbGVyLCBtYWtpbmcgdGhlIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIHN0YW5kYXJkIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiZDhiZWNkMDViMjIwZWU0YzBjYzBmMzJkNDE4MmQ1OGMyNTZmZWVhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAyMjowMzo0NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmNcbmluZGV4IGEzOGQ0YmI3NDYyMWYuLmVkOWFmMzE0ZTRlZGUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmNcbkBAIC0xMSw2ICsxMSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbXNpLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcnFkb21haW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4cG9ydC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdWFjY2Vzcy5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjbmV0L21hbmEvbWFuYS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L21hbmEvaHdfY2hhbm5lbC5oXHUwMDNlXG5AQCAtMzc0LDI4ICszNzUsOTYgQEAgaW50IG1hbmFfZ2Rfc2VuZF9yZXF1ZXN0KHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjLCB1MzIgcmVxX2xlbiwgY29uc3Qgdm9pZCAqcmVxLFxuIEVYUE9SVF9TWU1CT0xfTlMobWFuYV9nZF9zZW5kX3JlcXVlc3QsIFwiTkVUX01BTkFcIik7XG4gXG4gaW50IG1hbmFfZ2RfYWxsb2NfbWVtb3J5KHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjLCB1bnNpZ25lZCBpbnQgbGVuZ3RoLFxuLVx0XHRcdCBzdHJ1Y3QgZ2RtYV9tZW1faW5mbyAqZ21pKVxuK1x0XHRcdCBzdHJ1Y3QgZ2RtYV9tZW1faW5mbyAqZ21pLCBib29sIGFsbG93X3NjYXR0ZXIpXG4ge1xuK1x0dW5zaWduZWQgaW50IG5wYWdlcywgaTtcbiBcdGRtYV9hZGRyX3QgZG1hX2hhbmRsZTtcbitcdGJvb2wgY2FuX2ZhbGxiYWNrO1xuIFx0dm9pZCAqYnVmO1xuIFxuIFx0aWYgKGxlbmd0aCBcdTAwM2MgTUFOQV9QQUdFX1NJWkUgfHwgIWlzX3Bvd2VyX29mXzIobGVuZ3RoKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRnbWktXHUwMDNlZGV2ID0gZ2MtXHUwMDNlZGV2O1xuLVx0YnVmID0gZG1hX2FsbG9jX2NvaGVyZW50KGdtaS1cdTAwM2VkZXYsIGxlbmd0aCwgXHUwMDI2ZG1hX2hhbmRsZSwgR0ZQX0tFUk5FTCk7XG4tXHRpZiAoIWJ1ZilcbitcbitcdC8qIEFuIGFsbG9jYXRpb24gdGhhdCBmaXRzIGluIG9uZSBwYWdlIGRvZXMgbm90IGJlbmVmaXQgZnJvbVxuK1x0ICogZmFsbGJhY2suXG4rXHQgKi9cbitcdGNhbl9mYWxsYmFjayA9IGFsbG93X3NjYXR0ZXIgXHUwMDI2XHUwMDI2IGxlbmd0aCBcdTAwM2UgUEFHRV9TSVpFO1xuK1xuK1x0LyogV2FybiBvbmx5IHdoZW4gdGhlcmUgaXMgbm8gZmFsbGJhY2sgdG8gcmVzY3VlIHRoZSBmYWlsdXJlLiAqL1xuK1x0YnVmID0gZG1hX2FsbG9jX2NvaGVyZW50KGdtaS1cdTAwM2VkZXYsIGxlbmd0aCwgXHUwMDI2ZG1hX2hhbmRsZSxcbitcdFx0XHRcdCBHRlBfS0VSTkVMIHxcbitcdFx0XHRcdCAoY2FuX2ZhbGxiYWNrID8gX19HRlBfTk9XQVJOIDogMCkpO1xuK1x0aWYgKGJ1Zikge1xuK1x0XHRnbWktXHUwMDNlZG1hX2hhbmRsZSA9IGRtYV9oYW5kbGU7XG4rXHRcdGdtaS1cdTAwM2V2aXJ0X2FkZHIgPSBidWY7XG4rXHRcdGdtaS1cdTAwM2VsZW5ndGggPSBsZW5ndGg7XG4rXHRcdGdtaS1cdTAwM2Vucl9wYWdlcyA9IDA7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0aWYgKCFjYW5fZmFsbGJhY2spXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0Z21pLVx1MDAzZWRtYV9oYW5kbGUgPSBkbWFfaGFuZGxlO1xuLVx0Z21pLVx1MDAzZXZpcnRfYWRkciA9IGJ1ZjtcbitcdC8qIGxlbmd0aCBpcyBhIHBvd2VyIG9mIDIgYWJvdmUgUEFHRV9TSVpFLCBzbyB0aGlzIGRpdmlkZXMgZXhhY3RseS4gKi9cbitcdG5wYWdlcyA9IGxlbmd0aCAvIFBBR0VfU0laRTtcbitcbitcdGdtaS1cdTAwM2VwYWdlc192YSA9IGt2Y2FsbG9jKG5wYWdlcywgc2l6ZW9mKCpnbWktXHUwMDNlcGFnZXNfdmEpLCBHRlBfS0VSTkVMKTtcbitcdGlmICghZ21pLVx1MDAzZXBhZ2VzX3ZhKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdGdtaS1cdTAwM2VwYWdlc19kbWEgPSBrdmNhbGxvYyhucGFnZXMsIHNpemVvZigqZ21pLVx1MDAzZXBhZ2VzX2RtYSksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFnbWktXHUwMDNlcGFnZXNfZG1hKVxuK1x0XHRnb3RvIGZyZWVfdmE7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucGFnZXM7IGkrKykge1xuK1x0XHRnbWktXHUwMDNlcGFnZXNfdmFbaV0gPSBkbWFfYWxsb2NfY29oZXJlbnQoZ21pLVx1MDAzZWRldiwgUEFHRV9TSVpFLFxuK1x0XHRcdFx0XHRcdCAgICAgIFx1MDAyNmdtaS1cdTAwM2VwYWdlc19kbWFbaV0sXG4rXHRcdFx0XHRcdFx0ICAgICAgR0ZQX0tFUk5FTCk7XG4rXHRcdGlmICghZ21pLVx1MDAzZXBhZ2VzX3ZhW2ldKVxuK1x0XHRcdGdvdG8gZnJlZV9wYWdlcztcbitcdH1cbitcbitcdGRldl9pbmZvX3JhdGVsaW1pdGVkKGdtaS1cdTAwM2VkZXYsXG4rXHRcdFx0ICAgICBcImNvbnRpZ3VvdXMgJXUtYnl0ZSBETUEgYWxsb2MgZmFpbGVkOyB1c2luZyAldSBzY2F0dGVyZWQgcGFnZXNcXG5cIixcbitcdFx0XHQgICAgIGxlbmd0aCwgbnBhZ2VzKTtcbitcbitcdGdtaS1cdTAwM2V2aXJ0X2FkZHIgPSBOVUxMO1xuK1x0Z21pLVx1MDAzZWRtYV9oYW5kbGUgPSAwO1xuIFx0Z21pLVx1MDAzZWxlbmd0aCA9IGxlbmd0aDtcbitcdGdtaS1cdTAwM2Vucl9wYWdlcyA9IG5wYWdlcztcbiBcbiBcdHJldHVybiAwO1xuK1xuK2ZyZWVfcGFnZXM6XG4rXHR3aGlsZSAoaS0tKVxuK1x0XHRkbWFfZnJlZV9jb2hlcmVudChnbWktXHUwMDNlZGV2LCBQQUdFX1NJWkUsIGdtaS1cdTAwM2VwYWdlc192YVtpXSxcbitcdFx0XHRcdCAgZ21pLVx1MDAzZXBhZ2VzX2RtYVtpXSk7XG4rXHRrdmZyZWUoZ21pLVx1MDAzZXBhZ2VzX2RtYSk7XG4rXHRnbWktXHUwMDNlcGFnZXNfZG1hID0gTlVMTDtcbitmcmVlX3ZhOlxuK1x0a3ZmcmVlKGdtaS1cdTAwM2VwYWdlc192YSk7XG4rXHRnbWktXHUwMDNlcGFnZXNfdmEgPSBOVUxMO1xuK1x0cmV0dXJuIC1FTk9NRU07XG4gfVxuIFxuIHZvaWQgbWFuYV9nZF9mcmVlX21lbW9yeShzdHJ1Y3QgZ2RtYV9tZW1faW5mbyAqZ21pKVxuIHtcbitcdHVuc2lnbmVkIGludCBpO1xuK1xuK1x0aWYgKGdtaS1cdTAwM2Vucl9wYWdlcyBcdTAwM2UgMCkge1xuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBnbWktXHUwMDNlbnJfcGFnZXM7IGkrKylcbitcdFx0XHRkbWFfZnJlZV9jb2hlcmVudChnbWktXHUwMDNlZGV2LCBQQUdFX1NJWkUsIGdtaS1cdTAwM2VwYWdlc192YVtpXSxcbitcdFx0XHRcdFx0ICBnbWktXHUwMDNlcGFnZXNfZG1hW2ldKTtcbitcdFx0a3ZmcmVlKGdtaS1cdTAwM2VwYWdlc192YSk7XG4rXHRcdGt2ZnJlZShnbWktXHUwMDNlcGFnZXNfZG1hKTtcbitcdFx0Z21pLVx1MDAzZXBhZ2VzX3ZhID0gTlVMTDtcbitcdFx0Z21pLVx1MDAzZXBhZ2VzX2RtYSA9IE5VTEw7XG4rXHRcdGdtaS1cdTAwM2Vucl9wYWdlcyA9IDA7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbiBcdGRtYV9mcmVlX2NvaGVyZW50KGdtaS1cdTAwM2VkZXYsIGdtaS1cdTAwM2VsZW5ndGgsIGdtaS1cdTAwM2V2aXJ0X2FkZHIsXG4gXHRcdFx0ICBnbWktXHUwMDNlZG1hX2hhbmRsZSk7XG4gfVxuQEAgLTc1MywxMSArODIyLDczIEBAIGludCBtYW5hX3NjaGVkdWxlX3NlcnZfd29yayhzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYywgZW51bSBnZG1hX2VxZV90eXBlIHR5cGUpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rLyogUmV0dXJuIHRoZSBDUFUgYWRkcmVzcyBvZiBieXRlIEBvZmZzZXQgd2l0aGluIGEgcXVldWUncyByaW5nIGJ1ZmZlci4gKi9cbitzdGF0aWMgdm9pZCAqbWFuYV9nZF9yaW5nX3B0cihjb25zdCBzdHJ1Y3QgZ2RtYV9xdWV1ZSAqcSwgdTMyIG9mZnNldClcbit7XG4rXHRjb25zdCBzdHJ1Y3QgZ2RtYV9tZW1faW5mbyAqZ21pID0gXHUwMDI2cS1cdTAwM2VtZW1faW5mbztcbitcbitcdGlmIChnbWktXHUwMDNlbnJfcGFnZXMgXHUwMDNlIDApXG4rXHRcdHJldHVybiAodTggKilnbWktXHUwMDNlcGFnZXNfdmFbb2Zmc2V0IC8gUEFHRV9TSVpFXSArXG4rXHRcdCAgICAgICAob2Zmc2V0IFx1MDAyNiAoUEFHRV9TSVpFIC0gMSkpO1xuK1xuK1x0cmV0dXJuIHEtXHUwMDNlcXVldWVfbWVtX3B0ciArIG9mZnNldDtcbit9XG4rXG4rLyogTnVtYmVyIG9mIGJ5dGVzIGZyb20gQG9mZnNldCB0byB0aGUgZW5kIG9mIHRoZSBDUFUtY29udGlndW91cyByZWdpb246IHRoZVxuKyAqIHJlc3Qgb2YgdGhlIHJpbmcsIG9yIHRoZSByZXN0IG9mIHRoZSBjdXJyZW50IHBhZ2Ugd2hlbiBzY2F0dGVyZWQuXG4rICovXG4rc3RhdGljIHUzMiBtYW5hX2dkX3JpbmdfY29udGlnX2F2YWlsKGNvbnN0IHN0cnVjdCBnZG1hX3F1ZXVlICpxLCB1MzIgb2Zmc2V0KVxuK3tcbitcdGlmIChxLVx1MDAzZW1lbV9pbmZvLm5yX3BhZ2VzIFx1MDAzZSAwKVxuK1x0XHRyZXR1cm4gUEFHRV9TSVpFIC0gKG9mZnNldCBcdTAwMjYgKFBBR0VfU0laRSAtIDEpKTtcbitcbitcdHJldHVybiBxLVx1MDAzZXF1ZXVlX3NpemUgLSBvZmZzZXQ7XG4rfVxuK1xuKy8qIENvcHkgdXAgdG8gQGNvdW50IGJ5dGVzIGZyb20gcmluZyBvZmZzZXQgKkBwb3Mgb2YgQHEgaW50byB1c2VyIGJ1ZmZlciBAYnVmLFxuKyAqIHNvIGEgc2NhdHRlcmVkIHJpbmcgcmVhZHMgYmFjayBhcyBpZiBpdCB3ZXJlIGNvbnRpZ3VvdXMuIFJldHVybnMgYnl0ZXNcbisgKiBjb3BpZWQsIDAgYXQgZW5kIG9mIHJpbmcsIG9yIGEgbmVnYXRpdmUgZXJybm8uXG4rICovXG4rc3NpemVfdCBtYW5hX2dkX3JlYWRfcmluZyhzdHJ1Y3QgZ2RtYV9xdWV1ZSAqcSwgY2hhciBfX3VzZXIgKmJ1ZixcbitcdFx0XHQgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpXG4re1xuK1x0dTMyIHNpemUgPSBxLVx1MDAzZXF1ZXVlX3NpemU7XG4rXHRsb2ZmX3Qgb2ZmID0gKnBvcztcbitcdHNpemVfdCBjb3BpZWQgPSAwO1xuK1xuK1x0aWYgKG9mZiBcdTAwM2MgMClcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRpZiAob2ZmIFx1MDAzZT0gc2l6ZSB8fCAhY291bnQpXG4rXHRcdHJldHVybiAwO1xuK1x0Y291bnQgPSBtaW5fdChzaXplX3QsIGNvdW50LCBzaXplIC0gb2ZmKTtcbitcbitcdHdoaWxlIChjb3VudCkge1xuK1x0XHR1MzIgb2Zmc2V0ID0gb2ZmO1xuK1x0XHR1MzIgYXZhaWwgPSBtYW5hX2dkX3JpbmdfY29udGlnX2F2YWlsKHEsIG9mZnNldCk7XG4rXHRcdHNpemVfdCBjaHVuayA9IG1pbl90KHNpemVfdCwgY291bnQsIGF2YWlsKTtcbitcdFx0c2l6ZV90IGxlZnQgPSBjb3B5X3RvX3VzZXIoYnVmLCBtYW5hX2dkX3JpbmdfcHRyKHEsIG9mZnNldCksXG4rXHRcdFx0XHRcdCAgIGNodW5rKTtcbitcbitcdFx0Y2h1bmsgLT0gbGVmdDtcbitcdFx0YnVmICs9IGNodW5rO1xuK1x0XHRvZmYgKz0gY2h1bms7XG4rXHRcdGNvcGllZCArPSBjaHVuaztcbitcdFx0Y291bnQgLT0gY2h1bms7XG4rXHRcdGlmIChsZWZ0KVxuK1x0XHRcdGJyZWFrO1xuK1x0fVxuK1xuK1x0aWYgKCFjb3BpZWQpXG4rXHRcdHJldHVybiAtRUZBVUxUO1xuK1xuK1x0KnBvcyA9IG9mZjtcbitcdHJldHVybiBjb3BpZWQ7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIG1hbmFfZ2RfcHJvY2Vzc19lcWUoc3RydWN0IGdkbWFfcXVldWUgKmVxKVxuIHtcbiBcdHUzMiBoZWFkID0gZXEtXHUwMDNlaGVhZCAlIChlcS1cdTAwM2VxdWV1ZV9zaXplIC8gR0RNQV9FUUVfU0laRSk7XG4gXHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyA9IGVxLVx1MDAzZWdkbWFfZGV2LVx1MDAzZWdkbWFfY29udGV4dDtcbi1cdHN0cnVjdCBnZG1hX2VxZSAqZXFfZXFlX3B0ciA9IGVxLVx1MDAzZXF1ZXVlX21lbV9wdHI7XG4gXHR1bmlvbiBnZG1hX2VxZV9pbmZvIGVxZV9pbmZvO1xuIFx0ZW51bSBnZG1hX2VxZV90eXBlIHR5cGU7XG4gXHRzdHJ1Y3QgZ2RtYV9ldmVudCBldmVudDtcbkBAIC03NjUsNyArODk2LDcgQEAgc3RhdGljIHZvaWQgbWFuYV9nZF9wcm9jZXNzX2VxZShzdHJ1Y3QgZ2RtYV9xdWV1ZSAqZXEpXG4gXHRzdHJ1Y3QgZ2RtYV9lcWUgKmVxZTtcbiBcdHUzMiBjcV9pZDtcbiBcbi1cdGVxZSA9IFx1MDAyNmVxX2VxZV9wdHJbaGVhZF07XG4rXHRlcWUgPSBtYW5hX2dkX3JpbmdfcHRyKGVxLCBoZWFkICogc2l6ZW9mKCplcWUpKTtcbiBcdGVxZV9pbmZvLmFzX3VpbnQzMiA9IGVxZS1cdTAwM2VlcWVfaW5mbztcbiBcdHR5cGUgPSBlcWVfaW5mby50eXBlO1xuIFxuQEAgLTgyOSw3ICs5NjAsNiBAQCBzdGF0aWMgdm9pZCBtYW5hX2dkX3Byb2Nlc3NfZXFfZXZlbnRzKHZvaWQgKmFyZylcbiB7XG4gXHR1MzIgb3duZXJfYml0cywgbmV3X2JpdHMsIG9sZF9iaXRzO1xuIFx0dW5pb24gZ2RtYV9lcWVfaW5mbyBlcWVfaW5mbztcbi1cdHN0cnVjdCBnZG1hX2VxZSAqZXFfZXFlX3B0cjtcbiBcdHN0cnVjdCBnZG1hX3F1ZXVlICplcSA9IGFyZztcbiBcdHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjO1xuIFx0c3RydWN0IGdkbWFfZXFlICplcWU7XG5AQCAtODM5LDExICs5NjksMTAgQEAgc3RhdGljIHZvaWQgbWFuYV9nZF9wcm9jZXNzX2VxX2V2ZW50cyh2b2lkICphcmcpXG4gXHRnYyA9IGVxLVx1MDAzZWdkbWFfZGV2LVx1MDAzZWdkbWFfY29udGV4dDtcbiBcbiBcdG51bV9lcWUgPSBlcS1cdTAwM2VxdWV1ZV9zaXplIC8gR0RNQV9FUUVfU0laRTtcbi1cdGVxX2VxZV9wdHIgPSBlcS1cdTAwM2VxdWV1ZV9tZW1fcHRyO1xuIFxuIFx0LyogUHJvY2VzcyB1cCB0byA1IEVRRXMgYXQgYSB0aW1lLCBhbmQgdXBkYXRlIHRoZSBIVyBoZWFkLiAqL1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgNTsgaSsrKSB7XG4tXHRcdGVxZSA9IFx1MDAyNmVxX2VxZV9wdHJbZXEtXHUwMDNlaGVhZCAlIG51bV9lcWVdO1xuK1x0XHRlcWUgPSBtYW5hX2dkX3JpbmdfcHRyKGVxLCAoZXEtXHUwMDNlaGVhZCAlIG51bV9lcWUpICogc2l6ZW9mKCplcWUpKTtcbiBcdFx0ZXFlX2luZm8uYXNfdWludDMyID0gZXFlLVx1MDAzZWVxZV9pbmZvO1xuIFx0XHRvd25lcl9iaXRzID0gZXFlX2luZm8ub3duZXJfYml0cztcbiBcbkBAIC0xMTA3LDcgKzEyMzYsNyBAQCBpbnQgbWFuYV9nZF9jcmVhdGVfaHdjX3F1ZXVlKHN0cnVjdCBnZG1hX2RldiAqZ2QsXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIFx0Z21pID0gXHUwMDI2cXVldWUtXHUwMDNlbWVtX2luZm87XG4tXHRlcnIgPSBtYW5hX2dkX2FsbG9jX21lbW9yeShnYywgc3BlYy1cdTAwM2VxdWV1ZV9zaXplLCBnbWkpO1xuK1x0ZXJyID0gbWFuYV9nZF9hbGxvY19tZW1vcnkoZ2MsIHNwZWMtXHUwMDNlcXVldWVfc2l6ZSwgZ21pLCBmYWxzZSk7XG4gXHRpZiAoZXJyKSB7XG4gXHRcdGRldl9lcnIoZ2MtXHUwMDNlZGV2LCBcIkdETUEgcXVldWUgdHlwZTogJWQsIHNpemU6ICV1LCBnZG1hIG1lbW9yeSBhbGxvY2F0aW9uIGVycjogJWRcXG5cIixcbiBcdFx0XHRzcGVjLVx1MDAzZXR5cGUsIHNwZWMtXHUwMDNlcXVldWVfc2l6ZSwgZXJyKTtcbkBAIC0xMTgyLDcgKzEzMTEsNyBAQCBzdGF0aWMgaW50IG1hbmFfZ2RfY3JlYXRlX2RtYV9yZWdpb24oc3RydWN0IGdkbWFfZGV2ICpnZCxcbiBcdGlmIChsZW5ndGggXHUwMDNjIE1BTkFfUEFHRV9TSVpFIHx8ICFpc19wb3dlcl9vZl8yKGxlbmd0aCkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0aWYgKCFNQU5BX1BBR0VfQUxJR05FRChnbWktXHUwMDNldmlydF9hZGRyKSlcbitcdGlmIChnbWktXHUwMDNlbnJfcGFnZXMgPT0gMCBcdTAwMjZcdTAwMjYgIU1BTkFfUEFHRV9BTElHTkVEKGdtaS1cdTAwM2V2aXJ0X2FkZHIpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdGh3YyA9IGdjLVx1MDAzZWh3Yy5kcml2ZXJfZGF0YTtcbkBAIC0xMjAyLDggKzEzMzEsMjQgQEAgc3RhdGljIGludCBtYW5hX2dkX2NyZWF0ZV9kbWFfcmVnaW9uKHN0cnVjdCBnZG1hX2RldiAqZ2QsXG4gXHRyZXEtXHUwMDNlcGFnZV9jb3VudCA9IG51bV9wYWdlO1xuIFx0cmVxLVx1MDAzZXBhZ2VfYWRkcl9saXN0X2xlbiA9IG51bV9wYWdlO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX3BhZ2U7IGkrKylcbi1cdFx0cmVxLVx1MDAzZXBhZ2VfYWRkcl9saXN0W2ldID0gZ21pLVx1MDAzZWRtYV9oYW5kbGUgKyAgaSAqIE1BTkFfUEFHRV9TSVpFO1xuK1x0aWYgKGdtaS1cdTAwM2Vucl9wYWdlcyBcdTAwM2UgMCkge1xuK1x0XHR1bnNpZ25lZCBpbnQgc3VicGFnZXMgPSBQQUdFX1NJWkUgLyBNQU5BX1BBR0VfU0laRTtcbitcdFx0dW5zaWduZWQgaW50IGlkeCA9IDA7XG4rXHRcdHVuc2lnbmVkIGludCBwZywgc3ViO1xuK1xuK1x0XHQvKiBFYWNoIFBBR0VfU0laRSBjaHVuayBpcyBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgYW5kIGNvbnRhaW5zXG4rXHRcdCAqIFBBR0VfU0laRSAvIE1BTkFfUEFHRV9TSVpFIGNvbnNlY3V0aXZlIGRldmljZSBwYWdlcy5cbitcdFx0ICovXG4rXHRcdGZvciAocGcgPSAwOyBwZyBcdTAwM2MgZ21pLVx1MDAzZW5yX3BhZ2VzOyBwZysrKVxuK1x0XHRcdGZvciAoc3ViID0gMDsgc3ViIFx1MDAzYyBzdWJwYWdlczsgc3ViKyspXG4rXHRcdFx0XHRyZXEtXHUwMDNlcGFnZV9hZGRyX2xpc3RbaWR4KytdID1cbitcdFx0XHRcdFx0Z21pLVx1MDAzZXBhZ2VzX2RtYVtwZ10gK1xuK1x0XHRcdFx0XHRzdWIgKiBNQU5BX1BBR0VfU0laRTtcbitcdH0gZWxzZSB7XG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV9wYWdlOyBpKyspXG4rXHRcdFx0cmVxLVx1MDAzZXBhZ2VfYWRkcl9saXN0W2ldID1cbitcdFx0XHRcdGdtaS1cdTAwM2VkbWFfaGFuZGxlICsgaSAqIE1BTkFfUEFHRV9TSVpFO1xuK1x0fVxuIFxuIFx0ZXJyID0gbWFuYV9nZF9zZW5kX3JlcXVlc3QoZ2MsIHJlcV9tc2dfc2l6ZSwgcmVxLCBzaXplb2YocmVzcCksIFx1MDAyNnJlc3ApO1xuIFx0aWYgKGVycilcbkBAIC0xMjQ2LDcgKzEzOTEsNyBAQCBpbnQgbWFuYV9nZF9jcmVhdGVfbWFuYV9lcShzdHJ1Y3QgZ2RtYV9kZXYgKmdkLFxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiBcdGdtaSA9IFx1MDAyNnF1ZXVlLVx1MDAzZW1lbV9pbmZvO1xuLVx0ZXJyID0gbWFuYV9nZF9hbGxvY19tZW1vcnkoZ2MsIHNwZWMtXHUwMDNlcXVldWVfc2l6ZSwgZ21pKTtcbitcdGVyciA9IG1hbmFfZ2RfYWxsb2NfbWVtb3J5KGdjLCBzcGVjLVx1MDAzZXF1ZXVlX3NpemUsIGdtaSwgdHJ1ZSk7XG4gXHRpZiAoZXJyKSB7XG4gXHRcdGRldl9lcnIoZ2MtXHUwMDNlZGV2LCBcIkdETUEgcXVldWUgdHlwZTogJWQsIHNpemU6ICV1LCBnZG1hIG1lbW9yeSBhbGxvY2F0aW9uIGVycjogJWRcXG5cIixcbiBcdFx0XHRzcGVjLVx1MDAzZXR5cGUsIHNwZWMtXHUwMDNlcXVldWVfc2l6ZSwgZXJyKTtcbkBAIC0xMzAxLDcgKzE0NDYsNyBAQCBpbnQgbWFuYV9nZF9jcmVhdGVfbWFuYV93cV9jcShzdHJ1Y3QgZ2RtYV9kZXYgKmdkLFxuIFx0cXVldWUtXHUwMDNlaWQgPSBJTlZBTElEX1FVRVVFX0lEO1xuIFxuIFx0Z21pID0gXHUwMDI2cXVldWUtXHUwMDNlbWVtX2luZm87XG4tXHRlcnIgPSBtYW5hX2dkX2FsbG9jX21lbW9yeShnYywgc3BlYy1cdTAwM2VxdWV1ZV9zaXplLCBnbWkpO1xuK1x0ZXJyID0gbWFuYV9nZF9hbGxvY19tZW1vcnkoZ2MsIHNwZWMtXHUwMDNlcXVldWVfc2l6ZSwgZ21pLCB0cnVlKTtcbiBcdGlmIChlcnIpIHtcbiBcdFx0ZGV2X2VycihnYy1cdTAwM2VkZXYsIFwiR0RNQSBxdWV1ZSB0eXBlOiAlZCwgc2l6ZTogJXUsIG1lbW9yeSBhbGxvY2F0aW9uIGVycjogJWRcXG5cIixcbiBcdFx0XHRzcGVjLVx1MDAzZXR5cGUsIHNwZWMtXHUwMDNlcXVldWVfc2l6ZSwgZXJyKTtcbkBAIC0xNTA4LDcgKzE2NTMsNyBAQCB1OCAqbWFuYV9nZF9nZXRfd3FlX3B0cihjb25zdCBzdHJ1Y3QgZ2RtYV9xdWV1ZSAqd3EsIHUzMiB3cWVfb2Zmc2V0KVxuIFxuIFx0V0FSTl9PTl9PTkNFKChvZmZzZXQgKyBHRE1BX1dRRV9CVV9TSVpFKSBcdTAwM2Ugd3EtXHUwMDNlcXVldWVfc2l6ZSk7XG4gXG4tXHRyZXR1cm4gd3EtXHUwMDNlcXVldWVfbWVtX3B0ciArIG9mZnNldDtcbitcdHJldHVybiBtYW5hX2dkX3JpbmdfcHRyKHdxLCBvZmZzZXQpO1xuIH1cbiBcbiBzdGF0aWMgdTMyIG1hbmFfZ2Rfd3JpdGVfY2xpZW50X29vYihjb25zdCBzdHJ1Y3QgZ2RtYV93cWVfcmVxdWVzdCAqd3FlX3JlcSxcbkBAIC0xNTU0LDI3ICsxNjk5LDI0IEBAIHN0YXRpYyB1MzIgbWFuYV9nZF93cml0ZV9jbGllbnRfb29iKGNvbnN0IHN0cnVjdCBnZG1hX3dxZV9yZXF1ZXN0ICp3cWVfcmVxLFxuIFx0cmV0dXJuIHNpemVvZihoZWFkZXIpICsgY2xpZW50X29vYl9zaXplO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBtYW5hX2dkX3dyaXRlX3NnbChzdHJ1Y3QgZ2RtYV9xdWV1ZSAqd3EsIHU4ICp3cWVfcHRyLFxuK3N0YXRpYyB2b2lkIG1hbmFfZ2Rfd3JpdGVfc2dsKHN0cnVjdCBnZG1hX3F1ZXVlICp3cSwgdTMyIHNnbF9vZmZzZXQsXG4gXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGdkbWFfd3FlX3JlcXVlc3QgKndxZV9yZXEpXG4ge1xuK1x0dTMyIHNpemVfdG9fZW5kID0gbWFuYV9nZF9yaW5nX2NvbnRpZ19hdmFpbCh3cSwgc2dsX29mZnNldCk7XG4gXHR1MzIgc2dsX3NpemUgPSBzaXplb2Yoc3RydWN0IGdkbWFfc2dlKSAqIHdxZV9yZXEtXHUwMDNlbnVtX3NnZTtcbiBcdGNvbnN0IHU4ICphZGRyZXNzID0gKHU4ICopd3FlX3JlcS1cdTAwM2VzZ2w7XG4tXHR1OCAqYmFzZV9wdHIsICplbmRfcHRyO1xuLVx0dTMyIHNpemVfdG9fZW5kO1xuLVxuLVx0YmFzZV9wdHIgPSB3cS1cdTAwM2VxdWV1ZV9tZW1fcHRyO1xuLVx0ZW5kX3B0ciA9IGJhc2VfcHRyICsgd3EtXHUwMDNlcXVldWVfc2l6ZTtcbi1cdHNpemVfdG9fZW5kID0gKHUzMikoZW5kX3B0ciAtIHdxZV9wdHIpO1xuIFxuIFx0aWYgKHNpemVfdG9fZW5kIFx1MDAzYyBzZ2xfc2l6ZSkge1xuLVx0XHRtZW1jcHkod3FlX3B0ciwgYWRkcmVzcywgc2l6ZV90b19lbmQpO1xuK1x0XHRtZW1jcHkobWFuYV9nZF9yaW5nX3B0cih3cSwgc2dsX29mZnNldCksIGFkZHJlc3MsIHNpemVfdG9fZW5kKTtcbiBcbi1cdFx0d3FlX3B0ciA9IGJhc2VfcHRyO1xuIFx0XHRhZGRyZXNzICs9IHNpemVfdG9fZW5kO1xuIFx0XHRzZ2xfc2l6ZSAtPSBzaXplX3RvX2VuZDtcbitcdFx0c2dsX29mZnNldCArPSBzaXplX3RvX2VuZDtcbitcdFx0aWYgKHNnbF9vZmZzZXQgPT0gd3EtXHUwMDNlcXVldWVfc2l6ZSlcbitcdFx0XHRzZ2xfb2Zmc2V0ID0gMDtcbiBcdH1cbiBcbi1cdG1lbWNweSh3cWVfcHRyLCBhZGRyZXNzLCBzZ2xfc2l6ZSk7XG4rXHRtZW1jcHkobWFuYV9nZF9yaW5nX3B0cih3cSwgc2dsX29mZnNldCksIGFkZHJlc3MsIHNnbF9zaXplKTtcbiB9XG4gXG4gaW50IG1hbmFfZ2RfcG9zdF93b3JrX3JlcXVlc3Qoc3RydWN0IGdkbWFfcXVldWUgKndxLFxuQEAgLTE1ODQsOCArMTcyNiwxMiBAQCBpbnQgbWFuYV9nZF9wb3N0X3dvcmtfcmVxdWVzdChzdHJ1Y3QgZ2RtYV9xdWV1ZSAqd3EsXG4gXHR1MzIgY2xpZW50X29vYl9zaXplID0gd3FlX3JlcS1cdTAwM2VpbmxpbmVfb29iX3NpemU7XG4gXHR1MzIgc2dsX2RhdGFfc2l6ZTtcbiBcdHUzMiBtYXhfd3FlX3NpemU7XG4rXHR1MzIgd3FlX29mZnNldDtcbitcdHUzMiBzZ2xfb2Zmc2V0O1xuIFx0dTMyIHdxZV9zaXplO1xuK1x0dTMyIG9vYl9sZW47XG4gXHR1OCAqd3FlX3B0cjtcbitcdHUzMiBoZWFkO1xuIFxuIFx0aWYgKHdxZV9yZXEtXHUwMDNlbnVtX3NnZSA9PSAwKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC0xNjE3LDEzICsxNzYzLDE3IEBAIGludCBtYW5hX2dkX3Bvc3Rfd29ya19yZXF1ZXN0KHN0cnVjdCBnZG1hX3F1ZXVlICp3cSxcbiBcdGlmICh3cWVfaW5mbylcbiBcdFx0d3FlX2luZm8tXHUwMDNld3FlX3NpemVfaW5fYnUgPSB3cWVfc2l6ZSAvIEdETUFfV1FFX0JVX1NJWkU7XG4gXG4tXHR3cWVfcHRyID0gbWFuYV9nZF9nZXRfd3FlX3B0cih3cSwgd3EtXHUwMDNlaGVhZCk7XG4tXHR3cWVfcHRyICs9IG1hbmFfZ2Rfd3JpdGVfY2xpZW50X29vYih3cWVfcmVxLCB3cS1cdTAwM2V0eXBlLCBjbGllbnRfb29iX3NpemUsXG4tXHRcdFx0XHRcdCAgICBzZ2xfZGF0YV9zaXplLCB3cWVfcHRyKTtcbi1cdGlmICh3cWVfcHRyIFx1MDAzZT0gKHU4ICopd3EtXHUwMDNlcXVldWVfbWVtX3B0ciArIHdxLVx1MDAzZXF1ZXVlX3NpemUpXG4tXHRcdHdxZV9wdHIgLT0gd3EtXHUwMDNlcXVldWVfc2l6ZTtcbitcdGhlYWQgPSB3cS1cdTAwM2VoZWFkO1xuK1x0d3FlX29mZnNldCA9IChoZWFkICogR0RNQV9XUUVfQlVfU0laRSkgXHUwMDI2ICh3cS1cdTAwM2VxdWV1ZV9zaXplIC0gMSk7XG4rXHR3cWVfcHRyID0gbWFuYV9nZF9nZXRfd3FlX3B0cih3cSwgaGVhZCk7XG4rXHRvb2JfbGVuID0gbWFuYV9nZF93cml0ZV9jbGllbnRfb29iKHdxZV9yZXEsIHdxLVx1MDAzZXR5cGUsIGNsaWVudF9vb2Jfc2l6ZSxcbitcdFx0XHRcdFx0ICAgc2dsX2RhdGFfc2l6ZSwgd3FlX3B0cik7XG4rXG4rXHRzZ2xfb2Zmc2V0ID0gd3FlX29mZnNldCArIG9vYl9sZW47XG4rXHRpZiAoc2dsX29mZnNldCBcdTAwM2U9IHdxLVx1MDAzZXF1ZXVlX3NpemUpXG4rXHRcdHNnbF9vZmZzZXQgLT0gd3EtXHUwMDNlcXVldWVfc2l6ZTtcbiBcbi1cdG1hbmFfZ2Rfd3JpdGVfc2dsKHdxLCB3cWVfcHRyLCB3cWVfcmVxKTtcbitcdG1hbmFfZ2Rfd3JpdGVfc2dsKHdxLCBzZ2xfb2Zmc2V0LCB3cWVfcmVxKTtcbiBcbiBcdHdxLVx1MDAzZWhlYWQgKz0gd3FlX3NpemUgLyBHRE1BX1dRRV9CVV9TSVpFO1xuIFxuQEAgLTE2NTMsMTEgKzE4MDMsMTAgQEAgaW50IG1hbmFfZ2RfcG9zdF9hbmRfcmluZyhzdHJ1Y3QgZ2RtYV9xdWV1ZSAqcXVldWUsXG4gc3RhdGljIGludCBtYW5hX2dkX3JlYWRfY3FlKHN0cnVjdCBnZG1hX3F1ZXVlICpjcSwgc3RydWN0IGdkbWFfY29tcCAqY29tcClcbiB7XG4gXHR1bnNpZ25lZCBpbnQgbnVtX2NxZSA9IGNxLVx1MDAzZXF1ZXVlX3NpemUgLyBzaXplb2Yoc3RydWN0IGdkbWFfY3FlKTtcbi1cdHN0cnVjdCBnZG1hX2NxZSAqY3FfY3FlID0gY3EtXHUwMDNlcXVldWVfbWVtX3B0cjtcbiBcdHUzMiBvd25lcl9iaXRzLCBuZXdfYml0cywgb2xkX2JpdHM7XG4gXHRzdHJ1Y3QgZ2RtYV9jcWUgKmNxZTtcbiBcbi1cdGNxZSA9IFx1MDAyNmNxX2NxZVtjcS1cdTAwM2VoZWFkICUgbnVtX2NxZV07XG4rXHRjcWUgPSBtYW5hX2dkX3JpbmdfcHRyKGNxLCAoY3EtXHUwMDNlaGVhZCAlIG51bV9jcWUpICogc2l6ZW9mKCpjcWUpKTtcbiBcdG93bmVyX2JpdHMgPSBjcWUtXHUwMDNlY3FlX2luZm8ub3duZXJfYml0cztcbiBcbiBcdG9sZF9iaXRzID0gKGNxLVx1MDAzZWhlYWQgLyBudW1fY3FlIC0gMSkgXHUwMDI2IEdETUFfQ1FFX09XTkVSX01BU0s7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvaHdfY2hhbm5lbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvaHdfY2hhbm5lbC5jXG5pbmRleCBlM2MyNGQ1MGRhZDA3Li4yNjNlN2M0ZTI5MzQxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvaHdfY2hhbm5lbC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9od19jaGFubmVsLmNcbkBAIC00NzksNyArNDc5LDcgQEAgc3RhdGljIGludCBtYW5hX2h3Y19hbGxvY19kbWFfYnVmKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTE2IHFfZGVwdGgsXG4gXHRidWZfc2l6ZSA9IE1BTkFfUEFHRV9BTElHTihxX2RlcHRoICogbWF4X21zZ19zaXplKTtcbiBcbiBcdGdtaSA9IFx1MDAyNmRtYV9idWYtXHUwMDNlbWVtX2luZm87XG4tXHRlcnIgPSBtYW5hX2dkX2FsbG9jX21lbW9yeShnYywgYnVmX3NpemUsIGdtaSk7XG4rXHRlcnIgPSBtYW5hX2dkX2FsbG9jX21lbW9yeShnYywgYnVmX3NpemUsIGdtaSwgZmFsc2UpO1xuIFx0aWYgKGVycikge1xuIFx0XHRkZXZfZXJyKGh3Yy1cdTAwM2VkZXYsIFwiRmFpbGVkIHRvIGFsbG9jYXRlIERNQSBidWZmZXIgc2l6ZTogJXUsIGVyciAlZFxcblwiLFxuIFx0XHRcdGJ1Zl9zaXplLCBlcnIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uY1xuaW5kZXggMjUxOWE5OGFkMDBiMC4uYjgwMzcxMTk2ODA0MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jXG5AQCAtNDAsNiArNDAsOSBAQCBzdGF0aWMgc3NpemVfdCBtYW5hX2RiZ19xX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudFxuIHtcbiBcdHN0cnVjdCBnZG1hX3F1ZXVlICpnZG1hX3EgPSBmaWxwLVx1MDAzZXByaXZhdGVfZGF0YTtcbiBcbitcdGlmIChnZG1hX3EtXHUwMDNlbWVtX2luZm8ubnJfcGFnZXMpXG4rXHRcdHJldHVybiBtYW5hX2dkX3JlYWRfcmluZyhnZG1hX3EsIGJ1ZiwgY291bnQsIHBvcyk7XG4rXG4gXHRyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIoYnVmLCBjb3VudCwgcG9zLCBnZG1hX3EtXHUwMDNlcXVldWVfbWVtX3B0cixcbiBcdFx0XHRcdCAgICAgICBnZG1hX3EtXHUwMDNlcXVldWVfc2l6ZSk7XG4gfVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21hbmEvZ2RtYS5oIGIvaW5jbHVkZS9uZXQvbWFuYS9nZG1hLmhcbmluZGV4IDg1MjljZWYwZDdjNDUuLmIwYjMyMmE4MGI2MjkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9tYW5hL2dkbWEuaFxuKysrIGIvaW5jbHVkZS9uZXQvbWFuYS9nZG1hLmhcbkBAIC0yNDAsNiArMjQwLDE0IEBAIHN0cnVjdCBnZG1hX21lbV9pbmZvIHtcbiBcdHZvaWQgKnZpcnRfYWRkcjtcbiBcdHU2NCBsZW5ndGg7XG4gXG4rXHQvKiBTY2F0dGVyZWQgZmFsbGJhY2s6IHdoZW4gQG5yX3BhZ2VzIFx1MDAzZSAwIHRoZSByaW5nIGlzIHRoYXQgbWFueVxuK1x0ICogUEFHRV9TSVpFIGNvaGVyZW50IGFsbG9jYXRpb25zIGluIEBwYWdlc192YS9AcGFnZXNfZG1hLCBub3RcbitcdCAqIEB2aXJ0X2FkZHIvQGRtYV9oYW5kbGUuXG4rXHQgKi9cbitcdHZvaWQgKipwYWdlc192YTtcbitcdGRtYV9hZGRyX3QgKnBhZ2VzX2RtYTtcbitcdHVuc2lnbmVkIGludCBucl9wYWdlcztcbitcbiBcdC8qIEFsbG9jYXRlZCBieSB0aGUgUEYgZHJpdmVyICovXG4gXHR1NjQgZG1hX3JlZ2lvbl9oYW5kbGU7XG4gfTtcbkBAIC01MTIsNiArNTIwLDkgQEAgaW50IG1hbmFfZ2RfcG9sbF9jcShzdHJ1Y3QgZ2RtYV9xdWV1ZSAqY3EsIHN0cnVjdCBnZG1hX2NvbXAgKmNvbXAsIGludCBudW1fY3FlKTtcbiBcbiB2b2lkIG1hbmFfZ2RfcmluZ19jcShzdHJ1Y3QgZ2RtYV9xdWV1ZSAqY3EsIHU4IGFybV9iaXQpO1xuIFxuK3NzaXplX3QgbWFuYV9nZF9yZWFkX3Jpbmcoc3RydWN0IGdkbWFfcXVldWUgKnEsIGNoYXIgX191c2VyICpidWYsXG4rXHRcdFx0ICBzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKTtcbitcbiBpbnQgbWFuYV9zY2hlZHVsZV9zZXJ2X3dvcmsoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MsIGVudW0gZ2RtYV9lcWVfdHlwZSB0eXBlKTtcbiBcbiB2b2lkIG1hbmFfZ2RfcmluZ19kaW0oc3RydWN0IGdkbWFfcXVldWUgKmNxLCB1MzIgbW9kX3VzZWMsIGJvb2wgbW9kX3VzZWNfdmxkLFxuQEAgLTY2OCw2ICs2NzksOSBAQCBlbnVtIHtcbiAvKiBEcml2ZXIgc3VwcG9ydHMgZHluYW1pYyBpbnRlcnJ1cHQgbW9kZXJhdGlvbiAtIERJTSAqL1xuICNkZWZpbmUgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9EWU5fSU5URVJSVVBUX01PREVSQVRJT04gQklUKDI4KVxuIFxuKy8qIERyaXZlciBzdXBwb3J0cyBub24tY29udGlndW91cyBxdWV1ZSBidWZmZXJzICovXG4rI2RlZmluZSBHRE1BX0RSVl9DQVBfRkxBR18xX05PTl9DT05USUdVT1VTX0JVRkZFUlMgQklUKDMwKVxuK1xuICNkZWZpbmUgR0RNQV9EUlZfQ0FQX0ZMQUdTMSBcXFxuIFx0KEdETUFfRFJWX0NBUF9GTEFHXzFfRVFfU0hBUklOR19NVUxUSV9WUE9SVCB8IFxcXG4gXHQgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9OQVBJX1dLRE9ORV9GSVggfCBcXFxuQEAgLTY4NCw3ICs2OTgsOCBAQCBlbnVtIHtcbiBcdCBHRE1BX0RSVl9DQVBfRkxBR18xX0hBTkRMRV9TVEFMTF9TUV9SRUNPVkVSWSB8IFxcXG4gXHQgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9IV0NfVElNRU9VVF9SRUNPVkVSWSB8IFxcXG4gXHQgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9FUV9NU0lfVU5TSEFSRV9NVUxUSV9WUE9SVCB8IFxcXG4tXHQgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9EWU5fSU5URVJSVVBUX01PREVSQVRJT04pXG4rXHQgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9EWU5fSU5URVJSVVBUX01PREVSQVRJT04gfCBcXFxuK1x0IEdETUFfRFJWX0NBUF9GTEFHXzFfTk9OX0NPTlRJR1VPVVNfQlVGRkVSUylcbiBcbiAjZGVmaW5lIEdETUFfRFJWX0NBUF9GTEFHUzIgMFxuIFxuQEAgLTEwNDUsNyArMTA2MCw3IEBAIHZvaWQgbWFuYV9nZF93cV9yaW5nX2Rvb3JiZWxsKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjLFxuIFx0XHRcdCAgICAgIHN0cnVjdCBnZG1hX3F1ZXVlICpxdWV1ZSk7XG4gXG4gaW50IG1hbmFfZ2RfYWxsb2NfbWVtb3J5KHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjLCB1bnNpZ25lZCBpbnQgbGVuZ3RoLFxuLVx0XHRcdCBzdHJ1Y3QgZ2RtYV9tZW1faW5mbyAqZ21pKTtcbitcdFx0XHQgc3RydWN0IGdkbWFfbWVtX2luZm8gKmdtaSwgYm9vbCBhbGxvd19zY2F0dGVyKTtcbiBcbiB2b2lkIG1hbmFfZ2RfZnJlZV9tZW1vcnkoc3RydWN0IGdkbWFfbWVtX2luZm8gKmdtaSk7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMjowMzo0NS42MTY4NzE2MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0NDMyODE2MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGdXp6aW5nIFBvdGVudGlhbCBvZiBUaGlzIE1BTkEgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHRvdWNoZXMgYGdkbWFfbWFpbi5jYCwgYGh3X2NoYW5uZWwuY2AsIGBtYW5hX2VuLmNgLCBhbmQgYGdkbWEuaGAg4oCTIGFsbCB3aXRoaW4gdGhlIE1BTkEgZHJpdmVyLCB3aGljaCBzZWVtcyB0byBiZSB0aGUgTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlci4gSXQncyBhZGRpbmcgc3VwcG9ydCBmb3Igc2NhdHRlcmVkIGZhbGxiYWNrIG1lbW9yeSBhbGxvY2F0aW9uLCB3aGljaCBpcyBpbnRlcmVzdGluZyBpbiBpdHNlbGYuIEJ1dCBoZXJlJ3MgdGhlIGNydWNpYWwgcXVlc3Rpb246IGlzIHRoaXMgcGF0Y2ggd29ydGggZnV6emluZywgYmFzZWQgb24gdGhlIHNwZWNpZmljIGNyaXRlcmlhP1xuXG5MZXQncyBzZWUsIHRoZSBpbnN0cnVjdGlvbnMgc3RhdGUgdGhhdCBhIHBhdGNoIGlzbid0IHdvcnRoIGZ1enppbmcgaWYgaXQncyBnb3QgY29kZSB0aGF0J3MgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciByZWxpZXMgb24gc3BlY2lhbGl6ZWQgaGFyZHdhcmUuIFNvLCBteSBpbml0aWFsIHRob3VnaHQgaXMsIE1BTkEgaXMgYSB2aXJ0dWFsaXplZCBuZXR3b3JrIGRyaXZlciwgdXNlZCBpbiBBenVyZSwgc3BlY2lmaWNhbGx5IEh5cGVyLVYsIGFuZCBJJ20gcHJldHR5IHN1cmUgaXQgZG9lc24ndCBydW4gaW4gc3RhbmRhcmQgUUVNVS4gVGhhdCdzIGEgcmVkIGZsYWcuIEJ1dCB3YWl0LCBjYW4gSHlwZXItViBndWVzdHMgcnVuIGluIFFFTVU/IEhtbSwgbm90IHdpdGggdGhpcyBNQU5BIGhhcmR3YXJlLCBpdCdzIGEgc3BlY2lmaWMgQXp1cmUgU1ItSU9WIGFkYXB0ZXIuIEl0J3MgYW4gQXp1cmUtc3BlY2lmaWMgaGFyZHdhcmUuIFNvLCBNQU5BIGlzIHZlbmRvci1zcGVjaWZpYywgYnV0IG5vdCBhIFNtYXJ0TklDIG9yIEdQVSBkcml2ZXIgbGlrZSB0aGUgY3JpdGVyaWEgZGVzY3JpYmUsIGFuZCBJJ20gY2VydGFpbiBpdCBpc24ndCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuXG5JdCBpcyBhIFBDSSBkZXZpY2UsIHNwZWNpZmljYWxseSB0aGUgTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlci4gQ2FuIHN5emthbGxlciBldmVuIHRvdWNoIGl0PyBTeXprYWxsZXIgcnVucyBpbiBRRU1VL0dDRSwgcmlnaHQ/IEFuZCBpdCBzdXJlIGRvZXNuJ3QgaGF2ZSBNQU5BIGhhcmR3YXJlLi4uIHRoYXQncyBhIHByb2JsZW0uIFN5emthbGxlciBkb2Vzbid0IGVtdWxhdGUgTUFOQS4gVGhpcyBsb29rcyBsaWtlIGEgZGVmaW5pdGUgbm8tZ28gZm9yIHN0YW5kYXJkIGZ1enppbmcuIEp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIGlmIHRoZSBNQU5BIGNvZGUgaXMgcmVhY2hhYmxlLCBvciBkZXBlbmRlbnQgb24gYW55IHNwZWNpZmljIGhhcmR3YXJlIHRoYXQgbWFrZXMgaXQgaW5hY2Nlc3NpYmxlIHRvIHRoZSBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50LiBBIHF1aWNrIGBtYW5hYCBzZWFyY2ggaW4gdGhlIGtlcm5lbCBzaG91bGQgcHJvdmlkZSBjb25maXJtYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2MDksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMjowMzo1My4wNjAxNTU3NDlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgwMTIwMTg2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfTUlDUk9TT0ZUX01BTkFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L01ha2VmaWxlLTQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX01JQ1JPU09GVF9NQU5BKSArPSBtYW5hL1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvTWFrZWZpbGUtNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9NYWtlZmlsZTo1Om9iai0kKENPTkZJR19NSUNST1NPRlRfTUFOQSkgKz0gbWFuYS5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvTWFrZWZpbGUtNi1tYW5hLW9ianMgOj0gZ2RtYV9tYWluLm8gc2htX2NoYW5uZWwubyBod19jaGFubmVsLm8gbWFuYV9lbi5vIG1hbmFfZXRodG9vbC5vIG1hbmFfYnBmLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjI6MDM6NTQuODYxMzY1MDAxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk3NDYyNTQ3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBDb2RlIFBhdGhzIGluIHRoZSBNQU5BIERyaXZlcioqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgbmVlZCB0byByZXRoaW5rIHRoaXMuIEl0IGp1c3QgaGl0IG1lOiBzeXprYWxsZXIsIGFzIGZhciBhcyBJIHVuZGVyc3RhbmQgaXQsIGRvZXNuJ3QgYWN0dWFsbHkgZW11bGF0ZSB0aGUgTUFOQSBQQ0kgZGV2aWNlcy4gVGhhdCBwcmVzZW50cyBhIHNlcmlvdXMgaHVyZGxlLiBJIHdhcyBhc3N1bWluZyBpdCBjb3VsZCwgYnV0IG5vdyBJJ20gcXVlc3Rpb25pbmcgdGhlIGJhc2lzIG9mIG15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzLlxuXG5TbywgaWYgc3l6a2FsbGVyIGlzbid0IG91ciByb3V0ZSBpbiwgaG93ICplbHNlKiBjYW4gd2UgZXhlcmNpc2UgdGhpcyBzcGVjaWZpYyBjb2RlPyBUaGUgZHJpdmVyJ3MgYXJjaGl0ZWN0dXJlIGxlYW5zIG9uIGJlaW5nIGEgUENJIGRyaXZlciwgd2hpY2ggbWVhbnMgaXQgc2hvdWxkIGJlIGxvYWRlZCBhbmQgbWFuYWdlZCB0aHJvdWdoIHRoZSBQQ0kgc3Vic3lzdGVtLiBJIG5lZWQgdG8gY29uZmlybSBpZiB0aGVyZSBhcmUgYWx0ZXJuYXRpdmUgZW50cnkgcG9pbnRzIGJleW9uZCB0aGUgc2ltdWxhdGVkIGVudmlyb25tZW50LlxuXG5UbyBzdGFydCwgbGV0IG1lIHF1aWNrbHkgcGl2b3QgdG8gYGRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jYCBhbmQgc3BlY2lmaWNhbGx5IGxvb2sgZm9yIHJlZmVyZW5jZXMgdG8gYHBjaV9kcml2ZXJgLiBUaGlzIHNob3VsZCBwcm92aWRlIGNydWNpYWwgaW5zaWdodHMuIEJ5IGV4YW1pbmluZyBob3cgdGhlIGRyaXZlciByZWdpc3RlcnMgd2l0aCBhbmQgaW50ZXJhY3RzIHdpdGggdGhlIFBDSSBidXMsIEkgY2FuIGdldCBhIGJldHRlciBncmlwIG9uIHdoZXRoZXIgdGhpcyBjb2RlIGlzIGV2ZW4gcmVtb3RlbHkgcmVhY2hhYmxlIGdpdmVuIG91ciBjdXJyZW50IGNvbnN0cmFpbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTkyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjI6MDM6NTguODM1OTkzNTA0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NzY3MDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBjaV9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jPTI3MDA9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIG1hbmFfaWRfdGFibGVbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jLTI3MDYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmM6MjcwNzpzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbWFuYV9kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjcwOC1cXHQubmFtZVxcdFxcdD0gXFxcIm1hbmFcXFwiLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMjowMzo1OC44ODM3Njg1MTlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjkyMzM0NDAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQ6IE1BTkEgRHJpdmVyIEZ1enppbmcgSW5mZWFzaWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIHRoaW5rIHRoaXMgdGhyb3VnaC4gVGhpcyBpcyBhIFBDSSBkcml2ZXIgc3BlY2lmaWNhbGx5IGZvciB0aGUgTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlciwgTUFOQS4gQW5kIGZyb20gd2hhdCBJIHVuZGVyc3RhbmQsIGl0J3Mgbm90IHNvbWV0aGluZyB5b3UgY2FuIGp1c3Qgc3BpbiB1cCBhbmQgcGxheSB3aXRoIGluIGEgc3RhbmRhcmQgUUVNVSBvciBHQ0UgZW52aXJvbm1lbnQuIEl0J3MgYSB2ZW5kb3Itc3BlY2lmaWMgcGllY2Ugb2YgaGFyZHdhcmUgdGhhdCBuZWNlc3NpdGF0ZXMgYWN0dWFsLCBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlLCBvciBhdCBsZWFzdCBhIHZlcnkgc3BlY2lhbGl6ZWQgZW11bGF0aW9uLlxuXG5HaXZlbiB0aGF0LCB0aGlzIGltbWVkaWF0ZWx5IHNjcmVhbXMgXCJXb3J0aEZ1enppbmc9ZmFsc2VcIi4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGUgaW5zdHJ1Y3Rpb25zIGZvciBldmFsdWF0aW5nIHRoZSBwYXRjaDogYW0gSSBkZWFsaW5nIHdpdGggY29kZSBpbXBvc3NpYmxlIHRvIHRvdWNoIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQg4oCTIGV2ZW4gaWYgdGhhdCBlbnZpcm9ubWVudCBoYXMgY2xldmVyIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLiBJdCBzZWVtcyBsaWtlIGEgbG90IG9mIHRoZSBleGFtcGxlcyB3ZXJlIFBDSS1iYXNlZCBhbmQvb3IgU21hcnROSUMncyAtIHNpbWlsYXIgdG8gbXkgY3VycmVudCBzaXR1YXRpb24uXG5cbkkndmUgZ29uZSB0aHJvdWdoIHRoZSBndWlkZWxpbmVzLCBhbmQgaXQncyBjbGVhcjogdmVuZG9yLXNwZWNpZmljIFBDSWUgZHJpdmVycyBsaWtlIE1BTkEg4oCTIGRlc2lnbmVkIGZvciBwaHlzaWNhbCBoYXJkd2FyZSB0aGF0IFFFTVUgZG9lc24ndCwgYW5kIHByb2JhYmx5ICpjYW4ndCosIGVtdWxhdGUg4oCTIGFyZSBleGFjdGx5IHRoZSBjYXRlZ29yeSB0aGF0IGRpc3F1YWxpZmllcyBpdC4gVGhlIE1BTkEgZHJpdmVyIGlzIHRoZSBzYW1lOyBpdCdzIGhhcmR3YXJlLWRlcGVuZGVudCwgc28gSSBuZWVkIHRvIHNldCB0aGUgZnV6emluZyBmbGFnIHRvIGZhbHNlLiBJIHdpbGwgbWFyayBpdCBhcyBzdWNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDA2NCwiT3V0cHV0VG9rZW5zIjo4NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMjowNDowNS4xNzYxMDU3MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1pY3Jvc29mdCBBenVyZSBOZXR3b3JrIEFkYXB0ZXIgKE1BTkEpIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBkZXZpY2UgZHJpdmVyLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudHMgdXNlZCBieSBzeXprYWxsZXIsIG1ha2luZyB0aGUgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBkdXJpbmcgc3RhbmRhcmQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyIChNQU5BKSBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgZGV2aWNlIGRyaXZlci4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgZW52aXJvbm1lbnRzIHVzZWQgYnkgc3l6a2FsbGVyLCBtYWtpbmcgdGhlIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIHN0YW5kYXJkIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMjowNDowNS4xNzYxMzNaIiwiU2VxIjo5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow9p4jl[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-07 21:43:46 +0000 UTC FinishedAt: 2026-08-07 22:04:06 +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+CgkJCTx0ZD4yMDI2LzA4LzA3IDIyOjAzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1pY3Jvc29mdCBBenVyZSBOZXR3b3JrIEFkYXB0ZXIgKE1BTkEpIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBkZXZpY2UgZHJpdmVyLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudHMgdXNlZCBieSBzeXprYWxsZXIsIG1ha2luZyB0aGUgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBkdXJpbmcgc3RhbmRhcmQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjI6MDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiZDhiZWNkMDViMjIwZWU0YzBjYzBmMzJkNDE4MmQ1OGMyNTZmZWVhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAyMjowMzo0NCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jXG5pbmRleCBhMzhkNGJiNzQ2MjFmLi5lZDlhZjMxNGU0ZWRlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jXG5AQCAtMTEsNiAmIzQzOzExLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tc2kuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lycWRvbWFpbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXhwb3J0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdWFjY2Vzcy5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjbmV0L21hbmEvbWFuYS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L21hbmEvaHdfY2hhbm5lbC5oXHUwMDNlXG5AQCAtMzc0LDI4ICYjNDM7Mzc1LDk2IEBAIGludCBtYW5hX2dkX3NlbmRfcmVxdWVzdChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYywgdTMyIHJlcV9sZW4sIGNvbnN0IHZvaWQgKnJlcSxcbiBFWFBPUlRfU1lNQk9MX05TKG1hbmFfZ2Rfc2VuZF9yZXF1ZXN0LCBcJiMzNDtORVRfTUFOQVwmIzM0Oyk7XG4gXG4gaW50IG1hbmFfZ2RfYWxsb2NfbWVtb3J5KHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjLCB1bnNpZ25lZCBpbnQgbGVuZ3RoLFxuLVx0XHRcdCBzdHJ1Y3QgZ2RtYV9tZW1faW5mbyAqZ21pKVxuJiM0MztcdFx0XHQgc3RydWN0IGdkbWFfbWVtX2luZm8gKmdtaSwgYm9vbCBhbGxvd19zY2F0dGVyKVxuIHtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgbnBhZ2VzLCBpO1xuIFx0ZG1hX2FkZHJfdCBkbWFfaGFuZGxlO1xuJiM0MztcdGJvb2wgY2FuX2ZhbGxiYWNrO1xuIFx0dm9pZCAqYnVmO1xuIFxuIFx0aWYgKGxlbmd0aCBcdTAwM2MgTUFOQV9QQUdFX1NJWkUgfHwgIWlzX3Bvd2VyX29mXzIobGVuZ3RoKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRnbWktXHUwMDNlZGV2ID0gZ2MtXHUwMDNlZGV2O1xuLVx0YnVmID0gZG1hX2FsbG9jX2NvaGVyZW50KGdtaS1cdTAwM2VkZXYsIGxlbmd0aCwgXHUwMDI2ZG1hX2hhbmRsZSwgR0ZQX0tFUk5FTCk7XG4tXHRpZiAoIWJ1ZilcbiYjNDM7XG4mIzQzO1x0LyogQW4gYWxsb2NhdGlvbiB0aGF0IGZpdHMgaW4gb25lIHBhZ2UgZG9lcyBub3QgYmVuZWZpdCBmcm9tXG4mIzQzO1x0ICogZmFsbGJhY2suXG4mIzQzO1x0ICovXG4mIzQzO1x0Y2FuX2ZhbGxiYWNrID0gYWxsb3dfc2NhdHRlciBcdTAwMjZcdTAwMjYgbGVuZ3RoIFx1MDAzZSBQQUdFX1NJWkU7XG4mIzQzO1xuJiM0MztcdC8qIFdhcm4gb25seSB3aGVuIHRoZXJlIGlzIG5vIGZhbGxiYWNrIHRvIHJlc2N1ZSB0aGUgZmFpbHVyZS4gKi9cbiYjNDM7XHRidWYgPSBkbWFfYWxsb2NfY29oZXJlbnQoZ21pLVx1MDAzZWRldiwgbGVuZ3RoLCBcdTAwMjZkbWFfaGFuZGxlLFxuJiM0MztcdFx0XHRcdCBHRlBfS0VSTkVMIHxcbiYjNDM7XHRcdFx0XHQgKGNhbl9mYWxsYmFjayA/IF9fR0ZQX05PV0FSTiA6IDApKTtcbiYjNDM7XHRpZiAoYnVmKSB7XG4mIzQzO1x0XHRnbWktXHUwMDNlZG1hX2hhbmRsZSA9IGRtYV9oYW5kbGU7XG4mIzQzO1x0XHRnbWktXHUwMDNldmlydF9hZGRyID0gYnVmO1xuJiM0MztcdFx0Z21pLVx1MDAzZWxlbmd0aCA9IGxlbmd0aDtcbiYjNDM7XHRcdGdtaS1cdTAwM2Vucl9wYWdlcyA9IDA7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghY2FuX2ZhbGxiYWNrKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdGdtaS1cdTAwM2VkbWFfaGFuZGxlID0gZG1hX2hhbmRsZTtcbi1cdGdtaS1cdTAwM2V2aXJ0X2FkZHIgPSBidWY7XG4mIzQzO1x0LyogbGVuZ3RoIGlzIGEgcG93ZXIgb2YgMiBhYm92ZSBQQUdFX1NJWkUsIHNvIHRoaXMgZGl2aWRlcyBleGFjdGx5LiAqL1xuJiM0MztcdG5wYWdlcyA9IGxlbmd0aCAvIFBBR0VfU0laRTtcbiYjNDM7XG4mIzQzO1x0Z21pLVx1MDAzZXBhZ2VzX3ZhID0ga3ZjYWxsb2MobnBhZ2VzLCBzaXplb2YoKmdtaS1cdTAwM2VwYWdlc192YSksIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghZ21pLVx1MDAzZXBhZ2VzX3ZhKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdGdtaS1cdTAwM2VwYWdlc19kbWEgPSBrdmNhbGxvYyhucGFnZXMsIHNpemVvZigqZ21pLVx1MDAzZXBhZ2VzX2RtYSksIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghZ21pLVx1MDAzZXBhZ2VzX2RtYSlcbiYjNDM7XHRcdGdvdG8gZnJlZV92YTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnBhZ2VzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0Z21pLVx1MDAzZXBhZ2VzX3ZhW2ldID0gZG1hX2FsbG9jX2NvaGVyZW50KGdtaS1cdTAwM2VkZXYsIFBBR0VfU0laRSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgXHUwMDI2Z21pLVx1MDAzZXBhZ2VzX2RtYVtpXSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0XHRpZiAoIWdtaS1cdTAwM2VwYWdlc192YVtpXSlcbiYjNDM7XHRcdFx0Z290byBmcmVlX3BhZ2VzO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZGV2X2luZm9fcmF0ZWxpbWl0ZWQoZ21pLVx1MDAzZWRldixcbiYjNDM7XHRcdFx0ICAgICBcJiMzNDtjb250aWd1b3VzICV1LWJ5dGUgRE1BIGFsbG9jIGZhaWxlZDsgdXNpbmcgJXUgc2NhdHRlcmVkIHBhZ2VzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgIGxlbmd0aCwgbnBhZ2VzKTtcbiYjNDM7XG4mIzQzO1x0Z21pLVx1MDAzZXZpcnRfYWRkciA9IE5VTEw7XG4mIzQzO1x0Z21pLVx1MDAzZWRtYV9oYW5kbGUgPSAwO1xuIFx0Z21pLVx1MDAzZWxlbmd0aCA9IGxlbmd0aDtcbiYjNDM7XHRnbWktXHUwMDNlbnJfcGFnZXMgPSBucGFnZXM7XG4gXG4gXHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2ZyZWVfcGFnZXM6XG4mIzQzO1x0d2hpbGUgKGktLSlcbiYjNDM7XHRcdGRtYV9mcmVlX2NvaGVyZW50KGdtaS1cdTAwM2VkZXYsIFBBR0VfU0laRSwgZ21pLVx1MDAzZXBhZ2VzX3ZhW2ldLFxuJiM0MztcdFx0XHRcdCAgZ21pLVx1MDAzZXBhZ2VzX2RtYVtpXSk7XG4mIzQzO1x0a3ZmcmVlKGdtaS1cdTAwM2VwYWdlc19kbWEpO1xuJiM0MztcdGdtaS1cdTAwM2VwYWdlc19kbWEgPSBOVUxMO1xuJiM0MztmcmVlX3ZhOlxuJiM0MztcdGt2ZnJlZShnbWktXHUwMDNlcGFnZXNfdmEpO1xuJiM0MztcdGdtaS1cdTAwM2VwYWdlc192YSA9IE5VTEw7XG4mIzQzO1x0cmV0dXJuIC1FTk9NRU07XG4gfVxuIFxuIHZvaWQgbWFuYV9nZF9mcmVlX21lbW9yeShzdHJ1Y3QgZ2RtYV9tZW1faW5mbyAqZ21pKVxuIHtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaTtcbiYjNDM7XG4mIzQzO1x0aWYgKGdtaS1cdTAwM2Vucl9wYWdlcyBcdTAwM2UgMCkge1xuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZ21pLVx1MDAzZW5yX3BhZ2VzOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdFx0ZG1hX2ZyZWVfY29oZXJlbnQoZ21pLVx1MDAzZWRldiwgUEFHRV9TSVpFLCBnbWktXHUwMDNlcGFnZXNfdmFbaV0sXG4mIzQzO1x0XHRcdFx0XHQgIGdtaS1cdTAwM2VwYWdlc19kbWFbaV0pO1xuJiM0MztcdFx0a3ZmcmVlKGdtaS1cdTAwM2VwYWdlc192YSk7XG4mIzQzO1x0XHRrdmZyZWUoZ21pLVx1MDAzZXBhZ2VzX2RtYSk7XG4mIzQzO1x0XHRnbWktXHUwMDNlcGFnZXNfdmEgPSBOVUxMO1xuJiM0MztcdFx0Z21pLVx1MDAzZXBhZ2VzX2RtYSA9IE5VTEw7XG4mIzQzO1x0XHRnbWktXHUwMDNlbnJfcGFnZXMgPSAwO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRkbWFfZnJlZV9jb2hlcmVudChnbWktXHUwMDNlZGV2LCBnbWktXHUwMDNlbGVuZ3RoLCBnbWktXHUwMDNldmlydF9hZGRyLFxuIFx0XHRcdCAgZ21pLVx1MDAzZWRtYV9oYW5kbGUpO1xuIH1cbkBAIC03NTMsMTEgJiM0Mzs4MjIsNzMgQEAgaW50IG1hbmFfc2NoZWR1bGVfc2Vydl93b3JrKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjLCBlbnVtIGdkbWFfZXFlX3R5cGUgdHlwZSlcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7LyogUmV0dXJuIHRoZSBDUFUgYWRkcmVzcyBvZiBieXRlIEBvZmZzZXQgd2l0aGluIGEgcXVldWUmIzM5O3MgcmluZyBidWZmZXIuICovXG4mIzQzO3N0YXRpYyB2b2lkICptYW5hX2dkX3JpbmdfcHRyKGNvbnN0IHN0cnVjdCBnZG1hX3F1ZXVlICpxLCB1MzIgb2Zmc2V0KVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGdkbWFfbWVtX2luZm8gKmdtaSA9IFx1MDAyNnEtXHUwMDNlbWVtX2luZm87XG4mIzQzO1xuJiM0MztcdGlmIChnbWktXHUwMDNlbnJfcGFnZXMgXHUwMDNlIDApXG4mIzQzO1x0XHRyZXR1cm4gKHU4ICopZ21pLVx1MDAzZXBhZ2VzX3ZhW29mZnNldCAvIFBBR0VfU0laRV0gJiM0MztcbiYjNDM7XHRcdCAgICAgICAob2Zmc2V0IFx1MDAyNiAoUEFHRV9TSVpFIC0gMSkpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcS1cdTAwM2VxdWV1ZV9tZW1fcHRyICYjNDM7IG9mZnNldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogTnVtYmVyIG9mIGJ5dGVzIGZyb20gQG9mZnNldCB0byB0aGUgZW5kIG9mIHRoZSBDUFUtY29udGlndW91cyByZWdpb246IHRoZVxuJiM0MzsgKiByZXN0IG9mIHRoZSByaW5nLCBvciB0aGUgcmVzdCBvZiB0aGUgY3VycmVudCBwYWdlIHdoZW4gc2NhdHRlcmVkLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHUzMiBtYW5hX2dkX3JpbmdfY29udGlnX2F2YWlsKGNvbnN0IHN0cnVjdCBnZG1hX3F1ZXVlICpxLCB1MzIgb2Zmc2V0KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHEtXHUwMDNlbWVtX2luZm8ubnJfcGFnZXMgXHUwMDNlIDApXG4mIzQzO1x0XHRyZXR1cm4gUEFHRV9TSVpFIC0gKG9mZnNldCBcdTAwMjYgKFBBR0VfU0laRSAtIDEpKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHEtXHUwMDNlcXVldWVfc2l6ZSAtIG9mZnNldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogQ29weSB1cCB0byBAY291bnQgYnl0ZXMgZnJvbSByaW5nIG9mZnNldCAqQHBvcyBvZiBAcSBpbnRvIHVzZXIgYnVmZmVyIEBidWYsXG4mIzQzOyAqIHNvIGEgc2NhdHRlcmVkIHJpbmcgcmVhZHMgYmFjayBhcyBpZiBpdCB3ZXJlIGNvbnRpZ3VvdXMuIFJldHVybnMgYnl0ZXNcbiYjNDM7ICogY29waWVkLCAwIGF0IGVuZCBvZiByaW5nLCBvciBhIG5lZ2F0aXZlIGVycm5vLlxuJiM0MzsgKi9cbiYjNDM7c3NpemVfdCBtYW5hX2dkX3JlYWRfcmluZyhzdHJ1Y3QgZ2RtYV9xdWV1ZSAqcSwgY2hhciBfX3VzZXIgKmJ1ZixcbiYjNDM7XHRcdFx0ICBzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIHNpemUgPSBxLVx1MDAzZXF1ZXVlX3NpemU7XG4mIzQzO1x0bG9mZl90IG9mZiA9ICpwb3M7XG4mIzQzO1x0c2l6ZV90IGNvcGllZCA9IDA7XG4mIzQzO1xuJiM0MztcdGlmIChvZmYgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRpZiAob2ZmIFx1MDAzZT0gc2l6ZSB8fCAhY291bnQpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRjb3VudCA9IG1pbl90KHNpemVfdCwgY291bnQsIHNpemUgLSBvZmYpO1xuJiM0MztcbiYjNDM7XHR3aGlsZSAoY291bnQpIHtcbiYjNDM7XHRcdHUzMiBvZmZzZXQgPSBvZmY7XG4mIzQzO1x0XHR1MzIgYXZhaWwgPSBtYW5hX2dkX3JpbmdfY29udGlnX2F2YWlsKHEsIG9mZnNldCk7XG4mIzQzO1x0XHRzaXplX3QgY2h1bmsgPSBtaW5fdChzaXplX3QsIGNvdW50LCBhdmFpbCk7XG4mIzQzO1x0XHRzaXplX3QgbGVmdCA9IGNvcHlfdG9fdXNlcihidWYsIG1hbmFfZ2RfcmluZ19wdHIocSwgb2Zmc2V0KSxcbiYjNDM7XHRcdFx0XHRcdCAgIGNodW5rKTtcbiYjNDM7XG4mIzQzO1x0XHRjaHVuayAtPSBsZWZ0O1xuJiM0MztcdFx0YnVmICYjNDM7PSBjaHVuaztcbiYjNDM7XHRcdG9mZiAmIzQzOz0gY2h1bms7XG4mIzQzO1x0XHRjb3BpZWQgJiM0Mzs9IGNodW5rO1xuJiM0MztcdFx0Y291bnQgLT0gY2h1bms7XG4mIzQzO1x0XHRpZiAobGVmdClcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIWNvcGllZClcbiYjNDM7XHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcbiYjNDM7XHQqcG9zID0gb2ZmO1xuJiM0MztcdHJldHVybiBjb3BpZWQ7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgbWFuYV9nZF9wcm9jZXNzX2VxZShzdHJ1Y3QgZ2RtYV9xdWV1ZSAqZXEpXG4ge1xuIFx0dTMyIGhlYWQgPSBlcS1cdTAwM2VoZWFkICUgKGVxLVx1MDAzZXF1ZXVlX3NpemUgLyBHRE1BX0VRRV9TSVpFKTtcbiBcdHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjID0gZXEtXHUwMDNlZ2RtYV9kZXYtXHUwMDNlZ2RtYV9jb250ZXh0O1xuLVx0c3RydWN0IGdkbWFfZXFlICplcV9lcWVfcHRyID0gZXEtXHUwMDNlcXVldWVfbWVtX3B0cjtcbiBcdHVuaW9uIGdkbWFfZXFlX2luZm8gZXFlX2luZm87XG4gXHRlbnVtIGdkbWFfZXFlX3R5cGUgdHlwZTtcbiBcdHN0cnVjdCBnZG1hX2V2ZW50IGV2ZW50O1xuQEAgLTc2NSw3ICYjNDM7ODk2LDcgQEAgc3RhdGljIHZvaWQgbWFuYV9nZF9wcm9jZXNzX2VxZShzdHJ1Y3QgZ2RtYV9xdWV1ZSAqZXEpXG4gXHRzdHJ1Y3QgZ2RtYV9lcWUgKmVxZTtcbiBcdHUzMiBjcV9pZDtcbiBcbi1cdGVxZSA9IFx1MDAyNmVxX2VxZV9wdHJbaGVhZF07XG4mIzQzO1x0ZXFlID0gbWFuYV9nZF9yaW5nX3B0cihlcSwgaGVhZCAqIHNpemVvZigqZXFlKSk7XG4gXHRlcWVfaW5mby5hc191aW50MzIgPSBlcWUtXHUwMDNlZXFlX2luZm87XG4gXHR0eXBlID0gZXFlX2luZm8udHlwZTtcbiBcbkBAIC04MjksNyAmIzQzOzk2MCw2IEBAIHN0YXRpYyB2b2lkIG1hbmFfZ2RfcHJvY2Vzc19lcV9ldmVudHModm9pZCAqYXJnKVxuIHtcbiBcdHUzMiBvd25lcl9iaXRzLCBuZXdfYml0cywgb2xkX2JpdHM7XG4gXHR1bmlvbiBnZG1hX2VxZV9pbmZvIGVxZV9pbmZvO1xuLVx0c3RydWN0IGdkbWFfZXFlICplcV9lcWVfcHRyO1xuIFx0c3RydWN0IGdkbWFfcXVldWUgKmVxID0gYXJnO1xuIFx0c3RydWN0IGdkbWFfY29udGV4dCAqZ2M7XG4gXHRzdHJ1Y3QgZ2RtYV9lcWUgKmVxZTtcbkBAIC04MzksMTEgJiM0Mzs5NjksMTAgQEAgc3RhdGljIHZvaWQgbWFuYV9nZF9wcm9jZXNzX2VxX2V2ZW50cyh2b2lkICphcmcpXG4gXHRnYyA9IGVxLVx1MDAzZWdkbWFfZGV2LVx1MDAzZWdkbWFfY29udGV4dDtcbiBcbiBcdG51bV9lcWUgPSBlcS1cdTAwM2VxdWV1ZV9zaXplIC8gR0RNQV9FUUVfU0laRTtcbi1cdGVxX2VxZV9wdHIgPSBlcS1cdTAwM2VxdWV1ZV9tZW1fcHRyO1xuIFxuIFx0LyogUHJvY2VzcyB1cCB0byA1IEVRRXMgYXQgYSB0aW1lLCBhbmQgdXBkYXRlIHRoZSBIVyBoZWFkLiAqL1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgNTsgaSYjNDM7JiM0MzspIHtcbi1cdFx0ZXFlID0gXHUwMDI2ZXFfZXFlX3B0cltlcS1cdTAwM2VoZWFkICUgbnVtX2VxZV07XG4mIzQzO1x0XHRlcWUgPSBtYW5hX2dkX3JpbmdfcHRyKGVxLCAoZXEtXHUwMDNlaGVhZCAlIG51bV9lcWUpICogc2l6ZW9mKCplcWUpKTtcbiBcdFx0ZXFlX2luZm8uYXNfdWludDMyID0gZXFlLVx1MDAzZWVxZV9pbmZvO1xuIFx0XHRvd25lcl9iaXRzID0gZXFlX2luZm8ub3duZXJfYml0cztcbiBcbkBAIC0xMTA3LDcgJiM0MzsxMjM2LDcgQEAgaW50IG1hbmFfZ2RfY3JlYXRlX2h3Y19xdWV1ZShzdHJ1Y3QgZ2RtYV9kZXYgKmdkLFxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiBcdGdtaSA9IFx1MDAyNnF1ZXVlLVx1MDAzZW1lbV9pbmZvO1xuLVx0ZXJyID0gbWFuYV9nZF9hbGxvY19tZW1vcnkoZ2MsIHNwZWMtXHUwMDNlcXVldWVfc2l6ZSwgZ21pKTtcbiYjNDM7XHRlcnIgPSBtYW5hX2dkX2FsbG9jX21lbW9yeShnYywgc3BlYy1cdTAwM2VxdWV1ZV9zaXplLCBnbWksIGZhbHNlKTtcbiBcdGlmIChlcnIpIHtcbiBcdFx0ZGV2X2VycihnYy1cdTAwM2VkZXYsIFwmIzM0O0dETUEgcXVldWUgdHlwZTogJWQsIHNpemU6ICV1LCBnZG1hIG1lbW9yeSBhbGxvY2F0aW9uIGVycjogJWRcXG5cJiMzNDssXG4gXHRcdFx0c3BlYy1cdTAwM2V0eXBlLCBzcGVjLVx1MDAzZXF1ZXVlX3NpemUsIGVycik7XG5AQCAtMTE4Miw3ICYjNDM7MTMxMSw3IEBAIHN0YXRpYyBpbnQgbWFuYV9nZF9jcmVhdGVfZG1hX3JlZ2lvbihzdHJ1Y3QgZ2RtYV9kZXYgKmdkLFxuIFx0aWYgKGxlbmd0aCBcdTAwM2MgTUFOQV9QQUdFX1NJWkUgfHwgIWlzX3Bvd2VyX29mXzIobGVuZ3RoKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRpZiAoIU1BTkFfUEFHRV9BTElHTkVEKGdtaS1cdTAwM2V2aXJ0X2FkZHIpKVxuJiM0MztcdGlmIChnbWktXHUwMDNlbnJfcGFnZXMgPT0gMCBcdTAwMjZcdTAwMjYgIU1BTkFfUEFHRV9BTElHTkVEKGdtaS1cdTAwM2V2aXJ0X2FkZHIpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdGh3YyA9IGdjLVx1MDAzZWh3Yy5kcml2ZXJfZGF0YTtcbkBAIC0xMjAyLDggJiM0MzsxMzMxLDI0IEBAIHN0YXRpYyBpbnQgbWFuYV9nZF9jcmVhdGVfZG1hX3JlZ2lvbihzdHJ1Y3QgZ2RtYV9kZXYgKmdkLFxuIFx0cmVxLVx1MDAzZXBhZ2VfY291bnQgPSBudW1fcGFnZTtcbiBcdHJlcS1cdTAwM2VwYWdlX2FkZHJfbGlzdF9sZW4gPSBudW1fcGFnZTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV9wYWdlOyBpJiM0MzsmIzQzOylcbi1cdFx0cmVxLVx1MDAzZXBhZ2VfYWRkcl9saXN0W2ldID0gZ21pLVx1MDAzZWRtYV9oYW5kbGUgJiM0MzsgIGkgKiBNQU5BX1BBR0VfU0laRTtcbiYjNDM7XHRpZiAoZ21pLVx1MDAzZW5yX3BhZ2VzIFx1MDAzZSAwKSB7XG4mIzQzO1x0XHR1bnNpZ25lZCBpbnQgc3VicGFnZXMgPSBQQUdFX1NJWkUgLyBNQU5BX1BBR0VfU0laRTtcbiYjNDM7XHRcdHVuc2lnbmVkIGludCBpZHggPSAwO1xuJiM0MztcdFx0dW5zaWduZWQgaW50IHBnLCBzdWI7XG4mIzQzO1xuJiM0MztcdFx0LyogRWFjaCBQQUdFX1NJWkUgY2h1bmsgaXMgcGh5c2ljYWxseSBjb250aWd1b3VzIGFuZCBjb250YWluc1xuJiM0MztcdFx0ICogUEFHRV9TSVpFIC8gTUFOQV9QQUdFX1NJWkUgY29uc2VjdXRpdmUgZGV2aWNlIHBhZ2VzLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRmb3IgKHBnID0gMDsgcGcgXHUwMDNjIGdtaS1cdTAwM2Vucl9wYWdlczsgcGcmIzQzOyYjNDM7KVxuJiM0MztcdFx0XHRmb3IgKHN1YiA9IDA7IHN1YiBcdTAwM2Mgc3VicGFnZXM7IHN1YiYjNDM7JiM0MzspXG4mIzQzO1x0XHRcdFx0cmVxLVx1MDAzZXBhZ2VfYWRkcl9saXN0W2lkeCYjNDM7JiM0MztdID1cbiYjNDM7XHRcdFx0XHRcdGdtaS1cdTAwM2VwYWdlc19kbWFbcGddICYjNDM7XG4mIzQzO1x0XHRcdFx0XHRzdWIgKiBNQU5BX1BBR0VfU0laRTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX3BhZ2U7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0XHRyZXEtXHUwMDNlcGFnZV9hZGRyX2xpc3RbaV0gPVxuJiM0MztcdFx0XHRcdGdtaS1cdTAwM2VkbWFfaGFuZGxlICYjNDM7IGkgKiBNQU5BX1BBR0VfU0laRTtcbiYjNDM7XHR9XG4gXG4gXHRlcnIgPSBtYW5hX2dkX3NlbmRfcmVxdWVzdChnYywgcmVxX21zZ19zaXplLCByZXEsIHNpemVvZihyZXNwKSwgXHUwMDI2cmVzcCk7XG4gXHRpZiAoZXJyKVxuQEAgLTEyNDYsNyAmIzQzOzEzOTEsNyBAQCBpbnQgbWFuYV9nZF9jcmVhdGVfbWFuYV9lcShzdHJ1Y3QgZ2RtYV9kZXYgKmdkLFxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiBcdGdtaSA9IFx1MDAyNnF1ZXVlLVx1MDAzZW1lbV9pbmZvO1xuLVx0ZXJyID0gbWFuYV9nZF9hbGxvY19tZW1vcnkoZ2MsIHNwZWMtXHUwMDNlcXVldWVfc2l6ZSwgZ21pKTtcbiYjNDM7XHRlcnIgPSBtYW5hX2dkX2FsbG9jX21lbW9yeShnYywgc3BlYy1cdTAwM2VxdWV1ZV9zaXplLCBnbWksIHRydWUpO1xuIFx0aWYgKGVycikge1xuIFx0XHRkZXZfZXJyKGdjLVx1MDAzZWRldiwgXCYjMzQ7R0RNQSBxdWV1ZSB0eXBlOiAlZCwgc2l6ZTogJXUsIGdkbWEgbWVtb3J5IGFsbG9jYXRpb24gZXJyOiAlZFxcblwmIzM0OyxcbiBcdFx0XHRzcGVjLVx1MDAzZXR5cGUsIHNwZWMtXHUwMDNlcXVldWVfc2l6ZSwgZXJyKTtcbkBAIC0xMzAxLDcgJiM0MzsxNDQ2LDcgQEAgaW50IG1hbmFfZ2RfY3JlYXRlX21hbmFfd3FfY3Eoc3RydWN0IGdkbWFfZGV2ICpnZCxcbiBcdHF1ZXVlLVx1MDAzZWlkID0gSU5WQUxJRF9RVUVVRV9JRDtcbiBcbiBcdGdtaSA9IFx1MDAyNnF1ZXVlLVx1MDAzZW1lbV9pbmZvO1xuLVx0ZXJyID0gbWFuYV9nZF9hbGxvY19tZW1vcnkoZ2MsIHNwZWMtXHUwMDNlcXVldWVfc2l6ZSwgZ21pKTtcbiYjNDM7XHRlcnIgPSBtYW5hX2dkX2FsbG9jX21lbW9yeShnYywgc3BlYy1cdTAwM2VxdWV1ZV9zaXplLCBnbWksIHRydWUpO1xuIFx0aWYgKGVycikge1xuIFx0XHRkZXZfZXJyKGdjLVx1MDAzZWRldiwgXCYjMzQ7R0RNQSBxdWV1ZSB0eXBlOiAlZCwgc2l6ZTogJXUsIG1lbW9yeSBhbGxvY2F0aW9uIGVycjogJWRcXG5cJiMzNDssXG4gXHRcdFx0c3BlYy1cdTAwM2V0eXBlLCBzcGVjLVx1MDAzZXF1ZXVlX3NpemUsIGVycik7XG5AQCAtMTUwOCw3ICYjNDM7MTY1Myw3IEBAIHU4ICptYW5hX2dkX2dldF93cWVfcHRyKGNvbnN0IHN0cnVjdCBnZG1hX3F1ZXVlICp3cSwgdTMyIHdxZV9vZmZzZXQpXG4gXG4gXHRXQVJOX09OX09OQ0UoKG9mZnNldCAmIzQzOyBHRE1BX1dRRV9CVV9TSVpFKSBcdTAwM2Ugd3EtXHUwMDNlcXVldWVfc2l6ZSk7XG4gXG4tXHRyZXR1cm4gd3EtXHUwMDNlcXVldWVfbWVtX3B0ciAmIzQzOyBvZmZzZXQ7XG4mIzQzO1x0cmV0dXJuIG1hbmFfZ2RfcmluZ19wdHIod3EsIG9mZnNldCk7XG4gfVxuIFxuIHN0YXRpYyB1MzIgbWFuYV9nZF93cml0ZV9jbGllbnRfb29iKGNvbnN0IHN0cnVjdCBnZG1hX3dxZV9yZXF1ZXN0ICp3cWVfcmVxLFxuQEAgLTE1NTQsMjcgJiM0MzsxNjk5LDI0IEBAIHN0YXRpYyB1MzIgbWFuYV9nZF93cml0ZV9jbGllbnRfb29iKGNvbnN0IHN0cnVjdCBnZG1hX3dxZV9yZXF1ZXN0ICp3cWVfcmVxLFxuIFx0cmV0dXJuIHNpemVvZihoZWFkZXIpICYjNDM7IGNsaWVudF9vb2Jfc2l6ZTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgbWFuYV9nZF93cml0ZV9zZ2woc3RydWN0IGdkbWFfcXVldWUgKndxLCB1OCAqd3FlX3B0cixcbiYjNDM7c3RhdGljIHZvaWQgbWFuYV9nZF93cml0ZV9zZ2woc3RydWN0IGdkbWFfcXVldWUgKndxLCB1MzIgc2dsX29mZnNldCxcbiBcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgZ2RtYV93cWVfcmVxdWVzdCAqd3FlX3JlcSlcbiB7XG4mIzQzO1x0dTMyIHNpemVfdG9fZW5kID0gbWFuYV9nZF9yaW5nX2NvbnRpZ19hdmFpbCh3cSwgc2dsX29mZnNldCk7XG4gXHR1MzIgc2dsX3NpemUgPSBzaXplb2Yoc3RydWN0IGdkbWFfc2dlKSAqIHdxZV9yZXEtXHUwMDNlbnVtX3NnZTtcbiBcdGNvbnN0IHU4ICphZGRyZXNzID0gKHU4ICopd3FlX3JlcS1cdTAwM2VzZ2w7XG4tXHR1OCAqYmFzZV9wdHIsICplbmRfcHRyO1xuLVx0dTMyIHNpemVfdG9fZW5kO1xuLVxuLVx0YmFzZV9wdHIgPSB3cS1cdTAwM2VxdWV1ZV9tZW1fcHRyO1xuLVx0ZW5kX3B0ciA9IGJhc2VfcHRyICYjNDM7IHdxLVx1MDAzZXF1ZXVlX3NpemU7XG4tXHRzaXplX3RvX2VuZCA9ICh1MzIpKGVuZF9wdHIgLSB3cWVfcHRyKTtcbiBcbiBcdGlmIChzaXplX3RvX2VuZCBcdTAwM2Mgc2dsX3NpemUpIHtcbi1cdFx0bWVtY3B5KHdxZV9wdHIsIGFkZHJlc3MsIHNpemVfdG9fZW5kKTtcbiYjNDM7XHRcdG1lbWNweShtYW5hX2dkX3JpbmdfcHRyKHdxLCBzZ2xfb2Zmc2V0KSwgYWRkcmVzcywgc2l6ZV90b19lbmQpO1xuIFxuLVx0XHR3cWVfcHRyID0gYmFzZV9wdHI7XG4gXHRcdGFkZHJlc3MgJiM0Mzs9IHNpemVfdG9fZW5kO1xuIFx0XHRzZ2xfc2l6ZSAtPSBzaXplX3RvX2VuZDtcbiYjNDM7XHRcdHNnbF9vZmZzZXQgJiM0Mzs9IHNpemVfdG9fZW5kO1xuJiM0MztcdFx0aWYgKHNnbF9vZmZzZXQgPT0gd3EtXHUwMDNlcXVldWVfc2l6ZSlcbiYjNDM7XHRcdFx0c2dsX29mZnNldCA9IDA7XG4gXHR9XG4gXG4tXHRtZW1jcHkod3FlX3B0ciwgYWRkcmVzcywgc2dsX3NpemUpO1xuJiM0MztcdG1lbWNweShtYW5hX2dkX3JpbmdfcHRyKHdxLCBzZ2xfb2Zmc2V0KSwgYWRkcmVzcywgc2dsX3NpemUpO1xuIH1cbiBcbiBpbnQgbWFuYV9nZF9wb3N0X3dvcmtfcmVxdWVzdChzdHJ1Y3QgZ2RtYV9xdWV1ZSAqd3EsXG5AQCAtMTU4NCw4ICYjNDM7MTcyNiwxMiBAQCBpbnQgbWFuYV9nZF9wb3N0X3dvcmtfcmVxdWVzdChzdHJ1Y3QgZ2RtYV9xdWV1ZSAqd3EsXG4gXHR1MzIgY2xpZW50X29vYl9zaXplID0gd3FlX3JlcS1cdTAwM2VpbmxpbmVfb29iX3NpemU7XG4gXHR1MzIgc2dsX2RhdGFfc2l6ZTtcbiBcdHUzMiBtYXhfd3FlX3NpemU7XG4mIzQzO1x0dTMyIHdxZV9vZmZzZXQ7XG4mIzQzO1x0dTMyIHNnbF9vZmZzZXQ7XG4gXHR1MzIgd3FlX3NpemU7XG4mIzQzO1x0dTMyIG9vYl9sZW47XG4gXHR1OCAqd3FlX3B0cjtcbiYjNDM7XHR1MzIgaGVhZDtcbiBcbiBcdGlmICh3cWVfcmVxLVx1MDAzZW51bV9zZ2UgPT0gMClcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtMTYxNywxMyAmIzQzOzE3NjMsMTcgQEAgaW50IG1hbmFfZ2RfcG9zdF93b3JrX3JlcXVlc3Qoc3RydWN0IGdkbWFfcXVldWUgKndxLFxuIFx0aWYgKHdxZV9pbmZvKVxuIFx0XHR3cWVfaW5mby1cdTAwM2V3cWVfc2l6ZV9pbl9idSA9IHdxZV9zaXplIC8gR0RNQV9XUUVfQlVfU0laRTtcbiBcbi1cdHdxZV9wdHIgPSBtYW5hX2dkX2dldF93cWVfcHRyKHdxLCB3cS1cdTAwM2VoZWFkKTtcbi1cdHdxZV9wdHIgJiM0Mzs9IG1hbmFfZ2Rfd3JpdGVfY2xpZW50X29vYih3cWVfcmVxLCB3cS1cdTAwM2V0eXBlLCBjbGllbnRfb29iX3NpemUsXG4tXHRcdFx0XHRcdCAgICBzZ2xfZGF0YV9zaXplLCB3cWVfcHRyKTtcbi1cdGlmICh3cWVfcHRyIFx1MDAzZT0gKHU4ICopd3EtXHUwMDNlcXVldWVfbWVtX3B0ciAmIzQzOyB3cS1cdTAwM2VxdWV1ZV9zaXplKVxuLVx0XHR3cWVfcHRyIC09IHdxLVx1MDAzZXF1ZXVlX3NpemU7XG4mIzQzO1x0aGVhZCA9IHdxLVx1MDAzZWhlYWQ7XG4mIzQzO1x0d3FlX29mZnNldCA9IChoZWFkICogR0RNQV9XUUVfQlVfU0laRSkgXHUwMDI2ICh3cS1cdTAwM2VxdWV1ZV9zaXplIC0gMSk7XG4mIzQzO1x0d3FlX3B0ciA9IG1hbmFfZ2RfZ2V0X3dxZV9wdHIod3EsIGhlYWQpO1xuJiM0MztcdG9vYl9sZW4gPSBtYW5hX2dkX3dyaXRlX2NsaWVudF9vb2Iod3FlX3JlcSwgd3EtXHUwMDNldHlwZSwgY2xpZW50X29vYl9zaXplLFxuJiM0MztcdFx0XHRcdFx0ICAgc2dsX2RhdGFfc2l6ZSwgd3FlX3B0cik7XG4mIzQzO1xuJiM0MztcdHNnbF9vZmZzZXQgPSB3cWVfb2Zmc2V0ICYjNDM7IG9vYl9sZW47XG4mIzQzO1x0aWYgKHNnbF9vZmZzZXQgXHUwMDNlPSB3cS1cdTAwM2VxdWV1ZV9zaXplKVxuJiM0MztcdFx0c2dsX29mZnNldCAtPSB3cS1cdTAwM2VxdWV1ZV9zaXplO1xuIFxuLVx0bWFuYV9nZF93cml0ZV9zZ2wod3EsIHdxZV9wdHIsIHdxZV9yZXEpO1xuJiM0MztcdG1hbmFfZ2Rfd3JpdGVfc2dsKHdxLCBzZ2xfb2Zmc2V0LCB3cWVfcmVxKTtcbiBcbiBcdHdxLVx1MDAzZWhlYWQgJiM0Mzs9IHdxZV9zaXplIC8gR0RNQV9XUUVfQlVfU0laRTtcbiBcbkBAIC0xNjUzLDExICYjNDM7MTgwMywxMCBAQCBpbnQgbWFuYV9nZF9wb3N0X2FuZF9yaW5nKHN0cnVjdCBnZG1hX3F1ZXVlICpxdWV1ZSxcbiBzdGF0aWMgaW50IG1hbmFfZ2RfcmVhZF9jcWUoc3RydWN0IGdkbWFfcXVldWUgKmNxLCBzdHJ1Y3QgZ2RtYV9jb21wICpjb21wKVxuIHtcbiBcdHVuc2lnbmVkIGludCBudW1fY3FlID0gY3EtXHUwMDNlcXVldWVfc2l6ZSAvIHNpemVvZihzdHJ1Y3QgZ2RtYV9jcWUpO1xuLVx0c3RydWN0IGdkbWFfY3FlICpjcV9jcWUgPSBjcS1cdTAwM2VxdWV1ZV9tZW1fcHRyO1xuIFx0dTMyIG93bmVyX2JpdHMsIG5ld19iaXRzLCBvbGRfYml0cztcbiBcdHN0cnVjdCBnZG1hX2NxZSAqY3FlO1xuIFxuLVx0Y3FlID0gXHUwMDI2Y3FfY3FlW2NxLVx1MDAzZWhlYWQgJSBudW1fY3FlXTtcbiYjNDM7XHRjcWUgPSBtYW5hX2dkX3JpbmdfcHRyKGNxLCAoY3EtXHUwMDNlaGVhZCAlIG51bV9jcWUpICogc2l6ZW9mKCpjcWUpKTtcbiBcdG93bmVyX2JpdHMgPSBjcWUtXHUwMDNlY3FlX2luZm8ub3duZXJfYml0cztcbiBcbiBcdG9sZF9iaXRzID0gKGNxLVx1MDAzZWhlYWQgLyBudW1fY3FlIC0gMSkgXHUwMDI2IEdETUFfQ1FFX09XTkVSX01BU0s7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvaHdfY2hhbm5lbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvaHdfY2hhbm5lbC5jXG5pbmRleCBlM2MyNGQ1MGRhZDA3Li4yNjNlN2M0ZTI5MzQxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvaHdfY2hhbm5lbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9od19jaGFubmVsLmNcbkBAIC00NzksNyAmIzQzOzQ3OSw3IEBAIHN0YXRpYyBpbnQgbWFuYV9od2NfYWxsb2NfZG1hX2J1ZihzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUxNiBxX2RlcHRoLFxuIFx0YnVmX3NpemUgPSBNQU5BX1BBR0VfQUxJR04ocV9kZXB0aCAqIG1heF9tc2dfc2l6ZSk7XG4gXG4gXHRnbWkgPSBcdTAwMjZkbWFfYnVmLVx1MDAzZW1lbV9pbmZvO1xuLVx0ZXJyID0gbWFuYV9nZF9hbGxvY19tZW1vcnkoZ2MsIGJ1Zl9zaXplLCBnbWkpO1xuJiM0MztcdGVyciA9IG1hbmFfZ2RfYWxsb2NfbWVtb3J5KGdjLCBidWZfc2l6ZSwgZ21pLCBmYWxzZSk7XG4gXHRpZiAoZXJyKSB7XG4gXHRcdGRldl9lcnIoaHdjLVx1MDAzZWRldiwgXCYjMzQ7RmFpbGVkIHRvIGFsbG9jYXRlIERNQSBidWZmZXIgc2l6ZTogJXUsIGVyciAlZFxcblwmIzM0OyxcbiBcdFx0XHRidWZfc2l6ZSwgZXJyKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmNcbmluZGV4IDI1MTlhOThhZDAwYjAuLmI4MDM3MTE5NjgwNDIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uY1xuQEAgLTQwLDYgJiM0Mzs0MCw5IEBAIHN0YXRpYyBzc2l6ZV90IG1hbmFfZGJnX3FfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50XG4ge1xuIFx0c3RydWN0IGdkbWFfcXVldWUgKmdkbWFfcSA9IGZpbHAtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuIFxuJiM0MztcdGlmIChnZG1hX3EtXHUwMDNlbWVtX2luZm8ubnJfcGFnZXMpXG4mIzQzO1x0XHRyZXR1cm4gbWFuYV9nZF9yZWFkX3JpbmcoZ2RtYV9xLCBidWYsIGNvdW50LCBwb3MpO1xuJiM0MztcbiBcdHJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcihidWYsIGNvdW50LCBwb3MsIGdkbWFfcS1cdTAwM2VxdWV1ZV9tZW1fcHRyLFxuIFx0XHRcdFx0ICAgICAgIGdkbWFfcS1cdTAwM2VxdWV1ZV9zaXplKTtcbiB9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbWFuYS9nZG1hLmggYi9pbmNsdWRlL25ldC9tYW5hL2dkbWEuaFxuaW5kZXggODUyOWNlZjBkN2M0NS4uYjBiMzIyYTgwYjYyOSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L21hbmEvZ2RtYS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9tYW5hL2dkbWEuaFxuQEAgLTI0MCw2ICYjNDM7MjQwLDE0IEBAIHN0cnVjdCBnZG1hX21lbV9pbmZvIHtcbiBcdHZvaWQgKnZpcnRfYWRkcjtcbiBcdHU2NCBsZW5ndGg7XG4gXG4mIzQzO1x0LyogU2NhdHRlcmVkIGZhbGxiYWNrOiB3aGVuIEBucl9wYWdlcyBcdTAwM2UgMCB0aGUgcmluZyBpcyB0aGF0IG1hbnlcbiYjNDM7XHQgKiBQQUdFX1NJWkUgY29oZXJlbnQgYWxsb2NhdGlvbnMgaW4gQHBhZ2VzX3ZhL0BwYWdlc19kbWEsIG5vdFxuJiM0MztcdCAqIEB2aXJ0X2FkZHIvQGRtYV9oYW5kbGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0dm9pZCAqKnBhZ2VzX3ZhO1xuJiM0MztcdGRtYV9hZGRyX3QgKnBhZ2VzX2RtYTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgbnJfcGFnZXM7XG4mIzQzO1xuIFx0LyogQWxsb2NhdGVkIGJ5IHRoZSBQRiBkcml2ZXIgKi9cbiBcdHU2NCBkbWFfcmVnaW9uX2hhbmRsZTtcbiB9O1xuQEAgLTUxMiw2ICYjNDM7NTIwLDkgQEAgaW50IG1hbmFfZ2RfcG9sbF9jcShzdHJ1Y3QgZ2RtYV9xdWV1ZSAqY3EsIHN0cnVjdCBnZG1hX2NvbXAgKmNvbXAsIGludCBudW1fY3FlKTtcbiBcbiB2b2lkIG1hbmFfZ2RfcmluZ19jcShzdHJ1Y3QgZ2RtYV9xdWV1ZSAqY3EsIHU4IGFybV9iaXQpO1xuIFxuJiM0Mztzc2l6ZV90IG1hbmFfZ2RfcmVhZF9yaW5nKHN0cnVjdCBnZG1hX3F1ZXVlICpxLCBjaGFyIF9fdXNlciAqYnVmLFxuJiM0MztcdFx0XHQgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpO1xuJiM0MztcbiBpbnQgbWFuYV9zY2hlZHVsZV9zZXJ2X3dvcmsoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MsIGVudW0gZ2RtYV9lcWVfdHlwZSB0eXBlKTtcbiBcbiB2b2lkIG1hbmFfZ2RfcmluZ19kaW0oc3RydWN0IGdkbWFfcXVldWUgKmNxLCB1MzIgbW9kX3VzZWMsIGJvb2wgbW9kX3VzZWNfdmxkLFxuQEAgLTY2OCw2ICYjNDM7Njc5LDkgQEAgZW51bSB7XG4gLyogRHJpdmVyIHN1cHBvcnRzIGR5bmFtaWMgaW50ZXJydXB0IG1vZGVyYXRpb24gLSBESU0gKi9cbiAjZGVmaW5lIEdETUFfRFJWX0NBUF9GTEFHXzFfRFlOX0lOVEVSUlVQVF9NT0RFUkFUSU9OIEJJVCgyOClcbiBcbiYjNDM7LyogRHJpdmVyIHN1cHBvcnRzIG5vbi1jb250aWd1b3VzIHF1ZXVlIGJ1ZmZlcnMgKi9cbiYjNDM7I2RlZmluZSBHRE1BX0RSVl9DQVBfRkxBR18xX05PTl9DT05USUdVT1VTX0JVRkZFUlMgQklUKDMwKVxuJiM0MztcbiAjZGVmaW5lIEdETUFfRFJWX0NBUF9GTEFHUzEgXFxcbiBcdChHRE1BX0RSVl9DQVBfRkxBR18xX0VRX1NIQVJJTkdfTVVMVElfVlBPUlQgfCBcXFxuIFx0IEdETUFfRFJWX0NBUF9GTEFHXzFfTkFQSV9XS0RPTkVfRklYIHwgXFxcbkBAIC02ODQsNyAmIzQzOzY5OCw4IEBAIGVudW0ge1xuIFx0IEdETUFfRFJWX0NBUF9GTEFHXzFfSEFORExFX1NUQUxMX1NRX1JFQ09WRVJZIHwgXFxcbiBcdCBHRE1BX0RSVl9DQVBfRkxBR18xX0hXQ19USU1FT1VUX1JFQ09WRVJZIHwgXFxcbiBcdCBHRE1BX0RSVl9DQVBfRkxBR18xX0VRX01TSV9VTlNIQVJFX01VTFRJX1ZQT1JUIHwgXFxcbi1cdCBHRE1BX0RSVl9DQVBfRkxBR18xX0RZTl9JTlRFUlJVUFRfTU9ERVJBVElPTilcbiYjNDM7XHQgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9EWU5fSU5URVJSVVBUX01PREVSQVRJT04gfCBcXFxuJiM0MztcdCBHRE1BX0RSVl9DQVBfRkxBR18xX05PTl9DT05USUdVT1VTX0JVRkZFUlMpXG4gXG4gI2RlZmluZSBHRE1BX0RSVl9DQVBfRkxBR1MyIDBcbiBcbkBAIC0xMDQ1LDcgJiM0MzsxMDYwLDcgQEAgdm9pZCBtYW5hX2dkX3dxX3JpbmdfZG9vcmJlbGwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MsXG4gXHRcdFx0ICAgICAgc3RydWN0IGdkbWFfcXVldWUgKnF1ZXVlKTtcbiBcbiBpbnQgbWFuYV9nZF9hbGxvY19tZW1vcnkoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MsIHVuc2lnbmVkIGludCBsZW5ndGgsXG4tXHRcdFx0IHN0cnVjdCBnZG1hX21lbV9pbmZvICpnbWkpO1xuJiM0MztcdFx0XHQgc3RydWN0IGdkbWFfbWVtX2luZm8gKmdtaSwgYm9vbCBhbGxvd19zY2F0dGVyKTtcbiBcbiB2b2lkIG1hbmFfZ2RfZnJlZV9tZW1vcnkoc3RydWN0IGdkbWFfbWVtX2luZm8gKmdtaSk7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjI6MDM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyIChNQU5BKSBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgZGV2aWNlIGRyaXZlci4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgZW52aXJvbm1lbnRzIHVzZWQgYnkgc3l6a2FsbGVyLCBtYWtpbmcgdGhlIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIHN0YW5kYXJkIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYmQ4YmVjZDA1YjIyMGVlNGMwY2MwZjMyZDQxODJkNThjMjU2ZmVlYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDcgMjI6MDM6NDQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jCmluZGV4IGEzOGQ0YmI3NDYyMWYuLmVkOWFmMzE0ZTRlZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jCkBAIC0xMSw2ICYjNDM7MTEsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L21zaS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lycWRvbWFpbi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2V4cG9ydC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC91YWNjZXNzLmgmZ3Q7CiAKICNpbmNsdWRlICZsdDtuZXQvbWFuYS9tYW5hLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L21hbmEvaHdfY2hhbm5lbC5oJmd0OwpAQCAtMzc0LDI4ICYjNDM7Mzc1LDk2IEBAIGludCBtYW5hX2dkX3NlbmRfcmVxdWVzdChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYywgdTMyIHJlcV9sZW4sIGNvbnN0IHZvaWQgKnJlcSwKIEVYUE9SVF9TWU1CT0xfTlMobWFuYV9nZF9zZW5kX3JlcXVlc3QsICYjMzQ7TkVUX01BTkEmIzM0Oyk7CiAKIGludCBtYW5hX2dkX2FsbG9jX21lbW9yeShzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYywgdW5zaWduZWQgaW50IGxlbmd0aCwKLQkJCSBzdHJ1Y3QgZ2RtYV9tZW1faW5mbyAqZ21pKQomIzQzOwkJCSBzdHJ1Y3QgZ2RtYV9tZW1faW5mbyAqZ21pLCBib29sIGFsbG93X3NjYXR0ZXIpCiB7CiYjNDM7CXVuc2lnbmVkIGludCBucGFnZXMsIGk7CiAJZG1hX2FkZHJfdCBkbWFfaGFuZGxlOwomIzQzOwlib29sIGNhbl9mYWxsYmFjazsKIAl2b2lkICpidWY7CiAKIAlpZiAobGVuZ3RoICZsdDsgTUFOQV9QQUdFX1NJWkUgfHwgIWlzX3Bvd2VyX29mXzIobGVuZ3RoKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlnbWktJmd0O2RldiA9IGdjLSZndDtkZXY7Ci0JYnVmID0gZG1hX2FsbG9jX2NvaGVyZW50KGdtaS0mZ3Q7ZGV2LCBsZW5ndGgsICZhbXA7ZG1hX2hhbmRsZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFidWYpCiYjNDM7CiYjNDM7CS8qIEFuIGFsbG9jYXRpb24gdGhhdCBmaXRzIGluIG9uZSBwYWdlIGRvZXMgbm90IGJlbmVmaXQgZnJvbQomIzQzOwkgKiBmYWxsYmFjay4KJiM0MzsJICovCiYjNDM7CWNhbl9mYWxsYmFjayA9IGFsbG93X3NjYXR0ZXIgJmFtcDsmYW1wOyBsZW5ndGggJmd0OyBQQUdFX1NJWkU7CiYjNDM7CiYjNDM7CS8qIFdhcm4gb25seSB3aGVuIHRoZXJlIGlzIG5vIGZhbGxiYWNrIHRvIHJlc2N1ZSB0aGUgZmFpbHVyZS4gKi8KJiM0MzsJYnVmID0gZG1hX2FsbG9jX2NvaGVyZW50KGdtaS0mZ3Q7ZGV2LCBsZW5ndGgsICZhbXA7ZG1hX2hhbmRsZSwKJiM0MzsJCQkJIEdGUF9LRVJORUwgfAomIzQzOwkJCQkgKGNhbl9mYWxsYmFjayA/IF9fR0ZQX05PV0FSTiA6IDApKTsKJiM0MzsJaWYgKGJ1ZikgewomIzQzOwkJZ21pLSZndDtkbWFfaGFuZGxlID0gZG1hX2hhbmRsZTsKJiM0MzsJCWdtaS0mZ3Q7dmlydF9hZGRyID0gYnVmOwomIzQzOwkJZ21pLSZndDtsZW5ndGggPSBsZW5ndGg7CiYjNDM7CQlnbWktJmd0O25yX3BhZ2VzID0gMDsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghY2FuX2ZhbGxiYWNrKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWdtaS0mZ3Q7ZG1hX2hhbmRsZSA9IGRtYV9oYW5kbGU7Ci0JZ21pLSZndDt2aXJ0X2FkZHIgPSBidWY7CiYjNDM7CS8qIGxlbmd0aCBpcyBhIHBvd2VyIG9mIDIgYWJvdmUgUEFHRV9TSVpFLCBzbyB0aGlzIGRpdmlkZXMgZXhhY3RseS4gKi8KJiM0MzsJbnBhZ2VzID0gbGVuZ3RoIC8gUEFHRV9TSVpFOwomIzQzOwomIzQzOwlnbWktJmd0O3BhZ2VzX3ZhID0ga3ZjYWxsb2MobnBhZ2VzLCBzaXplb2YoKmdtaS0mZ3Q7cGFnZXNfdmEpLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFnbWktJmd0O3BhZ2VzX3ZhKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CWdtaS0mZ3Q7cGFnZXNfZG1hID0ga3ZjYWxsb2MobnBhZ2VzLCBzaXplb2YoKmdtaS0mZ3Q7cGFnZXNfZG1hKSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghZ21pLSZndDtwYWdlc19kbWEpCiYjNDM7CQlnb3RvIGZyZWVfdmE7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBucGFnZXM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlnbWktJmd0O3BhZ2VzX3ZhW2ldID0gZG1hX2FsbG9jX2NvaGVyZW50KGdtaS0mZ3Q7ZGV2LCBQQUdFX1NJWkUsCiYjNDM7CQkJCQkJICAgICAgJmFtcDtnbWktJmd0O3BhZ2VzX2RtYVtpXSwKJiM0MzsJCQkJCQkgICAgICBHRlBfS0VSTkVMKTsKJiM0MzsJCWlmICghZ21pLSZndDtwYWdlc192YVtpXSkKJiM0MzsJCQlnb3RvIGZyZWVfcGFnZXM7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZGV2X2luZm9fcmF0ZWxpbWl0ZWQoZ21pLSZndDtkZXYsCiYjNDM7CQkJICAgICAmIzM0O2NvbnRpZ3VvdXMgJXUtYnl0ZSBETUEgYWxsb2MgZmFpbGVkOyB1c2luZyAldSBzY2F0dGVyZWQgcGFnZXNcbiYjMzQ7LAomIzQzOwkJCSAgICAgbGVuZ3RoLCBucGFnZXMpOwomIzQzOwomIzQzOwlnbWktJmd0O3ZpcnRfYWRkciA9IE5VTEw7CiYjNDM7CWdtaS0mZ3Q7ZG1hX2hhbmRsZSA9IDA7CiAJZ21pLSZndDtsZW5ndGggPSBsZW5ndGg7CiYjNDM7CWdtaS0mZ3Q7bnJfcGFnZXMgPSBucGFnZXM7CiAKIAlyZXR1cm4gMDsKJiM0MzsKJiM0MztmcmVlX3BhZ2VzOgomIzQzOwl3aGlsZSAoaS0tKQomIzQzOwkJZG1hX2ZyZWVfY29oZXJlbnQoZ21pLSZndDtkZXYsIFBBR0VfU0laRSwgZ21pLSZndDtwYWdlc192YVtpXSwKJiM0MzsJCQkJICBnbWktJmd0O3BhZ2VzX2RtYVtpXSk7CiYjNDM7CWt2ZnJlZShnbWktJmd0O3BhZ2VzX2RtYSk7CiYjNDM7CWdtaS0mZ3Q7cGFnZXNfZG1hID0gTlVMTDsKJiM0MztmcmVlX3ZhOgomIzQzOwlrdmZyZWUoZ21pLSZndDtwYWdlc192YSk7CiYjNDM7CWdtaS0mZ3Q7cGFnZXNfdmEgPSBOVUxMOwomIzQzOwlyZXR1cm4gLUVOT01FTTsKIH0KIAogdm9pZCBtYW5hX2dkX2ZyZWVfbWVtb3J5KHN0cnVjdCBnZG1hX21lbV9pbmZvICpnbWkpCiB7CiYjNDM7CXVuc2lnbmVkIGludCBpOwomIzQzOwomIzQzOwlpZiAoZ21pLSZndDtucl9wYWdlcyAmZ3Q7IDApIHsKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyBnbWktJmd0O25yX3BhZ2VzOyBpJiM0MzsmIzQzOykKJiM0MzsJCQlkbWFfZnJlZV9jb2hlcmVudChnbWktJmd0O2RldiwgUEFHRV9TSVpFLCBnbWktJmd0O3BhZ2VzX3ZhW2ldLAomIzQzOwkJCQkJICBnbWktJmd0O3BhZ2VzX2RtYVtpXSk7CiYjNDM7CQlrdmZyZWUoZ21pLSZndDtwYWdlc192YSk7CiYjNDM7CQlrdmZyZWUoZ21pLSZndDtwYWdlc19kbWEpOwomIzQzOwkJZ21pLSZndDtwYWdlc192YSA9IE5VTEw7CiYjNDM7CQlnbWktJmd0O3BhZ2VzX2RtYSA9IE5VTEw7CiYjNDM7CQlnbWktJmd0O25yX3BhZ2VzID0gMDsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwogCWRtYV9mcmVlX2NvaGVyZW50KGdtaS0mZ3Q7ZGV2LCBnbWktJmd0O2xlbmd0aCwgZ21pLSZndDt2aXJ0X2FkZHIsCiAJCQkgIGdtaS0mZ3Q7ZG1hX2hhbmRsZSk7CiB9CkBAIC03NTMsMTEgJiM0Mzs4MjIsNzMgQEAgaW50IG1hbmFfc2NoZWR1bGVfc2Vydl93b3JrKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjLCBlbnVtIGdkbWFfZXFlX3R5cGUgdHlwZSkKIAlyZXR1cm4gMDsKIH0KIAomIzQzOy8qIFJldHVybiB0aGUgQ1BVIGFkZHJlc3Mgb2YgYnl0ZSBAb2Zmc2V0IHdpdGhpbiBhIHF1ZXVlJiMzOTtzIHJpbmcgYnVmZmVyLiAqLwomIzQzO3N0YXRpYyB2b2lkICptYW5hX2dkX3JpbmdfcHRyKGNvbnN0IHN0cnVjdCBnZG1hX3F1ZXVlICpxLCB1MzIgb2Zmc2V0KQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IGdkbWFfbWVtX2luZm8gKmdtaSA9ICZhbXA7cS0mZ3Q7bWVtX2luZm87CiYjNDM7CiYjNDM7CWlmIChnbWktJmd0O25yX3BhZ2VzICZndDsgMCkKJiM0MzsJCXJldHVybiAodTggKilnbWktJmd0O3BhZ2VzX3ZhW29mZnNldCAvIFBBR0VfU0laRV0gJiM0MzsKJiM0MzsJCSAgICAgICAob2Zmc2V0ICZhbXA7IChQQUdFX1NJWkUgLSAxKSk7CiYjNDM7CiYjNDM7CXJldHVybiBxLSZndDtxdWV1ZV9tZW1fcHRyICYjNDM7IG9mZnNldDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogTnVtYmVyIG9mIGJ5dGVzIGZyb20gQG9mZnNldCB0byB0aGUgZW5kIG9mIHRoZSBDUFUtY29udGlndW91cyByZWdpb246IHRoZQomIzQzOyAqIHJlc3Qgb2YgdGhlIHJpbmcsIG9yIHRoZSByZXN0IG9mIHRoZSBjdXJyZW50IHBhZ2Ugd2hlbiBzY2F0dGVyZWQuCiYjNDM7ICovCiYjNDM7c3RhdGljIHUzMiBtYW5hX2dkX3JpbmdfY29udGlnX2F2YWlsKGNvbnN0IHN0cnVjdCBnZG1hX3F1ZXVlICpxLCB1MzIgb2Zmc2V0KQomIzQzO3sKJiM0MzsJaWYgKHEtJmd0O21lbV9pbmZvLm5yX3BhZ2VzICZndDsgMCkKJiM0MzsJCXJldHVybiBQQUdFX1NJWkUgLSAob2Zmc2V0ICZhbXA7IChQQUdFX1NJWkUgLSAxKSk7CiYjNDM7CiYjNDM7CXJldHVybiBxLSZndDtxdWV1ZV9zaXplIC0gb2Zmc2V0OwomIzQzO30KJiM0MzsKJiM0MzsvKiBDb3B5IHVwIHRvIEBjb3VudCBieXRlcyBmcm9tIHJpbmcgb2Zmc2V0ICpAcG9zIG9mIEBxIGludG8gdXNlciBidWZmZXIgQGJ1ZiwKJiM0MzsgKiBzbyBhIHNjYXR0ZXJlZCByaW5nIHJlYWRzIGJhY2sgYXMgaWYgaXQgd2VyZSBjb250aWd1b3VzLiBSZXR1cm5zIGJ5dGVzCiYjNDM7ICogY29waWVkLCAwIGF0IGVuZCBvZiByaW5nLCBvciBhIG5lZ2F0aXZlIGVycm5vLgomIzQzOyAqLwomIzQzO3NzaXplX3QgbWFuYV9nZF9yZWFkX3Jpbmcoc3RydWN0IGdkbWFfcXVldWUgKnEsIGNoYXIgX191c2VyICpidWYsCiYjNDM7CQkJICBzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKQomIzQzO3sKJiM0MzsJdTMyIHNpemUgPSBxLSZndDtxdWV1ZV9zaXplOwomIzQzOwlsb2ZmX3Qgb2ZmID0gKnBvczsKJiM0MzsJc2l6ZV90IGNvcGllZCA9IDA7CiYjNDM7CiYjNDM7CWlmIChvZmYgJmx0OyAwKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CWlmIChvZmYgJmd0Oz0gc2l6ZSB8fCAhY291bnQpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJY291bnQgPSBtaW5fdChzaXplX3QsIGNvdW50LCBzaXplIC0gb2ZmKTsKJiM0MzsKJiM0MzsJd2hpbGUgKGNvdW50KSB7CiYjNDM7CQl1MzIgb2Zmc2V0ID0gb2ZmOwomIzQzOwkJdTMyIGF2YWlsID0gbWFuYV9nZF9yaW5nX2NvbnRpZ19hdmFpbChxLCBvZmZzZXQpOwomIzQzOwkJc2l6ZV90IGNodW5rID0gbWluX3Qoc2l6ZV90LCBjb3VudCwgYXZhaWwpOwomIzQzOwkJc2l6ZV90IGxlZnQgPSBjb3B5X3RvX3VzZXIoYnVmLCBtYW5hX2dkX3JpbmdfcHRyKHEsIG9mZnNldCksCiYjNDM7CQkJCQkgICBjaHVuayk7CiYjNDM7CiYjNDM7CQljaHVuayAtPSBsZWZ0OwomIzQzOwkJYnVmICYjNDM7PSBjaHVuazsKJiM0MzsJCW9mZiAmIzQzOz0gY2h1bms7CiYjNDM7CQljb3BpZWQgJiM0Mzs9IGNodW5rOwomIzQzOwkJY291bnQgLT0gY2h1bms7CiYjNDM7CQlpZiAobGVmdCkKJiM0MzsJCQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWNvcGllZCkKJiM0MzsJCXJldHVybiAtRUZBVUxUOwomIzQzOwomIzQzOwkqcG9zID0gb2ZmOwomIzQzOwlyZXR1cm4gY29waWVkOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIG1hbmFfZ2RfcHJvY2Vzc19lcWUoc3RydWN0IGdkbWFfcXVldWUgKmVxKQogewogCXUzMiBoZWFkID0gZXEtJmd0O2hlYWQgJSAoZXEtJmd0O3F1ZXVlX3NpemUgLyBHRE1BX0VRRV9TSVpFKTsKIAlzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyA9IGVxLSZndDtnZG1hX2Rldi0mZ3Q7Z2RtYV9jb250ZXh0OwotCXN0cnVjdCBnZG1hX2VxZSAqZXFfZXFlX3B0ciA9IGVxLSZndDtxdWV1ZV9tZW1fcHRyOwogCXVuaW9uIGdkbWFfZXFlX2luZm8gZXFlX2luZm87CiAJZW51bSBnZG1hX2VxZV90eXBlIHR5cGU7CiAJc3RydWN0IGdkbWFfZXZlbnQgZXZlbnQ7CkBAIC03NjUsNyAmIzQzOzg5Niw3IEBAIHN0YXRpYyB2b2lkIG1hbmFfZ2RfcHJvY2Vzc19lcWUoc3RydWN0IGdkbWFfcXVldWUgKmVxKQogCXN0cnVjdCBnZG1hX2VxZSAqZXFlOwogCXUzMiBjcV9pZDsKIAotCWVxZSA9ICZhbXA7ZXFfZXFlX3B0cltoZWFkXTsKJiM0MzsJZXFlID0gbWFuYV9nZF9yaW5nX3B0cihlcSwgaGVhZCAqIHNpemVvZigqZXFlKSk7CiAJZXFlX2luZm8uYXNfdWludDMyID0gZXFlLSZndDtlcWVfaW5mbzsKIAl0eXBlID0gZXFlX2luZm8udHlwZTsKIApAQCAtODI5LDcgJiM0Mzs5NjAsNiBAQCBzdGF0aWMgdm9pZCBtYW5hX2dkX3Byb2Nlc3NfZXFfZXZlbnRzKHZvaWQgKmFyZykKIHsKIAl1MzIgb3duZXJfYml0cywgbmV3X2JpdHMsIG9sZF9iaXRzOwogCXVuaW9uIGdkbWFfZXFlX2luZm8gZXFlX2luZm87Ci0Jc3RydWN0IGdkbWFfZXFlICplcV9lcWVfcHRyOwogCXN0cnVjdCBnZG1hX3F1ZXVlICplcSA9IGFyZzsKIAlzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYzsKIAlzdHJ1Y3QgZ2RtYV9lcWUgKmVxZTsKQEAgLTgzOSwxMSAmIzQzOzk2OSwxMCBAQCBzdGF0aWMgdm9pZCBtYW5hX2dkX3Byb2Nlc3NfZXFfZXZlbnRzKHZvaWQgKmFyZykKIAlnYyA9IGVxLSZndDtnZG1hX2Rldi0mZ3Q7Z2RtYV9jb250ZXh0OwogCiAJbnVtX2VxZSA9IGVxLSZndDtxdWV1ZV9zaXplIC8gR0RNQV9FUUVfU0laRTsKLQllcV9lcWVfcHRyID0gZXEtJmd0O3F1ZXVlX21lbV9wdHI7CiAKIAkvKiBQcm9jZXNzIHVwIHRvIDUgRVFFcyBhdCBhIHRpbWUsIGFuZCB1cGRhdGUgdGhlIEhXIGhlYWQuICovCiAJZm9yIChpID0gMDsgaSAmbHQ7IDU7IGkmIzQzOyYjNDM7KSB7Ci0JCWVxZSA9ICZhbXA7ZXFfZXFlX3B0cltlcS0mZ3Q7aGVhZCAlIG51bV9lcWVdOwomIzQzOwkJZXFlID0gbWFuYV9nZF9yaW5nX3B0cihlcSwgKGVxLSZndDtoZWFkICUgbnVtX2VxZSkgKiBzaXplb2YoKmVxZSkpOwogCQllcWVfaW5mby5hc191aW50MzIgPSBlcWUtJmd0O2VxZV9pbmZvOwogCQlvd25lcl9iaXRzID0gZXFlX2luZm8ub3duZXJfYml0czsKIApAQCAtMTEwNyw3ICYjNDM7MTIzNiw3IEBAIGludCBtYW5hX2dkX2NyZWF0ZV9od2NfcXVldWUoc3RydWN0IGdkbWFfZGV2ICpnZCwKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlnbWkgPSAmYW1wO3F1ZXVlLSZndDttZW1faW5mbzsKLQllcnIgPSBtYW5hX2dkX2FsbG9jX21lbW9yeShnYywgc3BlYy0mZ3Q7cXVldWVfc2l6ZSwgZ21pKTsKJiM0MzsJZXJyID0gbWFuYV9nZF9hbGxvY19tZW1vcnkoZ2MsIHNwZWMtJmd0O3F1ZXVlX3NpemUsIGdtaSwgZmFsc2UpOwogCWlmIChlcnIpIHsKIAkJZGV2X2VycihnYy0mZ3Q7ZGV2LCAmIzM0O0dETUEgcXVldWUgdHlwZTogJWQsIHNpemU6ICV1LCBnZG1hIG1lbW9yeSBhbGxvY2F0aW9uIGVycjogJWRcbiYjMzQ7LAogCQkJc3BlYy0mZ3Q7dHlwZSwgc3BlYy0mZ3Q7cXVldWVfc2l6ZSwgZXJyKTsKQEAgLTExODIsNyAmIzQzOzEzMTEsNyBAQCBzdGF0aWMgaW50IG1hbmFfZ2RfY3JlYXRlX2RtYV9yZWdpb24oc3RydWN0IGdkbWFfZGV2ICpnZCwKIAlpZiAobGVuZ3RoICZsdDsgTUFOQV9QQUdFX1NJWkUgfHwgIWlzX3Bvd2VyX29mXzIobGVuZ3RoKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoIU1BTkFfUEFHRV9BTElHTkVEKGdtaS0mZ3Q7dmlydF9hZGRyKSkKJiM0MzsJaWYgKGdtaS0mZ3Q7bnJfcGFnZXMgPT0gMCAmYW1wOyZhbXA7ICFNQU5BX1BBR0VfQUxJR05FRChnbWktJmd0O3ZpcnRfYWRkcikpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaHdjID0gZ2MtJmd0O2h3Yy5kcml2ZXJfZGF0YTsKQEAgLTEyMDIsOCAmIzQzOzEzMzEsMjQgQEAgc3RhdGljIGludCBtYW5hX2dkX2NyZWF0ZV9kbWFfcmVnaW9uKHN0cnVjdCBnZG1hX2RldiAqZ2QsCiAJcmVxLSZndDtwYWdlX2NvdW50ID0gbnVtX3BhZ2U7CiAJcmVxLSZndDtwYWdlX2FkZHJfbGlzdF9sZW4gPSBudW1fcGFnZTsKIAotCWZvciAoaSA9IDA7IGkgJmx0OyBudW1fcGFnZTsgaSYjNDM7JiM0MzspCi0JCXJlcS0mZ3Q7cGFnZV9hZGRyX2xpc3RbaV0gPSBnbWktJmd0O2RtYV9oYW5kbGUgJiM0MzsgIGkgKiBNQU5BX1BBR0VfU0laRTsKJiM0MzsJaWYgKGdtaS0mZ3Q7bnJfcGFnZXMgJmd0OyAwKSB7CiYjNDM7CQl1bnNpZ25lZCBpbnQgc3VicGFnZXMgPSBQQUdFX1NJWkUgLyBNQU5BX1BBR0VfU0laRTsKJiM0MzsJCXVuc2lnbmVkIGludCBpZHggPSAwOwomIzQzOwkJdW5zaWduZWQgaW50IHBnLCBzdWI7CiYjNDM7CiYjNDM7CQkvKiBFYWNoIFBBR0VfU0laRSBjaHVuayBpcyBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgYW5kIGNvbnRhaW5zCiYjNDM7CQkgKiBQQUdFX1NJWkUgLyBNQU5BX1BBR0VfU0laRSBjb25zZWN1dGl2ZSBkZXZpY2UgcGFnZXMuCiYjNDM7CQkgKi8KJiM0MzsJCWZvciAocGcgPSAwOyBwZyAmbHQ7IGdtaS0mZ3Q7bnJfcGFnZXM7IHBnJiM0MzsmIzQzOykKJiM0MzsJCQlmb3IgKHN1YiA9IDA7IHN1YiAmbHQ7IHN1YnBhZ2VzOyBzdWImIzQzOyYjNDM7KQomIzQzOwkJCQlyZXEtJmd0O3BhZ2VfYWRkcl9saXN0W2lkeCYjNDM7JiM0MztdID0KJiM0MzsJCQkJCWdtaS0mZ3Q7cGFnZXNfZG1hW3BnXSAmIzQzOwomIzQzOwkJCQkJc3ViICogTUFOQV9QQUdFX1NJWkU7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlmb3IgKGkgPSAwOyBpICZsdDsgbnVtX3BhZ2U7IGkmIzQzOyYjNDM7KQomIzQzOwkJCXJlcS0mZ3Q7cGFnZV9hZGRyX2xpc3RbaV0gPQomIzQzOwkJCQlnbWktJmd0O2RtYV9oYW5kbGUgJiM0MzsgaSAqIE1BTkFfUEFHRV9TSVpFOwomIzQzOwl9CiAKIAllcnIgPSBtYW5hX2dkX3NlbmRfcmVxdWVzdChnYywgcmVxX21zZ19zaXplLCByZXEsIHNpemVvZihyZXNwKSwgJmFtcDtyZXNwKTsKIAlpZiAoZXJyKQpAQCAtMTI0Niw3ICYjNDM7MTM5MSw3IEBAIGludCBtYW5hX2dkX2NyZWF0ZV9tYW5hX2VxKHN0cnVjdCBnZG1hX2RldiAqZ2QsCiAJCXJldHVybiAtRU5PTUVNOwogCiAJZ21pID0gJmFtcDtxdWV1ZS0mZ3Q7bWVtX2luZm87Ci0JZXJyID0gbWFuYV9nZF9hbGxvY19tZW1vcnkoZ2MsIHNwZWMtJmd0O3F1ZXVlX3NpemUsIGdtaSk7CiYjNDM7CWVyciA9IG1hbmFfZ2RfYWxsb2NfbWVtb3J5KGdjLCBzcGVjLSZndDtxdWV1ZV9zaXplLCBnbWksIHRydWUpOwogCWlmIChlcnIpIHsKIAkJZGV2X2VycihnYy0mZ3Q7ZGV2LCAmIzM0O0dETUEgcXVldWUgdHlwZTogJWQsIHNpemU6ICV1LCBnZG1hIG1lbW9yeSBhbGxvY2F0aW9uIGVycjogJWRcbiYjMzQ7LAogCQkJc3BlYy0mZ3Q7dHlwZSwgc3BlYy0mZ3Q7cXVldWVfc2l6ZSwgZXJyKTsKQEAgLTEzMDEsNyAmIzQzOzE0NDYsNyBAQCBpbnQgbWFuYV9nZF9jcmVhdGVfbWFuYV93cV9jcShzdHJ1Y3QgZ2RtYV9kZXYgKmdkLAogCXF1ZXVlLSZndDtpZCA9IElOVkFMSURfUVVFVUVfSUQ7CiAKIAlnbWkgPSAmYW1wO3F1ZXVlLSZndDttZW1faW5mbzsKLQllcnIgPSBtYW5hX2dkX2FsbG9jX21lbW9yeShnYywgc3BlYy0mZ3Q7cXVldWVfc2l6ZSwgZ21pKTsKJiM0MzsJZXJyID0gbWFuYV9nZF9hbGxvY19tZW1vcnkoZ2MsIHNwZWMtJmd0O3F1ZXVlX3NpemUsIGdtaSwgdHJ1ZSk7CiAJaWYgKGVycikgewogCQlkZXZfZXJyKGdjLSZndDtkZXYsICYjMzQ7R0RNQSBxdWV1ZSB0eXBlOiAlZCwgc2l6ZTogJXUsIG1lbW9yeSBhbGxvY2F0aW9uIGVycjogJWRcbiYjMzQ7LAogCQkJc3BlYy0mZ3Q7dHlwZSwgc3BlYy0mZ3Q7cXVldWVfc2l6ZSwgZXJyKTsKQEAgLTE1MDgsNyAmIzQzOzE2NTMsNyBAQCB1OCAqbWFuYV9nZF9nZXRfd3FlX3B0cihjb25zdCBzdHJ1Y3QgZ2RtYV9xdWV1ZSAqd3EsIHUzMiB3cWVfb2Zmc2V0KQogCiAJV0FSTl9PTl9PTkNFKChvZmZzZXQgJiM0MzsgR0RNQV9XUUVfQlVfU0laRSkgJmd0OyB3cS0mZ3Q7cXVldWVfc2l6ZSk7CiAKLQlyZXR1cm4gd3EtJmd0O3F1ZXVlX21lbV9wdHIgJiM0Mzsgb2Zmc2V0OwomIzQzOwlyZXR1cm4gbWFuYV9nZF9yaW5nX3B0cih3cSwgb2Zmc2V0KTsKIH0KIAogc3RhdGljIHUzMiBtYW5hX2dkX3dyaXRlX2NsaWVudF9vb2IoY29uc3Qgc3RydWN0IGdkbWFfd3FlX3JlcXVlc3QgKndxZV9yZXEsCkBAIC0xNTU0LDI3ICYjNDM7MTY5OSwyNCBAQCBzdGF0aWMgdTMyIG1hbmFfZ2Rfd3JpdGVfY2xpZW50X29vYihjb25zdCBzdHJ1Y3QgZ2RtYV93cWVfcmVxdWVzdCAqd3FlX3JlcSwKIAlyZXR1cm4gc2l6ZW9mKGhlYWRlcikgJiM0MzsgY2xpZW50X29vYl9zaXplOwogfQogCi1zdGF0aWMgdm9pZCBtYW5hX2dkX3dyaXRlX3NnbChzdHJ1Y3QgZ2RtYV9xdWV1ZSAqd3EsIHU4ICp3cWVfcHRyLAomIzQzO3N0YXRpYyB2b2lkIG1hbmFfZ2Rfd3JpdGVfc2dsKHN0cnVjdCBnZG1hX3F1ZXVlICp3cSwgdTMyIHNnbF9vZmZzZXQsCiAJCQkgICAgICBjb25zdCBzdHJ1Y3QgZ2RtYV93cWVfcmVxdWVzdCAqd3FlX3JlcSkKIHsKJiM0MzsJdTMyIHNpemVfdG9fZW5kID0gbWFuYV9nZF9yaW5nX2NvbnRpZ19hdmFpbCh3cSwgc2dsX29mZnNldCk7CiAJdTMyIHNnbF9zaXplID0gc2l6ZW9mKHN0cnVjdCBnZG1hX3NnZSkgKiB3cWVfcmVxLSZndDtudW1fc2dlOwogCWNvbnN0IHU4ICphZGRyZXNzID0gKHU4ICopd3FlX3JlcS0mZ3Q7c2dsOwotCXU4ICpiYXNlX3B0ciwgKmVuZF9wdHI7Ci0JdTMyIHNpemVfdG9fZW5kOwotCi0JYmFzZV9wdHIgPSB3cS0mZ3Q7cXVldWVfbWVtX3B0cjsKLQllbmRfcHRyID0gYmFzZV9wdHIgJiM0Mzsgd3EtJmd0O3F1ZXVlX3NpemU7Ci0Jc2l6ZV90b19lbmQgPSAodTMyKShlbmRfcHRyIC0gd3FlX3B0cik7CiAKIAlpZiAoc2l6ZV90b19lbmQgJmx0OyBzZ2xfc2l6ZSkgewotCQltZW1jcHkod3FlX3B0ciwgYWRkcmVzcywgc2l6ZV90b19lbmQpOwomIzQzOwkJbWVtY3B5KG1hbmFfZ2RfcmluZ19wdHIod3EsIHNnbF9vZmZzZXQpLCBhZGRyZXNzLCBzaXplX3RvX2VuZCk7CiAKLQkJd3FlX3B0ciA9IGJhc2VfcHRyOwogCQlhZGRyZXNzICYjNDM7PSBzaXplX3RvX2VuZDsKIAkJc2dsX3NpemUgLT0gc2l6ZV90b19lbmQ7CiYjNDM7CQlzZ2xfb2Zmc2V0ICYjNDM7PSBzaXplX3RvX2VuZDsKJiM0MzsJCWlmIChzZ2xfb2Zmc2V0ID09IHdxLSZndDtxdWV1ZV9zaXplKQomIzQzOwkJCXNnbF9vZmZzZXQgPSAwOwogCX0KIAotCW1lbWNweSh3cWVfcHRyLCBhZGRyZXNzLCBzZ2xfc2l6ZSk7CiYjNDM7CW1lbWNweShtYW5hX2dkX3JpbmdfcHRyKHdxLCBzZ2xfb2Zmc2V0KSwgYWRkcmVzcywgc2dsX3NpemUpOwogfQogCiBpbnQgbWFuYV9nZF9wb3N0X3dvcmtfcmVxdWVzdChzdHJ1Y3QgZ2RtYV9xdWV1ZSAqd3EsCkBAIC0xNTg0LDggJiM0MzsxNzI2LDEyIEBAIGludCBtYW5hX2dkX3Bvc3Rfd29ya19yZXF1ZXN0KHN0cnVjdCBnZG1hX3F1ZXVlICp3cSwKIAl1MzIgY2xpZW50X29vYl9zaXplID0gd3FlX3JlcS0mZ3Q7aW5saW5lX29vYl9zaXplOwogCXUzMiBzZ2xfZGF0YV9zaXplOwogCXUzMiBtYXhfd3FlX3NpemU7CiYjNDM7CXUzMiB3cWVfb2Zmc2V0OwomIzQzOwl1MzIgc2dsX29mZnNldDsKIAl1MzIgd3FlX3NpemU7CiYjNDM7CXUzMiBvb2JfbGVuOwogCXU4ICp3cWVfcHRyOwomIzQzOwl1MzIgaGVhZDsKIAogCWlmICh3cWVfcmVxLSZndDtudW1fc2dlID09IDApCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTYxNywxMyAmIzQzOzE3NjMsMTcgQEAgaW50IG1hbmFfZ2RfcG9zdF93b3JrX3JlcXVlc3Qoc3RydWN0IGdkbWFfcXVldWUgKndxLAogCWlmICh3cWVfaW5mbykKIAkJd3FlX2luZm8tJmd0O3dxZV9zaXplX2luX2J1ID0gd3FlX3NpemUgLyBHRE1BX1dRRV9CVV9TSVpFOwogCi0Jd3FlX3B0ciA9IG1hbmFfZ2RfZ2V0X3dxZV9wdHIod3EsIHdxLSZndDtoZWFkKTsKLQl3cWVfcHRyICYjNDM7PSBtYW5hX2dkX3dyaXRlX2NsaWVudF9vb2Iod3FlX3JlcSwgd3EtJmd0O3R5cGUsIGNsaWVudF9vb2Jfc2l6ZSwKLQkJCQkJICAgIHNnbF9kYXRhX3NpemUsIHdxZV9wdHIpOwotCWlmICh3cWVfcHRyICZndDs9ICh1OCAqKXdxLSZndDtxdWV1ZV9tZW1fcHRyICYjNDM7IHdxLSZndDtxdWV1ZV9zaXplKQotCQl3cWVfcHRyIC09IHdxLSZndDtxdWV1ZV9zaXplOwomIzQzOwloZWFkID0gd3EtJmd0O2hlYWQ7CiYjNDM7CXdxZV9vZmZzZXQgPSAoaGVhZCAqIEdETUFfV1FFX0JVX1NJWkUpICZhbXA7ICh3cS0mZ3Q7cXVldWVfc2l6ZSAtIDEpOwomIzQzOwl3cWVfcHRyID0gbWFuYV9nZF9nZXRfd3FlX3B0cih3cSwgaGVhZCk7CiYjNDM7CW9vYl9sZW4gPSBtYW5hX2dkX3dyaXRlX2NsaWVudF9vb2Iod3FlX3JlcSwgd3EtJmd0O3R5cGUsIGNsaWVudF9vb2Jfc2l6ZSwKJiM0MzsJCQkJCSAgIHNnbF9kYXRhX3NpemUsIHdxZV9wdHIpOwomIzQzOwomIzQzOwlzZ2xfb2Zmc2V0ID0gd3FlX29mZnNldCAmIzQzOyBvb2JfbGVuOwomIzQzOwlpZiAoc2dsX29mZnNldCAmZ3Q7PSB3cS0mZ3Q7cXVldWVfc2l6ZSkKJiM0MzsJCXNnbF9vZmZzZXQgLT0gd3EtJmd0O3F1ZXVlX3NpemU7CiAKLQltYW5hX2dkX3dyaXRlX3NnbCh3cSwgd3FlX3B0ciwgd3FlX3JlcSk7CiYjNDM7CW1hbmFfZ2Rfd3JpdGVfc2dsKHdxLCBzZ2xfb2Zmc2V0LCB3cWVfcmVxKTsKIAogCXdxLSZndDtoZWFkICYjNDM7PSB3cWVfc2l6ZSAvIEdETUFfV1FFX0JVX1NJWkU7CiAKQEAgLTE2NTMsMTEgJiM0MzsxODAzLDEwIEBAIGludCBtYW5hX2dkX3Bvc3RfYW5kX3Jpbmcoc3RydWN0IGdkbWFfcXVldWUgKnF1ZXVlLAogc3RhdGljIGludCBtYW5hX2dkX3JlYWRfY3FlKHN0cnVjdCBnZG1hX3F1ZXVlICpjcSwgc3RydWN0IGdkbWFfY29tcCAqY29tcCkKIHsKIAl1bnNpZ25lZCBpbnQgbnVtX2NxZSA9IGNxLSZndDtxdWV1ZV9zaXplIC8gc2l6ZW9mKHN0cnVjdCBnZG1hX2NxZSk7Ci0Jc3RydWN0IGdkbWFfY3FlICpjcV9jcWUgPSBjcS0mZ3Q7cXVldWVfbWVtX3B0cjsKIAl1MzIgb3duZXJfYml0cywgbmV3X2JpdHMsIG9sZF9iaXRzOwogCXN0cnVjdCBnZG1hX2NxZSAqY3FlOwogCi0JY3FlID0gJmFtcDtjcV9jcWVbY3EtJmd0O2hlYWQgJSBudW1fY3FlXTsKJiM0MzsJY3FlID0gbWFuYV9nZF9yaW5nX3B0cihjcSwgKGNxLSZndDtoZWFkICUgbnVtX2NxZSkgKiBzaXplb2YoKmNxZSkpOwogCW93bmVyX2JpdHMgPSBjcWUtJmd0O2NxZV9pbmZvLm93bmVyX2JpdHM7CiAKIAlvbGRfYml0cyA9IChjcS0mZ3Q7aGVhZCAvIG51bV9jcWUgLSAxKSAmYW1wOyBHRE1BX0NRRV9PV05FUl9NQVNLOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvaHdfY2hhbm5lbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvaHdfY2hhbm5lbC5jCmluZGV4IGUzYzI0ZDUwZGFkMDcuLjI2M2U3YzRlMjkzNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2h3X2NoYW5uZWwuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9od19jaGFubmVsLmMKQEAgLTQ3OSw3ICYjNDM7NDc5LDcgQEAgc3RhdGljIGludCBtYW5hX2h3Y19hbGxvY19kbWFfYnVmKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTE2IHFfZGVwdGgsCiAJYnVmX3NpemUgPSBNQU5BX1BBR0VfQUxJR04ocV9kZXB0aCAqIG1heF9tc2dfc2l6ZSk7CiAKIAlnbWkgPSAmYW1wO2RtYV9idWYtJmd0O21lbV9pbmZvOwotCWVyciA9IG1hbmFfZ2RfYWxsb2NfbWVtb3J5KGdjLCBidWZfc2l6ZSwgZ21pKTsKJiM0MzsJZXJyID0gbWFuYV9nZF9hbGxvY19tZW1vcnkoZ2MsIGJ1Zl9zaXplLCBnbWksIGZhbHNlKTsKIAlpZiAoZXJyKSB7CiAJCWRldl9lcnIoaHdjLSZndDtkZXYsICYjMzQ7RmFpbGVkIHRvIGFsbG9jYXRlIERNQSBidWZmZXIgc2l6ZTogJXUsIGVyciAlZFxuJiMzNDssCiAJCQlidWZfc2l6ZSwgZXJyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYwppbmRleCAyNTE5YTk4YWQwMGIwLi5iODAzNzExOTY4MDQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jCkBAIC00MCw2ICYjNDM7NDAsOSBAQCBzdGF0aWMgc3NpemVfdCBtYW5hX2RiZ19xX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudAogewogCXN0cnVjdCBnZG1hX3F1ZXVlICpnZG1hX3EgPSBmaWxwLSZndDtwcml2YXRlX2RhdGE7CiAKJiM0MzsJaWYgKGdkbWFfcS0mZ3Q7bWVtX2luZm8ubnJfcGFnZXMpCiYjNDM7CQlyZXR1cm4gbWFuYV9nZF9yZWFkX3JpbmcoZ2RtYV9xLCBidWYsIGNvdW50LCBwb3MpOwomIzQzOwogCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcihidWYsIGNvdW50LCBwb3MsIGdkbWFfcS0mZ3Q7cXVldWVfbWVtX3B0ciwKIAkJCQkgICAgICAgZ2RtYV9xLSZndDtxdWV1ZV9zaXplKTsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21hbmEvZ2RtYS5oIGIvaW5jbHVkZS9uZXQvbWFuYS9nZG1hLmgKaW5kZXggODUyOWNlZjBkN2M0NS4uYjBiMzIyYTgwYjYyOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbWFuYS9nZG1hLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbWFuYS9nZG1hLmgKQEAgLTI0MCw2ICYjNDM7MjQwLDE0IEBAIHN0cnVjdCBnZG1hX21lbV9pbmZvIHsKIAl2b2lkICp2aXJ0X2FkZHI7CiAJdTY0IGxlbmd0aDsKIAomIzQzOwkvKiBTY2F0dGVyZWQgZmFsbGJhY2s6IHdoZW4gQG5yX3BhZ2VzICZndDsgMCB0aGUgcmluZyBpcyB0aGF0IG1hbnkKJiM0MzsJICogUEFHRV9TSVpFIGNvaGVyZW50IGFsbG9jYXRpb25zIGluIEBwYWdlc192YS9AcGFnZXNfZG1hLCBub3QKJiM0MzsJICogQHZpcnRfYWRkci9AZG1hX2hhbmRsZS4KJiM0MzsJICovCiYjNDM7CXZvaWQgKipwYWdlc192YTsKJiM0MzsJZG1hX2FkZHJfdCAqcGFnZXNfZG1hOwomIzQzOwl1bnNpZ25lZCBpbnQgbnJfcGFnZXM7CiYjNDM7CiAJLyogQWxsb2NhdGVkIGJ5IHRoZSBQRiBkcml2ZXIgKi8KIAl1NjQgZG1hX3JlZ2lvbl9oYW5kbGU7CiB9OwpAQCAtNTEyLDYgJiM0Mzs1MjAsOSBAQCBpbnQgbWFuYV9nZF9wb2xsX2NxKHN0cnVjdCBnZG1hX3F1ZXVlICpjcSwgc3RydWN0IGdkbWFfY29tcCAqY29tcCwgaW50IG51bV9jcWUpOwogCiB2b2lkIG1hbmFfZ2RfcmluZ19jcShzdHJ1Y3QgZ2RtYV9xdWV1ZSAqY3EsIHU4IGFybV9iaXQpOwogCiYjNDM7c3NpemVfdCBtYW5hX2dkX3JlYWRfcmluZyhzdHJ1Y3QgZ2RtYV9xdWV1ZSAqcSwgY2hhciBfX3VzZXIgKmJ1ZiwKJiM0MzsJCQkgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpOwomIzQzOwogaW50IG1hbmFfc2NoZWR1bGVfc2Vydl93b3JrKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjLCBlbnVtIGdkbWFfZXFlX3R5cGUgdHlwZSk7CiAKIHZvaWQgbWFuYV9nZF9yaW5nX2RpbShzdHJ1Y3QgZ2RtYV9xdWV1ZSAqY3EsIHUzMiBtb2RfdXNlYywgYm9vbCBtb2RfdXNlY192bGQsCkBAIC02NjgsNiAmIzQzOzY3OSw5IEBAIGVudW0gewogLyogRHJpdmVyIHN1cHBvcnRzIGR5bmFtaWMgaW50ZXJydXB0IG1vZGVyYXRpb24gLSBESU0gKi8KICNkZWZpbmUgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9EWU5fSU5URVJSVVBUX01PREVSQVRJT04gQklUKDI4KQogCiYjNDM7LyogRHJpdmVyIHN1cHBvcnRzIG5vbi1jb250aWd1b3VzIHF1ZXVlIGJ1ZmZlcnMgKi8KJiM0MzsjZGVmaW5lIEdETUFfRFJWX0NBUF9GTEFHXzFfTk9OX0NPTlRJR1VPVVNfQlVGRkVSUyBCSVQoMzApCiYjNDM7CiAjZGVmaW5lIEdETUFfRFJWX0NBUF9GTEFHUzEgXAogCShHRE1BX0RSVl9DQVBfRkxBR18xX0VRX1NIQVJJTkdfTVVMVElfVlBPUlQgfCBcCiAJIEdETUFfRFJWX0NBUF9GTEFHXzFfTkFQSV9XS0RPTkVfRklYIHwgXApAQCAtNjg0LDcgJiM0Mzs2OTgsOCBAQCBlbnVtIHsKIAkgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9IQU5ETEVfU1RBTExfU1FfUkVDT1ZFUlkgfCBcCiAJIEdETUFfRFJWX0NBUF9GTEFHXzFfSFdDX1RJTUVPVVRfUkVDT1ZFUlkgfCBcCiAJIEdETUFfRFJWX0NBUF9GTEFHXzFfRVFfTVNJX1VOU0hBUkVfTVVMVElfVlBPUlQgfCBcCi0JIEdETUFfRFJWX0NBUF9GTEFHXzFfRFlOX0lOVEVSUlVQVF9NT0RFUkFUSU9OKQomIzQzOwkgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9EWU5fSU5URVJSVVBUX01PREVSQVRJT04gfCBcCiYjNDM7CSBHRE1BX0RSVl9DQVBfRkxBR18xX05PTl9DT05USUdVT1VTX0JVRkZFUlMpCiAKICNkZWZpbmUgR0RNQV9EUlZfQ0FQX0ZMQUdTMiAwCiAKQEAgLTEwNDUsNyAmIzQzOzEwNjAsNyBAQCB2b2lkIG1hbmFfZ2Rfd3FfcmluZ19kb29yYmVsbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYywKIAkJCSAgICAgIHN0cnVjdCBnZG1hX3F1ZXVlICpxdWV1ZSk7CiAKIGludCBtYW5hX2dkX2FsbG9jX21lbW9yeShzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYywgdW5zaWduZWQgaW50IGxlbmd0aCwKLQkJCSBzdHJ1Y3QgZ2RtYV9tZW1faW5mbyAqZ21pKTsKJiM0MzsJCQkgc3RydWN0IGdkbWFfbWVtX2luZm8gKmdtaSwgYm9vbCBhbGxvd19zY2F0dGVyKTsKIAogdm9pZCBtYW5hX2dkX2ZyZWVfbWVtb3J5KHN0cnVjdCBnZG1hX21lbV9pbmZvICpnbWkpOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIyOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2MDkKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAzOTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGdXp6aW5nIFBvdGVudGlhbCBvZiBUaGlzIE1BTkEgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdG91Y2hlcyBgZ2RtYV9tYWluLmNgLCBgaHdfY2hhbm5lbC5jYCwgYG1hbmFfZW4uY2AsIGFuZCBgZ2RtYS5oYCDigJMgYWxsIHdpdGhpbiB0aGUgTUFOQSBkcml2ZXIsIHdoaWNoIHNlZW1zIHRvIGJlIHRoZSBNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyLiBJdCYjMzk7cyBhZGRpbmcgc3VwcG9ydCBmb3Igc2NhdHRlcmVkIGZhbGxiYWNrIG1lbW9yeSBhbGxvY2F0aW9uLCB3aGljaCBpcyBpbnRlcmVzdGluZyBpbiBpdHNlbGYuIEJ1dCBoZXJlJiMzOTtzIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBpcyB0aGlzIHBhdGNoIHdvcnRoIGZ1enppbmcsIGJhc2VkIG9uIHRoZSBzcGVjaWZpYyBjcml0ZXJpYT8KCkxldCYjMzk7cyBzZWUsIHRoZSBpbnN0cnVjdGlvbnMgc3RhdGUgdGhhdCBhIHBhdGNoIGlzbiYjMzk7dCB3b3J0aCBmdXp6aW5nIGlmIGl0JiMzOTtzIGdvdCBjb2RlIHRoYXQmIzM5O3MgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciByZWxpZXMgb24gc3BlY2lhbGl6ZWQgaGFyZHdhcmUuIFNvLCBteSBpbml0aWFsIHRob3VnaHQgaXMsIE1BTkEgaXMgYSB2aXJ0dWFsaXplZCBuZXR3b3JrIGRyaXZlciwgdXNlZCBpbiBBenVyZSwgc3BlY2lmaWNhbGx5IEh5cGVyLVYsIGFuZCBJJiMzOTttIHByZXR0eSBzdXJlIGl0IGRvZXNuJiMzOTt0IHJ1biBpbiBzdGFuZGFyZCBRRU1VLiBUaGF0JiMzOTtzIGEgcmVkIGZsYWcuIEJ1dCB3YWl0LCBjYW4gSHlwZXItViBndWVzdHMgcnVuIGluIFFFTVU/IEhtbSwgbm90IHdpdGggdGhpcyBNQU5BIGhhcmR3YXJlLCBpdCYjMzk7cyBhIHNwZWNpZmljIEF6dXJlIFNSLUlPViBhZGFwdGVyLiBJdCYjMzk7cyBhbiBBenVyZS1zcGVjaWZpYyBoYXJkd2FyZS4gU28sIE1BTkEgaXMgdmVuZG9yLXNwZWNpZmljLCBidXQgbm90IGEgU21hcnROSUMgb3IgR1BVIGRyaXZlciBsaWtlIHRoZSBjcml0ZXJpYSBkZXNjcmliZSwgYW5kIEkmIzM5O20gY2VydGFpbiBpdCBpc24mIzM5O3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KCkl0IGlzIGEgUENJIGRldmljZSwgc3BlY2lmaWNhbGx5IHRoZSBNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyLiBDYW4gc3l6a2FsbGVyIGV2ZW4gdG91Y2ggaXQ/IFN5emthbGxlciBydW5zIGluIFFFTVUvR0NFLCByaWdodD8gQW5kIGl0IHN1cmUgZG9lc24mIzM5O3QgaGF2ZSBNQU5BIGhhcmR3YXJlLi4uIHRoYXQmIzM5O3MgYSBwcm9ibGVtLiBTeXprYWxsZXIgZG9lc24mIzM5O3QgZW11bGF0ZSBNQU5BLiBUaGlzIGxvb2tzIGxpa2UgYSBkZWZpbml0ZSBuby1nbyBmb3Igc3RhbmRhcmQgZnV6emluZy4gSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkmIzM5O2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIGlmIHRoZSBNQU5BIGNvZGUgaXMgcmVhY2hhYmxlLCBvciBkZXBlbmRlbnQgb24gYW55IHNwZWNpZmljIGhhcmR3YXJlIHRoYXQgbWFrZXMgaXQgaW5hY2Nlc3NpYmxlIHRvIHRoZSBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50LiBBIHF1aWNrIGBtYW5hYCBzZWFyY2ggaW4gdGhlIGtlcm5lbCBzaG91bGQgcHJvdmlkZSBjb25maXJtYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjI6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX01JQ1JPU09GVF9NQU5BJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9NYWtlZmlsZS00LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX01JQ1JPU09GVF9NQU5BKSAmIzQzOz0gbWFuYS9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9NYWtlZmlsZS00LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvTWFrZWZpbGU6NTpvYmotJChDT05GSUdfTUlDUk9TT0ZUX01BTkEpICYjNDM7PSBtYW5hLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL01ha2VmaWxlLTYtbWFuYS1vYmpzIDo9IGdkbWFfbWFpbi5vIHNobV9jaGFubmVsLm8gaHdfY2hhbm5lbC5vIG1hbmFfZW4ubyBtYW5hX2V0aHRvb2wubyBtYW5hX2JwZi5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjI6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTU5MgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIENvZGUgUGF0aHMgaW4gdGhlIE1BTkEgRHJpdmVyKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgbmVlZCB0byByZXRoaW5rIHRoaXMuIEl0IGp1c3QgaGl0IG1lOiBzeXprYWxsZXIsIGFzIGZhciBhcyBJIHVuZGVyc3RhbmQgaXQsIGRvZXNuJiMzOTt0IGFjdHVhbGx5IGVtdWxhdGUgdGhlIE1BTkEgUENJIGRldmljZXMuIFRoYXQgcHJlc2VudHMgYSBzZXJpb3VzIGh1cmRsZS4gSSB3YXMgYXNzdW1pbmcgaXQgY291bGQsIGJ1dCBub3cgSSYjMzk7bSBxdWVzdGlvbmluZyB0aGUgYmFzaXMgb2YgbXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MuCgpTbywgaWYgc3l6a2FsbGVyIGlzbiYjMzk7dCBvdXIgcm91dGUgaW4sIGhvdyAqZWxzZSogY2FuIHdlIGV4ZXJjaXNlIHRoaXMgc3BlY2lmaWMgY29kZT8gVGhlIGRyaXZlciYjMzk7cyBhcmNoaXRlY3R1cmUgbGVhbnMgb24gYmVpbmcgYSBQQ0kgZHJpdmVyLCB3aGljaCBtZWFucyBpdCBzaG91bGQgYmUgbG9hZGVkIGFuZCBtYW5hZ2VkIHRocm91Z2ggdGhlIFBDSSBzdWJzeXN0ZW0uIEkgbmVlZCB0byBjb25maXJtIGlmIHRoZXJlIGFyZSBhbHRlcm5hdGl2ZSBlbnRyeSBwb2ludHMgYmV5b25kIHRoZSBzaW11bGF0ZWQgZW52aXJvbm1lbnQuCgpUbyBzdGFydCwgbGV0IG1lIHF1aWNrbHkgcGl2b3QgdG8gYGRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jYCBhbmQgc3BlY2lmaWNhbGx5IGxvb2sgZm9yIHJlZmVyZW5jZXMgdG8gYHBjaV9kcml2ZXJgLiBUaGlzIHNob3VsZCBwcm92aWRlIGNydWNpYWwgaW5zaWdodHMuIEJ5IGV4YW1pbmluZyBob3cgdGhlIGRyaXZlciByZWdpc3RlcnMgd2l0aCBhbmQgaW50ZXJhY3RzIHdpdGggdGhlIFBDSSBidXMsIEkgY2FuIGdldCBhIGJldHRlciBncmlwIG9uIHdoZXRoZXIgdGhpcyBjb2RlIGlzIGV2ZW4gcmVtb3RlbHkgcmVhY2hhYmxlIGdpdmVuIG91ciBjdXJyZW50IGNvbnN0cmFpbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIyOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BjaV9kcml2ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmM9MjcwMD1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgbWFuYV9pZF90YWJsZVtdID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jLTI3MDYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYzoyNzA3OnN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBtYW5hX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jLTI3MDgtXHQubmFtZVx0XHQ9IFwmIzM0O21hbmFcJiMzNDssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjI6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwNjQKCQkJCQkJCW91dHB1dDogODYKCQkJCQkJCXRob3VnaHRzOiAyNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudDogTUFOQSBEcml2ZXIgRnV6emluZyBJbmZlYXNpYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyB0aGluayB0aGlzIHRocm91Z2guIFRoaXMgaXMgYSBQQ0kgZHJpdmVyIHNwZWNpZmljYWxseSBmb3IgdGhlIE1pY3Jvc29mdCBBenVyZSBOZXR3b3JrIEFkYXB0ZXIsIE1BTkEuIEFuZCBmcm9tIHdoYXQgSSB1bmRlcnN0YW5kLCBpdCYjMzk7cyBub3Qgc29tZXRoaW5nIHlvdSBjYW4ganVzdCBzcGluIHVwIGFuZCBwbGF5IHdpdGggaW4gYSBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudC4gSXQmIzM5O3MgYSB2ZW5kb3Itc3BlY2lmaWMgcGllY2Ugb2YgaGFyZHdhcmUgdGhhdCBuZWNlc3NpdGF0ZXMgYWN0dWFsLCBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlLCBvciBhdCBsZWFzdCBhIHZlcnkgc3BlY2lhbGl6ZWQgZW11bGF0aW9uLgoKR2l2ZW4gdGhhdCwgdGhpcyBpbW1lZGlhdGVseSBzY3JlYW1zICYjMzQ7V29ydGhGdXp6aW5nPWZhbHNlJiMzNDsuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhlIGluc3RydWN0aW9ucyBmb3IgZXZhbHVhdGluZyB0aGUgcGF0Y2g6IGFtIEkgZGVhbGluZyB3aXRoIGNvZGUgaW1wb3NzaWJsZSB0byB0b3VjaCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IOKAkyBldmVuIGlmIHRoYXQgZW52aXJvbm1lbnQgaGFzIGNsZXZlciBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZS4gSXQgc2VlbXMgbGlrZSBhIGxvdCBvZiB0aGUgZXhhbXBsZXMgd2VyZSBQQ0ktYmFzZWQgYW5kL29yIFNtYXJ0TklDJiMzOTtzIC0gc2ltaWxhciB0byBteSBjdXJyZW50IHNpdHVhdGlvbi4KCkkmIzM5O3ZlIGdvbmUgdGhyb3VnaCB0aGUgZ3VpZGVsaW5lcywgYW5kIGl0JiMzOTtzIGNsZWFyOiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBkcml2ZXJzIGxpa2UgTUFOQSDigJMgZGVzaWduZWQgZm9yIHBoeXNpY2FsIGhhcmR3YXJlIHRoYXQgUUVNVSBkb2VzbiYjMzk7dCwgYW5kIHByb2JhYmx5ICpjYW4mIzM5O3QqLCBlbXVsYXRlIOKAkyBhcmUgZXhhY3RseSB0aGUgY2F0ZWdvcnkgdGhhdCBkaXNxdWFsaWZpZXMgaXQuIFRoZSBNQU5BIGRyaXZlciBpcyB0aGUgc2FtZTsgaXQmIzM5O3MgaGFyZHdhcmUtZGVwZW5kZW50LCBzbyBJIG5lZWQgdG8gc2V0IHRoZSBmdXp6aW5nIGZsYWcgdG8gZmFsc2UuIEkgd2lsbCBtYXJrIGl0IGFzIHN1Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjI6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlciAoTUFOQSkgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIGRldmljZSBkcml2ZXIuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50cyB1c2VkIGJ5IHN5emthbGxlciwgbWFraW5nIHRoZSBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBzdGFuZGFyZCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1pY3Jvc29mdCBBenVyZSBOZXR3b3JrIEFkYXB0ZXIgKE1BTkEpIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBkZXZpY2UgZHJpdmVyLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudHMgdXNlZCBieSBzeXprYWxsZXIsIG1ha2luZyB0aGUgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBkdXJpbmcgc3RhbmRhcmQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjI6MDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIyOjAzOjQ1LjE1Mjk3NjExOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMDIzMTY3NDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1pY3Jvc29mdCBBenVyZSBOZXR3b3JrIEFkYXB0ZXIgKE1BTkEpIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBkZXZpY2UgZHJpdmVyLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudHMgdXNlZCBieSBzeXprYWxsZXIsIG1ha2luZyB0aGUgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBkdXJpbmcgc3RhbmRhcmQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIyOjAzOjQ1LjE1Mjk4MTU3OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYzMzEzMzgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYmQ4YmVjZDA1YjIyMGVlNGMwY2MwZjMyZDQxODJkNThjMjU2ZmVlYVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyA3IDIyOjAzOjQ0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmNcXG5pbmRleCBhMzhkNGJiNzQ2MjFmLi5lZDlhZjMxNGU0ZWRlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmNcXG5AQCAtMTEsNiArMTEsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbXNpLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pcnFkb21haW4uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2V4cG9ydC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdWFjY2Vzcy5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9tYW5hL21hbmEuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9tYW5hL2h3X2NoYW5uZWwuaFxcdTAwM2VcXG5AQCAtMzc0LDI4ICszNzUsOTYgQEAgaW50IG1hbmFfZ2Rfc2VuZF9yZXF1ZXN0KHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjLCB1MzIgcmVxX2xlbiwgY29uc3Qgdm9pZCAqcmVxLFxcbiBFWFBPUlRfU1lNQk9MX05TKG1hbmFfZ2Rfc2VuZF9yZXF1ZXN0LCBcXFwiTkVUX01BTkFcXFwiKTtcXG4gXFxuIGludCBtYW5hX2dkX2FsbG9jX21lbW9yeShzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYywgdW5zaWduZWQgaW50IGxlbmd0aCxcXG4tXFx0XFx0XFx0IHN0cnVjdCBnZG1hX21lbV9pbmZvICpnbWkpXFxuK1xcdFxcdFxcdCBzdHJ1Y3QgZ2RtYV9tZW1faW5mbyAqZ21pLCBib29sIGFsbG93X3NjYXR0ZXIpXFxuIHtcXG4rXFx0dW5zaWduZWQgaW50IG5wYWdlcywgaTtcXG4gXFx0ZG1hX2FkZHJfdCBkbWFfaGFuZGxlO1xcbitcXHRib29sIGNhbl9mYWxsYmFjaztcXG4gXFx0dm9pZCAqYnVmO1xcbiBcXG4gXFx0aWYgKGxlbmd0aCBcXHUwMDNjIE1BTkFfUEFHRV9TSVpFIHx8ICFpc19wb3dlcl9vZl8yKGxlbmd0aCkpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4gXFx0Z21pLVxcdTAwM2VkZXYgPSBnYy1cXHUwMDNlZGV2O1xcbi1cXHRidWYgPSBkbWFfYWxsb2NfY29oZXJlbnQoZ21pLVxcdTAwM2VkZXYsIGxlbmd0aCwgXFx1MDAyNmRtYV9oYW5kbGUsIEdGUF9LRVJORUwpO1xcbi1cXHRpZiAoIWJ1ZilcXG4rXFxuK1xcdC8qIEFuIGFsbG9jYXRpb24gdGhhdCBmaXRzIGluIG9uZSBwYWdlIGRvZXMgbm90IGJlbmVmaXQgZnJvbVxcbitcXHQgKiBmYWxsYmFjay5cXG4rXFx0ICovXFxuK1xcdGNhbl9mYWxsYmFjayA9IGFsbG93X3NjYXR0ZXIgXFx1MDAyNlxcdTAwMjYgbGVuZ3RoIFxcdTAwM2UgUEFHRV9TSVpFO1xcbitcXG4rXFx0LyogV2FybiBvbmx5IHdoZW4gdGhlcmUgaXMgbm8gZmFsbGJhY2sgdG8gcmVzY3VlIHRoZSBmYWlsdXJlLiAqL1xcbitcXHRidWYgPSBkbWFfYWxsb2NfY29oZXJlbnQoZ21pLVxcdTAwM2VkZXYsIGxlbmd0aCwgXFx1MDAyNmRtYV9oYW5kbGUsXFxuK1xcdFxcdFxcdFxcdCBHRlBfS0VSTkVMIHxcXG4rXFx0XFx0XFx0XFx0IChjYW5fZmFsbGJhY2sgPyBfX0dGUF9OT1dBUk4gOiAwKSk7XFxuK1xcdGlmIChidWYpIHtcXG4rXFx0XFx0Z21pLVxcdTAwM2VkbWFfaGFuZGxlID0gZG1hX2hhbmRsZTtcXG4rXFx0XFx0Z21pLVxcdTAwM2V2aXJ0X2FkZHIgPSBidWY7XFxuK1xcdFxcdGdtaS1cXHUwMDNlbGVuZ3RoID0gbGVuZ3RoO1xcbitcXHRcXHRnbWktXFx1MDAzZW5yX3BhZ2VzID0gMDtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghY2FuX2ZhbGxiYWNrKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuLVxcdGdtaS1cXHUwMDNlZG1hX2hhbmRsZSA9IGRtYV9oYW5kbGU7XFxuLVxcdGdtaS1cXHUwMDNldmlydF9hZGRyID0gYnVmO1xcbitcXHQvKiBsZW5ndGggaXMgYSBwb3dlciBvZiAyIGFib3ZlIFBBR0VfU0laRSwgc28gdGhpcyBkaXZpZGVzIGV4YWN0bHkuICovXFxuK1xcdG5wYWdlcyA9IGxlbmd0aCAvIFBBR0VfU0laRTtcXG4rXFxuK1xcdGdtaS1cXHUwMDNlcGFnZXNfdmEgPSBrdmNhbGxvYyhucGFnZXMsIHNpemVvZigqZ21pLVxcdTAwM2VwYWdlc192YSksIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIWdtaS1cXHUwMDNlcGFnZXNfdmEpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0Z21pLVxcdTAwM2VwYWdlc19kbWEgPSBrdmNhbGxvYyhucGFnZXMsIHNpemVvZigqZ21pLVxcdTAwM2VwYWdlc19kbWEpLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFnbWktXFx1MDAzZXBhZ2VzX2RtYSlcXG4rXFx0XFx0Z290byBmcmVlX3ZhO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5wYWdlczsgaSsrKSB7XFxuK1xcdFxcdGdtaS1cXHUwMDNlcGFnZXNfdmFbaV0gPSBkbWFfYWxsb2NfY29oZXJlbnQoZ21pLVxcdTAwM2VkZXYsIFBBR0VfU0laRSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNmdtaS1cXHUwMDNlcGFnZXNfZG1hW2ldLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBHRlBfS0VSTkVMKTtcXG4rXFx0XFx0aWYgKCFnbWktXFx1MDAzZXBhZ2VzX3ZhW2ldKVxcbitcXHRcXHRcXHRnb3RvIGZyZWVfcGFnZXM7XFxuK1xcdH1cXG4rXFxuK1xcdGRldl9pbmZvX3JhdGVsaW1pdGVkKGdtaS1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHQgICAgIFxcXCJjb250aWd1b3VzICV1LWJ5dGUgRE1BIGFsbG9jIGZhaWxlZDsgdXNpbmcgJXUgc2NhdHRlcmVkIHBhZ2VzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgIGxlbmd0aCwgbnBhZ2VzKTtcXG4rXFxuK1xcdGdtaS1cXHUwMDNldmlydF9hZGRyID0gTlVMTDtcXG4rXFx0Z21pLVxcdTAwM2VkbWFfaGFuZGxlID0gMDtcXG4gXFx0Z21pLVxcdTAwM2VsZW5ndGggPSBsZW5ndGg7XFxuK1xcdGdtaS1cXHUwMDNlbnJfcGFnZXMgPSBucGFnZXM7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4rXFxuK2ZyZWVfcGFnZXM6XFxuK1xcdHdoaWxlIChpLS0pXFxuK1xcdFxcdGRtYV9mcmVlX2NvaGVyZW50KGdtaS1cXHUwMDNlZGV2LCBQQUdFX1NJWkUsIGdtaS1cXHUwMDNlcGFnZXNfdmFbaV0sXFxuK1xcdFxcdFxcdFxcdCAgZ21pLVxcdTAwM2VwYWdlc19kbWFbaV0pO1xcbitcXHRrdmZyZWUoZ21pLVxcdTAwM2VwYWdlc19kbWEpO1xcbitcXHRnbWktXFx1MDAzZXBhZ2VzX2RtYSA9IE5VTEw7XFxuK2ZyZWVfdmE6XFxuK1xcdGt2ZnJlZShnbWktXFx1MDAzZXBhZ2VzX3ZhKTtcXG4rXFx0Z21pLVxcdTAwM2VwYWdlc192YSA9IE5VTEw7XFxuK1xcdHJldHVybiAtRU5PTUVNO1xcbiB9XFxuIFxcbiB2b2lkIG1hbmFfZ2RfZnJlZV9tZW1vcnkoc3RydWN0IGdkbWFfbWVtX2luZm8gKmdtaSlcXG4ge1xcbitcXHR1bnNpZ25lZCBpbnQgaTtcXG4rXFxuK1xcdGlmIChnbWktXFx1MDAzZW5yX3BhZ2VzIFxcdTAwM2UgMCkge1xcbitcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZ21pLVxcdTAwM2Vucl9wYWdlczsgaSsrKVxcbitcXHRcXHRcXHRkbWFfZnJlZV9jb2hlcmVudChnbWktXFx1MDAzZWRldiwgUEFHRV9TSVpFLCBnbWktXFx1MDAzZXBhZ2VzX3ZhW2ldLFxcbitcXHRcXHRcXHRcXHRcXHQgIGdtaS1cXHUwMDNlcGFnZXNfZG1hW2ldKTtcXG4rXFx0XFx0a3ZmcmVlKGdtaS1cXHUwMDNlcGFnZXNfdmEpO1xcbitcXHRcXHRrdmZyZWUoZ21pLVxcdTAwM2VwYWdlc19kbWEpO1xcbitcXHRcXHRnbWktXFx1MDAzZXBhZ2VzX3ZhID0gTlVMTDtcXG4rXFx0XFx0Z21pLVxcdTAwM2VwYWdlc19kbWEgPSBOVUxMO1xcbitcXHRcXHRnbWktXFx1MDAzZW5yX3BhZ2VzID0gMDtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbiBcXHRkbWFfZnJlZV9jb2hlcmVudChnbWktXFx1MDAzZWRldiwgZ21pLVxcdTAwM2VsZW5ndGgsIGdtaS1cXHUwMDNldmlydF9hZGRyLFxcbiBcXHRcXHRcXHQgIGdtaS1cXHUwMDNlZG1hX2hhbmRsZSk7XFxuIH1cXG5AQCAtNzUzLDExICs4MjIsNzMgQEAgaW50IG1hbmFfc2NoZWR1bGVfc2Vydl93b3JrKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjLCBlbnVtIGdkbWFfZXFlX3R5cGUgdHlwZSlcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuKy8qIFJldHVybiB0aGUgQ1BVIGFkZHJlc3Mgb2YgYnl0ZSBAb2Zmc2V0IHdpdGhpbiBhIHF1ZXVlJ3MgcmluZyBidWZmZXIuICovXFxuK3N0YXRpYyB2b2lkICptYW5hX2dkX3JpbmdfcHRyKGNvbnN0IHN0cnVjdCBnZG1hX3F1ZXVlICpxLCB1MzIgb2Zmc2V0KVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBnZG1hX21lbV9pbmZvICpnbWkgPSBcXHUwMDI2cS1cXHUwMDNlbWVtX2luZm87XFxuK1xcbitcXHRpZiAoZ21pLVxcdTAwM2Vucl9wYWdlcyBcXHUwMDNlIDApXFxuK1xcdFxcdHJldHVybiAodTggKilnbWktXFx1MDAzZXBhZ2VzX3ZhW29mZnNldCAvIFBBR0VfU0laRV0gK1xcbitcXHRcXHQgICAgICAgKG9mZnNldCBcXHUwMDI2IChQQUdFX1NJWkUgLSAxKSk7XFxuK1xcbitcXHRyZXR1cm4gcS1cXHUwMDNlcXVldWVfbWVtX3B0ciArIG9mZnNldDtcXG4rfVxcbitcXG4rLyogTnVtYmVyIG9mIGJ5dGVzIGZyb20gQG9mZnNldCB0byB0aGUgZW5kIG9mIHRoZSBDUFUtY29udGlndW91cyByZWdpb246IHRoZVxcbisgKiByZXN0IG9mIHRoZSByaW5nLCBvciB0aGUgcmVzdCBvZiB0aGUgY3VycmVudCBwYWdlIHdoZW4gc2NhdHRlcmVkLlxcbisgKi9cXG4rc3RhdGljIHUzMiBtYW5hX2dkX3JpbmdfY29udGlnX2F2YWlsKGNvbnN0IHN0cnVjdCBnZG1hX3F1ZXVlICpxLCB1MzIgb2Zmc2V0KVxcbit7XFxuK1xcdGlmIChxLVxcdTAwM2VtZW1faW5mby5ucl9wYWdlcyBcXHUwMDNlIDApXFxuK1xcdFxcdHJldHVybiBQQUdFX1NJWkUgLSAob2Zmc2V0IFxcdTAwMjYgKFBBR0VfU0laRSAtIDEpKTtcXG4rXFxuK1xcdHJldHVybiBxLVxcdTAwM2VxdWV1ZV9zaXplIC0gb2Zmc2V0O1xcbit9XFxuK1xcbisvKiBDb3B5IHVwIHRvIEBjb3VudCBieXRlcyBmcm9tIHJpbmcgb2Zmc2V0ICpAcG9zIG9mIEBxIGludG8gdXNlciBidWZmZXIgQGJ1ZixcXG4rICogc28gYSBzY2F0dGVyZWQgcmluZyByZWFkcyBiYWNrIGFzIGlmIGl0IHdlcmUgY29udGlndW91cy4gUmV0dXJucyBieXRlc1xcbisgKiBjb3BpZWQsIDAgYXQgZW5kIG9mIHJpbmcsIG9yIGEgbmVnYXRpdmUgZXJybm8uXFxuKyAqL1xcbitzc2l6ZV90IG1hbmFfZ2RfcmVhZF9yaW5nKHN0cnVjdCBnZG1hX3F1ZXVlICpxLCBjaGFyIF9fdXNlciAqYnVmLFxcbitcXHRcXHRcXHQgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpXFxuK3tcXG4rXFx0dTMyIHNpemUgPSBxLVxcdTAwM2VxdWV1ZV9zaXplO1xcbitcXHRsb2ZmX3Qgb2ZmID0gKnBvcztcXG4rXFx0c2l6ZV90IGNvcGllZCA9IDA7XFxuK1xcbitcXHRpZiAob2ZmIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdGlmIChvZmYgXFx1MDAzZT0gc2l6ZSB8fCAhY291bnQpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRjb3VudCA9IG1pbl90KHNpemVfdCwgY291bnQsIHNpemUgLSBvZmYpO1xcbitcXG4rXFx0d2hpbGUgKGNvdW50KSB7XFxuK1xcdFxcdHUzMiBvZmZzZXQgPSBvZmY7XFxuK1xcdFxcdHUzMiBhdmFpbCA9IG1hbmFfZ2RfcmluZ19jb250aWdfYXZhaWwocSwgb2Zmc2V0KTtcXG4rXFx0XFx0c2l6ZV90IGNodW5rID0gbWluX3Qoc2l6ZV90LCBjb3VudCwgYXZhaWwpO1xcbitcXHRcXHRzaXplX3QgbGVmdCA9IGNvcHlfdG9fdXNlcihidWYsIG1hbmFfZ2RfcmluZ19wdHIocSwgb2Zmc2V0KSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgY2h1bmspO1xcbitcXG4rXFx0XFx0Y2h1bmsgLT0gbGVmdDtcXG4rXFx0XFx0YnVmICs9IGNodW5rO1xcbitcXHRcXHRvZmYgKz0gY2h1bms7XFxuK1xcdFxcdGNvcGllZCArPSBjaHVuaztcXG4rXFx0XFx0Y291bnQgLT0gY2h1bms7XFxuK1xcdFxcdGlmIChsZWZ0KVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCFjb3BpZWQpXFxuK1xcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXG4rXFx0KnBvcyA9IG9mZjtcXG4rXFx0cmV0dXJuIGNvcGllZDtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgbWFuYV9nZF9wcm9jZXNzX2VxZShzdHJ1Y3QgZ2RtYV9xdWV1ZSAqZXEpXFxuIHtcXG4gXFx0dTMyIGhlYWQgPSBlcS1cXHUwMDNlaGVhZCAlIChlcS1cXHUwMDNlcXVldWVfc2l6ZSAvIEdETUFfRVFFX1NJWkUpO1xcbiBcXHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyA9IGVxLVxcdTAwM2VnZG1hX2Rldi1cXHUwMDNlZ2RtYV9jb250ZXh0O1xcbi1cXHRzdHJ1Y3QgZ2RtYV9lcWUgKmVxX2VxZV9wdHIgPSBlcS1cXHUwMDNlcXVldWVfbWVtX3B0cjtcXG4gXFx0dW5pb24gZ2RtYV9lcWVfaW5mbyBlcWVfaW5mbztcXG4gXFx0ZW51bSBnZG1hX2VxZV90eXBlIHR5cGU7XFxuIFxcdHN0cnVjdCBnZG1hX2V2ZW50IGV2ZW50O1xcbkBAIC03NjUsNyArODk2LDcgQEAgc3RhdGljIHZvaWQgbWFuYV9nZF9wcm9jZXNzX2VxZShzdHJ1Y3QgZ2RtYV9xdWV1ZSAqZXEpXFxuIFxcdHN0cnVjdCBnZG1hX2VxZSAqZXFlO1xcbiBcXHR1MzIgY3FfaWQ7XFxuIFxcbi1cXHRlcWUgPSBcXHUwMDI2ZXFfZXFlX3B0cltoZWFkXTtcXG4rXFx0ZXFlID0gbWFuYV9nZF9yaW5nX3B0cihlcSwgaGVhZCAqIHNpemVvZigqZXFlKSk7XFxuIFxcdGVxZV9pbmZvLmFzX3VpbnQzMiA9IGVxZS1cXHUwMDNlZXFlX2luZm87XFxuIFxcdHR5cGUgPSBlcWVfaW5mby50eXBlO1xcbiBcXG5AQCAtODI5LDcgKzk2MCw2IEBAIHN0YXRpYyB2b2lkIG1hbmFfZ2RfcHJvY2Vzc19lcV9ldmVudHModm9pZCAqYXJnKVxcbiB7XFxuIFxcdHUzMiBvd25lcl9iaXRzLCBuZXdfYml0cywgb2xkX2JpdHM7XFxuIFxcdHVuaW9uIGdkbWFfZXFlX2luZm8gZXFlX2luZm87XFxuLVxcdHN0cnVjdCBnZG1hX2VxZSAqZXFfZXFlX3B0cjtcXG4gXFx0c3RydWN0IGdkbWFfcXVldWUgKmVxID0gYXJnO1xcbiBcXHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYztcXG4gXFx0c3RydWN0IGdkbWFfZXFlICplcWU7XFxuQEAgLTgzOSwxMSArOTY5LDEwIEBAIHN0YXRpYyB2b2lkIG1hbmFfZ2RfcHJvY2Vzc19lcV9ldmVudHModm9pZCAqYXJnKVxcbiBcXHRnYyA9IGVxLVxcdTAwM2VnZG1hX2Rldi1cXHUwMDNlZ2RtYV9jb250ZXh0O1xcbiBcXG4gXFx0bnVtX2VxZSA9IGVxLVxcdTAwM2VxdWV1ZV9zaXplIC8gR0RNQV9FUUVfU0laRTtcXG4tXFx0ZXFfZXFlX3B0ciA9IGVxLVxcdTAwM2VxdWV1ZV9tZW1fcHRyO1xcbiBcXG4gXFx0LyogUHJvY2VzcyB1cCB0byA1IEVRRXMgYXQgYSB0aW1lLCBhbmQgdXBkYXRlIHRoZSBIVyBoZWFkLiAqL1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgNTsgaSsrKSB7XFxuLVxcdFxcdGVxZSA9IFxcdTAwMjZlcV9lcWVfcHRyW2VxLVxcdTAwM2VoZWFkICUgbnVtX2VxZV07XFxuK1xcdFxcdGVxZSA9IG1hbmFfZ2RfcmluZ19wdHIoZXEsIChlcS1cXHUwMDNlaGVhZCAlIG51bV9lcWUpICogc2l6ZW9mKCplcWUpKTtcXG4gXFx0XFx0ZXFlX2luZm8uYXNfdWludDMyID0gZXFlLVxcdTAwM2VlcWVfaW5mbztcXG4gXFx0XFx0b3duZXJfYml0cyA9IGVxZV9pbmZvLm93bmVyX2JpdHM7XFxuIFxcbkBAIC0xMTA3LDcgKzEyMzYsNyBAQCBpbnQgbWFuYV9nZF9jcmVhdGVfaHdjX3F1ZXVlKHN0cnVjdCBnZG1hX2RldiAqZ2QsXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG4gXFx0Z21pID0gXFx1MDAyNnF1ZXVlLVxcdTAwM2VtZW1faW5mbztcXG4tXFx0ZXJyID0gbWFuYV9nZF9hbGxvY19tZW1vcnkoZ2MsIHNwZWMtXFx1MDAzZXF1ZXVlX3NpemUsIGdtaSk7XFxuK1xcdGVyciA9IG1hbmFfZ2RfYWxsb2NfbWVtb3J5KGdjLCBzcGVjLVxcdTAwM2VxdWV1ZV9zaXplLCBnbWksIGZhbHNlKTtcXG4gXFx0aWYgKGVycikge1xcbiBcXHRcXHRkZXZfZXJyKGdjLVxcdTAwM2VkZXYsIFxcXCJHRE1BIHF1ZXVlIHR5cGU6ICVkLCBzaXplOiAldSwgZ2RtYSBtZW1vcnkgYWxsb2NhdGlvbiBlcnI6ICVkXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRzcGVjLVxcdTAwM2V0eXBlLCBzcGVjLVxcdTAwM2VxdWV1ZV9zaXplLCBlcnIpO1xcbkBAIC0xMTgyLDcgKzEzMTEsNyBAQCBzdGF0aWMgaW50IG1hbmFfZ2RfY3JlYXRlX2RtYV9yZWdpb24oc3RydWN0IGdkbWFfZGV2ICpnZCxcXG4gXFx0aWYgKGxlbmd0aCBcXHUwMDNjIE1BTkFfUEFHRV9TSVpFIHx8ICFpc19wb3dlcl9vZl8yKGxlbmd0aCkpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0aWYgKCFNQU5BX1BBR0VfQUxJR05FRChnbWktXFx1MDAzZXZpcnRfYWRkcikpXFxuK1xcdGlmIChnbWktXFx1MDAzZW5yX3BhZ2VzID09IDAgXFx1MDAyNlxcdTAwMjYgIU1BTkFfUEFHRV9BTElHTkVEKGdtaS1cXHUwMDNldmlydF9hZGRyKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbiBcXHRod2MgPSBnYy1cXHUwMDNlaHdjLmRyaXZlcl9kYXRhO1xcbkBAIC0xMjAyLDggKzEzMzEsMjQgQEAgc3RhdGljIGludCBtYW5hX2dkX2NyZWF0ZV9kbWFfcmVnaW9uKHN0cnVjdCBnZG1hX2RldiAqZ2QsXFxuIFxcdHJlcS1cXHUwMDNlcGFnZV9jb3VudCA9IG51bV9wYWdlO1xcbiBcXHRyZXEtXFx1MDAzZXBhZ2VfYWRkcl9saXN0X2xlbiA9IG51bV9wYWdlO1xcbiBcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG51bV9wYWdlOyBpKyspXFxuLVxcdFxcdHJlcS1cXHUwMDNlcGFnZV9hZGRyX2xpc3RbaV0gPSBnbWktXFx1MDAzZWRtYV9oYW5kbGUgKyAgaSAqIE1BTkFfUEFHRV9TSVpFO1xcbitcXHRpZiAoZ21pLVxcdTAwM2Vucl9wYWdlcyBcXHUwMDNlIDApIHtcXG4rXFx0XFx0dW5zaWduZWQgaW50IHN1YnBhZ2VzID0gUEFHRV9TSVpFIC8gTUFOQV9QQUdFX1NJWkU7XFxuK1xcdFxcdHVuc2lnbmVkIGludCBpZHggPSAwO1xcbitcXHRcXHR1bnNpZ25lZCBpbnQgcGcsIHN1YjtcXG4rXFxuK1xcdFxcdC8qIEVhY2ggUEFHRV9TSVpFIGNodW5rIGlzIHBoeXNpY2FsbHkgY29udGlndW91cyBhbmQgY29udGFpbnNcXG4rXFx0XFx0ICogUEFHRV9TSVpFIC8gTUFOQV9QQUdFX1NJWkUgY29uc2VjdXRpdmUgZGV2aWNlIHBhZ2VzLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0Zm9yIChwZyA9IDA7IHBnIFxcdTAwM2MgZ21pLVxcdTAwM2Vucl9wYWdlczsgcGcrKylcXG4rXFx0XFx0XFx0Zm9yIChzdWIgPSAwOyBzdWIgXFx1MDAzYyBzdWJwYWdlczsgc3ViKyspXFxuK1xcdFxcdFxcdFxcdHJlcS1cXHUwMDNlcGFnZV9hZGRyX2xpc3RbaWR4KytdID1cXG4rXFx0XFx0XFx0XFx0XFx0Z21pLVxcdTAwM2VwYWdlc19kbWFbcGddICtcXG4rXFx0XFx0XFx0XFx0XFx0c3ViICogTUFOQV9QQUdFX1NJWkU7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudW1fcGFnZTsgaSsrKVxcbitcXHRcXHRcXHRyZXEtXFx1MDAzZXBhZ2VfYWRkcl9saXN0W2ldID1cXG4rXFx0XFx0XFx0XFx0Z21pLVxcdTAwM2VkbWFfaGFuZGxlICsgaSAqIE1BTkFfUEFHRV9TSVpFO1xcbitcXHR9XFxuIFxcbiBcXHRlcnIgPSBtYW5hX2dkX3NlbmRfcmVxdWVzdChnYywgcmVxX21zZ19zaXplLCByZXEsIHNpemVvZihyZXNwKSwgXFx1MDAyNnJlc3ApO1xcbiBcXHRpZiAoZXJyKVxcbkBAIC0xMjQ2LDcgKzEzOTEsNyBAQCBpbnQgbWFuYV9nZF9jcmVhdGVfbWFuYV9lcShzdHJ1Y3QgZ2RtYV9kZXYgKmdkLFxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuIFxcdGdtaSA9IFxcdTAwMjZxdWV1ZS1cXHUwMDNlbWVtX2luZm87XFxuLVxcdGVyciA9IG1hbmFfZ2RfYWxsb2NfbWVtb3J5KGdjLCBzcGVjLVxcdTAwM2VxdWV1ZV9zaXplLCBnbWkpO1xcbitcXHRlcnIgPSBtYW5hX2dkX2FsbG9jX21lbW9yeShnYywgc3BlYy1cXHUwMDNlcXVldWVfc2l6ZSwgZ21pLCB0cnVlKTtcXG4gXFx0aWYgKGVycikge1xcbiBcXHRcXHRkZXZfZXJyKGdjLVxcdTAwM2VkZXYsIFxcXCJHRE1BIHF1ZXVlIHR5cGU6ICVkLCBzaXplOiAldSwgZ2RtYSBtZW1vcnkgYWxsb2NhdGlvbiBlcnI6ICVkXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRzcGVjLVxcdTAwM2V0eXBlLCBzcGVjLVxcdTAwM2VxdWV1ZV9zaXplLCBlcnIpO1xcbkBAIC0xMzAxLDcgKzE0NDYsNyBAQCBpbnQgbWFuYV9nZF9jcmVhdGVfbWFuYV93cV9jcShzdHJ1Y3QgZ2RtYV9kZXYgKmdkLFxcbiBcXHRxdWV1ZS1cXHUwMDNlaWQgPSBJTlZBTElEX1FVRVVFX0lEO1xcbiBcXG4gXFx0Z21pID0gXFx1MDAyNnF1ZXVlLVxcdTAwM2VtZW1faW5mbztcXG4tXFx0ZXJyID0gbWFuYV9nZF9hbGxvY19tZW1vcnkoZ2MsIHNwZWMtXFx1MDAzZXF1ZXVlX3NpemUsIGdtaSk7XFxuK1xcdGVyciA9IG1hbmFfZ2RfYWxsb2NfbWVtb3J5KGdjLCBzcGVjLVxcdTAwM2VxdWV1ZV9zaXplLCBnbWksIHRydWUpO1xcbiBcXHRpZiAoZXJyKSB7XFxuIFxcdFxcdGRldl9lcnIoZ2MtXFx1MDAzZWRldiwgXFxcIkdETUEgcXVldWUgdHlwZTogJWQsIHNpemU6ICV1LCBtZW1vcnkgYWxsb2NhdGlvbiBlcnI6ICVkXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRzcGVjLVxcdTAwM2V0eXBlLCBzcGVjLVxcdTAwM2VxdWV1ZV9zaXplLCBlcnIpO1xcbkBAIC0xNTA4LDcgKzE2NTMsNyBAQCB1OCAqbWFuYV9nZF9nZXRfd3FlX3B0cihjb25zdCBzdHJ1Y3QgZ2RtYV9xdWV1ZSAqd3EsIHUzMiB3cWVfb2Zmc2V0KVxcbiBcXG4gXFx0V0FSTl9PTl9PTkNFKChvZmZzZXQgKyBHRE1BX1dRRV9CVV9TSVpFKSBcXHUwMDNlIHdxLVxcdTAwM2VxdWV1ZV9zaXplKTtcXG4gXFxuLVxcdHJldHVybiB3cS1cXHUwMDNlcXVldWVfbWVtX3B0ciArIG9mZnNldDtcXG4rXFx0cmV0dXJuIG1hbmFfZ2RfcmluZ19wdHIod3EsIG9mZnNldCk7XFxuIH1cXG4gXFxuIHN0YXRpYyB1MzIgbWFuYV9nZF93cml0ZV9jbGllbnRfb29iKGNvbnN0IHN0cnVjdCBnZG1hX3dxZV9yZXF1ZXN0ICp3cWVfcmVxLFxcbkBAIC0xNTU0LDI3ICsxNjk5LDI0IEBAIHN0YXRpYyB1MzIgbWFuYV9nZF93cml0ZV9jbGllbnRfb29iKGNvbnN0IHN0cnVjdCBnZG1hX3dxZV9yZXF1ZXN0ICp3cWVfcmVxLFxcbiBcXHRyZXR1cm4gc2l6ZW9mKGhlYWRlcikgKyBjbGllbnRfb29iX3NpemU7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIG1hbmFfZ2Rfd3JpdGVfc2dsKHN0cnVjdCBnZG1hX3F1ZXVlICp3cSwgdTggKndxZV9wdHIsXFxuK3N0YXRpYyB2b2lkIG1hbmFfZ2Rfd3JpdGVfc2dsKHN0cnVjdCBnZG1hX3F1ZXVlICp3cSwgdTMyIHNnbF9vZmZzZXQsXFxuIFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBnZG1hX3dxZV9yZXF1ZXN0ICp3cWVfcmVxKVxcbiB7XFxuK1xcdHUzMiBzaXplX3RvX2VuZCA9IG1hbmFfZ2RfcmluZ19jb250aWdfYXZhaWwod3EsIHNnbF9vZmZzZXQpO1xcbiBcXHR1MzIgc2dsX3NpemUgPSBzaXplb2Yoc3RydWN0IGdkbWFfc2dlKSAqIHdxZV9yZXEtXFx1MDAzZW51bV9zZ2U7XFxuIFxcdGNvbnN0IHU4ICphZGRyZXNzID0gKHU4ICopd3FlX3JlcS1cXHUwMDNlc2dsO1xcbi1cXHR1OCAqYmFzZV9wdHIsICplbmRfcHRyO1xcbi1cXHR1MzIgc2l6ZV90b19lbmQ7XFxuLVxcbi1cXHRiYXNlX3B0ciA9IHdxLVxcdTAwM2VxdWV1ZV9tZW1fcHRyO1xcbi1cXHRlbmRfcHRyID0gYmFzZV9wdHIgKyB3cS1cXHUwMDNlcXVldWVfc2l6ZTtcXG4tXFx0c2l6ZV90b19lbmQgPSAodTMyKShlbmRfcHRyIC0gd3FlX3B0cik7XFxuIFxcbiBcXHRpZiAoc2l6ZV90b19lbmQgXFx1MDAzYyBzZ2xfc2l6ZSkge1xcbi1cXHRcXHRtZW1jcHkod3FlX3B0ciwgYWRkcmVzcywgc2l6ZV90b19lbmQpO1xcbitcXHRcXHRtZW1jcHkobWFuYV9nZF9yaW5nX3B0cih3cSwgc2dsX29mZnNldCksIGFkZHJlc3MsIHNpemVfdG9fZW5kKTtcXG4gXFxuLVxcdFxcdHdxZV9wdHIgPSBiYXNlX3B0cjtcXG4gXFx0XFx0YWRkcmVzcyArPSBzaXplX3RvX2VuZDtcXG4gXFx0XFx0c2dsX3NpemUgLT0gc2l6ZV90b19lbmQ7XFxuK1xcdFxcdHNnbF9vZmZzZXQgKz0gc2l6ZV90b19lbmQ7XFxuK1xcdFxcdGlmIChzZ2xfb2Zmc2V0ID09IHdxLVxcdTAwM2VxdWV1ZV9zaXplKVxcbitcXHRcXHRcXHRzZ2xfb2Zmc2V0ID0gMDtcXG4gXFx0fVxcbiBcXG4tXFx0bWVtY3B5KHdxZV9wdHIsIGFkZHJlc3MsIHNnbF9zaXplKTtcXG4rXFx0bWVtY3B5KG1hbmFfZ2RfcmluZ19wdHIod3EsIHNnbF9vZmZzZXQpLCBhZGRyZXNzLCBzZ2xfc2l6ZSk7XFxuIH1cXG4gXFxuIGludCBtYW5hX2dkX3Bvc3Rfd29ya19yZXF1ZXN0KHN0cnVjdCBnZG1hX3F1ZXVlICp3cSxcXG5AQCAtMTU4NCw4ICsxNzI2LDEyIEBAIGludCBtYW5hX2dkX3Bvc3Rfd29ya19yZXF1ZXN0KHN0cnVjdCBnZG1hX3F1ZXVlICp3cSxcXG4gXFx0dTMyIGNsaWVudF9vb2Jfc2l6ZSA9IHdxZV9yZXEtXFx1MDAzZWlubGluZV9vb2Jfc2l6ZTtcXG4gXFx0dTMyIHNnbF9kYXRhX3NpemU7XFxuIFxcdHUzMiBtYXhfd3FlX3NpemU7XFxuK1xcdHUzMiB3cWVfb2Zmc2V0O1xcbitcXHR1MzIgc2dsX29mZnNldDtcXG4gXFx0dTMyIHdxZV9zaXplO1xcbitcXHR1MzIgb29iX2xlbjtcXG4gXFx0dTggKndxZV9wdHI7XFxuK1xcdHUzMiBoZWFkO1xcbiBcXG4gXFx0aWYgKHdxZV9yZXEtXFx1MDAzZW51bV9zZ2UgPT0gMClcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuQEAgLTE2MTcsMTMgKzE3NjMsMTcgQEAgaW50IG1hbmFfZ2RfcG9zdF93b3JrX3JlcXVlc3Qoc3RydWN0IGdkbWFfcXVldWUgKndxLFxcbiBcXHRpZiAod3FlX2luZm8pXFxuIFxcdFxcdHdxZV9pbmZvLVxcdTAwM2V3cWVfc2l6ZV9pbl9idSA9IHdxZV9zaXplIC8gR0RNQV9XUUVfQlVfU0laRTtcXG4gXFxuLVxcdHdxZV9wdHIgPSBtYW5hX2dkX2dldF93cWVfcHRyKHdxLCB3cS1cXHUwMDNlaGVhZCk7XFxuLVxcdHdxZV9wdHIgKz0gbWFuYV9nZF93cml0ZV9jbGllbnRfb29iKHdxZV9yZXEsIHdxLVxcdTAwM2V0eXBlLCBjbGllbnRfb29iX3NpemUsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBzZ2xfZGF0YV9zaXplLCB3cWVfcHRyKTtcXG4tXFx0aWYgKHdxZV9wdHIgXFx1MDAzZT0gKHU4ICopd3EtXFx1MDAzZXF1ZXVlX21lbV9wdHIgKyB3cS1cXHUwMDNlcXVldWVfc2l6ZSlcXG4tXFx0XFx0d3FlX3B0ciAtPSB3cS1cXHUwMDNlcXVldWVfc2l6ZTtcXG4rXFx0aGVhZCA9IHdxLVxcdTAwM2VoZWFkO1xcbitcXHR3cWVfb2Zmc2V0ID0gKGhlYWQgKiBHRE1BX1dRRV9CVV9TSVpFKSBcXHUwMDI2ICh3cS1cXHUwMDNlcXVldWVfc2l6ZSAtIDEpO1xcbitcXHR3cWVfcHRyID0gbWFuYV9nZF9nZXRfd3FlX3B0cih3cSwgaGVhZCk7XFxuK1xcdG9vYl9sZW4gPSBtYW5hX2dkX3dyaXRlX2NsaWVudF9vb2Iod3FlX3JlcSwgd3EtXFx1MDAzZXR5cGUsIGNsaWVudF9vb2Jfc2l6ZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgc2dsX2RhdGFfc2l6ZSwgd3FlX3B0cik7XFxuK1xcbitcXHRzZ2xfb2Zmc2V0ID0gd3FlX29mZnNldCArIG9vYl9sZW47XFxuK1xcdGlmIChzZ2xfb2Zmc2V0IFxcdTAwM2U9IHdxLVxcdTAwM2VxdWV1ZV9zaXplKVxcbitcXHRcXHRzZ2xfb2Zmc2V0IC09IHdxLVxcdTAwM2VxdWV1ZV9zaXplO1xcbiBcXG4tXFx0bWFuYV9nZF93cml0ZV9zZ2wod3EsIHdxZV9wdHIsIHdxZV9yZXEpO1xcbitcXHRtYW5hX2dkX3dyaXRlX3NnbCh3cSwgc2dsX29mZnNldCwgd3FlX3JlcSk7XFxuIFxcbiBcXHR3cS1cXHUwMDNlaGVhZCArPSB3cWVfc2l6ZSAvIEdETUFfV1FFX0JVX1NJWkU7XFxuIFxcbkBAIC0xNjUzLDExICsxODAzLDEwIEBAIGludCBtYW5hX2dkX3Bvc3RfYW5kX3Jpbmcoc3RydWN0IGdkbWFfcXVldWUgKnF1ZXVlLFxcbiBzdGF0aWMgaW50IG1hbmFfZ2RfcmVhZF9jcWUoc3RydWN0IGdkbWFfcXVldWUgKmNxLCBzdHJ1Y3QgZ2RtYV9jb21wICpjb21wKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGludCBudW1fY3FlID0gY3EtXFx1MDAzZXF1ZXVlX3NpemUgLyBzaXplb2Yoc3RydWN0IGdkbWFfY3FlKTtcXG4tXFx0c3RydWN0IGdkbWFfY3FlICpjcV9jcWUgPSBjcS1cXHUwMDNlcXVldWVfbWVtX3B0cjtcXG4gXFx0dTMyIG93bmVyX2JpdHMsIG5ld19iaXRzLCBvbGRfYml0cztcXG4gXFx0c3RydWN0IGdkbWFfY3FlICpjcWU7XFxuIFxcbi1cXHRjcWUgPSBcXHUwMDI2Y3FfY3FlW2NxLVxcdTAwM2VoZWFkICUgbnVtX2NxZV07XFxuK1xcdGNxZSA9IG1hbmFfZ2RfcmluZ19wdHIoY3EsIChjcS1cXHUwMDNlaGVhZCAlIG51bV9jcWUpICogc2l6ZW9mKCpjcWUpKTtcXG4gXFx0b3duZXJfYml0cyA9IGNxZS1cXHUwMDNlY3FlX2luZm8ub3duZXJfYml0cztcXG4gXFxuIFxcdG9sZF9iaXRzID0gKGNxLVxcdTAwM2VoZWFkIC8gbnVtX2NxZSAtIDEpIFxcdTAwMjYgR0RNQV9DUUVfT1dORVJfTUFTSztcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvaHdfY2hhbm5lbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvaHdfY2hhbm5lbC5jXFxuaW5kZXggZTNjMjRkNTBkYWQwNy4uMjYzZTdjNGUyOTM0MSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9od19jaGFubmVsLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9od19jaGFubmVsLmNcXG5AQCAtNDc5LDcgKzQ3OSw3IEBAIHN0YXRpYyBpbnQgbWFuYV9od2NfYWxsb2NfZG1hX2J1ZihzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUxNiBxX2RlcHRoLFxcbiBcXHRidWZfc2l6ZSA9IE1BTkFfUEFHRV9BTElHTihxX2RlcHRoICogbWF4X21zZ19zaXplKTtcXG4gXFxuIFxcdGdtaSA9IFxcdTAwMjZkbWFfYnVmLVxcdTAwM2VtZW1faW5mbztcXG4tXFx0ZXJyID0gbWFuYV9nZF9hbGxvY19tZW1vcnkoZ2MsIGJ1Zl9zaXplLCBnbWkpO1xcbitcXHRlcnIgPSBtYW5hX2dkX2FsbG9jX21lbW9yeShnYywgYnVmX3NpemUsIGdtaSwgZmFsc2UpO1xcbiBcXHRpZiAoZXJyKSB7XFxuIFxcdFxcdGRldl9lcnIoaHdjLVxcdTAwM2VkZXYsIFxcXCJGYWlsZWQgdG8gYWxsb2NhdGUgRE1BIGJ1ZmZlciBzaXplOiAldSwgZXJyICVkXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRidWZfc2l6ZSwgZXJyKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jXFxuaW5kZXggMjUxOWE5OGFkMDBiMC4uYjgwMzcxMTk2ODA0MiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmNcXG5AQCAtNDAsNiArNDAsOSBAQCBzdGF0aWMgc3NpemVfdCBtYW5hX2RiZ19xX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudFxcbiB7XFxuIFxcdHN0cnVjdCBnZG1hX3F1ZXVlICpnZG1hX3EgPSBmaWxwLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuIFxcbitcXHRpZiAoZ2RtYV9xLVxcdTAwM2VtZW1faW5mby5ucl9wYWdlcylcXG4rXFx0XFx0cmV0dXJuIG1hbmFfZ2RfcmVhZF9yaW5nKGdkbWFfcSwgYnVmLCBjb3VudCwgcG9zKTtcXG4rXFxuIFxcdHJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcihidWYsIGNvdW50LCBwb3MsIGdkbWFfcS1cXHUwMDNlcXVldWVfbWVtX3B0cixcXG4gXFx0XFx0XFx0XFx0ICAgICAgIGdkbWFfcS1cXHUwMDNlcXVldWVfc2l6ZSk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbWFuYS9nZG1hLmggYi9pbmNsdWRlL25ldC9tYW5hL2dkbWEuaFxcbmluZGV4IDg1MjljZWYwZDdjNDUuLmIwYjMyMmE4MGI2MjkgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvbWFuYS9nZG1hLmhcXG4rKysgYi9pbmNsdWRlL25ldC9tYW5hL2dkbWEuaFxcbkBAIC0yNDAsNiArMjQwLDE0IEBAIHN0cnVjdCBnZG1hX21lbV9pbmZvIHtcXG4gXFx0dm9pZCAqdmlydF9hZGRyO1xcbiBcXHR1NjQgbGVuZ3RoO1xcbiBcXG4rXFx0LyogU2NhdHRlcmVkIGZhbGxiYWNrOiB3aGVuIEBucl9wYWdlcyBcXHUwMDNlIDAgdGhlIHJpbmcgaXMgdGhhdCBtYW55XFxuK1xcdCAqIFBBR0VfU0laRSBjb2hlcmVudCBhbGxvY2F0aW9ucyBpbiBAcGFnZXNfdmEvQHBhZ2VzX2RtYSwgbm90XFxuK1xcdCAqIEB2aXJ0X2FkZHIvQGRtYV9oYW5kbGUuXFxuK1xcdCAqL1xcbitcXHR2b2lkICoqcGFnZXNfdmE7XFxuK1xcdGRtYV9hZGRyX3QgKnBhZ2VzX2RtYTtcXG4rXFx0dW5zaWduZWQgaW50IG5yX3BhZ2VzO1xcbitcXG4gXFx0LyogQWxsb2NhdGVkIGJ5IHRoZSBQRiBkcml2ZXIgKi9cXG4gXFx0dTY0IGRtYV9yZWdpb25faGFuZGxlO1xcbiB9O1xcbkBAIC01MTIsNiArNTIwLDkgQEAgaW50IG1hbmFfZ2RfcG9sbF9jcShzdHJ1Y3QgZ2RtYV9xdWV1ZSAqY3EsIHN0cnVjdCBnZG1hX2NvbXAgKmNvbXAsIGludCBudW1fY3FlKTtcXG4gXFxuIHZvaWQgbWFuYV9nZF9yaW5nX2NxKHN0cnVjdCBnZG1hX3F1ZXVlICpjcSwgdTggYXJtX2JpdCk7XFxuIFxcbitzc2l6ZV90IG1hbmFfZ2RfcmVhZF9yaW5nKHN0cnVjdCBnZG1hX3F1ZXVlICpxLCBjaGFyIF9fdXNlciAqYnVmLFxcbitcXHRcXHRcXHQgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpO1xcbitcXG4gaW50IG1hbmFfc2NoZWR1bGVfc2Vydl93b3JrKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjLCBlbnVtIGdkbWFfZXFlX3R5cGUgdHlwZSk7XFxuIFxcbiB2b2lkIG1hbmFfZ2RfcmluZ19kaW0oc3RydWN0IGdkbWFfcXVldWUgKmNxLCB1MzIgbW9kX3VzZWMsIGJvb2wgbW9kX3VzZWNfdmxkLFxcbkBAIC02NjgsNiArNjc5LDkgQEAgZW51bSB7XFxuIC8qIERyaXZlciBzdXBwb3J0cyBkeW5hbWljIGludGVycnVwdCBtb2RlcmF0aW9uIC0gRElNICovXFxuICNkZWZpbmUgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9EWU5fSU5URVJSVVBUX01PREVSQVRJT04gQklUKDI4KVxcbiBcXG4rLyogRHJpdmVyIHN1cHBvcnRzIG5vbi1jb250aWd1b3VzIHF1ZXVlIGJ1ZmZlcnMgKi9cXG4rI2RlZmluZSBHRE1BX0RSVl9DQVBfRkxBR18xX05PTl9DT05USUdVT1VTX0JVRkZFUlMgQklUKDMwKVxcbitcXG4gI2RlZmluZSBHRE1BX0RSVl9DQVBfRkxBR1MxIFxcXFxcXG4gXFx0KEdETUFfRFJWX0NBUF9GTEFHXzFfRVFfU0hBUklOR19NVUxUSV9WUE9SVCB8IFxcXFxcXG4gXFx0IEdETUFfRFJWX0NBUF9GTEFHXzFfTkFQSV9XS0RPTkVfRklYIHwgXFxcXFxcbkBAIC02ODQsNyArNjk4LDggQEAgZW51bSB7XFxuIFxcdCBHRE1BX0RSVl9DQVBfRkxBR18xX0hBTkRMRV9TVEFMTF9TUV9SRUNPVkVSWSB8IFxcXFxcXG4gXFx0IEdETUFfRFJWX0NBUF9GTEFHXzFfSFdDX1RJTUVPVVRfUkVDT1ZFUlkgfCBcXFxcXFxuIFxcdCBHRE1BX0RSVl9DQVBfRkxBR18xX0VRX01TSV9VTlNIQVJFX01VTFRJX1ZQT1JUIHwgXFxcXFxcbi1cXHQgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9EWU5fSU5URVJSVVBUX01PREVSQVRJT04pXFxuK1xcdCBHRE1BX0RSVl9DQVBfRkxBR18xX0RZTl9JTlRFUlJVUFRfTU9ERVJBVElPTiB8IFxcXFxcXG4rXFx0IEdETUFfRFJWX0NBUF9GTEFHXzFfTk9OX0NPTlRJR1VPVVNfQlVGRkVSUylcXG4gXFxuICNkZWZpbmUgR0RNQV9EUlZfQ0FQX0ZMQUdTMiAwXFxuIFxcbkBAIC0xMDQ1LDcgKzEwNjAsNyBAQCB2b2lkIG1hbmFfZ2Rfd3FfcmluZ19kb29yYmVsbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyxcXG4gXFx0XFx0XFx0ICAgICAgc3RydWN0IGdkbWFfcXVldWUgKnF1ZXVlKTtcXG4gXFxuIGludCBtYW5hX2dkX2FsbG9jX21lbW9yeShzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYywgdW5zaWduZWQgaW50IGxlbmd0aCxcXG4tXFx0XFx0XFx0IHN0cnVjdCBnZG1hX21lbV9pbmZvICpnbWkpO1xcbitcXHRcXHRcXHQgc3RydWN0IGdkbWFfbWVtX2luZm8gKmdtaSwgYm9vbCBhbGxvd19zY2F0dGVyKTtcXG4gXFxuIHZvaWQgbWFuYV9nZF9mcmVlX21lbW9yeShzdHJ1Y3QgZ2RtYV9tZW1faW5mbyAqZ21pKTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIyOjAzOjQ1LjYxNjg3MDI1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTk1NTkyNjA0NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyIChNQU5BKSBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgZGV2aWNlIGRyaXZlci4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgZW52aXJvbm1lbnRzIHVzZWQgYnkgc3l6a2FsbGVyLCBtYWtpbmcgdGhlIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIHN0YW5kYXJkIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiZDhiZWNkMDViMjIwZWU0YzBjYzBmMzJkNDE4MmQ1OGMyNTZmZWVhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAyMjowMzo0NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmNcbmluZGV4IGEzOGQ0YmI3NDYyMWYuLmVkOWFmMzE0ZTRlZGUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmNcbkBAIC0xMSw2ICsxMSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbXNpLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcnFkb21haW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4cG9ydC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdWFjY2Vzcy5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjbmV0L21hbmEvbWFuYS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L21hbmEvaHdfY2hhbm5lbC5oXHUwMDNlXG5AQCAtMzc0LDI4ICszNzUsOTYgQEAgaW50IG1hbmFfZ2Rfc2VuZF9yZXF1ZXN0KHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjLCB1MzIgcmVxX2xlbiwgY29uc3Qgdm9pZCAqcmVxLFxuIEVYUE9SVF9TWU1CT0xfTlMobWFuYV9nZF9zZW5kX3JlcXVlc3QsIFwiTkVUX01BTkFcIik7XG4gXG4gaW50IG1hbmFfZ2RfYWxsb2NfbWVtb3J5KHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjLCB1bnNpZ25lZCBpbnQgbGVuZ3RoLFxuLVx0XHRcdCBzdHJ1Y3QgZ2RtYV9tZW1faW5mbyAqZ21pKVxuK1x0XHRcdCBzdHJ1Y3QgZ2RtYV9tZW1faW5mbyAqZ21pLCBib29sIGFsbG93X3NjYXR0ZXIpXG4ge1xuK1x0dW5zaWduZWQgaW50IG5wYWdlcywgaTtcbiBcdGRtYV9hZGRyX3QgZG1hX2hhbmRsZTtcbitcdGJvb2wgY2FuX2ZhbGxiYWNrO1xuIFx0dm9pZCAqYnVmO1xuIFxuIFx0aWYgKGxlbmd0aCBcdTAwM2MgTUFOQV9QQUdFX1NJWkUgfHwgIWlzX3Bvd2VyX29mXzIobGVuZ3RoKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRnbWktXHUwMDNlZGV2ID0gZ2MtXHUwMDNlZGV2O1xuLVx0YnVmID0gZG1hX2FsbG9jX2NvaGVyZW50KGdtaS1cdTAwM2VkZXYsIGxlbmd0aCwgXHUwMDI2ZG1hX2hhbmRsZSwgR0ZQX0tFUk5FTCk7XG4tXHRpZiAoIWJ1ZilcbitcbitcdC8qIEFuIGFsbG9jYXRpb24gdGhhdCBmaXRzIGluIG9uZSBwYWdlIGRvZXMgbm90IGJlbmVmaXQgZnJvbVxuK1x0ICogZmFsbGJhY2suXG4rXHQgKi9cbitcdGNhbl9mYWxsYmFjayA9IGFsbG93X3NjYXR0ZXIgXHUwMDI2XHUwMDI2IGxlbmd0aCBcdTAwM2UgUEFHRV9TSVpFO1xuK1xuK1x0LyogV2FybiBvbmx5IHdoZW4gdGhlcmUgaXMgbm8gZmFsbGJhY2sgdG8gcmVzY3VlIHRoZSBmYWlsdXJlLiAqL1xuK1x0YnVmID0gZG1hX2FsbG9jX2NvaGVyZW50KGdtaS1cdTAwM2VkZXYsIGxlbmd0aCwgXHUwMDI2ZG1hX2hhbmRsZSxcbitcdFx0XHRcdCBHRlBfS0VSTkVMIHxcbitcdFx0XHRcdCAoY2FuX2ZhbGxiYWNrID8gX19HRlBfTk9XQVJOIDogMCkpO1xuK1x0aWYgKGJ1Zikge1xuK1x0XHRnbWktXHUwMDNlZG1hX2hhbmRsZSA9IGRtYV9oYW5kbGU7XG4rXHRcdGdtaS1cdTAwM2V2aXJ0X2FkZHIgPSBidWY7XG4rXHRcdGdtaS1cdTAwM2VsZW5ndGggPSBsZW5ndGg7XG4rXHRcdGdtaS1cdTAwM2Vucl9wYWdlcyA9IDA7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0aWYgKCFjYW5fZmFsbGJhY2spXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0Z21pLVx1MDAzZWRtYV9oYW5kbGUgPSBkbWFfaGFuZGxlO1xuLVx0Z21pLVx1MDAzZXZpcnRfYWRkciA9IGJ1ZjtcbitcdC8qIGxlbmd0aCBpcyBhIHBvd2VyIG9mIDIgYWJvdmUgUEFHRV9TSVpFLCBzbyB0aGlzIGRpdmlkZXMgZXhhY3RseS4gKi9cbitcdG5wYWdlcyA9IGxlbmd0aCAvIFBBR0VfU0laRTtcbitcbitcdGdtaS1cdTAwM2VwYWdlc192YSA9IGt2Y2FsbG9jKG5wYWdlcywgc2l6ZW9mKCpnbWktXHUwMDNlcGFnZXNfdmEpLCBHRlBfS0VSTkVMKTtcbitcdGlmICghZ21pLVx1MDAzZXBhZ2VzX3ZhKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdGdtaS1cdTAwM2VwYWdlc19kbWEgPSBrdmNhbGxvYyhucGFnZXMsIHNpemVvZigqZ21pLVx1MDAzZXBhZ2VzX2RtYSksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFnbWktXHUwMDNlcGFnZXNfZG1hKVxuK1x0XHRnb3RvIGZyZWVfdmE7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucGFnZXM7IGkrKykge1xuK1x0XHRnbWktXHUwMDNlcGFnZXNfdmFbaV0gPSBkbWFfYWxsb2NfY29oZXJlbnQoZ21pLVx1MDAzZWRldiwgUEFHRV9TSVpFLFxuK1x0XHRcdFx0XHRcdCAgICAgIFx1MDAyNmdtaS1cdTAwM2VwYWdlc19kbWFbaV0sXG4rXHRcdFx0XHRcdFx0ICAgICAgR0ZQX0tFUk5FTCk7XG4rXHRcdGlmICghZ21pLVx1MDAzZXBhZ2VzX3ZhW2ldKVxuK1x0XHRcdGdvdG8gZnJlZV9wYWdlcztcbitcdH1cbitcbitcdGRldl9pbmZvX3JhdGVsaW1pdGVkKGdtaS1cdTAwM2VkZXYsXG4rXHRcdFx0ICAgICBcImNvbnRpZ3VvdXMgJXUtYnl0ZSBETUEgYWxsb2MgZmFpbGVkOyB1c2luZyAldSBzY2F0dGVyZWQgcGFnZXNcXG5cIixcbitcdFx0XHQgICAgIGxlbmd0aCwgbnBhZ2VzKTtcbitcbitcdGdtaS1cdTAwM2V2aXJ0X2FkZHIgPSBOVUxMO1xuK1x0Z21pLVx1MDAzZWRtYV9oYW5kbGUgPSAwO1xuIFx0Z21pLVx1MDAzZWxlbmd0aCA9IGxlbmd0aDtcbitcdGdtaS1cdTAwM2Vucl9wYWdlcyA9IG5wYWdlcztcbiBcbiBcdHJldHVybiAwO1xuK1xuK2ZyZWVfcGFnZXM6XG4rXHR3aGlsZSAoaS0tKVxuK1x0XHRkbWFfZnJlZV9jb2hlcmVudChnbWktXHUwMDNlZGV2LCBQQUdFX1NJWkUsIGdtaS1cdTAwM2VwYWdlc192YVtpXSxcbitcdFx0XHRcdCAgZ21pLVx1MDAzZXBhZ2VzX2RtYVtpXSk7XG4rXHRrdmZyZWUoZ21pLVx1MDAzZXBhZ2VzX2RtYSk7XG4rXHRnbWktXHUwMDNlcGFnZXNfZG1hID0gTlVMTDtcbitmcmVlX3ZhOlxuK1x0a3ZmcmVlKGdtaS1cdTAwM2VwYWdlc192YSk7XG4rXHRnbWktXHUwMDNlcGFnZXNfdmEgPSBOVUxMO1xuK1x0cmV0dXJuIC1FTk9NRU07XG4gfVxuIFxuIHZvaWQgbWFuYV9nZF9mcmVlX21lbW9yeShzdHJ1Y3QgZ2RtYV9tZW1faW5mbyAqZ21pKVxuIHtcbitcdHVuc2lnbmVkIGludCBpO1xuK1xuK1x0aWYgKGdtaS1cdTAwM2Vucl9wYWdlcyBcdTAwM2UgMCkge1xuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBnbWktXHUwMDNlbnJfcGFnZXM7IGkrKylcbitcdFx0XHRkbWFfZnJlZV9jb2hlcmVudChnbWktXHUwMDNlZGV2LCBQQUdFX1NJWkUsIGdtaS1cdTAwM2VwYWdlc192YVtpXSxcbitcdFx0XHRcdFx0ICBnbWktXHUwMDNlcGFnZXNfZG1hW2ldKTtcbitcdFx0a3ZmcmVlKGdtaS1cdTAwM2VwYWdlc192YSk7XG4rXHRcdGt2ZnJlZShnbWktXHUwMDNlcGFnZXNfZG1hKTtcbitcdFx0Z21pLVx1MDAzZXBhZ2VzX3ZhID0gTlVMTDtcbitcdFx0Z21pLVx1MDAzZXBhZ2VzX2RtYSA9IE5VTEw7XG4rXHRcdGdtaS1cdTAwM2Vucl9wYWdlcyA9IDA7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbiBcdGRtYV9mcmVlX2NvaGVyZW50KGdtaS1cdTAwM2VkZXYsIGdtaS1cdTAwM2VsZW5ndGgsIGdtaS1cdTAwM2V2aXJ0X2FkZHIsXG4gXHRcdFx0ICBnbWktXHUwMDNlZG1hX2hhbmRsZSk7XG4gfVxuQEAgLTc1MywxMSArODIyLDczIEBAIGludCBtYW5hX3NjaGVkdWxlX3NlcnZfd29yayhzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYywgZW51bSBnZG1hX2VxZV90eXBlIHR5cGUpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rLyogUmV0dXJuIHRoZSBDUFUgYWRkcmVzcyBvZiBieXRlIEBvZmZzZXQgd2l0aGluIGEgcXVldWUncyByaW5nIGJ1ZmZlci4gKi9cbitzdGF0aWMgdm9pZCAqbWFuYV9nZF9yaW5nX3B0cihjb25zdCBzdHJ1Y3QgZ2RtYV9xdWV1ZSAqcSwgdTMyIG9mZnNldClcbit7XG4rXHRjb25zdCBzdHJ1Y3QgZ2RtYV9tZW1faW5mbyAqZ21pID0gXHUwMDI2cS1cdTAwM2VtZW1faW5mbztcbitcbitcdGlmIChnbWktXHUwMDNlbnJfcGFnZXMgXHUwMDNlIDApXG4rXHRcdHJldHVybiAodTggKilnbWktXHUwMDNlcGFnZXNfdmFbb2Zmc2V0IC8gUEFHRV9TSVpFXSArXG4rXHRcdCAgICAgICAob2Zmc2V0IFx1MDAyNiAoUEFHRV9TSVpFIC0gMSkpO1xuK1xuK1x0cmV0dXJuIHEtXHUwMDNlcXVldWVfbWVtX3B0ciArIG9mZnNldDtcbit9XG4rXG4rLyogTnVtYmVyIG9mIGJ5dGVzIGZyb20gQG9mZnNldCB0byB0aGUgZW5kIG9mIHRoZSBDUFUtY29udGlndW91cyByZWdpb246IHRoZVxuKyAqIHJlc3Qgb2YgdGhlIHJpbmcsIG9yIHRoZSByZXN0IG9mIHRoZSBjdXJyZW50IHBhZ2Ugd2hlbiBzY2F0dGVyZWQuXG4rICovXG4rc3RhdGljIHUzMiBtYW5hX2dkX3JpbmdfY29udGlnX2F2YWlsKGNvbnN0IHN0cnVjdCBnZG1hX3F1ZXVlICpxLCB1MzIgb2Zmc2V0KVxuK3tcbitcdGlmIChxLVx1MDAzZW1lbV9pbmZvLm5yX3BhZ2VzIFx1MDAzZSAwKVxuK1x0XHRyZXR1cm4gUEFHRV9TSVpFIC0gKG9mZnNldCBcdTAwMjYgKFBBR0VfU0laRSAtIDEpKTtcbitcbitcdHJldHVybiBxLVx1MDAzZXF1ZXVlX3NpemUgLSBvZmZzZXQ7XG4rfVxuK1xuKy8qIENvcHkgdXAgdG8gQGNvdW50IGJ5dGVzIGZyb20gcmluZyBvZmZzZXQgKkBwb3Mgb2YgQHEgaW50byB1c2VyIGJ1ZmZlciBAYnVmLFxuKyAqIHNvIGEgc2NhdHRlcmVkIHJpbmcgcmVhZHMgYmFjayBhcyBpZiBpdCB3ZXJlIGNvbnRpZ3VvdXMuIFJldHVybnMgYnl0ZXNcbisgKiBjb3BpZWQsIDAgYXQgZW5kIG9mIHJpbmcsIG9yIGEgbmVnYXRpdmUgZXJybm8uXG4rICovXG4rc3NpemVfdCBtYW5hX2dkX3JlYWRfcmluZyhzdHJ1Y3QgZ2RtYV9xdWV1ZSAqcSwgY2hhciBfX3VzZXIgKmJ1ZixcbitcdFx0XHQgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpXG4re1xuK1x0dTMyIHNpemUgPSBxLVx1MDAzZXF1ZXVlX3NpemU7XG4rXHRsb2ZmX3Qgb2ZmID0gKnBvcztcbitcdHNpemVfdCBjb3BpZWQgPSAwO1xuK1xuK1x0aWYgKG9mZiBcdTAwM2MgMClcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRpZiAob2ZmIFx1MDAzZT0gc2l6ZSB8fCAhY291bnQpXG4rXHRcdHJldHVybiAwO1xuK1x0Y291bnQgPSBtaW5fdChzaXplX3QsIGNvdW50LCBzaXplIC0gb2ZmKTtcbitcbitcdHdoaWxlIChjb3VudCkge1xuK1x0XHR1MzIgb2Zmc2V0ID0gb2ZmO1xuK1x0XHR1MzIgYXZhaWwgPSBtYW5hX2dkX3JpbmdfY29udGlnX2F2YWlsKHEsIG9mZnNldCk7XG4rXHRcdHNpemVfdCBjaHVuayA9IG1pbl90KHNpemVfdCwgY291bnQsIGF2YWlsKTtcbitcdFx0c2l6ZV90IGxlZnQgPSBjb3B5X3RvX3VzZXIoYnVmLCBtYW5hX2dkX3JpbmdfcHRyKHEsIG9mZnNldCksXG4rXHRcdFx0XHRcdCAgIGNodW5rKTtcbitcbitcdFx0Y2h1bmsgLT0gbGVmdDtcbitcdFx0YnVmICs9IGNodW5rO1xuK1x0XHRvZmYgKz0gY2h1bms7XG4rXHRcdGNvcGllZCArPSBjaHVuaztcbitcdFx0Y291bnQgLT0gY2h1bms7XG4rXHRcdGlmIChsZWZ0KVxuK1x0XHRcdGJyZWFrO1xuK1x0fVxuK1xuK1x0aWYgKCFjb3BpZWQpXG4rXHRcdHJldHVybiAtRUZBVUxUO1xuK1xuK1x0KnBvcyA9IG9mZjtcbitcdHJldHVybiBjb3BpZWQ7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIG1hbmFfZ2RfcHJvY2Vzc19lcWUoc3RydWN0IGdkbWFfcXVldWUgKmVxKVxuIHtcbiBcdHUzMiBoZWFkID0gZXEtXHUwMDNlaGVhZCAlIChlcS1cdTAwM2VxdWV1ZV9zaXplIC8gR0RNQV9FUUVfU0laRSk7XG4gXHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyA9IGVxLVx1MDAzZWdkbWFfZGV2LVx1MDAzZWdkbWFfY29udGV4dDtcbi1cdHN0cnVjdCBnZG1hX2VxZSAqZXFfZXFlX3B0ciA9IGVxLVx1MDAzZXF1ZXVlX21lbV9wdHI7XG4gXHR1bmlvbiBnZG1hX2VxZV9pbmZvIGVxZV9pbmZvO1xuIFx0ZW51bSBnZG1hX2VxZV90eXBlIHR5cGU7XG4gXHRzdHJ1Y3QgZ2RtYV9ldmVudCBldmVudDtcbkBAIC03NjUsNyArODk2LDcgQEAgc3RhdGljIHZvaWQgbWFuYV9nZF9wcm9jZXNzX2VxZShzdHJ1Y3QgZ2RtYV9xdWV1ZSAqZXEpXG4gXHRzdHJ1Y3QgZ2RtYV9lcWUgKmVxZTtcbiBcdHUzMiBjcV9pZDtcbiBcbi1cdGVxZSA9IFx1MDAyNmVxX2VxZV9wdHJbaGVhZF07XG4rXHRlcWUgPSBtYW5hX2dkX3JpbmdfcHRyKGVxLCBoZWFkICogc2l6ZW9mKCplcWUpKTtcbiBcdGVxZV9pbmZvLmFzX3VpbnQzMiA9IGVxZS1cdTAwM2VlcWVfaW5mbztcbiBcdHR5cGUgPSBlcWVfaW5mby50eXBlO1xuIFxuQEAgLTgyOSw3ICs5NjAsNiBAQCBzdGF0aWMgdm9pZCBtYW5hX2dkX3Byb2Nlc3NfZXFfZXZlbnRzKHZvaWQgKmFyZylcbiB7XG4gXHR1MzIgb3duZXJfYml0cywgbmV3X2JpdHMsIG9sZF9iaXRzO1xuIFx0dW5pb24gZ2RtYV9lcWVfaW5mbyBlcWVfaW5mbztcbi1cdHN0cnVjdCBnZG1hX2VxZSAqZXFfZXFlX3B0cjtcbiBcdHN0cnVjdCBnZG1hX3F1ZXVlICplcSA9IGFyZztcbiBcdHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjO1xuIFx0c3RydWN0IGdkbWFfZXFlICplcWU7XG5AQCAtODM5LDExICs5NjksMTAgQEAgc3RhdGljIHZvaWQgbWFuYV9nZF9wcm9jZXNzX2VxX2V2ZW50cyh2b2lkICphcmcpXG4gXHRnYyA9IGVxLVx1MDAzZWdkbWFfZGV2LVx1MDAzZWdkbWFfY29udGV4dDtcbiBcbiBcdG51bV9lcWUgPSBlcS1cdTAwM2VxdWV1ZV9zaXplIC8gR0RNQV9FUUVfU0laRTtcbi1cdGVxX2VxZV9wdHIgPSBlcS1cdTAwM2VxdWV1ZV9tZW1fcHRyO1xuIFxuIFx0LyogUHJvY2VzcyB1cCB0byA1IEVRRXMgYXQgYSB0aW1lLCBhbmQgdXBkYXRlIHRoZSBIVyBoZWFkLiAqL1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgNTsgaSsrKSB7XG4tXHRcdGVxZSA9IFx1MDAyNmVxX2VxZV9wdHJbZXEtXHUwMDNlaGVhZCAlIG51bV9lcWVdO1xuK1x0XHRlcWUgPSBtYW5hX2dkX3JpbmdfcHRyKGVxLCAoZXEtXHUwMDNlaGVhZCAlIG51bV9lcWUpICogc2l6ZW9mKCplcWUpKTtcbiBcdFx0ZXFlX2luZm8uYXNfdWludDMyID0gZXFlLVx1MDAzZWVxZV9pbmZvO1xuIFx0XHRvd25lcl9iaXRzID0gZXFlX2luZm8ub3duZXJfYml0cztcbiBcbkBAIC0xMTA3LDcgKzEyMzYsNyBAQCBpbnQgbWFuYV9nZF9jcmVhdGVfaHdjX3F1ZXVlKHN0cnVjdCBnZG1hX2RldiAqZ2QsXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIFx0Z21pID0gXHUwMDI2cXVldWUtXHUwMDNlbWVtX2luZm87XG4tXHRlcnIgPSBtYW5hX2dkX2FsbG9jX21lbW9yeShnYywgc3BlYy1cdTAwM2VxdWV1ZV9zaXplLCBnbWkpO1xuK1x0ZXJyID0gbWFuYV9nZF9hbGxvY19tZW1vcnkoZ2MsIHNwZWMtXHUwMDNlcXVldWVfc2l6ZSwgZ21pLCBmYWxzZSk7XG4gXHRpZiAoZXJyKSB7XG4gXHRcdGRldl9lcnIoZ2MtXHUwMDNlZGV2LCBcIkdETUEgcXVldWUgdHlwZTogJWQsIHNpemU6ICV1LCBnZG1hIG1lbW9yeSBhbGxvY2F0aW9uIGVycjogJWRcXG5cIixcbiBcdFx0XHRzcGVjLVx1MDAzZXR5cGUsIHNwZWMtXHUwMDNlcXVldWVfc2l6ZSwgZXJyKTtcbkBAIC0xMTgyLDcgKzEzMTEsNyBAQCBzdGF0aWMgaW50IG1hbmFfZ2RfY3JlYXRlX2RtYV9yZWdpb24oc3RydWN0IGdkbWFfZGV2ICpnZCxcbiBcdGlmIChsZW5ndGggXHUwMDNjIE1BTkFfUEFHRV9TSVpFIHx8ICFpc19wb3dlcl9vZl8yKGxlbmd0aCkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0aWYgKCFNQU5BX1BBR0VfQUxJR05FRChnbWktXHUwMDNldmlydF9hZGRyKSlcbitcdGlmIChnbWktXHUwMDNlbnJfcGFnZXMgPT0gMCBcdTAwMjZcdTAwMjYgIU1BTkFfUEFHRV9BTElHTkVEKGdtaS1cdTAwM2V2aXJ0X2FkZHIpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdGh3YyA9IGdjLVx1MDAzZWh3Yy5kcml2ZXJfZGF0YTtcbkBAIC0xMjAyLDggKzEzMzEsMjQgQEAgc3RhdGljIGludCBtYW5hX2dkX2NyZWF0ZV9kbWFfcmVnaW9uKHN0cnVjdCBnZG1hX2RldiAqZ2QsXG4gXHRyZXEtXHUwMDNlcGFnZV9jb3VudCA9IG51bV9wYWdlO1xuIFx0cmVxLVx1MDAzZXBhZ2VfYWRkcl9saXN0X2xlbiA9IG51bV9wYWdlO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX3BhZ2U7IGkrKylcbi1cdFx0cmVxLVx1MDAzZXBhZ2VfYWRkcl9saXN0W2ldID0gZ21pLVx1MDAzZWRtYV9oYW5kbGUgKyAgaSAqIE1BTkFfUEFHRV9TSVpFO1xuK1x0aWYgKGdtaS1cdTAwM2Vucl9wYWdlcyBcdTAwM2UgMCkge1xuK1x0XHR1bnNpZ25lZCBpbnQgc3VicGFnZXMgPSBQQUdFX1NJWkUgLyBNQU5BX1BBR0VfU0laRTtcbitcdFx0dW5zaWduZWQgaW50IGlkeCA9IDA7XG4rXHRcdHVuc2lnbmVkIGludCBwZywgc3ViO1xuK1xuK1x0XHQvKiBFYWNoIFBBR0VfU0laRSBjaHVuayBpcyBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgYW5kIGNvbnRhaW5zXG4rXHRcdCAqIFBBR0VfU0laRSAvIE1BTkFfUEFHRV9TSVpFIGNvbnNlY3V0aXZlIGRldmljZSBwYWdlcy5cbitcdFx0ICovXG4rXHRcdGZvciAocGcgPSAwOyBwZyBcdTAwM2MgZ21pLVx1MDAzZW5yX3BhZ2VzOyBwZysrKVxuK1x0XHRcdGZvciAoc3ViID0gMDsgc3ViIFx1MDAzYyBzdWJwYWdlczsgc3ViKyspXG4rXHRcdFx0XHRyZXEtXHUwMDNlcGFnZV9hZGRyX2xpc3RbaWR4KytdID1cbitcdFx0XHRcdFx0Z21pLVx1MDAzZXBhZ2VzX2RtYVtwZ10gK1xuK1x0XHRcdFx0XHRzdWIgKiBNQU5BX1BBR0VfU0laRTtcbitcdH0gZWxzZSB7XG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV9wYWdlOyBpKyspXG4rXHRcdFx0cmVxLVx1MDAzZXBhZ2VfYWRkcl9saXN0W2ldID1cbitcdFx0XHRcdGdtaS1cdTAwM2VkbWFfaGFuZGxlICsgaSAqIE1BTkFfUEFHRV9TSVpFO1xuK1x0fVxuIFxuIFx0ZXJyID0gbWFuYV9nZF9zZW5kX3JlcXVlc3QoZ2MsIHJlcV9tc2dfc2l6ZSwgcmVxLCBzaXplb2YocmVzcCksIFx1MDAyNnJlc3ApO1xuIFx0aWYgKGVycilcbkBAIC0xMjQ2LDcgKzEzOTEsNyBAQCBpbnQgbWFuYV9nZF9jcmVhdGVfbWFuYV9lcShzdHJ1Y3QgZ2RtYV9kZXYgKmdkLFxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiBcdGdtaSA9IFx1MDAyNnF1ZXVlLVx1MDAzZW1lbV9pbmZvO1xuLVx0ZXJyID0gbWFuYV9nZF9hbGxvY19tZW1vcnkoZ2MsIHNwZWMtXHUwMDNlcXVldWVfc2l6ZSwgZ21pKTtcbitcdGVyciA9IG1hbmFfZ2RfYWxsb2NfbWVtb3J5KGdjLCBzcGVjLVx1MDAzZXF1ZXVlX3NpemUsIGdtaSwgdHJ1ZSk7XG4gXHRpZiAoZXJyKSB7XG4gXHRcdGRldl9lcnIoZ2MtXHUwMDNlZGV2LCBcIkdETUEgcXVldWUgdHlwZTogJWQsIHNpemU6ICV1LCBnZG1hIG1lbW9yeSBhbGxvY2F0aW9uIGVycjogJWRcXG5cIixcbiBcdFx0XHRzcGVjLVx1MDAzZXR5cGUsIHNwZWMtXHUwMDNlcXVldWVfc2l6ZSwgZXJyKTtcbkBAIC0xMzAxLDcgKzE0NDYsNyBAQCBpbnQgbWFuYV9nZF9jcmVhdGVfbWFuYV93cV9jcShzdHJ1Y3QgZ2RtYV9kZXYgKmdkLFxuIFx0cXVldWUtXHUwMDNlaWQgPSBJTlZBTElEX1FVRVVFX0lEO1xuIFxuIFx0Z21pID0gXHUwMDI2cXVldWUtXHUwMDNlbWVtX2luZm87XG4tXHRlcnIgPSBtYW5hX2dkX2FsbG9jX21lbW9yeShnYywgc3BlYy1cdTAwM2VxdWV1ZV9zaXplLCBnbWkpO1xuK1x0ZXJyID0gbWFuYV9nZF9hbGxvY19tZW1vcnkoZ2MsIHNwZWMtXHUwMDNlcXVldWVfc2l6ZSwgZ21pLCB0cnVlKTtcbiBcdGlmIChlcnIpIHtcbiBcdFx0ZGV2X2VycihnYy1cdTAwM2VkZXYsIFwiR0RNQSBxdWV1ZSB0eXBlOiAlZCwgc2l6ZTogJXUsIG1lbW9yeSBhbGxvY2F0aW9uIGVycjogJWRcXG5cIixcbiBcdFx0XHRzcGVjLVx1MDAzZXR5cGUsIHNwZWMtXHUwMDNlcXVldWVfc2l6ZSwgZXJyKTtcbkBAIC0xNTA4LDcgKzE2NTMsNyBAQCB1OCAqbWFuYV9nZF9nZXRfd3FlX3B0cihjb25zdCBzdHJ1Y3QgZ2RtYV9xdWV1ZSAqd3EsIHUzMiB3cWVfb2Zmc2V0KVxuIFxuIFx0V0FSTl9PTl9PTkNFKChvZmZzZXQgKyBHRE1BX1dRRV9CVV9TSVpFKSBcdTAwM2Ugd3EtXHUwMDNlcXVldWVfc2l6ZSk7XG4gXG4tXHRyZXR1cm4gd3EtXHUwMDNlcXVldWVfbWVtX3B0ciArIG9mZnNldDtcbitcdHJldHVybiBtYW5hX2dkX3JpbmdfcHRyKHdxLCBvZmZzZXQpO1xuIH1cbiBcbiBzdGF0aWMgdTMyIG1hbmFfZ2Rfd3JpdGVfY2xpZW50X29vYihjb25zdCBzdHJ1Y3QgZ2RtYV93cWVfcmVxdWVzdCAqd3FlX3JlcSxcbkBAIC0xNTU0LDI3ICsxNjk5LDI0IEBAIHN0YXRpYyB1MzIgbWFuYV9nZF93cml0ZV9jbGllbnRfb29iKGNvbnN0IHN0cnVjdCBnZG1hX3dxZV9yZXF1ZXN0ICp3cWVfcmVxLFxuIFx0cmV0dXJuIHNpemVvZihoZWFkZXIpICsgY2xpZW50X29vYl9zaXplO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBtYW5hX2dkX3dyaXRlX3NnbChzdHJ1Y3QgZ2RtYV9xdWV1ZSAqd3EsIHU4ICp3cWVfcHRyLFxuK3N0YXRpYyB2b2lkIG1hbmFfZ2Rfd3JpdGVfc2dsKHN0cnVjdCBnZG1hX3F1ZXVlICp3cSwgdTMyIHNnbF9vZmZzZXQsXG4gXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGdkbWFfd3FlX3JlcXVlc3QgKndxZV9yZXEpXG4ge1xuK1x0dTMyIHNpemVfdG9fZW5kID0gbWFuYV9nZF9yaW5nX2NvbnRpZ19hdmFpbCh3cSwgc2dsX29mZnNldCk7XG4gXHR1MzIgc2dsX3NpemUgPSBzaXplb2Yoc3RydWN0IGdkbWFfc2dlKSAqIHdxZV9yZXEtXHUwMDNlbnVtX3NnZTtcbiBcdGNvbnN0IHU4ICphZGRyZXNzID0gKHU4ICopd3FlX3JlcS1cdTAwM2VzZ2w7XG4tXHR1OCAqYmFzZV9wdHIsICplbmRfcHRyO1xuLVx0dTMyIHNpemVfdG9fZW5kO1xuLVxuLVx0YmFzZV9wdHIgPSB3cS1cdTAwM2VxdWV1ZV9tZW1fcHRyO1xuLVx0ZW5kX3B0ciA9IGJhc2VfcHRyICsgd3EtXHUwMDNlcXVldWVfc2l6ZTtcbi1cdHNpemVfdG9fZW5kID0gKHUzMikoZW5kX3B0ciAtIHdxZV9wdHIpO1xuIFxuIFx0aWYgKHNpemVfdG9fZW5kIFx1MDAzYyBzZ2xfc2l6ZSkge1xuLVx0XHRtZW1jcHkod3FlX3B0ciwgYWRkcmVzcywgc2l6ZV90b19lbmQpO1xuK1x0XHRtZW1jcHkobWFuYV9nZF9yaW5nX3B0cih3cSwgc2dsX29mZnNldCksIGFkZHJlc3MsIHNpemVfdG9fZW5kKTtcbiBcbi1cdFx0d3FlX3B0ciA9IGJhc2VfcHRyO1xuIFx0XHRhZGRyZXNzICs9IHNpemVfdG9fZW5kO1xuIFx0XHRzZ2xfc2l6ZSAtPSBzaXplX3RvX2VuZDtcbitcdFx0c2dsX29mZnNldCArPSBzaXplX3RvX2VuZDtcbitcdFx0aWYgKHNnbF9vZmZzZXQgPT0gd3EtXHUwMDNlcXVldWVfc2l6ZSlcbitcdFx0XHRzZ2xfb2Zmc2V0ID0gMDtcbiBcdH1cbiBcbi1cdG1lbWNweSh3cWVfcHRyLCBhZGRyZXNzLCBzZ2xfc2l6ZSk7XG4rXHRtZW1jcHkobWFuYV9nZF9yaW5nX3B0cih3cSwgc2dsX29mZnNldCksIGFkZHJlc3MsIHNnbF9zaXplKTtcbiB9XG4gXG4gaW50IG1hbmFfZ2RfcG9zdF93b3JrX3JlcXVlc3Qoc3RydWN0IGdkbWFfcXVldWUgKndxLFxuQEAgLTE1ODQsOCArMTcyNiwxMiBAQCBpbnQgbWFuYV9nZF9wb3N0X3dvcmtfcmVxdWVzdChzdHJ1Y3QgZ2RtYV9xdWV1ZSAqd3EsXG4gXHR1MzIgY2xpZW50X29vYl9zaXplID0gd3FlX3JlcS1cdTAwM2VpbmxpbmVfb29iX3NpemU7XG4gXHR1MzIgc2dsX2RhdGFfc2l6ZTtcbiBcdHUzMiBtYXhfd3FlX3NpemU7XG4rXHR1MzIgd3FlX29mZnNldDtcbitcdHUzMiBzZ2xfb2Zmc2V0O1xuIFx0dTMyIHdxZV9zaXplO1xuK1x0dTMyIG9vYl9sZW47XG4gXHR1OCAqd3FlX3B0cjtcbitcdHUzMiBoZWFkO1xuIFxuIFx0aWYgKHdxZV9yZXEtXHUwMDNlbnVtX3NnZSA9PSAwKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC0xNjE3LDEzICsxNzYzLDE3IEBAIGludCBtYW5hX2dkX3Bvc3Rfd29ya19yZXF1ZXN0KHN0cnVjdCBnZG1hX3F1ZXVlICp3cSxcbiBcdGlmICh3cWVfaW5mbylcbiBcdFx0d3FlX2luZm8tXHUwMDNld3FlX3NpemVfaW5fYnUgPSB3cWVfc2l6ZSAvIEdETUFfV1FFX0JVX1NJWkU7XG4gXG4tXHR3cWVfcHRyID0gbWFuYV9nZF9nZXRfd3FlX3B0cih3cSwgd3EtXHUwMDNlaGVhZCk7XG4tXHR3cWVfcHRyICs9IG1hbmFfZ2Rfd3JpdGVfY2xpZW50X29vYih3cWVfcmVxLCB3cS1cdTAwM2V0eXBlLCBjbGllbnRfb29iX3NpemUsXG4tXHRcdFx0XHRcdCAgICBzZ2xfZGF0YV9zaXplLCB3cWVfcHRyKTtcbi1cdGlmICh3cWVfcHRyIFx1MDAzZT0gKHU4ICopd3EtXHUwMDNlcXVldWVfbWVtX3B0ciArIHdxLVx1MDAzZXF1ZXVlX3NpemUpXG4tXHRcdHdxZV9wdHIgLT0gd3EtXHUwMDNlcXVldWVfc2l6ZTtcbitcdGhlYWQgPSB3cS1cdTAwM2VoZWFkO1xuK1x0d3FlX29mZnNldCA9IChoZWFkICogR0RNQV9XUUVfQlVfU0laRSkgXHUwMDI2ICh3cS1cdTAwM2VxdWV1ZV9zaXplIC0gMSk7XG4rXHR3cWVfcHRyID0gbWFuYV9nZF9nZXRfd3FlX3B0cih3cSwgaGVhZCk7XG4rXHRvb2JfbGVuID0gbWFuYV9nZF93cml0ZV9jbGllbnRfb29iKHdxZV9yZXEsIHdxLVx1MDAzZXR5cGUsIGNsaWVudF9vb2Jfc2l6ZSxcbitcdFx0XHRcdFx0ICAgc2dsX2RhdGFfc2l6ZSwgd3FlX3B0cik7XG4rXG4rXHRzZ2xfb2Zmc2V0ID0gd3FlX29mZnNldCArIG9vYl9sZW47XG4rXHRpZiAoc2dsX29mZnNldCBcdTAwM2U9IHdxLVx1MDAzZXF1ZXVlX3NpemUpXG4rXHRcdHNnbF9vZmZzZXQgLT0gd3EtXHUwMDNlcXVldWVfc2l6ZTtcbiBcbi1cdG1hbmFfZ2Rfd3JpdGVfc2dsKHdxLCB3cWVfcHRyLCB3cWVfcmVxKTtcbitcdG1hbmFfZ2Rfd3JpdGVfc2dsKHdxLCBzZ2xfb2Zmc2V0LCB3cWVfcmVxKTtcbiBcbiBcdHdxLVx1MDAzZWhlYWQgKz0gd3FlX3NpemUgLyBHRE1BX1dRRV9CVV9TSVpFO1xuIFxuQEAgLTE2NTMsMTEgKzE4MDMsMTAgQEAgaW50IG1hbmFfZ2RfcG9zdF9hbmRfcmluZyhzdHJ1Y3QgZ2RtYV9xdWV1ZSAqcXVldWUsXG4gc3RhdGljIGludCBtYW5hX2dkX3JlYWRfY3FlKHN0cnVjdCBnZG1hX3F1ZXVlICpjcSwgc3RydWN0IGdkbWFfY29tcCAqY29tcClcbiB7XG4gXHR1bnNpZ25lZCBpbnQgbnVtX2NxZSA9IGNxLVx1MDAzZXF1ZXVlX3NpemUgLyBzaXplb2Yoc3RydWN0IGdkbWFfY3FlKTtcbi1cdHN0cnVjdCBnZG1hX2NxZSAqY3FfY3FlID0gY3EtXHUwMDNlcXVldWVfbWVtX3B0cjtcbiBcdHUzMiBvd25lcl9iaXRzLCBuZXdfYml0cywgb2xkX2JpdHM7XG4gXHRzdHJ1Y3QgZ2RtYV9jcWUgKmNxZTtcbiBcbi1cdGNxZSA9IFx1MDAyNmNxX2NxZVtjcS1cdTAwM2VoZWFkICUgbnVtX2NxZV07XG4rXHRjcWUgPSBtYW5hX2dkX3JpbmdfcHRyKGNxLCAoY3EtXHUwMDNlaGVhZCAlIG51bV9jcWUpICogc2l6ZW9mKCpjcWUpKTtcbiBcdG93bmVyX2JpdHMgPSBjcWUtXHUwMDNlY3FlX2luZm8ub3duZXJfYml0cztcbiBcbiBcdG9sZF9iaXRzID0gKGNxLVx1MDAzZWhlYWQgLyBudW1fY3FlIC0gMSkgXHUwMDI2IEdETUFfQ1FFX09XTkVSX01BU0s7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvaHdfY2hhbm5lbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvaHdfY2hhbm5lbC5jXG5pbmRleCBlM2MyNGQ1MGRhZDA3Li4yNjNlN2M0ZTI5MzQxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvaHdfY2hhbm5lbC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9od19jaGFubmVsLmNcbkBAIC00NzksNyArNDc5LDcgQEAgc3RhdGljIGludCBtYW5hX2h3Y19hbGxvY19kbWFfYnVmKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTE2IHFfZGVwdGgsXG4gXHRidWZfc2l6ZSA9IE1BTkFfUEFHRV9BTElHTihxX2RlcHRoICogbWF4X21zZ19zaXplKTtcbiBcbiBcdGdtaSA9IFx1MDAyNmRtYV9idWYtXHUwMDNlbWVtX2luZm87XG4tXHRlcnIgPSBtYW5hX2dkX2FsbG9jX21lbW9yeShnYywgYnVmX3NpemUsIGdtaSk7XG4rXHRlcnIgPSBtYW5hX2dkX2FsbG9jX21lbW9yeShnYywgYnVmX3NpemUsIGdtaSwgZmFsc2UpO1xuIFx0aWYgKGVycikge1xuIFx0XHRkZXZfZXJyKGh3Yy1cdTAwM2VkZXYsIFwiRmFpbGVkIHRvIGFsbG9jYXRlIERNQSBidWZmZXIgc2l6ZTogJXUsIGVyciAlZFxcblwiLFxuIFx0XHRcdGJ1Zl9zaXplLCBlcnIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uY1xuaW5kZXggMjUxOWE5OGFkMDBiMC4uYjgwMzcxMTk2ODA0MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jXG5AQCAtNDAsNiArNDAsOSBAQCBzdGF0aWMgc3NpemVfdCBtYW5hX2RiZ19xX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudFxuIHtcbiBcdHN0cnVjdCBnZG1hX3F1ZXVlICpnZG1hX3EgPSBmaWxwLVx1MDAzZXByaXZhdGVfZGF0YTtcbiBcbitcdGlmIChnZG1hX3EtXHUwMDNlbWVtX2luZm8ubnJfcGFnZXMpXG4rXHRcdHJldHVybiBtYW5hX2dkX3JlYWRfcmluZyhnZG1hX3EsIGJ1ZiwgY291bnQsIHBvcyk7XG4rXG4gXHRyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIoYnVmLCBjb3VudCwgcG9zLCBnZG1hX3EtXHUwMDNlcXVldWVfbWVtX3B0cixcbiBcdFx0XHRcdCAgICAgICBnZG1hX3EtXHUwMDNlcXVldWVfc2l6ZSk7XG4gfVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21hbmEvZ2RtYS5oIGIvaW5jbHVkZS9uZXQvbWFuYS9nZG1hLmhcbmluZGV4IDg1MjljZWYwZDdjNDUuLmIwYjMyMmE4MGI2MjkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9tYW5hL2dkbWEuaFxuKysrIGIvaW5jbHVkZS9uZXQvbWFuYS9nZG1hLmhcbkBAIC0yNDAsNiArMjQwLDE0IEBAIHN0cnVjdCBnZG1hX21lbV9pbmZvIHtcbiBcdHZvaWQgKnZpcnRfYWRkcjtcbiBcdHU2NCBsZW5ndGg7XG4gXG4rXHQvKiBTY2F0dGVyZWQgZmFsbGJhY2s6IHdoZW4gQG5yX3BhZ2VzIFx1MDAzZSAwIHRoZSByaW5nIGlzIHRoYXQgbWFueVxuK1x0ICogUEFHRV9TSVpFIGNvaGVyZW50IGFsbG9jYXRpb25zIGluIEBwYWdlc192YS9AcGFnZXNfZG1hLCBub3RcbitcdCAqIEB2aXJ0X2FkZHIvQGRtYV9oYW5kbGUuXG4rXHQgKi9cbitcdHZvaWQgKipwYWdlc192YTtcbitcdGRtYV9hZGRyX3QgKnBhZ2VzX2RtYTtcbitcdHVuc2lnbmVkIGludCBucl9wYWdlcztcbitcbiBcdC8qIEFsbG9jYXRlZCBieSB0aGUgUEYgZHJpdmVyICovXG4gXHR1NjQgZG1hX3JlZ2lvbl9oYW5kbGU7XG4gfTtcbkBAIC01MTIsNiArNTIwLDkgQEAgaW50IG1hbmFfZ2RfcG9sbF9jcShzdHJ1Y3QgZ2RtYV9xdWV1ZSAqY3EsIHN0cnVjdCBnZG1hX2NvbXAgKmNvbXAsIGludCBudW1fY3FlKTtcbiBcbiB2b2lkIG1hbmFfZ2RfcmluZ19jcShzdHJ1Y3QgZ2RtYV9xdWV1ZSAqY3EsIHU4IGFybV9iaXQpO1xuIFxuK3NzaXplX3QgbWFuYV9nZF9yZWFkX3Jpbmcoc3RydWN0IGdkbWFfcXVldWUgKnEsIGNoYXIgX191c2VyICpidWYsXG4rXHRcdFx0ICBzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKTtcbitcbiBpbnQgbWFuYV9zY2hlZHVsZV9zZXJ2X3dvcmsoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MsIGVudW0gZ2RtYV9lcWVfdHlwZSB0eXBlKTtcbiBcbiB2b2lkIG1hbmFfZ2RfcmluZ19kaW0oc3RydWN0IGdkbWFfcXVldWUgKmNxLCB1MzIgbW9kX3VzZWMsIGJvb2wgbW9kX3VzZWNfdmxkLFxuQEAgLTY2OCw2ICs2NzksOSBAQCBlbnVtIHtcbiAvKiBEcml2ZXIgc3VwcG9ydHMgZHluYW1pYyBpbnRlcnJ1cHQgbW9kZXJhdGlvbiAtIERJTSAqL1xuICNkZWZpbmUgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9EWU5fSU5URVJSVVBUX01PREVSQVRJT04gQklUKDI4KVxuIFxuKy8qIERyaXZlciBzdXBwb3J0cyBub24tY29udGlndW91cyBxdWV1ZSBidWZmZXJzICovXG4rI2RlZmluZSBHRE1BX0RSVl9DQVBfRkxBR18xX05PTl9DT05USUdVT1VTX0JVRkZFUlMgQklUKDMwKVxuK1xuICNkZWZpbmUgR0RNQV9EUlZfQ0FQX0ZMQUdTMSBcXFxuIFx0KEdETUFfRFJWX0NBUF9GTEFHXzFfRVFfU0hBUklOR19NVUxUSV9WUE9SVCB8IFxcXG4gXHQgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9OQVBJX1dLRE9ORV9GSVggfCBcXFxuQEAgLTY4NCw3ICs2OTgsOCBAQCBlbnVtIHtcbiBcdCBHRE1BX0RSVl9DQVBfRkxBR18xX0hBTkRMRV9TVEFMTF9TUV9SRUNPVkVSWSB8IFxcXG4gXHQgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9IV0NfVElNRU9VVF9SRUNPVkVSWSB8IFxcXG4gXHQgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9FUV9NU0lfVU5TSEFSRV9NVUxUSV9WUE9SVCB8IFxcXG4tXHQgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9EWU5fSU5URVJSVVBUX01PREVSQVRJT04pXG4rXHQgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9EWU5fSU5URVJSVVBUX01PREVSQVRJT04gfCBcXFxuK1x0IEdETUFfRFJWX0NBUF9GTEFHXzFfTk9OX0NPTlRJR1VPVVNfQlVGRkVSUylcbiBcbiAjZGVmaW5lIEdETUFfRFJWX0NBUF9GTEFHUzIgMFxuIFxuQEAgLTEwNDUsNyArMTA2MCw3IEBAIHZvaWQgbWFuYV9nZF93cV9yaW5nX2Rvb3JiZWxsKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjLFxuIFx0XHRcdCAgICAgIHN0cnVjdCBnZG1hX3F1ZXVlICpxdWV1ZSk7XG4gXG4gaW50IG1hbmFfZ2RfYWxsb2NfbWVtb3J5KHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjLCB1bnNpZ25lZCBpbnQgbGVuZ3RoLFxuLVx0XHRcdCBzdHJ1Y3QgZ2RtYV9tZW1faW5mbyAqZ21pKTtcbitcdFx0XHQgc3RydWN0IGdkbWFfbWVtX2luZm8gKmdtaSwgYm9vbCBhbGxvd19zY2F0dGVyKTtcbiBcbiB2b2lkIG1hbmFfZ2RfZnJlZV9tZW1vcnkoc3RydWN0IGdkbWFfbWVtX2luZm8gKmdtaSk7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMjowMzo0NS42MTY4NzE2MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0NDMyODE2MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGdXp6aW5nIFBvdGVudGlhbCBvZiBUaGlzIE1BTkEgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHRvdWNoZXMgYGdkbWFfbWFpbi5jYCwgYGh3X2NoYW5uZWwuY2AsIGBtYW5hX2VuLmNgLCBhbmQgYGdkbWEuaGAg4oCTIGFsbCB3aXRoaW4gdGhlIE1BTkEgZHJpdmVyLCB3aGljaCBzZWVtcyB0byBiZSB0aGUgTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlci4gSXQncyBhZGRpbmcgc3VwcG9ydCBmb3Igc2NhdHRlcmVkIGZhbGxiYWNrIG1lbW9yeSBhbGxvY2F0aW9uLCB3aGljaCBpcyBpbnRlcmVzdGluZyBpbiBpdHNlbGYuIEJ1dCBoZXJlJ3MgdGhlIGNydWNpYWwgcXVlc3Rpb246IGlzIHRoaXMgcGF0Y2ggd29ydGggZnV6emluZywgYmFzZWQgb24gdGhlIHNwZWNpZmljIGNyaXRlcmlhP1xuXG5MZXQncyBzZWUsIHRoZSBpbnN0cnVjdGlvbnMgc3RhdGUgdGhhdCBhIHBhdGNoIGlzbid0IHdvcnRoIGZ1enppbmcgaWYgaXQncyBnb3QgY29kZSB0aGF0J3MgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciByZWxpZXMgb24gc3BlY2lhbGl6ZWQgaGFyZHdhcmUuIFNvLCBteSBpbml0aWFsIHRob3VnaHQgaXMsIE1BTkEgaXMgYSB2aXJ0dWFsaXplZCBuZXR3b3JrIGRyaXZlciwgdXNlZCBpbiBBenVyZSwgc3BlY2lmaWNhbGx5IEh5cGVyLVYsIGFuZCBJJ20gcHJldHR5IHN1cmUgaXQgZG9lc24ndCBydW4gaW4gc3RhbmRhcmQgUUVNVS4gVGhhdCdzIGEgcmVkIGZsYWcuIEJ1dCB3YWl0LCBjYW4gSHlwZXItViBndWVzdHMgcnVuIGluIFFFTVU/IEhtbSwgbm90IHdpdGggdGhpcyBNQU5BIGhhcmR3YXJlLCBpdCdzIGEgc3BlY2lmaWMgQXp1cmUgU1ItSU9WIGFkYXB0ZXIuIEl0J3MgYW4gQXp1cmUtc3BlY2lmaWMgaGFyZHdhcmUuIFNvLCBNQU5BIGlzIHZlbmRvci1zcGVjaWZpYywgYnV0IG5vdCBhIFNtYXJ0TklDIG9yIEdQVSBkcml2ZXIgbGlrZSB0aGUgY3JpdGVyaWEgZGVzY3JpYmUsIGFuZCBJJ20gY2VydGFpbiBpdCBpc24ndCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuXG5JdCBpcyBhIFBDSSBkZXZpY2UsIHNwZWNpZmljYWxseSB0aGUgTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlci4gQ2FuIHN5emthbGxlciBldmVuIHRvdWNoIGl0PyBTeXprYWxsZXIgcnVucyBpbiBRRU1VL0dDRSwgcmlnaHQ/IEFuZCBpdCBzdXJlIGRvZXNuJ3QgaGF2ZSBNQU5BIGhhcmR3YXJlLi4uIHRoYXQncyBhIHByb2JsZW0uIFN5emthbGxlciBkb2Vzbid0IGVtdWxhdGUgTUFOQS4gVGhpcyBsb29rcyBsaWtlIGEgZGVmaW5pdGUgbm8tZ28gZm9yIHN0YW5kYXJkIGZ1enppbmcuIEp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIGlmIHRoZSBNQU5BIGNvZGUgaXMgcmVhY2hhYmxlLCBvciBkZXBlbmRlbnQgb24gYW55IHNwZWNpZmljIGhhcmR3YXJlIHRoYXQgbWFrZXMgaXQgaW5hY2Nlc3NpYmxlIHRvIHRoZSBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50LiBBIHF1aWNrIGBtYW5hYCBzZWFyY2ggaW4gdGhlIGtlcm5lbCBzaG91bGQgcHJvdmlkZSBjb25maXJtYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2MDksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMjowMzo1My4wNjAxNTU3NDlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgwMTIwMTg2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfTUlDUk9TT0ZUX01BTkFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L01ha2VmaWxlLTQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX01JQ1JPU09GVF9NQU5BKSArPSBtYW5hL1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvTWFrZWZpbGUtNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9NYWtlZmlsZTo1Om9iai0kKENPTkZJR19NSUNST1NPRlRfTUFOQSkgKz0gbWFuYS5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvTWFrZWZpbGUtNi1tYW5hLW9ianMgOj0gZ2RtYV9tYWluLm8gc2htX2NoYW5uZWwubyBod19jaGFubmVsLm8gbWFuYV9lbi5vIG1hbmFfZXRodG9vbC5vIG1hbmFfYnBmLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjI6MDM6NTQuODYxMzY1MDAxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk3NDYyNTQ3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBDb2RlIFBhdGhzIGluIHRoZSBNQU5BIERyaXZlcioqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgbmVlZCB0byByZXRoaW5rIHRoaXMuIEl0IGp1c3QgaGl0IG1lOiBzeXprYWxsZXIsIGFzIGZhciBhcyBJIHVuZGVyc3RhbmQgaXQsIGRvZXNuJ3QgYWN0dWFsbHkgZW11bGF0ZSB0aGUgTUFOQSBQQ0kgZGV2aWNlcy4gVGhhdCBwcmVzZW50cyBhIHNlcmlvdXMgaHVyZGxlLiBJIHdhcyBhc3N1bWluZyBpdCBjb3VsZCwgYnV0IG5vdyBJJ20gcXVlc3Rpb25pbmcgdGhlIGJhc2lzIG9mIG15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzLlxuXG5TbywgaWYgc3l6a2FsbGVyIGlzbid0IG91ciByb3V0ZSBpbiwgaG93ICplbHNlKiBjYW4gd2UgZXhlcmNpc2UgdGhpcyBzcGVjaWZpYyBjb2RlPyBUaGUgZHJpdmVyJ3MgYXJjaGl0ZWN0dXJlIGxlYW5zIG9uIGJlaW5nIGEgUENJIGRyaXZlciwgd2hpY2ggbWVhbnMgaXQgc2hvdWxkIGJlIGxvYWRlZCBhbmQgbWFuYWdlZCB0aHJvdWdoIHRoZSBQQ0kgc3Vic3lzdGVtLiBJIG5lZWQgdG8gY29uZmlybSBpZiB0aGVyZSBhcmUgYWx0ZXJuYXRpdmUgZW50cnkgcG9pbnRzIGJleW9uZCB0aGUgc2ltdWxhdGVkIGVudmlyb25tZW50LlxuXG5UbyBzdGFydCwgbGV0IG1lIHF1aWNrbHkgcGl2b3QgdG8gYGRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jYCBhbmQgc3BlY2lmaWNhbGx5IGxvb2sgZm9yIHJlZmVyZW5jZXMgdG8gYHBjaV9kcml2ZXJgLiBUaGlzIHNob3VsZCBwcm92aWRlIGNydWNpYWwgaW5zaWdodHMuIEJ5IGV4YW1pbmluZyBob3cgdGhlIGRyaXZlciByZWdpc3RlcnMgd2l0aCBhbmQgaW50ZXJhY3RzIHdpdGggdGhlIFBDSSBidXMsIEkgY2FuIGdldCBhIGJldHRlciBncmlwIG9uIHdoZXRoZXIgdGhpcyBjb2RlIGlzIGV2ZW4gcmVtb3RlbHkgcmVhY2hhYmxlIGdpdmVuIG91ciBjdXJyZW50IGNvbnN0cmFpbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTkyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjI6MDM6NTguODM1OTkzNTA0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NzY3MDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBjaV9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jPTI3MDA9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIG1hbmFfaWRfdGFibGVbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jLTI3MDYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmM6MjcwNzpzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbWFuYV9kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMtMjcwOC1cXHQubmFtZVxcdFxcdD0gXFxcIm1hbmFcXFwiLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMjowMzo1OC44ODM3Njg1MTlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjkyMzM0NDAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQ6IE1BTkEgRHJpdmVyIEZ1enppbmcgSW5mZWFzaWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIHRoaW5rIHRoaXMgdGhyb3VnaC4gVGhpcyBpcyBhIFBDSSBkcml2ZXIgc3BlY2lmaWNhbGx5IGZvciB0aGUgTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlciwgTUFOQS4gQW5kIGZyb20gd2hhdCBJIHVuZGVyc3RhbmQsIGl0J3Mgbm90IHNvbWV0aGluZyB5b3UgY2FuIGp1c3Qgc3BpbiB1cCBhbmQgcGxheSB3aXRoIGluIGEgc3RhbmRhcmQgUUVNVSBvciBHQ0UgZW52aXJvbm1lbnQuIEl0J3MgYSB2ZW5kb3Itc3BlY2lmaWMgcGllY2Ugb2YgaGFyZHdhcmUgdGhhdCBuZWNlc3NpdGF0ZXMgYWN0dWFsLCBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlLCBvciBhdCBsZWFzdCBhIHZlcnkgc3BlY2lhbGl6ZWQgZW11bGF0aW9uLlxuXG5HaXZlbiB0aGF0LCB0aGlzIGltbWVkaWF0ZWx5IHNjcmVhbXMgXCJXb3J0aEZ1enppbmc9ZmFsc2VcIi4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGUgaW5zdHJ1Y3Rpb25zIGZvciBldmFsdWF0aW5nIHRoZSBwYXRjaDogYW0gSSBkZWFsaW5nIHdpdGggY29kZSBpbXBvc3NpYmxlIHRvIHRvdWNoIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQg4oCTIGV2ZW4gaWYgdGhhdCBlbnZpcm9ubWVudCBoYXMgY2xldmVyIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLiBJdCBzZWVtcyBsaWtlIGEgbG90IG9mIHRoZSBleGFtcGxlcyB3ZXJlIFBDSS1iYXNlZCBhbmQvb3IgU21hcnROSUMncyAtIHNpbWlsYXIgdG8gbXkgY3VycmVudCBzaXR1YXRpb24uXG5cbkkndmUgZ29uZSB0aHJvdWdoIHRoZSBndWlkZWxpbmVzLCBhbmQgaXQncyBjbGVhcjogdmVuZG9yLXNwZWNpZmljIFBDSWUgZHJpdmVycyBsaWtlIE1BTkEg4oCTIGRlc2lnbmVkIGZvciBwaHlzaWNhbCBoYXJkd2FyZSB0aGF0IFFFTVUgZG9lc24ndCwgYW5kIHByb2JhYmx5ICpjYW4ndCosIGVtdWxhdGUg4oCTIGFyZSBleGFjdGx5IHRoZSBjYXRlZ29yeSB0aGF0IGRpc3F1YWxpZmllcyBpdC4gVGhlIE1BTkEgZHJpdmVyIGlzIHRoZSBzYW1lOyBpdCdzIGhhcmR3YXJlLWRlcGVuZGVudCwgc28gSSBuZWVkIHRvIHNldCB0aGUgZnV6emluZyBmbGFnIHRvIGZhbHNlLiBJIHdpbGwgbWFyayBpdCBhcyBzdWNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDA2NCwiT3V0cHV0VG9rZW5zIjo4NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMjowNDowNS4xNzYxMDU3MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1pY3Jvc29mdCBBenVyZSBOZXR3b3JrIEFkYXB0ZXIgKE1BTkEpIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBkZXZpY2UgZHJpdmVyLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudHMgdXNlZCBieSBzeXprYWxsZXIsIG1ha2luZyB0aGUgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBkdXJpbmcgc3RhbmRhcmQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyIChNQU5BKSBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgZGV2aWNlIGRyaXZlci4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgZW52aXJvbm1lbnRzIHVzZWQgYnkgc3l6a2FsbGVyLCBtYWtpbmcgdGhlIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIHN0YW5kYXJkIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMjowNDowNS4xNzYxMzNaIiwiU2VxIjo5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow9p4jl[1] Phase: Running StartedAt: 2026-08-07 22:04:43 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9p4jl[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-07 22:04:43 +0000 UTC FinishedAt: 2026-08-07 22:04:47 +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,}